From c65f856878e9909599c9643d402cbdfc0d7a0595 Mon Sep 17 00:00:00 2001 From: Kilian Saffran Date: Fri, 13 Nov 2020 09:48:23 +0100 Subject: [PATCH] v20201113 --- .gitignore | 1 + admin/.htaccess | 9 + admin/css/fonts/appicons.svg | 57 + admin/css/fonts/appicons.ttf | Bin 0 -> 11928 bytes admin/css/fonts/appicons.woff | Bin 0 -> 12004 bytes admin/css/icons.css | 167 + admin/css/theme.css | 1054 + admin/db.php | 59 + admin/img/POT-logo.png | Bin 0 -> 20930 bytes admin/img/applogo.png | Bin 0 -> 14719 bytes admin/img/bg1.jpg | Bin 0 -> 135161 bytes admin/img/favicon/android-icon-144x144.png | Bin 0 -> 5492 bytes admin/img/favicon/android-icon-192x192.png | Bin 0 -> 7789 bytes admin/img/favicon/android-icon-36x36.png | Bin 0 -> 1113 bytes admin/img/favicon/android-icon-48x48.png | Bin 0 -> 1611 bytes admin/img/favicon/android-icon-72x72.png | Bin 0 -> 2523 bytes admin/img/favicon/android-icon-96x96.png | Bin 0 -> 3555 bytes admin/img/favicon/apple-icon-114x114.png | Bin 0 -> 4215 bytes admin/img/favicon/apple-icon-120x120.png | Bin 0 -> 4532 bytes admin/img/favicon/apple-icon-144x144.png | Bin 0 -> 5513 bytes admin/img/favicon/apple-icon-152x152.png | Bin 0 -> 5899 bytes admin/img/favicon/apple-icon-180x180.png | Bin 0 -> 7250 bytes admin/img/favicon/apple-icon-57x57.png | Bin 0 -> 1917 bytes admin/img/favicon/apple-icon-60x60.png | Bin 0 -> 2112 bytes admin/img/favicon/apple-icon-72x72.png | Bin 0 -> 2523 bytes admin/img/favicon/apple-icon-76x76.png | Bin 0 -> 2700 bytes admin/img/favicon/apple-icon-precomposed.png | Bin 0 -> 7789 bytes admin/img/favicon/apple-icon.png | Bin 0 -> 7789 bytes admin/img/favicon/browserconfig.xml | 2 + admin/img/favicon/favicon-16x16.png | Bin 0 -> 458 bytes admin/img/favicon/favicon-32x32.png | Bin 0 -> 988 bytes admin/img/favicon/favicon-96x96.png | Bin 0 -> 3560 bytes admin/img/favicon/favicon.ico | Bin 0 -> 1150 bytes admin/img/favicon/manifest.json | 40 + admin/img/favicon/ms-icon-144x144.png | Bin 0 -> 5495 bytes admin/img/favicon/ms-icon-150x150.png | Bin 0 -> 5802 bytes admin/img/favicon/ms-icon-310x310.png | Bin 0 -> 6909 bytes admin/img/favicon/ms-icon-70x70.png | Bin 0 -> 2501 bytes admin/img/logo_512.png | Bin 0 -> 31456 bytes admin/img/potbg.jpg | Bin 0 -> 663960 bytes admin/img/poticon512.png | Bin 0 -> 31211 bytes admin/img/potlogowhite.svg | 133 + admin/img/pottop.png | Bin 0 -> 2689 bytes admin/img/toplogo.png | Bin 0 -> 31456 bytes admin/index.php | 121 + admin/js/app.js | 78 + admin/js/dataform.js | 263 + admin/js/modules/galleries.js | 20 + .../js/modules/home.js | 0 admin/js/modules/rendezvous.js | 0 admin/js/modules/shop.js | 0 admin/js/modules/users.js | 0 admin/js/modules/websites.js | 0 admin/js/report.js | 13 + admin/js/request.js | 56 + admin/js/timecalc.js | 128 + .../js/vendors}/flatpickr/flatpickr.css | 0 .../js/vendors}/flatpickr/flatpickr.js | 64 +- .../js/vendors}/flatpickr/flatpickr.min.css | 0 .../js/vendors}/flatpickr/flatpickr.min.js | 0 .../js/vendors}/flatpickr/ie.css | 0 .../js/vendors}/flatpickr/index.d.ts | 0 .../js/vendors}/flatpickr/l10n/de.d.ts | 0 .../js/vendors}/flatpickr/l10n/de.js | 0 .../js/vendors}/flatpickr/l10n/default.d.ts | 0 .../js/vendors}/flatpickr/l10n/default.js | 0 .../js/vendors}/flatpickr/l10n/fr.d.ts | 0 .../js/vendors}/flatpickr/l10n/fr.js | 0 .../js/vendors}/flatpickr/l10n/index.d.ts | 0 .../js/vendors}/flatpickr/l10n/index.js | 0 .../plugins/confirmDate/confirmDate.css | 0 .../plugins/confirmDate/confirmDate.d.ts | 0 .../plugins/confirmDate/confirmDate.js | 48 +- .../plugins/labelPlugin/labelPlugin.d.ts | 0 .../plugins/labelPlugin/labelPlugin.js | 0 .../flatpickr/plugins/minMaxTimePlugin.d.ts | 0 .../flatpickr/plugins/minMaxTimePlugin.js | 0 .../flatpickr/plugins/momentPlugin.d.ts | 0 .../flatpickr/plugins/momentPlugin.js | 0 .../flatpickr/plugins/monthSelect/index.d.ts | 0 .../flatpickr/plugins/monthSelect/index.js | 48 +- .../flatpickr/plugins/monthSelect/style.css | 0 .../plugins/monthSelect/tests.spec.d.ts | 0 .../flatpickr/plugins/rangePlugin.d.ts | 0 .../vendors}/flatpickr/plugins/rangePlugin.js | 0 .../flatpickr/plugins/scrollPlugin.d.ts | 0 .../flatpickr/plugins/scrollPlugin.js | 0 .../plugins/weekSelect/weekSelect.d.ts | 0 .../plugins/weekSelect/weekSelect.js | 0 .../js/vendors}/flatpickr/themes/airbnb.css | 0 .../js/vendors}/flatpickr/types/globals.d.ts | 0 .../js/vendors}/flatpickr/types/instance.d.ts | 0 .../js/vendors}/flatpickr/types/locale.d.ts | 0 .../js/vendors}/flatpickr/types/options.d.ts | 0 .../js/vendors}/flatpickr/typings.d.ts | 0 .../js/vendors}/flatpickr/utils/dates.d.ts | 0 .../js/vendors}/flatpickr/utils/dom.d.ts | 0 .../vendors}/flatpickr/utils/formatting.d.ts | 0 .../js/vendors}/flatpickr/utils/index.d.ts | 0 .../js/vendors/flatpickr/utils/polyfills.d.ts | 0 admin/js/vendors/moment/locales.js | 12105 ++++++++ admin/js/vendors/moment/locales.min.js | 2 + admin/js/vendors/moment/locales.min.js.map | 1 + .../js/vendors/moment/moment-with-locales.js | 17757 ++++++++++++ .../vendors/moment/moment-with-locales.min.js | 2 + .../moment/moment-with-locales.min.js.map | 1 + admin/js/vendors/moment/moment.js | 5668 ++++ admin/js/vendors/moment/moment.min.js | 2 + admin/js/vendors/moment/moment.min.js.map | 1 + .../js/vendors}/slimselect/slimselect.css | 38 +- .../js/vendors/slimselect/slimselect.min.css | 1 + .../js/vendors}/slimselect/slimselect.min.js | 0 .../slimselect/slimselect.min.orig.css | 0 .../vendors/slimselect/slimselect.min.xx.js | 1 + .../js/vendors}/slimselect/slimselect.scss | 0 .../js/vendors/slimselect/slimselect.xx.js | 0 .../js/vendors}/tabulator/css/tabulator.css | 115 +- .../vendors/tabulator/css/tabulator.min.css | 3 + .../tabulator/css/tabulator.min.css.map | 1 + .../vendors}/tabulator/css/tabulator_site.css | 161 +- .../tabulator/css/tabulator_site.min.css | 1 + .../tabulator/css/tabulator_site.min.css.map | 1 + .../tabulator/css/tabulator_site.min.orig.css | 3 + .../vendors}/tabulator/js/modules/accessor.js | 20 +- .../tabulator/js/modules/accessor.min.js | 2 + .../js/vendors}/tabulator/js/modules/ajax.js | 2 +- .../vendors}/tabulator/js/modules/ajax.min.js | 2 +- .../js/modules/calculation_colums.js | 57 +- .../js/modules/calculation_colums.min.js | 2 + .../tabulator/js/modules/clipboard.js | 31 +- .../tabulator/js/modules/clipboard.min.js | 2 + .../tabulator/js/modules/data_tree.js | 32 +- .../tabulator/js/modules/data_tree.min.js | 2 + .../vendors}/tabulator/js/modules/download.js | 8 +- .../tabulator/js/modules/download.min.js | 2 + .../js/vendors}/tabulator/js/modules/edit.js | 157 +- .../vendors/tabulator/js/modules/edit.min.js | 2 + .../vendors}/tabulator/js/modules/export.js | 22 +- .../tabulator/js/modules/export.min.js | 2 + .../vendors}/tabulator/js/modules/filter.js | 4 +- .../tabulator/js/modules/filter.min.js | 4 +- .../vendors}/tabulator/js/modules/format.js | 26 +- .../tabulator/js/modules/format.min.js | 2 + .../tabulator/js/modules/frozen_columns.js | 2 +- .../js/modules/frozen_columns.min.js | 2 +- .../tabulator/js/modules/frozen_rows.js | 18 +- .../tabulator/js/modules/frozen_rows.min.js | 4 +- .../tabulator/js/modules/group_rows.js | 43 +- .../tabulator/js/modules/group_rows.min.js | 2 + .../vendors}/tabulator/js/modules/history.js | 17 +- .../tabulator/js/modules/history.min.js | 2 + .../tabulator/js/modules/html_table_import.js | 2 +- .../js/modules/html_table_import.min.js | 2 +- .../tabulator/js/modules/keybindings.js | 2 +- .../tabulator/js/modules/keybindings.min.js | 2 +- .../js/vendors}/tabulator/js/modules/menu.js | 121 +- .../vendors/tabulator/js/modules/menu.min.js | 2 + .../tabulator/js/modules/moveable_columns.js | 2 +- .../js/modules/moveable_columns.min.js | 2 +- .../tabulator/js/modules/moveable_rows.js | 2 +- .../tabulator/js/modules/moveable_rows.min.js | 2 +- .../vendors}/tabulator/js/modules/mutator.js | 2 +- .../tabulator/js/modules/mutator.min.js | 2 +- .../js/vendors}/tabulator/js/modules/page.js | 12 +- .../vendors/tabulator/js/modules/page.min.js | 2 + .../tabulator/js/modules/persistence.js | 11 +- .../tabulator/js/modules/persistence.min.js | 4 +- .../js/vendors}/tabulator/js/modules/print.js | 2 +- .../tabulator/js/modules/print.min.js | 2 +- .../tabulator/js/modules/reactive_data.js | 94 +- .../tabulator/js/modules/reactive_data.min.js | 2 + .../tabulator/js/modules/resize_columns.js | 12 +- .../js/modules/resize_columns.min.js | 2 + .../tabulator/js/modules/resize_rows.js | 2 +- .../tabulator/js/modules/resize_rows.min.js | 2 +- .../tabulator/js/modules/resize_table.js | 14 +- .../tabulator/js/modules/resize_table.min.js | 2 + .../tabulator/js/modules/responsive_layout.js | 2 +- .../js/modules/responsive_layout.min.js | 2 +- .../tabulator/js/modules/select_row.js | 2 +- .../tabulator/js/modules/select_row.min.js | 2 +- .../js/vendors}/tabulator/js/modules/sort.js | 13 +- .../vendors/tabulator/js/modules/sort.min.js | 2 + .../vendors}/tabulator/js/modules/validate.js | 4 +- .../tabulator/js/modules/validate.min.js | 4 +- .../js/vendors}/tabulator/js/tabulator.js | 2795 +- .../js/vendors/tabulator/js/tabulator.min.js | 1 + .../tabulator/js/tabulator.min.orig.js | 12 + .../vendors}/tabulator/js/tabulator_core.js | 1302 +- .../tabulator/js/tabulator_core.min.js | 6 + admin/lib/composer.json | 6 + admin/lib/composer.lock | 134 + admin/lib/config.php | 35 + admin/lib/database.php | 83 + admin/lib/session.php | 35 + admin/lib/vendor/autoload.php | 7 + admin/lib/vendor/composer/ClassLoader.php | 445 + admin/lib/vendor/composer/LICENSE | 21 + .../lib/vendor/composer/autoload_classmap.php | 9 + .../vendor/composer/autoload_namespaces.php | 10 + admin/lib/vendor/composer/autoload_psr4.php | 10 + admin/lib/vendor/composer/autoload_real.php | 55 + admin/lib/vendor/composer/autoload_static.php | 42 + admin/lib/vendor/composer/installed.json | 121 + admin/lib/vendor/mustache/mustache/.gitignore | 4 + .../lib/vendor/mustache/mustache/.gitmodules | 6 + admin/lib/vendor/mustache/mustache/.php_cs | 26 + .../lib/vendor/mustache/mustache/.styleci.yml | 13 + .../lib/vendor/mustache/mustache/.travis.yml | 31 + .../vendor/mustache/mustache/CONTRIBUTING.md | 35 + admin/lib/vendor/mustache/mustache/LICENSE | 21 + admin/lib/vendor/mustache/mustache/README.md | 72 + .../mustache/mustache/bin/build_bootstrap.php | 178 + .../vendor/mustache/mustache/composer.json | 25 + .../vendor/mustache/mustache/phpunit.xml.dist | 17 + .../mustache/src/Mustache/Autoloader.php | 88 + .../mustache/mustache/src/Mustache/Cache.php | 36 + .../src/Mustache/Cache/AbstractCache.php | 60 + .../src/Mustache/Cache/FilesystemCache.php | 161 + .../mustache/src/Mustache/Cache/NoopCache.php | 47 + .../mustache/src/Mustache/Compiler.php | 692 + .../mustache/src/Mustache/Context.php | 242 + .../mustache/mustache/src/Mustache/Engine.php | 829 + .../mustache/src/Mustache/Exception.php | 18 + .../Exception/InvalidArgumentException.php | 18 + .../src/Mustache/Exception/LogicException.php | 18 + .../Mustache/Exception/RuntimeException.php | 18 + .../Mustache/Exception/SyntaxException.php | 41 + .../Exception/UnknownFilterException.php | 38 + .../Exception/UnknownHelperException.php | 38 + .../Exception/UnknownTemplateException.php | 38 + .../src/Mustache/HelperCollection.php | 172 + .../mustache/src/Mustache/LambdaHelper.php | 76 + .../mustache/mustache/src/Mustache/Loader.php | 27 + .../src/Mustache/Loader/ArrayLoader.php | 79 + .../src/Mustache/Loader/CascadingLoader.php | 69 + .../src/Mustache/Loader/FilesystemLoader.php | 135 + .../src/Mustache/Loader/InlineLoader.php | 123 + .../src/Mustache/Loader/MutableLoader.php | 31 + .../Loader/ProductionFilesystemLoader.php | 86 + .../src/Mustache/Loader/StringLoader.php | 39 + .../mustache/mustache/src/Mustache/Logger.php | 126 + .../src/Mustache/Logger/AbstractLogger.php | 121 + .../src/Mustache/Logger/StreamLogger.php | 194 + .../mustache/mustache/src/Mustache/Parser.php | 317 + .../mustache/mustache/src/Mustache/Source.php | 40 + .../src/Mustache/Source/FilesystemSource.php | 77 + .../mustache/src/Mustache/Template.php | 180 + .../mustache/src/Mustache/Tokenizer.php | 342 + .../test/Mustache/Test/AutoloaderTest.php | 51 + .../Mustache/Test/Cache/AbstractCacheTest.php | 44 + .../Test/Cache/FilesystemCacheTest.php | 36 + .../test/Mustache/Test/CompilerTest.php | 154 + .../test/Mustache/Test/ContextTest.php | 282 + .../test/Mustache/Test/EngineTest.php | 397 + .../Test/Exception/SyntaxExceptionTest.php | 39 + .../Exception/UnknownFilterExceptionTest.php | 44 + .../Exception/UnknownHelperExceptionTest.php | 43 + .../UnknownTemplateExceptionTest.php | 43 + .../Functional/ClosureQuirksTest.php | 32 + .../Test/FiveThree/Functional/EngineTest.php | 50 + .../Test/FiveThree/Functional/FiltersTest.php | 187 + .../Functional/HigherOrderSectionsTest.php | 77 + .../FiveThree/Functional/LambdaHelperTest.php | 67 + .../FiveThree/Functional/MustacheSpecTest.php | 68 + .../Functional/PartialLambdaIndentTest.php | 94 + .../Functional/StrictCallablesTest.php | 135 + .../Mustache/Test/Functional/CallTest.php | 40 + .../Mustache/Test/Functional/ExamplesTest.php | 142 + .../Functional/HigherOrderSectionsTest.php | 177 + .../Test/Functional/InheritanceTest.php | 543 + .../Test/Functional/MustacheInjectionTest.php | 83 + .../Test/Functional/MustacheSpecTest.php | 121 + .../Functional/NestedPartialIndentTest.php | 45 + .../Test/Functional/ObjectSectionTest.php | 110 + .../test/Mustache/Test/FunctionalTestCase.php | 47 + .../Mustache/Test/HelperCollectionTest.php | 163 + .../Mustache/Test/Loader/ArrayLoaderTest.php | 52 + .../Test/Loader/CascadingLoaderTest.php | 40 + .../Test/Loader/FilesystemLoaderTest.php | 80 + .../Mustache/Test/Loader/InlineLoaderTest.php | 56 + .../Loader/ProductionFilesystemLoaderTest.php | 103 + .../Mustache/Test/Loader/StringLoaderTest.php | 25 + .../Test/Logger/AbstractLoggerTest.php | 60 + .../Mustache/Test/Logger/StreamLoggerTest.php | 209 + .../test/Mustache/Test/ParserTest.php | 425 + .../Test/Source/FilesystemSourceTest.php | 25 + .../test/Mustache/Test/SpecTestCase.php | 67 + .../test/Mustache/Test/TemplateTest.php | 55 + .../test/Mustache/Test/TokenizerTest.php | 306 + .../mustache/mustache/test/bootstrap.php | 91 + .../test/fixtures/autoloader/Mustache/Bar.php | 15 + .../test/fixtures/autoloader/Mustache/Foo.php | 15 + .../fixtures/autoloader/NonMustacheClass.php | 15 + .../AnchoredDotNotation.php | 55 + .../anchored_dot_notation.mustache | 4 + .../anchored_dot_notation.txt | 11 + .../partials/genre.mustache | 5 + .../test/fixtures/examples/blocks/Blocks.php | 15 + .../fixtures/examples/blocks/blocks.mustache | 4 + .../test/fixtures/examples/blocks/blocks.txt | 3 + .../examples/blocks/partials/parent.mustache | 4 + .../examples/child_context/ChildContext.php | 23 + .../child_context/child_context.mustache | 2 + .../examples/child_context/child_context.txt | 2 + .../fixtures/examples/comments/Comments.php | 18 + .../examples/comments/comments.mustache | 1 + .../fixtures/examples/comments/comments.txt | 1 + .../examples/complex/complex.mustache | 16 + .../fixtures/examples/complex/complex.php | 31 + .../fixtures/examples/complex/complex.txt | 6 + .../examples/delimiters/Delimiters.php | 25 + .../examples/delimiters/delimiters.mustache | 8 + .../examples/delimiters/delimiters.txt | 4 + .../examples/dot_notation/DotNotation.php | 24 + .../dot_notation/dot_notation.mustache | 4 + .../examples/dot_notation/dot_notation.txt | 4 + .../examples/double_section/DoubleSection.php | 20 + .../double_section/double_section.mustache | 7 + .../double_section/double_section.txt | 3 + .../fixtures/examples/escaped/Escaped.php | 15 + .../examples/escaped/escaped.mustache | 1 + .../fixtures/examples/escaped/escaped.txt | 1 + .../fixtures/examples/filters/Filters.php | 97 + .../examples/filters/filters.mustache | 4 + .../fixtures/examples/filters/filters.txt | 50 + .../GrandParentContext.php | 33 + .../grand_parent_context.mustache | 7 + .../grand_parent_context.txt | 7 + .../test/fixtures/examples/i18n/I18n.php | 30 + .../test/fixtures/examples/i18n/i18n.mustache | 1 + .../test/fixtures/examples/i18n/i18n.txt | 1 + .../implicit_iterator/ImplicitIterator.php | 15 + .../implicit_iterator.mustache | 3 + .../implicit_iterator/implicit_iterator.txt | 5 + .../InvertedDoubleSection.php | 16 + .../inverted_double_section.mustache | 7 + .../inverted_double_section.txt | 3 + .../inverted_section/InvertedSection.php | 15 + .../inverted_section.mustache | 6 + .../inverted_section/inverted_section.txt | 1 + .../nested_partials/NestedPartials.php | 15 + .../nested_partials/nested_partials.mustache | 3 + .../nested_partials/nested_partials.txt | 7 + .../nested_partials/partials/fourth.mustache | 1 + .../nested_partials/partials/second.mustache | 3 + .../nested_partials/partials/third.mustache | 3 + .../fixtures/examples/partials/Partials.php | 19 + .../examples/partials/partials.mustache | 7 + .../fixtures/examples/partials/partials.txt | 8 + .../partials/partials/header.mustache | 4 + .../recursive_partials/RecursivePartials.php | 22 + .../partials/child.mustache | 1 + .../recursive_partials.mustache | 1 + .../recursive_partials/recursive_partials.txt | 1 + .../SectionIteratorObjects.php | 27 + .../section_iterator_objects.mustache | 5 + .../section_iterator_objects.txt | 4 + .../SectionMagicObjects.php | 40 + .../section_magic_objects.mustache | 6 + .../section_magic_objects.txt | 4 + .../section_objects/SectionObjects.php | 28 + .../section_objects/section_objects.mustache | 6 + .../section_objects/section_objects.txt | 4 + .../fixtures/examples/sections/Sections.php | 25 + .../examples/sections/sections.mustache | 5 + .../fixtures/examples/sections/sections.txt | 4 + .../sections_nested/SectionsNested.php | 44 + .../sections_nested/sections_nested.mustache | 7 + .../sections_nested/sections_nested.txt | 12 + .../test/fixtures/examples/simple/Simple.php | 23 + .../fixtures/examples/simple/simple.mustache | 5 + .../test/fixtures/examples/simple/simple.txt | 3 + .../fixtures/examples/unescaped/Unescaped.php | 15 + .../examples/unescaped/unescaped.mustache | 1 + .../fixtures/examples/unescaped/unescaped.txt | 1 + .../test/fixtures/examples/utf8/UTF8.php | 15 + .../test/fixtures/examples/utf8/utf8.mustache | 1 + .../test/fixtures/examples/utf8/utf8.txt | 1 + .../examples/utf8_unescaped/UTF8Unescaped.php | 15 + .../utf8_unescaped/utf8_unescaped.mustache | 1 + .../utf8_unescaped/utf8_unescaped.txt | 1 + .../examples/whitespace/Whitespace.php | 43 + .../whitespace/partials/alphabet.mustache | 1 + .../examples/whitespace/whitespace.mustache | 10 + .../examples/whitespace/whitespace.txt | 12 + .../mustache/test/fixtures/templates/alpha.ms | 1 + .../mustache/test/fixtures/templates/beta.ms | 1 + .../test/fixtures/templates/one.mustache | 1 + .../test/fixtures/templates/two.mustache | 1 + .../lib/vendor/phpmailer/phpmailer/COMMITMENT | 46 + .../lib/vendor/phpmailer/phpmailer/LICENSE | 36 +- .../lib/vendor/phpmailer/phpmailer/README.md | 221 + .../vendor/phpmailer/phpmailer/SECURITY.md | 30 + admin/lib/vendor/phpmailer/phpmailer/VERSION | 1 + .../vendor/phpmailer/phpmailer/composer.json | 58 + .../phpmailer/phpmailer/get_oauth_token.php | 144 + .../phpmailer/language/phpmailer.lang-af.php | 25 + .../phpmailer/language/phpmailer.lang-ar.php | 27 + .../phpmailer/language/phpmailer.lang-az.php | 26 + .../phpmailer/language/phpmailer.lang-ba.php | 26 + .../phpmailer/language/phpmailer.lang-be.php | 26 + .../phpmailer/language/phpmailer.lang-bg.php | 26 + .../phpmailer/language/phpmailer.lang-ca.php | 26 + .../phpmailer/language/phpmailer.lang-ch.php | 26 + .../phpmailer/language/phpmailer.lang-cs.php | 25 + .../phpmailer/language/phpmailer.lang-da.php | 28 + .../phpmailer/language/phpmailer.lang-de.php | 27 + .../phpmailer/language/phpmailer.lang-el.php | 25 + .../phpmailer/language/phpmailer.lang-eo.php | 25 + .../phpmailer/language/phpmailer.lang-es.php | 26 + .../phpmailer/language/phpmailer.lang-et.php | 27 + .../phpmailer/language/phpmailer.lang-fa.php | 27 + .../phpmailer/language/phpmailer.lang-fi.php | 27 + .../phpmailer/language/phpmailer.lang-fo.php | 26 + .../phpmailer/language/phpmailer.lang-fr.php | 29 + .../phpmailer/language/phpmailer.lang-gl.php | 26 + .../phpmailer/language/phpmailer.lang-he.php | 26 + .../phpmailer/language/phpmailer.lang-hi.php | 26 + .../phpmailer/language/phpmailer.lang-hr.php | 26 + .../phpmailer/language/phpmailer.lang-hu.php | 26 + .../phpmailer/language/phpmailer.lang-hy.php | 26 + .../phpmailer/language/phpmailer.lang-id.php | 30 + .../phpmailer/language/phpmailer.lang-it.php | 27 + .../phpmailer/language/phpmailer.lang-ja.php | 27 + .../phpmailer/language/phpmailer.lang-ka.php | 26 + .../phpmailer/language/phpmailer.lang-ko.php | 26 + .../phpmailer/language/phpmailer.lang-lt.php | 26 + .../phpmailer/language/phpmailer.lang-lv.php | 26 + .../phpmailer/language/phpmailer.lang-mg.php | 25 + .../phpmailer/language/phpmailer.lang-ms.php | 26 + .../phpmailer/language/phpmailer.lang-nb.php | 25 + .../phpmailer/language/phpmailer.lang-nl.php | 28 + .../phpmailer/language/phpmailer.lang-pl.php | 26 + .../phpmailer/language/phpmailer.lang-pt.php | 26 + .../language/phpmailer.lang-pt_br.php | 29 + .../phpmailer/language/phpmailer.lang-ro.php | 26 + .../phpmailer/language/phpmailer.lang-ru.php | 27 + .../phpmailer/language/phpmailer.lang-sk.php | 27 + .../phpmailer/language/phpmailer.lang-sl.php | 27 + .../phpmailer/language/phpmailer.lang-sr.php | 27 + .../phpmailer/language/phpmailer.lang-sv.php | 26 + .../phpmailer/language/phpmailer.lang-tl.php | 27 + .../phpmailer/language/phpmailer.lang-tr.php | 30 + .../phpmailer/language/phpmailer.lang-uk.php | 27 + .../phpmailer/language/phpmailer.lang-vi.php | 26 + .../phpmailer/language/phpmailer.lang-zh.php | 28 + .../language/phpmailer.lang-zh_cn.php | 28 + .../phpmailer/phpmailer/src/Exception.php | 39 + .../vendor/phpmailer/phpmailer/src/OAuth.php | 138 + .../phpmailer/phpmailer/src/PHPMailer.php | 4860 ++++ .../vendor/phpmailer/phpmailer/src/POP3.php | 421 + .../vendor/phpmailer/phpmailer/src/SMTP.php | 1426 + admin/lib/web/galleries.php | 56 + admin/lib/web/rendezvous.php | 36 + admin/lib/web/templates.php | 64 + admin/lib/web/webmenu.php | 48 + admin/lib/web/websites.php | 29 + admin/tmpl/.htaccess | 5 + admin/tmpl/index.html.mustache | 55 + admin/tmpl/login.html.mustache | 66 + .../pages/config/rendezvous.html.mustache | 0 admin/tmpl/pages/config/shop.html.mustache | 0 admin/tmpl/pages/config/site.html.mustache | 0 .../tmpl/pages/config/template.html.mustache | 32 + admin/tmpl/pages/config/users.html.mustache | 0 admin/tmpl/pages/error.html.mustache | 2 + admin/tmpl/pages/galleries.html.mustache | 28 + admin/tmpl/pages/home.html.mustache | 45 + .../pages/login/forgotpassword.html.mustache | 20 + admin/tmpl/pages/login/login.html.mustache | 23 + admin/tmpl/pages/login/message.html.mustache | 7 + admin/tmpl/pages/orders.html.mustache | 0 admin/tmpl/pages/rendezvous.html.mustache | 0 admin/tmpl/pages/shop.html.mustache | 0 admin/tmpl/pages/websites.html.mustache | 0 admin/upload.php | 0 dev/appicons.json | 1 + dev/db/sitedb..schema.sql | 60 + dev/setdevlinks.sh | 8 + website/css/creorga.css | 11 - website/css/site.css | 88 - website/css/theme.css | 15 +- website/download/update.php | 235 - website/img/Creorga_1000px.png | Bin 37576 -> 0 bytes website/img/applescript.png | Bin 46897 -> 0 bytes website/img/apps/cashboxlogo.svg | 48 - website/img/apps/coloradiologo.svg | 52 - website/img/apps/creorgalogo.svg | 931 - website/img/apps/datastorelogo.svg | 193 - website/img/apps/dkstools.svg | 137 - website/img/apps/dksvpn.svg | 70 - website/img/apps/hourtraxlogo.svg | 138 - website/img/apps/invoicejournallogo.svg | 144 - website/img/apps/qrcodegenerateorlogo.svg | 2322 -- website/img/apps/websiteeditorlogo.svg | 106 - website/img/bash.png | Bin 35702 -> 0 bytes website/img/bg.jpg | Bin 134006 -> 0 bytes website/img/bg_bw.jpg | Bin 662394 -> 0 bytes website/img/bg_creorga.jpg | Bin 448588 -> 0 bytes website/img/bgtest - Kopie.jpg | Bin 197716 -> 0 bytes website/img/bgtest.jpg | Bin 238531 -> 0 bytes website/img/cashbox.png | Bin 20279 -> 0 bytes website/img/childs.png | Bin 93674 -> 0 bytes website/img/coloradio.png | Bin 49897 -> 0 bytes website/img/creorgalogo.png | Bin 25613 -> 0 bytes website/img/css3.png | Bin 24767 -> 0 bytes website/img/festplatte.jpg | Bin 91618 -> 0 bytes website/img/filemaker.png | Bin 72471 -> 0 bytes website/img/fm_logotm_stacked.png | Bin 26880 -> 0 bytes website/img/groovy.png | Bin 38877 -> 0 bytes website/img/hourtrax.png | Bin 3621 -> 0 bytes website/img/htmlfive.png | Bin 27025 -> 0 bytes website/img/icons/menu.svg | 3 - website/img/if_HTML_Logo_65687.png | Bin 3349 -> 0 bytes ...ftware-develop-command-language_652581.png | Bin 8344 -> 0 bytes website/img/invoice_journal.png | Bin 13028 -> 0 bytes website/img/java.png | Bin 29261 -> 0 bytes website/img/javascript.png | Bin 21079 -> 0 bytes website/img/javascript_yellow.png | Bin 3635 -> 0 bytes website/img/kasse.jpg | Bin 112858 -> 0 bytes website/img/kinder.jpg | Bin 200308 -> 0 bytes website/img/logo-mysql.png | Bin 3761 -> 0 bytes website/img/musicmix.jpg | Bin 142445 -> 0 bytes website/img/musicmix.png | Bin 580479 -> 0 bytes website/img/mysql.png | Bin 21221 -> 0 bytes website/img/perl.png | Bin 17555 -> 0 bytes website/img/pics/google4.png | Bin 2073 -> 0 bytes website/img/pics/google_gray.svg | 14 - website/img/pics/ico.copywriting.png | Bin 3202 -> 0 bytes website/img/pics/ico.monitoring.png | Bin 2884 -> 0 bytes website/img/pics/ico.optimization.png | Bin 3215 -> 0 bytes website/img/pics/image-1.jpg | Bin 83711 -> 0 bytes website/img/pics/image-10.jpg | Bin 46601 -> 0 bytes website/img/pics/image-11.jpg | Bin 101621 -> 0 bytes website/img/pics/image-12.jpg | Bin 88257 -> 0 bytes website/img/pics/image-2.jpg | Bin 104656 -> 0 bytes website/img/pics/image-3.jpg | Bin 38695 -> 0 bytes website/img/pics/image-4.jpg | Bin 68634 -> 0 bytes website/img/pics/image-5.jpg | Bin 86966 -> 0 bytes website/img/pics/image-6.jpg | Bin 75491 -> 0 bytes website/img/pics/image-7.jpg | Bin 78582 -> 0 bytes website/img/pics/image-8.jpg | Bin 65861 -> 0 bytes website/img/pics/image-9.jpg | Bin 38052 -> 0 bytes website/img/pics/img.home2.png | Bin 5036 -> 0 bytes website/img/pics/img.home3.png | Bin 5831 -> 0 bytes website/img/pics/img.home4.png | Bin 5290 -> 0 bytes website/img/pics/img.home6.png | Bin 5936 -> 0 bytes website/img/pics/logo.png | Bin 6212 -> 0 bytes website/img/pics/partner-1.jpg | Bin 61515 -> 0 bytes website/img/pics/partner-2.jpg | Bin 94288 -> 0 bytes website/img/pics/partner-3.jpg | Bin 68509 -> 0 bytes website/img/pics/partner-4.jpg | Bin 81644 -> 0 bytes website/img/pics/partner-5.jpg | Bin 78500 -> 0 bytes website/img/pics/partner-6.jpg | Bin 69658 -> 0 bytes website/img/pics/slide1.contact.png | Bin 361893 -> 0 bytes website/img/pics/slide1.jpg | Bin 259803 -> 0 bytes website/img/pics/slide2.contact.png | Bin 344008 -> 0 bytes website/img/pics/slide2.jpg | Bin 216867 -> 0 bytes website/img/pics/slide3.contact.png | Bin 456662 -> 0 bytes website/img/pics/slide3.jpg | Bin 344914 -> 0 bytes website/img/pics/spotlight-poi2.png | Bin 817 -> 0 bytes website/img/pics/team.1.jpg | Bin 38896 -> 0 bytes website/img/pics/team.2.jpg | Bin 42380 -> 0 bytes website/img/pics/team.3.jpg | Bin 39256 -> 0 bytes website/img/pics/team.4.jpg | Bin 42847 -> 0 bytes website/img/pics/welcome.png | Bin 121732 -> 0 bytes website/img/pitouchcase.png | Bin 42493 -> 0 bytes website/img/postgres.png | Bin 30081 -> 0 bytes website/img/postgresql.png | Bin 44324 -> 0 bytes website/img/powershell.png | Bin 21658 -> 0 bytes website/img/price750.svg | 84 - website/img/radio.jpg | Bin 112747 -> 0 bytes website/img/rechnung.jpg | Bin 141347 -> 0 bytes website/img/slider_pctablet.png | Bin 65567 -> 0 bytes website/img/sqlite.png | Bin 29066 -> 0 bytes website/img/sybar.png | Bin 2917 -> 0 bytes website/img/zeit.jpg | Bin 103349 -> 0 bytes website/index.php | 4 +- website/info.php | 4 - website/js/dataform.js | 317 - website/js/global/myapp.js | 161 - website/js/global/renderer.js | 93 - website/js/global/report.js | 130 - website/js/global/request.js | 245 - website/js/global/sqlite.js | 98 - website/js/timecalc.js | 37 - .../vendor/moment/moment-with-locales.min.js | 1 - website/js/vendor/moment/moment.min.js | 1 - website/js/vendor/mustache/mustache.js | 740 - website/js/vendor/mustache/mustache.min.js | 1 - .../js/vendor/tabulator/css/tabulator.min.css | 3 - .../tabulator/css/tabulator.min.css.map | 1 - .../tabulator/css/tabulator_site.min.css | 1 - .../tabulator/css/tabulator_site.min.css.map | 1 - .../tabulator/js/modules/accessor.min.js | 2 - .../js/modules/calculation_colums.min.js | 2 - .../tabulator/js/modules/clipboard.min.js | 2 - .../tabulator/js/modules/data_tree.min.js | 2 - .../tabulator/js/modules/download.min.js | 2 - .../vendor/tabulator/js/modules/edit.min.js | 2 - .../vendor/tabulator/js/modules/export.min.js | 2 - .../vendor/tabulator/js/modules/format.min.js | 2 - .../tabulator/js/modules/group_rows.min.js | 2 - .../tabulator/js/modules/history.min.js | 2 - .../vendor/tabulator/js/modules/menu.min.js | 2 - .../vendor/tabulator/js/modules/page.min.js | 2 - .../tabulator/js/modules/reactive_data.min.js | 2 - .../js/modules/resize_columns.min.js | 2 - .../tabulator/js/modules/resize_table.min.js | 2 - .../vendor/tabulator/js/modules/sort.min.js | 2 - .../vendor/tabulator/js/tabulator.es2015.js | 23395 ---------------- .../js/vendor/tabulator/js/tabulator.min.js | 13 - .../vendor/tabulator/js/tabulator_core.min.js | 6 - website/js/vendor/tinymce/changelog.txt | 1479 - .../tinymce/js/tinymce/jquery.tinymce.min.js | 91 - .../js/vendor/tinymce/js/tinymce/langs/de.js | 389 - .../vendor/tinymce/js/tinymce/langs/fr_FR.js | 389 - .../vendor/tinymce/js/tinymce/langs/readme.md | 3 - .../js/tinymce/plugins/advlist/plugin.min.js | 9 - .../js/tinymce/plugins/anchor/plugin.min.js | 9 - .../js/tinymce/plugins/autolink/plugin.min.js | 9 - .../tinymce/plugins/autoresize/plugin.min.js | 9 - .../js/tinymce/plugins/autosave/plugin.min.js | 9 - .../js/tinymce/plugins/bbcode/plugin.min.js | 9 - .../js/tinymce/plugins/charmap/plugin.min.js | 9 - .../js/tinymce/plugins/code/plugin.min.js | 9 - .../tinymce/plugins/codesample/plugin.min.js | 9 - .../tinymce/plugins/colorpicker/plugin.min.js | 9 - .../tinymce/plugins/contextmenu/plugin.min.js | 9 - .../plugins/directionality/plugin.min.js | 9 - .../js/tinymce/plugins/emoticons/js/emojis.js | 9015 ------ .../plugins/emoticons/js/emojis.min.js | 2 - .../tinymce/plugins/emoticons/plugin.min.js | 9 - .../js/tinymce/plugins/fullpage/plugin.min.js | 9 - .../tinymce/plugins/fullscreen/plugin.min.js | 9 - .../js/tinymce/plugins/help/plugin.min.js | 9 - .../js/tinymce/plugins/hr/plugin.min.js | 9 - .../js/tinymce/plugins/image/plugin.min.js | 9 - .../tinymce/plugins/imagetools/plugin.min.js | 9 - .../tinymce/plugins/importcss/plugin.min.js | 9 - .../plugins/insertdatetime/plugin.min.js | 9 - .../plugins/legacyoutput/plugin.min.js | 9 - .../js/tinymce/plugins/link/plugin.min.js | 9 - .../js/tinymce/plugins/lists/plugin.min.js | 9 - .../js/tinymce/plugins/media/plugin.min.js | 9 - .../tinymce/plugins/nonbreaking/plugin.min.js | 9 - .../tinymce/plugins/noneditable/plugin.min.js | 9 - .../tinymce/plugins/pagebreak/plugin.min.js | 9 - .../js/tinymce/plugins/paste/plugin.min.js | 9 - .../js/tinymce/plugins/preview/plugin.min.js | 9 - .../js/tinymce/plugins/print/plugin.min.js | 9 - .../tinymce/plugins/quickbars/plugin.min.js | 9 - .../js/tinymce/plugins/save/plugin.min.js | 9 - .../plugins/searchreplace/plugin.min.js | 9 - .../plugins/spellchecker/plugin.min.js | 9 - .../js/tinymce/plugins/tabfocus/plugin.min.js | 9 - .../js/tinymce/plugins/table/plugin.min.js | 9 - .../js/tinymce/plugins/template/plugin.min.js | 9 - .../tinymce/plugins/textcolor/plugin.min.js | 9 - .../tinymce/plugins/textpattern/plugin.min.js | 9 - .../js/tinymce/plugins/toc/plugin.min.js | 9 - .../plugins/visualblocks/plugin.min.js | 9 - .../tinymce/plugins/visualchars/plugin.min.js | 9 - .../tinymce/plugins/wordcount/plugin.min.js | 9 - .../skins/content/dark/content.min.css | 7 - .../skins/content/default/content.min.css | 12 - .../skins/content/document/content.min.css | 7 - .../skins/content/writer/content.min.css | 7 - .../ui/oxide-dark/content.inline.min.css | 7 - .../skins/ui/oxide-dark/content.min.css | 7 - .../ui/oxide-dark/content.mobile.min.css | 7 - .../ui/oxide-dark/fonts/tinymce-mobile.woff | Bin 4624 -> 0 bytes .../tinymce/skins/ui/oxide-dark/skin.min.css | 7 - .../skins/ui/oxide-dark/skin.mobile.min.css | 7 - .../skins/ui/oxide/content.inline.min.css | 7 - .../js/tinymce/skins/ui/oxide/content.min.css | 7 - .../skins/ui/oxide/content.mobile.min.css | 7 - .../skins/ui/oxide/fonts/tinymce-mobile.woff | Bin 4624 -> 0 bytes .../js/tinymce/skins/ui/oxide/skin.min.css | 7 - .../skins/ui/oxide/skin.mobile.min.css | 7 - .../js/tinymce/themes/mobile/theme.min.js | 9 - .../js/tinymce/themes/silver/theme.min.js | 9 - .../vendor/tinymce/js/tinymce/tinymce.min.js | 9 - website/lib/config.php | 2 +- website/robots.txt | 4 +- website/tmpl/index.html.mustache | 54 +- website/tmpl/pages/computers.tt | 1 - website/tmpl/pages/contact.html.mustache | 50 +- website/tmpl/pages/development.html.mustache | 12 - website/tmpl/pages/en/privacy.tt | 57 - website/tmpl/pages/en/terms.tt | 64 - website/tmpl/pages/en/useterms.tt | 56 - website/tmpl/pages/error.html.mustache | 0 website/tmpl/pages/home.html.mustache | 260 +- website/tmpl/pages/hosting.tt | 3 - website/tmpl/pages/it-service.html.mustache | 16 - website/website | 1 - 698 files changed, 60686 insertions(+), 46268 deletions(-) create mode 100644 admin/.htaccess create mode 100644 admin/css/fonts/appicons.svg create mode 100644 admin/css/fonts/appicons.ttf create mode 100644 admin/css/fonts/appicons.woff create mode 100644 admin/css/icons.css create mode 100644 admin/css/theme.css create mode 100644 admin/db.php create mode 100644 admin/img/POT-logo.png create mode 100644 admin/img/applogo.png create mode 100644 admin/img/bg1.jpg create mode 100644 admin/img/favicon/android-icon-144x144.png create mode 100644 admin/img/favicon/android-icon-192x192.png create mode 100644 admin/img/favicon/android-icon-36x36.png create mode 100644 admin/img/favicon/android-icon-48x48.png create mode 100644 admin/img/favicon/android-icon-72x72.png create mode 100644 admin/img/favicon/android-icon-96x96.png create mode 100644 admin/img/favicon/apple-icon-114x114.png create mode 100644 admin/img/favicon/apple-icon-120x120.png create mode 100644 admin/img/favicon/apple-icon-144x144.png create mode 100644 admin/img/favicon/apple-icon-152x152.png create mode 100644 admin/img/favicon/apple-icon-180x180.png create mode 100644 admin/img/favicon/apple-icon-57x57.png create mode 100644 admin/img/favicon/apple-icon-60x60.png create mode 100644 admin/img/favicon/apple-icon-72x72.png create mode 100644 admin/img/favicon/apple-icon-76x76.png create mode 100644 admin/img/favicon/apple-icon-precomposed.png create mode 100644 admin/img/favicon/apple-icon.png create mode 100644 admin/img/favicon/browserconfig.xml create mode 100644 admin/img/favicon/favicon-16x16.png create mode 100644 admin/img/favicon/favicon-32x32.png create mode 100644 admin/img/favicon/favicon-96x96.png create mode 100644 admin/img/favicon/favicon.ico create mode 100644 admin/img/favicon/manifest.json create mode 100644 admin/img/favicon/ms-icon-144x144.png create mode 100644 admin/img/favicon/ms-icon-150x150.png create mode 100644 admin/img/favicon/ms-icon-310x310.png create mode 100644 admin/img/favicon/ms-icon-70x70.png create mode 100644 admin/img/logo_512.png create mode 100644 admin/img/potbg.jpg create mode 100644 admin/img/poticon512.png create mode 100644 admin/img/potlogowhite.svg create mode 100644 admin/img/pottop.png create mode 100644 admin/img/toplogo.png create mode 100644 admin/index.php create mode 100644 admin/js/app.js create mode 100644 admin/js/dataform.js create mode 100644 admin/js/modules/galleries.js rename website/js/vendor/flatpickr/utils/polyfills.d.ts => admin/js/modules/home.js (100%) create mode 100644 admin/js/modules/rendezvous.js create mode 100644 admin/js/modules/shop.js create mode 100644 admin/js/modules/users.js create mode 100644 admin/js/modules/websites.js create mode 100644 admin/js/report.js create mode 100644 admin/js/request.js create mode 100644 admin/js/timecalc.js rename {website/js/vendor => admin/js/vendors}/flatpickr/flatpickr.css (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/flatpickr.js (99%) rename {website/js/vendor => admin/js/vendors}/flatpickr/flatpickr.min.css (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/flatpickr.min.js (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/ie.css (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/index.d.ts (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/l10n/de.d.ts (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/l10n/de.js (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/l10n/default.d.ts (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/l10n/default.js (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/l10n/fr.d.ts (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/l10n/fr.js (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/l10n/index.d.ts (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/l10n/index.js (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/plugins/confirmDate/confirmDate.css (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/plugins/confirmDate/confirmDate.d.ts (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/plugins/confirmDate/confirmDate.js (99%) rename {website/js/vendor => admin/js/vendors}/flatpickr/plugins/labelPlugin/labelPlugin.d.ts (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/plugins/labelPlugin/labelPlugin.js (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/plugins/minMaxTimePlugin.d.ts (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/plugins/minMaxTimePlugin.js (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/plugins/momentPlugin.d.ts (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/plugins/momentPlugin.js (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/plugins/monthSelect/index.d.ts (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/plugins/monthSelect/index.js (99%) rename {website/js/vendor => admin/js/vendors}/flatpickr/plugins/monthSelect/style.css (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/plugins/monthSelect/tests.spec.d.ts (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/plugins/rangePlugin.d.ts (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/plugins/rangePlugin.js (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/plugins/scrollPlugin.d.ts (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/plugins/scrollPlugin.js (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/plugins/weekSelect/weekSelect.d.ts (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/plugins/weekSelect/weekSelect.js (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/themes/airbnb.css (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/types/globals.d.ts (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/types/instance.d.ts (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/types/locale.d.ts (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/types/options.d.ts (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/typings.d.ts (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/utils/dates.d.ts (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/utils/dom.d.ts (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/utils/formatting.d.ts (100%) rename {website/js/vendor => admin/js/vendors}/flatpickr/utils/index.d.ts (100%) create mode 100644 admin/js/vendors/flatpickr/utils/polyfills.d.ts create mode 100644 admin/js/vendors/moment/locales.js create mode 100644 admin/js/vendors/moment/locales.min.js create mode 100644 admin/js/vendors/moment/locales.min.js.map create mode 100644 admin/js/vendors/moment/moment-with-locales.js create mode 100644 admin/js/vendors/moment/moment-with-locales.min.js create mode 100644 admin/js/vendors/moment/moment-with-locales.min.js.map create mode 100644 admin/js/vendors/moment/moment.js create mode 100644 admin/js/vendors/moment/moment.min.js create mode 100644 admin/js/vendors/moment/moment.min.js.map rename {website/js/vendor => admin/js/vendors}/slimselect/slimselect.css (94%) create mode 100644 admin/js/vendors/slimselect/slimselect.min.css rename {website/js/vendor => admin/js/vendors}/slimselect/slimselect.min.js (100%) rename website/js/vendor/slimselect/slimselect.min.css => admin/js/vendors/slimselect/slimselect.min.orig.css (100%) create mode 100644 admin/js/vendors/slimselect/slimselect.min.xx.js rename {website/js/vendor => admin/js/vendors}/slimselect/slimselect.scss (100%) rename website/js/vendor/slimselect/slimselect.js => admin/js/vendors/slimselect/slimselect.xx.js (100%) rename {website/js/vendor => admin/js/vendors}/tabulator/css/tabulator.css (88%) create mode 100644 admin/js/vendors/tabulator/css/tabulator.min.css create mode 100644 admin/js/vendors/tabulator/css/tabulator.min.css.map rename {website/js/vendor => admin/js/vendors}/tabulator/css/tabulator_site.css (84%) create mode 100644 admin/js/vendors/tabulator/css/tabulator_site.min.css create mode 100644 admin/js/vendors/tabulator/css/tabulator_site.min.css.map create mode 100644 admin/js/vendors/tabulator/css/tabulator_site.min.orig.css rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/accessor.js (77%) create mode 100644 admin/js/vendors/tabulator/js/modules/accessor.min.js rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/ajax.js (99%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/ajax.min.js (99%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/calculation_colums.js (91%) create mode 100644 admin/js/vendors/tabulator/js/modules/calculation_colums.min.js rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/clipboard.js (93%) create mode 100644 admin/js/vendors/tabulator/js/modules/clipboard.min.js rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/data_tree.js (90%) create mode 100644 admin/js/vendors/tabulator/js/modules/data_tree.min.js rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/download.js (96%) create mode 100644 admin/js/vendors/tabulator/js/modules/download.min.js rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/edit.js (93%) create mode 100644 admin/js/vendors/tabulator/js/modules/edit.min.js rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/export.js (97%) create mode 100644 admin/js/vendors/tabulator/js/modules/export.min.js rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/filter.js (99%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/filter.min.js (98%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/format.js (97%) create mode 100644 admin/js/vendors/tabulator/js/modules/format.min.js rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/frozen_columns.js (99%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/frozen_columns.min.js (98%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/frozen_rows.js (89%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/frozen_rows.min.js (62%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/group_rows.js (94%) create mode 100644 admin/js/vendors/tabulator/js/modules/group_rows.min.js rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/history.js (89%) create mode 100644 admin/js/vendors/tabulator/js/modules/history.min.js rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/html_table_import.js (98%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/html_table_import.min.js (96%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/keybindings.js (98%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/keybindings.min.js (98%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/menu.js (54%) create mode 100644 admin/js/vendors/tabulator/js/modules/menu.min.js rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/moveable_columns.js (98%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/moveable_columns.min.js (98%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/moveable_rows.js (99%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/moveable_rows.min.js (99%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/mutator.js (96%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/mutator.min.js (96%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/page.js (97%) create mode 100644 admin/js/vendors/tabulator/js/modules/page.min.js rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/persistence.js (96%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/persistence.min.js (63%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/print.js (96%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/print.min.js (95%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/reactive_data.js (73%) create mode 100644 admin/js/vendors/tabulator/js/modules/reactive_data.min.js rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/resize_columns.js (92%) create mode 100644 admin/js/vendors/tabulator/js/modules/resize_columns.min.js rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/resize_rows.js (96%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/resize_rows.min.js (95%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/resize_table.js (88%) create mode 100644 admin/js/vendors/tabulator/js/modules/resize_table.min.js rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/responsive_layout.js (99%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/responsive_layout.min.js (98%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/select_row.js (99%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/select_row.min.js (98%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/sort.js (97%) create mode 100644 admin/js/vendors/tabulator/js/modules/sort.min.js rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/validate.js (97%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/modules/validate.min.js (52%) rename {website/js/vendor => admin/js/vendors}/tabulator/js/tabulator.js (90%) create mode 100644 admin/js/vendors/tabulator/js/tabulator.min.js create mode 100644 admin/js/vendors/tabulator/js/tabulator.min.orig.js rename {website/js/vendor => admin/js/vendors}/tabulator/js/tabulator_core.js (87%) create mode 100644 admin/js/vendors/tabulator/js/tabulator_core.min.js create mode 100644 admin/lib/composer.json create mode 100644 admin/lib/composer.lock create mode 100644 admin/lib/config.php create mode 100644 admin/lib/database.php create mode 100644 admin/lib/session.php create mode 100644 admin/lib/vendor/autoload.php create mode 100644 admin/lib/vendor/composer/ClassLoader.php create mode 100644 admin/lib/vendor/composer/LICENSE create mode 100644 admin/lib/vendor/composer/autoload_classmap.php create mode 100644 admin/lib/vendor/composer/autoload_namespaces.php create mode 100644 admin/lib/vendor/composer/autoload_psr4.php create mode 100644 admin/lib/vendor/composer/autoload_real.php create mode 100644 admin/lib/vendor/composer/autoload_static.php create mode 100644 admin/lib/vendor/composer/installed.json create mode 100644 admin/lib/vendor/mustache/mustache/.gitignore create mode 100644 admin/lib/vendor/mustache/mustache/.gitmodules create mode 100644 admin/lib/vendor/mustache/mustache/.php_cs create mode 100644 admin/lib/vendor/mustache/mustache/.styleci.yml create mode 100644 admin/lib/vendor/mustache/mustache/.travis.yml create mode 100644 admin/lib/vendor/mustache/mustache/CONTRIBUTING.md create mode 100644 admin/lib/vendor/mustache/mustache/LICENSE create mode 100644 admin/lib/vendor/mustache/mustache/README.md create mode 100644 admin/lib/vendor/mustache/mustache/bin/build_bootstrap.php create mode 100644 admin/lib/vendor/mustache/mustache/composer.json create mode 100644 admin/lib/vendor/mustache/mustache/phpunit.xml.dist create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Autoloader.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Cache.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Cache/AbstractCache.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Cache/FilesystemCache.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Cache/NoopCache.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Compiler.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Context.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Engine.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Exception.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Exception/InvalidArgumentException.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Exception/LogicException.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Exception/RuntimeException.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Exception/SyntaxException.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Exception/UnknownFilterException.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Exception/UnknownHelperException.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Exception/UnknownTemplateException.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/HelperCollection.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/LambdaHelper.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Loader.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Loader/ArrayLoader.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Loader/CascadingLoader.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Loader/FilesystemLoader.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Loader/InlineLoader.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Loader/MutableLoader.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Loader/ProductionFilesystemLoader.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Loader/StringLoader.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Logger.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Logger/AbstractLogger.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Logger/StreamLogger.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Parser.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Source.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Source/FilesystemSource.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Template.php create mode 100644 admin/lib/vendor/mustache/mustache/src/Mustache/Tokenizer.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/AutoloaderTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/Cache/AbstractCacheTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/Cache/FilesystemCacheTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/CompilerTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/ContextTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/EngineTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/Exception/SyntaxExceptionTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/Exception/UnknownFilterExceptionTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/Exception/UnknownHelperExceptionTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/Exception/UnknownTemplateExceptionTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/ClosureQuirksTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/EngineTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/FiltersTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/HigherOrderSectionsTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/LambdaHelperTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/MustacheSpecTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/PartialLambdaIndentTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/StrictCallablesTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/CallTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/ExamplesTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/HigherOrderSectionsTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/InheritanceTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/MustacheInjectionTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/MustacheSpecTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/NestedPartialIndentTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/ObjectSectionTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/FunctionalTestCase.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/HelperCollectionTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/Loader/ArrayLoaderTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/Loader/CascadingLoaderTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/Loader/FilesystemLoaderTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/Loader/InlineLoaderTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/Loader/ProductionFilesystemLoaderTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/Loader/StringLoaderTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/Logger/AbstractLoggerTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/Logger/StreamLoggerTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/ParserTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/Source/FilesystemSourceTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/SpecTestCase.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/TemplateTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/Mustache/Test/TokenizerTest.php create mode 100644 admin/lib/vendor/mustache/mustache/test/bootstrap.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/autoloader/Mustache/Bar.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/autoloader/Mustache/Foo.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/autoloader/NonMustacheClass.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/anchored_dot_notation/AnchoredDotNotation.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/anchored_dot_notation/anchored_dot_notation.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/anchored_dot_notation/anchored_dot_notation.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/anchored_dot_notation/partials/genre.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/blocks/Blocks.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/blocks/blocks.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/blocks/blocks.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/blocks/partials/parent.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/child_context/ChildContext.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/child_context/child_context.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/child_context/child_context.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/comments/Comments.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/comments/comments.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/comments/comments.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/complex/complex.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/complex/complex.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/complex/complex.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/delimiters/Delimiters.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/delimiters/delimiters.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/delimiters/delimiters.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/dot_notation/DotNotation.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/dot_notation/dot_notation.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/dot_notation/dot_notation.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/double_section/DoubleSection.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/double_section/double_section.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/double_section/double_section.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/escaped/Escaped.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/escaped/escaped.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/escaped/escaped.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/filters/Filters.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/filters/filters.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/filters/filters.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/grand_parent_context/GrandParentContext.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/grand_parent_context/grand_parent_context.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/grand_parent_context/grand_parent_context.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/i18n/I18n.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/i18n/i18n.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/i18n/i18n.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/implicit_iterator/ImplicitIterator.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/implicit_iterator/implicit_iterator.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/implicit_iterator/implicit_iterator.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/inverted_double_section/InvertedDoubleSection.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/inverted_double_section/inverted_double_section.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/inverted_double_section/inverted_double_section.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/inverted_section/InvertedSection.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/inverted_section/inverted_section.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/inverted_section/inverted_section.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/nested_partials/NestedPartials.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/nested_partials/nested_partials.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/nested_partials/nested_partials.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/nested_partials/partials/fourth.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/nested_partials/partials/second.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/nested_partials/partials/third.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/partials/Partials.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/partials/partials.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/partials/partials.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/partials/partials/header.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/recursive_partials/RecursivePartials.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/recursive_partials/partials/child.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/recursive_partials/recursive_partials.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/recursive_partials/recursive_partials.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_iterator_objects/SectionIteratorObjects.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_iterator_objects/section_iterator_objects.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_iterator_objects/section_iterator_objects.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_magic_objects/SectionMagicObjects.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_magic_objects/section_magic_objects.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_magic_objects/section_magic_objects.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_objects/SectionObjects.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_objects/section_objects.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_objects/section_objects.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/sections/Sections.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/sections/sections.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/sections/sections.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/sections_nested/SectionsNested.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/sections_nested/sections_nested.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/sections_nested/sections_nested.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/simple/Simple.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/simple/simple.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/simple/simple.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/unescaped/Unescaped.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/unescaped/unescaped.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/unescaped/unescaped.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/utf8/UTF8.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/utf8/utf8.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/utf8/utf8.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/utf8_unescaped/UTF8Unescaped.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/utf8_unescaped/utf8_unescaped.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/utf8_unescaped/utf8_unescaped.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/whitespace/Whitespace.php create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/whitespace/partials/alphabet.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/whitespace/whitespace.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/examples/whitespace/whitespace.txt create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/templates/alpha.ms create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/templates/beta.ms create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/templates/one.mustache create mode 100644 admin/lib/vendor/mustache/mustache/test/fixtures/templates/two.mustache create mode 100644 admin/lib/vendor/phpmailer/phpmailer/COMMITMENT rename website/js/vendor/tinymce/js/tinymce/license.txt => admin/lib/vendor/phpmailer/phpmailer/LICENSE (98%) create mode 100644 admin/lib/vendor/phpmailer/phpmailer/README.md create mode 100644 admin/lib/vendor/phpmailer/phpmailer/SECURITY.md create mode 100644 admin/lib/vendor/phpmailer/phpmailer/VERSION create mode 100644 admin/lib/vendor/phpmailer/phpmailer/composer.json create mode 100644 admin/lib/vendor/phpmailer/phpmailer/get_oauth_token.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-af.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ar.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-az.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ba.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-be.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-bg.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ca.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ch.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-cs.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-da.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-de.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-el.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-eo.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-es.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-et.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fa.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fi.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fo.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fr.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-gl.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-he.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hi.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hr.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hu.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hy.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-id.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-it.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ja.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ka.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ko.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-lt.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-lv.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-mg.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ms.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-nb.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-nl.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-pl.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-pt.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-pt_br.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ro.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ru.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sk.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sl.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sr.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sv.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-tl.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-tr.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-uk.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-vi.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh_cn.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/src/Exception.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/src/OAuth.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/src/PHPMailer.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/src/POP3.php create mode 100644 admin/lib/vendor/phpmailer/phpmailer/src/SMTP.php create mode 100644 admin/lib/web/galleries.php create mode 100644 admin/lib/web/rendezvous.php create mode 100644 admin/lib/web/templates.php create mode 100644 admin/lib/web/webmenu.php create mode 100644 admin/lib/web/websites.php create mode 100644 admin/tmpl/.htaccess create mode 100644 admin/tmpl/index.html.mustache create mode 100644 admin/tmpl/login.html.mustache create mode 100644 admin/tmpl/pages/config/rendezvous.html.mustache create mode 100644 admin/tmpl/pages/config/shop.html.mustache create mode 100644 admin/tmpl/pages/config/site.html.mustache create mode 100644 admin/tmpl/pages/config/template.html.mustache create mode 100644 admin/tmpl/pages/config/users.html.mustache create mode 100644 admin/tmpl/pages/error.html.mustache create mode 100644 admin/tmpl/pages/galleries.html.mustache create mode 100644 admin/tmpl/pages/home.html.mustache create mode 100644 admin/tmpl/pages/login/forgotpassword.html.mustache create mode 100644 admin/tmpl/pages/login/login.html.mustache create mode 100644 admin/tmpl/pages/login/message.html.mustache create mode 100644 admin/tmpl/pages/orders.html.mustache create mode 100644 admin/tmpl/pages/rendezvous.html.mustache create mode 100644 admin/tmpl/pages/shop.html.mustache create mode 100644 admin/tmpl/pages/websites.html.mustache create mode 100644 admin/upload.php create mode 100644 dev/appicons.json create mode 100644 dev/db/sitedb..schema.sql create mode 100644 dev/setdevlinks.sh delete mode 100644 website/css/creorga.css delete mode 100644 website/css/site.css delete mode 100644 website/download/update.php delete mode 100644 website/img/Creorga_1000px.png delete mode 100644 website/img/applescript.png delete mode 100644 website/img/apps/cashboxlogo.svg delete mode 100644 website/img/apps/coloradiologo.svg delete mode 100644 website/img/apps/creorgalogo.svg delete mode 100644 website/img/apps/datastorelogo.svg delete mode 100644 website/img/apps/dkstools.svg delete mode 100644 website/img/apps/dksvpn.svg delete mode 100644 website/img/apps/hourtraxlogo.svg delete mode 100644 website/img/apps/invoicejournallogo.svg delete mode 100644 website/img/apps/qrcodegenerateorlogo.svg delete mode 100644 website/img/apps/websiteeditorlogo.svg delete mode 100644 website/img/bash.png delete mode 100644 website/img/bg.jpg delete mode 100644 website/img/bg_bw.jpg delete mode 100644 website/img/bg_creorga.jpg delete mode 100644 website/img/bgtest - Kopie.jpg delete mode 100644 website/img/bgtest.jpg delete mode 100644 website/img/cashbox.png delete mode 100644 website/img/childs.png delete mode 100644 website/img/coloradio.png delete mode 100644 website/img/creorgalogo.png delete mode 100644 website/img/css3.png delete mode 100644 website/img/festplatte.jpg delete mode 100644 website/img/filemaker.png delete mode 100644 website/img/fm_logotm_stacked.png delete mode 100644 website/img/groovy.png delete mode 100644 website/img/hourtrax.png delete mode 100644 website/img/htmlfive.png delete mode 100644 website/img/icons/menu.svg delete mode 100644 website/img/if_HTML_Logo_65687.png delete mode 100644 website/img/if_code-programming-javascript-software-develop-command-language_652581.png delete mode 100644 website/img/invoice_journal.png delete mode 100644 website/img/java.png delete mode 100644 website/img/javascript.png delete mode 100644 website/img/javascript_yellow.png delete mode 100644 website/img/kasse.jpg delete mode 100644 website/img/kinder.jpg delete mode 100644 website/img/logo-mysql.png delete mode 100644 website/img/musicmix.jpg delete mode 100644 website/img/musicmix.png delete mode 100644 website/img/mysql.png delete mode 100644 website/img/perl.png delete mode 100644 website/img/pics/google4.png delete mode 100644 website/img/pics/google_gray.svg delete mode 100644 website/img/pics/ico.copywriting.png delete mode 100644 website/img/pics/ico.monitoring.png delete mode 100644 website/img/pics/ico.optimization.png delete mode 100644 website/img/pics/image-1.jpg delete mode 100644 website/img/pics/image-10.jpg delete mode 100644 website/img/pics/image-11.jpg delete mode 100644 website/img/pics/image-12.jpg delete mode 100644 website/img/pics/image-2.jpg delete mode 100644 website/img/pics/image-3.jpg delete mode 100644 website/img/pics/image-4.jpg delete mode 100644 website/img/pics/image-5.jpg delete mode 100644 website/img/pics/image-6.jpg delete mode 100644 website/img/pics/image-7.jpg delete mode 100644 website/img/pics/image-8.jpg delete mode 100644 website/img/pics/image-9.jpg delete mode 100644 website/img/pics/img.home2.png delete mode 100644 website/img/pics/img.home3.png delete mode 100644 website/img/pics/img.home4.png delete mode 100644 website/img/pics/img.home6.png delete mode 100644 website/img/pics/logo.png delete mode 100644 website/img/pics/partner-1.jpg delete mode 100644 website/img/pics/partner-2.jpg delete mode 100644 website/img/pics/partner-3.jpg delete mode 100644 website/img/pics/partner-4.jpg delete mode 100644 website/img/pics/partner-5.jpg delete mode 100644 website/img/pics/partner-6.jpg delete mode 100644 website/img/pics/slide1.contact.png delete mode 100644 website/img/pics/slide1.jpg delete mode 100644 website/img/pics/slide2.contact.png delete mode 100644 website/img/pics/slide2.jpg delete mode 100644 website/img/pics/slide3.contact.png delete mode 100644 website/img/pics/slide3.jpg delete mode 100644 website/img/pics/spotlight-poi2.png delete mode 100644 website/img/pics/team.1.jpg delete mode 100644 website/img/pics/team.2.jpg delete mode 100644 website/img/pics/team.3.jpg delete mode 100644 website/img/pics/team.4.jpg delete mode 100644 website/img/pics/welcome.png delete mode 100644 website/img/pitouchcase.png delete mode 100644 website/img/postgres.png delete mode 100644 website/img/postgresql.png delete mode 100644 website/img/powershell.png delete mode 100644 website/img/price750.svg delete mode 100644 website/img/radio.jpg delete mode 100644 website/img/rechnung.jpg delete mode 100644 website/img/slider_pctablet.png delete mode 100644 website/img/sqlite.png delete mode 100644 website/img/sybar.png delete mode 100644 website/img/zeit.jpg delete mode 100644 website/info.php delete mode 100644 website/js/dataform.js delete mode 100644 website/js/global/myapp.js delete mode 100644 website/js/global/renderer.js delete mode 100644 website/js/global/report.js delete mode 100644 website/js/global/request.js delete mode 100644 website/js/global/sqlite.js delete mode 100644 website/js/timecalc.js delete mode 100644 website/js/vendor/moment/moment-with-locales.min.js delete mode 100644 website/js/vendor/moment/moment.min.js delete mode 100644 website/js/vendor/mustache/mustache.js delete mode 100644 website/js/vendor/mustache/mustache.min.js delete mode 100644 website/js/vendor/tabulator/css/tabulator.min.css delete mode 100644 website/js/vendor/tabulator/css/tabulator.min.css.map delete mode 100644 website/js/vendor/tabulator/css/tabulator_site.min.css delete mode 100644 website/js/vendor/tabulator/css/tabulator_site.min.css.map delete mode 100644 website/js/vendor/tabulator/js/modules/accessor.min.js delete mode 100644 website/js/vendor/tabulator/js/modules/calculation_colums.min.js delete mode 100644 website/js/vendor/tabulator/js/modules/clipboard.min.js delete mode 100644 website/js/vendor/tabulator/js/modules/data_tree.min.js delete mode 100644 website/js/vendor/tabulator/js/modules/download.min.js delete mode 100644 website/js/vendor/tabulator/js/modules/edit.min.js delete mode 100644 website/js/vendor/tabulator/js/modules/export.min.js delete mode 100644 website/js/vendor/tabulator/js/modules/format.min.js delete mode 100644 website/js/vendor/tabulator/js/modules/group_rows.min.js delete mode 100644 website/js/vendor/tabulator/js/modules/history.min.js delete mode 100644 website/js/vendor/tabulator/js/modules/menu.min.js delete mode 100644 website/js/vendor/tabulator/js/modules/page.min.js delete mode 100644 website/js/vendor/tabulator/js/modules/reactive_data.min.js delete mode 100644 website/js/vendor/tabulator/js/modules/resize_columns.min.js delete mode 100644 website/js/vendor/tabulator/js/modules/resize_table.min.js delete mode 100644 website/js/vendor/tabulator/js/modules/sort.min.js delete mode 100644 website/js/vendor/tabulator/js/tabulator.es2015.js delete mode 100644 website/js/vendor/tabulator/js/tabulator.min.js delete mode 100644 website/js/vendor/tabulator/js/tabulator_core.min.js delete mode 100644 website/js/vendor/tinymce/changelog.txt delete mode 100644 website/js/vendor/tinymce/js/tinymce/jquery.tinymce.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/langs/de.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/langs/fr_FR.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/langs/readme.md delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/advlist/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/anchor/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/autolink/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/autoresize/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/autosave/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/bbcode/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/charmap/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/code/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/codesample/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/colorpicker/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/contextmenu/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/directionality/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/emoticons/js/emojis.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/emoticons/js/emojis.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/emoticons/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/fullpage/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/help/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/hr/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/image/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/imagetools/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/importcss/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/insertdatetime/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/legacyoutput/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/link/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/lists/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/media/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/nonbreaking/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/noneditable/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/pagebreak/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/paste/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/preview/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/print/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/quickbars/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/save/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/searchreplace/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/spellchecker/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/tabfocus/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/table/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/template/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/textcolor/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/textpattern/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/toc/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/visualblocks/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/visualchars/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/plugins/wordcount/plugin.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/skins/content/dark/content.min.css delete mode 100644 website/js/vendor/tinymce/js/tinymce/skins/content/default/content.min.css delete mode 100644 website/js/vendor/tinymce/js/tinymce/skins/content/document/content.min.css delete mode 100644 website/js/vendor/tinymce/js/tinymce/skins/content/writer/content.min.css delete mode 100644 website/js/vendor/tinymce/js/tinymce/skins/ui/oxide-dark/content.inline.min.css delete mode 100644 website/js/vendor/tinymce/js/tinymce/skins/ui/oxide-dark/content.min.css delete mode 100644 website/js/vendor/tinymce/js/tinymce/skins/ui/oxide-dark/content.mobile.min.css delete mode 100644 website/js/vendor/tinymce/js/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff delete mode 100644 website/js/vendor/tinymce/js/tinymce/skins/ui/oxide-dark/skin.min.css delete mode 100644 website/js/vendor/tinymce/js/tinymce/skins/ui/oxide-dark/skin.mobile.min.css delete mode 100644 website/js/vendor/tinymce/js/tinymce/skins/ui/oxide/content.inline.min.css delete mode 100644 website/js/vendor/tinymce/js/tinymce/skins/ui/oxide/content.min.css delete mode 100644 website/js/vendor/tinymce/js/tinymce/skins/ui/oxide/content.mobile.min.css delete mode 100644 website/js/vendor/tinymce/js/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff delete mode 100644 website/js/vendor/tinymce/js/tinymce/skins/ui/oxide/skin.min.css delete mode 100644 website/js/vendor/tinymce/js/tinymce/skins/ui/oxide/skin.mobile.min.css delete mode 100644 website/js/vendor/tinymce/js/tinymce/themes/mobile/theme.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/themes/silver/theme.min.js delete mode 100644 website/js/vendor/tinymce/js/tinymce/tinymce.min.js delete mode 100644 website/tmpl/pages/computers.tt delete mode 100644 website/tmpl/pages/development.html.mustache delete mode 100644 website/tmpl/pages/en/privacy.tt delete mode 100644 website/tmpl/pages/en/terms.tt delete mode 100644 website/tmpl/pages/en/useterms.tt create mode 100644 website/tmpl/pages/error.html.mustache delete mode 100644 website/tmpl/pages/hosting.tt delete mode 100644 website/tmpl/pages/it-service.html.mustache delete mode 120000 website/website diff --git a/.gitignore b/.gitignore index 3be2b6f..acb79d3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ cms/lib/perl5 apps/lib website/lib/vendor/* +OLD/* \ No newline at end of file diff --git a/admin/.htaccess b/admin/.htaccess new file mode 100644 index 0000000..0969f29 --- /dev/null +++ b/admin/.htaccess @@ -0,0 +1,9 @@ + +RewriteEngine on +DirectoryIndex index.php index.html +php_flag display_startup_errors on +php_flag display_errors on +php_flag html_errors on +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d +RewriteRule "^(.*)$" "index.php" [NC,L,QSA] \ No newline at end of file diff --git a/admin/css/fonts/appicons.svg b/admin/css/fonts/appicons.svg new file mode 100644 index 0000000..c8119b9 --- /dev/null +++ b/admin/css/fonts/appicons.svg @@ -0,0 +1,57 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/admin/css/fonts/appicons.ttf b/admin/css/fonts/appicons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a58825bc59017403a0f4e389c004e3d566eabcbc GIT binary patch literal 11928 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 Z*FfV<39G$XtVc_Za6fhcvC((C{x8rtNUs0@ literal 0 HcmV?d00001 diff --git a/admin/css/fonts/appicons.woff b/admin/css/fonts/appicons.woff new file mode 100644 index 0000000000000000000000000000000000000000..49aa7a3a3ca55bee32dd80a0db3123c854fbd614 GIT binary patch literal 12004 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 literal 0 HcmV?d00001 diff --git a/admin/css/icons.css b/admin/css/icons.css new file mode 100644 index 0000000..4732276 --- /dev/null +++ b/admin/css/icons.css @@ -0,0 +1,167 @@ +@font-face { + font-family: 'appicons'; + src: + url('fonts/appicons.ttf?o5pwnj') format('truetype'), + url('fonts/appicons.woff?o5pwnj') format('woff'), + url('fonts/appicons.svg?o5pwnj#appicons') format('svg'); + font-weight: normal; + font-style: normal; + font-display: block; +} + +[class^="icon-"], [class*=" icon-"] { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'appicons' !important; + speak: never; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-list:before { + content: "\e900"; +} +.icon-menu:before { + content: "\e901"; +} +.icon-mport:before { + content: "\e902"; +} +.icon-export:before { + content: "\e903"; +} +.icon-add:before { + content: "\e904"; +} +.icon-trash:before { + content: "\e905"; +} +.icon-close:before { + content: "\e906"; +} +.icon-back:before { + content: "\e907"; +} +.icon-next:before { + content: "\e908"; +} +.icon-back2:before { + content: "\e909"; +} +.icon-next2:before { + content: "\e90a"; +} +.icon-user:before { + content: "\e90b"; +} +.icon-usergroup:before { + content: "\e90c"; +} +.icon-edituser:before { + content: "\e90d"; +} +.icon-userconfig:before { + content: "\e90e"; +} +.icon-options:before { + content: "\e90f"; +} +.icon-info:before { + content: "\e910"; +} +.icon-help:before { + content: "\e911"; +} +.icon-filter:before { + content: "\e912"; +} +.icon-print:before { + content: "\e913"; +} +.icon-email:before { + content: "\e914"; +} +.icon-phone:before { + content: "\e915"; +} +.icon-video:before { + content: "\e916"; +} +.icon-website:before { + content: "\e917"; +} +.icon-edit:before { + content: "\e918"; +} +.icon-pdf:before { + content: "\e919"; +} +.icon-categories:before { + content: "\e91a"; +} +.icon-duplicate:before { + content: "\e91b"; +} +.icon-search:before { + content: "\e91c"; +} +.icon-image:before { + content: "\e91d"; +} +.icon-music:before { + content: "\e91e"; +} +.icon-location:before { + content: "\e91f"; +} +.icon-camera:before { + content: "\e920"; +} +.icon-sync:before { + content: "\e921"; +} +.icon-badge:before { + content: "\e922"; +} +.icon-cart:before { + content: "\e923"; +} +.icon-home:before { + content: "\e924"; +} +.icon-alert:before { + content: "\e925"; +} +.icon-dataset:before { + content: "\e926"; +} +.icon-new:before { + content: "\e927"; +} +.icon-acrobat:before { + content: "\e928"; +} +.icon-agreement:before { + content: "\e929"; +} +.icon-agreement2:before { + content: "\e92a"; +} +.icon-shop:before { + content: "\e92b"; +} +.icon-calendar:before { + content: "\e92c"; +} +.icon-today:before { + content: "\e92d"; +} +.icon-certificate:before { + content: "\e92e"; +} diff --git a/admin/css/theme.css b/admin/css/theme.css new file mode 100644 index 0000000..7d36c92 --- /dev/null +++ b/admin/css/theme.css @@ -0,0 +1,1054 @@ +/* W3PRO.CSS 4.13 June 2019 by Jan Egil and Borge Refsnes */ +html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit} +/* Extract from normalize.css by Nicolas Gallagher and Jonathan Neal git.io/normalize */ +html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0} +html,body {-webkit-user-select: none;-ms-user-select: none;user-select: none;-moz-user-select:none;} +article,aside,details,figcaption,figure,footer,header,main,menu,nav,section{display:block}summary{display:list-item} +audio,canvas,progress,video{display:inline-block}progress{vertical-align:baseline} +audio:not([controls]){display:none;height:0}[hidden],template{display:none} +a{background-color:transparent}a:active,a:hover{outline-width:0} +abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted} +b,strong{font-weight:bolder}dfn{font-style:italic}mark{background:#ff0;color:#000} +small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} +sub{bottom:-0.25em}sup{top:-0.5em}figure{margin:1em 40px}img{border-style:none} +code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}hr{box-sizing:content-box;height:0;overflow:visible} +button,input,select,textarea,optgroup{font:inherit;margin:0}optgroup{font-weight:bold} +button,input{overflow:visible}button,select{text-transform:none} +button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button} +button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0} +button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText} +fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em} +legend{color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto} +[type=checkbox],[type=radio]{padding:0} +[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto} +[type=search]{-webkit-appearance:textfield;outline-offset:-2px} +[type=search]::-webkit-search-decoration{-webkit-appearance:none} +::-webkit-file-upload-button{-webkit-appearance:button;font:inherit} +/* End extract */ +/* html,body { + background-color: #52638e; +} */ +html,body{font-family:Verdana,sans-serif;font-size:10pt;line-height:1.5}html{overflow-x:hidden} +h1{font-size:36px}h2{font-size:30px}h3{font-size:24px}h4{font-size:20px}h5{font-size:18px}h6{font-size:16px}.serif{font-family:serif} +h1,h2,h3,h4,h5,h6{font-family:"Segoe UI",Arial,sans-serif;font-weight:400;margin: 0}.wide{letter-spacing:4px} +hr{border:0;border-top:1px solid #eee;margin:20px 0} +.img{max-width:100%;height:auto; vertical-align:middle}a{color:inherit} +.table,.table-all{border-collapse:collapse;border-spacing:0;width:100%;display:table}.table-all{border:1px solid #ccc} +.bordered tr,.table-all tr{border-bottom:1px solid #ddd}.striped tbody tr:nth-child(even){background-color:#f1f1f1} +.table-all tr:nth-child(odd){background-color:#fff}.table-all tr:nth-child(even){background-color:#f1f1f1} +.hoverable tbody tr:hover,.ul.hoverable li:hover{background-color:#ccc}.centered tr th,.centered tr td{text-align:center} +.table td,.table th,.table-all td,.table-all th{padding:8px 8px;display:table-cell;text-align:left;vertical-align:top} +.table th:first-child,.table td:first-child,.table-all th:first-child,.table-all td:first-child{padding-left:16px} +.btn,.button{border:none;display:inline-block;padding:8px 16px;vertical-align:middle;overflow:hidden;text-decoration:none;color:inherit;background-color:inherit;text-align:center;cursor:pointer;white-space:nowrap} +.btn:hover{box-shadow:0 8px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)} +.btn,.button{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} +.disabled,.btn:disabled,.button:disabled{cursor:not-allowed;background-color: #e6e6e6}.disabled *,:disabled *{pointer-events:none} +.btn.disabled:hover,.btn:disabled:hover{box-shadow:none} +.badge,.tag{background-color:#000;color:#fff;display:inline-block;padding-left:8px;padding-right:8px;text-align:center}.badge{border-radius:50%} +.ul{list-style-type:none;padding:0;margin:0}.ul li{padding:8px 16px;border-bottom:1px solid #ddd}.ul li:last-child{border-bottom:none} +.tooltip,.display-container{position:relative}.tooltip .text{display:none}.tooltip:hover .text{display:inline-block} +.ripple:active{opacity:0.5}.ripple{transition:opacity 0s} +.input{padding:6px;display:block;border: 1px solid #ccc;width:100%;background-color: #fff; }/*#e8f0fe*/ +.select{padding:2px 0; display:block;width:100%;border:1px solid #ccc;background-color: #fff;} +.dropdown-click,.dropdown-hover{position:relative;display:inline-block;cursor:pointer} +.dropdown-hover:hover .dropdown-content{display:block; } +.dropdown-hover:first-child,.dropdown-click:hover{background-color:#ccc;color:#000} +.dropdown-hover:hover > .button:first-child,.dropdown-click:hover > .button:first-child{background-color:#ccc;color:#000} +.dropdown-content{cursor:auto;color:#000;background-color:#fff;display:none;position:absolute;min-width:160px;margin:0;padding:0;z-index:1} +.check,.radio{width:24px;height:24px;position:relative;top:6px} +.sidebar{height:100%;width:160px;background-color:#fff;position:fixed!important;z-index:1;overflow:auto} +.bar-block .dropdown-hover,.bar-block .dropdown-click{width:100%} +.bar-block .dropdown-hover .dropdown-content,.bar-block .dropdown-click .dropdown-content{min-width:100%} +.bar-block .dropdown-hover .button,.bar-block .dropdown-click .button{width:100%;text-align:left;padding:8px 16px} +.main,#main{transition:margin-left .4s} +.modal{z-index:3;display:none;padding-top:100px;position:fixed;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgb(0,0,0);background-color:rgba(0,0,0,0.4)} +.modal-content{margin:auto;background-color:#fff;position:relative;padding:0;outline:0;width:600px} +.bar{width:100%}.center .bar{display:inline-block;width:auto} +.bar .bar-item{padding:8px 16px;float:left;width:auto;border:none;display:block;outline:0} +.bar .dropdown-hover,.bar .dropdown-click{position:static;float:left} +.bar .button{white-space:normal} +.bar-block .bar-item{width:100%;display:block;padding:8px 16px;text-align:left;border:none;white-space:normal;float:none;outline:0} +.bar-block.center .bar-item{text-align:center}.block{display:block;width:100%} +.responsive{display:block;overflow-x:auto} +.container:after,.container:before,.datapanel:after,.datapanel:before,.row:after,.row:before,.row-padding:after,.row-padding:before, +.cell-row:before,.cell-row:after,.clear:after,.clear:before,.bar:before,.bar:after{content:"";display:table;clear:both} +.col,.half,.third,.twothird,.threequarter,.quarter,.fifth,.twofifth,.threefifth,.fourfifth{float:left;width:100%} +.col.s1{width:8.33333%}.col.s2{width:16.66666%}.col.s3{width:24.99999%}.col.s4{width:33.33333%} +.col.s5{width:41.66666%}.col.s6{width:49.99999%}.col.s7{width:58.33333%}.col.s8{width:66.66666%} +.col.s9{width:74.99999%}.col.s10{width:83.33333%}.col.s11{width:91.66666%}.col.s12{width:99.99999%} +@media (min-width:601px){.col.m1{width:8.33333%}.col.m2{width:16.66666%}.col.m3,.quarter{width:24.99999%}.col.m4,.third{width:33.33333%}.fifth{width:20%;min-width:100px} +.col.m5{width:41.66666%}.col.m6,.half{width:49.99999%}.col.m7{width:58.33333%}.col.m8,.twothird{width:66.66666%} +.col.m9,.threequarter{width:74.99999%}.col.m10{width:83.33333%}.col.m11{width:91.66666%}.col.m12{width:99.99999%}.twofifth{width:40%}.threefifth{width:60%}.fourfifth{width:80%}} +@media (min-width:993px){.col.l1{width:8.33333%}.col.l2{width:16.66666%}.col.l3{width:24.99999%}.col.l4{width:33.33333%} +.col.l5{width:41.66666%}.col.l6{width:49.99999%}.col.l7{width:58.33333%}.col.l8{width:66.66666%} +.col.l9{width:74.99999%}.col.l10{width:83.33333%}.col.l11{width:91.66666%}.col.l12{width:99.99999%}} +.rest{overflow:hidden}.stretch{margin-left:-16px;margin-right:-16px} +.content,.auto{margin-left:auto;margin-right:auto}.content{max-width:980px}.auto{max-width:1140px} +.cell-row{display:table;width:100%}.cell{display:table-cell;vertical-align: top;} +.cell-top{vertical-align:top}.cell-middle{vertical-align:middle}.cell-bottom{vertical-align:bottom} +.hide{display:none!important}.show-block,.show{display:block!important}.show-inline-block{display:inline-block!important} +@media (max-width:1205px){.auto{max-width:95%}} +@media (max-width:600px){.modal-content{margin:0 10px;width:auto!important}.modal{padding-top:30px} +.dropdown-hover.mobile .dropdown-content,.dropdown-click.mobile .dropdown-content{position:relative} +.hide-small{display:none!important}.mobile{display:block;width:100%!important}.bar-item.mobile,.dropdown-hover.mobile,.dropdown-click.mobile{text-align:center} +.dropdown-hover.mobile,.dropdown-hover.mobile .btn,.dropdown-hover.mobile .button,.dropdown-click.mobile,.dropdown-click.mobile .btn,.dropdown-click.mobile .button{width:100%}} +@media (max-width:768px){.modal-content{width:500px}.modal{padding-top:50px}} +@media (min-width:993px){.modal-content{width:900px}.hide-large{display:none!important}.sidebar.collapse{display:block!important}} +@media (max-width:992px) and (min-width:601px){.hide-medium{display:none!important}} +@media (max-width:992px){.sidebar.collapse{display:none}.main{margin-left:0!important;margin-right:0!important}.auto{max-width:100%}} +.top,.bottom{position:fixed;width:100%;z-index:1}.top{top:0}.bottom{bottom:0} +.overlay{position:fixed;display:none;width:100%;height:100%;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,0.5);z-index:2} +.display-topleft{position:absolute;left:0;top:0}.display-topright{position:absolute;right:0;top:0} +.display-bottomleft{position:absolute;left:0;bottom:0}.display-bottomright{position:absolute;right:0;bottom:0} +.display-middle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%)} +.display-left{position:absolute;top:50%;left:0%;transform:translate(0%,-50%);-ms-transform:translate(-0%,-50%)} +.display-right{position:absolute;top:50%;right:0%;transform:translate(0%,-50%);-ms-transform:translate(0%,-50%)} +.display-topmiddle{position:absolute;left:50%;top:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)} +.display-bottommiddle{position:absolute;left:50%;bottom:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)} +.display-container:hover .display-hover{display:block}.display-container:hover span.display-hover{display:inline-block}.display-hover{display:none} +.display-position{position:absolute} +.circle{border-radius:50%} +.round-small{border-radius:2px}.round,.round-medium{border-radius:4px}.round-large{border-radius:8px}.round-xlarge{border-radius:16px}.round-xxlarge{border-radius:32px} +.row-padding,.row-padding>.half,.row-padding>.third,.row-padding>.twothird,.row-padding>.threequarter,.row-padding>.quarter,.row-padding>.col{padding:0 8px} +.container,.datapanel{padding:0.01em 8px}.datapanel{margin-top:8px;margin-bottom:8px} +.code,.codespan{font-family:Consolas,"courier new";font-size:16px} +.code{width:auto;background-color:#fff;padding:8px 12px;border-left:4px solid #4CAF50;word-wrap:break-word} +.codespan{color:crimson;background-color:#f1f1f1;padding-left:4px;padding-right:4px;font-size:110%} +.card,.card-2{box-shadow:0 2px 5px 0 rgba(0,0,0,0.16)} +.card-4,.hover-shadow:hover{box-shadow:0 4px 10px 0 rgba(0,0,0,0.2),0 4px 20px 0 rgba(0,0,0,0.19)} +.spin{animation:spin 2s infinite linear}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}} +.animate-fading{animation:fading 2s infinite}@keyframes fading{0%{opacity:0}50%{opacity:1}100%{opacity:0}} +.animate-opacity{animation:opac 0.8s}@keyframes opac{from{opacity:0} to{opacity:1}} +.animate-top{position:relative;animation:animatetop 1s}@keyframes animatetop{from{top:-300px;opacity:0} to{top:0;opacity:1}} +.animate-left{position:relative;animation:animateleft 0.4s}@keyframes animateleft{from{left:-300px;opacity:0} to{left:0;opacity:1}} +.animate-right{position:relative;animation:animateright 0.4s}@keyframes animateright{from{right:-300px;opacity:0} to{right:0;opacity:1}} +.animate-bottom{position:relative;animation:animatebottom 1s}@keyframes animatebottom{from{bottom:-300px;opacity:0} to{bottom:0;opacity:1}} +.animate-zoom {animation:animatezoom 0.6s}@keyframes animatezoom{from{transform:scale(0)} to{transform:scale(1)}} +.animate-input{transition:width 0.4s ease-in-out}.animate-input:focus{width:100%!important} +.opacity,.hover-opacity:hover{opacity:0.60}.opacity-off,.hover-opacity-off:hover{opacity:1} +.opacity-max{opacity:0.25}.opacity-min{opacity:0.75} +.greyscale-max,.grayscale-max,.hover-greyscale:hover,.hover-grayscale:hover{filter:grayscale(100%)} +.greyscale,.grayscale{filter:grayscale(75%)}.greyscale-min,.grayscale-min{filter:grayscale(50%)} +.sepia{filter:sepia(75%)}.sepia-max,.hover-sepia:hover{filter:sepia(100%)}.sepia-min{filter:sepia(50%)} +.tiny{font-size:10px!important}.small{font-size:12px!important}.medium{font-size:15px!important}.large{font-size:18px!important} +.xlarge{font-size:24px!important}.xxlarge{font-size:36px!important}.xxxlarge{font-size:48px!important}.jumbo{font-size:64px!important} +.left-align{text-align:left!important}.right-align{text-align:right!important}.justify{text-align:justify!important}.center{text-align:center!important} +.border-0{border:0!important}.border{border:1px solid #ccc!important} +.border-top{border-top:1px solid #ccc!important}.border-bottom{border-bottom:1px solid #ccc!important} +.border-left{border-left:1px solid #ccc!important}.border-right{border-right:1px solid #ccc!important} +.topbar{border-top:6px solid #ccc!important}.bottombar{border-bottom:6px solid #ccc!important} +.leftbar{border-left:6px solid #ccc!important}.rightbar{border-right:6px solid #ccc!important} +.section,.code{margin-top:16px!important;margin-bottom:16px!important} +.margin{margin:16px!important}.margin-top{margin-top:16px!important}.margin-bottom{margin-bottom:16px!important} +.margin-left{margin-left:16px!important}.margin-right{margin-right:16px!important} +.padding-small{padding:4px 8px!important}.padding{padding:8px 16px!important}.padding-large{padding:12px 24px!important} +.padding-16{padding-top:16px!important;padding-bottom:16px!important}.padding-24{padding-top:24px!important;padding-bottom:24px!important} +.padding-32{padding-top:32px!important;padding-bottom:32px!important}.padding-48{padding-top:48px!important;padding-bottom:48px!important} +.padding-64{padding-top:64px!important;padding-bottom:64px!important} +.left{float:left!important}.right{float:right!important} +.button:hover{color:#fff!important;background-color:#343434!important} +.transparent,.hover-none:hover{background-color:transparent!important} +.hover-none:hover{box-shadow:none!important} +/* DEFAULT COLORS */ +.amber,.hover-amber:hover{color:#000!important;background-color:#ffc107!important} +.aqua,.hover-aqua:hover{color:#000!important;background-color:#00ffff!important} +.blue,.hover-blue:hover{color:#fff!important;background-color:#2196F3!important} +.light-blue,.hover-light-blue:hover{color:#000!important;background-color:#87CEEB!important} +.brown,.hover-brown:hover{color:#fff!important;background-color:#795548!important} +.cyan,.hover-cyan:hover{color:#000!important;background-color:#00bcd4!important} +.blue-grey,.hover-blue-grey:hover{color:#fff!important;background-color:#607d8b!important} +.green,.hover-green:hover{color:#fff!important;background-color:#4CAF50!important} +.light-green,.hover-light-green:hover{color:#000!important;background-color:#8bc34a!important} +.indigo,.hover-indigo:hover{color:#fff!important;background-color:#3f51b5!important} +.khaki,.hover-khaki:hover{color:#000!important;background-color:#f0e68c!important} +.lime,.hover-lime:hover{color:#000!important;background-color:#cddc39!important} +.orange,.hover-orange:hover{color:#000!important;background-color:#ff9800!important} +.deep-orange,.hover-deep-orange:hover{color:#fff!important;background-color:#ff5722!important} +.pink,.hover-pink:hover{color:#fff!important;background-color:#e91e63!important} +.purple,.hover-purple:hover{color:#fff!important;background-color:#9c27b0!important} +.deep-purple,.hover-deep-purple:hover{color:#fff!important;background-color:#673ab7!important} +.red,.hover-red:hover{color:#fff!important;background-color:#f44336!important} +.sand,.hover-sand:hover{color:#000!important;background-color:#fdf5e6!important} +.teal,.hover-teal:hover{color:#fff!important;background-color:#009688!important} +.yellow,.hover-yellow:hover{color:#000!important;background-color:#ffeb3b!important} +.white,.hover-white:hover{color:#000!important;background-color:#fff!important} +.black,.hover-black:hover{color:#fff!important;background-color:#000!important} +.grey,.hover-grey:hover{color:#000!important;background-color:#9e9e9e!important} +.light-grey,.hover-light-grey:hover{color:#000!important;background-color:#f1f1f1!important} +.dark-grey,.hover-dark-grey:hover{color:#fff!important;background-color:#616161!important} +.pale-red,.hover-pale-red:hover{color:#000!important;background-color:#ffe7e7!important}.pale-green,.hover-pale-green:hover{color:#000!important;background-color:#e7ffe7!important} +.pale-yellow,.hover-pale-yellow:hover{color:#000!important;background-color:#ffffd7!important}.pale-blue,.hover-pale-blue:hover{color:#000!important;background-color:#e7ffff!important} +.text-align-right { text-align: right;} +.text-amber,.hover-text-amber:hover{color:#ffc107!important} +.text-aqua,.hover-text-aqua:hover{color:#00ffff!important} +.text-blue,.hover-text-blue:hover{color:#2196F3!important} +.text-light-blue,.hover-text-light-blue:hover{color:#87CEEB!important} +.text-brown,.hover-text-brown:hover{color:#795548!important} +.text-cyan,.hover-text-cyan:hover{color:#00bcd4!important} +.text-blue-grey,.hover-text-blue-grey:hover{color:#607d8b!important} +.text-green,.hover-text-green:hover{color:#4CAF50!important} +.text-light-green,.hover-text-light-green:hover{color:#8bc34a!important} +.text-indigo,.hover-text-indigo:hover{color:#3f51b5!important} +.text-khaki,.hover-text-khaki:hover{color:#b4aa50!important} +.text-lime,.hover-text-lime:hover{color:#cddc39!important} +.text-orange,.hover-text-orange:hover{color:#ff9800!important} +.text-deep-orange,.hover-text-deep-orange:hover{color:#ff5722!important} +.text-pink,.hover-text-pink:hover{color:#e91e63!important} +.text-purple,.hover-text-purple:hover{color:#9c27b0!important} +.text-deep-purple,.hover-text-deep-purple:hover{color:#673ab7!important} +.text-red,.hover-text-red:hover{color:#f44336!important} +.text-sand,.hover-text-sand:hover{color:#fdf5e6!important} +.text-teal,.hover-text-teal:hover{color:#009688!important} +.text-yellow,.hover-text-yellow:hover{color:#d2be0e!important} +.text-white,.hover-text-white:hover{color:#fff!important} +.text-black,.hover-text-black:hover{color:#000!important} +.text-grey,.hover-text-grey:hover{color:#757575!important} +.text-light-grey,.hover-text-light-grey:hover{color:#f1f1f1!important} +.text-dark-grey,.hover-text-dark-grey:hover{color:#3a3a3a!important} +.border-amber,.hover-border-amber:hover{border-color:#ffc107!important} +.border-aqua,.hover-border-aqua:hover{border-color:#00ffff!important} +.border-blue,.hover-border-blue:hover{border-color:#2196F3!important} +.border-light-blue,.hover-border-light-blue:hover{border-color:#87CEEB!important} +.border-brown,.hover-border-brown:hover{border-color:#795548!important} +.border-cyan,.hover-border-cyan:hover{border-color:#00bcd4!important} +.border-blue-grey,.hover-blue-grey:hover{border-color:#607d8b!important} +.border-green,.hover-border-green:hover{border-color:#4CAF50!important} +.border-light-green,.hover-border-light-green:hover{border-color:#8bc34a!important} +.border-indigo,.hover-border-indigo:hover{border-color:#3f51b5!important} +.border-khaki,.hover-border-khaki:hover{border-color:#f0e68c!important} +.border-lime,.hover-border-lime:hover{border-color:#cddc39!important} +.border-orange,.hover-border-orange:hover{border-color:#ff9800!important} +.border-deep-orange,.hover-border-deep-orange:hover{border-color:#ff5722!important} +.border-pink,.hover-border-pink:hover{border-color:#e91e63!important} +.border-purple,.hover-border-purple:hover{border-color:#9c27b0!important} +.border-deep-purple,.hover-border-deep-purple:hover{border-color:#673ab7!important} +.border-red,.hover-border-red:hover{border-color:#f44336!important} +.border-sand,.hover-border-sand:hover{border-color:#fdf5e6!important} +.border-teal,.hover-border-teal:hover{border-color:#009688!important} +.border-yellow,.hover-border-yellow:hover{border-color:#ffeb3b!important} +.border-white,.hover-border-white:hover{border-color:#fff!important} +.border-black,.hover-border-black:hover{border-color:#000!important} +.border-grey,.hover-border-grey:hover{border-color:#9e9e9e!important} +.border-light-grey,.hover-border-light-grey:hover{border-color:#f1f1f1!important} +.border-dark-grey,.hover-border-dark-grey:hover{border-color:#616161!important} +.border-pale-red,.hover-border-pale-red:hover{border-color:#ffe7e7!important}.border-pale-green,.hover-border-pale-green:hover{border-color:#e7ffe7!important} +.border-pale-yellow,.hover-border-pale-yellow:hover{border-color:#ffffd7!important}.border-pale-blue,.hover-border-pale-blue:hover{border-color:#e7ffff!important} +/* DEFAULT THEME */ +.theme-l5 {color:#000 !important; background-color:#f6f8fc !important} +.theme-l4 {color:#000 !important; background-color:#e1e9f6 !important} +.theme-l3 {color:#000 !important; background-color:#c3d3ed !important} +.theme-l2 {color:#000 !important; background-color:#a5bee4 !important} +.theme-l1 {color:#fff !important; background-color:#88a8db !important} +.theme-d1 {color:#fff !important; background-color:#5180cb !important} +.theme-d2 {color:#fff !important; background-color:#3a6fc3 !important} +.theme-d3 {color:#fff !important; background-color:#3361aa !important} +.theme-d4 {color:#fff !important; background-color:#2c5392 !important} +.theme-d5 {color:#fff !important; background-color:#24457a !important} + +.theme-light {color:#000 !important; background-color:#f6f8fc !important} +.theme-dark {color:#fff !important; background-color:#24457a !important} +.theme-action {color:#fff !important; background-color:#24457a !important} + +.theme {color:#fff !important; background-color:#6a92d3 !important} +.text-theme {color:#6a92d3 !important} +.border-theme {border-color:#6a92d3 !important} + +.hover-theme:hover {color:#fff !important; background-color:#6a92d3 !important} +.hover-text-theme:hover {color:#6a92d3 !important} +.hover-border-theme:hover {border-color:#6a92d3 !important} + +/* .label { color: #000; font-size: 8pt;} */ +/* #main {margin-left: 210px;} */ +/* @media (max-width:768px){ + #sidebar { display: none;} + #main { margin-left: 0px;} +} */ + +.info-panel { + padding: 3px; + color: #ff4500; + border: 1px solid #ff4500; + background-color: #f89774; +} + +.error-panel { + padding: 3px; + color: #ff0000; + border: 1px solid #ff0000; + background-color: #fcb2b2; +} + +.table { + table-layout: fixed; +} + +.text-line-through { text-decoration: line-through; } + +#snackbar { + visibility: hidden; + min-width: 250px; + margin-left: -125px; + background-color: #333; + color: #fff; + text-align: center; + + padding: 16px; + position: fixed; + z-index: 1; + left: 50%; + bottom: 30px; + font-size: 17px; +} + +#snackbar.show { + visibility: visible; + -webkit-animation: fadein 0.5s, fadeout 0.5s 2.5s; + animation: fadein 0.5s, fadeout 0.5s 2.5s; +} + +@-webkit-keyframes fadein { + from {bottom: 0; opacity: 0;} + to {bottom: 30px; opacity: 1;} +} + +@keyframes fadein { + from {bottom: 0; opacity: 0;} + to {bottom: 30px; opacity: 1;} +} + +@-webkit-keyframes fadeout { + from {bottom: 30px; opacity: 1;} + to {bottom: 0; opacity: 0;} +} + +@keyframes fadeout { + from {bottom: 30px; opacity: 1;} + to {bottom: 0; opacity: 0;} +} + +.tabulator-header-filter > input { + background-color: #fff; + border: 1px solid #ccc; + font-weight: normal; +} + +.readonly { + pointer-events:none; + color: #000!important; + background-color: #d3d3d3!important; +} + + + +.right-side-bg { + background: url("../img/bg1.jpg"); + background-size: cover; + min-height: 100vh; +} + + + + +/* .mceContentBody { + background: #fff; + color:#000; +} */ + +/* .tabulator-row-even { + background-color: #757575; +} */ + + +button +{ + background-color: #f4f4f4; + border: 1pt solid #cccccc; + font-size: 10pt; + color: #000; + line-height: 1line; + text-align: center; +} +button:hover +{ + background-color: #343434; +} +button:pressed +{ + background-color: #343434; +} +button:focus +{ + background-color: #343434; +} + + + + +header +{ + background-color: #fff; + box-sizing: border-box; +} + + +.actionbtn { + background-color: #293146; + color: #fff; +} + +::-webkit-input-placeholder +{ + color: rgba(60.3922%,60.3922%,60.3922%,1); +} + + +textarea +{ + background-color: #fff; + border-top-color: rgba(80%,80%,80%,1); + border-right-color: rgba(80%,80%,80%,1); + border-bottom-color: rgba(80%,80%,80%,1); + border-left-color: rgba(80%,80%,80%,1); + border-top-style: solid; + border-right-style: solid; + border-bottom-style: solid; + border-left-style: solid; + border-top-width: 1pt; + border-right-width: 1pt; + border-bottom-width: 1pt; + border-left-width: 1pt; + font-size: 11pt; + color: #000; + line-height: 1line; + text-align: left; + /* margin-top: 0.88em; + margin-right: 0.75em; + margin-bottom: 0.63em; + margin-left: 0.75em; + top: 0pt; + right: 30pt; + bottom: 0pt; + left: 0pt; + position: absolute; + box-sizing: border-box; */ +} +textarea:focus +{ + border-top-color: rgba(0%,43.9216%,81.1765%,1); + border-right-color: rgba(0%,43.9216%,81.1765%,1); + border-bottom-color: rgba(0%,43.9216%,81.1765%,1); + border-left-color: rgba(0%,43.9216%,81.1765%,1); +} +textarea:placeholder +{ + color: rgba(80%,80%,80%,1); +} +/* textarea .text +{ + +} */ +textarea .scrollbar_track +{ + width: 30pt; + top: 0pt; + right: 0pt; + bottom: 0pt; + position: absolute; + box-sizing: border-box; +} + + +footer +{ + background-color: #fff; + box-sizing: border-box; +} + + +div.group_container +{ + background-color: #e3e3e3; + border-top-color: rgba(80%,80%,80%,1); + border-right-color: rgba(80%,80%,80%,1); + border-bottom-color: rgba(80%,80%,80%,1); + border-left-color: rgba(80%,80%,80%,1); + border-top-style: solid; + border-right-style: solid; + border-bottom-style: solid; + border-left-style: solid; + border-top-width: 1pt; + border-right-width: 1pt; + border-bottom-width: 1pt; + border-left-width: 1pt; + padding-top: 4px; + padding-bottom: 8px; +} + +/* Custom Styles */ +.ListView_Default +{ + + background-color: rgba(0%,0%,0%,0); + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + + color: #000; + text-align: left; + margin-top: 2pt; + margin-right: 2pt; + margin-bottom: 2pt; + margin-left: 2pt; +} + + +button.btnNavigation +{ + + background-color: rgba(0%,0%,0%,0); + + font-family: -fm-font-family(Arial,Arial-BoldMT); + font-weight: bold; + font-size: 10pt; + color: #fff; + padding-top: 0pt; + padding-right: 0pt; + padding-bottom: 0pt; + padding-left: 0pt; +} + +div.PageListHeader +{ + border-top-color: rgba(80%,80%,80%,1); + border-right-color: rgba(80%,80%,80%,1); + border-bottom-color: rgba(80%,80%,80%,1); + border-left-color: rgba(80%,80%,80%,1); + border-top-style: solid; + border-right-style: solid; + border-bottom-style: solid; + border-left-style: solid; + border-top-width: 1pt; + border-right-width: 1pt; + border-bottom-width: 1pt; + border-left-width: 1pt; + color: #fff; + -fm-text-vertical-align: center; +} +div.PageListHeader .inner_border +{ + padding-top: 5pt; + padding-right: 5pt; + padding-bottom: 5pt; + padding-left: 5pt; +} + +.moduletoolbar +{ + background-color: #293146; + color: #fff; +} + +div.BodySectionHeader +{ + font-family: -fm-font-family(Arial,Arial-BoldMT); + font-weight: bold; +} + + +div.PageHeadTitle +{ + font-size: 18pt; + color: #fff; +} + +div.SubHeadTitle +{ + font-size: 13pt; + color: #fff; +} + +div.SectionHeader +{ + + background-color: rgba(22.3529%,26.6667%,38.4314%,1); + +} + +button.toolbarbtn +{ + border: 0.5px solid #c6c6c6; + background-color: rgba(0%,0%,0%,0); + color: #fff; +} +button.toolbarbtn:hover +{ + + background-color: #343434; + color: #fff; +} +button.toolbarbtn:pressed +{ + + background-color: rgba(20.3922%,20.3922%,20.3922%,1); + color: #fff; +} +button.toolbarbtn:focus +{ + border-top-color: rgba(80%,80%,80%,1); + border-right-color: rgba(80%,80%,80%,1); + border-bottom-color: rgba(80%,80%,80%,1); + border-left-color: rgba(80%,80%,80%,1); +} + + +a.toolbarbtn +{ + border: 0.5px solid #c6c6c6; + background-color: rgba(0%,0%,0%,0); + color: #fff; + text-align: center; + text-decoration: unset; +} +a.toolbarbtn:hover +{ + + background-color: rgba(20.3922%,20.3922%,20.3922%,1); + color: #fff; +} +a.toolbarbtn:pressed +{ + background-color: rgba(20.3922%,20.3922%,20.3922%,1); + color: #fff; +} +a.toolbarbtn:focus +{ + border-top-color: rgba(80%,80%,80%,1); + border-right-color: rgba(80%,80%,80%,1); + border-bottom-color: rgba(80%,80%,80%,1); + border-left-color: rgba(80%,80%,80%,1); +} + +button.bodybtn +{ + border: 0.5px solid #c6c6c6; + + background-color: rgba(0%,0%,0%,0); + + color: #000; +} +button.bodybtn:hover +{ + + background-color: rgba(20.3922%,20.3922%,20.3922%,1); + color: #fff; +} +button.bodybtn:pressed +{ + + background-color: rgba(20.3922%,20.3922%,20.3922%,1); + color: #fff; +} +button.bodybtn:focus +{ + border-top-color: rgba(80%,80%,80%,1); + border-right-color: rgba(80%,80%,80%,1); + border-bottom-color: rgba(80%,80%,80%,1); + border-left-color: rgba(80%,80%,80%,1); +} + + +a.bodybtn +{ + border: 0.5px solid #c6c6c6; + + background-color: rgba(0%,0%,0%,0); + + color: #000; + text-align: center; + text-decoration: unset; +} +a.bodybtn:hover +{ + + background-color: rgba(20.3922%,20.3922%,20.3922%,1); + color: #fff; +} +a.bodybtn:pressed +{ + background-color: rgba(20.3922%,20.3922%,20.3922%,1); + color: #fff; +} +a.bodybtn:focus +{ + border-top-color: rgba(80%,80%,80%,1); + border-right-color: rgba(80%,80%,80%,1); + border-bottom-color: rgba(80%,80%,80%,1); + border-left-color: rgba(80%,80%,80%,1); +} + + +div.ListView_Header +{ + border-top-color: rgba(80%,80%,80%,1); + border-right-color: rgba(80%,80%,80%,1); + border-bottom-color: rgba(80%,80%,80%,1); + border-left-color: rgba(80%,80%,80%,1); + border-top-style: solid; + border-right-style: solid; + border-bottom-style: solid; + border-left-style: solid; + border-top-width: 1pt; + border-right-width: 1pt; + border-bottom-width: 1pt; + border-left-width: 1pt; + font-weight: normal; + color: #fff; + -fm-text-vertical-align: center; +} +div.ListView_Header .inner_border +{ + padding-top: 2pt; + padding-right: 2pt; + padding-bottom: 2pt; + padding-left: 2pt; +} + +div.toolbar +{ + + background-color: rgba(32.1569%,38.8235%,55.6863%,1); + +} + +div.sectiontoolbar +{ + margin-top: 8px; + margin-bottom: 8px; + background-color: rgb(97, 98, 100); + +} + +div.FooterLabel +{ + color: #fff; +} + +button.Buttom_BodyNav:hover +{ + + background-color: rgb(141, 141, 141); + + /* color: #fff; */ +} + + +::-webkit-scrollbar { +-webkit-appearance: none; +width: 10px; +} + +::-webkit-scrollbar-track { + background-color: rgba(80%, 80%, 80%, .5); +} + +::-webkit-scrollbar-thumb { +border-radius: 0px; +background-color: rgba(0, 0, 0, .5); +-webkit-box-shadow: 0 0 1px rgba(255, 255, 255, .5); +} + +div.portaltextheader { + padding: 2px; + border: 1px solid white; +} + + + + + +select { + /* -webkit-appearance: none; */ + display: block; + color: #000; + line-height: 1line; + text-align: left; + padding: 3.5px; + width: 100%; + max-width: 100%; + box-sizing: border-box; + margin: 0; + border: 1px solid #cccccc; + /* box-shadow: 0 1px 0 1px rgba(0,0,0,.04); */ + border-radius: 0px; + font-weight: normal; + font-size: 11pt; + background-color: #fff; + /* background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23000%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E'), + linear-gradient(to bottom, #fff 0%,#fff 100%); + background-repeat: no-repeat, repeat; + background-position: right .7em top 50%, 0 0; + background-size: .65em auto, 100%; */ +} + + +/* option { + appearance: none; + border: 1px solid 0070cf; + padding: 2px; +} */ +select:focus +{ + border: 1px solid #3a6fc3; + border-radius: unset; +} + + +::-webkit-select-placeholder +{ + color: #9a9a9a; +} + +div.DataFooter{ + background: #384462; +} +.input-sum{padding:2px;display:block;border: 1px solid #ccc;width:100%;background-color: #4D4D4D; } + + +.currency-sum {padding:2px;display:block;border: 1px solid #ccc;width:100%;background-color: #4D4D4D;} + +.currency-sum,.currency-sum:read-only { + display: block; + color: #fff; + padding: 2px; + padding-right: 12px; + width: 100%; + max-width: 100%; + box-sizing: border-box; + margin: 0; + border: 1px solid #ccc; + border-radius: unset; + -moz-appearance: none; + -webkit-appearance: none; + appearance: none; + background-color: #4D4D4D; + background-image: url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22225%22%20height=%22300%22%3E%3Cpath%20fill=%22white%22%20stroke=%22none%22%20d=%22m%20224.99996,16.22698%20-8.11342,36.41161%20q%20-24.14255,-19.78892%20-54.61741,-19.78892%20-41.3588,0%20-65.00658,23.74671%20-23.647774,23.7467%20-28.397115,53.23215%20l%20134.960355,0%20-5.14505,26.71508%20-132.981532,0%20-0.395848,7.71771%200.395848,18.20566%20127.242642,0%20-5.14505,26.71508%20-117.941954,0%20q%207.519719,40.17154%2032.552754,59.06997%2025.03303,18.89844%2056.49745,18.89844%2037.20302,0%2057.98149,-19.59107%20l%200,40.9631%20Q%20192.34828,300%20162.26913,300%2053.034301,300%2030.474864,189.18206%20l%20-30.474864,0%205.738751,-26.71508%2020.580475,0%20q%20-0.395708,-4.74934%20-0.395708,-17.80995%20l%200,-8.11342%20-25.923518,0%205.738751,-26.71508%2023.152999,0%20Q%2039.181988,55.21112%2076.583149,27.60556%20113.98417,0%20163.06069,0%20199.868,0%20224.99996,16.22698%20z%22%20/%3E%3C/svg%3E'); + background-repeat: no-repeat, repeat; + background-position: right 2px top 50%, 0 0; + background-size: 9px auto, 100%; +} + + + + +/* input[type=date]::-webkit-inner-spin-button, +input[type=date]::-webkit-outer-spin-button { + display: none; +} */ + +:focus { + outline: unset; +} + +input +{ + background-color: #ffffff; + border: 1px solid #cccccc; + font-weight: normal; + font-size: 11pt; + color: #000000; + line-height: 1line; + text-align: left; + width:100%; + padding:2px; + display:block; + border-radius: unset; +} +/* input:focus +{ + border: #0070cf; +} */ + +input:focus { + border: 1px solid #3a6fc3; + border-radius: unset; +} + +input[readonly=true]{ + color: #000!important; + background-color: #d3d3d3!important; +} + +input[type=number]::-webkit-inner-spin-button, +input[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} +/* input[type=checkbox]{ + appearance: none; + display:inline-block; + font-size: 24px!important; + border: 1px solid green; +} */ + +input[class=currency] { + padding: 2px; + padding-right: 12px; + text-align: right; + background-image: url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22225%22%20height=%22300%22%3E%3Cpath%20stroke=%22none%22%20d=%22m%20224.99996,16.22698%20-8.11342,36.41161%20q%20-24.14255,-19.78892%20-54.61741,-19.78892%20-41.3588,0%20-65.00658,23.74671%20-23.647774,23.7467%20-28.397115,53.23215%20l%20134.960355,0%20-5.14505,26.71508%20-132.981532,0%20-0.395848,7.71771%200.395848,18.20566%20127.242642,0%20-5.14505,26.71508%20-117.941954,0%20q%207.519719,40.17154%2032.552754,59.06997%2025.03303,18.89844%2056.49745,18.89844%2037.20302,0%2057.98149,-19.59107%20l%200,40.9631%20Q%20192.34828,300%20162.26913,300%2053.034301,300%2030.474864,189.18206%20l%20-30.474864,0%205.738751,-26.71508%2020.580475,0%20q%20-0.395708,-4.74934%20-0.395708,-17.80995%20l%200,-8.11342%20-25.923518,0%205.738751,-26.71508%2023.152999,0%20Q%2039.181988,55.21112%2076.583149,27.60556%20113.98417,0%20163.06069,0%20199.868,0%20224.99996,16.22698%20z%22%20/%3E%0A%3C/svg%3E'), + linear-gradient(to bottom, #fff 0%,#fff 100%); + background-repeat: no-repeat, repeat; + background-position: right 2px top 50%, 0 0; + background-size: 9px auto, 100%; +} + +input[class=currency]:read-only { + background-image: url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22225%22%20height=%22300%22%3E%3Cpath%20stroke=%22none%22%20d=%22m%20224.99996,16.22698%20-8.11342,36.41161%20q%20-24.14255,-19.78892%20-54.61741,-19.78892%20-41.3588,0%20-65.00658,23.74671%20-23.647774,23.7467%20-28.397115,53.23215%20l%20134.960355,0%20-5.14505,26.71508%20-132.981532,0%20-0.395848,7.71771%200.395848,18.20566%20127.242642,0%20-5.14505,26.71508%20-117.941954,0%20q%207.519719,40.17154%2032.552754,59.06997%2025.03303,18.89844%2056.49745,18.89844%2037.20302,0%2057.98149,-19.59107%20l%200,40.9631%20Q%20192.34828,300%20162.26913,300%2053.034301,300%2030.474864,189.18206%20l%20-30.474864,0%205.738751,-26.71508%2020.580475,0%20q%20-0.395708,-4.74934%20-0.395708,-17.80995%20l%200,-8.11342%20-25.923518,0%205.738751,-26.71508%2023.152999,0%20Q%2039.181988,55.21112%2076.583149,27.60556%20113.98417,0%20163.06069,0%20199.868,0%20224.99996,16.22698%20z%22%20/%3E%0A%3C/svg%3E'), + linear-gradient(to bottom, #d3d3d3 0%,#d3d3d3 100%); +} + +input[class=percent] { + padding: 2px; + padding-right: 12px; + text-align: right; + background-image: url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22256%22%20height=%22232%22%20version=%221.0%22%3E%3Cg%20transform=%22translate(-112.3674,-128.3649)%22%3E%3Cpath%20style=%22fill:black;fill-opacity:1;stroke:none%22%20d=%22M%20317.1674,257.53698%20C%20308.53463,257.53708%20301.73774,261.20839%20296.77671,268.55094%20C%20291.91449,275.89365%20289.48349,286.1138%20289.48368,299.2114%20C%20289.48349,312.11067%20291.91449,322.2812%20296.77671,329.72303%20C%20301.73774,337.06568%20308.53463,340.737%20317.1674,340.73698%20C%20325.60128,340.737%20332.24934,337.06568%20337.11159,329.72303%20C%20342.07258,322.2812%20344.5532,312.11067%20344.55345,299.2114%20C%20344.5532,286.21302%20342.07258,276.04249%20337.11159,268.69977%20C%20332.24934,261.25801%20325.60128,257.53708%20317.1674,257.53698%20M%20317.1674,238.63466%20C%20332.84469,238.63477%20345.29739,244.09213%20354.52554,255.00675%20C%20363.75318,265.92157%20368.36713,280.65644%20368.3674,299.2114%20C%20368.36713,317.76648%20363.70357,332.50135%20354.37671,343.41605%20C%20345.14855,354.23156%20332.74546,359.6393%20317.1674,359.63931%20C%20301.29123,359.6393%20288.7393,354.23156%20279.51159,343.41605%20C%20270.28351,332.50135%20265.66956,317.76648%20265.66973,299.2114%20C%20265.66956,280.55721%20270.28351,265.82234%20279.51159,255.00675%20C%20288.83853,244.09213%20301.39045,238.63477%20317.1674,238.63466%20M%20163.5674,147.9928%20C%20155.03401,147.993%20148.28673,151.71393%20143.32554,159.15559%20C%20138.46349,166.49841%20136.03248,176.61933%20136.03252,189.51838%20C%20136.03248,202.61621%20138.46349,212.83635%20143.32554,220.17884%20C%20148.18751,227.52161%20154.93479,231.19292%20163.5674,231.1928%20C%20172.19989,231.19292%20178.94717,227.52161%20183.80926,220.17884%20C%20188.77041,212.83635%20191.25103,202.61621%20191.25113,189.51838%20C%20191.25103,176.71856%20188.77041,166.59764%20183.80926,159.15559%20C%20178.84794,151.71393%20172.10066,147.993%20163.5674,147.9928%20M%20297.9674,129.09047%20L%20321.78136,129.09047%20L%20182.7674,359.63931%20L%20158.95345,359.63931%20L%20297.9674,129.09047%20M%20163.5674,129.09047%20C%20179.24484,129.0907%20191.74715,134.54806%20201.07438,145.46256%20C%20210.4014,156.27827%20215.06496,170.96352%20215.06508,189.51838%20C%20215.06496,208.27201%20210.4014,223.05649%20201.07438,233.87187%20C%20191.84638,244.68748%20179.34406,250.09523%20163.5674,250.09512%20C%20147.79061,250.09523%20135.28829,244.68748%20126.06043,233.87187%20C%20116.93172,222.95727%20112.36739,208.17279%20112.3674,189.51838%20C%20112.36739,171.06275%20116.98134,156.37749%20126.20926,145.46256%20C%20135.43713,134.54806%20147.88983,129.0907%20163.5674,129.09047%22%20/%3E%3C/g%3E%3C/svg%3E'), + linear-gradient(to bottom, #fff 0%,#fff 100%); + background-repeat: no-repeat, repeat; + background-position: right 2px top 50%, 0 0; + background-size: 9px auto, 100%; +} + + +label { + height: 12.8px!important; + color: #000; + font-size: 8pt; +} + + + +input[type="checkbox"] { + display: block; + -webkit-appearance:none;/* Hides the default checkbox style */ + height:29.66px; + width:29.66px; + cursor:pointer; + position:relative; + -webkit-transition: .15s; + border-radius: unset; + border: 1px solid #cccccc; + background-color:#fff; + } + + input[type="checkbox"]:checked { + background-color:#9ABCEA; + } + + input[type="checkbox"]:before, input[type="checkbox"]:checked:before { + position:absolute; + top:0; + left:0; + width:100%; + height:100%; + line-height:2em; + text-align:center; + color:#000; + content: ''; + } + + input[type="checkbox"]:checked:before { + font-size: 11pt; + content: '✔'; + } + + input[type="checkbox"]:hover:before { + background:rgba(255,255,255,0.3); + } + + + body.mceContentBody { + background:#e8f0fe; + color:#000; +} + +/* .mceContentBody { + background: #e8f0fe; + color:#000; +} */ + +/* .tabulator-row-even { + background-color: #757575; +} */ + +:focus { + outline: 1px solid #607d8b; +} + +.modal-content > header { + background-color: #293146; + color: #fff; + padding:8px!important; + margin-bottom: 10px; +} + +.modal-content > header > h2 { + font-size: 13pt; +} + +.modal-content > footer { + + /* padding:0.01em 8px; */ + text-align:right!important; + color:#000!important; + background-color:#c6c6c6!important; + margin-top: 6px; + padding-top:8px!important; + padding-bottom:8px!important; +} + +.modal-content > header:after,.modal-content > header:before,.modal-content > footer:after,.modal-content > footer:before { + content:"";display:table;clear:both +} + +span[class^="icon"]::after { + content: "\A"; + white-space: pre; +} + +.inlinebtn { + position: relative; + height: 28px; + margin-top: -28px; + margin-left: -20px; + padding: 4px 8px; + border: 0!important; + float: right; +} + +#loader { + position: absolute; + left: 50%; + top: 50%; + z-index: 1; + width: 150px; + height: 150px; + margin: -75px 0 0 -75px; + border: 16px solid #f3f3f3; + border-radius: 50%; + border-top: 16px solid #3498db; + width: 120px; + height: 120px; + -webkit-animation: spin 2s linear infinite; + animation: spin 2s linear infinite; +} + +@-webkit-keyframes spin { + 0% { -webkit-transform: rotate(0deg); } + 100% { -webkit-transform: rotate(360deg); } +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + diff --git a/admin/db.php b/admin/db.php new file mode 100644 index 0000000..e3b2681 --- /dev/null +++ b/admin/db.php @@ -0,0 +1,59 @@ +getSession($vars["sid"]); + // if (!isset($vars["session"]["id_session"])){ + // $vars["sid"] = ""; + // } + } + $params = array(); + if (isset($_POST) && count($_POST) > 0){ + $params = $_POST; + } elseif (isset($_GET)){ + $params = $_GET; + } + $html["params"] = $params; + if(count($vars["session"]) == 0) { + header('Content-Type: application/json'); + echo json_encode($html); + exit(1); + } + if (isset($params["get"])){ + if (strpos($params["get"], 'gallery_') === 0) { + + } elseif (strpos($params["get"], 'rdv_') === 0){ + + } elseif (strpos($params["get"], 'website_') === 0){ + + } elseif (strpos($params["get"], 'users_') === 0){ + + } elseif (strpos($params["get"], 'template_') === 0){ + $tmpl = new templates($cfg["sitetemplatepath"]); + if ($params["get"] == "template_files"){ + $html["files"] = $tmpl->gettemplatefiles(); + } + elseif ($params["get"] == "template_media"){ + $html["files"] = $tmpl->getmediafiles(); + } + } + + } elseif (isset($params["fn"])){ + + + } elseif(isset($params["save"])){ + + } + header('Content-Type: application/json'); + echo json_encode($html); +?> \ No newline at end of file diff --git a/admin/img/POT-logo.png b/admin/img/POT-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e2c802852b309809a3be2a7b0203a916d8f50b8b GIT binary patch literal 20930 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 literal 0 HcmV?d00001 diff --git a/admin/img/applogo.png b/admin/img/applogo.png new file mode 100644 index 0000000000000000000000000000000000000000..b82da90b4d4f1d326c712fb74a53447b5740ec38 GIT binary patch literal 14719 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 literal 0 HcmV?d00001 diff --git a/admin/img/favicon/android-icon-48x48.png b/admin/img/favicon/android-icon-48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..e5156722249fd8b5553bdc04d86a042947a1a5d6 GIT binary patch literal 1611 zcmV-R2DJH!P)137@iQlg}yQX@`{nnQYOPALZnhoYtwI20jqLSii?5fXw%0zpIw z`(lG_Y-3|K+j#BAjEbsMEw=FlexcEu@$-A1zxn>{L36oWemBXOK3QdbeZ8lrhtKE9 zWJ!gEg?v8W>!s*E0o2;s^77@+X0yd+vmG8DUNb{Zr*my>4TJjn`k0uQE3W1PhK`Po zv|0_5$!uU@GSDV|G6>gbjI1)8D1PX3knKMOq4x;{$p5J7=;XVbac$l&i?zk zjj)Tc#bPlS4BOjsOfD-cqfkRTJ3AiDS1Na@)zE_n_x1XNfB+VaMrShVG{P7RfAUki z-HKayzRl)vxt!qX)~z%O0pVSYj*hLau2`*S*wX35AIt#|~efxHvM_)-vNf{gagDNjGnNA4;-2KsFaVVS3F&Yo3 z0;E!@AYll|&G{mcn8Bbcl`5(LA#*_`LZQ&j`S5(Ges51r6`+-s)zEVjyEz{v05aO{ z?k-hcwz9IEnwrYtaNV45G#XIgCL|*@Io)weGJwY9b3+R$+S-Ma-ZY6N7PzP>)60U8+@85$bQ%F4>k&BcrJx_!IU|J}-E zOG``l?p6BxvjztTHa0eEYiqo|H9ySlnjeR~NAJ~cf(rO{|HEj>LwDJiL|tMmQ) zC8T)v3=9m$23#%&oWW3vVQ{_{4W4-JjDQHY!WAnZ83R4~6LbUz2M1cM77wLT zX=CHpm6eq!>rl$M1?chPZ}<20s2o5HGR5rd%rRjo|FDOJFoGdaWXB??jW8yO!8R<` zc|io+1W6pA=kfTc)KFXo1qC5Jt5oXw`MHXUin_Y`%K;(G6c>Mry)l0J^!vuf#`5yd zF$PaaOz3a;e7;Z^f-8^5K{bua8hqI8PNIfnfLx4EPL9Ef!EgX}(7@r=XgpM_Rp6Vf zDq+yTt5>ft&t)AQzmRBPB_$>BuerH7Do%sQQ;N$0)zs8-xje`jeIVXfdwaWYae&2$ zhzOZXcIQr^XI=(Ckj2o@fI_i@R&{f8%V5x(&1O=k&yAAa>;A0hg+w6u7N=Bj|o%gbN9XhqEZ;CWS5)xf|&Mn;A= zi@L6CNGVUAd?%I0M@L89z5B(RH-BDbHQG)4ZxG$@hS^^N3;>KWqru=dIFSGV002ov JPDHLkV1oJJ`Gx=h literal 0 HcmV?d00001 diff --git a/admin/img/favicon/android-icon-72x72.png b/admin/img/favicon/android-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..bde7f5fb3cc9692d0f5ac6da9e65824de7abf3d3 GIT binary patch literal 2523 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 literal 0 HcmV?d00001 diff --git a/admin/img/favicon/android-icon-96x96.png b/admin/img/favicon/android-icon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..af43b2147bfdc1f2fa1047f9260b71a49cac1a32 GIT binary patch literal 3555 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 literal 0 HcmV?d00001 diff --git a/admin/img/favicon/apple-icon-114x114.png b/admin/img/favicon/apple-icon-114x114.png new file mode 100644 index 0000000000000000000000000000000000000000..12f42e1b24afd8a7e0e871fa6f4c966bd133f462 GIT binary patch literal 4215 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 S-TE;A0000Kqk literal 0 HcmV?d00001 diff --git a/admin/img/favicon/apple-icon-144x144.png b/admin/img/favicon/apple-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..89f9182107ddf9221593e1ce9d80547b47916649 GIT binary patch literal 5513 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 LNkvXXu0mjfv!1A0 literal 0 HcmV?d00001 diff --git a/admin/img/favicon/apple-icon-152x152.png b/admin/img/favicon/apple-icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..3843942a5384376c78cda61ee46f18269c37ec99 GIT binary patch literal 5899 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 literal 0 HcmV?d00001 diff --git a/admin/img/favicon/apple-icon-180x180.png b/admin/img/favicon/apple-icon-180x180.png new file mode 100644 index 0000000000000000000000000000000000000000..363c190b7e29b59e2929fc6d9ffa50da36c8dc1c GIT binary patch literal 7250 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 R;3pxPih{=58hP{J{{udv05bpp literal 0 HcmV?d00001 diff --git a/admin/img/favicon/apple-icon-57x57.png b/admin/img/favicon/apple-icon-57x57.png new file mode 100644 index 0000000000000000000000000000000000000000..00952f2e130c24c788de339dd42e0565d170d889 GIT binary patch literal 1917 zcmV-@2ZH#CP)^=>`Z6}%WF%ux^FiZ+vbU)Z>L4`^OlH8Lap;3!OokbfiW)8% z$^%dkDz`#Qi}ZeBKhDV-=A6=V$`Sr)52q*p%kTT2@B4kf?;Ke3^Yam_q_HDbPg_k` zx#69zqobp|{9C)-v2*7RHk(sXQ6ZPhS18u*?rx*es8*{lT(~$fF(DA}SMI((d-e>+ z&fxonnR->y(7RvZru4-Y#WP985ZXn!Cu4+B=B4;T#nIC3}~pU;Q8FAxZD4C8&H zB$42!G$TWW zpG;!~tkTjG7K3ih$v?S8-C<#K`_W@aoPGKa&ycI{fGvF_THuT-Xi|Gi$X z$KwGAr_&5~U?0Q+jDZc&(J^UhX?#8(%%D^%8I3KB+P80SUtb@O#{)O<`S`o= zMT!C%GEt!q%)rs@_ISN+mkS>ku4puxJ9mC(6zlWn&#|3g(?B4A-36zT;E<~@?LXZD zTy7+304zagbbw*ow`(XQUW!<4Hd|R)slhOaKyf%60Q$ipfGdPAi`Jy4r|Wb&3d)8{ zIhOVMCy1M+55bPwh-NZPzIpS80#=HgH8nK_pxCNV2O^UJrPVsa9KVi?jF1b5IuHpq zAtAwRwlIfvVqzRe3QQRlC0w^oVKz@OiFE?Uq@<)!2iom(Yu1SR`UaT8`r^fln3xy} zSjWf5!5iJ(oebqI1afC*C$y48BBekegM)*hWTamR#bw{u{{8`we_~=1HEtdpG`uDn z6Fz{_568`$H@V#|3d2#@AmKGPH!nL@EOYN(BTjO1a!_DVmOibme=a-Lj*gDu;gR@- zCWF^f#@f}@1?jWASa08Mz_GaaGdSz$=qP2ZkPyH9c5@lAf~p!D??NsW7a#8J?WI|l z*4Nh=jmBlc3h{C7+*#~LQBhH5X4c)ijWn^M^gVmFBK%k(lTV*Mh1wO_yt48~aOC61 zt@KO&hYugZe#C1yu^J49(b3o2wr#7asfA>zuC77}MX?-ZvrtM%Boet?u2QLB_7eU6 z16muLkHEin?OI%1Y<70GLZLtkfTSN98Y1-n0)?SO@pxQ5UjX&if7L$bhrT9M3yK`n zTfD_xyk6hbl&Q0`3-#mi<6mvvx|Pf2hKv>KLlIl8)*Cl|ee~!Ntp8VP=5kTKl221a z3k^lA5JfDhXoK|@Igj5TAj(E3CWO{@5^ZrQf%-8eC3Vl9JtZYyU|QU_cUCz6i?ylg z{;5-^H*82pZB$TDfZ`J|Yc`uvHd`!KY{vAo8IsvWG=v@2CM!YAhf~5HR9X>au?5=} zsz*K_P#}6@W8-4+jf;zl5}-f2p$vZcvKKYnt5-vpFaNC7YL}{Ape=CUEf(|Br}#XL zjg866%e#2-LTl^e#6$(c3(KUWB*WWyyhsiQNZ4#P7qEys81Vb&iHC658#W9eCWI{k z!WM*E>%GjVG7y4 zWlJvfP*zqZPN+X0fcs8PPR`EG!m%KNo*UjeX_3P94d;yRNg+dHTN=k;`i^XD)2|^8f@!=;ZbQV8h}o zuCz6d8 z#e#y}Cr^H#nyN%*8WQ$;t2rJ63=IHJ#Gyo~`gAX_sH&BPkG(m1E`J9H%J4Cuz!9nC+ zzDH08&lQSwbk?H#-VoXV`e=!rv$8gQOspXA($a61((}lXBS()O{g_zM)M_<|>ivB( zGc(Ve`2pp?N5+bTdF9HL_dJI?bf~Dl{wA1<=0ah6Cy$(jWPAO3?czAYmY0`*ci_N* z@W`C`ur{Qq;^M<OPNxIQhH-M%D*FGdzXccopCIqC#zCjo00000NkvXXu0mjf D-`t!@ literal 0 HcmV?d00001 diff --git a/admin/img/favicon/apple-icon-60x60.png b/admin/img/favicon/apple-icon-60x60.png new file mode 100644 index 0000000000000000000000000000000000000000..60589f696c242874859ab8d9e50b646398bc0014 GIT binary patch literal 2112 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 literal 0 HcmV?d00001 diff --git a/admin/img/favicon/apple-icon-76x76.png b/admin/img/favicon/apple-icon-76x76.png new file mode 100644 index 0000000000000000000000000000000000000000..0dedab8d45d22be5775037057782f00a1f3a468b GIT binary patch literal 2700 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 +#ffffff \ No newline at end of file diff --git a/admin/img/favicon/favicon-16x16.png b/admin/img/favicon/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..82491e20feb5bea2e509c2e4ca0263eacc922498 GIT binary patch literal 458 zcmV;*0X6=KP)~7J~6-&?a=z zZaUOZU0r2kuW_|QU3>B4;SCBZAL6aH>HF1U}Wgww}Nl6s}slDxh1jRGmd+s?o z_q$*05CKtqTP~NUJRXa{U?8MYDTZM}{27C)s*A;JKA%C6%jGJSO3;QtO32XdzVJMs zOeS$0U#-@q(tWS@dMP21NR-QEzolt(A^$eRRielR~MN#NK;69LMS(dKr`TU(A2*)cmn@`*Ab~1U_ zw6D$P8+6cSvo{!qW-=L?zAYAu=RXdlolYknr=VD`&3gTjVID4h9AG>iE6OKHlDplG zW!c~eJypX?+U+)qBA{+G8r5nwI6bq{W&8>-0Ke(g%vsDwFF=&*; zSd%Dd1QA?>EUc@F8>yDYr4ibdSg^agmqKc#aali98rm!>n5||Z)l{m6A}Xdv(bU-Z zYw9QeZ%=2ch;6>cyBOZg+;`7=_uPBlBcjpho!c~4O5VrE$Bm7R8jWUUWhL1;(NxTA zHj6~UrKKgm-=E}^)OKLCe#^?rQmZ@L+8&&rpJzTrX7ktV>}-U#+wG^Pr^!qq5|SJa zhjqGlNV?PcYhmGw%jM#7xdPe>3;9JwMI9X-a=AQxfUT{qrlxyw9NOC-YPH%}f60V< zBuTQhwUx~#2?DE$5Cn@ZjlY9PBwSl7zYzx>k0&Q5hl#}$22*=@4TnP{$wo!RTVFx| zBpo4w!4MrWa*@&~i^XEI+4us^BasMR(*&?s)(r+j90!R+(%but*=0H@LOFtlm?>rv zLZQg*cBjw5#>NIJGG-OhR687wGy#zHot+(_P#DKybJM!MzMdw4&1O40J1Z|2$MM1P z=jTmn0vHUFNHIn6;=9ex&c%|ZcmTm*P_NgcjkmYA;{)vP?;DL%DFX}-zX=5V)zvlg z^Pdyef=2W5=;$Z~0IStHGc%*py|-8_d9*=C$twokrYLSfK>=#4qC%3Jo2%D<0OyIt z4%#p=@o{o;QY0!v6FHqf!?e-z5M{Gj7gB*{Cg^_t1LpO54i66j)6?@*DwSR~_H_W9 zR(*ZXOG-+*ySt~RrX7wS1Z{`{*`f6=8VZFuoGi!#P%wre9QKD_Znwv7->s^u92|W8 zf2kNBe~Y5_`TQJC_So1c^oOEyDT<;~0_`C$mxj2g0z7>_A38Y@2wVnPU0sa{@c8i) zWCoqJxVQj$!DJV02}y=?ULLQ!{H{z^sZ=TwA2@E>&}Ddfz24>JWwBTc=aZ8YsFPS+ z29Y>8I1mVmi;D$do5#z`&(8_|R##W2P$<^cR!d7u!Jf%9H$6SIx3{NM zDtC9kbGcMQLqkoC9Ps}}PwL2og+ig`=KH8F@TyWh;`8}NqtRxAO4)EA4-CAz(SgI9 zngT(|?Cd8HJv5{R3e|Qp`ufgJb!Gst z(*FJzS7}tKR3js!JRUETcT>o!TCHwrX*QWmNlqbd`}+P{fB^vUczIQSKoP_M0000< KMNUMnLSTYxfW}b( literal 0 HcmV?d00001 diff --git a/admin/img/favicon/favicon-96x96.png b/admin/img/favicon/favicon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..aa085fef29e7044c208fac28549766435fb7a0cf GIT binary patch literal 3560 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 W5`XaLRQ}*s@cn0>n)A=zSOEa3v|=s* literal 0 HcmV?d00001 diff --git a/admin/img/favicon/manifest.json b/admin/img/favicon/manifest.json new file mode 100644 index 0000000..dd3947d --- /dev/null +++ b/admin/img/favicon/manifest.json @@ -0,0 +1,40 @@ +{ + "name": "OldBell", + "icons": [ + { + "src": "android-icon-36x36.png", + "sizes": "36x36", + "type": "image/png" + }, + { + "src": "android-icon-48x48.png", + "sizes": "48x48", + "type": "image/png" + }, + { + "src": "android-icon-72x72.png", + "sizes": "72x72", + "type": "image/png" + }, + { + "src": "android-icon-96x96.png", + "sizes": "96x96", + "type": "image/png" + }, + { + "src": "android-icon-144x144.png", + "sizes": "144x144", + "type": "image/png" + }, + { + "src": "android-icon-192x192.png", + "sizes": "192x192", + "type": "image/png" + } + ], + "lang": "fr-FR", + "start_url": "http://dks-laptop/oldbell_lu/index.html", + "display": "standalone", + "background_color": "white", + "theme_color": "white" +} \ No newline at end of file diff --git a/admin/img/favicon/ms-icon-144x144.png b/admin/img/favicon/ms-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..dabb8ae85051d671f14095dc12bae5079bc9cd33 GIT binary patch literal 5495 zcmV--6^QDIP)h`lO|`gZM|Mw{BP0)!No}t*gDYD%PdGR-ov+ z4t1$Zk#xAT&pc8EG!fV_@SYpVPRntCWNci>fqqukdP1`A0Lh| z7UA{RU(3wQ9O$p%;o)C@{g0_rr@Hhz3fzXRuC6XLEW4Xirc6yv{%<69?Mlnb%R6{5 zizAFJFc=Kg)z!>98cj%ATAD_qK{__}ne_B@7)e)uP4^+JqN1X^yPKpvJw2?}{uL`$ z5Vin`MDp^>FT25Odb$l^v^@k{US2{ZA|oT+PbIn!VddpzblS(q7gwv*$`Qs=^!4?X zmX_YOem-Kc7>R4wu5pC1S8>pUDHIAQMkK!f{(lP#3pm2qh^ne8i^WXRzP`Q^i8o;} zF)=YCBSWXt)z#JQ*|R4#bv=}%OS_(Kq7sXXiy#Yciw;i@4-b;Audh!@d0i+Jf~4Nw zUfel!=+Nu0r>t4ChHGKYL|Iumot8?a5b?~v_Vn}+wt%*_w$rCiaVF8pC@CqX)85|R zU0t0H9@gviH*enL2y+@*TU*P@O6iXZg|fHT5g$gQp{1pTBg|>2si`rUTIr86nXIR$ z+rjgAxTU3;Bg|>2s3@aN90UhcVrQo#lZgJTv9XCG%xNepy3>L2`2wXjT;S|ALbmu7}8@LfLQDe4S(z11cIQTAdN;792^WHWiq)& z6C{@_#bWXJ@#9_eeO+M28I&|PHydoq&HzE!)YN248Cp6zI&j}?wrI82=swKL%L`5z z9wUSW1_pv2ydzv`Tty-gdbqy6KJuhcC{n9c@Y@tnmP!@am4i>DD8K>d2zv;?TiU;W zUrx?>2n3VK*xK3#|92FA7X*VgNX?Ltkj0A^$HynIY9$Cu2`euzU%fi9va-_YIhiwO z&Nts|_xJbbM8|-zTCE>_^dTGA0xn;^yk*N5oJw>o;coo;>#yv|Pj+^;#bV(I8xSZR z$DZ#f!)!K>PWS1;gwccRY=F^dbUfBI)(LBCYh#;V(ca#{5jG$U1_P_|1HX+uSz;q$ zES&p*Rb)v{*f=y*UtfPKa{_@-=p`0=BjN2W_Vnaa{*VX!T3=tO)!K(YsZ_UydU5sf z@%8ibb6D<%uC6Y60YP(fGt>mWwzbvN(a}K-spyHy=v!Y zMSuF!60Q&X{r0qT=g#8dqS60pviy|Hr8P9z>mZg8#yXV;B9V}3Yjzd|>j3Rh+alNoTkR+n|s6RqD@n>-Vde~5?>~htJNwP-uUz^qwOY#_{ic3_S)SYnD;N7zG+S&SxFGXBd(Ka8D( zu_R-xBaEI~fp-NV;Pm`VoH)_nUrn_z14r2JfSxLZQ_O}=J|-pxijhan#c+h#gE_Yg zpNRwma4x1#pH2oi^m;u_MwrQDVuMv=7h$!vwRBn}5(NY} zUv#v$w~rfVivee`SQ;A}Il}G&Gk%^@sT2xDEO6xYK|w)85Y^SyafI0sc4sC`p-@O9 zVm8zvjYdN}!itItjDey2p> zHM3zSomN|bnnXgGmX?;1-J2X?w~P;Sye>3!92;^~RaJ>bg^OdIu9HdU$x~bWN;X zL3QNF;jv5DZ@>M5bT9jut%0^75QMw|ieeE7`q* zI}?UZ+b)V_Y;5e5DN}Ci=3jWOfWwCmk8)4u9Kz5=ZQlGT^A4ZSPfB`~q#;8tU%u=T zgux7K+O%;r!(Tdwu+5t{+pY0?_St`pj*hguj<*pO-`DAui87ZDLb(ps(7xf4!<8~Awl z-Sq?QW_Mx2%w}^+N{ZdwL~QKSD_5?fKknJHhgAW8AKZ_=w<5YWVW@_$zM6FD(k13i z$ij^qH_}^UsURI$JlDjbLx(nO*f7#(|BVu127_VMs+FftpSBy<`1{|tQs)uToxx_- zPN_Ty_U+sI)?06lXps9++Vu@vv2583^XJcRYHEUNudS_BC=?qvZeoV{%*;%8Ex7^1 zAQA~B5=lTnU~sS|Bt+xy9}p4}GNLE6k8J27e0gbUsglBd1AOkMc369QddlT;Djt=>+uNHu(@N&&CsV7H3Wd@i`~(D& zP)E$~>F(}^MM35#O`7CNgyrYw!#n=@=buprCrk(%H!d_dI2dLS2~BI+UlO3-shi>OG$Zi!h{KICk#%>u3c#v8R-s66BSvdQlXy8-ttNaz!htx%tF2hE;^mkBgY17{9bu?(Uw!rE_U+q;OPc%o`jXx0 zRFrcc@JGe9(^_qU$3jKu7cML zp{S#Py6oyil2Dj|HU!}R;NXz(@bEASpob|&N=izuT)CW+b1^69d_+X#o;`a8cVy!* z5SEpdnVkF@qbK)<#+@-^2Atx^$Vszi&4Sjrx4Q@GNib;xU8(S2wi$%K|{k`VLmc4G9P>FF((j)qEARjxO8d2(ZAKJ zSAY27M~oqytIf^&@bE{dJ?9d~!HI|rqYl=vg)~A|!5$SyxsP`%&QZ&~`3J|42L1h3 zQixRN zrluDCq67Q!=RYt1{PQhNaGY~JoHG_tyX|Gw1J4Wmj} zWo6}w6UQAq@W>;NXfzu7V|x05hw6m7D3G(8-A_rTr>7?+y^6kY^ag+T?%nHnpkeal z$#igjy`{4$%FhN*GMy(xv}4P*lU9pdj>Nw3@$q^$N!j4W&}GV#SM@nGZdk zG$hgShd(U9e~=#M&Ye4X@)zr~XId^?xPXO+OpOBIlfc=UI5A?*oaouJqaz|F z%H@ioeBp4;IQvtWKYu=tS}ID95rDASvuEpcx`u{^p-f+~AMh8^Zs6mGgp8XsX%cKq zXz2LBz`$WVdS~ z=`Oe1}ZH(5_qo=2L&_{pp`5r2jzn2%^b}UtYze=UX zZ&g)Q#l*~$NNhuhR0r&#R;xrJG3b#R^ zoF?E7Ev&K8R+MRJX$uxCbnqDZztq&!%*+hZ_{dm0I;52=SHAh?I&?w~{%v)24P42K z7cb168^g7*ApzySW5-S&wM+Hmk3Sx0l~QA4(&I2&k{ zgIcZTRN~;_z-$k0gUPvb=O9BQ63IY>k&|UP!dL{yhk>b7N^YdXl|Z%zafA&LQmNF( zXH*Y=3knM62pdZA1x=bXc{G1<{P<9gu%W0#A^fM&>(~W?h=@pzupuEnK7pL4JPMdG zVP~EgsRI_~etnEnd8s&4u7%epqz$?2-HOY15`HSg?TQCE#L&{qc`aJ^uLIk@#kf zMzdwhm-O~Sjec^APOEo0xIAGzYLU~< zojbqy;`93kBA+>P#`^Ue7A{=qx-aVvgb`@9+7CYXV4!^uke9E#vL-n>nf=0jtPsYd z_Koe^w->FgtgMWA|Cwi=S-UoQ_Uzei@Q!Xp7=hVrK7IQ1p+g6Yi;H7o=EcRuk!{!R t0XHPfy}=R25ypWdi~~oQtK$C!7yvNf5m;p>h8X|=002ovPDHLkV1g?8v<(0N literal 0 HcmV?d00001 diff --git a/admin/img/favicon/ms-icon-150x150.png b/admin/img/favicon/ms-icon-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..2392f7b812d22d01f29e1b241e824d0ca6121cf9 GIT binary patch literal 5802 zcmV;b7FFqqP)|j1srPcYE|^ARoiL@Ti0t{cCf9rgI%xhwcgujZ*6a{)>f>wz4tlv>a!}&S_ec# z5ldANL=-{hF@X>aVF-lxeVaG&MrYgLBYYnp`oEl2HxJ@E-o(j&BgNX zKRIJG8t2b{>Ey|ioqie^7}&pm|0PS_jg5`vtdLSvRaIqVWLRFOlhf?kvm_Gfp+g5# zQ&VAu9EJ3vw6sL0yJ5lKnl0m0m)NpMB!Vv`Gcz;rVmEi~N=QjbK62z3(hSa#(gLkkTT)WO zZp!6y7Z+zM$Ja67Vj)F<7OkwTy5(VQfBYtUV2}dDC$ji%P%PuY=u~@9v>uph3#!*O>9L+NGqD~$j9<8k{wvvz{jzU@h zgDWb!mF>B?xk)4vo8PLetTY%59EDV%rlzK%;+8h?^YcSow0LB3Ct6xsNDB^^7xq0$ zN{SmB^=7fqMXzsU6U4y40AF9fz`%Z9UJA$@x!f}-s2?ONoUK$Ub?6Isq>dN043Nno z|EsB~R;z0@8cl7jTBp;YpjN9(OH0iu1n?1wi^$(aB9YP9PI3wCkx1N8HW=EWdiZ>v zmzS5jyF1=xGMTrxH~5yxqzZ)>`1bVljzS+gkYH$^ptDwXQ>*I!FdPp9O3CQNv2?b>)aVNT9;7him_f*$^Wl$4X- zeDe*bNV^NfyskPD_92cRPa^S^qtG@`QxwX5ovxv&sfnYoTWDfH+gU+TA(iAP?5-B2 zu(w2OYpcz6SB}Epp;lAcX9>9}M`1VROf7d}-GLLuR%oN91OmQ9;(-EETX%PNXJ={km>)%@>QsB9Vw}I4J0~Lei+M*EfO}wOS2s zs;jFF1_O4swzj}%h`BJS2YjFaG{CU*`ljyF0hT2alRkA4BXycDW&4PmK zZEbBFg|=&owx&oH5H(cYTa-G|#zq}#3UP=$iG?DCF2$x)>LC`pBA1ZMWk#dX+Z(Y; zOp*%3Cn8~pHbKO4a_ao*U_)xPitUquL9*hR!6LqK2m~MYq12ifUI7m}`imV(3k|eaXwZpu+*|Li7IypHjl}aRMHi|kV2Zm0pOjao?KGVU7S02Zr!@?Gz{RlT3Ze6?QJbBtwv+J%}#0d zR0;yVKp=#{fl(J1(|}XF6bjFG-+g!J&|w^f){vW9X!on#zvEblf@|dZnrp9~<6pq3>#e$BV{s-{#Qc!YYaOnX7{v3t20sh#h zIUOBFZ*Lz;e5p_<3=Hgt!i^gZ)zwuTgDAeoq!NEa1%BISok;1~l z>ugynl}aRTlxPR27=Ql&QZ6bg;wbDA=Cvc0dbqhs$k5I{2Q1Im*N^0>^vvQ$9fbyi z;r1DvJYk4!ZB$Tr`SN9WbuzHKu&{`dmQv~{)M~W_1qJM;OeUAfq?9<)OP8`;U0r>A zOic|qNlFG+P)A`|St(d#H~sznL?SUI_j_*c<;u#+Awz~Rc|~o<4oLxVV_KykESSMT3W@i$ax3m6vzbOv}ii0NKe6DY?lG9Xf;)LpdiW z$2@Fv6q=BknQ1<)4Dx7CPfzn_hjg4|1~eCsdE{iipaMss3BUe&)_gNOJe<$xli@E^ z0lJ11E?l_4QFxn=N>BgQd{0zV6py|knYV|=Qyhi2fMhv0_sXp^6Yz%*A5JnbYAMXl z&g%2_Zi*;8bt=Vt#E@LB7%*S}k9qb)Erp2O$P_sWO@KN-aU$7#&)~rk(C$W~v8sw* z3V~zCj&T&4P*PH2p=BO@^iiH^B$&3op6Yc7Qd3XY)YNbk@(v$9Y(8iYfiOBcnrIoy z7tKOyn3$OOpi>BMxo_WI^F1LUp~Hrmv`kr9Iji8Q#hyL8A9M|PfabyhU zwQG4i>T&MextyGw2b#j4f8J(3{S+DuhV9#besC!)EG#^D@Suek zjfsijG1J#yy?T}B2-v-QcV8txeNW*}KW(;%cC%*9bai!Q0%4h>ECr&`Xtr+M@*q-J zR#v)g+cxt(E-o%lJ~{Jd+s8%vwT$__*e5OWeN5rnwQDV=t(!P;B59Q2nOY!Id5!~> zO8vtR>mMu%FI>1_VS+-TaN)vNNx7k+;q2KooYdI}y-Fcc_4)H(vgmIjkx0J%b`9G(6WF%x|L7TXa?eOjO?~B+S9+nzruQg> zPTRO~BUm(Fd`v2pe)rwFF=NKCdy0#TzyA7bp5p_TnV+8zchb`XLV9%?JzNZ#Nf1OL zB9@hvjvYI8HCclPbuM?XVOPEN>Tot>SPN-vqr6Yol;QlT)dZy68}$RI!> z@gUQ{J2r(?RaLkX@h<}h4hjhg2@Vd1<>BJHIvy@muh-Yr)#~+4TCGN>(<7oFeZ(I8 z2=aZ11$>=3MuW;h1;M_dVE@R42n0eOA8%6E_!&=6xx2eNewG=aD!Dl~qEIf!epk6% z;p!^J9%f}j8A5ocGbG~cIP;Q{;-aF${QLqJ7ty?V^YAT4q7b#bXV0Ga_%-a}o~U|e zaF(Ba`-nv-1}Ww3`lBeX@Or+ zsZ@1!b$DmiHdQl&o+=R$>g(&9nwr>5KRi5q@#1%;PoHkzbu8^qAu1FXbNKKtn>KB_ zcI{gC{gO!J;_fc-WWX%nDZ|Z<8y~!aU>E_JJCtmay2g=2$C6F_$lXpE3hqf2lX`%O z!*pPF*kq>SZ-oP>tySZqzzzJoMq`>8wZ2}{*x0DiXc%vyZ*4Vnf41(SLx;Zn@_#)3 z_(X4SZ@c(d`%{QZ`tG~62?+^sp*=JWxj?|bY1U3;sSyI)0Wz7iqr=#36BK|j^Ck8` zC(fDteh*E2O4f#c_SxqaE_~H4(?Hmb!lOrz1_T5Q95|3YE%?u?SFa$pUAvZ#LRD3D zLxYyuNz;1>a3^piNPHtAA_fc?7#bQnc<^9I9rkw5%gckgKk>v9eN16NLBZt7li+qD zBS(%H@lb5+n8?UToVWR1#w>$fQ&m+7E=x;GDl4lXN)bMEH$m0P0e5RyWDa<^0bgHJ zq{p=*)AjfF4`5(k4~UMHm6e&9nP<=dH0gbrJkP9rGSTAZkqA=&N*RNlVok%Ejh{^NgA;o^lAIt=A!i_-0LDaCkJ9Pj6&gSZb|QvBrZNkvX|YN8ySImhu*<~6 z#F;Z^_5p=3g`a-fZ2g$gqaQY}o!z^4v701kw>iBh5-BGqAz7^uCgSP}=VpW#g$HAa z1iQYzzBsJ=eg)qJE9TwlkvxD5#uf#QjXKi792BvsXU}2t=1oW$?=~m41BI!nr>#%? z0P7h#bO^h7_3G6#XU^R1zqFdbbD*wJ_ki^D^z-M>MMuZnb&B;z{uS|QfY-z$ z$dI{n=T4b2wGZ+_h;N7*qzb1_rIeMGo2zQ10VhwUkc9!RT)8rB+Ml^VXrc9jgM%kb zcZLP@9&xb{h966H5Jj8kKx#x0oFF$B3l4Ub} zef=UL2IGbf3kw@G$n@yjj#E|lQpXFV#)RGkn>*_S7b}FqF zn<&)P)ipKg!8)v&w4N{%dv)MQ<{7)7qr+%E)t7yN5Nmw40l}c|nH&;(jg-j-s%cU}zY2IS;q*^YQn?Jwo9nijtC<`);*AGAZP*ha7bm@n1 z$XacETU$HnHlfqqXl}muC6ZlT#qRDB(lja*3cS3OTeoh7uUoKS0Vsh1k$Lkd)kKcs ztjIDgF)=X-2|E=EMNii$y#2UwJQHUr7$&iqc(4A*GCr+H0HEZUK8Ph)a;QjgYUz$FB+VjspXE9S> zr$8_+EiJJacttNd911BZDgFD0^y?QGAHT->kz2NGAxB!g!oosVty&3{WaYbwiHSH8 zU;pKoU+AwB;a~syS4S~HxWP|8`Iz)tIDPswga&fsJH)z|)Usut!2ROumo8m;=9y>cS$(flI1+^yFJAon-@jxfbXwY(mX?+Y z6DF_+wN(_U_%gaNz>Bp9FH4;NTFpnU_vD zOj5yQ6zka@8w8=DVJAxQym|_cE^tGciYKv+_-U1J@s@{RMfzM1B;4^rcRw= z@e8rBvD>%r=;?704@6SIV>*~v?176z<-$4_FMj*ZPoI7E*_ktEYPAiuwd&Z|F<|KE z(Idsh#igZX6&1hF1DnbK=J@EN6JCG)4W#E56vE}^=jVf9jzT-&&X_cI?3m2V3?$$d z(@BmVJ^H=(-kUJtG4q`f5fO25aqv3OG8q{e-+#X@IXRhp)Yzy$eE6_dtDQJ;(v~g% zHgCv9T9T1*o@NRiDXAdSTe5V{o;@2{=EWCZH0KX45n^@6j-3|#-HIH1ers!sOeR~s z`kS}jdfWUX$ee=*4>&mq?}))!Tr9K?%FD|qPo4z9NfJa450A>qN(+wX&Yg4YSR%~G z%S++w>j!vvNVBuEN=r+XN^h}P1V?(|!Ue6iJ}4;Y(@&Q}bN=HWUs?ZO_}Hymw{jHP z0c~wVoFb*V(ZI^5Ju$la0ky)u0!N|UfD{6%viJWtAi$ra&~7jvVbe>I#>pulAb_LL zZkRT08avRwcc4%x0t5ST6xt0@QBe~oPU_8n95Eu2?F!3LXdf(I{LbCZOmfc;V85}o_gw;p8gAwNVIO<_fw`!p}#g9lER3H zLGJEuJ^B~p#*G_4e!N4}hC@>53=Ivv4=(wBqYzN5)n9$})wXS0J2gk-3G2TA-`0BJ}_Na(b+AVwr4q_Y2B zH_3>SXNy8t#2cGG)ZE|L+sQxZsjnl+qi5dsj`y@ZpE^4lIX-NJ0X{XhR;s zgJ*Zp9cJuP$K4YjykIqDU!vY?(BSBqZdX=zTv2!f?5_dMFUMxN0Khw{j3HJi(Zt(bU*j$qb+{u&}Xd4nJow$Wg4k=54Sp?~y_2 zaKxS7Y=mM*Q~^ldfL1k8mZqS6D@KtYc$IRyS9X=PwHDX$Z>VxGnC^_1%jp^S%(YG| zQtQLFOGyvjciA88EifZIE-p_Q?(+jEPKB5PJ#FMAo)h{|BJW-mg9|=?{_Zz4U=6cX z4#gM3g^>7w@Nr@Vcy`(r`AtrXDNDD~{0m-;+N+WQ@S5LP5dJ}Al&U@~ zEEo==8N7!9!?hp|F(0SCEs+6UYgATN!cNYIhNkN4BS%!KzkYqwkSrLS@F+HvHcYeJ zwk?Jiid`1sY0wG#I<{G3QOOnlJQptf^Z|$_M;q^x?_FD4n~4d>Z{S8o{<5_C2L`ej z#6vo|AT?{~dF-f1U07(SrR_{pZLQGoZ(k)TDKmYvLPP726Kh*%1kTQ`GW8+Qv-+%~ zp`rYDn-1GfPmdOV>gK+Rkp1UeMjNIN)z#HcHm&kUBb3TThfEcV$-#75Owx?+MRhI! z)U1usCYCr-5Y5EQLhUR+Fp10Om+`Vtpayn1f@g~buxIZKqM@&J5qjT$+=$YsqKtxc zaLZc7O^D&TGl0lf{V*4vl$(ZfbXwBU=JlAMgOOMTR&NqyonTHECKv{y8A@}Qh)~Yn z4RqH|tqKFt=ogL~4Fm|wXpj--P``8*$P$^5uhfg{FhQqp4YwuvRk3!HZwrj&L=$*m zg$XT6C2<(*vZ;l;ql76^00l3nw`wlsNNh#^+?06@Q~X^{wyjC95q)N-U9#Z#+L&-H zlkq1bq3qem1!KisFxkIfYSk1YzAqFJ|0@;?{Ts3^A(!c40Gh3y@o3<}^-(`CE~2lV z`=k`Nw4Aob|FO^OasE3uiMF=3@(F>R-OJw?skF5535P)j0f0~Ko%oCtml1^B(@0xL z1{ih1a4mMO6S3E4-dqV;z`0~!%uTZFZfq=5s$wH_Iapa)`Oawbnb6v1uXZ~+9=)>x z%|83Cu5Vxf7QJ9LPIGkGm>(Z!8tc-kaV6cIsdoNSV8hK4zt9{KPjUw-%l%a;U<*X3 zDH;tsZROi2WiF22viJ1`AZ8)7d~4t6gJA~h^H*2OJBGJQO5CHHf?-MKR=);#-o`)> zw1W{6K)|sKUa;MT2m;7g#wRBc-)`P1#YyCCe}Jsq)Oh~MXtsPAN}B8v-&sTTSsmLN z6Y)NS9!W+5;Ir)X*OE>v%;A5r`Cs^GQ%lv4mD|3}72l=s&~{42xDNGsa<@*jtfpOz z^Uw4lotG(MYHm(NZdzOfEGaAdLo6Diq;~u+@h%fPpY-a6%-XQi`vY}RalyaNR*xUc zaLEW-D^s7GoQyjpN(7Kly!a1Nxs1R{EBpBpl3L`A4c(=@UrbJDNyF0yyLn<4DDjU^ zhWIVRUp*atT#KD*#Yb``LOPS&6wCFZM1jC(~$?H-Q(%qgomT`ppI% zBbDO$@1ZchUh$Zm_+YE9qVN1nl5OA(q@&=wedX0v>NF`*_Jdlk-Pq$7oSi8NCJEG9 zHl5PY^uyQ%_OAGC7v9}&UNqFve3({t^z@Xl>yW76b1DmNa~R(pn4&3WZrjlvHU z5LeS^NJ~4`LyYs9`NXF`;{}ABu|HozjW3Z?>85`sUIR-PyEc?azVOC%G%V~dl_(Ke z+BQR<4-08xl^xytw|ZLY>Rcpe5>cXh^dv0nCajRpoYl0Fi4C)m5vagc>*=qm-X zWao7t@V&;r-$`XxnS-=IfQ%kV5+UWFPhhcxIBlWNnpiI) z-SE0t^%q&)XB|UBNhn%JPjgl5$z^+_XzSybWiqq9K2GWu>@3NJ2$lAEhbM(>!VXA4Mw7N(|qTC=V>mJUB|A}2H7uzdMT{;!;mg_V`}v(6Kzx5+L~cJ@p& z2Sz3da=RtMQ{}cIC>`%+pMgIYlPs0ufPkDgUKZgGSmIsBpdU_5n0+#ij*g1PaanKQ zLON(lTWdsjm;#oyk~sAyo;?H6FsBsimVm`>>1}Yxjppa`sf)4KAw=~%! zUWOnTfNsx0G~hzZEcW=Wng;Am&#HM<+M(}qfZG1i(RarbN=n{aZ6MZw*R?XEFpyhP zu{%i&A}N2=_^qi*Ny(D^4Ui?exL+(Ks%#Lv8}=nsY5LJX&kt#ko4~wfX=p-(yCkfv z`-djBbZB?3z7%}tj$G;WJ7b1sX=MOkU#WawS3F>w2Np?Txv&7{;DRiW5x4U=k^RAy zJ>rq%OqnfXLWSVg`9Jq?llg{%@Lg};o$2ft=bQcu(3lrMN|0sF`T2SA6#f`3q3D2E zxh3s#&+?`1#l_LE`6C18b$65PtGfC~X}Lur^6RdPJ3agb<*sUOb}1cxQ?v*6l_0;k zGuDtu8%;|UsEP&qY?~g3t^C%`>wKnAkL-L2vAT&g+x?W*oy5-9mja?wi;2?a1rf*| z9^F<~UmsZi=mXOBqoP38-RQFSdHS>51S~bY+Q(q3XWMaKQc%psH5!7+O(d`4XNgD4 zJ$>sd|MokBdK5%mzX;wKacMcxzZkZUI7+RVbCuru#1ER?qE15F1q26AUw~p$q=5lO z#{I1b9aeg47lYx-V!+^PC@Txg0J89D|1D`U?fb2N_i{t9^x(K#h>lFDs5Jp?h|edj zaaN1M@VK_ilY2-(HX*=q*5;<`Lvj4Y`7K9G!G1}4BAhbbx~8_m;>t#d5gWP~Mhq+3 zhXDuJr)x*UD)oMuUq`BLGn=sQs#V9(B4b{zu0kI&H>{}jm(|`p-CKZ4aq_B9y3N^I z!m;^An}@3^KOOXEXV9_~%3#46*Z0+~fkCv5?LI0%5kV zkK>_PVp5WsrTF#VrRx~Wtk<*{S{?wM05R!JHBhefa}=Ml3KWAQKP-q1LMbbuf$cRP zAS!3euQ&p_>?<=fGj*0)5ZPWNgA73e0s<*6(-}EAbs=)2-@ii?Im>^?dj9AgG2~P{ zGZSHws!4{Vr?alFwN|mM&@&{#341#`qKAK|B|qlcM!BN4c>bbPC$oh;yy8j0)Iq&C z5i#s=we#?F^V!;<6-#!`eX$cwx#3TgB9bRO9C*3q9V?jcjP{KcdG3VM^u zvooSW&ckg0TJEkhxOD;nNWjZCSbIwY_417*@lW5m-16L9oSl7pw?-0n&56G|yLk1p zdRV!3NQHL*a6X_N7}zS#P&KpjvyG}q)66X6_CE?Fv(!=4J}tbdy^y@}z9@f%g~>^l zggT@{8aRn_*JY6Y#m|&NIc>HP4T#(dG$;t8$1E%$y0gE(zq6y*wp=vWs1{w|YM?af zv<&>zu9jQTW=m6(O&0}$e!w73GWh`w?1^`^do;ay7?Zk_g0DBN6qhS)ey)wtt;V&q zv{b2x|E%YFZS1r?iJ9}vcrijVJ1S)r(3&~|0UTwi3$`dC<4n99V=TMf0SqjfMX0|S-I^C$sW{r63elNE^p_pxuy zl#Xprp^h8)s5hB(70ZrC}V*=M#_zB863?m-rzv*!hmeDTeRdaksWMdDiw8%L5@v#nBmV3BJ%t}VM*$utqwry#x_9~W3@9(fBiv4@2<-mkvfZ(P=t0>g z-W@>OFOV<7_r$U#r`QyybEM^;oguD4KUoMUjy5!jYA}Hb)@Rbz->7`}P-WI4=83hn zhu7-IB#^L0VU#0tzB!vBTMs4bhAVK=Y;G&wgRvU%bF-EeXL2H2_}MH09e&n#?cp}c zG=p~c(%51}HjV~DG`{^B-POU25x}*QK)OqDHuBcE7BS(?<0ca(0#@X8_mC#0|La34 z-2C4@@HQ5pKOU)KG3OH!0-NZN4&|!&iDE|-0A(lPJi4`UYYXReXvVZ`KM#*D`7MPa zo^+Iy`on{R7S_rA#~Gb4lUF6o+pa!lUmqM&L8C35a+~d|PgX61RJ^Idq1Uaqs1h=R zB!Dr^9*u=`A^8rLHC0wJukVC3jK8P5Pj8P~AG(J6lpjVjwz1&*28HTfs!eUfe?t2S z52$c&UT^!!vaSYee3uY9wEpdQ)l7o421}?HJKbzPZkp)4pUxlkcex{o2%5*owJ9kn z1Y2kCeIIr5O{WF6#qkjlbHTdhZ0}ZiAMEhorMU~$)9vy$pH7BTS%qXTn(>jpR1L6f z9vnZ{9qvadBAc2D=(@AL1a@1$*hlD|gxNH|j%-m_{m|CV-d-`jR4rFEO!?2mF7OUg zCvIbsNnca5YjghmJY-MoIYq;hV>-TXU}D%1L(ELr@}H>1mZonl6cJ6XQQWxgsq%(H zh3>=_i%qKzv>;jJ%A_7U$-j=+$j2G~gGHC=WmAuyNWIr%t#Rmqe~@#(@-T$)>|*k` z7J^X@5WD&U=NS4w0hi*Lm+zsyC`-vvfH1R|1nfo`Z+*#p4W}8ItY4#xhlfYl-|m^2 zl1$wn2k|ZwyObG%WUMJxa4&enla?jaTDsW6y9eT8Vhc?{^^>9XIul0)1`Nq>)X<>R z-2(lVe*y-GrieCaXs<)(^H?=mkyZoAMD*(CA!x-@H}%- zFHd5ucqoORMWU=rG7g8(lGFuMR>Swg>5rx>A5_njm6d(rn%%ykigjFd+xW+%?%4Qw zea_3%MWcXJe6}bNYNE)3f^M<1XP<{(Ed)^w{*A(4R*}+X!3DlPD6<6tO6hMyKX#RE z-C&*Q=l^(Fs3wT(d0N0Tk*OoI`7u*<19k~9kpfQeic8b2d=tV|74l+D%&aD0i7XSO z0dI>P^0wyL2~nd~TG&aO2iR@x^`jX7pFc)?VcYf7Ri4HvE_A@e=6Oq_NPERf{|Q03 z(xfGerj1vS&M$k=>|JdUKHElrZFE;*n@0I_ay{1OE*K-@6I{N6p@+-H2L+19k#z6W zv5$CCy1KLsNzyAEGM9xRAev+QY5Ug3#x0%wyYv0HEAPc-<~?CWUtF?724B{Pizk=HO@}n<>ibi0tRO2!Az&0G zTR~{xK`uTC(R{(`Ngo=Um(u%;h2?5ZPKBvH{A7o%+np2OVcX!_b>Ph^Lr;5={*>z5 z@88gUEAOAs4zxAy;u9!tg&aNjx~#l>BG2Hd<7%Rdu5G^gm_Xvi>KcdII|ixRcnJBX znn(Z)fYO;33N6{3_*_t+siCn|&h}3N9Xq6`R2N#EVyPhGNCTB>etHaEefbk_Z#Rj`rPf|Z3}dvqmdY))v&QU;H= zrxZ(~P$~}L;npSL63vXr-rWm6)Z(psFqJAIrFNc!7NPsw@S942|3~&jP1pQJh`+x- zaiN1;LGBZ*H~rZYK~90BKI9Q$K@ANL&*}P`Ed9yM zWP2DA@cX&Ermxvr0JT54s<5L7-$OsA3VuY~6zXQ6n_HhxNb<$<^z?Mll2T2`_mV<5 z581h41vVw4U-+S z^b`?Fjwf)$Hy9q+0Td$6S4|$u=e#*TTm8lHs%xkjinHC`0VWrgXJW3` zM)My#@}1&0Z)cCy6|dORknu?rUK!quqed$aOO^lXwa!t>{ zSLdON2M!64s4cDC(_Ff;TO6F6PG5SVQ94ENtxfs0198vcH(mBb%kmJ*Q_2h%>CmeS z3Osc%>~2xPw8}dBA1vwfPuy0#CLFyZ#C>JpE}>$&)`p4$=(2g~2E%$+Ll20mJp2O! zVn07i=Y(oWe~5OlF{>J3De86+AJ~w6X;cJvZVFP_@O%2x`&q7*bj^6AJ&*tzdHuub z6KN?G1QU#7Ss{9wnLZ7kHUJ<*9t*J&6bjf@G+@a14|5gu76|YZi|bk`G8RDC05Wvz zY@1G4->ddQtx|#&BaYU@a4)>C)p|3{Os|m22UtjRYkcr()Gvcb0=6W6@=%M3-b6u3 zsioqN8RkMMHI+3sHa4>Xiv0tyvdXrN2s!SEij+CttKJ~cIU z@s>>b_T{d(3V#(8Yd4jrulqL4Sm2FZilCgX;q}G3%J3j!;;U_nZe3DRQuQ(t(vh_1 z?~m_HQYO5S=LXTV`V~muRl_bTZ*RL}!Vk4C^RX_Iu_jXhZcOWomY>{s*edRs#S4 literal 0 HcmV?d00001 diff --git a/admin/img/favicon/ms-icon-70x70.png b/admin/img/favicon/ms-icon-70x70.png new file mode 100644 index 0000000000000000000000000000000000000000..c604174845d5399966ffa899e00cbdd7e1bc972a GIT binary patch literal 2501 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 P00000NkvXXu0mjfrY5uE literal 0 HcmV?d00001 diff --git a/admin/img/logo_512.png b/admin/img/logo_512.png new file mode 100644 index 0000000000000000000000000000000000000000..37e2068779f8f5eaf709c348ebfb46fbe6d6a2d6 GIT binary patch literal 31456 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 Sp|^nNkBXv(LbaTE@c#jenT=Th literal 0 HcmV?d00001 diff --git a/admin/img/potbg.jpg b/admin/img/potbg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..51670724fbd6f7ee759fb1e361d9648ec3499d0c GIT binary patch literal 663960 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≥9&7dY;y9ztAGg?Ni4*XfGtsluG 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⋘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�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�FQ{ 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�Z-wXKzhCiOpS)GAM^{pO98gn8BBk;AAMz^*j-m~ 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 z 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

y|X{kU%>!do+B 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 EAF1c+IsgCw literal 0 HcmV?d00001 diff --git a/admin/img/poticon512.png b/admin/img/poticon512.png new file mode 100644 index 0000000000000000000000000000000000000000..bce391c2a46bdbb14fc0c441dd4eb7bc91533f06 GIT binary patch literal 31211 zcmeFYRd5|W&^CCEnVFelJ25jeJ25jeJ7#8PcFfFt z?u?|-Xr_8p-BNe!X-&AitOOz)9vlDwK$MacRRjRQzN%mV7^ttyo!k5i06@^|p{(wt zXy8g>=U{7UVQoU<5Yg7bzPF;&NUe{{|!$NhbHbv1nF`m=LyF3+jz>9EjEm+yw_ zwR2umj-EsL{%~H5S*A-DQiq89`~6fr-U18E$J*PIIIXC~HyezO&0a{)&&ny7zT4(o zj@xSZv|VfSHzE0jML#t95ki$9w3Uz{}Uu_p9&8&vaJLr^wnb z+)o?>0wB(g*pbh-UX6=46YlEn!wQc{AJZix%KT>)h2|L0nh9rI&9I%^*c-+Nr4Pen z$+gn&=EOe?Jm*_xZ3ny>Tti~b+OEUruiWd#VKcURZudSfcAMpSPX|;Q4trt5u3n@@ zG|CBV@9d;kO}@mD?T^17edbgyItW5Nh6f2s-p*s6OOSmJhcj6)$;?hYD{xZObXX8f zWIr7+VBL#^_zrxY+-)^qMGV1le{qZ_!MgBd|BTw>x1<5_LdX2<;HTUBrBMx!LUxgb z69sSFV~U+HHi>l^={QiEkUKfz9p)1UOi56ye8M@xQu4ZQ<2b}{jlKV8R^8l7i57oU zA#8K>Jpt1w-$%M)US5uL@Qb#+J%c`Qq zRZH70NJhp+kaT%v<3{H(sMN7?@;b{kgxFvpUYy8eenvd!&r}r41n*cy{Y2Lr9DJ&} zdy)N}#6;-C&?7xyskJaN#4NsGM27&H)w#U)*?zCC^eLkxW zD{1%kAoNU%{ivwtqY*a+C~EWS%#{& z-J=;&_j>yipFbSM|GqLXn@O(g-9CsdCcD{eMDgjArmhM;66(bU=wt~WJP_G4i3s$f z;1yZYHqLbSyK|Peu&rhLx2J5Iag!H<@~LP(=F=za`DEKoZ+0e{kn@lhvZV15gJ%~^ zeri^F=t=cmwArqsRzwka?!=g-7(XD*w4DpV@u(f=5y*lY)dP8^C@2-r8=Gbx9xeu47=WVCv zw-v`C*@7lq^d)?jM!*icU;sNE_!~O^MclBSi@; zoof+DqAx8#e$T|k(X8wVvwo3IvJX*QZDN?jnZ7{j_bq6>n6F;#7)o9gJjeM@*B!q4 z^4Q8kQ70BS(iG_yY*V#nuk;q5rwBN%#8w`={5rCaB+I>5ZsrTppBZhr0S zMThy|qKi-q3)O>Di_hQ2A1;0e_$;sc!5{XD0#kUV9)yNI5fiWTpTB1X9BjH$?qbz$ zI}3gHKySLU3Yc@rNw;`2`Q}^8iG4UO8D~}@d}hN&4QGi?N-IQDnf>Q?q|Dwnm`nNl zQ@={Vsaua+;(wN0!9BD+X41rN4Qo1*VCJ*hXSBaE4dFre&zSx5aixXlv*O4)8|w}E zBSwW^hdMf;#6`cGZ<$_#?H@hm31C~RR$L;N3O|{v9 ))#D9wtCg_u=n)ErtWJBx9~$Z9Ei!au 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 +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/admin/img/pottop.png b/admin/img/pottop.png new file mode 100644 index 0000000000000000000000000000000000000000..5f159c55911a6ef0261a3d5374c4f7e9bd9e7d11 GIT binary patch literal 2689 zcmV-{3V!v8P)EX>4Tx04R}tkv&MmKpe$iQ$>-gh#gcMGE}D)L`58>ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfadlF3krMxx6k5c1aNLh~_a1le0HI!Hs@X9CsG4OY zV^J}aT@|}t5x@ZYFpRLoOg)}jOv7`0-NVP%y9m$nKKJM7RdOZ+d?N82(+!JwgLr1s z(mC%F2U$^4h|h_`23?T&k?XR{Z=4Gb3p_Juq?7Z+L1MAc#&R38qM;H`6NeO4qkJLb zvch?bvs$jQ<~{if137Ia#dVsah+zqFBp^aY6(y8mAwsK0iisrcM?L%_jz2*znOr3> zax9<%6_Voz|AXJ%n)#_oHz^PWI$v!2V+`op1sXNm{yw(t#tGnm2ClT0zfuQgKS{5( zw9paIzYSbmw={VVxZDATo^;8O9LY~p$mfCgGy0}1Fn9~}thv24_i_3Fq^Yar8{ps& z7%x!vy2rb_+k5->OtZfqpNVq0#GeVc00006VoOIv0RI600RN!9r;`8x010qNS#tmY zE+YT{E+YYWr9XB6000McNliru;|viF92xo3#^3+|2!2UKK~#9!?VEjY6y+VqKYO_V z29Q>1)G?%>Ob5dhxhE7tixvyhP@on?orX;j8D2Ih9j8<5lp>>6P%5J$g>0}YC0S@4 z+WJDtFbYL0TA=rwRvMv}!GKVQmw>z&2+3{#*ynOf$mQ;mOLiIj&FtLm?(??K_xZg) zkA^Pq0qy~^NR6VvDWD$M4Mfm*hbj@Jvq_g%0Aqk#fZ@PEU;~yYBQz%mE&3VoF|Y@C z3#dk#`%`ZJJ_!v}0wsV(*U~BAp&;-)aAk*@vN?_}D}kr5#HSe@W@sK1lne*%2kruL zT9j~4TyH?As{{aH>;zr{Dv{>tHv4MeW}p;rs1NX@hAx|cK!zHv2NuxO_%weQo(Yb) z8CVL8bv^wQcoX;sPy>8|B@Q6UG_VCw01N?cRa_LK6TlK+8Pcpz(BDuXf_D_nG$1j0 z3C*5CRbl(YSZSmiw*3h33pKVzU=6Se*p4MqYeyK@C{8H@zM-D(17;)5H(CKC1V|47 zY3M9K0DjByy>r=kce-4W2mHykx?ckx#1i}3nD}wPF{HV()%S(d!0w>~i-COg^l_T( zhxwqw)pw)^*b!imM}RDI19A-53e>3;*$6bb3XcU2D`j~#PzZb{Ne8!MiPzHrV}Ke% zKJW!#U{lFjk&F`-1GPxAB1yTPz;A##>d6{3rV}>f-&rby*bD{i6i0mv@JxbtYk=h` zwsi*V-5R<)1MG@_+-t zBrG9Q6it1BdZc+KY1zWLV4t53m_RnL8npY6P>dy(w+Tkv znu%L9?>z>V_z)NkY)(+;CTJX!!UyF58xaoPzUHbK56TnbD%1zkz z%u9env^mPrnhs0_9#B?F7^p^naS= zk0}wiBRIry%(VA>0Z4dNZ1Dh$@=}LvMVBM#k)Nz=^db(?i0%JDD^SwN=DyLq0A@1347`bnn#-XhNDz zKrCd_4`F~beQ0H+Pk#e+Eb+e!o>mQu0!tY2_!0(=Hniaga6Q5plXN0NvjEn+ ze4nqWSlHGS#@8Ds3kltOT?uSax?>@M#-l{llti;U=a5XW`%?t8)l`NOm)gDn29A$8 zabI=$0#j4&DN+H#7y#q~1AxD%H$^H8q9w2(qc|HNVtt+jhQ;3o0xpieqyRaBliRKV zJ^d_}<-P($Vu_ud*zbSUZ!Wf$n*nRy%bw%ANwtI z(zyauiyp!b90aZhz74$6!C2Ix42>)nmG;b8^+r-w4TE^vcf2ozl_<+`ne=a7UVu2X zUj5#IE`#19VwWg?<{;6)-!Df%s+D8dm)N#XuP9We0Y6uF6}-Qa%MTDsG!oCX%%@a( zHx|vFfwMX86tKd}wGr@GPOMZG)*x)|_eOUZxxka^ZZXoVyL$N8HnnM68fxqI!rCvjqy}P8>uMC1O0*?X{fO9|z(meYmAkI$qdvPMI z1;9p?f$UtmVe~9up}L!kG$TG(oW9@?u*5N-7$-0|3MXlnmxdk~iZJ@8RJLd)2xB%7 z+nBwSvvtqo6AJicAXs9z0_7-91U8H=Cpf3plG2Y!wq+HdaCUbZvXhJ>AH+BT{}F#!7F9FHi%IZQO%B?TIlsCpP_p2&3EC6j<0 z!r4OUrh`5KW*bxFx6t^35;es*Ig2Uk0^6PsJb^H-!wH+Ww9t;?oMd_qX?E7m`fb3Z z7SA?OHN9Pc6yt=QV@D05z&hV>i<1ni#@X0?Elza!Hk=&#VB*K_vef^*IQf&nc6 literal 0 HcmV?d00001 diff --git a/admin/img/toplogo.png b/admin/img/toplogo.png new file mode 100644 index 0000000000000000000000000000000000000000..37e2068779f8f5eaf709c348ebfb46fbe6d6a2d6 GIT binary patch literal 31456 zcmV)^K!CrAP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3*rc4N7Ah5us|9s=?KhJ(14XW-%c+o04Hy6k?> z%Tkp{U6KeV?0_qG{_8)l`wzZKPR-?Ft@c_yU%BTV2Tz*+e0?5+&+q5=SNyvA%XN3> zUoQurcub#P>-ju}!S(Xv1D3z8&tI=QTVLa}uYtlZ^ZKNj^?ZLV@@t?JKi9+8@2-D+ zVAP+s^Yy=ez3F@K-+#|WFm_?Q6kR+iB>#TK&rFF`q@ISZyq_WJN_o$9y`=E>__<%^ z_$`38{~SNRzTT03gyS>N_qOV9ar(L*%5T@xU(?55RutmbTjGxw-mm35lz)%ky}R9e zKD!&aI>J@IHub&5_l!4E7&*Ot_hw7mER_j&NYe<`tv43-z> z#s-IrAVMa|7;EWG!|5H6q1#5$(4R?>J=6g&or4m_XQF3-r#>ikkA(k8d%H5C5{f~KbMEBp#Tl`bzoKpAykvXT-{gk=C z=j{(!+vCA)dI?e&5>pT|(S9d}xDNsJZGxBOwMhw!`1L}Y^0}MJU8AqHSZe7_ja?$k z$Z3qz-SNlolhbA6ywzsxB{f@lN7hziUusP*+}C!mI>iG1+3n? zCVh^5TDUuowUTWz)`;M8CM)_rGrY8npHSqjou3WRw$EjoYzRp|)q9h@C zZJNl}L~|Yx5`5nv``PhE)nKOSOYv(+^ckJo!L&;0t)AOnfo+Fv+78^UmRjeu>8@oU zwiAjQW<8mx*v?^`Qrf6<)7|xgEELkba|f#cm~FzodIPiWS%kE0S8ImZJB_h>$Nh3Y|F$7{(4=TZK&xW~qQiJLHU3@O`n3wE4N% z7-MS9#)5ujN{)?H{s>ZmqnB$SpQ%IY72gvd=aeWUvS6X=+3kEAdlw3frfIx_l zYwWuW@ED{bQ>z45y3nA<+93%lTU~y@lx%mAuu-9oTkPHm+}JL*p$M*>d2Y7FRE1K% zs1f$QD-9Bt@qx0cxqqdl-+GQ?mNS#{#yHWjDTR9g8=fuvDKfbL#QhM_ltR5dOuz`1xM0Yd09%D<+#-T(^aP6U z<~CDjDj<@`QTdzpsZwdZCIl+e)B$*7sTNHJag7We36@=lYj7%bGwY-dSzzyMCc}3R zr?oDKVog>78nD?5)%i`yPKuXMu-kPVkOH5v*bYMG!^;)`@ajjWem4>8Mr^|n_$J7d zmTn_0)&{!A(dpknid+#WSJVb|s7fg|h;qJZdN8BcHAR_*2D&qh8S19wn7Q8O=~}6M znzlB#03(Qc3O##*P9d6X$bbm-2BZL@d$tU|BOf7za8oYlLSU%!0ZP$qH6ALv&|Si4 zbi{-K5HAQAG$viiRuhh+vh%DWL~{}@cGf|2Ks>D~?ysbornTOQfz3i0#j;a9D3`1C zfaYnop>04hs0Qo=%Ad|@7hLJxvM+y%vijgr!oH z4QOLkJx1uhs#YjrI=^33(Rx#1-M3nqEa%1R8_`|cfWH84ClG{y5v}Nd>HwmmgQXrW zy+S3jk&KKnd|DimZM{d}lFGJrPNKNbfFrxk@@ZS9CdpXnte4Lg#+7DK@$lz}xF-}y zpc3mS@$_vJDpd;fF8;Z|#F8LLG}^UI8Wg_;n$AjZQJydm*xqRfO+J^MY$G1YKEcuzNI=lvqBgUSw{S!q(IBD zQ9a;3!ODIDYB1nE>il)#e?-y+3fU0S7;0j3W4P457Ru;%tfy)sLQ{aZ=+u=mv7>(> zK+N&Uz+f{Z8PKTOZ4YZv{;Zo`n)Ct1MF*1oLjm`Jvg!x5wN5ewC#nsQIpDuAv7jH3 z8gLfF0^MP_^ALKL4Xk)EEIUbgqFwr@iU8`5u4Q;7XzO`3I34Yj@N4XQ3(wc= z@1;h#j!=m5D(EU06+{H0&af!J^(2vsfR~k)Lies>xT76V(J0M^a(m}7a1wep#tu%9 zaDWHK${t|qQuAmyxXxGx7>@!)8B&zjS%HYn>PP^C&_kR6J&uZ{Md?PA z2JW6(L_OyUgm0h71nfAo-@qY0V6&-CksSqw9I*8Uz9S618w;J3#EuI#kZJ-W@c@u3 zOGdPlJV*-pwyD^Cpx228*b{7-;QcKC2JPe~gV#u)x_s3Kd8m@I4VNcTR&>^8^ggmh zWNJWLY~tGWngEXnAi({%ic%qE4dK}x7|yi} zbZtJ2qr|UN3>vcA z6&~a4BsWhrFUnD7)Nw7mU-&TEmnTSyH3&B_gszW64*(;_14$LdfK4<6A`kY)$kU#kJz1dl zpGhLC5qX6C2eIfz3d8|?xI)StWS+zDK|r3$il`JYmWGGQ!fRNMD8cWjZsq3DXh3mJ zo?PP~fuam7V~vxneW5^(>;-i?ctlm=e}IC?F6bJ6gIHZBAmxBd6#|sDa=0=q3%jvM zr%Pi)Zs!n5S$4n>3dSGfwi~iFQsLF3+2|5bHnaCckf~xYdoE-@AH|7-(($nvJW9x~ z4qG5;kSI$MpCT8ECyA`3jw%;Z0u_s5cRJ^g&&7UA7Z@-*Q3LbnaEOXu7{}LDVB@9N z4Lbq%Q7yYm0HTois0WYO_RwkVk$tBR3a#clHS(dj+5Ks8m$tBV38+Opt1JCUpjSh1 zDw}CI1S(>LvE?ia(_wcTOE=U8Dl|$m!WUA&d=4=rVU64!H)6059w01o8W9me!-QSG z@X;X7ItY2KagE;K^Qm=I>js-cTJP{Hq9;)|h^dfGG=yzN)+C@8$`HT58imEq)o}u- zsuR=}o^e41%Z!ourdtm%RP7%AYN|B^yKp+@1Y^U)of;Lmvl&uNZ9g413hr#T~G+=|2;s9|{@;hkHfUFT@ z;>K>$nS@{!+0j`@H^eL12NVt~`e1m2lIk~v|MKYcgvA1+3}BccnfoGYW&~UbaJKk@ z5bE+7JxavUJCZyACo-tWI`4}ZrLK;|YbiQam=T)B7E$7(FXDtjGQ3hZNS08tYw>-M zpTW_<1e0$++`mDG6&fL#h+Oieke>`>5v%w%>l?)gpb{t9^RM8P-9$LLgFwk4rjf^? z%4T6dB)Qg08X|Kb;@4{6(S-)c6e>64Kd^w575O4~p!HNI>LgU~>jGmUoq`;jMub z9YH3|PCe5jQ92Gy#v4)NJHOL&vR?zlLKT*b>7k;Nh@Z>?QjvVTi{*85ApmB0GU{VNLeU+FjZ&kB?evGjffZ-V8r@VOXLqHDAvi3oKk zVkBjV0>vq_d0B&~5)1?fp^&ozt%Q@)H2!JQDdc%$Zc8&9ac@*pIfdJ_jqj8C*lGvPE`|L#9w!U~A~s18p)xOjKhb zW~j1~^8Ta=)GCg!L>=?pkkUY0;xKjK$4mHq)?k^TlKzyYe#~ozMgb#=dgvs*KKSpd zBa@>*is5KkFd|jDZ;?sdx(@Gf@g5AMB?S7qdy2Zxy6t5zz5#ExqYDV1qJ^M6>&SD^ z2vnF30Zyd!bsG?n*#rdPW`PwI3^Bu#vtB8LPH*V6#;YUn$vRK8T&3uxVp)0btLXfR zNI*wS?bno@sWOK{yBB!zv8&UX-VlLc2ovX~8V9uzSeP4wbZB`>Fzz3=ozGR0vZ*!I zthzxVSR7oZMk=l+frCMZ%`|Ih1&?L=W0k5CYKl|`Mrf`|P~0Gn zQ;deLOWGjSlLjrPquL^DSw29$ll=h&tD(*fIqE4fkr!^0a=057u>@mdl&EXe@Wf_N z*Fp88a%ws#VN-O>V(NpWu%a{hEq~1_7up)Qa6mEGBQ!MJSvb6YbvVe5X=^+z=sJ~P z(ud7kQFpo#65%{&!Vm!=(9w_;^BQ44hMF@NkXUtqwI{Gp-#tWcI34sWHLUwS9vUqy z2hYJGq1>kfoWFfhYk5Zb*$i001npMPi=Cokv9}?Q20>2U(?AOfYkdfVu=}HXi=b+D z=wh%<$5*(*v5>!@_o=sfoCirD47!J@J0|KiYoH6O!Q^k8y!wZ-p$Av_w>ylnwMqb1j5uGYoG;|?ln{y;HfS`>S9G_11XNm9mRTePcZ4!4tgKp z0oVd7kS5Ap>Vy?gjZI++x}RIvM4hK^r!&fxbayz(IV&*<<@lsv!=cJZFa5EK&h{_b zi5eAb?aZZV|G9Upt+4P-Su&DIf{Z+CV%7!Wt(Av|1ED}o9-L$uaDmC+ot2g9>wXH zKrX&r1UxAE00LsoGi6m1MXv+1synicN+ATM;s<*&B}`;l5&Q^#lXp+suxw0(?o?)$ zfs&Btz*R+6T^Kqz1#8DSl0A}Dvg>uhv@klw4szs(pdB0eq(7d?=R8=VnMM32UB^_w zK*s(T-Qda|H&?y>Pz96Xbc1#?_d*frEZ8&BU5|sP8EhquH;hI?y6fPR?er}9D)J}0|LNBJ`Xx(3p{K_>?LH7>GKT%(h1umToBcVsjPnLrA>J^|ms?LM5XaVTv_ zQRn+8osr+|7m{Ycr2cXR2BD=y@HDD!Fy-A2<#|lEU#jlt)aCB%)CgXA>jr!nT1`iq zc)}V102CXz&CXD8k)UH6sBp!K2!^7&35cm4-PH|p-Qy>*Uv-TKCy1ySbQ4^?b@yjx zia6qPW*^A7%bU|Zv*`pA!E0N<219J!swT(e{34TqRMh_fxnXMXME9w4w_9cqpH_%! zep%bm3_irs(*Z=?lglR)VP)S2WAaHVTW@&6?004NLeUUv#!$2Ix zUsFZVY6lC7IAo|!7DPoHrHVzcP}&NuI+$Gg1x*@~6c-peBHyx*SiSM@;>+H=u>hg1AHR!9McVpc!PLm)6zNb6Ngw)Qi#uq#|^q5@gvt| zm)|%S92R(H$VeyWi9^IW<^6Ko+b_}sz&)j#$|=`7H73wWzBo?7Y1_LN{Z_= zM-amj;z&S*j4Dbf!$O2sjT93}+K+nphaG={Tr#;zVB}ap1u7)R5B>+gyEXGulWtNV z3Ut2M_QxpDwF@+Aw*7r<+l>>z{|sDdEq|pB%zlzyYiZ#lAh-=&T(>lN54hX`hMsiE zkQ~WRQ^@Cm_cQvYEHH2j^sKqPHTQA)0Hmp_y{D4^000SaNLh0L01sgR01sgSs6VG^00007bV*G` z2jdJ24iht)RHOm`03ZNKL_t(|+U%WocvMyT$3N%ZnG_PbSWxVWf|MkHSWth;ir7V@ zBtcP8f~dRhx@%e6T31)sPSaI{B!Hl@c4aLfN=qg*1s7Bl0a588WoGU@zdvqR0TY}% zB~$W#o@WTp%sscf_nv#c=bZPvuR;)nacGVP4guN#t$?<5e}4oD zDaj3O-+9+(p@Z{)uYmQyCSWtL1^5A2i=n?m8Ia?e$~WU<0+y;FaU#@e*QBL7CGgDAfY3j{%MaIs>NyJ%Fs=*uxS~-6_cl?RYuY zH%A4xhp^=~U?K1suozfQRmN(X)qwUw#nW={8sdtDV0k*Cc@F3!1`!&GmB2M9b1uc* zb`t=@7eYW8V2%JDs_R9FdU8H?-KPflFYra3Ay?M@etpxpGcwll@v78VdN1hM8 z{{|{ufxkU)0`Pypd38NR^H-w%w~3Vi*c%(z3VZ;(56r>f8*BocI}Yxb+v_y`A3?C? zS-@LBx)?-=LudCIw0@D&ytI$60n$A1Qg^YC z&@jV%VA-IIETA`VDbOEhI6oRAaE&DZ>f>i%4)7}Q9;UGg+tRFf531HQy?dQs0fs&f zO$EP9;s`=xV*~vO@V;WG4-D=B?iRa5jdeg7@D5r}!BE@L3SK@J0vp6SO`XDWunaJ0 z3;IgnVxTL~JO)RLrvTWUAkK){yC^*w%laI{qxt+*sQs~t2mqgf;xphxsRTlt*@)JM zDGGfZ(0q&gp+zAyH1G-V9*S{jwK?RMv5-0puYjNin?q1s1@r?>ZiFKziU8P~uYq@f zsaXEGG;a%Y|B>4FKcG*-@tF{WL|~)`&85=##}oye2AqcG0nl$y;Cq?ujU`kcqM6i1 zER@O=lmli40ecv535xz=6abC{MgyZU)7DV6V=B2t(@-o1FO;X46JgK>)KzlZg#_Xp z4{(gwp;5U2xPZz7o`Aq(6jV$EHpr+z3Nge7UJbVD1zZXCH8>7@Lj4>L+zQ-^rW^v# zlT$PerMKW4pBh)F6+oWcY9WE>;Q_M64soF^@F3{F0Z&rkdkW23N^`|B$;z;D&?*zn zdD!YUKyIdc@_;-P&w!dpZqYcjQHE(l*|;RWECaAx%k32si2Wq!MEvmrHv_9tJW63j zOY(hUm1Ls82Za^c*y=_!-vQI5@sAi2xEff9vKM1>F+E0l={_2j@D~|CxQJE;Os2G4^#s`Iew_2HoKOE z69KRW$8$gKFDalK@EW#SjiGKNuPB||k@5@*LWFq41PMng;8|b<8MPxQtng7R{s9Ta zpwGa_Ob2}r2BV41^1Vp2*uyl8zO z&>kl$=;1&ooLB`N<8-};0#Bm34b-!AzxEN7@>4Nho=HInOI;WEUIH!`QzRrd@GzEj zCrVjN=^+-0Cl}6!=FPld-U9p)Cw6;du?Z*2UIp+aupG-;g~tS2foZ_xZm~Q1U|{vg zI%hW93q~iL*agP{J%KZDrn4H8pMb})nmtUbpKWGOO5A5>=yEXpYwE<5AS41cA^?(u zg+Kw-=4xK;Ce~sr3GegeoCPYTZ(a>WA zpmTvIh;8DQ8sI}`cWiA5ZylL@cI#CHehZZ6D3rboC!fKoK(iPhc_nZ?T75u8 z74VV>06`D|kW&1eVA}1N0Zpm+2E>dZOTg6GU_S(0AETpG);0Q*fj6+MT1=Ca5qL&6 zbRPyaY0xZ?hPKZ^GZZ)rXcwcSYTyk}H=^xt6UIM41b`p{K!_5rg371Xs%3`w1w^;u zUkqL^Shf97yny2b7fpgVQ#xa@^-K&^2^N&}Yy!r;8M;=2S7)G&-k?VT=MtM(B(=aD zXr2Teh`SIF0U(F~5TeL@wCc;|c{_RcIr(oqov2`ePD*{7jpwuDcC4Vz&Z95JJU9(NRVKQipRe8N)RniY4~>5?%uNWgY_d z6TplpH2#&qt)Py_P*a$CYGOD30BsL4P&^ODRx*u^1cH6(l%S5JYv;hi7r^Fiw4DcB z3Va=fJzs*YmQtC~vC;AhSe{zocBzCy0&qXtS}g(~wHV3HW}_LlNGwqwBj$j%vr)$T z!0(C7<6PGXh@;TzVM=l=CU;K`J80u#oJ@P^!2ZDVWLRcGpY!5zP%*(KXuOJ|6V8-P zRfKyz45fXbE+O~o*k40w4g`YF1J6ih6ynHRSe|<+>4^w{)Z;O1vm1HR(b$6%{sPs_ zk3wr7PGq`B*a)1D8N7_m&3{a)fJ{dg0UW>Aw;e#4Npb#5$3XeGT5S7i(1!yrM7YOh zz^mZBgS?{Hpa09fpmygCI4QujR7|0fc^q3^0yP#O0w4uR2WE2orP*SNI`S)^+u$=m zFC=oW@)uAXMS!=N)QhBBdC}V5^^ELJ^1TNZPXOQepU~=RoJ2$`Bi!SCXi7MClp_6r z*q-~0KA?=pfTMv&fOS$yg&4907z^Zq{YR$c1en?jkZgdd%<~xLH8IT)mkbmx1nn6B zl-ASmx#4HvI#APDRSXLsOHO;_6@lhq;4iy~m3ORih*o8sY;J(4H(*uq|4rR;Nti0S*RrB5)aysG&>Cfa$;jH0wYIQ^5KfZEVHE zHf$TF^@ZS;y>3tZ1b|)lH;6M7X5-{H-<@z?NX=b7qNw8EJa zJs>4+KKza<^8;RMq9VWvzA^$BA7L-|Gqf6nVXsU2Kt7HDcz`{f(KL{OZ(MROAIZ4^ zRG>FbFsDcY?koX)7FFq+SoxH6C8EK#Wl)s{Iye}37HFFwXSNv_jm1=~beP_`N!=Dt z6!x(R_zEX|={LZ4D76vv4s5og^bRyTK-FNYTFhO_YM1|&*85P8?r9%@b>1K98uHzF z8_jtr6ljfUIVns5s`rPipTO465w-HxMI}2O=#3Mi^oXR>-tatGfsSDcspMwp642JI zz=MSE?5BZ;A@?>G4T4oKr$CLbfpkjU zo*GnLN4_M^JtQaMR-oPnQ2`~n`Zr$qyG9-=7`&_kPXKH@C=Nz347dVk?k*WP9Btgh zkVOwOwFy1og+9>MZFP-*xa$z4tC9dzsxnKqY)WsZ z9(x%KUPaNB@Z$y?3Ti&ND-WSdA8EX!MQIM$=1Sn{IG)8bn0iG5wOI)(0IGo7FgO_0 zO%&&@QvYdg_c$D$ z^;h7&2=?*@hU!7-Ti;TWqN$d(+5~g~3W5IkHeE|q3Ob^fje~&kHK?w@>tXJt1Mm^v z&ihNt9Yt2Z2yj33kJiSTAX?qa>KRS`HvEv9!uC-I43oqWXIcoG?4{ac?ipUJ9GXB>u1SJI#uX- z9eC2AwtDZ?4{lh7;#2}P+gUnMY#I%QRe-HO#__dkOg;k6jCxy;LL&gHK%b7*qnMJL zJdM92X&M>1FVk6_=7b54GVzjnB-!bb0|&P`H}hs zfR2%~^YmPp+*I5_uE6pHvq>v#YZL_)sq^#>oDXmUPMXzld^|P*r(l>LQQTGD22Fv*W1tyt0A~|k zE`f^(RzJ$gqr{f6dsnC8F%wz<1cAXQ^$3q13$OG`_UnqyDu8e(?g2Zu{s^i!FgL;M zG8`R9jowSX57N^Q0Ny9O2!HE9^+2m7O)gquuPY&ER5NmmP9?YKIC@;C=x|okx&FE1 z0A}Olgb1fMcoQ{xIJwtL3nC=F0I-3JFg-IU&PkQ)vg0xWu#1^zf#2GRVfO<*Ng%tN zfbw*vW!L0?Y;DU6`fcE#Fm~`&U1-uZNtMVa8uTavEB!c>{;uxXT!C#*q1~~nN!h_S z4qzd0W|$)2IS8Ia&PW6yiQlC9b}-&%Qi=?L?#l_VF$aF8_kbFz(CR`GYdT;A=TA)T zdt6Wkruh;O&ZPYcP<`0BZXG2#O|Qn=faV|U8H#l<*iCPt`!6Ek9Go~OZtwuFp;UVW zA!!9bN!|uZx~I++>D~VQ^=L=qGQ9^F)>cscaWXO`0t2yZPtxAs;qw7*0EULu_$z*g zsWve4{H9sseK!0$9WbDJG);Sq1K+s0zyRE@;5h&&q31wpNrYq_0Z7??&fdf)-+6Hl zDCzP&a0!VKIjKFS(J3kKYW@-kr1b*ANyYaqnzISAF3BBSBcrEZHBj%Hwr9K7c!%(k zqMd=Y--C3$Mp_d=1V91{fH+>O2OOuPM-#+8XES(ta^2Cwa!|T8PDD4a%hDTx)7h}- zd!{z=rG5?1^fztK=mldysS@DMFiPKs$2^_fB56?s5daB*PPl9RVltrb#L1c%Zw6ro zlIxDP%K+?2xKGu*9XK7WzvUxw*b??Z`B=!Px*sQ|gjdNY+>sEY09SpM_;)hzZa`1OeXyT9(Rw;B zN_gL}YfMw6d^~952Xt7DyU$ad-dc<(hyaM+i>$s8fCLJ3VypnB#rY(?o3M**s>qZ0BS=9fcdRsl|&b{C>g<%97J9~MZ>7NUcHGhna7i9YFuuIy-i zBi*kR8wv@FC#9~Y;{#69ul6AT@_p3r4q!W9Yqh6b&~=~EC_9r)?+N+7_fR}S{QMJ+ zi1R4KuQ{YIU}S)P#AV56z<7hwZc?km7tTU`R7`+wqh7+)7vV(o43&G)>V+^y4+KF3 zKuBEnIe7iMqQsqtlOO(=dbVr@+>62sx}NJ+UO=Jn;3N*(45$>5HD|`wh47luPuX0bp*=QaBD5-%cySShkr_q7GlH4_dxEo>%sUv?xyaF z$Y}Q{-A1ov$+KcdA)!c4AAo`i2(;`-uzC^jVhD|YwCDx;T`>N}pB6>Fw~`OR$;los zS|!wdtsWg;&jLdYgpCAGt^2Xl>N_PVm z0P#v;dKW*K4>KfE5%4E~cxL5k$z``B#(f=90hXDEyE)b}nq}P2q+U{!g~q{DR$ZuI zH>raM;IBGT@&pJX03vPtZPfzJyFk2S+5Z{S97Lfn!rkZ%Ky93^p*d;!iE(e8$*8}( zcqTP4inS}H7DopO1Qe3w90$Q#A28L8Yycj`7Een-1VH#Gz|fDgZ>PBc;IC^`Yk+EC zCs2vwjk_Hu#`ij4E$|hNC;S(6z45(2>+1Gd-`PA591xKRu-F_&0gzq)r8P2z<)HOh zKwlT7{(&;ecz1x*Vxf`6Y6hTgsC%!3%7vhhrMm9;yQ255a4Nk$tccoQQ}6bWNoz&N0xsGo%;O^Wn2lg z3$fHtoJ3&Xi2;Q~AbF+$9EZCT>-ptJY|kSxZ2TS8;RnY2hAoXcrJqsHCw;eV62a??DR}7`#848&#wUJ-9(;? zKVfn{BfpH@5n7xAUT-sCh>KFcXUD-(YlXz&>$gGaakyI%a04|zi0y>9lRQp<%Vt4N z|GD-2l8s?Mg?-?)6nw5J=^SMX9SVbIg3`HY>PzjVff>MN9Ou6PVBsu9)HqB0l=HpX zZK^`sKoBRO$RB{i6U^d|5e&Q;v%R19G$?%&^*eRe$1IwEy*TE+9)jQ&ZB>EiVc^~n zOLW3kzXN88@dOb7q433DA*cTwU>m;<0yKh*st&+2iMl7(9iJ_FhK2Nc0&O=u;&DbQJ*<}Gji7~3_X^~dEsACl~>U$uz#HFISyxK zMg5cNntbvrN+^x;ocqvaK%fV3REQ@ zi{y#~Sdt4Ecj7J?N38e>)RkmKsG*wq+ukukc+`rQSnCK+6v&TI9bugZ>@H8fW5x%`s$+#!6*(;RQjp2W2ih& zaZjnKLgF*;QGnNR6BtM_io;G4+X->OlhkKFxf`5u-*+5*-VJE=XO!*^oCaJ4bgZY5 zKO5KyDgfG#vjorDYk8glr14Am-b&yHU_C(v)1v4Q=hp^l>cTi#ubi~q(h(>=0*o!gGA@rf}XfywR`HKRzke0Euf$a{#FuhR` z0GBTSi?eZZ5QM^Xs#i)ajV9hq2ufQMGfW$_ejKer6#yq-8SSCoAZLOQQ;d|mqIDNF z^oznY66bn{R)8}X9xr^9_NZ%SPX_p=p;sEV9i3&0mKU6iXrWMrX}-y;1yW0+TI0p( zET)u=gD=}G0Yc5Hr9clR?;5e4AOavt)ZfLie|uqnBX-3+z{oh-r+lyP_K~7g9~!0J zQ8vyrOehp%S+!C{g{0%yEdX!1C{c*5#BPEJfGAOac0jEX<9hQe!0;CW&Es?iRRr~3 zJruozhKKp1BLFO;pNp+$NZ4N?De;X1tzL9dq7%wEPz)!C0Ep!XfJ&4R01a?m98chV zJZdi+shu>uq_Q1d{~Dp_Spv`}WPzg8XHq?5A&nczoGl&DXdC)VLXTCF4xCIknFbI< z0K`rJXdVC8+_6`K;u0W^Yuofx(mU+k0#xH9GOCZ(bhQP{E&;B6NrE&xjufFJ@O3N+vY5a)r;!g5et4|I*=SuDp^ zzwQQlH|u?j0Axo#Myx`0{;x?Krma zg3@P%t`&HnmwHIe6jJ3C`xCG@#EqMgVVxj06BEg{L>Q`t) z0br{K@OwHkXmKiCmyY`gz_4=A_VK_hAUgqU@-*Iki}})D{4$k(>Yv%fVLNQG5vO zp8)nK$Mj6EYvlK3wt4&b@j?p15Q#cyP=A`?`uH5%E44C~n3-aO#%CD~FR|U5lW8X! zSZF)}0B|6v&#;U>(yb;U0iz>p=N)j7Z%$F2#%y?hZ$R8sW=@M8l%jv#Zp3gZbg zfg?iP`U|}B@)J@Fi}k>!5V!6LezBR*r~&|>B~AdAYZbdY)CZS; zW?)*k;Y0vyo*=gP1bCgY;h}6>3oK~hw}?#syK?v8HhBY;p{n-}upiBc}Tx2k4d9qzsBa8reoQ8kMQZH~jij{;O?544J65A+eN{DUnYsUln z6&hX+cpP5yel8DD7-qHt=pN#^ZUU;MO2(M1b=qZ}5h7*TzX03}sU9Up6XGcV0NMak z(dK7({HHNu4xBJ5S+2{D*$9A<4Fl%G&<_ou2s8K<@Bol#-c_4W>K>-JOsb>Og1`&= z*y2_!^9J%OLXcq!;OG#Kyapw0Q0!~G_*le=uW2~h*4`Y-rGvy`LR1)-o9gU2 zbh~C4cQ1j<65dg;p-6z?j{x*v1qBsQFy{a=(;mdg{tg%mbV$(a&nL~?=DOrN*MO}a zq~WN508gRx6Wn|sT=eli#Dt9t`>e;32!KM0VymscQKxq27`|>THWOlwo4AvGfIh6Y z9w$weQsA3~!MkVzv|J0%UX=I(z;+=3hAjbYgKdDay1(Ok%wzpIBLM>UBgHHdYO;$Fj zdWIouTY+A0?A>DH-Oqz|!fBxl1HIch8-^GCzqa0VT5EuM1J^1PXHej4iQ*?TJJCiJ z+6JWzl+FfP;4Iy1k8K?RbVFJFNF0y;P*{ma7x7YF_B`bYmw?GMiY`z00{Bn&nRZ{?lIBZxtBuMKR~+PTNZLtLE)?fZ(|qRG!o0QHTF5=V04m0~wR1c30HJci+ajN;tr?|FO< zD7BU9z^TCPK#W}V^#O7lV?fstV5`nJ5gt2*@IJVeik_1=;8?L;)E{xZ#>LicsFlP` zLTvGf36h=(G|RY|=W=6rgpwQpn}UjmF!T&;?g9#<{d$yJ86sDd!t&YmSWN9@Mg?#@ z@DA*;8lwgn53B|QKw8~)Bk`IAz{Ui&M%r$wXETQW zjNGCzU@ph^Y$6T;*q|y2ZBPLWWESunbv-)Z0Z_db9P--;r+-}=v*L{+K4t3ApD71A3dDqRRd`x6}>^>R{ zt259U@Ya3oy64Lee1=l%DGznj!LUK^3{e1N%fd`S1c0zN7H|_8{-^mU&b^#@r#Y^H z&5rq;i>G{!GC-qHm>77mxf8f8L;>J#>0(Y1C>{a+ypK_Zl~}4fPL{*uM;oU^(D(xs zqxCkH)w9&EVm#y)O~zTyd0bq`mYMoW`~PLUAgP;WExOo|M@qz zIu5Nb0A{3y0N5?wMtFS8*0uZky%t!N^a237V;d$BIjq_Mcd_sJ`gF9q0=PLu0jE)R zsA4peW-GHl{%e*=08TZTE$iXl_6~DB7>#h5yzpCfu&^K&os2kM(J)S-4&%z z_}>S02>h5T!cN;p|`kl5;g!>On#e-JGbb2X4j}VMyaICV`=s zl5QP<(#Hec_ISQD#}c%2FjVNyt2wjy4Z*sX0FWsFA-0GQKw?q}JVM})_mTD(6z3)1 z6uhS1IFet+{cp{mci};x0ym8K;g#HLwDBifB#yl#SojV6TkI{#1KlW2l~e z2DVm6d<;PZK$F1&rl9yU#koH?U*#p|mHg*HIP*R?-uJD2^;ZhlJAIAl)F%f|PWFUB;#*@aZfl# zNoLP~@Q6u^t1-(%bM zPe*B;vy8Zb{MP3Jy>&_z0X%oK&+^51?G*(=)to%~{cO=k4JEizp|()cW>j$&J}leo zHzX+!fci<(-f9vZl1k>`CQH3mXZ1rOG zNy20K|5(fDiFGWgCrXfv*l( ziW&iva840)!SXU+qAo~sdxBVeD)t9PS6|y;Ss%t7eOlr`(wY9~F;3z!kY&WcKvb7& z<0k^MsHxCbBmmhwY3M`5Z>mip?-3`^gAUCc(^6V~*NaFFwaJt?wS^q8fZj6R_6D|@M0mIPM*DW`QC2M|w3AK)mn zSC{m1BX?S)f_~-gzBmP^;iQ!+e{4g>)`FK#By$zIBnq5e1q3Oo2l&!D%|_p50*p9a z>n`)jpc1o|MjPs|&d!l}P)(GZWn{spPuEB6-j$@8=xi?lDOT^IFEdf35tSWiVcYP0 z%X+fkl$a^n7+Ju3%ob90E@%{8Jn?EZaEy%$T4_CZU@1($-8X{n%BmYrcpw~=6W{Dg z1#Ax!dFzToU7>&Wj=%0rr2!v`M%xFWfD=c@JUPCnexez`jkK`O%NUmD4&r6tP~1p( z0^w|bZq7x!h`#qHy?-L06d(y7hwHa;y}FR#&6tG5m!!!=zP~sb$3J~rzF9}4gSNbj zMgJA}NadMKrv9A8nWT$bVL3+y3aA-Bo%&qm>|H5kT;wJ|0-1RR|9&sRARpTy{1Eem zHJSa3r7rXH{iZW=%c5dbF$Zz(bJl`=W}iI--1I3%T?}=b9I`M;8`*$u+8}3T|A{Zc zX-0wgXj=jZs`OtX6WO%+PB`~qaFG^1W4NKS7EoN6C>N9}&Z&v?JGzSc_)Az97qmku zqa)!N?v^XZuM8lqm0MZD+3fx$L)_3iJmb7=o{w#d{~1750R=p66!aBCID^VVH;at%;fh>P4lpNr`tuZ%!>C8( z=DlA~jKXT%XALJzAaMAKPSgT9V=xS;%Y0s-UmA8HJsw#8^&r<_(I-s!6qhP%G|xjP z-bWydSoc2<{s$=2746Sh1JyjWe`CCgtwbeC_;lC|2zw5+4EcKWuYX$hbyf%w>TsMo z1rnu(9!n8=JCRL+Nh6W5)y9=RFtwWx6*5FWBzlIfOh>i7gVT8 zl1L)V4J1zzeH7Z4Hz)`Y2071{jmw;ck!e0hL*PvgE$H;~Cjyq;2%fDvVge+mM&x66 z!+l=;F7D=M90pB24S}LHK#{koSatyy`I4W&^fHqFeW6T6H#nUO+6f%+_YUB^`mbfy z@8i5TW4Y`Ii^{x3jY!(BX6VDm=rOL^!%7~wMkEc-WEPUe>&z}Hh}Xqkf2Mcc4G7Jx zkWb#C!p0=!1GO40@kI1L^MU~~b~r7@^4O=iNfO<1R6~@=M(cn-?%Kn+_g@6wzkQBN za4l=b1W=e)JAUAFWqeMx-&<~D>LZiw68O5Eky5-w zPsLN2PmsJL|ItdplX%RnumGe*M8PX*oHv2Q$OH@qk?%I737*U8oZHVZ%P!-Kq8;S%jILc=laCxxA0033T8x?{VdzO(8N|EC`<`i*W!q`@wgw}YAH|e9@j>rg&NHD z%)!qsDkYO?KaT-4XG82Hi2&T%QAIZ7Q6|X>&WG1g*kPxl0dxYmX%JH&j=SLqBmW#AMQj z)aw4vS)?bG9(OG}OXVKw_ly>Pr|jm9BMAZKfIVwL>ASwTf6XH!r%iY&BZ3sUR3Cx& z3!kMm9U(0a_kyh8jqi{L(&rsWZq&vzxhjKKAU{b7Kmj{vm**gR#UY^+$Q3NxPVU=k zxd3QVi`T7H=Mp&rG!FmsSt)O^xa}o2LTI~&G%ZMfmAp;i5OP?!6UgZs{1@y3b}~sZ z1=~Y78~Xp(39(|)$u@g-o~d^~IEZNTE3F_2?+x>TjbEblYk-3-9EKtDsdZZwN53z* z|AoZh>`b6G#sSvPrP?fa#wPBGI__uotYH448^`^V1pGzI^$n^bzL?g4@VUuzE=QvG z<_M%n!YP=04;M-;UJlAo&h(~k`9ob-40xj~1LuQT<^_`Z`C@6OGWQ{7t&KnoGIFK8WLrtHcgB`4{~P>5{jKKwIKC{;3iAIr zN(f5+NZpiGk0Vr);eXPFUs@!sMNWUzwnyC}>`VDCR+zf(`C}!NLFpDr&Y1qe)1-Wk zU!LVp9w@!Mh(UHnEBqsbaBM#LhO;j6KO=q*&vef$+M}Hsk`>Pcr7v#Vq6pP72X`vT zA47Hp>+MWjDmLi84KeNJViASap-Q`wqo^8Q!e+()^^XZ@ZrMS*jrO_brwf!rpUsO^ zajIpIa(5-Rg;IM+C>zgQ`UqVsbzGuNZd+LXr7vN5XgyD)Xjdret=I7*_gg^XCLZ5GvwqgA~a6|aHYo-c< z-uv+e$1dVnbEShp@cY0<-_ zDdpAW&cr6gMkSG9BQlzsOmTy9Ethnorc)g!NBdIdW z$3Nc1*ZTmkyzLEQswpX7l8E7i>OO+P_apSpK;O{`aA#Y-oMY=4J3NvDe-&(Qb#M4Ny;0pUda;hx1df8Mfy}uSiTAak`zk$Sd@$= z5%}~*U-t_Vj>~(-yn~mxt*XbMM@$ofUo<=5Ro+;=BuPdu1zY#$lPGeDmQWu^B}Dna zBrol>;QP_I1^n%F#{$sDU9lgv6rgsPi~s{CSSBP7^pOmuU)W20KXavZbtSsGlMqzG zUxP7A2L3m%iK9ILLT*hbCiX43EyA5wGKkn~=W zurz-}7yK&;prQ=xoCgRO%zF6KkKBir#Hs<&)KgnE?M9cxC+}%%xuAZMqy{h@7sAO^ z2uH|+29a?D^e-X(H?;F=hk^M@IY&QY9!Y5IlMzAyAv(+qkNU+S}RUSDsO#JqS~O6tWCjj4NtNL>>LjEzy;9AEw2Y>U{T>0GpZ@iq-T(P zdOKwHOv|AKe~-~MKkEKgIL(EE0!-FkYKUs+sEo;zB>mo&rm7D)|2TPQTj#gTWuArf zo)L?~kEb=cK_)PspSi&-DNYA$qH!RP@=MtJw4c$^N4E4Im;yv3`ejeht$RxN$5>+V z@I)(%ko(43&p8CynVg?v!ZGZF$XnG%<|U))K0BG~oAz3mgl?PUIbp^90Yc3}__}|E zh;NdU{!0wCxTfP_4kG~t107hZxPTmhn8FzvH7xT$DmQT)3xi#Xp~_mQ$xbUH)e^-C zyETN)78X$`oBL_3EG?N7K+Y>>%k0V@?jwPerWirzWl1!PZ?TuEfJczNi{b1dXGJQT zDR`!wJdo7nwE|i@+fl*jk0Ff7+Wsx!TO)CR^YGXAkH4_U*r>qU0P&jOUR z5JT}#AT#pXj6Z))%Bqm>wWh@%ul9`4?0%YqKVy3qWk}@VhI`Tc8r;H-NVZk7$fRxX z1nt5ky8nT7cnq7Zx^&(C*n2r1XUkuMXfQpa&$Rhr4F^&HpuNL4ASV40A%_2jOqC3> za0q!HUlyHm9n;PSIy9xpkgH=X!_# zRscB8K}i-lZT7jz1A@GD47F)QZDW7sDgov0Q)x+ju1Ujom3HNUu1348p!iSUunM}w z0n#WV7$*ofo}P|EY?DB)G7swQ;dGNY#780Huws-@M@DULNQUqdm;9~XaD_c>-*ZKwv zJhJ@+kplu<`WU5PoZ!hPKXD#UH%u%)@MPtexLYZj3R><tnoLx<$w-p3rI#!KQVJ9GKr~9Rf^85?w8K&7+Vf!4 z2q9!1j7e_L_dJA6rRK(H3z)f32c2CLdel|2Lie8sb6J`6yhKt%V3iwE}Btd%?__35+QMSJ++!RCjX24u70=&{@ zV-5+zH5q-Jr95<{Zc$NDycvB8EBLbJB;G^{GDwD~WN8*3+A5Au;>**kt4(dRQL0WZ z{_xMtHLbK=uQaTBjO*zn5QC|_DQ|jrERhjSulCYVUjbA_eh*!jEmfV~ntyqnyDm@Y zx&@ugAZy&Y=xGS)>~g3FA$me0nuFMCWG{L1_U}LYQMmH);E}xzT(WUX&CVM*mHQQ5 znJaFOLAKp(TPc)AVqq?L%6rN-#Gdp4)q>R$o&sIe-;OOt#m)IoREnW|avqz*JjSXP zk@=CzB&x{pqbHm_LpSc!A!(@xQ+?6WU;@?N!grU|pb1NC`Fa`MALs~&Qk&v9Dg)U` zQ>6A|k)Nh zeli2ChSsOAkNQxNfO65(w0M^(FGNiBr-AtvKCh6!tR_w9n-2OD?(}HF&A_NZbNmUD za&A&ku>qVky;tMq(o|-1q}NqEo=nkFygf+-+6qSnYu(7X=*cs>rKEQdEn2a-d(zXt zE|Nh`RY5rReuuCRLm7U!{g#^Y(z1f{}Q0(dxnhBs%=?7j-CJu051?$V{6QH{>-Xz|d#Bz6`N&Q_h zT2c3a^|h1 ziPH1%Ds;3Iz5Era3jchxAF3!5$kc z6N$22voTB>PPj>C+D(O_Pyk46i!+U}Zg$DEgo0-q;O%e|#8k{-`5PnzG*xyo^{%Z! z5+tH#J{$#+Y993GDq%krD>f8cd$rJG-2KD5Vjg-eO0cQ^c?QC9zFXRlM@{iY4ORO- zJ#3AnGQv6>0z0ZMM5S}B#r}3T%3}B;0J)a=3)Z^^Wk3YxhfOylE<8ddZU?vy91x8|hLN64kw*IV%_eA{emgcq(y!YY>`XY=jdC-Yd5q~lbu|)^iq$=L_`zd zBQ&i-ttCs(b>I!HrbCQ;G3UDS>YbF*gBQFa&TN9-;JoF9ZNYnyGPET4uzqv^HwS16 z{zq0Zb6z`3mH#NC5k>Hrcd?bK2q#5)L99yD4z&A*o+3P1^JAwZ?>0#!MXe9G^2z65 z#p5OKCVQm*_j>7fQi0FVi+%03-z~3B}o=H+T!99m%VCRp0A~}cw2i?x{Is+Q*WN~>MmzDWLTcUQBeX*z# zBa-|9tQGCRcy4;ngUj;>b@(vYmK7Z0i2H-a97wFETHi7P9DMq&&EBb#m-Y{f;k(EC|cxYMNcm-UF;gu8{yivn&W`O z@uR3v8^6xD&CUPiq19bh_{#X}!K^qhL@O{e0MMMUZo$?x2lGT3N5RmVM(*?=?$IJ= z@rY8ut+)4PZ`()V%P?3C-+DEA!!X6K4{A$~VA}~c1X#27POT!zCz}TVmL8LGLcHN{ zygaYw>UWUKOUbDrMZ0$NaDBQ_`9;ozkp8#4`ut&1SuSU``Jb&0~(JVN{rNYKsiuYg3 z1jDtjz6eG-%B0h|b3`{pDWCw4&^?!+Jb&mdN9EnshiM!-MVC+XcS+{TghPZ*_JCv% zeTJpwG;8$%KcXZ+R&=RGGh+#j@26p+jW>AvAv`S>GO+irl8#-BzMq64uIjE##MzEn zEd+YBG_thwXHD2`=G(W2&)`u)PTb0i!EAKqrSWK}zwdinu57%_1m*^Dp5MWZOpP%fG%_LG>`6cgn*&6Eo$S>>%LA^Jo zh4!ob&2--1MrF?M!V-@Q?#oiXUSV;fbT@(nqHJ|JntpEOVtc=dp}D13TGF^1J$pK{ zou-at?G4zV=fit-ls>Ce5`;x>r}Z_upyItkx}5B8ViDF40*CnJV9L;)(=9cI@*GgL zN=Ho_g>Rkq=>b|ed+%n@;%1DzB(#y~&y@#ap$^?NkjRxZZ2_FE^GBU%%s&V$Uc%>Z zk3EvWE=Wjmf_XW6e1d(>h@df^ZF}HcM!(@IplgJ@e;Rrj8YmXGg4XAd&loK`Tb6b% zoaaaIbvyuJ8lJ3XbsJ-FFLTn6ry4kUnGdglQ{iqhee~#;C6eCRWW#On%Km*J>{L%$ zThOfub)PdwNLN!zhLt(Txa6duc3=s-6_%Kg;(TAeQOZy{qf~I=XMDq&S;G>|?0I0; z`vuINIFErZLFhNt9%ho@jx2OA~5_@yz$9I6Bp()|s=vk^*M$bC={O*QTs7 zRewzLn<8NNp4jmTR575E|M7^6XjLb7q94u}ck&%ZtZpCZ`u9d8fHeMZ!lb6KdFsLL zJGjfyQw5JGj`nMSri|6ELKF$~^2lHUygBs#qg}N+Y(W(b@V=MU0{?jm`!EgoO;Ex{ zo|_a~!96XboU~@9lJiR(3e2efQiZ9;>e%7b(s6h^J{!>MZS)n{?ouGyf=1E$t=QaB8@zld8oEsaebh9fOkPg9xyT=hKG@@8ds~ z4`L|O_>*l?XP!COC3Uzpdj}FSLhJXwHAI%D!VVJFUaM5@hVcnvU3RR_kFy<9zsz@Z zc3-(@hs=Y&mEb>OpLj?{w{B7mg-?Ruf8h@*VS!+J%o7Hz0*_j9(_9akw{-faTGvE2 zUI3bbuLJ$mlJ0c7cam^EW4!I6_c}DEbeG$VSQL8-be9xo;o=BBSM6~H#DsAtnwVKR z%z9|;*Tij5!b*59btAVQl7h>AW{LBB@;Hb6-4ib-@7+YgbJpw?z-{TOQMz4oWAmFo zD;euwUTm^q0tf8sb9EbSnqUqc!Ci&|#tcydBF4uIi_mtg%ZC0aCenIb^=)^n=F&kf zWNj;tQ_-`R=$=w)5COU~zRYID{v>DzjsXdrcZ}}b-&vOffSkeY43(v9o3xqt`*&24 z#5;CyU5@lM*CXr7(g#OgKy1XGV6=-kA1}3{1v+}JIT{Ak9sd>JtH?w4?)F@Te;9 zQyDxL#@tLoS~Pxws*bk@3I#C60b@AG*F&%U@kOY&FlDM~MQ|6XG;j9Zl>{0-Yx5xW zKJ+P{7#p!?MY&cUt)^kU)u=Ku#2_x#U+3_sxn9F^ML8v0&{O67^yX5&jPZ~;DD%y5 zGRmmZthQm7A+oDfsRkrY!A)RlmnmgQ5WTYQHf-Y_!t+HYj~}XmEJ`6VSd7*Pra@|r zf-$C=zU9>K$qs`%z`Y=Q$R%_Pa4kel^_99@{rJE#?n+PrcTnkK${n`}$)sYW_gns0 zh)rGIYFatzB#?O(#^BJgspeme@_HOeI}r64#2)lD2vf_*22a*sOyBegV}bFc=;OlT zMKV!d5qI=P(2_`)iCt&aI)$|K_k}*S)m}E9q6fUnUNep7$|yNrykBUafkN3e9@*EB z5+Q++uT`il!JbyRW-vmSblW(ag^TmW_CZ-R zw6aj6-0+=Si9=WL;8)JK*ulb9D7r zmR(!h-XuF+^SCKv!u@-o%UxXU09!M&4u5QI5kUd`jNE!F&on${64f~rp% z1!@}6cmUIbV?#D*UrFr|ExIfbK7b=gKB8o-EU5Lj;+9&bDzxAgn|>pvqI_MwU6S?l z)#ezGMQ~!uJUD*6C9VtpzIfr>`U}5NM|AM-xk!nKCKQQgw?iW7!rGfb@+%Tw((gVr zBQ)_PqB{bq*E=}pqdPZ~yaC@ott+LX!zBja3&TF-D#poFpOeF#YVfeSgX`xyx7@7S zqs`Cs=)#0NnmPRPDQo%VYdXUQko+InrR@E;HI%{vqIyn!T_Pwn+j}N-8rsSjH(pWA z7yQr{N4SuF?uypERZFzcrGeW>!3az)uhqlV{ByJJF>9j}1RzIW8Fpb7(u3^geA`C! z(`)1t1SnP>64XKweGW2Pt2_0LYjne5ho{OvuhK$}q4TnTL=^)2b?BTlVXnfAaJu0mZ{Veu7RXA1>$i0BIP;u3)FIpBRW1l-~_qpf4+?!I8 z`~EtJykaPQ{qmSZ+Ow2n)#XJq9@ddJ8|rdtR$U#r&nh@3|IMnHlkg!q8t8NZgn zAK;K-8U@n1`PBEbwcv)Q_E1SZSz8XRB-N&XHqIhh;j8?{*Bph&upYXvXW4|(=3U>F z*dYVka~cu~U5qJpl|30)!TVQyp}<`W9GXU$c9)t(Td z&${XFs2O1Ri0g@%p@x-jRl4U;TE?Ke?k8hOCaYyt)j%5K3LMN-60J8L8a-`4$py}8 zwMgV`^yF&zU@nL9E8dAsG&HoMH=m}{vTDNb>TC#4~qf>t+W;OOIZ+h#GzKl7KhZ6a& zZ3#Ia*RM`h`}~Y4Sp{eggi6aCkvQOFi$6%iJ^aO88HtNEe&q(6O$48(&l?P41{%As zCidRS%DaA%=~N1$v&lb{33Sc^cheCY>6- z1L^8>ugG0KeKosa@Sy&~^|zHk4vYP4otuSNe+5bLHsHyL_ROk$#!1*|zYbbXCkgDC zWE~^>%XE^UC3NjGd#uu#ec%#WN!MzzT;=n=Ge(xV0-0%*G@B#y ziQ^aMPMC(9pNW0`Mm4$8frsnKwQJ41fL9GfYFqRoxxi)Y}*^QA=m8RHH>HFS-NVN#;)H3+%MG?a@rbg@C zG?=ez!#S~F8@z})jB0~iekKuC%${1?H`FKb-oftbem z%6qPpk4g5iOn7BSnh%YgGX4s@j>?GF`5USDQW~IR^;MtEQAxxlx6pthFXYp6Mg*OI}V*(r1G(%y2H7&hY$ zaiwROr>##U+iG@x9d2^axDQvDmF8M1Pq?U8#E1DdTeGq1|tPgkCoD7AJNFqQs4 zyRWbQJZ`|Fe|r!NAHXRMg5H#j-NX%Gu(all**TH?5RIzG)YfH{GR+sPlQyj_JvPvu zvAer{hAL;g8r!ypF@U^SyXBzSBRdQ;il z-=Q-8?f>MZY8B$57@@-sq0@b}?KtYT}I)j&F2aXBE5!Ul-03xJ&SudHA?u z>$mP+3&PSw;$rd24yvIzX3i(H^_d0PHy3yHLjO`Abkcmzeyqq#8aW3&>HR5tY`U}Q z;@WIH3FWg933VcJsOp~HW}`@P=oFrJ*SmY`R}3ED7`&%_DI%8T{qcotNgt*7O2kA} zyWQ&1ZGyUA*Fi>n4#@RoZuJa)gPS^`IYq&0c!_zGm8iv{x@(`1#X9fbT8#2W>NFJF zJNwF2e4rR&1_Q#uu4>r*#^@E}rtZSEDjSDsnovP^A`ru7y5)0O3$GVIG-)+((HT3UoFX-$pX?a&@@xMO?^TMRs7 z0@op}p)^D)c|_H6nDzsf$kvt;H9mRyT00k>kPG9{K0MKU*umy-x5+=3v^14{$3}f_ z+UxFVfe(3){Pqj$m6b^2d?Q*GEREE?TioI^q&(us=^c} z*IJ5hp@|eo14`9+MDnXI+JyO4y%o_s$^I$BJ<%L;j>m7c(;cYZ?aM&Q zdDUdDl%>lVj^yqhsNml*bArZH_2w5x2g%m%{dK}%0ku-chVcdv9y2iF=|zAn%vs>> zUFfDN>oZ9fV~J8Hw&jEg?Ti`nR1S<|q9pEtJBUsSct@*rry2 zdcDCsWCd28URWFm|(ON{9b_B`NnQ4(<^{I}qwTZnu6}<9TA_-rkLvrtq z*n$R7j@<`mLHuusAhh02?yUA3Y5G`!YV%IYZcCommpWal4?DNChth2y-h@4!}M zh8?AKsfuyHV*0zC*pFG{+U7!MWyUq&1s?xt=}CVr(UIZht3C6yjUefE-_gXhDIp%S zchdS6`3{!TvSY}tq2{H*I2NTNA(5a0`C1IE?9W#@UgGrMmI+dY54h6!g5pl(x;-kn zh~oMLPFVk9g#PTMM(B^G$Z|hpg@T}hzdUp3kyqrVqgEIxk z>f<=rm+Oy~sv+bZ)(v@d0;s>{QF2Mys~LV#e11CpC7BlQ1nHcQ zk>w+nHK~0Imd~-juC^3dDP<+T%$aW6`UIsTA_3a_7>GyJj448L&OK-(>|<~EX^J7x zV%wOLstxJWAAhaD{$ZT=tL}tQajo~8G$Q2MnQR@ms(n0FXzL=C(KhT$nUD(`Bza1h zguN(sug^5e!efLc^6Cv+o!}^1$rT?em>VDKNVcpYs%FVRzH@H{^EYeT|jPcL7+|3+-Z4tPi@8V^JxnT zii=ipKurOv6w0F#Pb2njkcBDq_qK5^Vj*ybqi1H{TbZm8{*jK5N}^VHo^R0qYNx}g z>d38p?zLf(r0D}6l6(yqS8VMsMzD3D$Od`jthpX-M|4SY$2iF`bB5a=)4xKtfeI>` zs(DbKBqJyjABKZ^r`=)`MjZLpDB=e&Jz~8j*4$PQ@ik>?b8A)Bf2+%}gKy;MqdEl! zP{c|(N5f;QUc@YTs9SqKZs4jmKmd5D`&+k3vJo8_P8x|$ zR5X8H&v~~31THKoyk|f04pDZ2Vy)uG(zXeWjY%?xX7KM=h)6$IG|6QI1NH?i4?IH- zV^b6Sn3KuyR$;$MiPRn#e^E!z1=^)G^YgTRG7#*nGe`y}hV7nw*t>G8nNdkwmmnl3>L-qa4UFFxjJql4;yUrC)4^HsS4ahV_Fu!Wl4HGsa)gl zpq9#YnXEXK``q6L^64kJ^7-1@hS86#fK});y71LP!B&vM2ZTF_jwiDEC_w#wdyr~& zjiqZyt3>oCv^mKrB;kE^b3E8hZ=ODKot7!!C!eZOO-S@~Dq8q4O88G@)P&mQxBT1X zyV!pGF&?KHpSH2BC`NQd2=~7~F??>A&*#C4a*4NZ?7QCcQy`yP*=pkWnsii{`_5 zX%Q%Ek91njpg^TTA@=1CnVW@uRA>Lt*ooDcH6erCP~=hTjZG!H)pzOCd*|{B1hu#x zSBB-j<0T~pbHD4bsX~da_+gTB!%yI_^$km#uu_r?=PiX|{rV6a{=AZ9s&&t&^=3($ zpZWe`yI)#i?cu|TH_Tbn7TT#UbpE*4-g{ALnC{`M=QA$=P2S4R-=sN5;`Pecx+e7h z5}E;z5iABq6tcWD4jUO`)#8pQkF-N{lk70dO32L-eC_79du)t*`$hw|JZ6Q-jxcR9 zf0a7heb>yPHw)qD6F>vGmDa&5gqw1`xNL4`Sk=N~i{c)ufpg&P+#G{JCPysmp?K<1 zg?F8&QMvfB_aFIfc35(J(Du5ypF|G56b~<mR%9c`2teA_YN-r)1D)WQe6;jzl?04%)qYffO5Gkp|PQ!sGy$k75%9}!c`U6 zS$S54E`Cv>H^*hV9ufIYv$tB(;i$^(DQh$479Kyj7aOn0m2CyP4S?Otwse+sGnq2elw|rpS(d?_JgH$ z20251h7Xa5QNw(W$ePU|Yy9@RwWIh3DFO_J39lhoDNH+pRTjlD9Ca)01#vPz&giuJ zOhO9cvLGB;;IQg0e0rx_geRFd_04(y6=2h67qwA-@e}?n)mZLrHb!DhB9vcW1FHq? zJRa0Z^J-k1E`X@X)`-*oLRJjL{P~zA17FllHrS>Bjaj0w7U>?!I;x8x5`KPnSmxgw z0dxv`3Uh-umpm`bf=-1*?x;k{1MhfM^T62bI!NuYE$9LZ(8arJ^Yy{9lhhWA_^^O) zGJ|NlMt)cgxWQ3&{^8XNQ-!P@0WSLijm`QfQ%hDEtaMaGCug)5KR-}hCz1Iv&i=J} zn`sy0EPWO4xxN~%6S1G29X%TLTCz77J^SDy4 z7oK3HW8^E50140I?4d6@#3T;8h4VQz=6Y{u6_v?Dw5EYKR2G<1-nEDHWd7jIZEI0! zfr=Kr9GUF>_ym627Efz zh_%7>^R*{6Ij9MJ)-42PqEIFO1IPe+VcmB(mwuIH*Ad)*W~uT?=4aO7vaS$*@B|Jh z`O}aX5o)PzJaGmv1_Dx7UETSy9n?OCTCyiKxK{qt|j|NIAcDG561O z$NX2T^8Fi{R1Ky?BYgTagaT_ey-CJ{c6lpo=NYS&u$-$J2d|Mt838& zp1QWkqUSwoY-|gc$8}s;m{Sf3X|+3XBG8gV$$Z|p_FueWuc4LvSN)<3kf1XCyvB6w zpZckZSF6PTK{}Bz+or$k{lC(f2zlVx0SI^O6`*bU&+Y=m6*nV5&`WCK{`#My2{7W< zY2p({KkXQE0j}&1yvn6*$=cyx-u>(bj0Sc#ltEh%Q~9Fkde)A|i~pp>JmErc_n(=~ Sp|^nNkBXv(LbaTE@c#jenT=Th literal 0 HcmV?d00001 diff --git a/admin/index.php b/admin/index.php new file mode 100644 index 0000000..1ae2770 --- /dev/null +++ b/admin/index.php @@ -0,0 +1,121 @@ + 0){ + for ($i=0;$i<$abslen;$i++){ + $vars["abspath"] .= "../"; + } + + } + $vars["contenttype"] = "text/html"; + if (substr($vars["page"],-3) == "css"){ + $vars["contenttype"] = "text/css"; + } elseif (substr($vars["page"],-2) == "js"){ + $vars["contenttype"] = "text/javascript"; + } + + $vars["sid"] = ""; + if (isset($_COOKIE[$cfg["cookie"]])){ + $vars["sid"] = $_COOKIE[$cfg["cookie"]]; + } + $db = new database($cfg["db"]); + $sess = new session($db); + $vars["session"] = array(); + if ($vars["sid"] != ""){ + $vars["session"] = $sess->getSession($vars["sid"]); + } + if (count($postdata) > 0){ + if (isset($postdata["btnlogin"])){ + $vars["session"] = $sess->checkLogin($postdata["login"],$postdata["password"]); + //setcookie( $name, $value, $expire, $path, $domain, $secure, $httponly ) + setcookie($cfg["cookie"], $vars["session"]["id_session"], null, "/", null, false, true ); + } + } + if(count($vars["session"]) == 0) { + $vars["skeleton"] = 'login.html'; + if (($vars["page"] != 'login/forgotpassword.html') && ($vars["page"] != 'login/message.html')){ + $vars["page"] = 'login/login.html'; + } + } + + if (($vars["skeleton"] != 'login.html') && (!file_exists($cfg["templatepath"].'/pages/'.$vars["page"].'.mustache'))){ + if (substr($vars["page"],0,5) == "login"){ + $vars["page"] = "home.html"; + } else { + $vars["origpage"] =$vars["page"]; + $vars["page"] = 'error.html'; + } + + // $vars["skeleton"] = 'login.html'; + // $vars["page"] = 'login/login.html'; + } + if (file_exists($cfg["templatepath"].'/pages/'.$vars["page"].'.json')){ + + $tmpdata = file_get_contents($cfg["templatepath"].'/pages/'.$vars["page"].'.json'); + try { + $vars["data"] = json_decode($tmpdata,true); + foreach ($vars["data"] as $key => $value) { + if ($value["sql"]){ + if ($value["sqltype"] == "query"){ + $vars["data"][$key] = $db->query($value["sql"]); + } elseif ($value["sqltype"] == "queryarray"){ + $vars["data"][$key] = $db->queryarray($value["sql"]); + } + } + } + } catch(JsonException $je){ + error_log("JSON ERROR: ".$je->getMessage()); + } + + } + header('Content-Type: '.$vars["contenttype"]); + $vars["page"] = 'pages/'.$vars["page"]; + $m = new Mustache_Engine(array( + 'loader' => new Mustache_Loader_FilesystemLoader($cfg["templatepath"]), + 'partials_loader' => new Mustache_Loader_FilesystemLoader($cfg["templatepath"].'/blocks'), + 'escape' => function($value) { + return $value; + }, + 'entity_flags' => ENT_HTML5 + )); + if ($vars["contenttype"] == "text/html"){ + $vars["pagedata"] = $m->render($vars["page"],$vars); + $mainsite = $m->render($vars['skeleton'],$vars); + echo $mainsite; + $vars["pagedata"]= ""; + } else { + $mainsite = $m->render($vars["page"],$vars); + echo $mainsite; + } + + echo "
".print_r($vars)."
"; +?> \ No newline at end of file diff --git a/admin/js/app.js b/admin/js/app.js new file mode 100644 index 0000000..0677538 --- /dev/null +++ b/admin/js/app.js @@ -0,0 +1,78 @@ +let myapp = { + loadpage: function(modulepage, modulename) { + location.href=modulepage; + }, + togglemenu: function (idmenu){ + var mnu = document.getElementById(idmenu); + if (mnu.style.display == 'none'){ + mnu.style.display = 'block'; + } else { + mnu.style.display = 'none'; + } + }, + logout: function() { + postData(location.href, { "logout": "1" }).then (data => { location.href = 'login.html';}); + }, + reloadpage() { }, + changedataset: function(){}, + getCurrentSchemata: function(){ + return schemata; + }, + changedataset: function(){ + let csel = document.getElementById("current_schemata").value; + schemata = csel; + postData("db.cgi",{"fn":"setsessiondata","params":{"schemata":csel}}).then(data => { + document.getElementById("current_schemata").dataset.selected = csel; + }); + }, + setschemata(data){ + }, + reload_page: function() { + location.href = location.href; + }, + viewpanel: function(pnlname){ + let panels = document.getElementsByClassName("panel"); + let toolbars = document.getElementsByClassName("paneltoolbar"); + currentview = pnlname; + for (let p=0;p { + if (aftercallback){ + aftercallback(data.result); + form.formsaved({}); + } else { + form.formsaved(data.result); + } + }); + return false; +}, +saveformdata: function(flds,aftercallback,clientschema){ + flds["fn"] ="saveform"; + flds["schemata"]=clientschema; + if (clientschema == null){ + flds["schemata"]=schemata; + } + delete flds["null"]; + postData("db.cgi",flds).then(data => { + if (aftercallback){ + aftercallback(data.result); + form.formsaved({}); + } else { + form.formsaved(data.result); + } + }); + return false; +}, +formsaved: function(data){ + var sb = document.getElementById("snackbar"); + sb.className="show green"; + sb.innerHTML = 'Les données ont été sauvegardées!'; + setTimeout(function(){ sb.className = sb.className.replace("show green", ""); }, 3000); + return false; +}, +getformcontent: function(frmid,dataflds){ + var frm = document.getElementById("frm_" + frmid); + var flds = {}; + // if (dataflds){ + // flds = dataflds; + // } + for (var i = 0; i < frm.elements.length; i++) { + var field = frm.elements[i]; + if ((field.getAttribute("name") != 'null') && (field.tagName == "INPUT" || field.tagName == "SELECT" || field.tagName == "TEXTAREA")){ + if (field.classList.contains("tagedit")){ + var fvalue=field.value.trim(); + var ndata = null; + if (fvalue != ""){ + ndata = fvalue.split(","); + } + flds[field.getAttribute("name")] = ndata; + }else if (field.tagName == "TEXTAREA" ){ + if (field.classList.contains("richeditarea")){ + flds[field.getAttribute("name")] = tinymce.get(field.id).getContent(); + } else { + flds[field.getAttribute("name")] = field.innerHTML; + } + }else if (field.type == "checkbox" ){ + if (field.checked){ + flds[field.getAttribute("name")] = "1"; + } else { + flds[field.getAttribute("name")] = ""; + } + } + else if (field.tagName == "SELECT" && field.multiple == true){ + flds[field.getAttribute("name")] = dataflds[field.getAttribute("id")].selected(); + } + else if (field.tagName == "SELECT"){ + flds[field.getAttribute("name")] = dataflds[field.getAttribute("id")].selected(); + } + else { + flds[field.getAttribute("name")] = field.value; + } + } + } + return flds; +}, +cleanform: function(frmname){ + var frm = document.getElementById("frm_" + frmname); + for (var f in frm){ + if (frm[f] && frm[f].id){ + if (frm[f].tagName == 'INPUT'){ + if (frm[f].type == "checkbox"){ + frm[f].checked = false; + } else if (frm[f].classList.contains("datefield")){ + if (frm[f]._flatpickr){ frm[f]._flatpickr.clear(); } + } + // else if (frm[f].classList.contains("choices__input")){ + // if (choice[frmname][frm[f].id]){ + // choice[frmname][frm[f].id].removeActiveItems(); + // } + // } + else { + frm[f].value = ""; + } + } + if (frm[f].tagName == 'SELECT'){ + if (frm[f].multiple == true){ + if (frm[f].classList.contains("choices__input")){ + choice[frmname][frm[f].id].removeActiveItems(); + } + } else { + frm[f].value = ""; + } + + } + if (frm[f].tagName == 'TEXTAREA'){ + if (frm[f].classList.contains("richeditarea")){ + tinymce.get(frm[f].id).setContent(""); + } else { + frm[f].innerHTML = ""; + } + } + } + } + return false; +}, +cleanform2: function(frmname,choices){ + var frm = document.getElementById("frm_" + frmname); + for (var f in frm){ + if (frm[f] && frm[f].id){ + if (frm[f].tagName == 'INPUT'){ + if (frm[f].type == "checkbox"){ + frm[f].checked = false; + } else if (frm[f].classList.contains("datefield")){ + if (frm[f]._flatpickr){ frm[f]._flatpickr.clear(); } + } + // else if (frm[f].classList.contains("choices__input")){ + // if (choices[frm[f].id]){ + // choices[frm[f].id].removeActiveItems(); + // } + // } + else { + frm[f].value = ""; + } + } + if (frm[f].tagName == 'SELECT'){ + if (frm[f].multiple == true){ + if (frm[f].classList.contains("choices__input")){ + choices[frm[f].id].removeActiveItems(); + } + } else { + frm[f].value = ""; + } + + } + if (frm[f].tagName == 'TEXTAREA'){ + if (frm[f].classList.contains("richeditarea")){ + tinymce.get(frm[f].id).setContent(""); + } else { + frm[f].innerHTML = ""; + } + } + } + } + return false; +}, +fillformbydataclass2: function(dataclass,choices,data,onblur){ + var frm = document.getElementsByClassName('data_'+ dataclass); + //console.log("frmdata",frm); + if (data){ + for (var f in frm){ + //console.log("field",frm[f].id); + if (frm[f].id){ + frm[f].dataset.id=data['id']; + } + if (data[frm[f].id]){ + + if (frm[f].tagName == 'INPUT'){ + if (frm[f].type == "checkbox"){ + if (data[frm[f].id] == "1"){ + frm[f].checked = true; + } else { + frm[f].checked = false; + } + } + else if (frm[f].classList.contains("datefield")){ + frm[f]._flatpickr.setDate(data[frm[f].id]); + } + else if (frm[f].classList.contains("timefield")){ + frm[f].value = timecalc.StringToTime(data[frm[f].id]); + } + else { + frm[f].value=data[frm[f].id]; + } + } + if (frm[f].tagName == 'SELECT'){ + if (frm[f].multiple == true){ + + choices[frm[f].id].set(JSON.parse(data[frm[f].id])); + } else { + frm[f].value=data[frm[f].id]; + } + } + } + } + } +}, +fillselectlist: function(obj,data,vidcol,vvalcol){ + var sellist = []; + let csel = obj.value; + if (data){ + for (var i in data){ + sellist.push({value:data[i][vidcol],text:data[i][vvalcol]}); + } + } + obj.setData(sellist); + if (obj.select.element.dataset.selected && obj.select.element.dataset.selected != ""){ + obj.set(obj.select.element.dataset.selected); + } + return false; +}, +savefield: function(obj,callback){ + fdata = obj.dataset; + fdata["save"] = "field"; + fdata["schemata"] = schemata; + if (obj.tagName == 'INPUT' || obj.tagName == 'SELECT' || obj.tagName == 'TEXTAREA'){ + if (obj.type == 'checkbox' || obj.type == 'radio'){ + if (obj.checked == true){ + fdata["value"] = 1; + } else { + fdata["value"] = null; + } + }else { + fdata["value"] = obj.value; + } + } + postData("db.cgi",fdata).then(data => { if (callback){callback(data);}}); + return false; +}, +saveschemafield: function(obj,schema){ + fdata = obj.dataset; + fdata["save"] = "field"; + fdata["schemata"] = schema; + if (obj.tagName == 'INPUT' || obj.tagName == 'SELECT' || obj.tagName == 'TEXTAREA'){ + if (obj.type == 'checkbox' || obj.type == 'radio'){ + if (obj.checked == true){ + fdata["value"] = 1; + } else { + fdata["value"] = null; + } + }else { + fdata["value"] = obj.value; + } + } + postData("db.cgi",fdata).then(data => { }); + return false; +}, +cleanfield: function(objid){ + document.getElementById(objid).value=''; +} + + +} \ No newline at end of file diff --git a/admin/js/modules/galleries.js b/admin/js/modules/galleries.js new file mode 100644 index 0000000..5869ce1 --- /dev/null +++ b/admin/js/modules/galleries.js @@ -0,0 +1,20 @@ +let galleries = { + tbl: null, + init: function(){ + console.log("Init Galleries!"); + galleries.tbl= new Tabulator("#tbl_galleries",{ + height: "calc(100vh - 60px)", + layout: "fitColumns", + responsiveLayout:true, + selectable: 1, + rowContext:function(e, row){ e.preventDefault(); }, + columns: [ + {title: "Gallerie", field: "name"}, + ] + }); + galleries.gettbldata(); + }, + gettbldata: function(){ + // postData() + } +} \ No newline at end of file diff --git a/website/js/vendor/flatpickr/utils/polyfills.d.ts b/admin/js/modules/home.js similarity index 100% rename from website/js/vendor/flatpickr/utils/polyfills.d.ts rename to admin/js/modules/home.js diff --git a/admin/js/modules/rendezvous.js b/admin/js/modules/rendezvous.js new file mode 100644 index 0000000..e69de29 diff --git a/admin/js/modules/shop.js b/admin/js/modules/shop.js new file mode 100644 index 0000000..e69de29 diff --git a/admin/js/modules/users.js b/admin/js/modules/users.js new file mode 100644 index 0000000..e69de29 diff --git a/admin/js/modules/websites.js b/admin/js/modules/websites.js new file mode 100644 index 0000000..e69de29 diff --git a/admin/js/report.js b/admin/js/report.js new file mode 100644 index 0000000..97733df --- /dev/null +++ b/admin/js/report.js @@ -0,0 +1,13 @@ +var report ={ + generate: function(repname,filename,data){ + showdataloaddlg("Création PDF encours","Attendez s.v.p.");//closedataloaddlg(); + postData("report.cgi",{"generate":repname,"file": filename + ".pdf","data":data}).then(data => {closedataloaddlg();;report.openreport(data.result)}).catch(e => {closedataloaddlg();}); + return false; + }, + openreport(data){ + + if (data && data.file){ + window.open(api + "report.cgi?open=" + encodeURIComponent(data.file)); + } + } +} \ No newline at end of file diff --git a/admin/js/request.js b/admin/js/request.js new file mode 100644 index 0000000..bf0a98f --- /dev/null +++ b/admin/js/request.js @@ -0,0 +1,56 @@ +var api = location.origin + location.pathname.substring(0,location.pathname.lastIndexOf('/')) + '/'; +console.log(api); +// var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var t="";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}return t},decode:function(e){var t="";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(f>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r)}if(a!=64){t=t+String.fromCharCode(i)}}t=Base64._utf8_decode(t);return t},_utf8_encode:function(e){e=e.replace(/\r\n/g,"\n");var t="";for(var n=0;n127&&r<2048){t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}return t},_utf8_decode:function(e){var t="";var n=0;var r=c1=c2=0;while(n191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}return t}} + +async function postData(url = '', data = {}) { + const response = await fetch(api + url, { + method: 'POST', + mode: 'same-origin', + cache: 'no-cache', + credentials: 'same-origin', + headers: { + 'Content-Type': 'application/json' + + }, + redirect: 'follow', + referrerPolicy: 'strict-origin', + body: JSON.stringify(data) + }); + + return response.json(); +} + +// var report ={ +// generate: function(repname,filename,data){ +// showdataloaddlg("Création PDF encours","Attendez s.v.p."); +// postData("report.cgi",{"generate":repname,"file": filename + ".pdf","data":data}).then (data => {closedataloaddlg();report.openreport(data);}); +// return false; +// }, +// openreport(data){ +// if (data && data.file){ +// window.open(api + "report.cgi?open=" + encodeURIComponent(data.file)); +// } +// } +// } + +// async function syncData(url,username,password, data = {}) { +// //var decodedString = Base64.decode(encodedString); +// let hh = {}; +// hh['Content-Type'] = 'application/json'; +// if ((username != null) && (username != '')){ +// hh['Authorization'] = Base64.encode(username + ":" + password); +// } +// const response = await fetch(url, { +// method: 'POST', +// mode: 'cors', +// cache: 'no-cache', +// credentials: 'omit', +// headers: hh, +// redirect: 'follow', +// referrerPolicy: 'strict-origin', +// body: JSON.stringify(data) +// }); + +// return response.json(); +// } + diff --git a/admin/js/timecalc.js b/admin/js/timecalc.js new file mode 100644 index 0000000..72425a2 --- /dev/null +++ b/admin/js/timecalc.js @@ -0,0 +1,128 @@ +let timecalc = { + MinutesToTime:function (minutes) { + minutes = parseInt(minutes); + if ((minutes == null) || (minutes == 0)){ return "00:00";}; + let hours = parseInt(minutes/60); + + let restminutes = minutes-(hours*60); + // console.log(hours + " : " + restminutes); + return timecalc.lpad(hours,2,'0') + ":"+ timecalc.lpad(restminutes,2,'0'); + }, + TimeToMinutes:function (strtime){ + let hours = parseInt(strtime.substring(0,2)) * 60; + let minutes = parseInt(strtime.substring(3,5)); + return hours+minutes; + }, + lpad: function(str, length,padString) { + let xstr = str.toString(); + while (xstr.length < length){xstr = padString + xstr}; + return xstr; + }, + mondayBefore: function(sdate){ + if (sdate == null){ + sdate=new Date(); + } + let day = sdate.getDay(); + let prevMonday = new Date(); + if(sdate.getDay() == 0){ + prevMonday = new Date().setDate(sdate.getDate() - 0); + } + else{ + prevMonday = new Date().setDate(sdate.getDate() - day); + } + return new Date(prevMonday); + }, + sundayAfter: function(sdate){ + let nextSunday = new Date(); + }, + StringToTime: function(strin){ + strin = strin.toString().substring(0,5); + strin = strin.replace(/\D/g,''); + //console.log("StT:",strin); + if (strin.length == 0){ return "";} + if (strin.length <= 2){ + if (strin > "23") {return ""} else { + //console.log("xtime",timecalc.lpad(strin,2,'0')+":00"); + return timecalc.lpad(strin,2,'0')+":00"; + } + } else if (strin.length == 3){ + let hours = strin.substring(0,1); + let minutes = strin.substring(1,3); + if (minutes > "59"){ return "";} + return timecalc.lpad(hours,2,'0')+ ":"+ timecalc.lpad(minutes,2,'0'); + } else if (strin.length == 4){ + let hours = strin.substring(0,2); + let minutes = strin.substring(2,4); + if ((hours > "23") || (minutes > "59")){return "";} + return timecalc.lpad(hours,2,'0')+ ":"+ timecalc.lpad(minutes,2,'0'); + } + return ""; + }, + StringToInterval: function(strin){ + let minus = ""; + if (strin.startsWith('-')){ + minus = '-'; + } + if (strin.indexOf(":") > 0){ + let spl = strin.split(":"); + hours = spl[0].replace(/\D/g,''); + if (hours == ""){ + hours = "0"; + } + minutes = spl[1].replace(/\D/g,''); + if (minutes > "59"){ + minutes = "0"; + } + return minus + hours + ":" + timecalc.lpad(minutes,2,'0'); + } + if (strin == ""){ return "";} + strin = strin.replace(/\D/g,''); + return minus + strin + ":00"; + + }, + MinutesToInterval: function(minutes){ + if ((minutes == null) || (minutes == "")){ return "0:00";} + let prep =""; + if (minutes < 0){ + prep = "-"; + minutes = minutes * -1; + } + let hours = parseInt(minutes/60); + let restminutes = minutes-(hours*60); + restminutes = Math.round(restminutes); + return prep+hours+ ":"+ timecalc.lpad(restminutes,2,'0'); + }, + IntervalToMinutes: function(strin){ + if (strin == "" || strin == null){ + return 0; + } + let mult = 1; + if (strin.startsWith("-")){ + mult = -1; + strin = strin.replace(/-/g,''); + } + let spl = strin.split(":"); + let hours = parseInt(spl[0]) * 60; + let minutes = parseInt(spl[1]); + return (hours+minutes) * mult; + }, + validateTime(obj){ + obj.value = timecalc.StringToTime(obj.value); + return false; + }, + validateInterval(obj){ + obj.value = timecalc.StringToInterval(obj.value); + return false; + }, + copyInterval(obj,idobjout,factor){ + if (factor){ + let mval = timecalc.IntervalToMinutes(obj.value) * factor; + document.getElementById(idobjout).value = timecalc.MinutesToInterval(mval); + }else { + document.getElementById(idobjout).value=obj.value; + } + if (document.getElementById(idobjout).value == '0:00'){ + document.getElementById(idobjout).value = ''; + } + } +} diff --git a/website/js/vendor/flatpickr/flatpickr.css b/admin/js/vendors/flatpickr/flatpickr.css similarity index 100% rename from website/js/vendor/flatpickr/flatpickr.css rename to admin/js/vendors/flatpickr/flatpickr.css diff --git a/website/js/vendor/flatpickr/flatpickr.js b/admin/js/vendors/flatpickr/flatpickr.js similarity index 99% rename from website/js/vendor/flatpickr/flatpickr.js rename to admin/js/vendors/flatpickr/flatpickr.js index 59bb267..a94e6ac 100644 --- a/website/js/vendor/flatpickr/flatpickr.js +++ b/admin/js/vendors/flatpickr/flatpickr.js @@ -5,38 +5,38 @@ (global = global || self, global.flatpickr = factory()); }(this, (function () { 'use strict'; - /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - ***************************************************************************** */ - - var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); - }; - - function __spreadArrays() { - for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; - for (var r = Array(s), k = 0, i = 0; i < il; i++) - for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) - r[k] = a[j]; - return r; + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** */ + + var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + + function __spreadArrays() { + for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; + for (var r = Array(s), k = 0, i = 0; i < il; i++) + for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) + r[k] = a[j]; + return r; } var HOOKS = [ diff --git a/website/js/vendor/flatpickr/flatpickr.min.css b/admin/js/vendors/flatpickr/flatpickr.min.css similarity index 100% rename from website/js/vendor/flatpickr/flatpickr.min.css rename to admin/js/vendors/flatpickr/flatpickr.min.css diff --git a/website/js/vendor/flatpickr/flatpickr.min.js b/admin/js/vendors/flatpickr/flatpickr.min.js similarity index 100% rename from website/js/vendor/flatpickr/flatpickr.min.js rename to admin/js/vendors/flatpickr/flatpickr.min.js diff --git a/website/js/vendor/flatpickr/ie.css b/admin/js/vendors/flatpickr/ie.css similarity index 100% rename from website/js/vendor/flatpickr/ie.css rename to admin/js/vendors/flatpickr/ie.css diff --git a/website/js/vendor/flatpickr/index.d.ts b/admin/js/vendors/flatpickr/index.d.ts similarity index 100% rename from website/js/vendor/flatpickr/index.d.ts rename to admin/js/vendors/flatpickr/index.d.ts diff --git a/website/js/vendor/flatpickr/l10n/de.d.ts b/admin/js/vendors/flatpickr/l10n/de.d.ts similarity index 100% rename from website/js/vendor/flatpickr/l10n/de.d.ts rename to admin/js/vendors/flatpickr/l10n/de.d.ts diff --git a/website/js/vendor/flatpickr/l10n/de.js b/admin/js/vendors/flatpickr/l10n/de.js similarity index 100% rename from website/js/vendor/flatpickr/l10n/de.js rename to admin/js/vendors/flatpickr/l10n/de.js diff --git a/website/js/vendor/flatpickr/l10n/default.d.ts b/admin/js/vendors/flatpickr/l10n/default.d.ts similarity index 100% rename from website/js/vendor/flatpickr/l10n/default.d.ts rename to admin/js/vendors/flatpickr/l10n/default.d.ts diff --git a/website/js/vendor/flatpickr/l10n/default.js b/admin/js/vendors/flatpickr/l10n/default.js similarity index 100% rename from website/js/vendor/flatpickr/l10n/default.js rename to admin/js/vendors/flatpickr/l10n/default.js diff --git a/website/js/vendor/flatpickr/l10n/fr.d.ts b/admin/js/vendors/flatpickr/l10n/fr.d.ts similarity index 100% rename from website/js/vendor/flatpickr/l10n/fr.d.ts rename to admin/js/vendors/flatpickr/l10n/fr.d.ts diff --git a/website/js/vendor/flatpickr/l10n/fr.js b/admin/js/vendors/flatpickr/l10n/fr.js similarity index 100% rename from website/js/vendor/flatpickr/l10n/fr.js rename to admin/js/vendors/flatpickr/l10n/fr.js diff --git a/website/js/vendor/flatpickr/l10n/index.d.ts b/admin/js/vendors/flatpickr/l10n/index.d.ts similarity index 100% rename from website/js/vendor/flatpickr/l10n/index.d.ts rename to admin/js/vendors/flatpickr/l10n/index.d.ts diff --git a/website/js/vendor/flatpickr/l10n/index.js b/admin/js/vendors/flatpickr/l10n/index.js similarity index 100% rename from website/js/vendor/flatpickr/l10n/index.js rename to admin/js/vendors/flatpickr/l10n/index.js diff --git a/website/js/vendor/flatpickr/plugins/confirmDate/confirmDate.css b/admin/js/vendors/flatpickr/plugins/confirmDate/confirmDate.css similarity index 100% rename from website/js/vendor/flatpickr/plugins/confirmDate/confirmDate.css rename to admin/js/vendors/flatpickr/plugins/confirmDate/confirmDate.css diff --git a/website/js/vendor/flatpickr/plugins/confirmDate/confirmDate.d.ts b/admin/js/vendors/flatpickr/plugins/confirmDate/confirmDate.d.ts similarity index 100% rename from website/js/vendor/flatpickr/plugins/confirmDate/confirmDate.d.ts rename to admin/js/vendors/flatpickr/plugins/confirmDate/confirmDate.d.ts diff --git a/website/js/vendor/flatpickr/plugins/confirmDate/confirmDate.js b/admin/js/vendors/flatpickr/plugins/confirmDate/confirmDate.js similarity index 99% rename from website/js/vendor/flatpickr/plugins/confirmDate/confirmDate.js rename to admin/js/vendors/flatpickr/plugins/confirmDate/confirmDate.js index 9f8379e..8c55a4e 100644 --- a/website/js/vendor/flatpickr/plugins/confirmDate/confirmDate.js +++ b/admin/js/vendors/flatpickr/plugins/confirmDate/confirmDate.js @@ -4,30 +4,30 @@ (global = global || self, global.confirmDatePlugin = factory()); }(this, (function () { 'use strict'; - /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - ***************************************************************************** */ - - var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** */ + + var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); }; function getEventTarget(event) { diff --git a/website/js/vendor/flatpickr/plugins/labelPlugin/labelPlugin.d.ts b/admin/js/vendors/flatpickr/plugins/labelPlugin/labelPlugin.d.ts similarity index 100% rename from website/js/vendor/flatpickr/plugins/labelPlugin/labelPlugin.d.ts rename to admin/js/vendors/flatpickr/plugins/labelPlugin/labelPlugin.d.ts diff --git a/website/js/vendor/flatpickr/plugins/labelPlugin/labelPlugin.js b/admin/js/vendors/flatpickr/plugins/labelPlugin/labelPlugin.js similarity index 100% rename from website/js/vendor/flatpickr/plugins/labelPlugin/labelPlugin.js rename to admin/js/vendors/flatpickr/plugins/labelPlugin/labelPlugin.js diff --git a/website/js/vendor/flatpickr/plugins/minMaxTimePlugin.d.ts b/admin/js/vendors/flatpickr/plugins/minMaxTimePlugin.d.ts similarity index 100% rename from website/js/vendor/flatpickr/plugins/minMaxTimePlugin.d.ts rename to admin/js/vendors/flatpickr/plugins/minMaxTimePlugin.d.ts diff --git a/website/js/vendor/flatpickr/plugins/minMaxTimePlugin.js b/admin/js/vendors/flatpickr/plugins/minMaxTimePlugin.js similarity index 100% rename from website/js/vendor/flatpickr/plugins/minMaxTimePlugin.js rename to admin/js/vendors/flatpickr/plugins/minMaxTimePlugin.js diff --git a/website/js/vendor/flatpickr/plugins/momentPlugin.d.ts b/admin/js/vendors/flatpickr/plugins/momentPlugin.d.ts similarity index 100% rename from website/js/vendor/flatpickr/plugins/momentPlugin.d.ts rename to admin/js/vendors/flatpickr/plugins/momentPlugin.d.ts diff --git a/website/js/vendor/flatpickr/plugins/momentPlugin.js b/admin/js/vendors/flatpickr/plugins/momentPlugin.js similarity index 100% rename from website/js/vendor/flatpickr/plugins/momentPlugin.js rename to admin/js/vendors/flatpickr/plugins/momentPlugin.js diff --git a/website/js/vendor/flatpickr/plugins/monthSelect/index.d.ts b/admin/js/vendors/flatpickr/plugins/monthSelect/index.d.ts similarity index 100% rename from website/js/vendor/flatpickr/plugins/monthSelect/index.d.ts rename to admin/js/vendors/flatpickr/plugins/monthSelect/index.d.ts diff --git a/website/js/vendor/flatpickr/plugins/monthSelect/index.js b/admin/js/vendors/flatpickr/plugins/monthSelect/index.js similarity index 99% rename from website/js/vendor/flatpickr/plugins/monthSelect/index.js rename to admin/js/vendors/flatpickr/plugins/monthSelect/index.js index 3e140a4..87f7629 100644 --- a/website/js/vendor/flatpickr/plugins/monthSelect/index.js +++ b/admin/js/vendors/flatpickr/plugins/monthSelect/index.js @@ -4,30 +4,30 @@ (global = global || self, global.monthSelectPlugin = factory()); }(this, (function () { 'use strict'; - /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - ***************************************************************************** */ - - var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** */ + + var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); }; var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? "shorthand" : "longhand"][monthNumber]; }; diff --git a/website/js/vendor/flatpickr/plugins/monthSelect/style.css b/admin/js/vendors/flatpickr/plugins/monthSelect/style.css similarity index 100% rename from website/js/vendor/flatpickr/plugins/monthSelect/style.css rename to admin/js/vendors/flatpickr/plugins/monthSelect/style.css diff --git a/website/js/vendor/flatpickr/plugins/monthSelect/tests.spec.d.ts b/admin/js/vendors/flatpickr/plugins/monthSelect/tests.spec.d.ts similarity index 100% rename from website/js/vendor/flatpickr/plugins/monthSelect/tests.spec.d.ts rename to admin/js/vendors/flatpickr/plugins/monthSelect/tests.spec.d.ts diff --git a/website/js/vendor/flatpickr/plugins/rangePlugin.d.ts b/admin/js/vendors/flatpickr/plugins/rangePlugin.d.ts similarity index 100% rename from website/js/vendor/flatpickr/plugins/rangePlugin.d.ts rename to admin/js/vendors/flatpickr/plugins/rangePlugin.d.ts diff --git a/website/js/vendor/flatpickr/plugins/rangePlugin.js b/admin/js/vendors/flatpickr/plugins/rangePlugin.js similarity index 100% rename from website/js/vendor/flatpickr/plugins/rangePlugin.js rename to admin/js/vendors/flatpickr/plugins/rangePlugin.js diff --git a/website/js/vendor/flatpickr/plugins/scrollPlugin.d.ts b/admin/js/vendors/flatpickr/plugins/scrollPlugin.d.ts similarity index 100% rename from website/js/vendor/flatpickr/plugins/scrollPlugin.d.ts rename to admin/js/vendors/flatpickr/plugins/scrollPlugin.d.ts diff --git a/website/js/vendor/flatpickr/plugins/scrollPlugin.js b/admin/js/vendors/flatpickr/plugins/scrollPlugin.js similarity index 100% rename from website/js/vendor/flatpickr/plugins/scrollPlugin.js rename to admin/js/vendors/flatpickr/plugins/scrollPlugin.js diff --git a/website/js/vendor/flatpickr/plugins/weekSelect/weekSelect.d.ts b/admin/js/vendors/flatpickr/plugins/weekSelect/weekSelect.d.ts similarity index 100% rename from website/js/vendor/flatpickr/plugins/weekSelect/weekSelect.d.ts rename to admin/js/vendors/flatpickr/plugins/weekSelect/weekSelect.d.ts diff --git a/website/js/vendor/flatpickr/plugins/weekSelect/weekSelect.js b/admin/js/vendors/flatpickr/plugins/weekSelect/weekSelect.js similarity index 100% rename from website/js/vendor/flatpickr/plugins/weekSelect/weekSelect.js rename to admin/js/vendors/flatpickr/plugins/weekSelect/weekSelect.js diff --git a/website/js/vendor/flatpickr/themes/airbnb.css b/admin/js/vendors/flatpickr/themes/airbnb.css similarity index 100% rename from website/js/vendor/flatpickr/themes/airbnb.css rename to admin/js/vendors/flatpickr/themes/airbnb.css diff --git a/website/js/vendor/flatpickr/types/globals.d.ts b/admin/js/vendors/flatpickr/types/globals.d.ts similarity index 100% rename from website/js/vendor/flatpickr/types/globals.d.ts rename to admin/js/vendors/flatpickr/types/globals.d.ts diff --git a/website/js/vendor/flatpickr/types/instance.d.ts b/admin/js/vendors/flatpickr/types/instance.d.ts similarity index 100% rename from website/js/vendor/flatpickr/types/instance.d.ts rename to admin/js/vendors/flatpickr/types/instance.d.ts diff --git a/website/js/vendor/flatpickr/types/locale.d.ts b/admin/js/vendors/flatpickr/types/locale.d.ts similarity index 100% rename from website/js/vendor/flatpickr/types/locale.d.ts rename to admin/js/vendors/flatpickr/types/locale.d.ts diff --git a/website/js/vendor/flatpickr/types/options.d.ts b/admin/js/vendors/flatpickr/types/options.d.ts similarity index 100% rename from website/js/vendor/flatpickr/types/options.d.ts rename to admin/js/vendors/flatpickr/types/options.d.ts diff --git a/website/js/vendor/flatpickr/typings.d.ts b/admin/js/vendors/flatpickr/typings.d.ts similarity index 100% rename from website/js/vendor/flatpickr/typings.d.ts rename to admin/js/vendors/flatpickr/typings.d.ts diff --git a/website/js/vendor/flatpickr/utils/dates.d.ts b/admin/js/vendors/flatpickr/utils/dates.d.ts similarity index 100% rename from website/js/vendor/flatpickr/utils/dates.d.ts rename to admin/js/vendors/flatpickr/utils/dates.d.ts diff --git a/website/js/vendor/flatpickr/utils/dom.d.ts b/admin/js/vendors/flatpickr/utils/dom.d.ts similarity index 100% rename from website/js/vendor/flatpickr/utils/dom.d.ts rename to admin/js/vendors/flatpickr/utils/dom.d.ts diff --git a/website/js/vendor/flatpickr/utils/formatting.d.ts b/admin/js/vendors/flatpickr/utils/formatting.d.ts similarity index 100% rename from website/js/vendor/flatpickr/utils/formatting.d.ts rename to admin/js/vendors/flatpickr/utils/formatting.d.ts diff --git a/website/js/vendor/flatpickr/utils/index.d.ts b/admin/js/vendors/flatpickr/utils/index.d.ts similarity index 100% rename from website/js/vendor/flatpickr/utils/index.d.ts rename to admin/js/vendors/flatpickr/utils/index.d.ts diff --git a/admin/js/vendors/flatpickr/utils/polyfills.d.ts b/admin/js/vendors/flatpickr/utils/polyfills.d.ts new file mode 100644 index 0000000..e69de29 diff --git a/admin/js/vendors/moment/locales.js b/admin/js/vendors/moment/locales.js new file mode 100644 index 0000000..caabe6a --- /dev/null +++ b/admin/js/vendors/moment/locales.js @@ -0,0 +1,12105 @@ +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + //! moment.js locale configuration + + moment.defineLocale('af', { + months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'), + weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split( + '_' + ), + weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'), + weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'), + meridiemParse: /vm|nm/i, + isPM: function (input) { + return /^nm$/i.test(input); + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 12) { + return isLower ? 'vm' : 'VM'; + } else { + return isLower ? 'nm' : 'NM'; + } + }, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Vandag om] LT', + nextDay: '[Môre om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[Gister om] LT', + lastWeek: '[Laas] dddd [om] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'oor %s', + past: '%s gelede', + s: "'n paar sekondes", + ss: '%d sekondes', + m: "'n minuut", + mm: '%d minute', + h: "'n uur", + hh: '%d ure', + d: "'n dag", + dd: '%d dae', + M: "'n maand", + MM: '%d maande', + y: "'n jaar", + yy: '%d jaar', + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal: function (number) { + return ( + number + + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de') + ); // Thanks to Joris Röling : https://github.com/jjupiter + }, + week: { + dow: 1, // Maandag is die eerste dag van die week. + doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar. + }, + }); + + //! moment.js locale configuration + + var pluralForm = function (n) { + return n === 0 + ? 0 + : n === 1 + ? 1 + : n === 2 + ? 2 + : n % 100 >= 3 && n % 100 <= 10 + ? 3 + : n % 100 >= 11 + ? 4 + : 5; + }, + plurals = { + s: [ + 'أقل من ثانية', + 'ثانية واحدة', + ['ثانيتان', 'ثانيتين'], + '%d ثوان', + '%d ثانية', + '%d ثانية', + ], + m: [ + 'أقل من دقيقة', + 'دقيقة واحدة', + ['دقيقتان', 'دقيقتين'], + '%d دقائق', + '%d دقيقة', + '%d دقيقة', + ], + h: [ + 'أقل من ساعة', + 'ساعة واحدة', + ['ساعتان', 'ساعتين'], + '%d ساعات', + '%d ساعة', + '%d ساعة', + ], + d: [ + 'أقل من يوم', + 'يوم واحد', + ['يومان', 'يومين'], + '%d أيام', + '%d يومًا', + '%d يوم', + ], + M: [ + 'أقل من شهر', + 'شهر واحد', + ['شهران', 'شهرين'], + '%d أشهر', + '%d شهرا', + '%d شهر', + ], + y: [ + 'أقل من عام', + 'عام واحد', + ['عامان', 'عامين'], + '%d أعوام', + '%d عامًا', + '%d عام', + ], + }, + pluralize = function (u) { + return function (number, withoutSuffix, string, isFuture) { + var f = pluralForm(number), + str = plurals[u][pluralForm(number)]; + if (f === 2) { + str = str[withoutSuffix ? 0 : 1]; + } + return str.replace(/%d/i, number); + }; + }, + months = [ + 'جانفي', + 'فيفري', + 'مارس', + 'أفريل', + 'ماي', + 'جوان', + 'جويلية', + 'أوت', + 'سبتمبر', + 'أكتوبر', + 'نوفمبر', + 'ديسمبر', + ]; + + moment.defineLocale('ar-dz', { + months: months, + monthsShort: months, + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'D/\u200FM/\u200FYYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + meridiemParse: /ص|م/, + isPM: function (input) { + return 'م' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar: { + sameDay: '[اليوم عند الساعة] LT', + nextDay: '[غدًا عند الساعة] LT', + nextWeek: 'dddd [عند الساعة] LT', + lastDay: '[أمس عند الساعة] LT', + lastWeek: 'dddd [عند الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'بعد %s', + past: 'منذ %s', + s: pluralize('s'), + ss: pluralize('s'), + m: pluralize('m'), + mm: pluralize('m'), + h: pluralize('h'), + hh: pluralize('h'), + d: pluralize('d'), + dd: pluralize('d'), + M: pluralize('M'), + MM: pluralize('M'), + y: pluralize('y'), + yy: pluralize('y'), + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('ar-kw', { + months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split( + '_' + ), + monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split( + '_' + ), + weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + ss: '%d ثانية', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات', + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap = { + '1': '1', + '2': '2', + '3': '3', + '4': '4', + '5': '5', + '6': '6', + '7': '7', + '8': '8', + '9': '9', + '0': '0', + }, + pluralForm$1 = function (n) { + return n === 0 + ? 0 + : n === 1 + ? 1 + : n === 2 + ? 2 + : n % 100 >= 3 && n % 100 <= 10 + ? 3 + : n % 100 >= 11 + ? 4 + : 5; + }, + plurals$1 = { + s: [ + 'أقل من ثانية', + 'ثانية واحدة', + ['ثانيتان', 'ثانيتين'], + '%d ثوان', + '%d ثانية', + '%d ثانية', + ], + m: [ + 'أقل من دقيقة', + 'دقيقة واحدة', + ['دقيقتان', 'دقيقتين'], + '%d دقائق', + '%d دقيقة', + '%d دقيقة', + ], + h: [ + 'أقل من ساعة', + 'ساعة واحدة', + ['ساعتان', 'ساعتين'], + '%d ساعات', + '%d ساعة', + '%d ساعة', + ], + d: [ + 'أقل من يوم', + 'يوم واحد', + ['يومان', 'يومين'], + '%d أيام', + '%d يومًا', + '%d يوم', + ], + M: [ + 'أقل من شهر', + 'شهر واحد', + ['شهران', 'شهرين'], + '%d أشهر', + '%d شهرا', + '%d شهر', + ], + y: [ + 'أقل من عام', + 'عام واحد', + ['عامان', 'عامين'], + '%d أعوام', + '%d عامًا', + '%d عام', + ], + }, + pluralize$1 = function (u) { + return function (number, withoutSuffix, string, isFuture) { + var f = pluralForm$1(number), + str = plurals$1[u][pluralForm$1(number)]; + if (f === 2) { + str = str[withoutSuffix ? 0 : 1]; + } + return str.replace(/%d/i, number); + }; + }, + months$1 = [ + 'يناير', + 'فبراير', + 'مارس', + 'أبريل', + 'مايو', + 'يونيو', + 'يوليو', + 'أغسطس', + 'سبتمبر', + 'أكتوبر', + 'نوفمبر', + 'ديسمبر', + ]; + + moment.defineLocale('ar-ly', { + months: months$1, + monthsShort: months$1, + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'D/\u200FM/\u200FYYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + meridiemParse: /ص|م/, + isPM: function (input) { + return 'م' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar: { + sameDay: '[اليوم عند الساعة] LT', + nextDay: '[غدًا عند الساعة] LT', + nextWeek: 'dddd [عند الساعة] LT', + lastDay: '[أمس عند الساعة] LT', + lastWeek: 'dddd [عند الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'بعد %s', + past: 'منذ %s', + s: pluralize$1('s'), + ss: pluralize$1('s'), + m: pluralize$1('m'), + mm: pluralize$1('m'), + h: pluralize$1('h'), + hh: pluralize$1('h'), + d: pluralize$1('d'), + dd: pluralize$1('d'), + M: pluralize$1('M'), + MM: pluralize$1('M'), + y: pluralize$1('y'), + yy: pluralize$1('y'), + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string + .replace(/\d/g, function (match) { + return symbolMap[match]; + }) + .replace(/,/g, '،'); + }, + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('ar-ma', { + months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split( + '_' + ), + monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split( + '_' + ), + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + ss: '%d ثانية', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات', + }, + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$1 = { + '1': '١', + '2': '٢', + '3': '٣', + '4': '٤', + '5': '٥', + '6': '٦', + '7': '٧', + '8': '٨', + '9': '٩', + '0': '٠', + }, + numberMap = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0', + }; + + moment.defineLocale('ar-sa', { + months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split( + '_' + ), + monthsShort: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split( + '_' + ), + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + meridiemParse: /ص|م/, + isPM: function (input) { + return 'م' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar: { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + ss: '%d ثانية', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات', + }, + preparse: function (string) { + return string + .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { + return numberMap[match]; + }) + .replace(/،/g, ','); + }, + postformat: function (string) { + return string + .replace(/\d/g, function (match) { + return symbolMap$1[match]; + }) + .replace(/,/g, '،'); + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('ar-tn', { + months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split( + '_' + ), + monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split( + '_' + ), + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + ss: '%d ثانية', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$2 = { + '1': '١', + '2': '٢', + '3': '٣', + '4': '٤', + '5': '٥', + '6': '٦', + '7': '٧', + '8': '٨', + '9': '٩', + '0': '٠', + }, + numberMap$1 = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0', + }, + pluralForm$2 = function (n) { + return n === 0 + ? 0 + : n === 1 + ? 1 + : n === 2 + ? 2 + : n % 100 >= 3 && n % 100 <= 10 + ? 3 + : n % 100 >= 11 + ? 4 + : 5; + }, + plurals$2 = { + s: [ + 'أقل من ثانية', + 'ثانية واحدة', + ['ثانيتان', 'ثانيتين'], + '%d ثوان', + '%d ثانية', + '%d ثانية', + ], + m: [ + 'أقل من دقيقة', + 'دقيقة واحدة', + ['دقيقتان', 'دقيقتين'], + '%d دقائق', + '%d دقيقة', + '%d دقيقة', + ], + h: [ + 'أقل من ساعة', + 'ساعة واحدة', + ['ساعتان', 'ساعتين'], + '%d ساعات', + '%d ساعة', + '%d ساعة', + ], + d: [ + 'أقل من يوم', + 'يوم واحد', + ['يومان', 'يومين'], + '%d أيام', + '%d يومًا', + '%d يوم', + ], + M: [ + 'أقل من شهر', + 'شهر واحد', + ['شهران', 'شهرين'], + '%d أشهر', + '%d شهرا', + '%d شهر', + ], + y: [ + 'أقل من عام', + 'عام واحد', + ['عامان', 'عامين'], + '%d أعوام', + '%d عامًا', + '%d عام', + ], + }, + pluralize$2 = function (u) { + return function (number, withoutSuffix, string, isFuture) { + var f = pluralForm$2(number), + str = plurals$2[u][pluralForm$2(number)]; + if (f === 2) { + str = str[withoutSuffix ? 0 : 1]; + } + return str.replace(/%d/i, number); + }; + }, + months$2 = [ + 'يناير', + 'فبراير', + 'مارس', + 'أبريل', + 'مايو', + 'يونيو', + 'يوليو', + 'أغسطس', + 'سبتمبر', + 'أكتوبر', + 'نوفمبر', + 'ديسمبر', + ]; + + moment.defineLocale('ar', { + months: months$2, + monthsShort: months$2, + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'D/\u200FM/\u200FYYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + meridiemParse: /ص|م/, + isPM: function (input) { + return 'م' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar: { + sameDay: '[اليوم عند الساعة] LT', + nextDay: '[غدًا عند الساعة] LT', + nextWeek: 'dddd [عند الساعة] LT', + lastDay: '[أمس عند الساعة] LT', + lastWeek: 'dddd [عند الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'بعد %s', + past: 'منذ %s', + s: pluralize$2('s'), + ss: pluralize$2('s'), + m: pluralize$2('m'), + mm: pluralize$2('m'), + h: pluralize$2('h'), + hh: pluralize$2('h'), + d: pluralize$2('d'), + dd: pluralize$2('d'), + M: pluralize$2('M'), + MM: pluralize$2('M'), + y: pluralize$2('y'), + yy: pluralize$2('y'), + }, + preparse: function (string) { + return string + .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { + return numberMap$1[match]; + }) + .replace(/،/g, ','); + }, + postformat: function (string) { + return string + .replace(/\d/g, function (match) { + return symbolMap$2[match]; + }) + .replace(/,/g, '،'); + }, + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var suffixes = { + 1: '-inci', + 5: '-inci', + 8: '-inci', + 70: '-inci', + 80: '-inci', + 2: '-nci', + 7: '-nci', + 20: '-nci', + 50: '-nci', + 3: '-üncü', + 4: '-üncü', + 100: '-üncü', + 6: '-ncı', + 9: '-uncu', + 10: '-uncu', + 30: '-uncu', + 60: '-ıncı', + 90: '-ıncı', + }; + + moment.defineLocale('az', { + months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split( + '_' + ), + monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'), + weekdays: 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split( + '_' + ), + weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'), + weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[bugün saat] LT', + nextDay: '[sabah saat] LT', + nextWeek: '[gələn həftə] dddd [saat] LT', + lastDay: '[dünən] LT', + lastWeek: '[keçən həftə] dddd [saat] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s sonra', + past: '%s əvvəl', + s: 'bir neçə saniyə', + ss: '%d saniyə', + m: 'bir dəqiqə', + mm: '%d dəqiqə', + h: 'bir saat', + hh: '%d saat', + d: 'bir gün', + dd: '%d gün', + M: 'bir ay', + MM: '%d ay', + y: 'bir il', + yy: '%d il', + }, + meridiemParse: /gecə|səhər|gündüz|axşam/, + isPM: function (input) { + return /^(gündüz|axşam)$/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'gecə'; + } else if (hour < 12) { + return 'səhər'; + } else if (hour < 17) { + return 'gündüz'; + } else { + return 'axşam'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/, + ordinal: function (number) { + if (number === 0) { + // special case for zero + return number + '-ıncı'; + } + var a = number % 10, + b = (number % 100) - a, + c = number >= 100 ? 100 : null; + return number + (suffixes[a] || suffixes[b] || suffixes[c]); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function plural(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 + ? forms[0] + : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) + ? forms[1] + : forms[2]; + } + function relativeTimeWithPlural(number, withoutSuffix, key) { + var format = { + ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд', + mm: withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін', + hh: withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін', + dd: 'дзень_дні_дзён', + MM: 'месяц_месяцы_месяцаў', + yy: 'год_гады_гадоў', + }; + if (key === 'm') { + return withoutSuffix ? 'хвіліна' : 'хвіліну'; + } else if (key === 'h') { + return withoutSuffix ? 'гадзіна' : 'гадзіну'; + } else { + return number + ' ' + plural(format[key], +number); + } + } + + moment.defineLocale('be', { + months: { + format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split( + '_' + ), + standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split( + '_' + ), + }, + monthsShort: 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split( + '_' + ), + weekdays: { + format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split( + '_' + ), + standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split( + '_' + ), + isFormat: /\[ ?[Ууў] ?(?:мінулую|наступную)? ?\] ?dddd/, + }, + weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'), + weekdaysMin: 'нд_пн_ат_ср_чц_пт_сб'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY г.', + LLL: 'D MMMM YYYY г., HH:mm', + LLLL: 'dddd, D MMMM YYYY г., HH:mm', + }, + calendar: { + sameDay: '[Сёння ў] LT', + nextDay: '[Заўтра ў] LT', + lastDay: '[Учора ў] LT', + nextWeek: function () { + return '[У] dddd [ў] LT'; + }, + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 5: + case 6: + return '[У мінулую] dddd [ў] LT'; + case 1: + case 2: + case 4: + return '[У мінулы] dddd [ў] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'праз %s', + past: '%s таму', + s: 'некалькі секунд', + m: relativeTimeWithPlural, + mm: relativeTimeWithPlural, + h: relativeTimeWithPlural, + hh: relativeTimeWithPlural, + d: 'дзень', + dd: relativeTimeWithPlural, + M: 'месяц', + MM: relativeTimeWithPlural, + y: 'год', + yy: relativeTimeWithPlural, + }, + meridiemParse: /ночы|раніцы|дня|вечара/, + isPM: function (input) { + return /^(дня|вечара)$/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'ночы'; + } else if (hour < 12) { + return 'раніцы'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечара'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(і|ы|га)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + case 'w': + case 'W': + return (number % 10 === 2 || number % 10 === 3) && + number % 100 !== 12 && + number % 100 !== 13 + ? number + '-і' + : number + '-ы'; + case 'D': + return number + '-га'; + default: + return number; + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('bg', { + months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split( + '_' + ), + monthsShort: 'яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'), + weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split( + '_' + ), + weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'), + weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'D.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY H:mm', + LLLL: 'dddd, D MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[Днес в] LT', + nextDay: '[Утре в] LT', + nextWeek: 'dddd [в] LT', + lastDay: '[Вчера в] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 6: + return '[Миналата] dddd [в] LT'; + case 1: + case 2: + case 4: + case 5: + return '[Миналия] dddd [в] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'след %s', + past: 'преди %s', + s: 'няколко секунди', + ss: '%d секунди', + m: 'минута', + mm: '%d минути', + h: 'час', + hh: '%d часа', + d: 'ден', + dd: '%d дена', + M: 'месец', + MM: '%d месеца', + y: 'година', + yy: '%d години', + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/, + ordinal: function (number) { + var lastDigit = number % 10, + last2Digits = number % 100; + if (number === 0) { + return number + '-ев'; + } else if (last2Digits === 0) { + return number + '-ен'; + } else if (last2Digits > 10 && last2Digits < 20) { + return number + '-ти'; + } else if (lastDigit === 1) { + return number + '-ви'; + } else if (lastDigit === 2) { + return number + '-ри'; + } else if (lastDigit === 7 || lastDigit === 8) { + return number + '-ми'; + } else { + return number + '-ти'; + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('bm', { + months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split( + '_' + ), + monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'), + weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'), + weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'), + weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'MMMM [tile] D [san] YYYY', + LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm', + LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm', + }, + calendar: { + sameDay: '[Bi lɛrɛ] LT', + nextDay: '[Sini lɛrɛ] LT', + nextWeek: 'dddd [don lɛrɛ] LT', + lastDay: '[Kunu lɛrɛ] LT', + lastWeek: 'dddd [tɛmɛnen lɛrɛ] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s kɔnɔ', + past: 'a bɛ %s bɔ', + s: 'sanga dama dama', + ss: 'sekondi %d', + m: 'miniti kelen', + mm: 'miniti %d', + h: 'lɛrɛ kelen', + hh: 'lɛrɛ %d', + d: 'tile kelen', + dd: 'tile %d', + M: 'kalo kelen', + MM: 'kalo %d', + y: 'san kelen', + yy: 'san %d', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$3 = { + '1': '১', + '2': '২', + '3': '৩', + '4': '৪', + '5': '৫', + '6': '৬', + '7': '৭', + '8': '৮', + '9': '৯', + '0': '০', + }, + numberMap$2 = { + '১': '1', + '২': '2', + '৩': '3', + '৪': '4', + '৫': '5', + '৬': '6', + '৭': '7', + '৮': '8', + '৯': '9', + '০': '0', + }; + + moment.defineLocale('bn', { + months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split( + '_' + ), + monthsShort: 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split( + '_' + ), + weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split( + '_' + ), + weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'), + weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'), + longDateFormat: { + LT: 'A h:mm সময়', + LTS: 'A h:mm:ss সময়', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm সময়', + LLLL: 'dddd, D MMMM YYYY, A h:mm সময়', + }, + calendar: { + sameDay: '[আজ] LT', + nextDay: '[আগামীকাল] LT', + nextWeek: 'dddd, LT', + lastDay: '[গতকাল] LT', + lastWeek: '[গত] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s পরে', + past: '%s আগে', + s: 'কয়েক সেকেন্ড', + ss: '%d সেকেন্ড', + m: 'এক মিনিট', + mm: '%d মিনিট', + h: 'এক ঘন্টা', + hh: '%d ঘন্টা', + d: 'এক দিন', + dd: '%d দিন', + M: 'এক মাস', + MM: '%d মাস', + y: 'এক বছর', + yy: '%d বছর', + }, + preparse: function (string) { + return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) { + return numberMap$2[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$3[match]; + }); + }, + meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ( + (meridiem === 'রাত' && hour >= 4) || + (meridiem === 'দুপুর' && hour < 5) || + meridiem === 'বিকাল' + ) { + return hour + 12; + } else { + return hour; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'রাত'; + } else if (hour < 10) { + return 'সকাল'; + } else if (hour < 17) { + return 'দুপুর'; + } else if (hour < 20) { + return 'বিকাল'; + } else { + return 'রাত'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$4 = { + '1': '༡', + '2': '༢', + '3': '༣', + '4': '༤', + '5': '༥', + '6': '༦', + '7': '༧', + '8': '༨', + '9': '༩', + '0': '༠', + }, + numberMap$3 = { + '༡': '1', + '༢': '2', + '༣': '3', + '༤': '4', + '༥': '5', + '༦': '6', + '༧': '7', + '༨': '8', + '༩': '9', + '༠': '0', + }; + + moment.defineLocale('bo', { + months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split( + '_' + ), + monthsShort: 'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split( + '_' + ), + monthsShortRegex: /^(ཟླ་\d{1,2})/, + monthsParseExact: true, + weekdays: 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split( + '_' + ), + weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split( + '_' + ), + weekdaysMin: 'ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན'.split('_'), + longDateFormat: { + LT: 'A h:mm', + LTS: 'A h:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm', + LLLL: 'dddd, D MMMM YYYY, A h:mm', + }, + calendar: { + sameDay: '[དི་རིང] LT', + nextDay: '[སང་ཉིན] LT', + nextWeek: '[བདུན་ཕྲག་རྗེས་མ], LT', + lastDay: '[ཁ་སང] LT', + lastWeek: '[བདུན་ཕྲག་མཐའ་མ] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s ལ་', + past: '%s སྔན་ལ', + s: 'ལམ་སང', + ss: '%d སྐར་ཆ།', + m: 'སྐར་མ་གཅིག', + mm: '%d སྐར་མ', + h: 'ཆུ་ཚོད་གཅིག', + hh: '%d ཆུ་ཚོད', + d: 'ཉིན་གཅིག', + dd: '%d ཉིན་', + M: 'ཟླ་བ་གཅིག', + MM: '%d ཟླ་བ', + y: 'ལོ་གཅིག', + yy: '%d ལོ', + }, + preparse: function (string) { + return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) { + return numberMap$3[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$4[match]; + }); + }, + meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ( + (meridiem === 'མཚན་མོ' && hour >= 4) || + (meridiem === 'ཉིན་གུང' && hour < 5) || + meridiem === 'དགོང་དག' + ) { + return hour + 12; + } else { + return hour; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'མཚན་མོ'; + } else if (hour < 10) { + return 'ཞོགས་ཀས'; + } else if (hour < 17) { + return 'ཉིན་གུང'; + } else if (hour < 20) { + return 'དགོང་དག'; + } else { + return 'མཚན་མོ'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function relativeTimeWithMutation(number, withoutSuffix, key) { + var format = { + mm: 'munutenn', + MM: 'miz', + dd: 'devezh', + }; + return number + ' ' + mutation(format[key], number); + } + function specialMutationForYears(number) { + switch (lastNumber(number)) { + case 1: + case 3: + case 4: + case 5: + case 9: + return number + ' bloaz'; + default: + return number + ' vloaz'; + } + } + function lastNumber(number) { + if (number > 9) { + return lastNumber(number % 10); + } + return number; + } + function mutation(text, number) { + if (number === 2) { + return softMutation(text); + } + return text; + } + function softMutation(text) { + var mutationTable = { + m: 'v', + b: 'v', + d: 'z', + }; + if (mutationTable[text.charAt(0)] === undefined) { + return text; + } + return mutationTable[text.charAt(0)] + text.substring(1); + } + + var monthsParse = [ + /^gen/i, + /^c[ʼ\']hwe/i, + /^meu/i, + /^ebr/i, + /^mae/i, + /^(mez|eve)/i, + /^gou/i, + /^eos/i, + /^gwe/i, + /^her/i, + /^du/i, + /^ker/i, + ], + monthsRegex = /^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i, + monthsStrictRegex = /^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i, + monthsShortStrictRegex = /^(gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i, + fullWeekdaysParse = [ + /^sul/i, + /^lun/i, + /^meurzh/i, + /^merc[ʼ\']her/i, + /^yaou/i, + /^gwener/i, + /^sadorn/i, + ], + shortWeekdaysParse = [ + /^Sul/i, + /^Lun/i, + /^Meu/i, + /^Mer/i, + /^Yao/i, + /^Gwe/i, + /^Sad/i, + ], + minWeekdaysParse = [ + /^Su/i, + /^Lu/i, + /^Me([^r]|$)/i, + /^Mer/i, + /^Ya/i, + /^Gw/i, + /^Sa/i, + ]; + + moment.defineLocale('br', { + months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split( + '_' + ), + monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'), + weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'), + weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'), + weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'), + weekdaysParse: minWeekdaysParse, + fullWeekdaysParse: fullWeekdaysParse, + shortWeekdaysParse: shortWeekdaysParse, + minWeekdaysParse: minWeekdaysParse, + + monthsRegex: monthsRegex, + monthsShortRegex: monthsRegex, + monthsStrictRegex: monthsStrictRegex, + monthsShortStrictRegex: monthsShortStrictRegex, + monthsParse: monthsParse, + longMonthsParse: monthsParse, + shortMonthsParse: monthsParse, + + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [a viz] MMMM YYYY', + LLL: 'D [a viz] MMMM YYYY HH:mm', + LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Hiziv da] LT', + nextDay: '[Warcʼhoazh da] LT', + nextWeek: 'dddd [da] LT', + lastDay: '[Decʼh da] LT', + lastWeek: 'dddd [paset da] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'a-benn %s', + past: '%s ʼzo', + s: 'un nebeud segondennoù', + ss: '%d eilenn', + m: 'ur vunutenn', + mm: relativeTimeWithMutation, + h: 'un eur', + hh: '%d eur', + d: 'un devezh', + dd: relativeTimeWithMutation, + M: 'ur miz', + MM: relativeTimeWithMutation, + y: 'ur bloaz', + yy: specialMutationForYears, + }, + dayOfMonthOrdinalParse: /\d{1,2}(añ|vet)/, + ordinal: function (number) { + var output = number === 1 ? 'añ' : 'vet'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn + isPM: function (token) { + return token === 'g.m.'; + }, + meridiem: function (hour, minute, isLower) { + return hour < 12 ? 'a.m.' : 'g.m.'; + }, + }); + + //! moment.js locale configuration + + function translate(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'ss': + if (number === 1) { + result += 'sekunda'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sekunde'; + } else { + result += 'sekundi'; + } + return result; + case 'm': + return withoutSuffix ? 'jedna minuta' : 'jedne minute'; + case 'mm': + if (number === 1) { + result += 'minuta'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'minute'; + } else { + result += 'minuta'; + } + return result; + case 'h': + return withoutSuffix ? 'jedan sat' : 'jednog sata'; + case 'hh': + if (number === 1) { + result += 'sat'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sata'; + } else { + result += 'sati'; + } + return result; + case 'dd': + if (number === 1) { + result += 'dan'; + } else { + result += 'dana'; + } + return result; + case 'MM': + if (number === 1) { + result += 'mjesec'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'mjeseca'; + } else { + result += 'mjeseci'; + } + return result; + case 'yy': + if (number === 1) { + result += 'godina'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'godine'; + } else { + result += 'godina'; + } + return result; + } + } + + moment.defineLocale('bs', { + months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split( + '_' + ), + monthsShort: 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split( + '_' + ), + weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sutra u] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay: '[jučer u] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + return '[prošlu] dddd [u] LT'; + case 6: + return '[prošle] [subote] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prošli] dddd [u] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: 'prije %s', + s: 'par sekundi', + ss: translate, + m: translate, + mm: translate, + h: translate, + hh: translate, + d: 'dan', + dd: translate, + M: 'mjesec', + MM: translate, + y: 'godinu', + yy: translate, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('ca', { + months: { + standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split( + '_' + ), + format: "de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split( + '_' + ), + isFormat: /D[oD]?(\s)+MMMM/, + }, + monthsShort: 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split( + '_' + ), + weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'), + weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM [de] YYYY', + ll: 'D MMM YYYY', + LLL: 'D MMMM [de] YYYY [a les] H:mm', + lll: 'D MMM YYYY, H:mm', + LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm', + llll: 'ddd D MMM YYYY, H:mm', + }, + calendar: { + sameDay: function () { + return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT'; + }, + nextDay: function () { + return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT'; + }, + nextWeek: function () { + return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT'; + }, + lastDay: function () { + return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT'; + }, + lastWeek: function () { + return ( + '[el] dddd [passat a ' + + (this.hours() !== 1 ? 'les' : 'la') + + '] LT' + ); + }, + sameElse: 'L', + }, + relativeTime: { + future: "d'aquí %s", + past: 'fa %s', + s: 'uns segons', + ss: '%d segons', + m: 'un minut', + mm: '%d minuts', + h: 'una hora', + hh: '%d hores', + d: 'un dia', + dd: '%d dies', + M: 'un mes', + MM: '%d mesos', + y: 'un any', + yy: '%d anys', + }, + dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/, + ordinal: function (number, period) { + var output = + number === 1 + ? 'r' + : number === 2 + ? 'n' + : number === 3 + ? 'r' + : number === 4 + ? 't' + : 'è'; + if (period === 'w' || period === 'W') { + output = 'a'; + } + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var months$3 = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split( + '_' + ), + monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'), + monthsParse$1 = [ + /^led/i, + /^úno/i, + /^bře/i, + /^dub/i, + /^kvě/i, + /^(čvn|červen$|června)/i, + /^(čvc|červenec|července)/i, + /^srp/i, + /^zář/i, + /^říj/i, + /^lis/i, + /^pro/i, + ], + // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched. + // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'. + monthsRegex$1 = /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i; + + function plural$1(n) { + return n > 1 && n < 5 && ~~(n / 10) !== 1; + } + function translate$1(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': // a few seconds / in a few seconds / a few seconds ago + return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami'; + case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'sekundy' : 'sekund'); + } else { + return result + 'sekundami'; + } + case 'm': // a minute / in a minute / a minute ago + return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou'; + case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'minuty' : 'minut'); + } else { + return result + 'minutami'; + } + case 'h': // an hour / in an hour / an hour ago + return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou'; + case 'hh': // 9 hours / in 9 hours / 9 hours ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'hodiny' : 'hodin'); + } else { + return result + 'hodinami'; + } + case 'd': // a day / in a day / a day ago + return withoutSuffix || isFuture ? 'den' : 'dnem'; + case 'dd': // 9 days / in 9 days / 9 days ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'dny' : 'dní'); + } else { + return result + 'dny'; + } + case 'M': // a month / in a month / a month ago + return withoutSuffix || isFuture ? 'měsíc' : 'měsícem'; + case 'MM': // 9 months / in 9 months / 9 months ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'měsíce' : 'měsíců'); + } else { + return result + 'měsíci'; + } + case 'y': // a year / in a year / a year ago + return withoutSuffix || isFuture ? 'rok' : 'rokem'; + case 'yy': // 9 years / in 9 years / 9 years ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'roky' : 'let'); + } else { + return result + 'lety'; + } + } + } + + moment.defineLocale('cs', { + months: months$3, + monthsShort: monthsShort, + monthsRegex: monthsRegex$1, + monthsShortRegex: monthsRegex$1, + // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched. + // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'. + monthsStrictRegex: /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i, + monthsShortStrictRegex: /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i, + monthsParse: monthsParse$1, + longMonthsParse: monthsParse$1, + shortMonthsParse: monthsParse$1, + weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'), + weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'), + weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd D. MMMM YYYY H:mm', + l: 'D. M. YYYY', + }, + calendar: { + sameDay: '[dnes v] LT', + nextDay: '[zítra v] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[v neděli v] LT'; + case 1: + case 2: + return '[v] dddd [v] LT'; + case 3: + return '[ve středu v] LT'; + case 4: + return '[ve čtvrtek v] LT'; + case 5: + return '[v pátek v] LT'; + case 6: + return '[v sobotu v] LT'; + } + }, + lastDay: '[včera v] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[minulou neděli v] LT'; + case 1: + case 2: + return '[minulé] dddd [v] LT'; + case 3: + return '[minulou středu v] LT'; + case 4: + case 5: + return '[minulý] dddd [v] LT'; + case 6: + return '[minulou sobotu v] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: 'před %s', + s: translate$1, + ss: translate$1, + m: translate$1, + mm: translate$1, + h: translate$1, + hh: translate$1, + d: translate$1, + dd: translate$1, + M: translate$1, + MM: translate$1, + y: translate$1, + yy: translate$1, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('cv', { + months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split( + '_' + ), + monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'), + weekdays: 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split( + '_' + ), + weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'), + weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD-MM-YYYY', + LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]', + LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm', + LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm', + }, + calendar: { + sameDay: '[Паян] LT [сехетре]', + nextDay: '[Ыран] LT [сехетре]', + lastDay: '[Ӗнер] LT [сехетре]', + nextWeek: '[Ҫитес] dddd LT [сехетре]', + lastWeek: '[Иртнӗ] dddd LT [сехетре]', + sameElse: 'L', + }, + relativeTime: { + future: function (output) { + var affix = /сехет$/i.exec(output) + ? 'рен' + : /ҫул$/i.exec(output) + ? 'тан' + : 'ран'; + return output + affix; + }, + past: '%s каялла', + s: 'пӗр-ик ҫеккунт', + ss: '%d ҫеккунт', + m: 'пӗр минут', + mm: '%d минут', + h: 'пӗр сехет', + hh: '%d сехет', + d: 'пӗр кун', + dd: '%d кун', + M: 'пӗр уйӑх', + MM: '%d уйӑх', + y: 'пӗр ҫул', + yy: '%d ҫул', + }, + dayOfMonthOrdinalParse: /\d{1,2}-мӗш/, + ordinal: '%d-мӗш', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('cy', { + months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split( + '_' + ), + monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split( + '_' + ), + weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split( + '_' + ), + weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'), + weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'), + weekdaysParseExact: true, + // time formats are the same as en-gb + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Heddiw am] LT', + nextDay: '[Yfory am] LT', + nextWeek: 'dddd [am] LT', + lastDay: '[Ddoe am] LT', + lastWeek: 'dddd [diwethaf am] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'mewn %s', + past: '%s yn ôl', + s: 'ychydig eiliadau', + ss: '%d eiliad', + m: 'munud', + mm: '%d munud', + h: 'awr', + hh: '%d awr', + d: 'diwrnod', + dd: '%d diwrnod', + M: 'mis', + MM: '%d mis', + y: 'blwyddyn', + yy: '%d flynedd', + }, + dayOfMonthOrdinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/, + // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh + ordinal: function (number) { + var b = number, + output = '', + lookup = [ + '', + 'af', + 'il', + 'ydd', + 'ydd', + 'ed', + 'ed', + 'ed', + 'fed', + 'fed', + 'fed', // 1af to 10fed + 'eg', + 'fed', + 'eg', + 'eg', + 'fed', + 'eg', + 'eg', + 'fed', + 'eg', + 'fed', // 11eg to 20fed + ]; + if (b > 20) { + if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) { + output = 'fed'; // not 30ain, 70ain or 90ain + } else { + output = 'ain'; + } + } else if (b > 0) { + output = lookup[b]; + } + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('da', { + months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split( + '_' + ), + monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), + weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), + weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'), + weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY HH:mm', + LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm', + }, + calendar: { + sameDay: '[i dag kl.] LT', + nextDay: '[i morgen kl.] LT', + nextWeek: 'på dddd [kl.] LT', + lastDay: '[i går kl.] LT', + lastWeek: '[i] dddd[s kl.] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'om %s', + past: '%s siden', + s: 'få sekunder', + ss: '%d sekunder', + m: 'et minut', + mm: '%d minutter', + h: 'en time', + hh: '%d timer', + d: 'en dag', + dd: '%d dage', + M: 'en måned', + MM: '%d måneder', + y: 'et år', + yy: '%d år', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + m: ['eine Minute', 'einer Minute'], + h: ['eine Stunde', 'einer Stunde'], + d: ['ein Tag', 'einem Tag'], + dd: [number + ' Tage', number + ' Tagen'], + w: ['eine Woche', 'einer Woche'], + M: ['ein Monat', 'einem Monat'], + MM: [number + ' Monate', number + ' Monaten'], + y: ['ein Jahr', 'einem Jahr'], + yy: [number + ' Jahre', number + ' Jahren'], + }; + return withoutSuffix ? format[key][0] : format[key][1]; + } + + moment.defineLocale('de-at', { + months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split( + '_' + ), + monthsShort: 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split( + '_' + ), + weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), + weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY HH:mm', + LLLL: 'dddd, D. MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]', + }, + relativeTime: { + future: 'in %s', + past: 'vor %s', + s: 'ein paar Sekunden', + ss: '%d Sekunden', + m: processRelativeTime, + mm: '%d Minuten', + h: processRelativeTime, + hh: '%d Stunden', + d: processRelativeTime, + dd: processRelativeTime, + w: processRelativeTime, + ww: '%d Wochen', + M: processRelativeTime, + MM: processRelativeTime, + y: processRelativeTime, + yy: processRelativeTime, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function processRelativeTime$1(number, withoutSuffix, key, isFuture) { + var format = { + m: ['eine Minute', 'einer Minute'], + h: ['eine Stunde', 'einer Stunde'], + d: ['ein Tag', 'einem Tag'], + dd: [number + ' Tage', number + ' Tagen'], + w: ['eine Woche', 'einer Woche'], + M: ['ein Monat', 'einem Monat'], + MM: [number + ' Monate', number + ' Monaten'], + y: ['ein Jahr', 'einem Jahr'], + yy: [number + ' Jahre', number + ' Jahren'], + }; + return withoutSuffix ? format[key][0] : format[key][1]; + } + + moment.defineLocale('de-ch', { + months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split( + '_' + ), + monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split( + '_' + ), + weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY HH:mm', + LLLL: 'dddd, D. MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]', + }, + relativeTime: { + future: 'in %s', + past: 'vor %s', + s: 'ein paar Sekunden', + ss: '%d Sekunden', + m: processRelativeTime$1, + mm: '%d Minuten', + h: processRelativeTime$1, + hh: '%d Stunden', + d: processRelativeTime$1, + dd: processRelativeTime$1, + w: processRelativeTime$1, + ww: '%d Wochen', + M: processRelativeTime$1, + MM: processRelativeTime$1, + y: processRelativeTime$1, + yy: processRelativeTime$1, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function processRelativeTime$2(number, withoutSuffix, key, isFuture) { + var format = { + m: ['eine Minute', 'einer Minute'], + h: ['eine Stunde', 'einer Stunde'], + d: ['ein Tag', 'einem Tag'], + dd: [number + ' Tage', number + ' Tagen'], + w: ['eine Woche', 'einer Woche'], + M: ['ein Monat', 'einem Monat'], + MM: [number + ' Monate', number + ' Monaten'], + y: ['ein Jahr', 'einem Jahr'], + yy: [number + ' Jahre', number + ' Jahren'], + }; + return withoutSuffix ? format[key][0] : format[key][1]; + } + + moment.defineLocale('de', { + months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split( + '_' + ), + monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split( + '_' + ), + weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), + weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY HH:mm', + LLLL: 'dddd, D. MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]', + }, + relativeTime: { + future: 'in %s', + past: 'vor %s', + s: 'ein paar Sekunden', + ss: '%d Sekunden', + m: processRelativeTime$2, + mm: '%d Minuten', + h: processRelativeTime$2, + hh: '%d Stunden', + d: processRelativeTime$2, + dd: processRelativeTime$2, + w: processRelativeTime$2, + ww: '%d Wochen', + M: processRelativeTime$2, + MM: processRelativeTime$2, + y: processRelativeTime$2, + yy: processRelativeTime$2, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var months$4 = [ + 'ޖެނުއަރީ', + 'ފެބްރުއަރީ', + 'މާރިޗު', + 'އޭޕްރީލު', + 'މޭ', + 'ޖޫން', + 'ޖުލައި', + 'އޯގަސްޓު', + 'ސެޕްޓެމްބަރު', + 'އޮކްޓޯބަރު', + 'ނޮވެމްބަރު', + 'ޑިސެމްބަރު', + ], + weekdays = [ + 'އާދިއްތަ', + 'ހޯމަ', + 'އަންގާރަ', + 'ބުދަ', + 'ބުރާސްފަތި', + 'ހުކުރު', + 'ހޮނިހިރު', + ]; + + moment.defineLocale('dv', { + months: months$4, + monthsShort: months$4, + weekdays: weekdays, + weekdaysShort: weekdays, + weekdaysMin: 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'D/M/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + meridiemParse: /މކ|މފ/, + isPM: function (input) { + return 'މފ' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'މކ'; + } else { + return 'މފ'; + } + }, + calendar: { + sameDay: '[މިއަދު] LT', + nextDay: '[މާދަމާ] LT', + nextWeek: 'dddd LT', + lastDay: '[އިއްޔެ] LT', + lastWeek: '[ފާއިތުވި] dddd LT', + sameElse: 'L', + }, + relativeTime: { + future: 'ތެރޭގައި %s', + past: 'ކުރިން %s', + s: 'ސިކުންތުކޮޅެއް', + ss: 'd% ސިކުންތު', + m: 'މިނިޓެއް', + mm: 'މިނިޓު %d', + h: 'ގަޑިއިރެއް', + hh: 'ގަޑިއިރު %d', + d: 'ދުވަހެއް', + dd: 'ދުވަސް %d', + M: 'މަހެއް', + MM: 'މަސް %d', + y: 'އަހަރެއް', + yy: 'އަހަރު %d', + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week: { + dow: 7, // Sunday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function isFunction(input) { + return ( + (typeof Function !== 'undefined' && input instanceof Function) || + Object.prototype.toString.call(input) === '[object Function]' + ); + } + + moment.defineLocale('el', { + monthsNominativeEl: 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split( + '_' + ), + monthsGenitiveEl: 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split( + '_' + ), + months: function (momentToFormat, format) { + if (!momentToFormat) { + return this._monthsNominativeEl; + } else if ( + typeof format === 'string' && + /D/.test(format.substring(0, format.indexOf('MMMM'))) + ) { + // if there is a day number before 'MMMM' + return this._monthsGenitiveEl[momentToFormat.month()]; + } else { + return this._monthsNominativeEl[momentToFormat.month()]; + } + }, + monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'), + weekdays: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split( + '_' + ), + weekdaysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'), + weekdaysMin: 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'), + meridiem: function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'μμ' : 'ΜΜ'; + } else { + return isLower ? 'πμ' : 'ΠΜ'; + } + }, + isPM: function (input) { + return (input + '').toLowerCase()[0] === 'μ'; + }, + meridiemParse: /[ΠΜ]\.?Μ?\.?/i, + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A', + }, + calendarEl: { + sameDay: '[Σήμερα {}] LT', + nextDay: '[Αύριο {}] LT', + nextWeek: 'dddd [{}] LT', + lastDay: '[Χθες {}] LT', + lastWeek: function () { + switch (this.day()) { + case 6: + return '[το προηγούμενο] dddd [{}] LT'; + default: + return '[την προηγούμενη] dddd [{}] LT'; + } + }, + sameElse: 'L', + }, + calendar: function (key, mom) { + var output = this._calendarEl[key], + hours = mom && mom.hours(); + if (isFunction(output)) { + output = output.apply(mom); + } + return output.replace('{}', hours % 12 === 1 ? 'στη' : 'στις'); + }, + relativeTime: { + future: 'σε %s', + past: '%s πριν', + s: 'λίγα δευτερόλεπτα', + ss: '%d δευτερόλεπτα', + m: 'ένα λεπτό', + mm: '%d λεπτά', + h: 'μία ώρα', + hh: '%d ώρες', + d: 'μία μέρα', + dd: '%d μέρες', + M: 'ένας μήνας', + MM: '%d μήνες', + y: 'ένας χρόνος', + yy: '%d χρόνια', + }, + dayOfMonthOrdinalParse: /\d{1,2}η/, + ordinal: '%dη', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4st is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('en-au', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('en-ca', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'YYYY-MM-DD', + LL: 'MMMM D, YYYY', + LLL: 'MMMM D, YYYY h:mm A', + LLLL: 'dddd, MMMM D, YYYY h:mm A', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('en-gb', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('en-ie', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('en-il', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('en-in', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 1st is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('en-nz', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('en-sg', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('eo', { + months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split( + '_' + ), + monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec'.split('_'), + weekdays: 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'), + weekdaysShort: 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'), + weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: '[la] D[-an de] MMMM, YYYY', + LLL: '[la] D[-an de] MMMM, YYYY HH:mm', + LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm', + llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm', + }, + meridiemParse: /[ap]\.t\.m/i, + isPM: function (input) { + return input.charAt(0).toLowerCase() === 'p'; + }, + meridiem: function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'p.t.m.' : 'P.T.M.'; + } else { + return isLower ? 'a.t.m.' : 'A.T.M.'; + } + }, + calendar: { + sameDay: '[Hodiaŭ je] LT', + nextDay: '[Morgaŭ je] LT', + nextWeek: 'dddd[n je] LT', + lastDay: '[Hieraŭ je] LT', + lastWeek: '[pasintan] dddd[n je] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'post %s', + past: 'antaŭ %s', + s: 'kelkaj sekundoj', + ss: '%d sekundoj', + m: 'unu minuto', + mm: '%d minutoj', + h: 'unu horo', + hh: '%d horoj', + d: 'unu tago', //ne 'diurno', ĉar estas uzita por proksimumo + dd: '%d tagoj', + M: 'unu monato', + MM: '%d monatoj', + y: 'unu jaro', + yy: '%d jaroj', + }, + dayOfMonthOrdinalParse: /\d{1,2}a/, + ordinal: '%da', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split( + '_' + ), + monthsShort$1 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'), + monthsParse$2 = [ + /^ene/i, + /^feb/i, + /^mar/i, + /^abr/i, + /^may/i, + /^jun/i, + /^jul/i, + /^ago/i, + /^sep/i, + /^oct/i, + /^nov/i, + /^dic/i, + ], + monthsRegex$2 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; + + moment.defineLocale('es-do', { + months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split( + '_' + ), + monthsShort: function (m, format) { + if (!m) { + return monthsShortDot; + } else if (/-MMM-/.test(format)) { + return monthsShort$1[m.month()]; + } else { + return monthsShortDot[m.month()]; + } + }, + monthsRegex: monthsRegex$2, + monthsShortRegex: monthsRegex$2, + monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, + monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, + monthsParse: monthsParse$2, + longMonthsParse: monthsParse$2, + shortMonthsParse: monthsParse$2, + weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY h:mm A', + LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A', + }, + calendar: { + sameDay: function () { + return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + nextDay: function () { + return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + nextWeek: function () { + return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + lastDay: function () { + return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + lastWeek: function () { + return ( + '[el] dddd [pasado a la' + + (this.hours() !== 1 ? 's' : '') + + '] LT' + ); + }, + sameElse: 'L', + }, + relativeTime: { + future: 'en %s', + past: 'hace %s', + s: 'unos segundos', + ss: '%d segundos', + m: 'un minuto', + mm: '%d minutos', + h: 'una hora', + hh: '%d horas', + d: 'un día', + dd: '%d días', + M: 'un mes', + MM: '%d meses', + y: 'un año', + yy: '%d años', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsShortDot$1 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split( + '_' + ), + monthsShort$2 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'), + monthsParse$3 = [ + /^ene/i, + /^feb/i, + /^mar/i, + /^abr/i, + /^may/i, + /^jun/i, + /^jul/i, + /^ago/i, + /^sep/i, + /^oct/i, + /^nov/i, + /^dic/i, + ], + monthsRegex$3 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; + + moment.defineLocale('es-us', { + months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split( + '_' + ), + monthsShort: function (m, format) { + if (!m) { + return monthsShortDot$1; + } else if (/-MMM-/.test(format)) { + return monthsShort$2[m.month()]; + } else { + return monthsShortDot$1[m.month()]; + } + }, + monthsRegex: monthsRegex$3, + monthsShortRegex: monthsRegex$3, + monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, + monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, + monthsParse: monthsParse$3, + longMonthsParse: monthsParse$3, + shortMonthsParse: monthsParse$3, + weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'MM/DD/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY h:mm A', + LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A', + }, + calendar: { + sameDay: function () { + return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + nextDay: function () { + return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + nextWeek: function () { + return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + lastDay: function () { + return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + lastWeek: function () { + return ( + '[el] dddd [pasado a la' + + (this.hours() !== 1 ? 's' : '') + + '] LT' + ); + }, + sameElse: 'L', + }, + relativeTime: { + future: 'en %s', + past: 'hace %s', + s: 'unos segundos', + ss: '%d segundos', + m: 'un minuto', + mm: '%d minutos', + h: 'una hora', + hh: '%d horas', + d: 'un día', + dd: '%d días', + M: 'un mes', + MM: '%d meses', + y: 'un año', + yy: '%d años', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsShortDot$2 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split( + '_' + ), + monthsShort$3 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'), + monthsParse$4 = [ + /^ene/i, + /^feb/i, + /^mar/i, + /^abr/i, + /^may/i, + /^jun/i, + /^jul/i, + /^ago/i, + /^sep/i, + /^oct/i, + /^nov/i, + /^dic/i, + ], + monthsRegex$4 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; + + moment.defineLocale('es', { + months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split( + '_' + ), + monthsShort: function (m, format) { + if (!m) { + return monthsShortDot$2; + } else if (/-MMM-/.test(format)) { + return monthsShort$3[m.month()]; + } else { + return monthsShortDot$2[m.month()]; + } + }, + monthsRegex: monthsRegex$4, + monthsShortRegex: monthsRegex$4, + monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, + monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, + monthsParse: monthsParse$4, + longMonthsParse: monthsParse$4, + shortMonthsParse: monthsParse$4, + weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY H:mm', + LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm', + }, + calendar: { + sameDay: function () { + return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + nextDay: function () { + return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + nextWeek: function () { + return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + lastDay: function () { + return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + lastWeek: function () { + return ( + '[el] dddd [pasado a la' + + (this.hours() !== 1 ? 's' : '') + + '] LT' + ); + }, + sameElse: 'L', + }, + relativeTime: { + future: 'en %s', + past: 'hace %s', + s: 'unos segundos', + ss: '%d segundos', + m: 'un minuto', + mm: '%d minutos', + h: 'una hora', + hh: '%d horas', + d: 'un día', + dd: '%d días', + M: 'un mes', + MM: '%d meses', + y: 'un año', + yy: '%d años', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + invalidDate: 'Fecha inválida', + }); + + //! moment.js locale configuration + + function processRelativeTime$3(number, withoutSuffix, key, isFuture) { + var format = { + s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'], + ss: [number + 'sekundi', number + 'sekundit'], + m: ['ühe minuti', 'üks minut'], + mm: [number + ' minuti', number + ' minutit'], + h: ['ühe tunni', 'tund aega', 'üks tund'], + hh: [number + ' tunni', number + ' tundi'], + d: ['ühe päeva', 'üks päev'], + M: ['kuu aja', 'kuu aega', 'üks kuu'], + MM: [number + ' kuu', number + ' kuud'], + y: ['ühe aasta', 'aasta', 'üks aasta'], + yy: [number + ' aasta', number + ' aastat'], + }; + if (withoutSuffix) { + return format[key][2] ? format[key][2] : format[key][1]; + } + return isFuture ? format[key][0] : format[key][1]; + } + + moment.defineLocale('et', { + months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split( + '_' + ), + monthsShort: 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split( + '_' + ), + weekdays: 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split( + '_' + ), + weekdaysShort: 'P_E_T_K_N_R_L'.split('_'), + weekdaysMin: 'P_E_T_K_N_R_L'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[Täna,] LT', + nextDay: '[Homme,] LT', + nextWeek: '[Järgmine] dddd LT', + lastDay: '[Eile,] LT', + lastWeek: '[Eelmine] dddd LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s pärast', + past: '%s tagasi', + s: processRelativeTime$3, + ss: processRelativeTime$3, + m: processRelativeTime$3, + mm: processRelativeTime$3, + h: processRelativeTime$3, + hh: processRelativeTime$3, + d: processRelativeTime$3, + dd: '%d päeva', + M: processRelativeTime$3, + MM: processRelativeTime$3, + y: processRelativeTime$3, + yy: processRelativeTime$3, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('eu', { + months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split( + '_' + ), + monthsShort: 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split( + '_' + ), + weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'), + weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'YYYY[ko] MMMM[ren] D[a]', + LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm', + LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm', + l: 'YYYY-M-D', + ll: 'YYYY[ko] MMM D[a]', + lll: 'YYYY[ko] MMM D[a] HH:mm', + llll: 'ddd, YYYY[ko] MMM D[a] HH:mm', + }, + calendar: { + sameDay: '[gaur] LT[etan]', + nextDay: '[bihar] LT[etan]', + nextWeek: 'dddd LT[etan]', + lastDay: '[atzo] LT[etan]', + lastWeek: '[aurreko] dddd LT[etan]', + sameElse: 'L', + }, + relativeTime: { + future: '%s barru', + past: 'duela %s', + s: 'segundo batzuk', + ss: '%d segundo', + m: 'minutu bat', + mm: '%d minutu', + h: 'ordu bat', + hh: '%d ordu', + d: 'egun bat', + dd: '%d egun', + M: 'hilabete bat', + MM: '%d hilabete', + y: 'urte bat', + yy: '%d urte', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$5 = { + '1': '۱', + '2': '۲', + '3': '۳', + '4': '۴', + '5': '۵', + '6': '۶', + '7': '۷', + '8': '۸', + '9': '۹', + '0': '۰', + }, + numberMap$4 = { + '۱': '1', + '۲': '2', + '۳': '3', + '۴': '4', + '۵': '5', + '۶': '6', + '۷': '7', + '۸': '8', + '۹': '9', + '۰': '0', + }; + + moment.defineLocale('fa', { + months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split( + '_' + ), + monthsShort: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split( + '_' + ), + weekdays: 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split( + '_' + ), + weekdaysShort: 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split( + '_' + ), + weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + meridiemParse: /قبل از ظهر|بعد از ظهر/, + isPM: function (input) { + return /بعد از ظهر/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'قبل از ظهر'; + } else { + return 'بعد از ظهر'; + } + }, + calendar: { + sameDay: '[امروز ساعت] LT', + nextDay: '[فردا ساعت] LT', + nextWeek: 'dddd [ساعت] LT', + lastDay: '[دیروز ساعت] LT', + lastWeek: 'dddd [پیش] [ساعت] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'در %s', + past: '%s پیش', + s: 'چند ثانیه', + ss: '%d ثانیه', + m: 'یک دقیقه', + mm: '%d دقیقه', + h: 'یک ساعت', + hh: '%d ساعت', + d: 'یک روز', + dd: '%d روز', + M: 'یک ماه', + MM: '%d ماه', + y: 'یک سال', + yy: '%d سال', + }, + preparse: function (string) { + return string + .replace(/[۰-۹]/g, function (match) { + return numberMap$4[match]; + }) + .replace(/،/g, ','); + }, + postformat: function (string) { + return string + .replace(/\d/g, function (match) { + return symbolMap$5[match]; + }) + .replace(/,/g, '،'); + }, + dayOfMonthOrdinalParse: /\d{1,2}م/, + ordinal: '%dم', + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split( + ' ' + ), + numbersFuture = [ + 'nolla', + 'yhden', + 'kahden', + 'kolmen', + 'neljän', + 'viiden', + 'kuuden', + numbersPast[7], + numbersPast[8], + numbersPast[9], + ]; + function translate$2(number, withoutSuffix, key, isFuture) { + var result = ''; + switch (key) { + case 's': + return isFuture ? 'muutaman sekunnin' : 'muutama sekunti'; + case 'ss': + result = isFuture ? 'sekunnin' : 'sekuntia'; + break; + case 'm': + return isFuture ? 'minuutin' : 'minuutti'; + case 'mm': + result = isFuture ? 'minuutin' : 'minuuttia'; + break; + case 'h': + return isFuture ? 'tunnin' : 'tunti'; + case 'hh': + result = isFuture ? 'tunnin' : 'tuntia'; + break; + case 'd': + return isFuture ? 'päivän' : 'päivä'; + case 'dd': + result = isFuture ? 'päivän' : 'päivää'; + break; + case 'M': + return isFuture ? 'kuukauden' : 'kuukausi'; + case 'MM': + result = isFuture ? 'kuukauden' : 'kuukautta'; + break; + case 'y': + return isFuture ? 'vuoden' : 'vuosi'; + case 'yy': + result = isFuture ? 'vuoden' : 'vuotta'; + break; + } + result = verbalNumber(number, isFuture) + ' ' + result; + return result; + } + function verbalNumber(number, isFuture) { + return number < 10 + ? isFuture + ? numbersFuture[number] + : numbersPast[number] + : number; + } + + moment.defineLocale('fi', { + months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split( + '_' + ), + monthsShort: 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split( + '_' + ), + weekdays: 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split( + '_' + ), + weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'), + weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'), + longDateFormat: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD.MM.YYYY', + LL: 'Do MMMM[ta] YYYY', + LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm', + LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm', + l: 'D.M.YYYY', + ll: 'Do MMM YYYY', + lll: 'Do MMM YYYY, [klo] HH.mm', + llll: 'ddd, Do MMM YYYY, [klo] HH.mm', + }, + calendar: { + sameDay: '[tänään] [klo] LT', + nextDay: '[huomenna] [klo] LT', + nextWeek: 'dddd [klo] LT', + lastDay: '[eilen] [klo] LT', + lastWeek: '[viime] dddd[na] [klo] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s päästä', + past: '%s sitten', + s: translate$2, + ss: translate$2, + m: translate$2, + mm: translate$2, + h: translate$2, + hh: translate$2, + d: translate$2, + dd: translate$2, + M: translate$2, + MM: translate$2, + y: translate$2, + yy: translate$2, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('fil', { + months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split( + '_' + ), + monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'), + weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split( + '_' + ), + weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'), + weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'MM/D/YYYY', + LL: 'MMMM D, YYYY', + LLL: 'MMMM D, YYYY HH:mm', + LLLL: 'dddd, MMMM DD, YYYY HH:mm', + }, + calendar: { + sameDay: 'LT [ngayong araw]', + nextDay: '[Bukas ng] LT', + nextWeek: 'LT [sa susunod na] dddd', + lastDay: 'LT [kahapon]', + lastWeek: 'LT [noong nakaraang] dddd', + sameElse: 'L', + }, + relativeTime: { + future: 'sa loob ng %s', + past: '%s ang nakalipas', + s: 'ilang segundo', + ss: '%d segundo', + m: 'isang minuto', + mm: '%d minuto', + h: 'isang oras', + hh: '%d oras', + d: 'isang araw', + dd: '%d araw', + M: 'isang buwan', + MM: '%d buwan', + y: 'isang taon', + yy: '%d taon', + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal: function (number) { + return number; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('fo', { + months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split( + '_' + ), + monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'), + weekdays: 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split( + '_' + ), + weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'), + weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D. MMMM, YYYY HH:mm', + }, + calendar: { + sameDay: '[Í dag kl.] LT', + nextDay: '[Í morgin kl.] LT', + nextWeek: 'dddd [kl.] LT', + lastDay: '[Í gjár kl.] LT', + lastWeek: '[síðstu] dddd [kl] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'um %s', + past: '%s síðani', + s: 'fá sekund', + ss: '%d sekundir', + m: 'ein minuttur', + mm: '%d minuttir', + h: 'ein tími', + hh: '%d tímar', + d: 'ein dagur', + dd: '%d dagar', + M: 'ein mánaður', + MM: '%d mánaðir', + y: 'eitt ár', + yy: '%d ár', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('fr-ca', { + months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split( + '_' + ), + monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Aujourd’hui à] LT', + nextDay: '[Demain à] LT', + nextWeek: 'dddd [à] LT', + lastDay: '[Hier à] LT', + lastWeek: 'dddd [dernier à] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dans %s', + past: 'il y a %s', + s: 'quelques secondes', + ss: '%d secondes', + m: 'une minute', + mm: '%d minutes', + h: 'une heure', + hh: '%d heures', + d: 'un jour', + dd: '%d jours', + M: 'un mois', + MM: '%d mois', + y: 'un an', + yy: '%d ans', + }, + dayOfMonthOrdinalParse: /\d{1,2}(er|e)/, + ordinal: function (number, period) { + switch (period) { + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'D': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('fr-ch', { + months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split( + '_' + ), + monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Aujourd’hui à] LT', + nextDay: '[Demain à] LT', + nextWeek: 'dddd [à] LT', + lastDay: '[Hier à] LT', + lastWeek: 'dddd [dernier à] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dans %s', + past: 'il y a %s', + s: 'quelques secondes', + ss: '%d secondes', + m: 'une minute', + mm: '%d minutes', + h: 'une heure', + hh: '%d heures', + d: 'un jour', + dd: '%d jours', + M: 'un mois', + MM: '%d mois', + y: 'un an', + yy: '%d ans', + }, + dayOfMonthOrdinalParse: /\d{1,2}(er|e)/, + ordinal: function (number, period) { + switch (period) { + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'D': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsStrictRegex$1 = /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i, + monthsShortStrictRegex$1 = /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?)/i, + monthsRegex$5 = /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i, + monthsParse$5 = [ + /^janv/i, + /^févr/i, + /^mars/i, + /^avr/i, + /^mai/i, + /^juin/i, + /^juil/i, + /^août/i, + /^sept/i, + /^oct/i, + /^nov/i, + /^déc/i, + ]; + + moment.defineLocale('fr', { + months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split( + '_' + ), + monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split( + '_' + ), + monthsRegex: monthsRegex$5, + monthsShortRegex: monthsRegex$5, + monthsStrictRegex: monthsStrictRegex$1, + monthsShortStrictRegex: monthsShortStrictRegex$1, + monthsParse: monthsParse$5, + longMonthsParse: monthsParse$5, + shortMonthsParse: monthsParse$5, + weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Aujourd’hui à] LT', + nextDay: '[Demain à] LT', + nextWeek: 'dddd [à] LT', + lastDay: '[Hier à] LT', + lastWeek: 'dddd [dernier à] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dans %s', + past: 'il y a %s', + s: 'quelques secondes', + ss: '%d secondes', + m: 'une minute', + mm: '%d minutes', + h: 'une heure', + hh: '%d heures', + d: 'un jour', + dd: '%d jours', + M: 'un mois', + MM: '%d mois', + y: 'un an', + yy: '%d ans', + }, + dayOfMonthOrdinalParse: /\d{1,2}(er|)/, + ordinal: function (number, period) { + switch (period) { + // TODO: Return 'e' when day of month > 1. Move this case inside + // block for masculine words below. + // See https://github.com/moment/moment/issues/3375 + case 'D': + return number + (number === 1 ? 'er' : ''); + + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split( + '_' + ), + monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split( + '_' + ); + + moment.defineLocale('fy', { + months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split( + '_' + ), + monthsShort: function (m, format) { + if (!m) { + return monthsShortWithDots; + } else if (/-MMM-/.test(format)) { + return monthsShortWithoutDots[m.month()]; + } else { + return monthsShortWithDots[m.month()]; + } + }, + monthsParseExact: true, + weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split( + '_' + ), + weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'), + weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD-MM-YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[hjoed om] LT', + nextDay: '[moarn om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[juster om] LT', + lastWeek: '[ôfrûne] dddd [om] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'oer %s', + past: '%s lyn', + s: 'in pear sekonden', + ss: '%d sekonden', + m: 'ien minút', + mm: '%d minuten', + h: 'ien oere', + hh: '%d oeren', + d: 'ien dei', + dd: '%d dagen', + M: 'ien moanne', + MM: '%d moannen', + y: 'ien jier', + yy: '%d jierren', + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal: function (number) { + return ( + number + + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de') + ); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var months$5 = [ + 'Eanáir', + 'Feabhra', + 'Márta', + 'Aibreán', + 'Bealtaine', + 'Meitheamh', + 'Iúil', + 'Lúnasa', + 'Meán Fómhair', + 'Deireadh Fómhair', + 'Samhain', + 'Nollaig', + ], + monthsShort$4 = [ + 'Ean', + 'Feabh', + 'Márt', + 'Aib', + 'Beal', + 'Meith', + 'Iúil', + 'Lún', + 'M.F.', + 'D.F.', + 'Samh', + 'Noll', + ], + weekdays$1 = [ + 'Dé Domhnaigh', + 'Dé Luain', + 'Dé Máirt', + 'Dé Céadaoin', + 'Déardaoin', + 'Dé hAoine', + 'Dé Sathairn', + ], + weekdaysShort = ['Domh', 'Luan', 'Máirt', 'Céad', 'Déar', 'Aoine', 'Sath'], + weekdaysMin = ['Do', 'Lu', 'Má', 'Cé', 'Dé', 'A', 'Sa']; + + moment.defineLocale('ga', { + months: months$5, + monthsShort: monthsShort$4, + monthsParseExact: true, + weekdays: weekdays$1, + weekdaysShort: weekdaysShort, + weekdaysMin: weekdaysMin, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Inniu ag] LT', + nextDay: '[Amárach ag] LT', + nextWeek: 'dddd [ag] LT', + lastDay: '[Inné ag] LT', + lastWeek: 'dddd [seo caite] [ag] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'i %s', + past: '%s ó shin', + s: 'cúpla soicind', + ss: '%d soicind', + m: 'nóiméad', + mm: '%d nóiméad', + h: 'uair an chloig', + hh: '%d uair an chloig', + d: 'lá', + dd: '%d lá', + M: 'mí', + MM: '%d míonna', + y: 'bliain', + yy: '%d bliain', + }, + dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/, + ordinal: function (number) { + var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var months$6 = [ + 'Am Faoilleach', + 'An Gearran', + 'Am Màrt', + 'An Giblean', + 'An Cèitean', + 'An t-Ògmhios', + 'An t-Iuchar', + 'An Lùnastal', + 'An t-Sultain', + 'An Dàmhair', + 'An t-Samhain', + 'An Dùbhlachd', + ], + monthsShort$5 = [ + 'Faoi', + 'Gear', + 'Màrt', + 'Gibl', + 'Cèit', + 'Ògmh', + 'Iuch', + 'Lùn', + 'Sult', + 'Dàmh', + 'Samh', + 'Dùbh', + ], + weekdays$2 = [ + 'Didòmhnaich', + 'Diluain', + 'Dimàirt', + 'Diciadain', + 'Diardaoin', + 'Dihaoine', + 'Disathairne', + ], + weekdaysShort$1 = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'], + weekdaysMin$1 = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa']; + + moment.defineLocale('gd', { + months: months$6, + monthsShort: monthsShort$5, + monthsParseExact: true, + weekdays: weekdays$2, + weekdaysShort: weekdaysShort$1, + weekdaysMin: weekdaysMin$1, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[An-diugh aig] LT', + nextDay: '[A-màireach aig] LT', + nextWeek: 'dddd [aig] LT', + lastDay: '[An-dè aig] LT', + lastWeek: 'dddd [seo chaidh] [aig] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'ann an %s', + past: 'bho chionn %s', + s: 'beagan diogan', + ss: '%d diogan', + m: 'mionaid', + mm: '%d mionaidean', + h: 'uair', + hh: '%d uairean', + d: 'latha', + dd: '%d latha', + M: 'mìos', + MM: '%d mìosan', + y: 'bliadhna', + yy: '%d bliadhna', + }, + dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/, + ordinal: function (number) { + var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('gl', { + months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split( + '_' + ), + monthsShort: 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'), + weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'), + weekdaysMin: 'do_lu_ma_mé_xo_ve_sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY H:mm', + LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm', + }, + calendar: { + sameDay: function () { + return '[hoxe ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT'; + }, + nextDay: function () { + return '[mañá ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT'; + }, + nextWeek: function () { + return 'dddd [' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT'; + }, + lastDay: function () { + return '[onte ' + (this.hours() !== 1 ? 'á' : 'a') + '] LT'; + }, + lastWeek: function () { + return ( + '[o] dddd [pasado ' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT' + ); + }, + sameElse: 'L', + }, + relativeTime: { + future: function (str) { + if (str.indexOf('un') === 0) { + return 'n' + str; + } + return 'en ' + str; + }, + past: 'hai %s', + s: 'uns segundos', + ss: '%d segundos', + m: 'un minuto', + mm: '%d minutos', + h: 'unha hora', + hh: '%d horas', + d: 'un día', + dd: '%d días', + M: 'un mes', + MM: '%d meses', + y: 'un ano', + yy: '%d anos', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function processRelativeTime$4(number, withoutSuffix, key, isFuture) { + var format = { + s: ['थोडया सॅकंडांनी', 'थोडे सॅकंड'], + ss: [number + ' सॅकंडांनी', number + ' सॅकंड'], + m: ['एका मिणटान', 'एक मिनूट'], + mm: [number + ' मिणटांनी', number + ' मिणटां'], + h: ['एका वरान', 'एक वर'], + hh: [number + ' वरांनी', number + ' वरां'], + d: ['एका दिसान', 'एक दीस'], + dd: [number + ' दिसांनी', number + ' दीस'], + M: ['एका म्हयन्यान', 'एक म्हयनो'], + MM: [number + ' म्हयन्यानी', number + ' म्हयने'], + y: ['एका वर्सान', 'एक वर्स'], + yy: [number + ' वर्सांनी', number + ' वर्सां'], + }; + return isFuture ? format[key][0] : format[key][1]; + } + + moment.defineLocale('gom-deva', { + months: { + standalone: 'जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split( + '_' + ), + format: 'जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या'.split( + '_' + ), + isFormat: /MMMM(\s)+D[oD]?/, + }, + monthsShort: 'जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार'.split('_'), + weekdaysShort: 'आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.'.split('_'), + weekdaysMin: 'आ_सो_मं_बु_ब्रे_सु_शे'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'A h:mm [वाजतां]', + LTS: 'A h:mm:ss [वाजतां]', + L: 'DD-MM-YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY A h:mm [वाजतां]', + LLLL: 'dddd, MMMM Do, YYYY, A h:mm [वाजतां]', + llll: 'ddd, D MMM YYYY, A h:mm [वाजतां]', + }, + calendar: { + sameDay: '[आयज] LT', + nextDay: '[फाल्यां] LT', + nextWeek: '[फुडलो] dddd[,] LT', + lastDay: '[काल] LT', + lastWeek: '[फाटलो] dddd[,] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s', + past: '%s आदीं', + s: processRelativeTime$4, + ss: processRelativeTime$4, + m: processRelativeTime$4, + mm: processRelativeTime$4, + h: processRelativeTime$4, + hh: processRelativeTime$4, + d: processRelativeTime$4, + dd: processRelativeTime$4, + M: processRelativeTime$4, + MM: processRelativeTime$4, + y: processRelativeTime$4, + yy: processRelativeTime$4, + }, + dayOfMonthOrdinalParse: /\d{1,2}(वेर)/, + ordinal: function (number, period) { + switch (period) { + // the ordinal 'वेर' only applies to day of the month + case 'D': + return number + 'वेर'; + default: + case 'M': + case 'Q': + case 'DDD': + case 'd': + case 'w': + case 'W': + return number; + } + }, + week: { + dow: 0, // Sunday is the first day of the week + doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4) + }, + meridiemParse: /राती|सकाळीं|दनपारां|सांजे/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'राती') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'सकाळीं') { + return hour; + } else if (meridiem === 'दनपारां') { + return hour > 12 ? hour : hour + 12; + } else if (meridiem === 'सांजे') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'राती'; + } else if (hour < 12) { + return 'सकाळीं'; + } else if (hour < 16) { + return 'दनपारां'; + } else if (hour < 20) { + return 'सांजे'; + } else { + return 'राती'; + } + }, + }); + + //! moment.js locale configuration + + function processRelativeTime$5(number, withoutSuffix, key, isFuture) { + var format = { + s: ['thoddea sekondamni', 'thodde sekond'], + ss: [number + ' sekondamni', number + ' sekond'], + m: ['eka mintan', 'ek minut'], + mm: [number + ' mintamni', number + ' mintam'], + h: ['eka voran', 'ek vor'], + hh: [number + ' voramni', number + ' voram'], + d: ['eka disan', 'ek dis'], + dd: [number + ' disamni', number + ' dis'], + M: ['eka mhoinean', 'ek mhoino'], + MM: [number + ' mhoineamni', number + ' mhoine'], + y: ['eka vorsan', 'ek voros'], + yy: [number + ' vorsamni', number + ' vorsam'], + }; + return isFuture ? format[key][0] : format[key][1]; + } + + moment.defineLocale('gom-latn', { + months: { + standalone: 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split( + '_' + ), + format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split( + '_' + ), + isFormat: /MMMM(\s)+D[oD]?/, + }, + monthsShort: 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split( + '_' + ), + monthsParseExact: true, + weekdays: "Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split('_'), + weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'), + weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'A h:mm [vazta]', + LTS: 'A h:mm:ss [vazta]', + L: 'DD-MM-YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY A h:mm [vazta]', + LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]', + llll: 'ddd, D MMM YYYY, A h:mm [vazta]', + }, + calendar: { + sameDay: '[Aiz] LT', + nextDay: '[Faleam] LT', + nextWeek: '[Fuddlo] dddd[,] LT', + lastDay: '[Kal] LT', + lastWeek: '[Fattlo] dddd[,] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s', + past: '%s adim', + s: processRelativeTime$5, + ss: processRelativeTime$5, + m: processRelativeTime$5, + mm: processRelativeTime$5, + h: processRelativeTime$5, + hh: processRelativeTime$5, + d: processRelativeTime$5, + dd: processRelativeTime$5, + M: processRelativeTime$5, + MM: processRelativeTime$5, + y: processRelativeTime$5, + yy: processRelativeTime$5, + }, + dayOfMonthOrdinalParse: /\d{1,2}(er)/, + ordinal: function (number, period) { + switch (period) { + // the ordinal 'er' only applies to day of the month + case 'D': + return number + 'er'; + default: + case 'M': + case 'Q': + case 'DDD': + case 'd': + case 'w': + case 'W': + return number; + } + }, + week: { + dow: 0, // Sunday is the first day of the week + doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4) + }, + meridiemParse: /rati|sokallim|donparam|sanje/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'rati') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'sokallim') { + return hour; + } else if (meridiem === 'donparam') { + return hour > 12 ? hour : hour + 12; + } else if (meridiem === 'sanje') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'rati'; + } else if (hour < 12) { + return 'sokallim'; + } else if (hour < 16) { + return 'donparam'; + } else if (hour < 20) { + return 'sanje'; + } else { + return 'rati'; + } + }, + }); + + //! moment.js locale configuration + + var symbolMap$6 = { + '1': '૧', + '2': '૨', + '3': '૩', + '4': '૪', + '5': '૫', + '6': '૬', + '7': '૭', + '8': '૮', + '9': '૯', + '0': '૦', + }, + numberMap$5 = { + '૧': '1', + '૨': '2', + '૩': '3', + '૪': '4', + '૫': '5', + '૬': '6', + '૭': '7', + '૮': '8', + '૯': '9', + '૦': '0', + }; + + moment.defineLocale('gu', { + months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split( + '_' + ), + monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split( + '_' + ), + weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'), + weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'), + longDateFormat: { + LT: 'A h:mm વાગ્યે', + LTS: 'A h:mm:ss વાગ્યે', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm વાગ્યે', + LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે', + }, + calendar: { + sameDay: '[આજ] LT', + nextDay: '[કાલે] LT', + nextWeek: 'dddd, LT', + lastDay: '[ગઇકાલે] LT', + lastWeek: '[પાછલા] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s મા', + past: '%s પહેલા', + s: 'અમુક પળો', + ss: '%d સેકંડ', + m: 'એક મિનિટ', + mm: '%d મિનિટ', + h: 'એક કલાક', + hh: '%d કલાક', + d: 'એક દિવસ', + dd: '%d દિવસ', + M: 'એક મહિનો', + MM: '%d મહિનો', + y: 'એક વર્ષ', + yy: '%d વર્ષ', + }, + preparse: function (string) { + return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) { + return numberMap$5[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$6[match]; + }); + }, + // Gujarati notation for meridiems are quite fuzzy in practice. While there exists + // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati. + meridiemParse: /રાત|બપોર|સવાર|સાંજ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'રાત') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'સવાર') { + return hour; + } else if (meridiem === 'બપોર') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'સાંજ') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'રાત'; + } else if (hour < 10) { + return 'સવાર'; + } else if (hour < 17) { + return 'બપોર'; + } else if (hour < 20) { + return 'સાંજ'; + } else { + return 'રાત'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('he', { + months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split( + '_' + ), + monthsShort: 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split( + '_' + ), + weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'), + weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'), + weekdaysMin: 'א_ב_ג_ד_ה_ו_ש'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [ב]MMMM YYYY', + LLL: 'D [ב]MMMM YYYY HH:mm', + LLLL: 'dddd, D [ב]MMMM YYYY HH:mm', + l: 'D/M/YYYY', + ll: 'D MMM YYYY', + lll: 'D MMM YYYY HH:mm', + llll: 'ddd, D MMM YYYY HH:mm', + }, + calendar: { + sameDay: '[היום ב־]LT', + nextDay: '[מחר ב־]LT', + nextWeek: 'dddd [בשעה] LT', + lastDay: '[אתמול ב־]LT', + lastWeek: '[ביום] dddd [האחרון בשעה] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'בעוד %s', + past: 'לפני %s', + s: 'מספר שניות', + ss: '%d שניות', + m: 'דקה', + mm: '%d דקות', + h: 'שעה', + hh: function (number) { + if (number === 2) { + return 'שעתיים'; + } + return number + ' שעות'; + }, + d: 'יום', + dd: function (number) { + if (number === 2) { + return 'יומיים'; + } + return number + ' ימים'; + }, + M: 'חודש', + MM: function (number) { + if (number === 2) { + return 'חודשיים'; + } + return number + ' חודשים'; + }, + y: 'שנה', + yy: function (number) { + if (number === 2) { + return 'שנתיים'; + } else if (number % 10 === 0 && number !== 10) { + return number + ' שנה'; + } + return number + ' שנים'; + }, + }, + meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i, + isPM: function (input) { + return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 5) { + return 'לפנות בוקר'; + } else if (hour < 10) { + return 'בבוקר'; + } else if (hour < 12) { + return isLower ? 'לפנה"צ' : 'לפני הצהריים'; + } else if (hour < 18) { + return isLower ? 'אחה"צ' : 'אחרי הצהריים'; + } else { + return 'בערב'; + } + }, + }); + + //! moment.js locale configuration + + var symbolMap$7 = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०', + }, + numberMap$6 = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0', + }; + + moment.defineLocale('hi', { + months: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split( + '_' + ), + monthsShort: 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'), + weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'), + weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'), + longDateFormat: { + LT: 'A h:mm बजे', + LTS: 'A h:mm:ss बजे', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm बजे', + LLLL: 'dddd, D MMMM YYYY, A h:mm बजे', + }, + calendar: { + sameDay: '[आज] LT', + nextDay: '[कल] LT', + nextWeek: 'dddd, LT', + lastDay: '[कल] LT', + lastWeek: '[पिछले] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s में', + past: '%s पहले', + s: 'कुछ ही क्षण', + ss: '%d सेकंड', + m: 'एक मिनट', + mm: '%d मिनट', + h: 'एक घंटा', + hh: '%d घंटे', + d: 'एक दिन', + dd: '%d दिन', + M: 'एक महीने', + MM: '%d महीने', + y: 'एक वर्ष', + yy: '%d वर्ष', + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap$6[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$7[match]; + }); + }, + // Hindi notation for meridiems are quite fuzzy in practice. While there exists + // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi. + meridiemParse: /रात|सुबह|दोपहर|शाम/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'रात') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'सुबह') { + return hour; + } else if (meridiem === 'दोपहर') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'शाम') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'रात'; + } else if (hour < 10) { + return 'सुबह'; + } else if (hour < 17) { + return 'दोपहर'; + } else if (hour < 20) { + return 'शाम'; + } else { + return 'रात'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function translate$3(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'ss': + if (number === 1) { + result += 'sekunda'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sekunde'; + } else { + result += 'sekundi'; + } + return result; + case 'm': + return withoutSuffix ? 'jedna minuta' : 'jedne minute'; + case 'mm': + if (number === 1) { + result += 'minuta'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'minute'; + } else { + result += 'minuta'; + } + return result; + case 'h': + return withoutSuffix ? 'jedan sat' : 'jednog sata'; + case 'hh': + if (number === 1) { + result += 'sat'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sata'; + } else { + result += 'sati'; + } + return result; + case 'dd': + if (number === 1) { + result += 'dan'; + } else { + result += 'dana'; + } + return result; + case 'MM': + if (number === 1) { + result += 'mjesec'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'mjeseca'; + } else { + result += 'mjeseci'; + } + return result; + case 'yy': + if (number === 1) { + result += 'godina'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'godine'; + } else { + result += 'godina'; + } + return result; + } + } + + moment.defineLocale('hr', { + months: { + format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split( + '_' + ), + standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split( + '_' + ), + }, + monthsShort: 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split( + '_' + ), + weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'Do MMMM YYYY', + LLL: 'Do MMMM YYYY H:mm', + LLLL: 'dddd, Do MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sutra u] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay: '[jučer u] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[prošlu] [nedjelju] [u] LT'; + case 3: + return '[prošlu] [srijedu] [u] LT'; + case 6: + return '[prošle] [subote] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prošli] dddd [u] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: 'prije %s', + s: 'par sekundi', + ss: translate$3, + m: translate$3, + mm: translate$3, + h: translate$3, + hh: translate$3, + d: 'dan', + dd: translate$3, + M: 'mjesec', + MM: translate$3, + y: 'godinu', + yy: translate$3, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split( + ' ' + ); + function translate$4(number, withoutSuffix, key, isFuture) { + var num = number; + switch (key) { + case 's': + return isFuture || withoutSuffix + ? 'néhány másodperc' + : 'néhány másodperce'; + case 'ss': + return num + (isFuture || withoutSuffix) + ? ' másodperc' + : ' másodperce'; + case 'm': + return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce'); + case 'mm': + return num + (isFuture || withoutSuffix ? ' perc' : ' perce'); + case 'h': + return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája'); + case 'hh': + return num + (isFuture || withoutSuffix ? ' óra' : ' órája'); + case 'd': + return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja'); + case 'dd': + return num + (isFuture || withoutSuffix ? ' nap' : ' napja'); + case 'M': + return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); + case 'MM': + return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); + case 'y': + return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve'); + case 'yy': + return num + (isFuture || withoutSuffix ? ' év' : ' éve'); + } + return ''; + } + function week(isFuture) { + return ( + (isFuture ? '' : '[múlt] ') + + '[' + + weekEndings[this.day()] + + '] LT[-kor]' + ); + } + + moment.defineLocale('hu', { + months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split( + '_' + ), + monthsShort: 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split( + '_' + ), + weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'), + weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'), + weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'YYYY.MM.DD.', + LL: 'YYYY. MMMM D.', + LLL: 'YYYY. MMMM D. H:mm', + LLLL: 'YYYY. MMMM D., dddd H:mm', + }, + meridiemParse: /de|du/i, + isPM: function (input) { + return input.charAt(1).toLowerCase() === 'u'; + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 12) { + return isLower === true ? 'de' : 'DE'; + } else { + return isLower === true ? 'du' : 'DU'; + } + }, + calendar: { + sameDay: '[ma] LT[-kor]', + nextDay: '[holnap] LT[-kor]', + nextWeek: function () { + return week.call(this, true); + }, + lastDay: '[tegnap] LT[-kor]', + lastWeek: function () { + return week.call(this, false); + }, + sameElse: 'L', + }, + relativeTime: { + future: '%s múlva', + past: '%s', + s: translate$4, + ss: translate$4, + m: translate$4, + mm: translate$4, + h: translate$4, + hh: translate$4, + d: translate$4, + dd: translate$4, + M: translate$4, + MM: translate$4, + y: translate$4, + yy: translate$4, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('hy-am', { + months: { + format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split( + '_' + ), + standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split( + '_' + ), + }, + monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'), + weekdays: 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split( + '_' + ), + weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'), + weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY թ.', + LLL: 'D MMMM YYYY թ., HH:mm', + LLLL: 'dddd, D MMMM YYYY թ., HH:mm', + }, + calendar: { + sameDay: '[այսօր] LT', + nextDay: '[վաղը] LT', + lastDay: '[երեկ] LT', + nextWeek: function () { + return 'dddd [օրը ժամը] LT'; + }, + lastWeek: function () { + return '[անցած] dddd [օրը ժամը] LT'; + }, + sameElse: 'L', + }, + relativeTime: { + future: '%s հետո', + past: '%s առաջ', + s: 'մի քանի վայրկյան', + ss: '%d վայրկյան', + m: 'րոպե', + mm: '%d րոպե', + h: 'ժամ', + hh: '%d ժամ', + d: 'օր', + dd: '%d օր', + M: 'ամիս', + MM: '%d ամիս', + y: 'տարի', + yy: '%d տարի', + }, + meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/, + isPM: function (input) { + return /^(ցերեկվա|երեկոյան)$/.test(input); + }, + meridiem: function (hour) { + if (hour < 4) { + return 'գիշերվա'; + } else if (hour < 12) { + return 'առավոտվա'; + } else if (hour < 17) { + return 'ցերեկվա'; + } else { + return 'երեկոյան'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/, + ordinal: function (number, period) { + switch (period) { + case 'DDD': + case 'w': + case 'W': + case 'DDDo': + if (number === 1) { + return number + '-ին'; + } + return number + '-րդ'; + default: + return number; + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('id', { + months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'), + weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'), + weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'), + weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [pukul] HH.mm', + LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm', + }, + meridiemParse: /pagi|siang|sore|malam/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'siang') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'sore' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'siang'; + } else if (hours < 19) { + return 'sore'; + } else { + return 'malam'; + } + }, + calendar: { + sameDay: '[Hari ini pukul] LT', + nextDay: '[Besok pukul] LT', + nextWeek: 'dddd [pukul] LT', + lastDay: '[Kemarin pukul] LT', + lastWeek: 'dddd [lalu pukul] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dalam %s', + past: '%s yang lalu', + s: 'beberapa detik', + ss: '%d detik', + m: 'semenit', + mm: '%d menit', + h: 'sejam', + hh: '%d jam', + d: 'sehari', + dd: '%d hari', + M: 'sebulan', + MM: '%d bulan', + y: 'setahun', + yy: '%d tahun', + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function plural$2(n) { + if (n % 100 === 11) { + return true; + } else if (n % 10 === 1) { + return false; + } + return true; + } + function translate$5(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': + return withoutSuffix || isFuture + ? 'nokkrar sekúndur' + : 'nokkrum sekúndum'; + case 'ss': + if (plural$2(number)) { + return ( + result + + (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum') + ); + } + return result + 'sekúnda'; + case 'm': + return withoutSuffix ? 'mínúta' : 'mínútu'; + case 'mm': + if (plural$2(number)) { + return ( + result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum') + ); + } else if (withoutSuffix) { + return result + 'mínúta'; + } + return result + 'mínútu'; + case 'hh': + if (plural$2(number)) { + return ( + result + + (withoutSuffix || isFuture + ? 'klukkustundir' + : 'klukkustundum') + ); + } + return result + 'klukkustund'; + case 'd': + if (withoutSuffix) { + return 'dagur'; + } + return isFuture ? 'dag' : 'degi'; + case 'dd': + if (plural$2(number)) { + if (withoutSuffix) { + return result + 'dagar'; + } + return result + (isFuture ? 'daga' : 'dögum'); + } else if (withoutSuffix) { + return result + 'dagur'; + } + return result + (isFuture ? 'dag' : 'degi'); + case 'M': + if (withoutSuffix) { + return 'mánuður'; + } + return isFuture ? 'mánuð' : 'mánuði'; + case 'MM': + if (plural$2(number)) { + if (withoutSuffix) { + return result + 'mánuðir'; + } + return result + (isFuture ? 'mánuði' : 'mánuðum'); + } else if (withoutSuffix) { + return result + 'mánuður'; + } + return result + (isFuture ? 'mánuð' : 'mánuði'); + case 'y': + return withoutSuffix || isFuture ? 'ár' : 'ári'; + case 'yy': + if (plural$2(number)) { + return result + (withoutSuffix || isFuture ? 'ár' : 'árum'); + } + return result + (withoutSuffix || isFuture ? 'ár' : 'ári'); + } + } + + moment.defineLocale('is', { + months: 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split( + '_' + ), + monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'), + weekdays: 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split( + '_' + ), + weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'), + weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY [kl.] H:mm', + LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm', + }, + calendar: { + sameDay: '[í dag kl.] LT', + nextDay: '[á morgun kl.] LT', + nextWeek: 'dddd [kl.] LT', + lastDay: '[í gær kl.] LT', + lastWeek: '[síðasta] dddd [kl.] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'eftir %s', + past: 'fyrir %s síðan', + s: translate$5, + ss: translate$5, + m: translate$5, + mm: translate$5, + h: 'klukkustund', + hh: translate$5, + d: translate$5, + dd: translate$5, + M: translate$5, + MM: translate$5, + y: translate$5, + yy: translate$5, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('it-ch', { + months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split( + '_' + ), + monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'), + weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split( + '_' + ), + weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'), + weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Oggi alle] LT', + nextDay: '[Domani alle] LT', + nextWeek: 'dddd [alle] LT', + lastDay: '[Ieri alle] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[la scorsa] dddd [alle] LT'; + default: + return '[lo scorso] dddd [alle] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: function (s) { + return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s; + }, + past: '%s fa', + s: 'alcuni secondi', + ss: '%d secondi', + m: 'un minuto', + mm: '%d minuti', + h: "un'ora", + hh: '%d ore', + d: 'un giorno', + dd: '%d giorni', + M: 'un mese', + MM: '%d mesi', + y: 'un anno', + yy: '%d anni', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('it', { + months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split( + '_' + ), + monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'), + weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split( + '_' + ), + weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'), + weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: function () { + return ( + '[Oggi a' + + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + + ']LT' + ); + }, + nextDay: function () { + return ( + '[Domani a' + + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + + ']LT' + ); + }, + nextWeek: function () { + return ( + 'dddd [a' + + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + + ']LT' + ); + }, + lastDay: function () { + return ( + '[Ieri a' + + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + + ']LT' + ); + }, + lastWeek: function () { + switch (this.day()) { + case 0: + return ( + '[La scorsa] dddd [a' + + (this.hours() > 1 + ? 'lle ' + : this.hours() === 0 + ? ' ' + : "ll'") + + ']LT' + ); + default: + return ( + '[Lo scorso] dddd [a' + + (this.hours() > 1 + ? 'lle ' + : this.hours() === 0 + ? ' ' + : "ll'") + + ']LT' + ); + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'tra %s', + past: '%s fa', + s: 'alcuni secondi', + ss: '%d secondi', + m: 'un minuto', + mm: '%d minuti', + h: "un'ora", + hh: '%d ore', + d: 'un giorno', + dd: '%d giorni', + M: 'un mese', + MM: '%d mesi', + y: 'un anno', + yy: '%d anni', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('ja', { + eras: [ + { + since: '2019-05-01', + offset: 1, + name: '令和', + narrow: '㋿', + abbr: 'R', + }, + { + since: '1989-01-08', + until: '2019-04-30', + offset: 1, + name: '平成', + narrow: '㍻', + abbr: 'H', + }, + { + since: '1926-12-25', + until: '1989-01-07', + offset: 1, + name: '昭和', + narrow: '㍼', + abbr: 'S', + }, + { + since: '1912-07-30', + until: '1926-12-24', + offset: 1, + name: '大正', + narrow: '㍽', + abbr: 'T', + }, + { + since: '1873-01-01', + until: '1912-07-29', + offset: 6, + name: '明治', + narrow: '㍾', + abbr: 'M', + }, + { + since: '0001-01-01', + until: '1873-12-31', + offset: 1, + name: '西暦', + narrow: 'AD', + abbr: 'AD', + }, + { + since: '0000-12-31', + until: -Infinity, + offset: 1, + name: '紀元前', + narrow: 'BC', + abbr: 'BC', + }, + ], + eraYearOrdinalRegex: /(元|\d+)年/, + eraYearOrdinalParse: function (input, match) { + return match[1] === '元' ? 1 : parseInt(match[1] || input, 10); + }, + months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split( + '_' + ), + weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'), + weekdaysShort: '日_月_火_水_木_金_土'.split('_'), + weekdaysMin: '日_月_火_水_木_金_土'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY年M月D日', + LLL: 'YYYY年M月D日 HH:mm', + LLLL: 'YYYY年M月D日 dddd HH:mm', + l: 'YYYY/MM/DD', + ll: 'YYYY年M月D日', + lll: 'YYYY年M月D日 HH:mm', + llll: 'YYYY年M月D日(ddd) HH:mm', + }, + meridiemParse: /午前|午後/i, + isPM: function (input) { + return input === '午後'; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return '午前'; + } else { + return '午後'; + } + }, + calendar: { + sameDay: '[今日] LT', + nextDay: '[明日] LT', + nextWeek: function (now) { + if (now.week() !== this.week()) { + return '[来週]dddd LT'; + } else { + return 'dddd LT'; + } + }, + lastDay: '[昨日] LT', + lastWeek: function (now) { + if (this.week() !== now.week()) { + return '[先週]dddd LT'; + } else { + return 'dddd LT'; + } + }, + sameElse: 'L', + }, + dayOfMonthOrdinalParse: /\d{1,2}日/, + ordinal: function (number, period) { + switch (period) { + case 'y': + return number === 1 ? '元年' : number + '年'; + case 'd': + case 'D': + case 'DDD': + return number + '日'; + default: + return number; + } + }, + relativeTime: { + future: '%s後', + past: '%s前', + s: '数秒', + ss: '%d秒', + m: '1分', + mm: '%d分', + h: '1時間', + hh: '%d時間', + d: '1日', + dd: '%d日', + M: '1ヶ月', + MM: '%dヶ月', + y: '1年', + yy: '%d年', + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('jv', { + months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'), + weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'), + weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'), + weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'), + longDateFormat: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [pukul] HH.mm', + LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm', + }, + meridiemParse: /enjing|siyang|sonten|ndalu/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'enjing') { + return hour; + } else if (meridiem === 'siyang') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'sonten' || meridiem === 'ndalu') { + return hour + 12; + } + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 11) { + return 'enjing'; + } else if (hours < 15) { + return 'siyang'; + } else if (hours < 19) { + return 'sonten'; + } else { + return 'ndalu'; + } + }, + calendar: { + sameDay: '[Dinten puniko pukul] LT', + nextDay: '[Mbenjang pukul] LT', + nextWeek: 'dddd [pukul] LT', + lastDay: '[Kala wingi pukul] LT', + lastWeek: 'dddd [kepengker pukul] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'wonten ing %s', + past: '%s ingkang kepengker', + s: 'sawetawis detik', + ss: '%d detik', + m: 'setunggal menit', + mm: '%d menit', + h: 'setunggal jam', + hh: '%d jam', + d: 'sedinten', + dd: '%d dinten', + M: 'sewulan', + MM: '%d wulan', + y: 'setaun', + yy: '%d taun', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('ka', { + months: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split( + '_' + ), + monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'), + weekdays: { + standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split( + '_' + ), + format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split( + '_' + ), + isFormat: /(წინა|შემდეგ)/, + }, + weekdaysShort: 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'), + weekdaysMin: 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[დღეს] LT[-ზე]', + nextDay: '[ხვალ] LT[-ზე]', + lastDay: '[გუშინ] LT[-ზე]', + nextWeek: '[შემდეგ] dddd LT[-ზე]', + lastWeek: '[წინა] dddd LT-ზე', + sameElse: 'L', + }, + relativeTime: { + future: function (s) { + return s.replace(/(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/, function ( + $0, + $1, + $2 + ) { + return $2 === 'ი' ? $1 + 'ში' : $1 + $2 + 'ში'; + }); + }, + past: function (s) { + if (/(წამი|წუთი|საათი|დღე|თვე)/.test(s)) { + return s.replace(/(ი|ე)$/, 'ის წინ'); + } + if (/წელი/.test(s)) { + return s.replace(/წელი$/, 'წლის წინ'); + } + return s; + }, + s: 'რამდენიმე წამი', + ss: '%d წამი', + m: 'წუთი', + mm: '%d წუთი', + h: 'საათი', + hh: '%d საათი', + d: 'დღე', + dd: '%d დღე', + M: 'თვე', + MM: '%d თვე', + y: 'წელი', + yy: '%d წელი', + }, + dayOfMonthOrdinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/, + ordinal: function (number) { + if (number === 0) { + return number; + } + if (number === 1) { + return number + '-ლი'; + } + if ( + number < 20 || + (number <= 100 && number % 20 === 0) || + number % 100 === 0 + ) { + return 'მე-' + number; + } + return number + '-ე'; + }, + week: { + dow: 1, + doy: 7, + }, + }); + + //! moment.js locale configuration + + var suffixes$1 = { + 0: '-ші', + 1: '-ші', + 2: '-ші', + 3: '-ші', + 4: '-ші', + 5: '-ші', + 6: '-шы', + 7: '-ші', + 8: '-ші', + 9: '-шы', + 10: '-шы', + 20: '-шы', + 30: '-шы', + 40: '-шы', + 50: '-ші', + 60: '-шы', + 70: '-ші', + 80: '-ші', + 90: '-шы', + 100: '-ші', + }; + + moment.defineLocale('kk', { + months: 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split( + '_' + ), + monthsShort: 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'), + weekdays: 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split( + '_' + ), + weekdaysShort: 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'), + weekdaysMin: 'жк_дй_сй_ср_бй_жм_сн'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Бүгін сағат] LT', + nextDay: '[Ертең сағат] LT', + nextWeek: 'dddd [сағат] LT', + lastDay: '[Кеше сағат] LT', + lastWeek: '[Өткен аптаның] dddd [сағат] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s ішінде', + past: '%s бұрын', + s: 'бірнеше секунд', + ss: '%d секунд', + m: 'бір минут', + mm: '%d минут', + h: 'бір сағат', + hh: '%d сағат', + d: 'бір күн', + dd: '%d күн', + M: 'бір ай', + MM: '%d ай', + y: 'бір жыл', + yy: '%d жыл', + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ші|шы)/, + ordinal: function (number) { + var a = number % 10, + b = number >= 100 ? 100 : null; + return number + (suffixes$1[number] || suffixes$1[a] || suffixes$1[b]); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$8 = { + '1': '១', + '2': '២', + '3': '៣', + '4': '៤', + '5': '៥', + '6': '៦', + '7': '៧', + '8': '៨', + '9': '៩', + '0': '០', + }, + numberMap$7 = { + '១': '1', + '២': '2', + '៣': '3', + '៤': '4', + '៥': '5', + '៦': '6', + '៧': '7', + '៨': '8', + '៩': '9', + '០': '0', + }; + + moment.defineLocale('km', { + months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split( + '_' + ), + monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split( + '_' + ), + weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'), + weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'), + weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + meridiemParse: /ព្រឹក|ល្ងាច/, + isPM: function (input) { + return input === 'ល្ងាច'; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ព្រឹក'; + } else { + return 'ល្ងាច'; + } + }, + calendar: { + sameDay: '[ថ្ងៃនេះ ម៉ោង] LT', + nextDay: '[ស្អែក ម៉ោង] LT', + nextWeek: 'dddd [ម៉ោង] LT', + lastDay: '[ម្សិលមិញ ម៉ោង] LT', + lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%sទៀត', + past: '%sមុន', + s: 'ប៉ុន្មានវិនាទី', + ss: '%d វិនាទី', + m: 'មួយនាទី', + mm: '%d នាទី', + h: 'មួយម៉ោង', + hh: '%d ម៉ោង', + d: 'មួយថ្ងៃ', + dd: '%d ថ្ងៃ', + M: 'មួយខែ', + MM: '%d ខែ', + y: 'មួយឆ្នាំ', + yy: '%d ឆ្នាំ', + }, + dayOfMonthOrdinalParse: /ទី\d{1,2}/, + ordinal: 'ទី%d', + preparse: function (string) { + return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) { + return numberMap$7[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$8[match]; + }); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$9 = { + '1': '೧', + '2': '೨', + '3': '೩', + '4': '೪', + '5': '೫', + '6': '೬', + '7': '೭', + '8': '೮', + '9': '೯', + '0': '೦', + }, + numberMap$8 = { + '೧': '1', + '೨': '2', + '೩': '3', + '೪': '4', + '೫': '5', + '೬': '6', + '೭': '7', + '೮': '8', + '೯': '9', + '೦': '0', + }; + + moment.defineLocale('kn', { + months: 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split( + '_' + ), + monthsShort: 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split( + '_' + ), + weekdaysShort: 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'), + weekdaysMin: 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'), + longDateFormat: { + LT: 'A h:mm', + LTS: 'A h:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm', + LLLL: 'dddd, D MMMM YYYY, A h:mm', + }, + calendar: { + sameDay: '[ಇಂದು] LT', + nextDay: '[ನಾಳೆ] LT', + nextWeek: 'dddd, LT', + lastDay: '[ನಿನ್ನೆ] LT', + lastWeek: '[ಕೊನೆಯ] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s ನಂತರ', + past: '%s ಹಿಂದೆ', + s: 'ಕೆಲವು ಕ್ಷಣಗಳು', + ss: '%d ಸೆಕೆಂಡುಗಳು', + m: 'ಒಂದು ನಿಮಿಷ', + mm: '%d ನಿಮಿಷ', + h: 'ಒಂದು ಗಂಟೆ', + hh: '%d ಗಂಟೆ', + d: 'ಒಂದು ದಿನ', + dd: '%d ದಿನ', + M: 'ಒಂದು ತಿಂಗಳು', + MM: '%d ತಿಂಗಳು', + y: 'ಒಂದು ವರ್ಷ', + yy: '%d ವರ್ಷ', + }, + preparse: function (string) { + return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) { + return numberMap$8[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$9[match]; + }); + }, + meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ರಾತ್ರಿ') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') { + return hour; + } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'ಸಂಜೆ') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'ರಾತ್ರಿ'; + } else if (hour < 10) { + return 'ಬೆಳಿಗ್ಗೆ'; + } else if (hour < 17) { + return 'ಮಧ್ಯಾಹ್ನ'; + } else if (hour < 20) { + return 'ಸಂಜೆ'; + } else { + return 'ರಾತ್ರಿ'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}(ನೇ)/, + ordinal: function (number) { + return number + 'ನೇ'; + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('ko', { + months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'), + monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split( + '_' + ), + weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'), + weekdaysShort: '일_월_화_수_목_금_토'.split('_'), + weekdaysMin: '일_월_화_수_목_금_토'.split('_'), + longDateFormat: { + LT: 'A h:mm', + LTS: 'A h:mm:ss', + L: 'YYYY.MM.DD.', + LL: 'YYYY년 MMMM D일', + LLL: 'YYYY년 MMMM D일 A h:mm', + LLLL: 'YYYY년 MMMM D일 dddd A h:mm', + l: 'YYYY.MM.DD.', + ll: 'YYYY년 MMMM D일', + lll: 'YYYY년 MMMM D일 A h:mm', + llll: 'YYYY년 MMMM D일 dddd A h:mm', + }, + calendar: { + sameDay: '오늘 LT', + nextDay: '내일 LT', + nextWeek: 'dddd LT', + lastDay: '어제 LT', + lastWeek: '지난주 dddd LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s 후', + past: '%s 전', + s: '몇 초', + ss: '%d초', + m: '1분', + mm: '%d분', + h: '한 시간', + hh: '%d시간', + d: '하루', + dd: '%d일', + M: '한 달', + MM: '%d달', + y: '일 년', + yy: '%d년', + }, + dayOfMonthOrdinalParse: /\d{1,2}(일|월|주)/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '일'; + case 'M': + return number + '월'; + case 'w': + case 'W': + return number + '주'; + default: + return number; + } + }, + meridiemParse: /오전|오후/, + isPM: function (token) { + return token === '오후'; + }, + meridiem: function (hour, minute, isUpper) { + return hour < 12 ? '오전' : '오후'; + }, + }); + + //! moment.js locale configuration + + var symbolMap$a = { + '1': '١', + '2': '٢', + '3': '٣', + '4': '٤', + '5': '٥', + '6': '٦', + '7': '٧', + '8': '٨', + '9': '٩', + '0': '٠', + }, + numberMap$9 = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0', + }, + months$7 = [ + 'کانونی دووەم', + 'شوبات', + 'ئازار', + 'نیسان', + 'ئایار', + 'حوزەیران', + 'تەمموز', + 'ئاب', + 'ئەیلوول', + 'تشرینی یەكەم', + 'تشرینی دووەم', + 'كانونی یەکەم', + ]; + + moment.defineLocale('ku', { + months: months$7, + monthsShort: months$7, + weekdays: 'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split( + '_' + ), + weekdaysShort: 'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split( + '_' + ), + weekdaysMin: 'ی_د_س_چ_پ_ه_ش'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + meridiemParse: /ئێواره‌|به‌یانی/, + isPM: function (input) { + return /ئێواره‌/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'به‌یانی'; + } else { + return 'ئێواره‌'; + } + }, + calendar: { + sameDay: '[ئه‌مرۆ كاتژمێر] LT', + nextDay: '[به‌یانی كاتژمێر] LT', + nextWeek: 'dddd [كاتژمێر] LT', + lastDay: '[دوێنێ كاتژمێر] LT', + lastWeek: 'dddd [كاتژمێر] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'له‌ %s', + past: '%s', + s: 'چه‌ند چركه‌یه‌ك', + ss: 'چركه‌ %d', + m: 'یه‌ك خوله‌ك', + mm: '%d خوله‌ك', + h: 'یه‌ك كاتژمێر', + hh: '%d كاتژمێر', + d: 'یه‌ك ڕۆژ', + dd: '%d ڕۆژ', + M: 'یه‌ك مانگ', + MM: '%d مانگ', + y: 'یه‌ك ساڵ', + yy: '%d ساڵ', + }, + preparse: function (string) { + return string + .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { + return numberMap$9[match]; + }) + .replace(/،/g, ','); + }, + postformat: function (string) { + return string + .replace(/\d/g, function (match) { + return symbolMap$a[match]; + }) + .replace(/,/g, '،'); + }, + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var suffixes$2 = { + 0: '-чү', + 1: '-чи', + 2: '-чи', + 3: '-чү', + 4: '-чү', + 5: '-чи', + 6: '-чы', + 7: '-чи', + 8: '-чи', + 9: '-чу', + 10: '-чу', + 20: '-чы', + 30: '-чу', + 40: '-чы', + 50: '-чү', + 60: '-чы', + 70: '-чи', + 80: '-чи', + 90: '-чу', + 100: '-чү', + }; + + moment.defineLocale('ky', { + months: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split( + '_' + ), + monthsShort: 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split( + '_' + ), + weekdays: 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split( + '_' + ), + weekdaysShort: 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'), + weekdaysMin: 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Бүгүн саат] LT', + nextDay: '[Эртең саат] LT', + nextWeek: 'dddd [саат] LT', + lastDay: '[Кечээ саат] LT', + lastWeek: '[Өткөн аптанын] dddd [күнү] [саат] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s ичинде', + past: '%s мурун', + s: 'бирнече секунд', + ss: '%d секунд', + m: 'бир мүнөт', + mm: '%d мүнөт', + h: 'бир саат', + hh: '%d саат', + d: 'бир күн', + dd: '%d күн', + M: 'бир ай', + MM: '%d ай', + y: 'бир жыл', + yy: '%d жыл', + }, + dayOfMonthOrdinalParse: /\d{1,2}-(чи|чы|чү|чу)/, + ordinal: function (number) { + var a = number % 10, + b = number >= 100 ? 100 : null; + return number + (suffixes$2[number] || suffixes$2[a] || suffixes$2[b]); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function processRelativeTime$6(number, withoutSuffix, key, isFuture) { + var format = { + m: ['eng Minutt', 'enger Minutt'], + h: ['eng Stonn', 'enger Stonn'], + d: ['een Dag', 'engem Dag'], + M: ['ee Mount', 'engem Mount'], + y: ['ee Joer', 'engem Joer'], + }; + return withoutSuffix ? format[key][0] : format[key][1]; + } + function processFutureTime(string) { + var number = string.substr(0, string.indexOf(' ')); + if (eifelerRegelAppliesToNumber(number)) { + return 'a ' + string; + } + return 'an ' + string; + } + function processPastTime(string) { + var number = string.substr(0, string.indexOf(' ')); + if (eifelerRegelAppliesToNumber(number)) { + return 'viru ' + string; + } + return 'virun ' + string; + } + /** + * Returns true if the word before the given number loses the '-n' ending. + * e.g. 'an 10 Deeg' but 'a 5 Deeg' + * + * @param number {integer} + * @returns {boolean} + */ + function eifelerRegelAppliesToNumber(number) { + number = parseInt(number, 10); + if (isNaN(number)) { + return false; + } + if (number < 0) { + // Negative Number --> always true + return true; + } else if (number < 10) { + // Only 1 digit + if (4 <= number && number <= 7) { + return true; + } + return false; + } else if (number < 100) { + // 2 digits + var lastDigit = number % 10, + firstDigit = number / 10; + if (lastDigit === 0) { + return eifelerRegelAppliesToNumber(firstDigit); + } + return eifelerRegelAppliesToNumber(lastDigit); + } else if (number < 10000) { + // 3 or 4 digits --> recursively check first digit + while (number >= 10) { + number = number / 10; + } + return eifelerRegelAppliesToNumber(number); + } else { + // Anything larger than 4 digits: recursively check first n-3 digits + number = number / 1000; + return eifelerRegelAppliesToNumber(number); + } + } + + moment.defineLocale('lb', { + months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split( + '_' + ), + monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split( + '_' + ), + weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'), + weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm [Auer]', + LTS: 'H:mm:ss [Auer]', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm [Auer]', + LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]', + }, + calendar: { + sameDay: '[Haut um] LT', + sameElse: 'L', + nextDay: '[Muer um] LT', + nextWeek: 'dddd [um] LT', + lastDay: '[Gëschter um] LT', + lastWeek: function () { + // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule + switch (this.day()) { + case 2: + case 4: + return '[Leschten] dddd [um] LT'; + default: + return '[Leschte] dddd [um] LT'; + } + }, + }, + relativeTime: { + future: processFutureTime, + past: processPastTime, + s: 'e puer Sekonnen', + ss: '%d Sekonnen', + m: processRelativeTime$6, + mm: '%d Minutten', + h: processRelativeTime$6, + hh: '%d Stonnen', + d: processRelativeTime$6, + dd: '%d Deeg', + M: processRelativeTime$6, + MM: '%d Méint', + y: processRelativeTime$6, + yy: '%d Joer', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('lo', { + months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split( + '_' + ), + monthsShort: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split( + '_' + ), + weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'), + weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'), + weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'ວັນdddd D MMMM YYYY HH:mm', + }, + meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/, + isPM: function (input) { + return input === 'ຕອນແລງ'; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ຕອນເຊົ້າ'; + } else { + return 'ຕອນແລງ'; + } + }, + calendar: { + sameDay: '[ມື້ນີ້ເວລາ] LT', + nextDay: '[ມື້ອື່ນເວລາ] LT', + nextWeek: '[ວັນ]dddd[ໜ້າເວລາ] LT', + lastDay: '[ມື້ວານນີ້ເວລາ] LT', + lastWeek: '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'ອີກ %s', + past: '%sຜ່ານມາ', + s: 'ບໍ່ເທົ່າໃດວິນາທີ', + ss: '%d ວິນາທີ', + m: '1 ນາທີ', + mm: '%d ນາທີ', + h: '1 ຊົ່ວໂມງ', + hh: '%d ຊົ່ວໂມງ', + d: '1 ມື້', + dd: '%d ມື້', + M: '1 ເດືອນ', + MM: '%d ເດືອນ', + y: '1 ປີ', + yy: '%d ປີ', + }, + dayOfMonthOrdinalParse: /(ທີ່)\d{1,2}/, + ordinal: function (number) { + return 'ທີ່' + number; + }, + }); + + //! moment.js locale configuration + + var units = { + ss: 'sekundė_sekundžių_sekundes', + m: 'minutė_minutės_minutę', + mm: 'minutės_minučių_minutes', + h: 'valanda_valandos_valandą', + hh: 'valandos_valandų_valandas', + d: 'diena_dienos_dieną', + dd: 'dienos_dienų_dienas', + M: 'mėnuo_mėnesio_mėnesį', + MM: 'mėnesiai_mėnesių_mėnesius', + y: 'metai_metų_metus', + yy: 'metai_metų_metus', + }; + function translateSeconds(number, withoutSuffix, key, isFuture) { + if (withoutSuffix) { + return 'kelios sekundės'; + } else { + return isFuture ? 'kelių sekundžių' : 'kelias sekundes'; + } + } + function translateSingular(number, withoutSuffix, key, isFuture) { + return withoutSuffix + ? forms(key)[0] + : isFuture + ? forms(key)[1] + : forms(key)[2]; + } + function special(number) { + return number % 10 === 0 || (number > 10 && number < 20); + } + function forms(key) { + return units[key].split('_'); + } + function translate$6(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + if (number === 1) { + return ( + result + translateSingular(number, withoutSuffix, key[0], isFuture) + ); + } else if (withoutSuffix) { + return result + (special(number) ? forms(key)[1] : forms(key)[0]); + } else { + if (isFuture) { + return result + forms(key)[1]; + } else { + return result + (special(number) ? forms(key)[1] : forms(key)[2]); + } + } + } + moment.defineLocale('lt', { + months: { + format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split( + '_' + ), + standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split( + '_' + ), + isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/, + }, + monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'), + weekdays: { + format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split( + '_' + ), + standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split( + '_' + ), + isFormat: /dddd HH:mm/, + }, + weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'), + weekdaysMin: 'S_P_A_T_K_Pn_Š'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'YYYY [m.] MMMM D [d.]', + LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]', + LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]', + l: 'YYYY-MM-DD', + ll: 'YYYY [m.] MMMM D [d.]', + lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]', + llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]', + }, + calendar: { + sameDay: '[Šiandien] LT', + nextDay: '[Rytoj] LT', + nextWeek: 'dddd LT', + lastDay: '[Vakar] LT', + lastWeek: '[Praėjusį] dddd LT', + sameElse: 'L', + }, + relativeTime: { + future: 'po %s', + past: 'prieš %s', + s: translateSeconds, + ss: translate$6, + m: translateSingular, + mm: translate$6, + h: translateSingular, + hh: translate$6, + d: translateSingular, + dd: translate$6, + M: translateSingular, + MM: translate$6, + y: translateSingular, + yy: translate$6, + }, + dayOfMonthOrdinalParse: /\d{1,2}-oji/, + ordinal: function (number) { + return number + '-oji'; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var units$1 = { + ss: 'sekundes_sekundēm_sekunde_sekundes'.split('_'), + m: 'minūtes_minūtēm_minūte_minūtes'.split('_'), + mm: 'minūtes_minūtēm_minūte_minūtes'.split('_'), + h: 'stundas_stundām_stunda_stundas'.split('_'), + hh: 'stundas_stundām_stunda_stundas'.split('_'), + d: 'dienas_dienām_diena_dienas'.split('_'), + dd: 'dienas_dienām_diena_dienas'.split('_'), + M: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'), + MM: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'), + y: 'gada_gadiem_gads_gadi'.split('_'), + yy: 'gada_gadiem_gads_gadi'.split('_'), + }; + /** + * @param withoutSuffix boolean true = a length of time; false = before/after a period of time. + */ + function format(forms, number, withoutSuffix) { + if (withoutSuffix) { + // E.g. "21 minūte", "3 minūtes". + return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3]; + } else { + // E.g. "21 minūtes" as in "pēc 21 minūtes". + // E.g. "3 minūtēm" as in "pēc 3 minūtēm". + return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1]; + } + } + function relativeTimeWithPlural$1(number, withoutSuffix, key) { + return number + ' ' + format(units$1[key], number, withoutSuffix); + } + function relativeTimeWithSingular(number, withoutSuffix, key) { + return format(units$1[key], number, withoutSuffix); + } + function relativeSeconds(number, withoutSuffix) { + return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm'; + } + + moment.defineLocale('lv', { + months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split( + '_' + ), + monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'), + weekdays: 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split( + '_' + ), + weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'), + weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY.', + LL: 'YYYY. [gada] D. MMMM', + LLL: 'YYYY. [gada] D. MMMM, HH:mm', + LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm', + }, + calendar: { + sameDay: '[Šodien pulksten] LT', + nextDay: '[Rīt pulksten] LT', + nextWeek: 'dddd [pulksten] LT', + lastDay: '[Vakar pulksten] LT', + lastWeek: '[Pagājušā] dddd [pulksten] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'pēc %s', + past: 'pirms %s', + s: relativeSeconds, + ss: relativeTimeWithPlural$1, + m: relativeTimeWithSingular, + mm: relativeTimeWithPlural$1, + h: relativeTimeWithSingular, + hh: relativeTimeWithPlural$1, + d: relativeTimeWithSingular, + dd: relativeTimeWithPlural$1, + M: relativeTimeWithSingular, + MM: relativeTimeWithPlural$1, + y: relativeTimeWithSingular, + yy: relativeTimeWithPlural$1, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var translator = { + words: { + //Different grammatical cases + ss: ['sekund', 'sekunda', 'sekundi'], + m: ['jedan minut', 'jednog minuta'], + mm: ['minut', 'minuta', 'minuta'], + h: ['jedan sat', 'jednog sata'], + hh: ['sat', 'sata', 'sati'], + dd: ['dan', 'dana', 'dana'], + MM: ['mjesec', 'mjeseca', 'mjeseci'], + yy: ['godina', 'godine', 'godina'], + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 + ? wordKey[0] + : number >= 2 && number <= 4 + ? wordKey[1] + : wordKey[2]; + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return ( + number + + ' ' + + translator.correctGrammaticalCase(number, wordKey) + ); + } + }, + }; + + moment.defineLocale('me', { + months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split( + '_' + ), + monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split( + '_' + ), + weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sjutra u] LT', + + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay: '[juče u] LT', + lastWeek: function () { + var lastWeekDays = [ + '[prošle] [nedjelje] [u] LT', + '[prošlog] [ponedjeljka] [u] LT', + '[prošlog] [utorka] [u] LT', + '[prošle] [srijede] [u] LT', + '[prošlog] [četvrtka] [u] LT', + '[prošlog] [petka] [u] LT', + '[prošle] [subote] [u] LT', + ]; + return lastWeekDays[this.day()]; + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: 'prije %s', + s: 'nekoliko sekundi', + ss: translator.translate, + m: translator.translate, + mm: translator.translate, + h: translator.translate, + hh: translator.translate, + d: 'dan', + dd: translator.translate, + M: 'mjesec', + MM: translator.translate, + y: 'godinu', + yy: translator.translate, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('mi', { + months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split( + '_' + ), + monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split( + '_' + ), + monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i, + weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'), + weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'), + weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [i] HH:mm', + LLLL: 'dddd, D MMMM YYYY [i] HH:mm', + }, + calendar: { + sameDay: '[i teie mahana, i] LT', + nextDay: '[apopo i] LT', + nextWeek: 'dddd [i] LT', + lastDay: '[inanahi i] LT', + lastWeek: 'dddd [whakamutunga i] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'i roto i %s', + past: '%s i mua', + s: 'te hēkona ruarua', + ss: '%d hēkona', + m: 'he meneti', + mm: '%d meneti', + h: 'te haora', + hh: '%d haora', + d: 'he ra', + dd: '%d ra', + M: 'he marama', + MM: '%d marama', + y: 'he tau', + yy: '%d tau', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('mk', { + months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split( + '_' + ), + monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'), + weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split( + '_' + ), + weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'), + weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'D.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY H:mm', + LLLL: 'dddd, D MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[Денес во] LT', + nextDay: '[Утре во] LT', + nextWeek: '[Во] dddd [во] LT', + lastDay: '[Вчера во] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 6: + return '[Изминатата] dddd [во] LT'; + case 1: + case 2: + case 4: + case 5: + return '[Изминатиот] dddd [во] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'за %s', + past: 'пред %s', + s: 'неколку секунди', + ss: '%d секунди', + m: 'една минута', + mm: '%d минути', + h: 'еден час', + hh: '%d часа', + d: 'еден ден', + dd: '%d дена', + M: 'еден месец', + MM: '%d месеци', + y: 'една година', + yy: '%d години', + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/, + ordinal: function (number) { + var lastDigit = number % 10, + last2Digits = number % 100; + if (number === 0) { + return number + '-ев'; + } else if (last2Digits === 0) { + return number + '-ен'; + } else if (last2Digits > 10 && last2Digits < 20) { + return number + '-ти'; + } else if (lastDigit === 1) { + return number + '-ви'; + } else if (lastDigit === 2) { + return number + '-ри'; + } else if (lastDigit === 7 || lastDigit === 8) { + return number + '-ми'; + } else { + return number + '-ти'; + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('ml', { + months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split( + '_' + ), + monthsShort: 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split( + '_' + ), + weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'), + weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'), + longDateFormat: { + LT: 'A h:mm -നു', + LTS: 'A h:mm:ss -നു', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm -നു', + LLLL: 'dddd, D MMMM YYYY, A h:mm -നു', + }, + calendar: { + sameDay: '[ഇന്ന്] LT', + nextDay: '[നാളെ] LT', + nextWeek: 'dddd, LT', + lastDay: '[ഇന്നലെ] LT', + lastWeek: '[കഴിഞ്ഞ] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s കഴിഞ്ഞ്', + past: '%s മുൻപ്', + s: 'അൽപ നിമിഷങ്ങൾ', + ss: '%d സെക്കൻഡ്', + m: 'ഒരു മിനിറ്റ്', + mm: '%d മിനിറ്റ്', + h: 'ഒരു മണിക്കൂർ', + hh: '%d മണിക്കൂർ', + d: 'ഒരു ദിവസം', + dd: '%d ദിവസം', + M: 'ഒരു മാസം', + MM: '%d മാസം', + y: 'ഒരു വർഷം', + yy: '%d വർഷം', + }, + meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ( + (meridiem === 'രാത്രി' && hour >= 4) || + meridiem === 'ഉച്ച കഴിഞ്ഞ്' || + meridiem === 'വൈകുന്നേരം' + ) { + return hour + 12; + } else { + return hour; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'രാത്രി'; + } else if (hour < 12) { + return 'രാവിലെ'; + } else if (hour < 17) { + return 'ഉച്ച കഴിഞ്ഞ്'; + } else if (hour < 20) { + return 'വൈകുന്നേരം'; + } else { + return 'രാത്രി'; + } + }, + }); + + //! moment.js locale configuration + + function translate$7(number, withoutSuffix, key, isFuture) { + switch (key) { + case 's': + return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын'; + case 'ss': + return number + (withoutSuffix ? ' секунд' : ' секундын'); + case 'm': + case 'mm': + return number + (withoutSuffix ? ' минут' : ' минутын'); + case 'h': + case 'hh': + return number + (withoutSuffix ? ' цаг' : ' цагийн'); + case 'd': + case 'dd': + return number + (withoutSuffix ? ' өдөр' : ' өдрийн'); + case 'M': + case 'MM': + return number + (withoutSuffix ? ' сар' : ' сарын'); + case 'y': + case 'yy': + return number + (withoutSuffix ? ' жил' : ' жилийн'); + default: + return number; + } + } + + moment.defineLocale('mn', { + months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split( + '_' + ), + monthsShort: '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'), + weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'), + weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'YYYY оны MMMMын D', + LLL: 'YYYY оны MMMMын D HH:mm', + LLLL: 'dddd, YYYY оны MMMMын D HH:mm', + }, + meridiemParse: /ҮӨ|ҮХ/i, + isPM: function (input) { + return input === 'ҮХ'; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ҮӨ'; + } else { + return 'ҮХ'; + } + }, + calendar: { + sameDay: '[Өнөөдөр] LT', + nextDay: '[Маргааш] LT', + nextWeek: '[Ирэх] dddd LT', + lastDay: '[Өчигдөр] LT', + lastWeek: '[Өнгөрсөн] dddd LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s дараа', + past: '%s өмнө', + s: translate$7, + ss: translate$7, + m: translate$7, + mm: translate$7, + h: translate$7, + hh: translate$7, + d: translate$7, + dd: translate$7, + M: translate$7, + MM: translate$7, + y: translate$7, + yy: translate$7, + }, + dayOfMonthOrdinalParse: /\d{1,2} өдөр/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + ' өдөр'; + default: + return number; + } + }, + }); + + //! moment.js locale configuration + + var symbolMap$b = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०', + }, + numberMap$a = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0', + }; + + function relativeTimeMr(number, withoutSuffix, string, isFuture) { + var output = ''; + if (withoutSuffix) { + switch (string) { + case 's': + output = 'काही सेकंद'; + break; + case 'ss': + output = '%d सेकंद'; + break; + case 'm': + output = 'एक मिनिट'; + break; + case 'mm': + output = '%d मिनिटे'; + break; + case 'h': + output = 'एक तास'; + break; + case 'hh': + output = '%d तास'; + break; + case 'd': + output = 'एक दिवस'; + break; + case 'dd': + output = '%d दिवस'; + break; + case 'M': + output = 'एक महिना'; + break; + case 'MM': + output = '%d महिने'; + break; + case 'y': + output = 'एक वर्ष'; + break; + case 'yy': + output = '%d वर्षे'; + break; + } + } else { + switch (string) { + case 's': + output = 'काही सेकंदां'; + break; + case 'ss': + output = '%d सेकंदां'; + break; + case 'm': + output = 'एका मिनिटा'; + break; + case 'mm': + output = '%d मिनिटां'; + break; + case 'h': + output = 'एका तासा'; + break; + case 'hh': + output = '%d तासां'; + break; + case 'd': + output = 'एका दिवसा'; + break; + case 'dd': + output = '%d दिवसां'; + break; + case 'M': + output = 'एका महिन्या'; + break; + case 'MM': + output = '%d महिन्यां'; + break; + case 'y': + output = 'एका वर्षा'; + break; + case 'yy': + output = '%d वर्षां'; + break; + } + } + return output.replace(/%d/i, number); + } + + moment.defineLocale('mr', { + months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split( + '_' + ), + monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'), + weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'), + weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'), + longDateFormat: { + LT: 'A h:mm वाजता', + LTS: 'A h:mm:ss वाजता', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm वाजता', + LLLL: 'dddd, D MMMM YYYY, A h:mm वाजता', + }, + calendar: { + sameDay: '[आज] LT', + nextDay: '[उद्या] LT', + nextWeek: 'dddd, LT', + lastDay: '[काल] LT', + lastWeek: '[मागील] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%sमध्ये', + past: '%sपूर्वी', + s: relativeTimeMr, + ss: relativeTimeMr, + m: relativeTimeMr, + mm: relativeTimeMr, + h: relativeTimeMr, + hh: relativeTimeMr, + d: relativeTimeMr, + dd: relativeTimeMr, + M: relativeTimeMr, + MM: relativeTimeMr, + y: relativeTimeMr, + yy: relativeTimeMr, + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap$a[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$b[match]; + }); + }, + meridiemParse: /पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'पहाटे' || meridiem === 'सकाळी') { + return hour; + } else if ( + meridiem === 'दुपारी' || + meridiem === 'सायंकाळी' || + meridiem === 'रात्री' + ) { + return hour >= 12 ? hour : hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour >= 0 && hour < 6) { + return 'पहाटे'; + } else if (hour < 12) { + return 'सकाळी'; + } else if (hour < 17) { + return 'दुपारी'; + } else if (hour < 20) { + return 'सायंकाळी'; + } else { + return 'रात्री'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('ms-my', { + months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), + weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), + weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), + weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [pukul] HH.mm', + LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm', + }, + meridiemParse: /pagi|tengahari|petang|malam/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'tengahari') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'petang' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'tengahari'; + } else if (hours < 19) { + return 'petang'; + } else { + return 'malam'; + } + }, + calendar: { + sameDay: '[Hari ini pukul] LT', + nextDay: '[Esok pukul] LT', + nextWeek: 'dddd [pukul] LT', + lastDay: '[Kelmarin pukul] LT', + lastWeek: 'dddd [lepas pukul] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dalam %s', + past: '%s yang lepas', + s: 'beberapa saat', + ss: '%d saat', + m: 'seminit', + mm: '%d minit', + h: 'sejam', + hh: '%d jam', + d: 'sehari', + dd: '%d hari', + M: 'sebulan', + MM: '%d bulan', + y: 'setahun', + yy: '%d tahun', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('ms', { + months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), + weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), + weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), + weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [pukul] HH.mm', + LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm', + }, + meridiemParse: /pagi|tengahari|petang|malam/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'tengahari') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'petang' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'tengahari'; + } else if (hours < 19) { + return 'petang'; + } else { + return 'malam'; + } + }, + calendar: { + sameDay: '[Hari ini pukul] LT', + nextDay: '[Esok pukul] LT', + nextWeek: 'dddd [pukul] LT', + lastDay: '[Kelmarin pukul] LT', + lastWeek: 'dddd [lepas pukul] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dalam %s', + past: '%s yang lepas', + s: 'beberapa saat', + ss: '%d saat', + m: 'seminit', + mm: '%d minit', + h: 'sejam', + hh: '%d jam', + d: 'sehari', + dd: '%d hari', + M: 'sebulan', + MM: '%d bulan', + y: 'setahun', + yy: '%d tahun', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('mt', { + months: 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split( + '_' + ), + monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'), + weekdays: 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split( + '_' + ), + weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'), + weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Illum fil-]LT', + nextDay: '[Għada fil-]LT', + nextWeek: 'dddd [fil-]LT', + lastDay: '[Il-bieraħ fil-]LT', + lastWeek: 'dddd [li għadda] [fil-]LT', + sameElse: 'L', + }, + relativeTime: { + future: 'f’ %s', + past: '%s ilu', + s: 'ftit sekondi', + ss: '%d sekondi', + m: 'minuta', + mm: '%d minuti', + h: 'siegħa', + hh: '%d siegħat', + d: 'ġurnata', + dd: '%d ġranet', + M: 'xahar', + MM: '%d xhur', + y: 'sena', + yy: '%d sni', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$c = { + '1': '၁', + '2': '၂', + '3': '၃', + '4': '၄', + '5': '၅', + '6': '၆', + '7': '၇', + '8': '၈', + '9': '၉', + '0': '၀', + }, + numberMap$b = { + '၁': '1', + '၂': '2', + '၃': '3', + '၄': '4', + '၅': '5', + '၆': '6', + '၇': '7', + '၈': '8', + '၉': '9', + '၀': '0', + }; + + moment.defineLocale('my', { + months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split( + '_' + ), + monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'), + weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split( + '_' + ), + weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'), + weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'), + + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[ယနေ.] LT [မှာ]', + nextDay: '[မနက်ဖြန်] LT [မှာ]', + nextWeek: 'dddd LT [မှာ]', + lastDay: '[မနေ.က] LT [မှာ]', + lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]', + sameElse: 'L', + }, + relativeTime: { + future: 'လာမည့် %s မှာ', + past: 'လွန်ခဲ့သော %s က', + s: 'စက္ကန်.အနည်းငယ်', + ss: '%d စက္ကန့်', + m: 'တစ်မိနစ်', + mm: '%d မိနစ်', + h: 'တစ်နာရီ', + hh: '%d နာရီ', + d: 'တစ်ရက်', + dd: '%d ရက်', + M: 'တစ်လ', + MM: '%d လ', + y: 'တစ်နှစ်', + yy: '%d နှစ်', + }, + preparse: function (string) { + return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) { + return numberMap$b[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$c[match]; + }); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('nb', { + months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split( + '_' + ), + monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), + weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'), + weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY [kl.] HH:mm', + LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm', + }, + calendar: { + sameDay: '[i dag kl.] LT', + nextDay: '[i morgen kl.] LT', + nextWeek: 'dddd [kl.] LT', + lastDay: '[i går kl.] LT', + lastWeek: '[forrige] dddd [kl.] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'om %s', + past: '%s siden', + s: 'noen sekunder', + ss: '%d sekunder', + m: 'ett minutt', + mm: '%d minutter', + h: 'en time', + hh: '%d timer', + d: 'en dag', + dd: '%d dager', + M: 'en måned', + MM: '%d måneder', + y: 'ett år', + yy: '%d år', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$d = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०', + }, + numberMap$c = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0', + }; + + moment.defineLocale('ne', { + months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split( + '_' + ), + monthsShort: 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split( + '_' + ), + weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'), + weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'Aको h:mm बजे', + LTS: 'Aको h:mm:ss बजे', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, Aको h:mm बजे', + LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे', + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap$c[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$d[match]; + }); + }, + meridiemParse: /राति|बिहान|दिउँसो|साँझ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'राति') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'बिहान') { + return hour; + } else if (meridiem === 'दिउँसो') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'साँझ') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 3) { + return 'राति'; + } else if (hour < 12) { + return 'बिहान'; + } else if (hour < 16) { + return 'दिउँसो'; + } else if (hour < 20) { + return 'साँझ'; + } else { + return 'राति'; + } + }, + calendar: { + sameDay: '[आज] LT', + nextDay: '[भोलि] LT', + nextWeek: '[आउँदो] dddd[,] LT', + lastDay: '[हिजो] LT', + lastWeek: '[गएको] dddd[,] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%sमा', + past: '%s अगाडि', + s: 'केही क्षण', + ss: '%d सेकेण्ड', + m: 'एक मिनेट', + mm: '%d मिनेट', + h: 'एक घण्टा', + hh: '%d घण्टा', + d: 'एक दिन', + dd: '%d दिन', + M: 'एक महिना', + MM: '%d महिना', + y: 'एक बर्ष', + yy: '%d बर्ष', + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsShortWithDots$1 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split( + '_' + ), + monthsShortWithoutDots$1 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split( + '_' + ), + monthsParse$6 = [ + /^jan/i, + /^feb/i, + /^maart|mrt.?$/i, + /^apr/i, + /^mei$/i, + /^jun[i.]?$/i, + /^jul[i.]?$/i, + /^aug/i, + /^sep/i, + /^okt/i, + /^nov/i, + /^dec/i, + ], + monthsRegex$6 = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; + + moment.defineLocale('nl-be', { + months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split( + '_' + ), + monthsShort: function (m, format) { + if (!m) { + return monthsShortWithDots$1; + } else if (/-MMM-/.test(format)) { + return monthsShortWithoutDots$1[m.month()]; + } else { + return monthsShortWithDots$1[m.month()]; + } + }, + + monthsRegex: monthsRegex$6, + monthsShortRegex: monthsRegex$6, + monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i, + monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, + + monthsParse: monthsParse$6, + longMonthsParse: monthsParse$6, + shortMonthsParse: monthsParse$6, + + weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split( + '_' + ), + weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'), + weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[vandaag om] LT', + nextDay: '[morgen om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[gisteren om] LT', + lastWeek: '[afgelopen] dddd [om] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'over %s', + past: '%s geleden', + s: 'een paar seconden', + ss: '%d seconden', + m: 'één minuut', + mm: '%d minuten', + h: 'één uur', + hh: '%d uur', + d: 'één dag', + dd: '%d dagen', + M: 'één maand', + MM: '%d maanden', + y: 'één jaar', + yy: '%d jaar', + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal: function (number) { + return ( + number + + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de') + ); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsShortWithDots$2 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split( + '_' + ), + monthsShortWithoutDots$2 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split( + '_' + ), + monthsParse$7 = [ + /^jan/i, + /^feb/i, + /^maart|mrt.?$/i, + /^apr/i, + /^mei$/i, + /^jun[i.]?$/i, + /^jul[i.]?$/i, + /^aug/i, + /^sep/i, + /^okt/i, + /^nov/i, + /^dec/i, + ], + monthsRegex$7 = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; + + moment.defineLocale('nl', { + months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split( + '_' + ), + monthsShort: function (m, format) { + if (!m) { + return monthsShortWithDots$2; + } else if (/-MMM-/.test(format)) { + return monthsShortWithoutDots$2[m.month()]; + } else { + return monthsShortWithDots$2[m.month()]; + } + }, + + monthsRegex: monthsRegex$7, + monthsShortRegex: monthsRegex$7, + monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i, + monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, + + monthsParse: monthsParse$7, + longMonthsParse: monthsParse$7, + shortMonthsParse: monthsParse$7, + + weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split( + '_' + ), + weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'), + weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD-MM-YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[vandaag om] LT', + nextDay: '[morgen om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[gisteren om] LT', + lastWeek: '[afgelopen] dddd [om] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'over %s', + past: '%s geleden', + s: 'een paar seconden', + ss: '%d seconden', + m: 'één minuut', + mm: '%d minuten', + h: 'één uur', + hh: '%d uur', + d: 'één dag', + dd: '%d dagen', + M: 'één maand', + MM: '%d maanden', + y: 'één jaar', + yy: '%d jaar', + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal: function (number) { + return ( + number + + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de') + ); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('nn', { + months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split( + '_' + ), + monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'), + weekdaysShort: 'su._må._ty._on._to._fr._lau.'.split('_'), + weekdaysMin: 'su_må_ty_on_to_fr_la'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY [kl.] H:mm', + LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm', + }, + calendar: { + sameDay: '[I dag klokka] LT', + nextDay: '[I morgon klokka] LT', + nextWeek: 'dddd [klokka] LT', + lastDay: '[I går klokka] LT', + lastWeek: '[Føregåande] dddd [klokka] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'om %s', + past: '%s sidan', + s: 'nokre sekund', + ss: '%d sekund', + m: 'eit minutt', + mm: '%d minutt', + h: 'ein time', + hh: '%d timar', + d: 'ein dag', + dd: '%d dagar', + M: 'ein månad', + MM: '%d månader', + y: 'eit år', + yy: '%d år', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('oc-lnc', { + months: { + standalone: 'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split( + '_' + ), + format: "de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre".split( + '_' + ), + isFormat: /D[oD]?(\s)+MMMM/, + }, + monthsShort: 'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split( + '_' + ), + weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'), + weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM [de] YYYY', + ll: 'D MMM YYYY', + LLL: 'D MMMM [de] YYYY [a] H:mm', + lll: 'D MMM YYYY, H:mm', + LLLL: 'dddd D MMMM [de] YYYY [a] H:mm', + llll: 'ddd D MMM YYYY, H:mm', + }, + calendar: { + sameDay: '[uèi a] LT', + nextDay: '[deman a] LT', + nextWeek: 'dddd [a] LT', + lastDay: '[ièr a] LT', + lastWeek: 'dddd [passat a] LT', + sameElse: 'L', + }, + relativeTime: { + future: "d'aquí %s", + past: 'fa %s', + s: 'unas segondas', + ss: '%d segondas', + m: 'una minuta', + mm: '%d minutas', + h: 'una ora', + hh: '%d oras', + d: 'un jorn', + dd: '%d jorns', + M: 'un mes', + MM: '%d meses', + y: 'un an', + yy: '%d ans', + }, + dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/, + ordinal: function (number, period) { + var output = + number === 1 + ? 'r' + : number === 2 + ? 'n' + : number === 3 + ? 'r' + : number === 4 + ? 't' + : 'è'; + if (period === 'w' || period === 'W') { + output = 'a'; + } + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, + }, + }); + + //! moment.js locale configuration + + var symbolMap$e = { + '1': '੧', + '2': '੨', + '3': '੩', + '4': '੪', + '5': '੫', + '6': '੬', + '7': '੭', + '8': '੮', + '9': '੯', + '0': '੦', + }, + numberMap$d = { + '੧': '1', + '੨': '2', + '੩': '3', + '੪': '4', + '੫': '5', + '੬': '6', + '੭': '7', + '੮': '8', + '੯': '9', + '੦': '0', + }; + + moment.defineLocale('pa-in', { + // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi. + months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split( + '_' + ), + monthsShort: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split( + '_' + ), + weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split( + '_' + ), + weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'), + weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'), + longDateFormat: { + LT: 'A h:mm ਵਜੇ', + LTS: 'A h:mm:ss ਵਜੇ', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm ਵਜੇ', + LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ', + }, + calendar: { + sameDay: '[ਅਜ] LT', + nextDay: '[ਕਲ] LT', + nextWeek: '[ਅਗਲਾ] dddd, LT', + lastDay: '[ਕਲ] LT', + lastWeek: '[ਪਿਛਲੇ] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s ਵਿੱਚ', + past: '%s ਪਿਛਲੇ', + s: 'ਕੁਝ ਸਕਿੰਟ', + ss: '%d ਸਕਿੰਟ', + m: 'ਇਕ ਮਿੰਟ', + mm: '%d ਮਿੰਟ', + h: 'ਇੱਕ ਘੰਟਾ', + hh: '%d ਘੰਟੇ', + d: 'ਇੱਕ ਦਿਨ', + dd: '%d ਦਿਨ', + M: 'ਇੱਕ ਮਹੀਨਾ', + MM: '%d ਮਹੀਨੇ', + y: 'ਇੱਕ ਸਾਲ', + yy: '%d ਸਾਲ', + }, + preparse: function (string) { + return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) { + return numberMap$d[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$e[match]; + }); + }, + // Punjabi notation for meridiems are quite fuzzy in practice. While there exists + // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi. + meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ਰਾਤ') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ਸਵੇਰ') { + return hour; + } else if (meridiem === 'ਦੁਪਹਿਰ') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'ਸ਼ਾਮ') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'ਰਾਤ'; + } else if (hour < 10) { + return 'ਸਵੇਰ'; + } else if (hour < 17) { + return 'ਦੁਪਹਿਰ'; + } else if (hour < 20) { + return 'ਸ਼ਾਮ'; + } else { + return 'ਰਾਤ'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split( + '_' + ), + monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split( + '_' + ); + function plural$3(n) { + return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1; + } + function translate$8(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'ss': + return result + (plural$3(number) ? 'sekundy' : 'sekund'); + case 'm': + return withoutSuffix ? 'minuta' : 'minutę'; + case 'mm': + return result + (plural$3(number) ? 'minuty' : 'minut'); + case 'h': + return withoutSuffix ? 'godzina' : 'godzinę'; + case 'hh': + return result + (plural$3(number) ? 'godziny' : 'godzin'); + case 'MM': + return result + (plural$3(number) ? 'miesiące' : 'miesięcy'); + case 'yy': + return result + (plural$3(number) ? 'lata' : 'lat'); + } + } + + moment.defineLocale('pl', { + months: function (momentToFormat, format) { + if (!momentToFormat) { + return monthsNominative; + } else if (format === '') { + // Hack: if format empty we know this is used to generate + // RegExp by moment. Give then back both valid forms of months + // in RegExp ready format. + return ( + '(' + + monthsSubjective[momentToFormat.month()] + + '|' + + monthsNominative[momentToFormat.month()] + + ')' + ); + } else if (/D MMMM/.test(format)) { + return monthsSubjective[momentToFormat.month()]; + } else { + return monthsNominative[momentToFormat.month()]; + } + }, + monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'), + weekdays: 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split( + '_' + ), + weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'), + weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Dziś o] LT', + nextDay: '[Jutro o] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[W niedzielę o] LT'; + + case 2: + return '[We wtorek o] LT'; + + case 3: + return '[W środę o] LT'; + + case 6: + return '[W sobotę o] LT'; + + default: + return '[W] dddd [o] LT'; + } + }, + lastDay: '[Wczoraj o] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[W zeszłą niedzielę o] LT'; + case 3: + return '[W zeszłą środę o] LT'; + case 6: + return '[W zeszłą sobotę o] LT'; + default: + return '[W zeszły] dddd [o] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: '%s temu', + s: 'kilka sekund', + ss: translate$8, + m: translate$8, + mm: translate$8, + h: translate$8, + hh: translate$8, + d: '1 dzień', + dd: '%d dni', + M: 'miesiąc', + MM: translate$8, + y: 'rok', + yy: translate$8, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('pt-br', { + months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split( + '_' + ), + monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'), + weekdays: 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split( + '_' + ), + weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'), + weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY [às] HH:mm', + LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm', + }, + calendar: { + sameDay: '[Hoje às] LT', + nextDay: '[Amanhã às] LT', + nextWeek: 'dddd [às] LT', + lastDay: '[Ontem às] LT', + lastWeek: function () { + return this.day() === 0 || this.day() === 6 + ? '[Último] dddd [às] LT' // Saturday + Sunday + : '[Última] dddd [às] LT'; // Monday - Friday + }, + sameElse: 'L', + }, + relativeTime: { + future: 'em %s', + past: 'há %s', + s: 'poucos segundos', + ss: '%d segundos', + m: 'um minuto', + mm: '%d minutos', + h: 'uma hora', + hh: '%d horas', + d: 'um dia', + dd: '%d dias', + M: 'um mês', + MM: '%d meses', + y: 'um ano', + yy: '%d anos', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + }); + + //! moment.js locale configuration + + moment.defineLocale('pt', { + months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split( + '_' + ), + monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'), + weekdays: 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split( + '_' + ), + weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'), + weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY HH:mm', + LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm', + }, + calendar: { + sameDay: '[Hoje às] LT', + nextDay: '[Amanhã às] LT', + nextWeek: 'dddd [às] LT', + lastDay: '[Ontem às] LT', + lastWeek: function () { + return this.day() === 0 || this.day() === 6 + ? '[Último] dddd [às] LT' // Saturday + Sunday + : '[Última] dddd [às] LT'; // Monday - Friday + }, + sameElse: 'L', + }, + relativeTime: { + future: 'em %s', + past: 'há %s', + s: 'segundos', + ss: '%d segundos', + m: 'um minuto', + mm: '%d minutos', + h: 'uma hora', + hh: '%d horas', + d: 'um dia', + dd: '%d dias', + M: 'um mês', + MM: '%d meses', + y: 'um ano', + yy: '%d anos', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function relativeTimeWithPlural$2(number, withoutSuffix, key) { + var format = { + ss: 'secunde', + mm: 'minute', + hh: 'ore', + dd: 'zile', + MM: 'luni', + yy: 'ani', + }, + separator = ' '; + if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) { + separator = ' de '; + } + return number + separator + format[key]; + } + + moment.defineLocale('ro', { + months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split( + '_' + ), + monthsShort: 'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'), + weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'), + weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY H:mm', + LLLL: 'dddd, D MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[azi la] LT', + nextDay: '[mâine la] LT', + nextWeek: 'dddd [la] LT', + lastDay: '[ieri la] LT', + lastWeek: '[fosta] dddd [la] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'peste %s', + past: '%s în urmă', + s: 'câteva secunde', + ss: relativeTimeWithPlural$2, + m: 'un minut', + mm: relativeTimeWithPlural$2, + h: 'o oră', + hh: relativeTimeWithPlural$2, + d: 'o zi', + dd: relativeTimeWithPlural$2, + M: 'o lună', + MM: relativeTimeWithPlural$2, + y: 'un an', + yy: relativeTimeWithPlural$2, + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function plural$4(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 + ? forms[0] + : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) + ? forms[1] + : forms[2]; + } + function relativeTimeWithPlural$3(number, withoutSuffix, key) { + var format = { + ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд', + mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут', + hh: 'час_часа_часов', + dd: 'день_дня_дней', + MM: 'месяц_месяца_месяцев', + yy: 'год_года_лет', + }; + if (key === 'm') { + return withoutSuffix ? 'минута' : 'минуту'; + } else { + return number + ' ' + plural$4(format[key], +number); + } + } + var monthsParse$8 = [ + /^янв/i, + /^фев/i, + /^мар/i, + /^апр/i, + /^ма[йя]/i, + /^июн/i, + /^июл/i, + /^авг/i, + /^сен/i, + /^окт/i, + /^ноя/i, + /^дек/i, + ]; + + // http://new.gramota.ru/spravka/rules/139-prop : § 103 + // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637 + // CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753 + moment.defineLocale('ru', { + months: { + format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split( + '_' + ), + standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split( + '_' + ), + }, + monthsShort: { + // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку? + format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split( + '_' + ), + standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split( + '_' + ), + }, + weekdays: { + standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split( + '_' + ), + format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split( + '_' + ), + isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/, + }, + weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'), + weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'), + monthsParse: monthsParse$8, + longMonthsParse: monthsParse$8, + shortMonthsParse: monthsParse$8, + + // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки + monthsRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i, + + // копия предыдущего + monthsShortRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i, + + // полные названия с падежами + monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i, + + // Выражение, которое соответствует только сокращённым формам + monthsShortStrictRegex: /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY г.', + LLL: 'D MMMM YYYY г., H:mm', + LLLL: 'dddd, D MMMM YYYY г., H:mm', + }, + calendar: { + sameDay: '[Сегодня, в] LT', + nextDay: '[Завтра, в] LT', + lastDay: '[Вчера, в] LT', + nextWeek: function (now) { + if (now.week() !== this.week()) { + switch (this.day()) { + case 0: + return '[В следующее] dddd, [в] LT'; + case 1: + case 2: + case 4: + return '[В следующий] dddd, [в] LT'; + case 3: + case 5: + case 6: + return '[В следующую] dddd, [в] LT'; + } + } else { + if (this.day() === 2) { + return '[Во] dddd, [в] LT'; + } else { + return '[В] dddd, [в] LT'; + } + } + }, + lastWeek: function (now) { + if (now.week() !== this.week()) { + switch (this.day()) { + case 0: + return '[В прошлое] dddd, [в] LT'; + case 1: + case 2: + case 4: + return '[В прошлый] dddd, [в] LT'; + case 3: + case 5: + case 6: + return '[В прошлую] dddd, [в] LT'; + } + } else { + if (this.day() === 2) { + return '[Во] dddd, [в] LT'; + } else { + return '[В] dddd, [в] LT'; + } + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'через %s', + past: '%s назад', + s: 'несколько секунд', + ss: relativeTimeWithPlural$3, + m: relativeTimeWithPlural$3, + mm: relativeTimeWithPlural$3, + h: 'час', + hh: relativeTimeWithPlural$3, + d: 'день', + dd: relativeTimeWithPlural$3, + M: 'месяц', + MM: relativeTimeWithPlural$3, + y: 'год', + yy: relativeTimeWithPlural$3, + }, + meridiemParse: /ночи|утра|дня|вечера/i, + isPM: function (input) { + return /^(дня|вечера)$/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'ночи'; + } else if (hour < 12) { + return 'утра'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечера'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(й|го|я)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + return number + '-й'; + case 'D': + return number + '-го'; + case 'w': + case 'W': + return number + '-я'; + default: + return number; + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var months$8 = [ + 'جنوري', + 'فيبروري', + 'مارچ', + 'اپريل', + 'مئي', + 'جون', + 'جولاءِ', + 'آگسٽ', + 'سيپٽمبر', + 'آڪٽوبر', + 'نومبر', + 'ڊسمبر', + ], + days = ['آچر', 'سومر', 'اڱارو', 'اربع', 'خميس', 'جمع', 'ڇنڇر']; + + moment.defineLocale('sd', { + months: months$8, + monthsShort: months$8, + weekdays: days, + weekdaysShort: days, + weekdaysMin: days, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd، D MMMM YYYY HH:mm', + }, + meridiemParse: /صبح|شام/, + isPM: function (input) { + return 'شام' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'صبح'; + } + return 'شام'; + }, + calendar: { + sameDay: '[اڄ] LT', + nextDay: '[سڀاڻي] LT', + nextWeek: 'dddd [اڳين هفتي تي] LT', + lastDay: '[ڪالهه] LT', + lastWeek: '[گزريل هفتي] dddd [تي] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s پوء', + past: '%s اڳ', + s: 'چند سيڪنڊ', + ss: '%d سيڪنڊ', + m: 'هڪ منٽ', + mm: '%d منٽ', + h: 'هڪ ڪلاڪ', + hh: '%d ڪلاڪ', + d: 'هڪ ڏينهن', + dd: '%d ڏينهن', + M: 'هڪ مهينو', + MM: '%d مهينا', + y: 'هڪ سال', + yy: '%d سال', + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('se', { + months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split( + '_' + ), + monthsShort: 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split( + '_' + ), + weekdays: 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split( + '_' + ), + weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'), + weekdaysMin: 's_v_m_g_d_b_L'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'MMMM D. [b.] YYYY', + LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm', + LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm', + }, + calendar: { + sameDay: '[otne ti] LT', + nextDay: '[ihttin ti] LT', + nextWeek: 'dddd [ti] LT', + lastDay: '[ikte ti] LT', + lastWeek: '[ovddit] dddd [ti] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s geažes', + past: 'maŋit %s', + s: 'moadde sekunddat', + ss: '%d sekunddat', + m: 'okta minuhta', + mm: '%d minuhtat', + h: 'okta diimmu', + hh: '%d diimmut', + d: 'okta beaivi', + dd: '%d beaivvit', + M: 'okta mánnu', + MM: '%d mánut', + y: 'okta jahki', + yy: '%d jagit', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + /*jshint -W100*/ + moment.defineLocale('si', { + months: 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split( + '_' + ), + monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split( + '_' + ), + weekdays: 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split( + '_' + ), + weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'), + weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'a h:mm', + LTS: 'a h:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY MMMM D', + LLL: 'YYYY MMMM D, a h:mm', + LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss', + }, + calendar: { + sameDay: '[අද] LT[ට]', + nextDay: '[හෙට] LT[ට]', + nextWeek: 'dddd LT[ට]', + lastDay: '[ඊයේ] LT[ට]', + lastWeek: '[පසුගිය] dddd LT[ට]', + sameElse: 'L', + }, + relativeTime: { + future: '%sකින්', + past: '%sකට පෙර', + s: 'තත්පර කිහිපය', + ss: 'තත්පර %d', + m: 'මිනිත්තුව', + mm: 'මිනිත්තු %d', + h: 'පැය', + hh: 'පැය %d', + d: 'දිනය', + dd: 'දින %d', + M: 'මාසය', + MM: 'මාස %d', + y: 'වසර', + yy: 'වසර %d', + }, + dayOfMonthOrdinalParse: /\d{1,2} වැනි/, + ordinal: function (number) { + return number + ' වැනි'; + }, + meridiemParse: /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./, + isPM: function (input) { + return input === 'ප.ව.' || input === 'පස් වරු'; + }, + meridiem: function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'ප.ව.' : 'පස් වරු'; + } else { + return isLower ? 'පෙ.ව.' : 'පෙර වරු'; + } + }, + }); + + //! moment.js locale configuration + + var months$9 = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split( + '_' + ), + monthsShort$6 = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_'); + function plural$5(n) { + return n > 1 && n < 5; + } + function translate$9(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': // a few seconds / in a few seconds / a few seconds ago + return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami'; + case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'sekundy' : 'sekúnd'); + } else { + return result + 'sekundami'; + } + case 'm': // a minute / in a minute / a minute ago + return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou'; + case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'minúty' : 'minút'); + } else { + return result + 'minútami'; + } + case 'h': // an hour / in an hour / an hour ago + return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou'; + case 'hh': // 9 hours / in 9 hours / 9 hours ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'hodiny' : 'hodín'); + } else { + return result + 'hodinami'; + } + case 'd': // a day / in a day / a day ago + return withoutSuffix || isFuture ? 'deň' : 'dňom'; + case 'dd': // 9 days / in 9 days / 9 days ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'dni' : 'dní'); + } else { + return result + 'dňami'; + } + case 'M': // a month / in a month / a month ago + return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom'; + case 'MM': // 9 months / in 9 months / 9 months ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'mesiace' : 'mesiacov'); + } else { + return result + 'mesiacmi'; + } + case 'y': // a year / in a year / a year ago + return withoutSuffix || isFuture ? 'rok' : 'rokom'; + case 'yy': // 9 years / in 9 years / 9 years ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'roky' : 'rokov'); + } else { + return result + 'rokmi'; + } + } + } + + moment.defineLocale('sk', { + months: months$9, + monthsShort: monthsShort$6, + weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'), + weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'), + weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[dnes o] LT', + nextDay: '[zajtra o] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[v nedeľu o] LT'; + case 1: + case 2: + return '[v] dddd [o] LT'; + case 3: + return '[v stredu o] LT'; + case 4: + return '[vo štvrtok o] LT'; + case 5: + return '[v piatok o] LT'; + case 6: + return '[v sobotu o] LT'; + } + }, + lastDay: '[včera o] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[minulú nedeľu o] LT'; + case 1: + case 2: + return '[minulý] dddd [o] LT'; + case 3: + return '[minulú stredu o] LT'; + case 4: + case 5: + return '[minulý] dddd [o] LT'; + case 6: + return '[minulú sobotu o] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: 'pred %s', + s: translate$9, + ss: translate$9, + m: translate$9, + mm: translate$9, + h: translate$9, + hh: translate$9, + d: translate$9, + dd: translate$9, + M: translate$9, + MM: translate$9, + y: translate$9, + yy: translate$9, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function processRelativeTime$7(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': + return withoutSuffix || isFuture + ? 'nekaj sekund' + : 'nekaj sekundami'; + case 'ss': + if (number === 1) { + result += withoutSuffix ? 'sekundo' : 'sekundi'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah'; + } else { + result += 'sekund'; + } + return result; + case 'm': + return withoutSuffix ? 'ena minuta' : 'eno minuto'; + case 'mm': + if (number === 1) { + result += withoutSuffix ? 'minuta' : 'minuto'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'minuti' : 'minutama'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'minute' : 'minutami'; + } else { + result += withoutSuffix || isFuture ? 'minut' : 'minutami'; + } + return result; + case 'h': + return withoutSuffix ? 'ena ura' : 'eno uro'; + case 'hh': + if (number === 1) { + result += withoutSuffix ? 'ura' : 'uro'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'uri' : 'urama'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'ure' : 'urami'; + } else { + result += withoutSuffix || isFuture ? 'ur' : 'urami'; + } + return result; + case 'd': + return withoutSuffix || isFuture ? 'en dan' : 'enim dnem'; + case 'dd': + if (number === 1) { + result += withoutSuffix || isFuture ? 'dan' : 'dnem'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'dni' : 'dnevoma'; + } else { + result += withoutSuffix || isFuture ? 'dni' : 'dnevi'; + } + return result; + case 'M': + return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem'; + case 'MM': + if (number === 1) { + result += withoutSuffix || isFuture ? 'mesec' : 'mesecem'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'meseca' : 'mesecema'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'mesece' : 'meseci'; + } else { + result += withoutSuffix || isFuture ? 'mesecev' : 'meseci'; + } + return result; + case 'y': + return withoutSuffix || isFuture ? 'eno leto' : 'enim letom'; + case 'yy': + if (number === 1) { + result += withoutSuffix || isFuture ? 'leto' : 'letom'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'leti' : 'letoma'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'leta' : 'leti'; + } else { + result += withoutSuffix || isFuture ? 'let' : 'leti'; + } + return result; + } + } + + moment.defineLocale('sl', { + months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split( + '_' + ), + monthsShort: 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'), + weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'), + weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD. MM. YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[danes ob] LT', + nextDay: '[jutri ob] LT', + + nextWeek: function () { + switch (this.day()) { + case 0: + return '[v] [nedeljo] [ob] LT'; + case 3: + return '[v] [sredo] [ob] LT'; + case 6: + return '[v] [soboto] [ob] LT'; + case 1: + case 2: + case 4: + case 5: + return '[v] dddd [ob] LT'; + } + }, + lastDay: '[včeraj ob] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[prejšnjo] [nedeljo] [ob] LT'; + case 3: + return '[prejšnjo] [sredo] [ob] LT'; + case 6: + return '[prejšnjo] [soboto] [ob] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prejšnji] dddd [ob] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'čez %s', + past: 'pred %s', + s: processRelativeTime$7, + ss: processRelativeTime$7, + m: processRelativeTime$7, + mm: processRelativeTime$7, + h: processRelativeTime$7, + hh: processRelativeTime$7, + d: processRelativeTime$7, + dd: processRelativeTime$7, + M: processRelativeTime$7, + MM: processRelativeTime$7, + y: processRelativeTime$7, + yy: processRelativeTime$7, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('sq', { + months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split( + '_' + ), + monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'), + weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split( + '_' + ), + weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'), + weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'), + weekdaysParseExact: true, + meridiemParse: /PD|MD/, + isPM: function (input) { + return input.charAt(0) === 'M'; + }, + meridiem: function (hours, minutes, isLower) { + return hours < 12 ? 'PD' : 'MD'; + }, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Sot në] LT', + nextDay: '[Nesër në] LT', + nextWeek: 'dddd [në] LT', + lastDay: '[Dje në] LT', + lastWeek: 'dddd [e kaluar në] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'në %s', + past: '%s më parë', + s: 'disa sekonda', + ss: '%d sekonda', + m: 'një minutë', + mm: '%d minuta', + h: 'një orë', + hh: '%d orë', + d: 'një ditë', + dd: '%d ditë', + M: 'një muaj', + MM: '%d muaj', + y: 'një vit', + yy: '%d vite', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var translator$1 = { + words: { + //Different grammatical cases + ss: ['секунда', 'секунде', 'секунди'], + m: ['један минут', 'једне минуте'], + mm: ['минут', 'минуте', 'минута'], + h: ['један сат', 'једног сата'], + hh: ['сат', 'сата', 'сати'], + dd: ['дан', 'дана', 'дана'], + MM: ['месец', 'месеца', 'месеци'], + yy: ['година', 'године', 'година'], + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 + ? wordKey[0] + : number >= 2 && number <= 4 + ? wordKey[1] + : wordKey[2]; + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator$1.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return ( + number + + ' ' + + translator$1.correctGrammaticalCase(number, wordKey) + ); + } + }, + }; + + moment.defineLocale('sr-cyrl', { + months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split( + '_' + ), + monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'), + weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'), + weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[данас у] LT', + nextDay: '[сутра у] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[у] [недељу] [у] LT'; + case 3: + return '[у] [среду] [у] LT'; + case 6: + return '[у] [суботу] [у] LT'; + case 1: + case 2: + case 4: + case 5: + return '[у] dddd [у] LT'; + } + }, + lastDay: '[јуче у] LT', + lastWeek: function () { + var lastWeekDays = [ + '[прошле] [недеље] [у] LT', + '[прошлог] [понедељка] [у] LT', + '[прошлог] [уторка] [у] LT', + '[прошле] [среде] [у] LT', + '[прошлог] [четвртка] [у] LT', + '[прошлог] [петка] [у] LT', + '[прошле] [суботе] [у] LT', + ]; + return lastWeekDays[this.day()]; + }, + sameElse: 'L', + }, + relativeTime: { + future: 'за %s', + past: 'пре %s', + s: 'неколико секунди', + ss: translator$1.translate, + m: translator$1.translate, + mm: translator$1.translate, + h: translator$1.translate, + hh: translator$1.translate, + d: 'дан', + dd: translator$1.translate, + M: 'месец', + MM: translator$1.translate, + y: 'годину', + yy: translator$1.translate, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var translator$2 = { + words: { + //Different grammatical cases + ss: ['sekunda', 'sekunde', 'sekundi'], + m: ['jedan minut', 'jedne minute'], + mm: ['minut', 'minute', 'minuta'], + h: ['jedan sat', 'jednog sata'], + hh: ['sat', 'sata', 'sati'], + dd: ['dan', 'dana', 'dana'], + MM: ['mesec', 'meseca', 'meseci'], + yy: ['godina', 'godine', 'godina'], + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 + ? wordKey[0] + : number >= 2 && number <= 4 + ? wordKey[1] + : wordKey[2]; + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator$2.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return ( + number + + ' ' + + translator$2.correctGrammaticalCase(number, wordKey) + ); + } + }, + }; + + moment.defineLocale('sr', { + months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split( + '_' + ), + monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split( + '_' + ), + weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sutra u] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedelju] [u] LT'; + case 3: + return '[u] [sredu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay: '[juče u] LT', + lastWeek: function () { + var lastWeekDays = [ + '[prošle] [nedelje] [u] LT', + '[prošlog] [ponedeljka] [u] LT', + '[prošlog] [utorka] [u] LT', + '[prošle] [srede] [u] LT', + '[prošlog] [četvrtka] [u] LT', + '[prošlog] [petka] [u] LT', + '[prošle] [subote] [u] LT', + ]; + return lastWeekDays[this.day()]; + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: 'pre %s', + s: 'nekoliko sekundi', + ss: translator$2.translate, + m: translator$2.translate, + mm: translator$2.translate, + h: translator$2.translate, + hh: translator$2.translate, + d: 'dan', + dd: translator$2.translate, + M: 'mesec', + MM: translator$2.translate, + y: 'godinu', + yy: translator$2.translate, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('ss', { + months: "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split( + '_' + ), + monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'), + weekdays: 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split( + '_' + ), + weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'), + weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A', + }, + calendar: { + sameDay: '[Namuhla nga] LT', + nextDay: '[Kusasa nga] LT', + nextWeek: 'dddd [nga] LT', + lastDay: '[Itolo nga] LT', + lastWeek: 'dddd [leliphelile] [nga] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'nga %s', + past: 'wenteka nga %s', + s: 'emizuzwana lomcane', + ss: '%d mzuzwana', + m: 'umzuzu', + mm: '%d emizuzu', + h: 'lihora', + hh: '%d emahora', + d: 'lilanga', + dd: '%d emalanga', + M: 'inyanga', + MM: '%d tinyanga', + y: 'umnyaka', + yy: '%d iminyaka', + }, + meridiemParse: /ekuseni|emini|entsambama|ebusuku/, + meridiem: function (hours, minutes, isLower) { + if (hours < 11) { + return 'ekuseni'; + } else if (hours < 15) { + return 'emini'; + } else if (hours < 19) { + return 'entsambama'; + } else { + return 'ebusuku'; + } + }, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ekuseni') { + return hour; + } else if (meridiem === 'emini') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') { + if (hour === 0) { + return 0; + } + return hour + 12; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal: '%d', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('sv', { + months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split( + '_' + ), + monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), + weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'), + weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'), + weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [kl.] HH:mm', + LLLL: 'dddd D MMMM YYYY [kl.] HH:mm', + lll: 'D MMM YYYY HH:mm', + llll: 'ddd D MMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Idag] LT', + nextDay: '[Imorgon] LT', + lastDay: '[Igår] LT', + nextWeek: '[På] dddd LT', + lastWeek: '[I] dddd[s] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'om %s', + past: 'för %s sedan', + s: 'några sekunder', + ss: '%d sekunder', + m: 'en minut', + mm: '%d minuter', + h: 'en timme', + hh: '%d timmar', + d: 'en dag', + dd: '%d dagar', + M: 'en månad', + MM: '%d månader', + y: 'ett år', + yy: '%d år', + }, + dayOfMonthOrdinalParse: /\d{1,2}(\:e|\:a)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? ':e' + : b === 1 + ? ':a' + : b === 2 + ? ':a' + : b === 3 + ? ':e' + : ':e'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('sw', { + months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'), + weekdays: 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split( + '_' + ), + weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'), + weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'hh:mm A', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[leo saa] LT', + nextDay: '[kesho saa] LT', + nextWeek: '[wiki ijayo] dddd [saat] LT', + lastDay: '[jana] LT', + lastWeek: '[wiki iliyopita] dddd [saat] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s baadaye', + past: 'tokea %s', + s: 'hivi punde', + ss: 'sekunde %d', + m: 'dakika moja', + mm: 'dakika %d', + h: 'saa limoja', + hh: 'masaa %d', + d: 'siku moja', + dd: 'siku %d', + M: 'mwezi mmoja', + MM: 'miezi %d', + y: 'mwaka mmoja', + yy: 'miaka %d', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$f = { + '1': '௧', + '2': '௨', + '3': '௩', + '4': '௪', + '5': '௫', + '6': '௬', + '7': '௭', + '8': '௮', + '9': '௯', + '0': '௦', + }, + numberMap$e = { + '௧': '1', + '௨': '2', + '௩': '3', + '௪': '4', + '௫': '5', + '௬': '6', + '௭': '7', + '௮': '8', + '௯': '9', + '௦': '0', + }; + + moment.defineLocale('ta', { + months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split( + '_' + ), + monthsShort: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split( + '_' + ), + weekdays: 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split( + '_' + ), + weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split( + '_' + ), + weekdaysMin: 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, HH:mm', + LLLL: 'dddd, D MMMM YYYY, HH:mm', + }, + calendar: { + sameDay: '[இன்று] LT', + nextDay: '[நாளை] LT', + nextWeek: 'dddd, LT', + lastDay: '[நேற்று] LT', + lastWeek: '[கடந்த வாரம்] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s இல்', + past: '%s முன்', + s: 'ஒரு சில விநாடிகள்', + ss: '%d விநாடிகள்', + m: 'ஒரு நிமிடம்', + mm: '%d நிமிடங்கள்', + h: 'ஒரு மணி நேரம்', + hh: '%d மணி நேரம்', + d: 'ஒரு நாள்', + dd: '%d நாட்கள்', + M: 'ஒரு மாதம்', + MM: '%d மாதங்கள்', + y: 'ஒரு வருடம்', + yy: '%d ஆண்டுகள்', + }, + dayOfMonthOrdinalParse: /\d{1,2}வது/, + ordinal: function (number) { + return number + 'வது'; + }, + preparse: function (string) { + return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) { + return numberMap$e[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$f[match]; + }); + }, + // refer http://ta.wikipedia.org/s/1er1 + meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/, + meridiem: function (hour, minute, isLower) { + if (hour < 2) { + return ' யாமம்'; + } else if (hour < 6) { + return ' வைகறை'; // வைகறை + } else if (hour < 10) { + return ' காலை'; // காலை + } else if (hour < 14) { + return ' நண்பகல்'; // நண்பகல் + } else if (hour < 18) { + return ' எற்பாடு'; // எற்பாடு + } else if (hour < 22) { + return ' மாலை'; // மாலை + } else { + return ' யாமம்'; + } + }, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'யாமம்') { + return hour < 2 ? hour : hour + 12; + } else if (meridiem === 'வைகறை' || meridiem === 'காலை') { + return hour; + } else if (meridiem === 'நண்பகல்') { + return hour >= 10 ? hour : hour + 12; + } else { + return hour + 12; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('te', { + months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split( + '_' + ), + monthsShort: 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split( + '_' + ), + weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'), + weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'), + longDateFormat: { + LT: 'A h:mm', + LTS: 'A h:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm', + LLLL: 'dddd, D MMMM YYYY, A h:mm', + }, + calendar: { + sameDay: '[నేడు] LT', + nextDay: '[రేపు] LT', + nextWeek: 'dddd, LT', + lastDay: '[నిన్న] LT', + lastWeek: '[గత] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s లో', + past: '%s క్రితం', + s: 'కొన్ని క్షణాలు', + ss: '%d సెకన్లు', + m: 'ఒక నిమిషం', + mm: '%d నిమిషాలు', + h: 'ఒక గంట', + hh: '%d గంటలు', + d: 'ఒక రోజు', + dd: '%d రోజులు', + M: 'ఒక నెల', + MM: '%d నెలలు', + y: 'ఒక సంవత్సరం', + yy: '%d సంవత్సరాలు', + }, + dayOfMonthOrdinalParse: /\d{1,2}వ/, + ordinal: '%dవ', + meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'రాత్రి') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ఉదయం') { + return hour; + } else if (meridiem === 'మధ్యాహ్నం') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'సాయంత్రం') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'రాత్రి'; + } else if (hour < 10) { + return 'ఉదయం'; + } else if (hour < 17) { + return 'మధ్యాహ్నం'; + } else if (hour < 20) { + return 'సాయంత్రం'; + } else { + return 'రాత్రి'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('tet', { + months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split( + '_' + ), + monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), + weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'), + weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'), + weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Ohin iha] LT', + nextDay: '[Aban iha] LT', + nextWeek: 'dddd [iha] LT', + lastDay: '[Horiseik iha] LT', + lastWeek: 'dddd [semana kotuk] [iha] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'iha %s', + past: '%s liuba', + s: 'segundu balun', + ss: 'segundu %d', + m: 'minutu ida', + mm: 'minutu %d', + h: 'oras ida', + hh: 'oras %d', + d: 'loron ida', + dd: 'loron %d', + M: 'fulan ida', + MM: 'fulan %d', + y: 'tinan ida', + yy: 'tinan %d', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var suffixes$3 = { + 0: '-ум', + 1: '-ум', + 2: '-юм', + 3: '-юм', + 4: '-ум', + 5: '-ум', + 6: '-ум', + 7: '-ум', + 8: '-ум', + 9: '-ум', + 10: '-ум', + 12: '-ум', + 13: '-ум', + 20: '-ум', + 30: '-юм', + 40: '-ум', + 50: '-ум', + 60: '-ум', + 70: '-ум', + 80: '-ум', + 90: '-ум', + 100: '-ум', + }; + + moment.defineLocale('tg', { + months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split( + '_' + ), + monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'), + weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split( + '_' + ), + weekdaysShort: 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'), + weekdaysMin: 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Имрӯз соати] LT', + nextDay: '[Пагоҳ соати] LT', + lastDay: '[Дирӯз соати] LT', + nextWeek: 'dddd[и] [ҳафтаи оянда соати] LT', + lastWeek: 'dddd[и] [ҳафтаи гузашта соати] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'баъди %s', + past: '%s пеш', + s: 'якчанд сония', + m: 'як дақиқа', + mm: '%d дақиқа', + h: 'як соат', + hh: '%d соат', + d: 'як рӯз', + dd: '%d рӯз', + M: 'як моҳ', + MM: '%d моҳ', + y: 'як сол', + yy: '%d сол', + }, + meridiemParse: /шаб|субҳ|рӯз|бегоҳ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'шаб') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'субҳ') { + return hour; + } else if (meridiem === 'рӯз') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'бегоҳ') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'шаб'; + } else if (hour < 11) { + return 'субҳ'; + } else if (hour < 16) { + return 'рӯз'; + } else if (hour < 19) { + return 'бегоҳ'; + } else { + return 'шаб'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ум|юм)/, + ordinal: function (number) { + var a = number % 10, + b = number >= 100 ? 100 : null; + return number + (suffixes$3[number] || suffixes$3[a] || suffixes$3[b]); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 1th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('th', { + months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split( + '_' + ), + monthsShort: 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'), + weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference + weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY เวลา H:mm', + LLLL: 'วันddddที่ D MMMM YYYY เวลา H:mm', + }, + meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/, + isPM: function (input) { + return input === 'หลังเที่ยง'; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ก่อนเที่ยง'; + } else { + return 'หลังเที่ยง'; + } + }, + calendar: { + sameDay: '[วันนี้ เวลา] LT', + nextDay: '[พรุ่งนี้ เวลา] LT', + nextWeek: 'dddd[หน้า เวลา] LT', + lastDay: '[เมื่อวานนี้ เวลา] LT', + lastWeek: '[วัน]dddd[ที่แล้ว เวลา] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'อีก %s', + past: '%sที่แล้ว', + s: 'ไม่กี่วินาที', + ss: '%d วินาที', + m: '1 นาที', + mm: '%d นาที', + h: '1 ชั่วโมง', + hh: '%d ชั่วโมง', + d: '1 วัน', + dd: '%d วัน', + M: '1 เดือน', + MM: '%d เดือน', + y: '1 ปี', + yy: '%d ปี', + }, + }); + + //! moment.js locale configuration + + var suffixes$4 = { + 1: "'inji", + 5: "'inji", + 8: "'inji", + 70: "'inji", + 80: "'inji", + 2: "'nji", + 7: "'nji", + 20: "'nji", + 50: "'nji", + 3: "'ünji", + 4: "'ünji", + 100: "'ünji", + 6: "'njy", + 9: "'unjy", + 10: "'unjy", + 30: "'unjy", + 60: "'ynjy", + 90: "'ynjy", + }; + + moment.defineLocale('tk', { + months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split( + '_' + ), + monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'), + weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split( + '_' + ), + weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'), + weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[bugün sagat] LT', + nextDay: '[ertir sagat] LT', + nextWeek: '[indiki] dddd [sagat] LT', + lastDay: '[düýn] LT', + lastWeek: '[geçen] dddd [sagat] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s soň', + past: '%s öň', + s: 'birnäçe sekunt', + m: 'bir minut', + mm: '%d minut', + h: 'bir sagat', + hh: '%d sagat', + d: 'bir gün', + dd: '%d gün', + M: 'bir aý', + MM: '%d aý', + y: 'bir ýyl', + yy: '%d ýyl', + }, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'Do': + case 'DD': + return number; + default: + if (number === 0) { + // special case for zero + return number + "'unjy"; + } + var a = number % 10, + b = (number % 100) - a, + c = number >= 100 ? 100 : null; + return number + (suffixes$4[a] || suffixes$4[b] || suffixes$4[c]); + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('tl-ph', { + months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split( + '_' + ), + monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'), + weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split( + '_' + ), + weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'), + weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'MM/D/YYYY', + LL: 'MMMM D, YYYY', + LLL: 'MMMM D, YYYY HH:mm', + LLLL: 'dddd, MMMM DD, YYYY HH:mm', + }, + calendar: { + sameDay: 'LT [ngayong araw]', + nextDay: '[Bukas ng] LT', + nextWeek: 'LT [sa susunod na] dddd', + lastDay: 'LT [kahapon]', + lastWeek: 'LT [noong nakaraang] dddd', + sameElse: 'L', + }, + relativeTime: { + future: 'sa loob ng %s', + past: '%s ang nakalipas', + s: 'ilang segundo', + ss: '%d segundo', + m: 'isang minuto', + mm: '%d minuto', + h: 'isang oras', + hh: '%d oras', + d: 'isang araw', + dd: '%d araw', + M: 'isang buwan', + MM: '%d buwan', + y: 'isang taon', + yy: '%d taon', + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal: function (number) { + return number; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_'); + + function translateFuture(output) { + var time = output; + time = + output.indexOf('jaj') !== -1 + ? time.slice(0, -3) + 'leS' + : output.indexOf('jar') !== -1 + ? time.slice(0, -3) + 'waQ' + : output.indexOf('DIS') !== -1 + ? time.slice(0, -3) + 'nem' + : time + ' pIq'; + return time; + } + + function translatePast(output) { + var time = output; + time = + output.indexOf('jaj') !== -1 + ? time.slice(0, -3) + 'Hu’' + : output.indexOf('jar') !== -1 + ? time.slice(0, -3) + 'wen' + : output.indexOf('DIS') !== -1 + ? time.slice(0, -3) + 'ben' + : time + ' ret'; + return time; + } + + function translate$a(number, withoutSuffix, string, isFuture) { + var numberNoun = numberAsNoun(number); + switch (string) { + case 'ss': + return numberNoun + ' lup'; + case 'mm': + return numberNoun + ' tup'; + case 'hh': + return numberNoun + ' rep'; + case 'dd': + return numberNoun + ' jaj'; + case 'MM': + return numberNoun + ' jar'; + case 'yy': + return numberNoun + ' DIS'; + } + } + + function numberAsNoun(number) { + var hundred = Math.floor((number % 1000) / 100), + ten = Math.floor((number % 100) / 10), + one = number % 10, + word = ''; + if (hundred > 0) { + word += numbersNouns[hundred] + 'vatlh'; + } + if (ten > 0) { + word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH'; + } + if (one > 0) { + word += (word !== '' ? ' ' : '') + numbersNouns[one]; + } + return word === '' ? 'pagh' : word; + } + + moment.defineLocale('tlh', { + months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split( + '_' + ), + monthsShort: 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split( + '_' + ), + weekdaysShort: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split( + '_' + ), + weekdaysMin: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split( + '_' + ), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[DaHjaj] LT', + nextDay: '[wa’leS] LT', + nextWeek: 'LLL', + lastDay: '[wa’Hu’] LT', + lastWeek: 'LLL', + sameElse: 'L', + }, + relativeTime: { + future: translateFuture, + past: translatePast, + s: 'puS lup', + ss: translate$a, + m: 'wa’ tup', + mm: translate$a, + h: 'wa’ rep', + hh: translate$a, + d: 'wa’ jaj', + dd: translate$a, + M: 'wa’ jar', + MM: translate$a, + y: 'wa’ DIS', + yy: translate$a, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var suffixes$5 = { + 1: "'inci", + 5: "'inci", + 8: "'inci", + 70: "'inci", + 80: "'inci", + 2: "'nci", + 7: "'nci", + 20: "'nci", + 50: "'nci", + 3: "'üncü", + 4: "'üncü", + 100: "'üncü", + 6: "'ncı", + 9: "'uncu", + 10: "'uncu", + 30: "'uncu", + 60: "'ıncı", + 90: "'ıncı", + }; + + moment.defineLocale('tr', { + months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split( + '_' + ), + monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'), + weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split( + '_' + ), + weekdaysShort: 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'), + weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'), + meridiem: function (hours, minutes, isLower) { + if (hours < 12) { + return isLower ? 'öö' : 'ÖÖ'; + } else { + return isLower ? 'ös' : 'ÖS'; + } + }, + meridiemParse: /öö|ÖÖ|ös|ÖS/, + isPM: function (input) { + return input === 'ös' || input === 'ÖS'; + }, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[bugün saat] LT', + nextDay: '[yarın saat] LT', + nextWeek: '[gelecek] dddd [saat] LT', + lastDay: '[dün] LT', + lastWeek: '[geçen] dddd [saat] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s sonra', + past: '%s önce', + s: 'birkaç saniye', + ss: '%d saniye', + m: 'bir dakika', + mm: '%d dakika', + h: 'bir saat', + hh: '%d saat', + d: 'bir gün', + dd: '%d gün', + M: 'bir ay', + MM: '%d ay', + y: 'bir yıl', + yy: '%d yıl', + }, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'Do': + case 'DD': + return number; + default: + if (number === 0) { + // special case for zero + return number + "'ıncı"; + } + var a = number % 10, + b = (number % 100) - a, + c = number >= 100 ? 100 : null; + return number + (suffixes$5[a] || suffixes$5[b] || suffixes$5[c]); + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals. + // This is currently too difficult (maybe even impossible) to add. + moment.defineLocale('tzl', { + months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split( + '_' + ), + monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'), + weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'), + weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'), + weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'), + longDateFormat: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM [dallas] YYYY', + LLL: 'D. MMMM [dallas] YYYY HH.mm', + LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm', + }, + meridiemParse: /d\'o|d\'a/i, + isPM: function (input) { + return "d'o" === input.toLowerCase(); + }, + meridiem: function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? "d'o" : "D'O"; + } else { + return isLower ? "d'a" : "D'A"; + } + }, + calendar: { + sameDay: '[oxhi à] LT', + nextDay: '[demà à] LT', + nextWeek: 'dddd [à] LT', + lastDay: '[ieiri à] LT', + lastWeek: '[sür el] dddd [lasteu à] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'osprei %s', + past: 'ja%s', + s: processRelativeTime$8, + ss: processRelativeTime$8, + m: processRelativeTime$8, + mm: processRelativeTime$8, + h: processRelativeTime$8, + hh: processRelativeTime$8, + d: processRelativeTime$8, + dd: processRelativeTime$8, + M: processRelativeTime$8, + MM: processRelativeTime$8, + y: processRelativeTime$8, + yy: processRelativeTime$8, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + function processRelativeTime$8(number, withoutSuffix, key, isFuture) { + var format = { + s: ['viensas secunds', "'iensas secunds"], + ss: [number + ' secunds', '' + number + ' secunds'], + m: ["'n míut", "'iens míut"], + mm: [number + ' míuts', '' + number + ' míuts'], + h: ["'n þora", "'iensa þora"], + hh: [number + ' þoras', '' + number + ' þoras'], + d: ["'n ziua", "'iensa ziua"], + dd: [number + ' ziuas', '' + number + ' ziuas'], + M: ["'n mes", "'iens mes"], + MM: [number + ' mesen', '' + number + ' mesen'], + y: ["'n ar", "'iens ar"], + yy: [number + ' ars', '' + number + ' ars'], + }; + return isFuture + ? format[key][0] + : withoutSuffix + ? format[key][0] + : format[key][1]; + } + + //! moment.js locale configuration + + moment.defineLocale('tzm-latn', { + months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split( + '_' + ), + monthsShort: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split( + '_' + ), + weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[asdkh g] LT', + nextDay: '[aska g] LT', + nextWeek: 'dddd [g] LT', + lastDay: '[assant g] LT', + lastWeek: 'dddd [g] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dadkh s yan %s', + past: 'yan %s', + s: 'imik', + ss: '%d imik', + m: 'minuḍ', + mm: '%d minuḍ', + h: 'saɛa', + hh: '%d tassaɛin', + d: 'ass', + dd: '%d ossan', + M: 'ayowr', + MM: '%d iyyirn', + y: 'asgas', + yy: '%d isgasn', + }, + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('tzm', { + months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split( + '_' + ), + monthsShort: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split( + '_' + ), + weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[ⴰⵙⴷⵅ ⴴ] LT', + nextDay: '[ⴰⵙⴽⴰ ⴴ] LT', + nextWeek: 'dddd [ⴴ] LT', + lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT', + lastWeek: 'dddd [ⴴ] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s', + past: 'ⵢⴰⵏ %s', + s: 'ⵉⵎⵉⴽ', + ss: '%d ⵉⵎⵉⴽ', + m: 'ⵎⵉⵏⵓⴺ', + mm: '%d ⵎⵉⵏⵓⴺ', + h: 'ⵙⴰⵄⴰ', + hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ', + d: 'ⴰⵙⵙ', + dd: '%d oⵙⵙⴰⵏ', + M: 'ⴰⵢoⵓⵔ', + MM: '%d ⵉⵢⵢⵉⵔⵏ', + y: 'ⴰⵙⴳⴰⵙ', + yy: '%d ⵉⵙⴳⴰⵙⵏ', + }, + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('ug-cn', { + months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split( + '_' + ), + monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split( + '_' + ), + weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split( + '_' + ), + weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'), + weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى', + LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm', + LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm', + }, + meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ( + meridiem === 'يېرىم كېچە' || + meridiem === 'سەھەر' || + meridiem === 'چۈشتىن بۇرۇن' + ) { + return hour; + } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') { + return hour + 12; + } else { + return hour >= 11 ? hour : hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return 'يېرىم كېچە'; + } else if (hm < 900) { + return 'سەھەر'; + } else if (hm < 1130) { + return 'چۈشتىن بۇرۇن'; + } else if (hm < 1230) { + return 'چۈش'; + } else if (hm < 1800) { + return 'چۈشتىن كېيىن'; + } else { + return 'كەچ'; + } + }, + calendar: { + sameDay: '[بۈگۈن سائەت] LT', + nextDay: '[ئەتە سائەت] LT', + nextWeek: '[كېلەركى] dddd [سائەت] LT', + lastDay: '[تۆنۈگۈن] LT', + lastWeek: '[ئالدىنقى] dddd [سائەت] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s كېيىن', + past: '%s بۇرۇن', + s: 'نەچچە سېكونت', + ss: '%d سېكونت', + m: 'بىر مىنۇت', + mm: '%d مىنۇت', + h: 'بىر سائەت', + hh: '%d سائەت', + d: 'بىر كۈن', + dd: '%d كۈن', + M: 'بىر ئاي', + MM: '%d ئاي', + y: 'بىر يىل', + yy: '%d يىل', + }, + + dayOfMonthOrdinalParse: /\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '-كۈنى'; + case 'w': + case 'W': + return number + '-ھەپتە'; + default: + return number; + } + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week: { + // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效 + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 1st is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function plural$6(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 + ? forms[0] + : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) + ? forms[1] + : forms[2]; + } + function relativeTimeWithPlural$4(number, withoutSuffix, key) { + var format = { + ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд', + mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин', + hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин', + dd: 'день_дні_днів', + MM: 'місяць_місяці_місяців', + yy: 'рік_роки_років', + }; + if (key === 'm') { + return withoutSuffix ? 'хвилина' : 'хвилину'; + } else if (key === 'h') { + return withoutSuffix ? 'година' : 'годину'; + } else { + return number + ' ' + plural$6(format[key], +number); + } + } + function weekdaysCaseReplace(m, format) { + var weekdays = { + nominative: 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split( + '_' + ), + accusative: 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split( + '_' + ), + genitive: 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split( + '_' + ), + }, + nounCase; + + if (m === true) { + return weekdays['nominative'] + .slice(1, 7) + .concat(weekdays['nominative'].slice(0, 1)); + } + if (!m) { + return weekdays['nominative']; + } + + nounCase = /(\[[ВвУу]\]) ?dddd/.test(format) + ? 'accusative' + : /\[?(?:минулої|наступної)? ?\] ?dddd/.test(format) + ? 'genitive' + : 'nominative'; + return weekdays[nounCase][m.day()]; + } + function processHoursFunction(str) { + return function () { + return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT'; + }; + } + + moment.defineLocale('uk', { + months: { + format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split( + '_' + ), + standalone: 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split( + '_' + ), + }, + monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split( + '_' + ), + weekdays: weekdaysCaseReplace, + weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY р.', + LLL: 'D MMMM YYYY р., HH:mm', + LLLL: 'dddd, D MMMM YYYY р., HH:mm', + }, + calendar: { + sameDay: processHoursFunction('[Сьогодні '), + nextDay: processHoursFunction('[Завтра '), + lastDay: processHoursFunction('[Вчора '), + nextWeek: processHoursFunction('[У] dddd ['), + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 5: + case 6: + return processHoursFunction('[Минулої] dddd [').call(this); + case 1: + case 2: + case 4: + return processHoursFunction('[Минулого] dddd [').call(this); + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'за %s', + past: '%s тому', + s: 'декілька секунд', + ss: relativeTimeWithPlural$4, + m: relativeTimeWithPlural$4, + mm: relativeTimeWithPlural$4, + h: 'годину', + hh: relativeTimeWithPlural$4, + d: 'день', + dd: relativeTimeWithPlural$4, + M: 'місяць', + MM: relativeTimeWithPlural$4, + y: 'рік', + yy: relativeTimeWithPlural$4, + }, + // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason + meridiemParse: /ночі|ранку|дня|вечора/, + isPM: function (input) { + return /^(дня|вечора)$/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'ночі'; + } else if (hour < 12) { + return 'ранку'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечора'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(й|го)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + case 'w': + case 'W': + return number + '-й'; + case 'D': + return number + '-го'; + default: + return number; + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var months$a = [ + 'جنوری', + 'فروری', + 'مارچ', + 'اپریل', + 'مئی', + 'جون', + 'جولائی', + 'اگست', + 'ستمبر', + 'اکتوبر', + 'نومبر', + 'دسمبر', + ], + days$1 = ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'ہفتہ']; + + moment.defineLocale('ur', { + months: months$a, + monthsShort: months$a, + weekdays: days$1, + weekdaysShort: days$1, + weekdaysMin: days$1, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd، D MMMM YYYY HH:mm', + }, + meridiemParse: /صبح|شام/, + isPM: function (input) { + return 'شام' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'صبح'; + } + return 'شام'; + }, + calendar: { + sameDay: '[آج بوقت] LT', + nextDay: '[کل بوقت] LT', + nextWeek: 'dddd [بوقت] LT', + lastDay: '[گذشتہ روز بوقت] LT', + lastWeek: '[گذشتہ] dddd [بوقت] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s بعد', + past: '%s قبل', + s: 'چند سیکنڈ', + ss: '%d سیکنڈ', + m: 'ایک منٹ', + mm: '%d منٹ', + h: 'ایک گھنٹہ', + hh: '%d گھنٹے', + d: 'ایک دن', + dd: '%d دن', + M: 'ایک ماہ', + MM: '%d ماہ', + y: 'ایک سال', + yy: '%d سال', + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('uz-latn', { + months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split( + '_' + ), + monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'), + weekdays: 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split( + '_' + ), + weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'), + weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'D MMMM YYYY, dddd HH:mm', + }, + calendar: { + sameDay: '[Bugun soat] LT [da]', + nextDay: '[Ertaga] LT [da]', + nextWeek: 'dddd [kuni soat] LT [da]', + lastDay: '[Kecha soat] LT [da]', + lastWeek: "[O'tgan] dddd [kuni soat] LT [da]", + sameElse: 'L', + }, + relativeTime: { + future: 'Yaqin %s ichida', + past: 'Bir necha %s oldin', + s: 'soniya', + ss: '%d soniya', + m: 'bir daqiqa', + mm: '%d daqiqa', + h: 'bir soat', + hh: '%d soat', + d: 'bir kun', + dd: '%d kun', + M: 'bir oy', + MM: '%d oy', + y: 'bir yil', + yy: '%d yil', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('uz', { + months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split( + '_' + ), + monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'), + weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'), + weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'), + weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'D MMMM YYYY, dddd HH:mm', + }, + calendar: { + sameDay: '[Бугун соат] LT [да]', + nextDay: '[Эртага] LT [да]', + nextWeek: 'dddd [куни соат] LT [да]', + lastDay: '[Кеча соат] LT [да]', + lastWeek: '[Утган] dddd [куни соат] LT [да]', + sameElse: 'L', + }, + relativeTime: { + future: 'Якин %s ичида', + past: 'Бир неча %s олдин', + s: 'фурсат', + ss: '%d фурсат', + m: 'бир дакика', + mm: '%d дакика', + h: 'бир соат', + hh: '%d соат', + d: 'бир кун', + dd: '%d кун', + M: 'бир ой', + MM: '%d ой', + y: 'бир йил', + yy: '%d йил', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('vi', { + months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split( + '_' + ), + monthsShort: 'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split( + '_' + ), + weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'), + weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'), + weekdaysParseExact: true, + meridiemParse: /sa|ch/i, + isPM: function (input) { + return /^ch$/i.test(input); + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 12) { + return isLower ? 'sa' : 'SA'; + } else { + return isLower ? 'ch' : 'CH'; + } + }, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM [năm] YYYY', + LLL: 'D MMMM [năm] YYYY HH:mm', + LLLL: 'dddd, D MMMM [năm] YYYY HH:mm', + l: 'DD/M/YYYY', + ll: 'D MMM YYYY', + lll: 'D MMM YYYY HH:mm', + llll: 'ddd, D MMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Hôm nay lúc] LT', + nextDay: '[Ngày mai lúc] LT', + nextWeek: 'dddd [tuần tới lúc] LT', + lastDay: '[Hôm qua lúc] LT', + lastWeek: 'dddd [tuần trước lúc] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s tới', + past: '%s trước', + s: 'vài giây', + ss: '%d giây', + m: 'một phút', + mm: '%d phút', + h: 'một giờ', + hh: '%d giờ', + d: 'một ngày', + dd: '%d ngày', + M: 'một tháng', + MM: '%d tháng', + y: 'một năm', + yy: '%d năm', + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal: function (number) { + return number; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('x-pseudo', { + months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split( + '_' + ), + monthsShort: 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split( + '_' + ), + weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'), + weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[T~ódá~ý át] LT', + nextDay: '[T~ómó~rró~w át] LT', + nextWeek: 'dddd [át] LT', + lastDay: '[Ý~ést~érdá~ý át] LT', + lastWeek: '[L~ást] dddd [át] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'í~ñ %s', + past: '%s á~gó', + s: 'á ~féw ~sécó~ñds', + ss: '%d s~écóñ~ds', + m: 'á ~míñ~úté', + mm: '%d m~íñú~tés', + h: 'á~ñ hó~úr', + hh: '%d h~óúrs', + d: 'á ~dáý', + dd: '%d d~áýs', + M: 'á ~móñ~th', + MM: '%d m~óñt~hs', + y: 'á ~ýéár', + yy: '%d ý~éárs', + }, + dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('yo', { + months: 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split( + '_' + ), + monthsShort: 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'), + weekdays: 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'), + weekdaysShort: 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'), + weekdaysMin: 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'), + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A', + }, + calendar: { + sameDay: '[Ònì ni] LT', + nextDay: '[Ọ̀la ni] LT', + nextWeek: "dddd [Ọsẹ̀ tón'bọ] [ni] LT", + lastDay: '[Àna ni] LT', + lastWeek: 'dddd [Ọsẹ̀ tólọ́] [ni] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'ní %s', + past: '%s kọjá', + s: 'ìsẹjú aayá die', + ss: 'aayá %d', + m: 'ìsẹjú kan', + mm: 'ìsẹjú %d', + h: 'wákati kan', + hh: 'wákati %d', + d: 'ọjọ́ kan', + dd: 'ọjọ́ %d', + M: 'osù kan', + MM: 'osù %d', + y: 'ọdún kan', + yy: 'ọdún %d', + }, + dayOfMonthOrdinalParse: /ọjọ́\s\d{1,2}/, + ordinal: 'ọjọ́ %d', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('zh-cn', { + months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split( + '_' + ), + monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split( + '_' + ), + weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'), + weekdaysMin: '日_一_二_三_四_五_六'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY年M月D日', + LLL: 'YYYY年M月D日Ah点mm分', + LLLL: 'YYYY年M月D日ddddAh点mm分', + l: 'YYYY/M/D', + ll: 'YYYY年M月D日', + lll: 'YYYY年M月D日 HH:mm', + llll: 'YYYY年M月D日dddd HH:mm', + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { + return hour; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } else { + // '中午' + return hour >= 11 ? hour : hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar: { + sameDay: '[今天]LT', + nextDay: '[明天]LT', + nextWeek: function (now) { + if (now.week() !== this.week()) { + return '[下]dddLT'; + } else { + return '[本]dddLT'; + } + }, + lastDay: '[昨天]LT', + lastWeek: function (now) { + if (this.week() !== now.week()) { + return '[上]dddLT'; + } else { + return '[本]dddLT'; + } + }, + sameElse: 'L', + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '日'; + case 'M': + return number + '月'; + case 'w': + case 'W': + return number + '周'; + default: + return number; + } + }, + relativeTime: { + future: '%s后', + past: '%s前', + s: '几秒', + ss: '%d 秒', + m: '1 分钟', + mm: '%d 分钟', + h: '1 小时', + hh: '%d 小时', + d: '1 天', + dd: '%d 天', + M: '1 个月', + MM: '%d 个月', + y: '1 年', + yy: '%d 年', + }, + week: { + // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效 + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('zh-hk', { + months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split( + '_' + ), + monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split( + '_' + ), + weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'), + weekdaysMin: '日_一_二_三_四_五_六'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY年M月D日', + LLL: 'YYYY年M月D日 HH:mm', + LLLL: 'YYYY年M月D日dddd HH:mm', + l: 'YYYY/M/D', + ll: 'YYYY年M月D日', + lll: 'YYYY年M月D日 HH:mm', + llll: 'YYYY年M月D日dddd HH:mm', + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { + return hour; + } else if (meridiem === '中午') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1200) { + return '上午'; + } else if (hm === 1200) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar: { + sameDay: '[今天]LT', + nextDay: '[明天]LT', + nextWeek: '[下]ddddLT', + lastDay: '[昨天]LT', + lastWeek: '[上]ddddLT', + sameElse: 'L', + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '日'; + case 'M': + return number + '月'; + case 'w': + case 'W': + return number + '週'; + default: + return number; + } + }, + relativeTime: { + future: '%s後', + past: '%s前', + s: '幾秒', + ss: '%d 秒', + m: '1 分鐘', + mm: '%d 分鐘', + h: '1 小時', + hh: '%d 小時', + d: '1 天', + dd: '%d 天', + M: '1 個月', + MM: '%d 個月', + y: '1 年', + yy: '%d 年', + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('zh-mo', { + months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split( + '_' + ), + monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split( + '_' + ), + weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'), + weekdaysMin: '日_一_二_三_四_五_六'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'YYYY年M月D日', + LLL: 'YYYY年M月D日 HH:mm', + LLLL: 'YYYY年M月D日dddd HH:mm', + l: 'D/M/YYYY', + ll: 'YYYY年M月D日', + lll: 'YYYY年M月D日 HH:mm', + llll: 'YYYY年M月D日dddd HH:mm', + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { + return hour; + } else if (meridiem === '中午') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar: { + sameDay: '[今天] LT', + nextDay: '[明天] LT', + nextWeek: '[下]dddd LT', + lastDay: '[昨天] LT', + lastWeek: '[上]dddd LT', + sameElse: 'L', + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '日'; + case 'M': + return number + '月'; + case 'w': + case 'W': + return number + '週'; + default: + return number; + } + }, + relativeTime: { + future: '%s內', + past: '%s前', + s: '幾秒', + ss: '%d 秒', + m: '1 分鐘', + mm: '%d 分鐘', + h: '1 小時', + hh: '%d 小時', + d: '1 天', + dd: '%d 天', + M: '1 個月', + MM: '%d 個月', + y: '1 年', + yy: '%d 年', + }, + }); + + //! moment.js locale configuration + + moment.defineLocale('zh-tw', { + months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split( + '_' + ), + monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split( + '_' + ), + weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'), + weekdaysMin: '日_一_二_三_四_五_六'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY年M月D日', + LLL: 'YYYY年M月D日 HH:mm', + LLLL: 'YYYY年M月D日dddd HH:mm', + l: 'YYYY/M/D', + ll: 'YYYY年M月D日', + lll: 'YYYY年M月D日 HH:mm', + llll: 'YYYY年M月D日dddd HH:mm', + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { + return hour; + } else if (meridiem === '中午') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar: { + sameDay: '[今天] LT', + nextDay: '[明天] LT', + nextWeek: '[下]dddd LT', + lastDay: '[昨天] LT', + lastWeek: '[上]dddd LT', + sameElse: 'L', + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '日'; + case 'M': + return number + '月'; + case 'w': + case 'W': + return number + '週'; + default: + return number; + } + }, + relativeTime: { + future: '%s後', + past: '%s前', + s: '幾秒', + ss: '%d 秒', + m: '1 分鐘', + mm: '%d 分鐘', + h: '1 小時', + hh: '%d 小時', + d: '1 天', + dd: '%d 天', + M: '1 個月', + MM: '%d 個月', + y: '1 年', + yy: '%d 年', + }, + }); + + moment.locale('en'); + + return moment; + +}))); diff --git a/admin/js/vendors/moment/locales.min.js b/admin/js/vendors/moment/locales.min.js new file mode 100644 index 0000000..56da071 --- /dev/null +++ b/admin/js/vendors/moment/locales.min.js @@ -0,0 +1,2 @@ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module&&"function"==typeof require?a(require("../moment")):"function"==typeof define&&define.amd?define(["../moment"],a):a(e.moment)}(this,function(e){"use strict";e.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(e){return/^nm$/i.test(e)},meridiem:function(e,a,_){return e<12?_?"vm":"VM":_?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[M\xf4re om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",ss:"%d sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}});function r(e){return 0===e?0:1===e?1:2===e?2:3<=e%100&&e%100<=10?3:11<=e%100?4:5}function a(n){return function(e,a,_,s){var d=r(e),t=i[n][r(e)];return 2===d&&(t=t[a?0:1]),t.replace(/%d/i,e)}}var i={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},_=["\u062c\u0627\u0646\u0641\u064a","\u0641\u064a\u0641\u0631\u064a","\u0645\u0627\u0631\u0633","\u0623\u0641\u0631\u064a\u0644","\u0645\u0627\u064a","\u062c\u0648\u0627\u0646","\u062c\u0648\u064a\u0644\u064a\u0629","\u0623\u0648\u062a","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];e.defineLocale("ar-dz",{months:_,monthsShort:_,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,_){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:a("s"),ss:a("s"),m:a("m"),mm:a("m"),h:a("h"),hh:a("h"),d:a("d"),dd:a("d"),M:a("M"),MM:a("M"),y:a("y"),yy:a("y")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:0,doy:4}}),e.defineLocale("ar-kw",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062a\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062a\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:0,doy:12}});function m(e){return 0===e?0:1===e?1:2===e?2:3<=e%100&&e%100<=10?3:11<=e%100?4:5}function s(n){return function(e,a,_,s){var d=m(e),t=o[n][m(e)];return 2===d&&(t=t[a?0:1]),t.replace(/%d/i,e)}}var d={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},o={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},t=["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];e.defineLocale("ar-ly",{months:t,monthsShort:t,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,_){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:s("s"),ss:s("s"),m:s("m"),mm:s("m"),h:s("h"),hh:s("h"),d:s("d"),dd:s("d"),M:s("M"),MM:s("M"),y:s("y"),yy:s("y")},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return d[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}}),e.defineLocale("ar-ma",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:6,doy:12}});var n={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},u={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"};e.defineLocale("ar-sa",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a\u0648_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648_\u0623\u063a\u0633\u0637\u0633_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a\u0648_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648_\u0623\u063a\u0633\u0637\u0633_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,_){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return u[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return n[e]}).replace(/,/g,"\u060c")},week:{dow:0,doy:6}}),e.defineLocale("ar-tn",{months:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:1,doy:4}});function l(e){return 0===e?0:1===e?1:2===e?2:3<=e%100&&e%100<=10?3:11<=e%100?4:5}function M(n){return function(e,a,_,s){var d=l(e),t=h[n][l(e)];return 2===d&&(t=t[a?0:1]),t.replace(/%d/i,e)}}var L={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},Y={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},h={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},y=["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];e.defineLocale("ar",{months:y,monthsShort:y,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,_){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:M("s"),ss:M("s"),m:M("m"),mm:M("m"),h:M("h"),hh:M("h"),d:M("d"),dd:M("d"),M:M("M"),MM:M("M"),y:M("y"),yy:M("y")},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return Y[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return L[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}});var c={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-\xfcnc\xfc",4:"-\xfcnc\xfc",100:"-\xfcnc\xfc",6:"-nc\u0131",9:"-uncu",10:"-uncu",30:"-uncu",60:"-\u0131nc\u0131",90:"-\u0131nc\u0131"};function k(e,a,_){var s,d;return"m"===_?a?"\u0445\u0432\u0456\u043b\u0456\u043d\u0430":"\u0445\u0432\u0456\u043b\u0456\u043d\u0443":"h"===_?a?"\u0433\u0430\u0434\u0437\u0456\u043d\u0430":"\u0433\u0430\u0434\u0437\u0456\u043d\u0443":e+" "+(s=+e,d={ss:a?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434",mm:a?"\u0445\u0432\u0456\u043b\u0456\u043d\u0430_\u0445\u0432\u0456\u043b\u0456\u043d\u044b_\u0445\u0432\u0456\u043b\u0456\u043d":"\u0445\u0432\u0456\u043b\u0456\u043d\u0443_\u0445\u0432\u0456\u043b\u0456\u043d\u044b_\u0445\u0432\u0456\u043b\u0456\u043d",hh:a?"\u0433\u0430\u0434\u0437\u0456\u043d\u0430_\u0433\u0430\u0434\u0437\u0456\u043d\u044b_\u0433\u0430\u0434\u0437\u0456\u043d":"\u0433\u0430\u0434\u0437\u0456\u043d\u0443_\u0433\u0430\u0434\u0437\u0456\u043d\u044b_\u0433\u0430\u0434\u0437\u0456\u043d",dd:"\u0434\u0437\u0435\u043d\u044c_\u0434\u043d\u0456_\u0434\u0437\u0451\u043d",MM:"\u043c\u0435\u0441\u044f\u0446_\u043c\u0435\u0441\u044f\u0446\u044b_\u043c\u0435\u0441\u044f\u0446\u0430\u045e",yy:"\u0433\u043e\u0434_\u0433\u0430\u0434\u044b_\u0433\u0430\u0434\u043e\u045e"}[_].split("_"),s%10==1&&s%100!=11?d[0]:2<=s%10&&s%10<=4&&(s%100<10||20<=s%100)?d[1]:d[2])}e.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ert\u0259si_\xc7\u0259r\u015f\u0259nb\u0259 ax\u015fam\u0131_\xc7\u0259r\u015f\u0259nb\u0259_C\xfcm\u0259 ax\u015fam\u0131_C\xfcm\u0259_\u015e\u0259nb\u0259".split("_"),weekdaysShort:"Baz_BzE_\xc7Ax_\xc7\u0259r_CAx_C\xfcm_\u015e\u0259n".split("_"),weekdaysMin:"Bz_BE_\xc7A_\xc7\u0259_CA_C\xfc_\u015e\u0259".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[g\u0259l\u0259n h\u0259ft\u0259] dddd [saat] LT",lastDay:"[d\xfcn\u0259n] LT",lastWeek:"[ke\xe7\u0259n h\u0259ft\u0259] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s \u0259vv\u0259l",s:"bir ne\xe7\u0259 saniy\u0259",ss:"%d saniy\u0259",m:"bir d\u0259qiq\u0259",mm:"%d d\u0259qiq\u0259",h:"bir saat",hh:"%d saat",d:"bir g\xfcn",dd:"%d g\xfcn",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gec\u0259|s\u0259h\u0259r|g\xfcnd\xfcz|ax\u015fam/,isPM:function(e){return/^(g\xfcnd\xfcz|ax\u015fam)$/.test(e)},meridiem:function(e,a,_){return e<4?"gec\u0259":e<12?"s\u0259h\u0259r":e<17?"g\xfcnd\xfcz":"ax\u015fam"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0131nc\u0131|inci|nci|\xfcnc\xfc|nc\u0131|uncu)/,ordinal:function(e){if(0===e)return e+"-\u0131nc\u0131";var a=e%10;return e+(c[a]||c[e%100-a]||c[100<=e?100:null])},week:{dow:1,doy:7}}),e.defineLocale("be",{months:{format:"\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044f_\u043b\u044e\u0442\u0430\u0433\u0430_\u0441\u0430\u043a\u0430\u0432\u0456\u043a\u0430_\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a\u0430_\u0442\u0440\u0430\u045e\u043d\u044f_\u0447\u044d\u0440\u0432\u0435\u043d\u044f_\u043b\u0456\u043f\u0435\u043d\u044f_\u0436\u043d\u0456\u045e\u043d\u044f_\u0432\u0435\u0440\u0430\u0441\u043d\u044f_\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a\u0430_\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434\u0430_\u0441\u043d\u0435\u0436\u043d\u044f".split("_"),standalone:"\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044c_\u043b\u044e\u0442\u044b_\u0441\u0430\u043a\u0430\u0432\u0456\u043a_\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a_\u0442\u0440\u0430\u0432\u0435\u043d\u044c_\u0447\u044d\u0440\u0432\u0435\u043d\u044c_\u043b\u0456\u043f\u0435\u043d\u044c_\u0436\u043d\u0456\u0432\u0435\u043d\u044c_\u0432\u0435\u0440\u0430\u0441\u0435\u043d\u044c_\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a_\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434_\u0441\u043d\u0435\u0436\u0430\u043d\u044c".split("_")},monthsShort:"\u0441\u0442\u0443\u0434_\u043b\u044e\u0442_\u0441\u0430\u043a_\u043a\u0440\u0430\u0441_\u0442\u0440\u0430\u0432_\u0447\u044d\u0440\u0432_\u043b\u0456\u043f_\u0436\u043d\u0456\u0432_\u0432\u0435\u0440_\u043a\u0430\u0441\u0442_\u043b\u0456\u0441\u0442_\u0441\u043d\u0435\u0436".split("_"),weekdays:{format:"\u043d\u044f\u0434\u0437\u0435\u043b\u044e_\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a_\u0430\u045e\u0442\u043e\u0440\u0430\u043a_\u0441\u0435\u0440\u0430\u0434\u0443_\u0447\u0430\u0446\u0432\u0435\u0440_\u043f\u044f\u0442\u043d\u0456\u0446\u0443_\u0441\u0443\u0431\u043e\u0442\u0443".split("_"),standalone:"\u043d\u044f\u0434\u0437\u0435\u043b\u044f_\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a_\u0430\u045e\u0442\u043e\u0440\u0430\u043a_\u0441\u0435\u0440\u0430\u0434\u0430_\u0447\u0430\u0446\u0432\u0435\u0440_\u043f\u044f\u0442\u043d\u0456\u0446\u0430_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),isFormat:/\[ ?[\u0423\u0443\u045e] ?(?:\u043c\u0456\u043d\u0443\u043b\u0443\u044e|\u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0443\u044e)? ?\] ?dddd/},weekdaysShort:"\u043d\u0434_\u043f\u043d_\u0430\u0442_\u0441\u0440_\u0447\u0446_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0430\u0442_\u0441\u0440_\u0447\u0446_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., HH:mm",LLLL:"dddd, D MMMM YYYY \u0433., HH:mm"},calendar:{sameDay:"[\u0421\u0451\u043d\u043d\u044f \u045e] LT",nextDay:"[\u0417\u0430\u045e\u0442\u0440\u0430 \u045e] LT",lastDay:"[\u0423\u0447\u043e\u0440\u0430 \u045e] LT",nextWeek:function(){return"[\u0423] dddd [\u045e] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[\u0423 \u043c\u0456\u043d\u0443\u043b\u0443\u044e] dddd [\u045e] LT";case 1:case 2:case 4:return"[\u0423 \u043c\u0456\u043d\u0443\u043b\u044b] dddd [\u045e] LT"}},sameElse:"L"},relativeTime:{future:"\u043f\u0440\u0430\u0437 %s",past:"%s \u0442\u0430\u043c\u0443",s:"\u043d\u0435\u043a\u0430\u043b\u044c\u043a\u0456 \u0441\u0435\u043a\u0443\u043d\u0434",m:k,mm:k,h:k,hh:k,d:"\u0434\u0437\u0435\u043d\u044c",dd:k,M:"\u043c\u0435\u0441\u044f\u0446",MM:k,y:"\u0433\u043e\u0434",yy:k},meridiemParse:/\u043d\u043e\u0447\u044b|\u0440\u0430\u043d\u0456\u0446\u044b|\u0434\u043d\u044f|\u0432\u0435\u0447\u0430\u0440\u0430/,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u0430\u0440\u0430)$/.test(e)},meridiem:function(e,a,_){return e<4?"\u043d\u043e\u0447\u044b":e<12?"\u0440\u0430\u043d\u0456\u0446\u044b":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u0430\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0456|\u044b|\u0433\u0430)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":case"w":case"W":return e%10!=2&&e%10!=3||e%100==12||e%100==13?e+"-\u044b":e+"-\u0456";case"D":return e+"-\u0433\u0430";default:return e}},week:{dow:1,doy:7}}),e.defineLocale("bg",{months:"\u044f\u043d\u0443\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0439_\u044e\u043d\u0438_\u044e\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438_\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438_\u043d\u043e\u0435\u043c\u0432\u0440\u0438_\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438".split("_"),monthsShort:"\u044f\u043d\u0443_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u044e\u043d\u0438_\u044e\u043b\u0438_\u0430\u0432\u0433_\u0441\u0435\u043f_\u043e\u043a\u0442_\u043d\u043e\u0435_\u0434\u0435\u043a".split("_"),weekdays:"\u043d\u0435\u0434\u0435\u043b\u044f_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u044f\u0434\u0430_\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a_\u043f\u0435\u0442\u044a\u043a_\u0441\u044a\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434_\u043f\u043e\u043d_\u0432\u0442\u043e_\u0441\u0440\u044f_\u0447\u0435\u0442_\u043f\u0435\u0442_\u0441\u044a\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[\u0414\u043d\u0435\u0441 \u0432] LT",nextDay:"[\u0423\u0442\u0440\u0435 \u0432] LT",nextWeek:"dddd [\u0432] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430 \u0432] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[\u041c\u0438\u043d\u0430\u043b\u0430\u0442\u0430] dddd [\u0432] LT";case 1:case 2:case 4:case 5:return"[\u041c\u0438\u043d\u0430\u043b\u0438\u044f] dddd [\u0432] LT"}},sameElse:"L"},relativeTime:{future:"\u0441\u043b\u0435\u0434 %s",past:"\u043f\u0440\u0435\u0434\u0438 %s",s:"\u043d\u044f\u043a\u043e\u043b\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434\u0438",m:"\u043c\u0438\u043d\u0443\u0442\u0430",mm:"%d \u043c\u0438\u043d\u0443\u0442\u0438",h:"\u0447\u0430\u0441",hh:"%d \u0447\u0430\u0441\u0430",d:"\u0434\u0435\u043d",dd:"%d \u0434\u0435\u043d\u0430",M:"\u043c\u0435\u0441\u0435\u0446",MM:"%d \u043c\u0435\u0441\u0435\u0446\u0430",y:"\u0433\u043e\u0434\u0438\u043d\u0430",yy:"%d \u0433\u043e\u0434\u0438\u043d\u0438"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0435\u0432|\u0435\u043d|\u0442\u0438|\u0432\u0438|\u0440\u0438|\u043c\u0438)/,ordinal:function(e){var a=e%10,_=e%100;return 0===e?e+"-\u0435\u0432":0==_?e+"-\u0435\u043d":10<_&&_<20?e+"-\u0442\u0438":1==a?e+"-\u0432\u0438":2==a?e+"-\u0440\u0438":7==a||8==a?e+"-\u043c\u0438":e+"-\u0442\u0438"},week:{dow:1,doy:7}}),e.defineLocale("bm",{months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_M\u025bkalo_Zuw\u025bnkalo_Zuluyekalo_Utikalo_S\u025btanburukalo_\u0254kut\u0254burukalo_Nowanburukalo_Desanburukalo".split("_"),monthsShort:"Zan_Few_Mar_Awi_M\u025b_Zuw_Zul_Uti_S\u025bt_\u0254ku_Now_Des".split("_"),weekdays:"Kari_Nt\u025bn\u025bn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),weekdaysShort:"Kar_Nt\u025b_Tar_Ara_Ala_Jum_Sib".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [l\u025br\u025b] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [l\u025br\u025b] HH:mm"},calendar:{sameDay:"[Bi l\u025br\u025b] LT",nextDay:"[Sini l\u025br\u025b] LT",nextWeek:"dddd [don l\u025br\u025b] LT",lastDay:"[Kunu l\u025br\u025b] LT",lastWeek:"dddd [t\u025bm\u025bnen l\u025br\u025b] LT",sameElse:"L"},relativeTime:{future:"%s k\u0254n\u0254",past:"a b\u025b %s b\u0254",s:"sanga dama dama",ss:"sekondi %d",m:"miniti kelen",mm:"miniti %d",h:"l\u025br\u025b kelen",hh:"l\u025br\u025b %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"},week:{dow:1,doy:4}});var D={1:"\u09e7",2:"\u09e8",3:"\u09e9",4:"\u09ea",5:"\u09eb",6:"\u09ec",7:"\u09ed",8:"\u09ee",9:"\u09ef",0:"\u09e6"},p={"\u09e7":"1","\u09e8":"2","\u09e9":"3","\u09ea":"4","\u09eb":"5","\u09ec":"6","\u09ed":"7","\u09ee":"8","\u09ef":"9","\u09e6":"0"};e.defineLocale("bn",{months:"\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09bf_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09bf_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0_\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0_\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0_\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0".split("_"),monthsShort:"\u099c\u09be\u09a8\u09c1_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f_\u0985\u0995\u09cd\u099f\u09cb_\u09a8\u09ad\u09c7_\u09a1\u09bf\u09b8\u09c7".split("_"),weekdays:"\u09b0\u09ac\u09bf\u09ac\u09be\u09b0_\u09b8\u09cb\u09ae\u09ac\u09be\u09b0_\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0_\u09ac\u09c1\u09a7\u09ac\u09be\u09b0_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0_\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0_\u09b6\u09a8\u09bf\u09ac\u09be\u09b0".split("_"),weekdaysShort:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),weekdaysMin:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),longDateFormat:{LT:"A h:mm \u09b8\u09ae\u09df",LTS:"A h:mm:ss \u09b8\u09ae\u09df",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u09b8\u09ae\u09df",LLLL:"dddd, D MMMM YYYY, A h:mm \u09b8\u09ae\u09df"},calendar:{sameDay:"[\u0986\u099c] LT",nextDay:"[\u0986\u0997\u09be\u09ae\u09c0\u0995\u09be\u09b2] LT",nextWeek:"dddd, LT",lastDay:"[\u0997\u09a4\u0995\u09be\u09b2] LT",lastWeek:"[\u0997\u09a4] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u09aa\u09b0\u09c7",past:"%s \u0986\u0997\u09c7",s:"\u0995\u09df\u09c7\u0995 \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",ss:"%d \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",m:"\u098f\u0995 \u09ae\u09bf\u09a8\u09bf\u099f",mm:"%d \u09ae\u09bf\u09a8\u09bf\u099f",h:"\u098f\u0995 \u0998\u09a8\u09cd\u099f\u09be",hh:"%d \u0998\u09a8\u09cd\u099f\u09be",d:"\u098f\u0995 \u09a6\u09bf\u09a8",dd:"%d \u09a6\u09bf\u09a8",M:"\u098f\u0995 \u09ae\u09be\u09b8",MM:"%d \u09ae\u09be\u09b8",y:"\u098f\u0995 \u09ac\u099b\u09b0",yy:"%d \u09ac\u099b\u09b0"},preparse:function(e){return e.replace(/[\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u09e6]/g,function(e){return p[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return D[e]})},meridiemParse:/\u09b0\u09be\u09a4|\u09b8\u0995\u09be\u09b2|\u09a6\u09c1\u09aa\u09c1\u09b0|\u09ac\u09bf\u0995\u09be\u09b2|\u09b0\u09be\u09a4/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u09b0\u09be\u09a4"===a&&4<=e||"\u09a6\u09c1\u09aa\u09c1\u09b0"===a&&e<5||"\u09ac\u09bf\u0995\u09be\u09b2"===a?e+12:e},meridiem:function(e,a,_){return e<4?"\u09b0\u09be\u09a4":e<10?"\u09b8\u0995\u09be\u09b2":e<17?"\u09a6\u09c1\u09aa\u09c1\u09b0":e<20?"\u09ac\u09bf\u0995\u09be\u09b2":"\u09b0\u09be\u09a4"},week:{dow:0,doy:6}});var T={1:"\u0f21",2:"\u0f22",3:"\u0f23",4:"\u0f24",5:"\u0f25",6:"\u0f26",7:"\u0f27",8:"\u0f28",9:"\u0f29",0:"\u0f20"},f={"\u0f21":"1","\u0f22":"2","\u0f23":"3","\u0f24":"4","\u0f25":"5","\u0f26":"6","\u0f27":"7","\u0f28":"8","\u0f29":"9","\u0f20":"0"};function g(e,a,_){var s;return e+" "+(s={mm:"munutenn",MM:"miz",dd:"devezh"}[_],2!==e?s:function(e){var a={m:"v",b:"v",d:"z"};return void 0!==a[e.charAt(0)]?a[e.charAt(0)]+e.substring(1):e}(s))}e.defineLocale("bo",{months:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f44\u0f0b\u0f54\u0f7c_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f66\u0f74\u0f58\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f63\u0f94\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54".split("_"),monthsShort:"\u0f5f\u0fb3\u0f0b1_\u0f5f\u0fb3\u0f0b2_\u0f5f\u0fb3\u0f0b3_\u0f5f\u0fb3\u0f0b4_\u0f5f\u0fb3\u0f0b5_\u0f5f\u0fb3\u0f0b6_\u0f5f\u0fb3\u0f0b7_\u0f5f\u0fb3\u0f0b8_\u0f5f\u0fb3\u0f0b9_\u0f5f\u0fb3\u0f0b10_\u0f5f\u0fb3\u0f0b11_\u0f5f\u0fb3\u0f0b12".split("_"),monthsShortRegex:/^(\u0f5f\u0fb3\u0f0b\d{1,2})/,monthsParseExact:!0,weekdays:"\u0f42\u0f5f\u0f60\u0f0b\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),weekdaysShort:"\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),weekdaysMin:"\u0f49\u0f72_\u0f5f\u0fb3_\u0f58\u0f72\u0f42_\u0f63\u0fb7\u0f42_\u0f55\u0f74\u0f62_\u0f66\u0f44\u0f66_\u0f66\u0fa4\u0f7a\u0f53".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0f51\u0f72\u0f0b\u0f62\u0f72\u0f44] LT",nextDay:"[\u0f66\u0f44\u0f0b\u0f49\u0f72\u0f53] LT",nextWeek:"[\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f55\u0fb2\u0f42\u0f0b\u0f62\u0f97\u0f7a\u0f66\u0f0b\u0f58], LT",lastDay:"[\u0f41\u0f0b\u0f66\u0f44] LT",lastWeek:"[\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f55\u0fb2\u0f42\u0f0b\u0f58\u0f50\u0f60\u0f0b\u0f58] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0f63\u0f0b",past:"%s \u0f66\u0f94\u0f53\u0f0b\u0f63",s:"\u0f63\u0f58\u0f0b\u0f66\u0f44",ss:"%d \u0f66\u0f90\u0f62\u0f0b\u0f46\u0f0d",m:"\u0f66\u0f90\u0f62\u0f0b\u0f58\u0f0b\u0f42\u0f45\u0f72\u0f42",mm:"%d \u0f66\u0f90\u0f62\u0f0b\u0f58",h:"\u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0b\u0f42\u0f45\u0f72\u0f42",hh:"%d \u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51",d:"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f45\u0f72\u0f42",dd:"%d \u0f49\u0f72\u0f53\u0f0b",M:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f45\u0f72\u0f42",MM:"%d \u0f5f\u0fb3\u0f0b\u0f56",y:"\u0f63\u0f7c\u0f0b\u0f42\u0f45\u0f72\u0f42",yy:"%d \u0f63\u0f7c"},preparse:function(e){return e.replace(/[\u0f21\u0f22\u0f23\u0f24\u0f25\u0f26\u0f27\u0f28\u0f29\u0f20]/g,function(e){return f[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return T[e]})},meridiemParse:/\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c|\u0f5e\u0f7c\u0f42\u0f66\u0f0b\u0f40\u0f66|\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44|\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42|\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c"===a&&4<=e||"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44"===a&&e<5||"\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42"===a?e+12:e},meridiem:function(e,a,_){return e<4?"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c":e<10?"\u0f5e\u0f7c\u0f42\u0f66\u0f0b\u0f40\u0f66":e<17?"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44":e<20?"\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42":"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c"},week:{dow:0,doy:6}});var w=[/^gen/i,/^c[\u02bc\']hwe/i,/^meu/i,/^ebr/i,/^mae/i,/^(mez|eve)/i,/^gou/i,/^eos/i,/^gwe/i,/^her/i,/^du/i,/^ker/i],H=/^(genver|c[\u02bc\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[\u02bc\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,b=[/^Su/i,/^Lu/i,/^Me([^r]|$)/i,/^Mer/i,/^Ya/i,/^Gw/i,/^Sa/i];function v(e,a,_){var s=e+" ";switch(_){case"ss":return s+=1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi";case"m":return a?"jedna minuta":"jedne minute";case"mm":return s+=1!==e&&(2===e||3===e||4===e)?"minute":"minuta";case"h":return a?"jedan sat":"jednog sata";case"hh":return s+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return s+=1===e?"dan":"dana";case"MM":return s+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return s+=1!==e&&(2===e||3===e||4===e)?"godine":"godina"}}e.defineLocale("br",{months:"Genver_C\u02bchwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C\u02bchwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc\u02bcher_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParse:b,fullWeekdaysParse:[/^sul/i,/^lun/i,/^meurzh/i,/^merc[\u02bc\']her/i,/^yaou/i,/^gwener/i,/^sadorn/i],shortWeekdaysParse:[/^Sul/i,/^Lun/i,/^Meu/i,/^Mer/i,/^Yao/i,/^Gwe/i,/^Sad/i],minWeekdaysParse:b,monthsRegex:H,monthsShortRegex:H,monthsStrictRegex:/^(genver|c[\u02bc\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,monthsShortStrictRegex:/^(gen|c[\u02bc\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,monthsParse:w,longMonthsParse:w,shortMonthsParse:w,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY HH:mm",LLLL:"dddd, D [a viz] MMMM YYYY HH:mm"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc\u02bchoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec\u02bch da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s \u02bczo",s:"un nebeud segondenno\xf9",ss:"%d eilenn",m:"ur vunutenn",mm:g,h:"un eur",hh:"%d eur",d:"un devezh",dd:g,M:"ur miz",MM:g,y:"ur bloaz",yy:function(e){switch(function e(a){if(9>> 0, + i; + + for (i = 0; i < len; i++) { + if (i in t && fun.call(this, t[i], i, t)) { + return true; + } + } + + return false; + }; + } + + function isValid(m) { + if (m._isValid == null) { + var flags = getParsingFlags(m), + parsedParts = some.call(flags.parsedDateParts, function (i) { + return i != null; + }), + isNowValid = + !isNaN(m._d.getTime()) && + flags.overflow < 0 && + !flags.empty && + !flags.invalidEra && + !flags.invalidMonth && + !flags.invalidWeekday && + !flags.weekdayMismatch && + !flags.nullInput && + !flags.invalidFormat && + !flags.userInvalidated && + (!flags.meridiem || (flags.meridiem && parsedParts)); + + if (m._strict) { + isNowValid = + isNowValid && + flags.charsLeftOver === 0 && + flags.unusedTokens.length === 0 && + flags.bigHour === undefined; + } + + if (Object.isFrozen == null || !Object.isFrozen(m)) { + m._isValid = isNowValid; + } else { + return isNowValid; + } + } + return m._isValid; + } + + function createInvalid(flags) { + var m = createUTC(NaN); + if (flags != null) { + extend(getParsingFlags(m), flags); + } else { + getParsingFlags(m).userInvalidated = true; + } + + return m; + } + + // Plugins that add properties should also add the key here (null value), + // so we can properly clone ourselves. + var momentProperties = (hooks.momentProperties = []), + updateInProgress = false; + + function copyConfig(to, from) { + var i, prop, val; + + if (!isUndefined(from._isAMomentObject)) { + to._isAMomentObject = from._isAMomentObject; + } + if (!isUndefined(from._i)) { + to._i = from._i; + } + if (!isUndefined(from._f)) { + to._f = from._f; + } + if (!isUndefined(from._l)) { + to._l = from._l; + } + if (!isUndefined(from._strict)) { + to._strict = from._strict; + } + if (!isUndefined(from._tzm)) { + to._tzm = from._tzm; + } + if (!isUndefined(from._isUTC)) { + to._isUTC = from._isUTC; + } + if (!isUndefined(from._offset)) { + to._offset = from._offset; + } + if (!isUndefined(from._pf)) { + to._pf = getParsingFlags(from); + } + if (!isUndefined(from._locale)) { + to._locale = from._locale; + } + + if (momentProperties.length > 0) { + for (i = 0; i < momentProperties.length; i++) { + prop = momentProperties[i]; + val = from[prop]; + if (!isUndefined(val)) { + to[prop] = val; + } + } + } + + return to; + } + + // Moment prototype object + function Moment(config) { + copyConfig(this, config); + this._d = new Date(config._d != null ? config._d.getTime() : NaN); + if (!this.isValid()) { + this._d = new Date(NaN); + } + // Prevent infinite loop in case updateOffset creates new moment + // objects. + if (updateInProgress === false) { + updateInProgress = true; + hooks.updateOffset(this); + updateInProgress = false; + } + } + + function isMoment(obj) { + return ( + obj instanceof Moment || (obj != null && obj._isAMomentObject != null) + ); + } + + function warn(msg) { + if ( + hooks.suppressDeprecationWarnings === false && + typeof console !== 'undefined' && + console.warn + ) { + console.warn('Deprecation warning: ' + msg); + } + } + + function deprecate(msg, fn) { + var firstTime = true; + + return extend(function () { + if (hooks.deprecationHandler != null) { + hooks.deprecationHandler(null, msg); + } + if (firstTime) { + var args = [], + arg, + i, + key; + for (i = 0; i < arguments.length; i++) { + arg = ''; + if (typeof arguments[i] === 'object') { + arg += '\n[' + i + '] '; + for (key in arguments[0]) { + if (hasOwnProp(arguments[0], key)) { + arg += key + ': ' + arguments[0][key] + ', '; + } + } + arg = arg.slice(0, -2); // Remove trailing comma and space + } else { + arg = arguments[i]; + } + args.push(arg); + } + warn( + msg + + '\nArguments: ' + + Array.prototype.slice.call(args).join('') + + '\n' + + new Error().stack + ); + firstTime = false; + } + return fn.apply(this, arguments); + }, fn); + } + + var deprecations = {}; + + function deprecateSimple(name, msg) { + if (hooks.deprecationHandler != null) { + hooks.deprecationHandler(name, msg); + } + if (!deprecations[name]) { + warn(msg); + deprecations[name] = true; + } + } + + hooks.suppressDeprecationWarnings = false; + hooks.deprecationHandler = null; + + function isFunction(input) { + return ( + (typeof Function !== 'undefined' && input instanceof Function) || + Object.prototype.toString.call(input) === '[object Function]' + ); + } + + function set(config) { + var prop, i; + for (i in config) { + if (hasOwnProp(config, i)) { + prop = config[i]; + if (isFunction(prop)) { + this[i] = prop; + } else { + this['_' + i] = prop; + } + } + } + this._config = config; + // Lenient ordinal parsing accepts just a number in addition to + // number + (possibly) stuff coming from _dayOfMonthOrdinalParse. + // TODO: Remove "ordinalParse" fallback in next major release. + this._dayOfMonthOrdinalParseLenient = new RegExp( + (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + + '|' + + /\d{1,2}/.source + ); + } + + function mergeConfigs(parentConfig, childConfig) { + var res = extend({}, parentConfig), + prop; + for (prop in childConfig) { + if (hasOwnProp(childConfig, prop)) { + if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) { + res[prop] = {}; + extend(res[prop], parentConfig[prop]); + extend(res[prop], childConfig[prop]); + } else if (childConfig[prop] != null) { + res[prop] = childConfig[prop]; + } else { + delete res[prop]; + } + } + } + for (prop in parentConfig) { + if ( + hasOwnProp(parentConfig, prop) && + !hasOwnProp(childConfig, prop) && + isObject(parentConfig[prop]) + ) { + // make sure changes to properties don't modify parent config + res[prop] = extend({}, res[prop]); + } + } + return res; + } + + function Locale(config) { + if (config != null) { + this.set(config); + } + } + + var keys; + + if (Object.keys) { + keys = Object.keys; + } else { + keys = function (obj) { + var i, + res = []; + for (i in obj) { + if (hasOwnProp(obj, i)) { + res.push(i); + } + } + return res; + }; + } + + var defaultCalendar = { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }; + + function calendar(key, mom, now) { + var output = this._calendar[key] || this._calendar['sameElse']; + return isFunction(output) ? output.call(mom, now) : output; + } + + function zeroFill(number, targetLength, forceSign) { + var absNumber = '' + Math.abs(number), + zerosToFill = targetLength - absNumber.length, + sign = number >= 0; + return ( + (sign ? (forceSign ? '+' : '') : '-') + + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + + absNumber + ); + } + + var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g, + localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, + formatFunctions = {}, + formatTokenFunctions = {}; + + // token: 'M' + // padded: ['MM', 2] + // ordinal: 'Mo' + // callback: function () { this.month() + 1 } + function addFormatToken(token, padded, ordinal, callback) { + var func = callback; + if (typeof callback === 'string') { + func = function () { + return this[callback](); + }; + } + if (token) { + formatTokenFunctions[token] = func; + } + if (padded) { + formatTokenFunctions[padded[0]] = function () { + return zeroFill(func.apply(this, arguments), padded[1], padded[2]); + }; + } + if (ordinal) { + formatTokenFunctions[ordinal] = function () { + return this.localeData().ordinal( + func.apply(this, arguments), + token + ); + }; + } + } + + function removeFormattingTokens(input) { + if (input.match(/\[[\s\S]/)) { + return input.replace(/^\[|\]$/g, ''); + } + return input.replace(/\\/g, ''); + } + + function makeFormatFunction(format) { + var array = format.match(formattingTokens), + i, + length; + + for (i = 0, length = array.length; i < length; i++) { + if (formatTokenFunctions[array[i]]) { + array[i] = formatTokenFunctions[array[i]]; + } else { + array[i] = removeFormattingTokens(array[i]); + } + } + + return function (mom) { + var output = '', + i; + for (i = 0; i < length; i++) { + output += isFunction(array[i]) + ? array[i].call(mom, format) + : array[i]; + } + return output; + }; + } + + // format date using native date object + function formatMoment(m, format) { + if (!m.isValid()) { + return m.localeData().invalidDate(); + } + + format = expandFormat(format, m.localeData()); + formatFunctions[format] = + formatFunctions[format] || makeFormatFunction(format); + + return formatFunctions[format](m); + } + + function expandFormat(format, locale) { + var i = 5; + + function replaceLongDateFormatTokens(input) { + return locale.longDateFormat(input) || input; + } + + localFormattingTokens.lastIndex = 0; + while (i >= 0 && localFormattingTokens.test(format)) { + format = format.replace( + localFormattingTokens, + replaceLongDateFormatTokens + ); + localFormattingTokens.lastIndex = 0; + i -= 1; + } + + return format; + } + + var defaultLongDateFormat = { + LTS: 'h:mm:ss A', + LT: 'h:mm A', + L: 'MM/DD/YYYY', + LL: 'MMMM D, YYYY', + LLL: 'MMMM D, YYYY h:mm A', + LLLL: 'dddd, MMMM D, YYYY h:mm A', + }; + + function longDateFormat(key) { + var format = this._longDateFormat[key], + formatUpper = this._longDateFormat[key.toUpperCase()]; + + if (format || !formatUpper) { + return format; + } + + this._longDateFormat[key] = formatUpper + .match(formattingTokens) + .map(function (tok) { + if ( + tok === 'MMMM' || + tok === 'MM' || + tok === 'DD' || + tok === 'dddd' + ) { + return tok.slice(1); + } + return tok; + }) + .join(''); + + return this._longDateFormat[key]; + } + + var defaultInvalidDate = 'Invalid date'; + + function invalidDate() { + return this._invalidDate; + } + + var defaultOrdinal = '%d', + defaultDayOfMonthOrdinalParse = /\d{1,2}/; + + function ordinal(number) { + return this._ordinal.replace('%d', number); + } + + var defaultRelativeTime = { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + w: 'a week', + ww: '%d weeks', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }; + + function relativeTime(number, withoutSuffix, string, isFuture) { + var output = this._relativeTime[string]; + return isFunction(output) + ? output(number, withoutSuffix, string, isFuture) + : output.replace(/%d/i, number); + } + + function pastFuture(diff, output) { + var format = this._relativeTime[diff > 0 ? 'future' : 'past']; + return isFunction(format) ? format(output) : format.replace(/%s/i, output); + } + + var aliases = {}; + + function addUnitAlias(unit, shorthand) { + var lowerCase = unit.toLowerCase(); + aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; + } + + function normalizeUnits(units) { + return typeof units === 'string' + ? aliases[units] || aliases[units.toLowerCase()] + : undefined; + } + + function normalizeObjectUnits(inputObject) { + var normalizedInput = {}, + normalizedProp, + prop; + + for (prop in inputObject) { + if (hasOwnProp(inputObject, prop)) { + normalizedProp = normalizeUnits(prop); + if (normalizedProp) { + normalizedInput[normalizedProp] = inputObject[prop]; + } + } + } + + return normalizedInput; + } + + var priorities = {}; + + function addUnitPriority(unit, priority) { + priorities[unit] = priority; + } + + function getPrioritizedUnits(unitsObj) { + var units = [], + u; + for (u in unitsObj) { + if (hasOwnProp(unitsObj, u)) { + units.push({ unit: u, priority: priorities[u] }); + } + } + units.sort(function (a, b) { + return a.priority - b.priority; + }); + return units; + } + + function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; + } + + function absFloor(number) { + if (number < 0) { + // -0 -> 0 + return Math.ceil(number) || 0; + } else { + return Math.floor(number); + } + } + + function toInt(argumentForCoercion) { + var coercedNumber = +argumentForCoercion, + value = 0; + + if (coercedNumber !== 0 && isFinite(coercedNumber)) { + value = absFloor(coercedNumber); + } + + return value; + } + + function makeGetSet(unit, keepTime) { + return function (value) { + if (value != null) { + set$1(this, unit, value); + hooks.updateOffset(this, keepTime); + return this; + } else { + return get(this, unit); + } + }; + } + + function get(mom, unit) { + return mom.isValid() + ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() + : NaN; + } + + function set$1(mom, unit, value) { + if (mom.isValid() && !isNaN(value)) { + if ( + unit === 'FullYear' && + isLeapYear(mom.year()) && + mom.month() === 1 && + mom.date() === 29 + ) { + value = toInt(value); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit]( + value, + mom.month(), + daysInMonth(value, mom.month()) + ); + } else { + mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); + } + } + } + + // MOMENTS + + function stringGet(units) { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](); + } + return this; + } + + function stringSet(units, value) { + if (typeof units === 'object') { + units = normalizeObjectUnits(units); + var prioritized = getPrioritizedUnits(units), + i; + for (i = 0; i < prioritized.length; i++) { + this[prioritized[i].unit](units[prioritized[i].unit]); + } + } else { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](value); + } + } + return this; + } + + var match1 = /\d/, // 0 - 9 + match2 = /\d\d/, // 00 - 99 + match3 = /\d{3}/, // 000 - 999 + match4 = /\d{4}/, // 0000 - 9999 + match6 = /[+-]?\d{6}/, // -999999 - 999999 + match1to2 = /\d\d?/, // 0 - 99 + match3to4 = /\d\d\d\d?/, // 999 - 9999 + match5to6 = /\d\d\d\d\d\d?/, // 99999 - 999999 + match1to3 = /\d{1,3}/, // 0 - 999 + match1to4 = /\d{1,4}/, // 0 - 9999 + match1to6 = /[+-]?\d{1,6}/, // -999999 - 999999 + matchUnsigned = /\d+/, // 0 - inf + matchSigned = /[+-]?\d+/, // -inf - inf + matchOffset = /Z|[+-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z + matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z + matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123 + // any word (or two) characters or numbers including two/three word month in arabic. + // includes scottish gaelic two word and hyphenated months + matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i, + regexes; + + regexes = {}; + + function addRegexToken(token, regex, strictRegex) { + regexes[token] = isFunction(regex) + ? regex + : function (isStrict, localeData) { + return isStrict && strictRegex ? strictRegex : regex; + }; + } + + function getParseRegexForToken(token, config) { + if (!hasOwnProp(regexes, token)) { + return new RegExp(unescapeFormat(token)); + } + + return regexes[token](config._strict, config._locale); + } + + // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript + function unescapeFormat(s) { + return regexEscape( + s + .replace('\\', '') + .replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function ( + matched, + p1, + p2, + p3, + p4 + ) { + return p1 || p2 || p3 || p4; + }) + ); + } + + function regexEscape(s) { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + } + + var tokens = {}; + + function addParseToken(token, callback) { + var i, + func = callback; + if (typeof token === 'string') { + token = [token]; + } + if (isNumber(callback)) { + func = function (input, array) { + array[callback] = toInt(input); + }; + } + for (i = 0; i < token.length; i++) { + tokens[token[i]] = func; + } + } + + function addWeekParseToken(token, callback) { + addParseToken(token, function (input, array, config, token) { + config._w = config._w || {}; + callback(input, config._w, config, token); + }); + } + + function addTimeToArrayFromToken(token, input, config) { + if (input != null && hasOwnProp(tokens, token)) { + tokens[token](input, config._a, config, token); + } + } + + var YEAR = 0, + MONTH = 1, + DATE = 2, + HOUR = 3, + MINUTE = 4, + SECOND = 5, + MILLISECOND = 6, + WEEK = 7, + WEEKDAY = 8; + + function mod(n, x) { + return ((n % x) + x) % x; + } + + var indexOf; + + if (Array.prototype.indexOf) { + indexOf = Array.prototype.indexOf; + } else { + indexOf = function (o) { + // I know + var i; + for (i = 0; i < this.length; ++i) { + if (this[i] === o) { + return i; + } + } + return -1; + }; + } + + function daysInMonth(year, month) { + if (isNaN(year) || isNaN(month)) { + return NaN; + } + var modMonth = mod(month, 12); + year += (month - modMonth) / 12; + return modMonth === 1 + ? isLeapYear(year) + ? 29 + : 28 + : 31 - ((modMonth % 7) % 2); + } + + // FORMATTING + + addFormatToken('M', ['MM', 2], 'Mo', function () { + return this.month() + 1; + }); + + addFormatToken('MMM', 0, 0, function (format) { + return this.localeData().monthsShort(this, format); + }); + + addFormatToken('MMMM', 0, 0, function (format) { + return this.localeData().months(this, format); + }); + + // ALIASES + + addUnitAlias('month', 'M'); + + // PRIORITY + + addUnitPriority('month', 8); + + // PARSING + + addRegexToken('M', match1to2); + addRegexToken('MM', match1to2, match2); + addRegexToken('MMM', function (isStrict, locale) { + return locale.monthsShortRegex(isStrict); + }); + addRegexToken('MMMM', function (isStrict, locale) { + return locale.monthsRegex(isStrict); + }); + + addParseToken(['M', 'MM'], function (input, array) { + array[MONTH] = toInt(input) - 1; + }); + + addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { + var month = config._locale.monthsParse(input, token, config._strict); + // if we didn't find a month name, mark the date as invalid. + if (month != null) { + array[MONTH] = month; + } else { + getParsingFlags(config).invalidMonth = input; + } + }); + + // LOCALES + + var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split( + '_' + ), + MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/, + defaultMonthsShortRegex = matchWord, + defaultMonthsRegex = matchWord; + + function localeMonths(m, format) { + if (!m) { + return isArray(this._months) + ? this._months + : this._months['standalone']; + } + return isArray(this._months) + ? this._months[m.month()] + : this._months[ + (this._months.isFormat || MONTHS_IN_FORMAT).test(format) + ? 'format' + : 'standalone' + ][m.month()]; + } + + function localeMonthsShort(m, format) { + if (!m) { + return isArray(this._monthsShort) + ? this._monthsShort + : this._monthsShort['standalone']; + } + return isArray(this._monthsShort) + ? this._monthsShort[m.month()] + : this._monthsShort[ + MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone' + ][m.month()]; + } + + function handleStrictParse(monthName, format, strict) { + var i, + ii, + mom, + llc = monthName.toLocaleLowerCase(); + if (!this._monthsParse) { + // this is not used + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + for (i = 0; i < 12; ++i) { + mom = createUTC([2000, i]); + this._shortMonthsParse[i] = this.monthsShort( + mom, + '' + ).toLocaleLowerCase(); + this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase(); + } + } + + if (strict) { + if (format === 'MMM') { + ii = indexOf.call(this._shortMonthsParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._longMonthsParse, llc); + return ii !== -1 ? ii : null; + } + } else { + if (format === 'MMM') { + ii = indexOf.call(this._shortMonthsParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._longMonthsParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._longMonthsParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortMonthsParse, llc); + return ii !== -1 ? ii : null; + } + } + } + + function localeMonthsParse(monthName, format, strict) { + var i, mom, regex; + + if (this._monthsParseExact) { + return handleStrictParse.call(this, monthName, format, strict); + } + + if (!this._monthsParse) { + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + } + + // TODO: add sorting + // Sorting makes sure if one month (or abbr) is a prefix of another + // see sorting in computeMonthsParse + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, i]); + if (strict && !this._longMonthsParse[i]) { + this._longMonthsParse[i] = new RegExp( + '^' + this.months(mom, '').replace('.', '') + '$', + 'i' + ); + this._shortMonthsParse[i] = new RegExp( + '^' + this.monthsShort(mom, '').replace('.', '') + '$', + 'i' + ); + } + if (!strict && !this._monthsParse[i]) { + regex = + '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); + this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if ( + strict && + format === 'MMMM' && + this._longMonthsParse[i].test(monthName) + ) { + return i; + } else if ( + strict && + format === 'MMM' && + this._shortMonthsParse[i].test(monthName) + ) { + return i; + } else if (!strict && this._monthsParse[i].test(monthName)) { + return i; + } + } + } + + // MOMENTS + + function setMonth(mom, value) { + var dayOfMonth; + + if (!mom.isValid()) { + // No op + return mom; + } + + if (typeof value === 'string') { + if (/^\d+$/.test(value)) { + value = toInt(value); + } else { + value = mom.localeData().monthsParse(value); + // TODO: Another silent failure? + if (!isNumber(value)) { + return mom; + } + } + } + + dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); + return mom; + } + + function getSetMonth(value) { + if (value != null) { + setMonth(this, value); + hooks.updateOffset(this, true); + return this; + } else { + return get(this, 'Month'); + } + } + + function getDaysInMonth() { + return daysInMonth(this.year(), this.month()); + } + + function monthsShortRegex(isStrict) { + if (this._monthsParseExact) { + if (!hasOwnProp(this, '_monthsRegex')) { + computeMonthsParse.call(this); + } + if (isStrict) { + return this._monthsShortStrictRegex; + } else { + return this._monthsShortRegex; + } + } else { + if (!hasOwnProp(this, '_monthsShortRegex')) { + this._monthsShortRegex = defaultMonthsShortRegex; + } + return this._monthsShortStrictRegex && isStrict + ? this._monthsShortStrictRegex + : this._monthsShortRegex; + } + } + + function monthsRegex(isStrict) { + if (this._monthsParseExact) { + if (!hasOwnProp(this, '_monthsRegex')) { + computeMonthsParse.call(this); + } + if (isStrict) { + return this._monthsStrictRegex; + } else { + return this._monthsRegex; + } + } else { + if (!hasOwnProp(this, '_monthsRegex')) { + this._monthsRegex = defaultMonthsRegex; + } + return this._monthsStrictRegex && isStrict + ? this._monthsStrictRegex + : this._monthsRegex; + } + } + + function computeMonthsParse() { + function cmpLenRev(a, b) { + return b.length - a.length; + } + + var shortPieces = [], + longPieces = [], + mixedPieces = [], + i, + mom; + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, i]); + shortPieces.push(this.monthsShort(mom, '')); + longPieces.push(this.months(mom, '')); + mixedPieces.push(this.months(mom, '')); + mixedPieces.push(this.monthsShort(mom, '')); + } + // Sorting makes sure if one month (or abbr) is a prefix of another it + // will match the longer piece. + shortPieces.sort(cmpLenRev); + longPieces.sort(cmpLenRev); + mixedPieces.sort(cmpLenRev); + for (i = 0; i < 12; i++) { + shortPieces[i] = regexEscape(shortPieces[i]); + longPieces[i] = regexEscape(longPieces[i]); + } + for (i = 0; i < 24; i++) { + mixedPieces[i] = regexEscape(mixedPieces[i]); + } + + this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._monthsShortRegex = this._monthsRegex; + this._monthsStrictRegex = new RegExp( + '^(' + longPieces.join('|') + ')', + 'i' + ); + this._monthsShortStrictRegex = new RegExp( + '^(' + shortPieces.join('|') + ')', + 'i' + ); + } + + // FORMATTING + + addFormatToken('Y', 0, 0, function () { + var y = this.year(); + return y <= 9999 ? zeroFill(y, 4) : '+' + y; + }); + + addFormatToken(0, ['YY', 2], 0, function () { + return this.year() % 100; + }); + + addFormatToken(0, ['YYYY', 4], 0, 'year'); + addFormatToken(0, ['YYYYY', 5], 0, 'year'); + addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); + + // ALIASES + + addUnitAlias('year', 'y'); + + // PRIORITIES + + addUnitPriority('year', 1); + + // PARSING + + addRegexToken('Y', matchSigned); + addRegexToken('YY', match1to2, match2); + addRegexToken('YYYY', match1to4, match4); + addRegexToken('YYYYY', match1to6, match6); + addRegexToken('YYYYYY', match1to6, match6); + + addParseToken(['YYYYY', 'YYYYYY'], YEAR); + addParseToken('YYYY', function (input, array) { + array[YEAR] = + input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input); + }); + addParseToken('YY', function (input, array) { + array[YEAR] = hooks.parseTwoDigitYear(input); + }); + addParseToken('Y', function (input, array) { + array[YEAR] = parseInt(input, 10); + }); + + // HELPERS + + function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; + } + + // HOOKS + + hooks.parseTwoDigitYear = function (input) { + return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); + }; + + // MOMENTS + + var getSetYear = makeGetSet('FullYear', true); + + function getIsLeapYear() { + return isLeapYear(this.year()); + } + + function createDate(y, m, d, h, M, s, ms) { + // can't just apply() to create a date: + // https://stackoverflow.com/q/181348 + var date; + // the date constructor remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + // preserve leap years using a full 400 year cycle, then reset + date = new Date(y + 400, m, d, h, M, s, ms); + if (isFinite(date.getFullYear())) { + date.setFullYear(y); + } + } else { + date = new Date(y, m, d, h, M, s, ms); + } + + return date; + } + + function createUTCDate(y) { + var date, args; + // the Date.UTC function remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + args = Array.prototype.slice.call(arguments); + // preserve leap years using a full 400 year cycle, then reset + args[0] = y + 400; + date = new Date(Date.UTC.apply(null, args)); + if (isFinite(date.getUTCFullYear())) { + date.setUTCFullYear(y); + } + } else { + date = new Date(Date.UTC.apply(null, arguments)); + } + + return date; + } + + // start-of-first-week - start-of-year + function firstWeekOffset(year, dow, doy) { + var // first-week day -- which january is always in the first week (4 for iso, 1 for other) + fwd = 7 + dow - doy, + // first-week day local weekday -- which local weekday is fwd + fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7; + + return -fwdlw + fwd - 1; + } + + // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday + function dayOfYearFromWeeks(year, week, weekday, dow, doy) { + var localWeekday = (7 + weekday - dow) % 7, + weekOffset = firstWeekOffset(year, dow, doy), + dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, + resYear, + resDayOfYear; + + if (dayOfYear <= 0) { + resYear = year - 1; + resDayOfYear = daysInYear(resYear) + dayOfYear; + } else if (dayOfYear > daysInYear(year)) { + resYear = year + 1; + resDayOfYear = dayOfYear - daysInYear(year); + } else { + resYear = year; + resDayOfYear = dayOfYear; + } + + return { + year: resYear, + dayOfYear: resDayOfYear, + }; + } + + function weekOfYear(mom, dow, doy) { + var weekOffset = firstWeekOffset(mom.year(), dow, doy), + week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, + resWeek, + resYear; + + if (week < 1) { + resYear = mom.year() - 1; + resWeek = week + weeksInYear(resYear, dow, doy); + } else if (week > weeksInYear(mom.year(), dow, doy)) { + resWeek = week - weeksInYear(mom.year(), dow, doy); + resYear = mom.year() + 1; + } else { + resYear = mom.year(); + resWeek = week; + } + + return { + week: resWeek, + year: resYear, + }; + } + + function weeksInYear(year, dow, doy) { + var weekOffset = firstWeekOffset(year, dow, doy), + weekOffsetNext = firstWeekOffset(year + 1, dow, doy); + return (daysInYear(year) - weekOffset + weekOffsetNext) / 7; + } + + // FORMATTING + + addFormatToken('w', ['ww', 2], 'wo', 'week'); + addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); + + // ALIASES + + addUnitAlias('week', 'w'); + addUnitAlias('isoWeek', 'W'); + + // PRIORITIES + + addUnitPriority('week', 5); + addUnitPriority('isoWeek', 5); + + // PARSING + + addRegexToken('w', match1to2); + addRegexToken('ww', match1to2, match2); + addRegexToken('W', match1to2); + addRegexToken('WW', match1to2, match2); + + addWeekParseToken(['w', 'ww', 'W', 'WW'], function ( + input, + week, + config, + token + ) { + week[token.substr(0, 1)] = toInt(input); + }); + + // HELPERS + + // LOCALES + + function localeWeek(mom) { + return weekOfYear(mom, this._week.dow, this._week.doy).week; + } + + var defaultLocaleWeek = { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }; + + function localeFirstDayOfWeek() { + return this._week.dow; + } + + function localeFirstDayOfYear() { + return this._week.doy; + } + + // MOMENTS + + function getSetWeek(input) { + var week = this.localeData().week(this); + return input == null ? week : this.add((input - week) * 7, 'd'); + } + + function getSetISOWeek(input) { + var week = weekOfYear(this, 1, 4).week; + return input == null ? week : this.add((input - week) * 7, 'd'); + } + + // FORMATTING + + addFormatToken('d', 0, 'do', 'day'); + + addFormatToken('dd', 0, 0, function (format) { + return this.localeData().weekdaysMin(this, format); + }); + + addFormatToken('ddd', 0, 0, function (format) { + return this.localeData().weekdaysShort(this, format); + }); + + addFormatToken('dddd', 0, 0, function (format) { + return this.localeData().weekdays(this, format); + }); + + addFormatToken('e', 0, 0, 'weekday'); + addFormatToken('E', 0, 0, 'isoWeekday'); + + // ALIASES + + addUnitAlias('day', 'd'); + addUnitAlias('weekday', 'e'); + addUnitAlias('isoWeekday', 'E'); + + // PRIORITY + addUnitPriority('day', 11); + addUnitPriority('weekday', 11); + addUnitPriority('isoWeekday', 11); + + // PARSING + + addRegexToken('d', match1to2); + addRegexToken('e', match1to2); + addRegexToken('E', match1to2); + addRegexToken('dd', function (isStrict, locale) { + return locale.weekdaysMinRegex(isStrict); + }); + addRegexToken('ddd', function (isStrict, locale) { + return locale.weekdaysShortRegex(isStrict); + }); + addRegexToken('dddd', function (isStrict, locale) { + return locale.weekdaysRegex(isStrict); + }); + + addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) { + var weekday = config._locale.weekdaysParse(input, token, config._strict); + // if we didn't get a weekday name, mark the date as invalid + if (weekday != null) { + week.d = weekday; + } else { + getParsingFlags(config).invalidWeekday = input; + } + }); + + addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { + week[token] = toInt(input); + }); + + // HELPERS + + function parseWeekday(input, locale) { + if (typeof input !== 'string') { + return input; + } + + if (!isNaN(input)) { + return parseInt(input, 10); + } + + input = locale.weekdaysParse(input); + if (typeof input === 'number') { + return input; + } + + return null; + } + + function parseIsoWeekday(input, locale) { + if (typeof input === 'string') { + return locale.weekdaysParse(input) % 7 || 7; + } + return isNaN(input) ? null : input; + } + + // LOCALES + function shiftWeekdays(ws, n) { + return ws.slice(n, 7).concat(ws.slice(0, n)); + } + + var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + defaultWeekdaysRegex = matchWord, + defaultWeekdaysShortRegex = matchWord, + defaultWeekdaysMinRegex = matchWord; + + function localeWeekdays(m, format) { + var weekdays = isArray(this._weekdays) + ? this._weekdays + : this._weekdays[ + m && m !== true && this._weekdays.isFormat.test(format) + ? 'format' + : 'standalone' + ]; + return m === true + ? shiftWeekdays(weekdays, this._week.dow) + : m + ? weekdays[m.day()] + : weekdays; + } + + function localeWeekdaysShort(m) { + return m === true + ? shiftWeekdays(this._weekdaysShort, this._week.dow) + : m + ? this._weekdaysShort[m.day()] + : this._weekdaysShort; + } + + function localeWeekdaysMin(m) { + return m === true + ? shiftWeekdays(this._weekdaysMin, this._week.dow) + : m + ? this._weekdaysMin[m.day()] + : this._weekdaysMin; + } + + function handleStrictParse$1(weekdayName, format, strict) { + var i, + ii, + mom, + llc = weekdayName.toLocaleLowerCase(); + if (!this._weekdaysParse) { + this._weekdaysParse = []; + this._shortWeekdaysParse = []; + this._minWeekdaysParse = []; + + for (i = 0; i < 7; ++i) { + mom = createUTC([2000, 1]).day(i); + this._minWeekdaysParse[i] = this.weekdaysMin( + mom, + '' + ).toLocaleLowerCase(); + this._shortWeekdaysParse[i] = this.weekdaysShort( + mom, + '' + ).toLocaleLowerCase(); + this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase(); + } + } + + if (strict) { + if (format === 'dddd') { + ii = indexOf.call(this._weekdaysParse, llc); + return ii !== -1 ? ii : null; + } else if (format === 'ddd') { + ii = indexOf.call(this._shortWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } + } else { + if (format === 'dddd') { + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else if (format === 'ddd') { + ii = indexOf.call(this._shortWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._minWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } + } + } + + function localeWeekdaysParse(weekdayName, format, strict) { + var i, mom, regex; + + if (this._weekdaysParseExact) { + return handleStrictParse$1.call(this, weekdayName, format, strict); + } + + if (!this._weekdaysParse) { + this._weekdaysParse = []; + this._minWeekdaysParse = []; + this._shortWeekdaysParse = []; + this._fullWeekdaysParse = []; + } + + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + + mom = createUTC([2000, 1]).day(i); + if (strict && !this._fullWeekdaysParse[i]) { + this._fullWeekdaysParse[i] = new RegExp( + '^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', + 'i' + ); + this._shortWeekdaysParse[i] = new RegExp( + '^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', + 'i' + ); + this._minWeekdaysParse[i] = new RegExp( + '^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', + 'i' + ); + } + if (!this._weekdaysParse[i]) { + regex = + '^' + + this.weekdays(mom, '') + + '|^' + + this.weekdaysShort(mom, '') + + '|^' + + this.weekdaysMin(mom, ''); + this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if ( + strict && + format === 'dddd' && + this._fullWeekdaysParse[i].test(weekdayName) + ) { + return i; + } else if ( + strict && + format === 'ddd' && + this._shortWeekdaysParse[i].test(weekdayName) + ) { + return i; + } else if ( + strict && + format === 'dd' && + this._minWeekdaysParse[i].test(weekdayName) + ) { + return i; + } else if (!strict && this._weekdaysParse[i].test(weekdayName)) { + return i; + } + } + } + + // MOMENTS + + function getSetDayOfWeek(input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); + if (input != null) { + input = parseWeekday(input, this.localeData()); + return this.add(input - day, 'd'); + } else { + return day; + } + } + + function getSetLocaleDayOfWeek(input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; + return input == null ? weekday : this.add(input - weekday, 'd'); + } + + function getSetISODayOfWeek(input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + + // behaves the same as moment#day except + // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) + // as a setter, sunday should belong to the previous week. + + if (input != null) { + var weekday = parseIsoWeekday(input, this.localeData()); + return this.day(this.day() % 7 ? weekday : weekday - 7); + } else { + return this.day() || 7; + } + } + + function weekdaysRegex(isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysStrictRegex; + } else { + return this._weekdaysRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysRegex')) { + this._weekdaysRegex = defaultWeekdaysRegex; + } + return this._weekdaysStrictRegex && isStrict + ? this._weekdaysStrictRegex + : this._weekdaysRegex; + } + } + + function weekdaysShortRegex(isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysShortStrictRegex; + } else { + return this._weekdaysShortRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysShortRegex')) { + this._weekdaysShortRegex = defaultWeekdaysShortRegex; + } + return this._weekdaysShortStrictRegex && isStrict + ? this._weekdaysShortStrictRegex + : this._weekdaysShortRegex; + } + } + + function weekdaysMinRegex(isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysMinStrictRegex; + } else { + return this._weekdaysMinRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysMinRegex')) { + this._weekdaysMinRegex = defaultWeekdaysMinRegex; + } + return this._weekdaysMinStrictRegex && isStrict + ? this._weekdaysMinStrictRegex + : this._weekdaysMinRegex; + } + } + + function computeWeekdaysParse() { + function cmpLenRev(a, b) { + return b.length - a.length; + } + + var minPieces = [], + shortPieces = [], + longPieces = [], + mixedPieces = [], + i, + mom, + minp, + shortp, + longp; + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, 1]).day(i); + minp = regexEscape(this.weekdaysMin(mom, '')); + shortp = regexEscape(this.weekdaysShort(mom, '')); + longp = regexEscape(this.weekdays(mom, '')); + minPieces.push(minp); + shortPieces.push(shortp); + longPieces.push(longp); + mixedPieces.push(minp); + mixedPieces.push(shortp); + mixedPieces.push(longp); + } + // Sorting makes sure if one weekday (or abbr) is a prefix of another it + // will match the longer piece. + minPieces.sort(cmpLenRev); + shortPieces.sort(cmpLenRev); + longPieces.sort(cmpLenRev); + mixedPieces.sort(cmpLenRev); + + this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._weekdaysShortRegex = this._weekdaysRegex; + this._weekdaysMinRegex = this._weekdaysRegex; + + this._weekdaysStrictRegex = new RegExp( + '^(' + longPieces.join('|') + ')', + 'i' + ); + this._weekdaysShortStrictRegex = new RegExp( + '^(' + shortPieces.join('|') + ')', + 'i' + ); + this._weekdaysMinStrictRegex = new RegExp( + '^(' + minPieces.join('|') + ')', + 'i' + ); + } + + // FORMATTING + + function hFormat() { + return this.hours() % 12 || 12; + } + + function kFormat() { + return this.hours() || 24; + } + + addFormatToken('H', ['HH', 2], 0, 'hour'); + addFormatToken('h', ['hh', 2], 0, hFormat); + addFormatToken('k', ['kk', 2], 0, kFormat); + + addFormatToken('hmm', 0, 0, function () { + return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2); + }); + + addFormatToken('hmmss', 0, 0, function () { + return ( + '' + + hFormat.apply(this) + + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2) + ); + }); + + addFormatToken('Hmm', 0, 0, function () { + return '' + this.hours() + zeroFill(this.minutes(), 2); + }); + + addFormatToken('Hmmss', 0, 0, function () { + return ( + '' + + this.hours() + + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2) + ); + }); + + function meridiem(token, lowercase) { + addFormatToken(token, 0, 0, function () { + return this.localeData().meridiem( + this.hours(), + this.minutes(), + lowercase + ); + }); + } + + meridiem('a', true); + meridiem('A', false); + + // ALIASES + + addUnitAlias('hour', 'h'); + + // PRIORITY + addUnitPriority('hour', 13); + + // PARSING + + function matchMeridiem(isStrict, locale) { + return locale._meridiemParse; + } + + addRegexToken('a', matchMeridiem); + addRegexToken('A', matchMeridiem); + addRegexToken('H', match1to2); + addRegexToken('h', match1to2); + addRegexToken('k', match1to2); + addRegexToken('HH', match1to2, match2); + addRegexToken('hh', match1to2, match2); + addRegexToken('kk', match1to2, match2); + + addRegexToken('hmm', match3to4); + addRegexToken('hmmss', match5to6); + addRegexToken('Hmm', match3to4); + addRegexToken('Hmmss', match5to6); + + addParseToken(['H', 'HH'], HOUR); + addParseToken(['k', 'kk'], function (input, array, config) { + var kInput = toInt(input); + array[HOUR] = kInput === 24 ? 0 : kInput; + }); + addParseToken(['a', 'A'], function (input, array, config) { + config._isPm = config._locale.isPM(input); + config._meridiem = input; + }); + addParseToken(['h', 'hh'], function (input, array, config) { + array[HOUR] = toInt(input); + getParsingFlags(config).bigHour = true; + }); + addParseToken('hmm', function (input, array, config) { + var pos = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos)); + array[MINUTE] = toInt(input.substr(pos)); + getParsingFlags(config).bigHour = true; + }); + addParseToken('hmmss', function (input, array, config) { + var pos1 = input.length - 4, + pos2 = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos1)); + array[MINUTE] = toInt(input.substr(pos1, 2)); + array[SECOND] = toInt(input.substr(pos2)); + getParsingFlags(config).bigHour = true; + }); + addParseToken('Hmm', function (input, array, config) { + var pos = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos)); + array[MINUTE] = toInt(input.substr(pos)); + }); + addParseToken('Hmmss', function (input, array, config) { + var pos1 = input.length - 4, + pos2 = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos1)); + array[MINUTE] = toInt(input.substr(pos1, 2)); + array[SECOND] = toInt(input.substr(pos2)); + }); + + // LOCALES + + function localeIsPM(input) { + // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays + // Using charAt should be more compatible. + return (input + '').toLowerCase().charAt(0) === 'p'; + } + + var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i, + // Setting the hour should keep the time, because the user explicitly + // specified which hour they want. So trying to maintain the same hour (in + // a new timezone) makes sense. Adding/subtracting hours does not follow + // this rule. + getSetHour = makeGetSet('Hours', true); + + function localeMeridiem(hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'pm' : 'PM'; + } else { + return isLower ? 'am' : 'AM'; + } + } + + var baseConfig = { + calendar: defaultCalendar, + longDateFormat: defaultLongDateFormat, + invalidDate: defaultInvalidDate, + ordinal: defaultOrdinal, + dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse, + relativeTime: defaultRelativeTime, + + months: defaultLocaleMonths, + monthsShort: defaultLocaleMonthsShort, + + week: defaultLocaleWeek, + + weekdays: defaultLocaleWeekdays, + weekdaysMin: defaultLocaleWeekdaysMin, + weekdaysShort: defaultLocaleWeekdaysShort, + + meridiemParse: defaultLocaleMeridiemParse, + }; + + // internal storage for locale config files + var locales = {}, + localeFamilies = {}, + globalLocale; + + function commonPrefix(arr1, arr2) { + var i, + minl = Math.min(arr1.length, arr2.length); + for (i = 0; i < minl; i += 1) { + if (arr1[i] !== arr2[i]) { + return i; + } + } + return minl; + } + + function normalizeLocale(key) { + return key ? key.toLowerCase().replace('_', '-') : key; + } + + // pick the locale from the array + // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each + // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root + function chooseLocale(names) { + var i = 0, + j, + next, + locale, + split; + + while (i < names.length) { + split = normalizeLocale(names[i]).split('-'); + j = split.length; + next = normalizeLocale(names[i + 1]); + next = next ? next.split('-') : null; + while (j > 0) { + locale = loadLocale(split.slice(0, j).join('-')); + if (locale) { + return locale; + } + if ( + next && + next.length >= j && + commonPrefix(split, next) >= j - 1 + ) { + //the next array item is better than a shallower substring of this one + break; + } + j--; + } + i++; + } + return globalLocale; + } + + function loadLocale(name) { + var oldLocale = null, + aliasedRequire; + // TODO: Find a better way to register and load all the locales in Node + if ( + locales[name] === undefined && + typeof module !== 'undefined' && + module && + module.exports + ) { + try { + oldLocale = globalLocale._abbr; + aliasedRequire = require; + aliasedRequire('./locale/' + name); + getSetGlobalLocale(oldLocale); + } catch (e) { + // mark as not found to avoid repeating expensive file require call causing high CPU + // when trying to find en-US, en_US, en-us for every format call + locales[name] = null; // null means not found + } + } + return locales[name]; + } + + // This function will load locale and then set the global locale. If + // no arguments are passed in, it will simply return the current global + // locale key. + function getSetGlobalLocale(key, values) { + var data; + if (key) { + if (isUndefined(values)) { + data = getLocale(key); + } else { + data = defineLocale(key, values); + } + + if (data) { + // moment.duration._locale = moment._locale = data; + globalLocale = data; + } else { + if (typeof console !== 'undefined' && console.warn) { + //warn user if arguments are passed but the locale could not be set + console.warn( + 'Locale ' + key + ' not found. Did you forget to load it?' + ); + } + } + } + + return globalLocale._abbr; + } + + function defineLocale(name, config) { + if (config !== null) { + var locale, + parentConfig = baseConfig; + config.abbr = name; + if (locales[name] != null) { + deprecateSimple( + 'defineLocaleOverride', + 'use moment.updateLocale(localeName, config) to change ' + + 'an existing locale. moment.defineLocale(localeName, ' + + 'config) should only be used for creating a new locale ' + + 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.' + ); + parentConfig = locales[name]._config; + } else if (config.parentLocale != null) { + if (locales[config.parentLocale] != null) { + parentConfig = locales[config.parentLocale]._config; + } else { + locale = loadLocale(config.parentLocale); + if (locale != null) { + parentConfig = locale._config; + } else { + if (!localeFamilies[config.parentLocale]) { + localeFamilies[config.parentLocale] = []; + } + localeFamilies[config.parentLocale].push({ + name: name, + config: config, + }); + return null; + } + } + } + locales[name] = new Locale(mergeConfigs(parentConfig, config)); + + if (localeFamilies[name]) { + localeFamilies[name].forEach(function (x) { + defineLocale(x.name, x.config); + }); + } + + // backwards compat for now: also set the locale + // make sure we set the locale AFTER all child locales have been + // created, so we won't end up with the child locale set. + getSetGlobalLocale(name); + + return locales[name]; + } else { + // useful for testing + delete locales[name]; + return null; + } + } + + function updateLocale(name, config) { + if (config != null) { + var locale, + tmpLocale, + parentConfig = baseConfig; + + if (locales[name] != null && locales[name].parentLocale != null) { + // Update existing child locale in-place to avoid memory-leaks + locales[name].set(mergeConfigs(locales[name]._config, config)); + } else { + // MERGE + tmpLocale = loadLocale(name); + if (tmpLocale != null) { + parentConfig = tmpLocale._config; + } + config = mergeConfigs(parentConfig, config); + if (tmpLocale == null) { + // updateLocale is called for creating a new locale + // Set abbr so it will have a name (getters return + // undefined otherwise). + config.abbr = name; + } + locale = new Locale(config); + locale.parentLocale = locales[name]; + locales[name] = locale; + } + + // backwards compat for now: also set the locale + getSetGlobalLocale(name); + } else { + // pass null for config to unupdate, useful for tests + if (locales[name] != null) { + if (locales[name].parentLocale != null) { + locales[name] = locales[name].parentLocale; + if (name === getSetGlobalLocale()) { + getSetGlobalLocale(name); + } + } else if (locales[name] != null) { + delete locales[name]; + } + } + } + return locales[name]; + } + + // returns locale data + function getLocale(key) { + var locale; + + if (key && key._locale && key._locale._abbr) { + key = key._locale._abbr; + } + + if (!key) { + return globalLocale; + } + + if (!isArray(key)) { + //short-circuit everything else + locale = loadLocale(key); + if (locale) { + return locale; + } + key = [key]; + } + + return chooseLocale(key); + } + + function listLocales() { + return keys(locales); + } + + function checkOverflow(m) { + var overflow, + a = m._a; + + if (a && getParsingFlags(m).overflow === -2) { + overflow = + a[MONTH] < 0 || a[MONTH] > 11 + ? MONTH + : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) + ? DATE + : a[HOUR] < 0 || + a[HOUR] > 24 || + (a[HOUR] === 24 && + (a[MINUTE] !== 0 || + a[SECOND] !== 0 || + a[MILLISECOND] !== 0)) + ? HOUR + : a[MINUTE] < 0 || a[MINUTE] > 59 + ? MINUTE + : a[SECOND] < 0 || a[SECOND] > 59 + ? SECOND + : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 + ? MILLISECOND + : -1; + + if ( + getParsingFlags(m)._overflowDayOfYear && + (overflow < YEAR || overflow > DATE) + ) { + overflow = DATE; + } + if (getParsingFlags(m)._overflowWeeks && overflow === -1) { + overflow = WEEK; + } + if (getParsingFlags(m)._overflowWeekday && overflow === -1) { + overflow = WEEKDAY; + } + + getParsingFlags(m).overflow = overflow; + } + + return m; + } + + // iso 8601 regex + // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) + var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, + basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, + tzRegex = /Z|[+-]\d\d(?::?\d\d)?/, + isoDates = [ + ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/], + ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/], + ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/], + ['GGGG-[W]WW', /\d{4}-W\d\d/, false], + ['YYYY-DDD', /\d{4}-\d{3}/], + ['YYYY-MM', /\d{4}-\d\d/, false], + ['YYYYYYMMDD', /[+-]\d{10}/], + ['YYYYMMDD', /\d{8}/], + ['GGGG[W]WWE', /\d{4}W\d{3}/], + ['GGGG[W]WW', /\d{4}W\d{2}/, false], + ['YYYYDDD', /\d{7}/], + ['YYYYMM', /\d{6}/, false], + ['YYYY', /\d{4}/, false], + ], + // iso time formats and regexes + isoTimes = [ + ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/], + ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/], + ['HH:mm:ss', /\d\d:\d\d:\d\d/], + ['HH:mm', /\d\d:\d\d/], + ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/], + ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/], + ['HHmmss', /\d\d\d\d\d\d/], + ['HHmm', /\d\d\d\d/], + ['HH', /\d\d/], + ], + aspNetJsonRegex = /^\/?Date\((-?\d+)/i, + // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3 + rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/, + obsOffsets = { + UT: 0, + GMT: 0, + EDT: -4 * 60, + EST: -5 * 60, + CDT: -5 * 60, + CST: -6 * 60, + MDT: -6 * 60, + MST: -7 * 60, + PDT: -7 * 60, + PST: -8 * 60, + }; + + // date from iso format + function configFromISO(config) { + var i, + l, + string = config._i, + match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), + allowTime, + dateFormat, + timeFormat, + tzFormat; + + if (match) { + getParsingFlags(config).iso = true; + + for (i = 0, l = isoDates.length; i < l; i++) { + if (isoDates[i][1].exec(match[1])) { + dateFormat = isoDates[i][0]; + allowTime = isoDates[i][2] !== false; + break; + } + } + if (dateFormat == null) { + config._isValid = false; + return; + } + if (match[3]) { + for (i = 0, l = isoTimes.length; i < l; i++) { + if (isoTimes[i][1].exec(match[3])) { + // match[2] should be 'T' or space + timeFormat = (match[2] || ' ') + isoTimes[i][0]; + break; + } + } + if (timeFormat == null) { + config._isValid = false; + return; + } + } + if (!allowTime && timeFormat != null) { + config._isValid = false; + return; + } + if (match[4]) { + if (tzRegex.exec(match[4])) { + tzFormat = 'Z'; + } else { + config._isValid = false; + return; + } + } + config._f = dateFormat + (timeFormat || '') + (tzFormat || ''); + configFromStringAndFormat(config); + } else { + config._isValid = false; + } + } + + function extractFromRFC2822Strings( + yearStr, + monthStr, + dayStr, + hourStr, + minuteStr, + secondStr + ) { + var result = [ + untruncateYear(yearStr), + defaultLocaleMonthsShort.indexOf(monthStr), + parseInt(dayStr, 10), + parseInt(hourStr, 10), + parseInt(minuteStr, 10), + ]; + + if (secondStr) { + result.push(parseInt(secondStr, 10)); + } + + return result; + } + + function untruncateYear(yearStr) { + var year = parseInt(yearStr, 10); + if (year <= 49) { + return 2000 + year; + } else if (year <= 999) { + return 1900 + year; + } + return year; + } + + function preprocessRFC2822(s) { + // Remove comments and folding whitespace and replace multiple-spaces with a single space + return s + .replace(/\([^)]*\)|[\n\t]/g, ' ') + .replace(/(\s\s+)/g, ' ') + .replace(/^\s\s*/, '') + .replace(/\s\s*$/, ''); + } + + function checkWeekday(weekdayStr, parsedInput, config) { + if (weekdayStr) { + // TODO: Replace the vanilla JS Date object with an independent day-of-week check. + var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr), + weekdayActual = new Date( + parsedInput[0], + parsedInput[1], + parsedInput[2] + ).getDay(); + if (weekdayProvided !== weekdayActual) { + getParsingFlags(config).weekdayMismatch = true; + config._isValid = false; + return false; + } + } + return true; + } + + function calculateOffset(obsOffset, militaryOffset, numOffset) { + if (obsOffset) { + return obsOffsets[obsOffset]; + } else if (militaryOffset) { + // the only allowed military tz is Z + return 0; + } else { + var hm = parseInt(numOffset, 10), + m = hm % 100, + h = (hm - m) / 100; + return h * 60 + m; + } + } + + // date and time from ref 2822 format + function configFromRFC2822(config) { + var match = rfc2822.exec(preprocessRFC2822(config._i)), + parsedArray; + if (match) { + parsedArray = extractFromRFC2822Strings( + match[4], + match[3], + match[2], + match[5], + match[6], + match[7] + ); + if (!checkWeekday(match[1], parsedArray, config)) { + return; + } + + config._a = parsedArray; + config._tzm = calculateOffset(match[8], match[9], match[10]); + + config._d = createUTCDate.apply(null, config._a); + config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); + + getParsingFlags(config).rfc2822 = true; + } else { + config._isValid = false; + } + } + + // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict + function configFromString(config) { + var matched = aspNetJsonRegex.exec(config._i); + if (matched !== null) { + config._d = new Date(+matched[1]); + return; + } + + configFromISO(config); + if (config._isValid === false) { + delete config._isValid; + } else { + return; + } + + configFromRFC2822(config); + if (config._isValid === false) { + delete config._isValid; + } else { + return; + } + + if (config._strict) { + config._isValid = false; + } else { + // Final attempt, use Input Fallback + hooks.createFromInputFallback(config); + } + } + + hooks.createFromInputFallback = deprecate( + 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + + 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + + 'discouraged and will be removed in an upcoming major release. Please refer to ' + + 'http://momentjs.com/guides/#/warnings/js-date/ for more info.', + function (config) { + config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); + } + ); + + // Pick the first defined of two or three arguments. + function defaults(a, b, c) { + if (a != null) { + return a; + } + if (b != null) { + return b; + } + return c; + } + + function currentDateArray(config) { + // hooks is actually the exported moment object + var nowValue = new Date(hooks.now()); + if (config._useUTC) { + return [ + nowValue.getUTCFullYear(), + nowValue.getUTCMonth(), + nowValue.getUTCDate(), + ]; + } + return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]; + } + + // convert an array to a date. + // the array should mirror the parameters below + // note: all values past the year are optional and will default to the lowest possible value. + // [year, month, day , hour, minute, second, millisecond] + function configFromArray(config) { + var i, + date, + input = [], + currentDate, + expectedWeekday, + yearToUse; + + if (config._d) { + return; + } + + currentDate = currentDateArray(config); + + //compute day of the year from weeks and weekdays + if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { + dayOfYearFromWeekInfo(config); + } + + //if the day of the year is set, figure out what it is + if (config._dayOfYear != null) { + yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); + + if ( + config._dayOfYear > daysInYear(yearToUse) || + config._dayOfYear === 0 + ) { + getParsingFlags(config)._overflowDayOfYear = true; + } + + date = createUTCDate(yearToUse, 0, config._dayOfYear); + config._a[MONTH] = date.getUTCMonth(); + config._a[DATE] = date.getUTCDate(); + } + + // Default to current date. + // * if no year, month, day of month are given, default to today + // * if day of month is given, default month and year + // * if month is given, default only year + // * if year is given, don't default anything + for (i = 0; i < 3 && config._a[i] == null; ++i) { + config._a[i] = input[i] = currentDate[i]; + } + + // Zero out whatever was not defaulted, including time + for (; i < 7; i++) { + config._a[i] = input[i] = + config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i]; + } + + // Check for 24:00:00.000 + if ( + config._a[HOUR] === 24 && + config._a[MINUTE] === 0 && + config._a[SECOND] === 0 && + config._a[MILLISECOND] === 0 + ) { + config._nextDay = true; + config._a[HOUR] = 0; + } + + config._d = (config._useUTC ? createUTCDate : createDate).apply( + null, + input + ); + expectedWeekday = config._useUTC + ? config._d.getUTCDay() + : config._d.getDay(); + + // Apply timezone offset from input. The actual utcOffset can be changed + // with parseZone. + if (config._tzm != null) { + config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); + } + + if (config._nextDay) { + config._a[HOUR] = 24; + } + + // check for mismatching day of week + if ( + config._w && + typeof config._w.d !== 'undefined' && + config._w.d !== expectedWeekday + ) { + getParsingFlags(config).weekdayMismatch = true; + } + } + + function dayOfYearFromWeekInfo(config) { + var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek; + + w = config._w; + if (w.GG != null || w.W != null || w.E != null) { + dow = 1; + doy = 4; + + // TODO: We need to take the current isoWeekYear, but that depends on + // how we interpret now (local, utc, fixed offset). So create + // a now version of current config (take local/utc/offset flags, and + // create now). + weekYear = defaults( + w.GG, + config._a[YEAR], + weekOfYear(createLocal(), 1, 4).year + ); + week = defaults(w.W, 1); + weekday = defaults(w.E, 1); + if (weekday < 1 || weekday > 7) { + weekdayOverflow = true; + } + } else { + dow = config._locale._week.dow; + doy = config._locale._week.doy; + + curWeek = weekOfYear(createLocal(), dow, doy); + + weekYear = defaults(w.gg, config._a[YEAR], curWeek.year); + + // Default to current week. + week = defaults(w.w, curWeek.week); + + if (w.d != null) { + // weekday -- low day numbers are considered next week + weekday = w.d; + if (weekday < 0 || weekday > 6) { + weekdayOverflow = true; + } + } else if (w.e != null) { + // local weekday -- counting starts from beginning of week + weekday = w.e + dow; + if (w.e < 0 || w.e > 6) { + weekdayOverflow = true; + } + } else { + // default to beginning of week + weekday = dow; + } + } + if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { + getParsingFlags(config)._overflowWeeks = true; + } else if (weekdayOverflow != null) { + getParsingFlags(config)._overflowWeekday = true; + } else { + temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy); + config._a[YEAR] = temp.year; + config._dayOfYear = temp.dayOfYear; + } + } + + // constant that refers to the ISO standard + hooks.ISO_8601 = function () {}; + + // constant that refers to the RFC 2822 form + hooks.RFC_2822 = function () {}; + + // date from string and format string + function configFromStringAndFormat(config) { + // TODO: Move this to another part of the creation flow to prevent circular deps + if (config._f === hooks.ISO_8601) { + configFromISO(config); + return; + } + if (config._f === hooks.RFC_2822) { + configFromRFC2822(config); + return; + } + config._a = []; + getParsingFlags(config).empty = true; + + // This array is used to make a Date, either with `new Date` or `Date.UTC` + var string = '' + config._i, + i, + parsedInput, + tokens, + token, + skipped, + stringLength = string.length, + totalParsedInputLength = 0, + era; + + tokens = + expandFormat(config._f, config._locale).match(formattingTokens) || []; + + for (i = 0; i < tokens.length; i++) { + token = tokens[i]; + parsedInput = (string.match(getParseRegexForToken(token, config)) || + [])[0]; + if (parsedInput) { + skipped = string.substr(0, string.indexOf(parsedInput)); + if (skipped.length > 0) { + getParsingFlags(config).unusedInput.push(skipped); + } + string = string.slice( + string.indexOf(parsedInput) + parsedInput.length + ); + totalParsedInputLength += parsedInput.length; + } + // don't parse if it's not a known token + if (formatTokenFunctions[token]) { + if (parsedInput) { + getParsingFlags(config).empty = false; + } else { + getParsingFlags(config).unusedTokens.push(token); + } + addTimeToArrayFromToken(token, parsedInput, config); + } else if (config._strict && !parsedInput) { + getParsingFlags(config).unusedTokens.push(token); + } + } + + // add remaining unparsed input length to the string + getParsingFlags(config).charsLeftOver = + stringLength - totalParsedInputLength; + if (string.length > 0) { + getParsingFlags(config).unusedInput.push(string); + } + + // clear _12h flag if hour is <= 12 + if ( + config._a[HOUR] <= 12 && + getParsingFlags(config).bigHour === true && + config._a[HOUR] > 0 + ) { + getParsingFlags(config).bigHour = undefined; + } + + getParsingFlags(config).parsedDateParts = config._a.slice(0); + getParsingFlags(config).meridiem = config._meridiem; + // handle meridiem + config._a[HOUR] = meridiemFixWrap( + config._locale, + config._a[HOUR], + config._meridiem + ); + + // handle era + era = getParsingFlags(config).era; + if (era !== null) { + config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]); + } + + configFromArray(config); + checkOverflow(config); + } + + function meridiemFixWrap(locale, hour, meridiem) { + var isPm; + + if (meridiem == null) { + // nothing to do + return hour; + } + if (locale.meridiemHour != null) { + return locale.meridiemHour(hour, meridiem); + } else if (locale.isPM != null) { + // Fallback + isPm = locale.isPM(meridiem); + if (isPm && hour < 12) { + hour += 12; + } + if (!isPm && hour === 12) { + hour = 0; + } + return hour; + } else { + // this is not supposed to happen + return hour; + } + } + + // date from string and array of format strings + function configFromStringAndArray(config) { + var tempConfig, + bestMoment, + scoreToBeat, + i, + currentScore, + validFormatFound, + bestFormatIsValid = false; + + if (config._f.length === 0) { + getParsingFlags(config).invalidFormat = true; + config._d = new Date(NaN); + return; + } + + for (i = 0; i < config._f.length; i++) { + currentScore = 0; + validFormatFound = false; + tempConfig = copyConfig({}, config); + if (config._useUTC != null) { + tempConfig._useUTC = config._useUTC; + } + tempConfig._f = config._f[i]; + configFromStringAndFormat(tempConfig); + + if (isValid(tempConfig)) { + validFormatFound = true; + } + + // if there is any input that was not parsed add a penalty for that format + currentScore += getParsingFlags(tempConfig).charsLeftOver; + + //or tokens + currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; + + getParsingFlags(tempConfig).score = currentScore; + + if (!bestFormatIsValid) { + if ( + scoreToBeat == null || + currentScore < scoreToBeat || + validFormatFound + ) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + if (validFormatFound) { + bestFormatIsValid = true; + } + } + } else { + if (currentScore < scoreToBeat) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + } + } + } + + extend(config, bestMoment || tempConfig); + } + + function configFromObject(config) { + if (config._d) { + return; + } + + var i = normalizeObjectUnits(config._i), + dayOrDate = i.day === undefined ? i.date : i.day; + config._a = map( + [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond], + function (obj) { + return obj && parseInt(obj, 10); + } + ); + + configFromArray(config); + } + + function createFromConfig(config) { + var res = new Moment(checkOverflow(prepareConfig(config))); + if (res._nextDay) { + // Adding is smart enough around DST + res.add(1, 'd'); + res._nextDay = undefined; + } + + return res; + } + + function prepareConfig(config) { + var input = config._i, + format = config._f; + + config._locale = config._locale || getLocale(config._l); + + if (input === null || (format === undefined && input === '')) { + return createInvalid({ nullInput: true }); + } + + if (typeof input === 'string') { + config._i = input = config._locale.preparse(input); + } + + if (isMoment(input)) { + return new Moment(checkOverflow(input)); + } else if (isDate(input)) { + config._d = input; + } else if (isArray(format)) { + configFromStringAndArray(config); + } else if (format) { + configFromStringAndFormat(config); + } else { + configFromInput(config); + } + + if (!isValid(config)) { + config._d = null; + } + + return config; + } + + function configFromInput(config) { + var input = config._i; + if (isUndefined(input)) { + config._d = new Date(hooks.now()); + } else if (isDate(input)) { + config._d = new Date(input.valueOf()); + } else if (typeof input === 'string') { + configFromString(config); + } else if (isArray(input)) { + config._a = map(input.slice(0), function (obj) { + return parseInt(obj, 10); + }); + configFromArray(config); + } else if (isObject(input)) { + configFromObject(config); + } else if (isNumber(input)) { + // from milliseconds + config._d = new Date(input); + } else { + hooks.createFromInputFallback(config); + } + } + + function createLocalOrUTC(input, format, locale, strict, isUTC) { + var c = {}; + + if (format === true || format === false) { + strict = format; + format = undefined; + } + + if (locale === true || locale === false) { + strict = locale; + locale = undefined; + } + + if ( + (isObject(input) && isObjectEmpty(input)) || + (isArray(input) && input.length === 0) + ) { + input = undefined; + } + // object construction must be done this way. + // https://github.com/moment/moment/issues/1423 + c._isAMomentObject = true; + c._useUTC = c._isUTC = isUTC; + c._l = locale; + c._i = input; + c._f = format; + c._strict = strict; + + return createFromConfig(c); + } + + function createLocal(input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, false); + } + + var prototypeMin = deprecate( + 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', + function () { + var other = createLocal.apply(null, arguments); + if (this.isValid() && other.isValid()) { + return other < this ? this : other; + } else { + return createInvalid(); + } + } + ), + prototypeMax = deprecate( + 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', + function () { + var other = createLocal.apply(null, arguments); + if (this.isValid() && other.isValid()) { + return other > this ? this : other; + } else { + return createInvalid(); + } + } + ); + + // Pick a moment m from moments so that m[fn](other) is true for all + // other. This relies on the function fn to be transitive. + // + // moments should either be an array of moment objects or an array, whose + // first element is an array of moment objects. + function pickBy(fn, moments) { + var res, i; + if (moments.length === 1 && isArray(moments[0])) { + moments = moments[0]; + } + if (!moments.length) { + return createLocal(); + } + res = moments[0]; + for (i = 1; i < moments.length; ++i) { + if (!moments[i].isValid() || moments[i][fn](res)) { + res = moments[i]; + } + } + return res; + } + + // TODO: Use [].sort instead? + function min() { + var args = [].slice.call(arguments, 0); + + return pickBy('isBefore', args); + } + + function max() { + var args = [].slice.call(arguments, 0); + + return pickBy('isAfter', args); + } + + var now = function () { + return Date.now ? Date.now() : +new Date(); + }; + + var ordering = [ + 'year', + 'quarter', + 'month', + 'week', + 'day', + 'hour', + 'minute', + 'second', + 'millisecond', + ]; + + function isDurationValid(m) { + var key, + unitHasDecimal = false, + i; + for (key in m) { + if ( + hasOwnProp(m, key) && + !( + indexOf.call(ordering, key) !== -1 && + (m[key] == null || !isNaN(m[key])) + ) + ) { + return false; + } + } + + for (i = 0; i < ordering.length; ++i) { + if (m[ordering[i]]) { + if (unitHasDecimal) { + return false; // only allow non-integers for smallest unit + } + if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) { + unitHasDecimal = true; + } + } + } + + return true; + } + + function isValid$1() { + return this._isValid; + } + + function createInvalid$1() { + return createDuration(NaN); + } + + function Duration(duration) { + var normalizedInput = normalizeObjectUnits(duration), + years = normalizedInput.year || 0, + quarters = normalizedInput.quarter || 0, + months = normalizedInput.month || 0, + weeks = normalizedInput.week || normalizedInput.isoWeek || 0, + days = normalizedInput.day || 0, + hours = normalizedInput.hour || 0, + minutes = normalizedInput.minute || 0, + seconds = normalizedInput.second || 0, + milliseconds = normalizedInput.millisecond || 0; + + this._isValid = isDurationValid(normalizedInput); + + // representation for dateAddRemove + this._milliseconds = + +milliseconds + + seconds * 1e3 + // 1000 + minutes * 6e4 + // 1000 * 60 + hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978 + // Because of dateAddRemove treats 24 hours as different from a + // day when working around DST, we need to store them separately + this._days = +days + weeks * 7; + // It is impossible to translate months into days without knowing + // which months you are are talking about, so we have to store + // it separately. + this._months = +months + quarters * 3 + years * 12; + + this._data = {}; + + this._locale = getLocale(); + + this._bubble(); + } + + function isDuration(obj) { + return obj instanceof Duration; + } + + function absRound(number) { + if (number < 0) { + return Math.round(-1 * number) * -1; + } else { + return Math.round(number); + } + } + + // compare two arrays, return the number of differences + function compareArrays(array1, array2, dontConvert) { + var len = Math.min(array1.length, array2.length), + lengthDiff = Math.abs(array1.length - array2.length), + diffs = 0, + i; + for (i = 0; i < len; i++) { + if ( + (dontConvert && array1[i] !== array2[i]) || + (!dontConvert && toInt(array1[i]) !== toInt(array2[i])) + ) { + diffs++; + } + } + return diffs + lengthDiff; + } + + // FORMATTING + + function offset(token, separator) { + addFormatToken(token, 0, 0, function () { + var offset = this.utcOffset(), + sign = '+'; + if (offset < 0) { + offset = -offset; + sign = '-'; + } + return ( + sign + + zeroFill(~~(offset / 60), 2) + + separator + + zeroFill(~~offset % 60, 2) + ); + }); + } + + offset('Z', ':'); + offset('ZZ', ''); + + // PARSING + + addRegexToken('Z', matchShortOffset); + addRegexToken('ZZ', matchShortOffset); + addParseToken(['Z', 'ZZ'], function (input, array, config) { + config._useUTC = true; + config._tzm = offsetFromString(matchShortOffset, input); + }); + + // HELPERS + + // timezone chunker + // '+10:00' > ['10', '00'] + // '-1530' > ['-15', '30'] + var chunkOffset = /([\+\-]|\d\d)/gi; + + function offsetFromString(matcher, string) { + var matches = (string || '').match(matcher), + chunk, + parts, + minutes; + + if (matches === null) { + return null; + } + + chunk = matches[matches.length - 1] || []; + parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; + minutes = +(parts[1] * 60) + toInt(parts[2]); + + return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes; + } + + // Return a moment from input, that is local/utc/zone equivalent to model. + function cloneWithOffset(input, model) { + var res, diff; + if (model._isUTC) { + res = model.clone(); + diff = + (isMoment(input) || isDate(input) + ? input.valueOf() + : createLocal(input).valueOf()) - res.valueOf(); + // Use low-level api, because this fn is low-level api. + res._d.setTime(res._d.valueOf() + diff); + hooks.updateOffset(res, false); + return res; + } else { + return createLocal(input).local(); + } + } + + function getDateOffset(m) { + // On Firefox.24 Date#getTimezoneOffset returns a floating point. + // https://github.com/moment/moment/pull/1871 + return -Math.round(m._d.getTimezoneOffset()); + } + + // HOOKS + + // This function will be called whenever a moment is mutated. + // It is intended to keep the offset in sync with the timezone. + hooks.updateOffset = function () {}; + + // MOMENTS + + // keepLocalTime = true means only change the timezone, without + // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> + // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset + // +0200, so we adjust the time as needed, to be valid. + // + // Keeping the time actually adds/subtracts (one hour) + // from the actual represented time. That is why we call updateOffset + // a second time. In case it wants us to change the offset again + // _changeInProgress == true case, then we have to adjust, because + // there is no such time in the given timezone. + function getSetOffset(input, keepLocalTime, keepMinutes) { + var offset = this._offset || 0, + localAdjust; + if (!this.isValid()) { + return input != null ? this : NaN; + } + if (input != null) { + if (typeof input === 'string') { + input = offsetFromString(matchShortOffset, input); + if (input === null) { + return this; + } + } else if (Math.abs(input) < 16 && !keepMinutes) { + input = input * 60; + } + if (!this._isUTC && keepLocalTime) { + localAdjust = getDateOffset(this); + } + this._offset = input; + this._isUTC = true; + if (localAdjust != null) { + this.add(localAdjust, 'm'); + } + if (offset !== input) { + if (!keepLocalTime || this._changeInProgress) { + addSubtract( + this, + createDuration(input - offset, 'm'), + 1, + false + ); + } else if (!this._changeInProgress) { + this._changeInProgress = true; + hooks.updateOffset(this, true); + this._changeInProgress = null; + } + } + return this; + } else { + return this._isUTC ? offset : getDateOffset(this); + } + } + + function getSetZone(input, keepLocalTime) { + if (input != null) { + if (typeof input !== 'string') { + input = -input; + } + + this.utcOffset(input, keepLocalTime); + + return this; + } else { + return -this.utcOffset(); + } + } + + function setOffsetToUTC(keepLocalTime) { + return this.utcOffset(0, keepLocalTime); + } + + function setOffsetToLocal(keepLocalTime) { + if (this._isUTC) { + this.utcOffset(0, keepLocalTime); + this._isUTC = false; + + if (keepLocalTime) { + this.subtract(getDateOffset(this), 'm'); + } + } + return this; + } + + function setOffsetToParsedOffset() { + if (this._tzm != null) { + this.utcOffset(this._tzm, false, true); + } else if (typeof this._i === 'string') { + var tZone = offsetFromString(matchOffset, this._i); + if (tZone != null) { + this.utcOffset(tZone); + } else { + this.utcOffset(0, true); + } + } + return this; + } + + function hasAlignedHourOffset(input) { + if (!this.isValid()) { + return false; + } + input = input ? createLocal(input).utcOffset() : 0; + + return (this.utcOffset() - input) % 60 === 0; + } + + function isDaylightSavingTime() { + return ( + this.utcOffset() > this.clone().month(0).utcOffset() || + this.utcOffset() > this.clone().month(5).utcOffset() + ); + } + + function isDaylightSavingTimeShifted() { + if (!isUndefined(this._isDSTShifted)) { + return this._isDSTShifted; + } + + var c = {}, + other; + + copyConfig(c, this); + c = prepareConfig(c); + + if (c._a) { + other = c._isUTC ? createUTC(c._a) : createLocal(c._a); + this._isDSTShifted = + this.isValid() && compareArrays(c._a, other.toArray()) > 0; + } else { + this._isDSTShifted = false; + } + + return this._isDSTShifted; + } + + function isLocal() { + return this.isValid() ? !this._isUTC : false; + } + + function isUtcOffset() { + return this.isValid() ? this._isUTC : false; + } + + function isUtc() { + return this.isValid() ? this._isUTC && this._offset === 0 : false; + } + + // ASP.NET json date format regex + var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/, + // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html + // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere + // and further modified to allow for strings containing both week and day + isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/; + + function createDuration(input, key) { + var duration = input, + // matching against regexp is expensive, do it on demand + match = null, + sign, + ret, + diffRes; + + if (isDuration(input)) { + duration = { + ms: input._milliseconds, + d: input._days, + M: input._months, + }; + } else if (isNumber(input) || !isNaN(+input)) { + duration = {}; + if (key) { + duration[key] = +input; + } else { + duration.milliseconds = +input; + } + } else if ((match = aspNetRegex.exec(input))) { + sign = match[1] === '-' ? -1 : 1; + duration = { + y: 0, + d: toInt(match[DATE]) * sign, + h: toInt(match[HOUR]) * sign, + m: toInt(match[MINUTE]) * sign, + s: toInt(match[SECOND]) * sign, + ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match + }; + } else if ((match = isoRegex.exec(input))) { + sign = match[1] === '-' ? -1 : 1; + duration = { + y: parseIso(match[2], sign), + M: parseIso(match[3], sign), + w: parseIso(match[4], sign), + d: parseIso(match[5], sign), + h: parseIso(match[6], sign), + m: parseIso(match[7], sign), + s: parseIso(match[8], sign), + }; + } else if (duration == null) { + // checks for null or undefined + duration = {}; + } else if ( + typeof duration === 'object' && + ('from' in duration || 'to' in duration) + ) { + diffRes = momentsDifference( + createLocal(duration.from), + createLocal(duration.to) + ); + + duration = {}; + duration.ms = diffRes.milliseconds; + duration.M = diffRes.months; + } + + ret = new Duration(duration); + + if (isDuration(input) && hasOwnProp(input, '_locale')) { + ret._locale = input._locale; + } + + if (isDuration(input) && hasOwnProp(input, '_isValid')) { + ret._isValid = input._isValid; + } + + return ret; + } + + createDuration.fn = Duration.prototype; + createDuration.invalid = createInvalid$1; + + function parseIso(inp, sign) { + // We'd normally use ~~inp for this, but unfortunately it also + // converts floats to ints. + // inp may be undefined, so careful calling replace on it. + var res = inp && parseFloat(inp.replace(',', '.')); + // apply sign while we're at it + return (isNaN(res) ? 0 : res) * sign; + } + + function positiveMomentsDifference(base, other) { + var res = {}; + + res.months = + other.month() - base.month() + (other.year() - base.year()) * 12; + if (base.clone().add(res.months, 'M').isAfter(other)) { + --res.months; + } + + res.milliseconds = +other - +base.clone().add(res.months, 'M'); + + return res; + } + + function momentsDifference(base, other) { + var res; + if (!(base.isValid() && other.isValid())) { + return { milliseconds: 0, months: 0 }; + } + + other = cloneWithOffset(other, base); + if (base.isBefore(other)) { + res = positiveMomentsDifference(base, other); + } else { + res = positiveMomentsDifference(other, base); + res.milliseconds = -res.milliseconds; + res.months = -res.months; + } + + return res; + } + + // TODO: remove 'name' arg after deprecation is removed + function createAdder(direction, name) { + return function (val, period) { + var dur, tmp; + //invert the arguments, but complain about it + if (period !== null && !isNaN(+period)) { + deprecateSimple( + name, + 'moment().' + + name + + '(period, number) is deprecated. Please use moment().' + + name + + '(number, period). ' + + 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.' + ); + tmp = val; + val = period; + period = tmp; + } + + dur = createDuration(val, period); + addSubtract(this, dur, direction); + return this; + }; + } + + function addSubtract(mom, duration, isAdding, updateOffset) { + var milliseconds = duration._milliseconds, + days = absRound(duration._days), + months = absRound(duration._months); + + if (!mom.isValid()) { + // No op + return; + } + + updateOffset = updateOffset == null ? true : updateOffset; + + if (months) { + setMonth(mom, get(mom, 'Month') + months * isAdding); + } + if (days) { + set$1(mom, 'Date', get(mom, 'Date') + days * isAdding); + } + if (milliseconds) { + mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding); + } + if (updateOffset) { + hooks.updateOffset(mom, days || months); + } + } + + var add = createAdder(1, 'add'), + subtract = createAdder(-1, 'subtract'); + + function isString(input) { + return typeof input === 'string' || input instanceof String; + } + + // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined + function isMomentInput(input) { + return ( + isMoment(input) || + isDate(input) || + isString(input) || + isNumber(input) || + isNumberOrStringArray(input) || + isMomentInputObject(input) || + input === null || + input === undefined + ); + } + + function isMomentInputObject(input) { + var objectTest = isObject(input) && !isObjectEmpty(input), + propertyTest = false, + properties = [ + 'years', + 'year', + 'y', + 'months', + 'month', + 'M', + 'days', + 'day', + 'd', + 'dates', + 'date', + 'D', + 'hours', + 'hour', + 'h', + 'minutes', + 'minute', + 'm', + 'seconds', + 'second', + 's', + 'milliseconds', + 'millisecond', + 'ms', + ], + i, + property; + + for (i = 0; i < properties.length; i += 1) { + property = properties[i]; + propertyTest = propertyTest || hasOwnProp(input, property); + } + + return objectTest && propertyTest; + } + + function isNumberOrStringArray(input) { + var arrayTest = isArray(input), + dataTypeTest = false; + if (arrayTest) { + dataTypeTest = + input.filter(function (item) { + return !isNumber(item) && isString(input); + }).length === 0; + } + return arrayTest && dataTypeTest; + } + + function isCalendarSpec(input) { + var objectTest = isObject(input) && !isObjectEmpty(input), + propertyTest = false, + properties = [ + 'sameDay', + 'nextDay', + 'lastDay', + 'nextWeek', + 'lastWeek', + 'sameElse', + ], + i, + property; + + for (i = 0; i < properties.length; i += 1) { + property = properties[i]; + propertyTest = propertyTest || hasOwnProp(input, property); + } + + return objectTest && propertyTest; + } + + function getCalendarFormat(myMoment, now) { + var diff = myMoment.diff(now, 'days', true); + return diff < -6 + ? 'sameElse' + : diff < -1 + ? 'lastWeek' + : diff < 0 + ? 'lastDay' + : diff < 1 + ? 'sameDay' + : diff < 2 + ? 'nextDay' + : diff < 7 + ? 'nextWeek' + : 'sameElse'; + } + + function calendar$1(time, formats) { + // Support for single parameter, formats only overload to the calendar function + if (arguments.length === 1) { + if (isMomentInput(arguments[0])) { + time = arguments[0]; + formats = undefined; + } else if (isCalendarSpec(arguments[0])) { + formats = arguments[0]; + time = undefined; + } + } + // We want to compare the start of today, vs this. + // Getting start-of-today depends on whether we're local/utc/offset or not. + var now = time || createLocal(), + sod = cloneWithOffset(now, this).startOf('day'), + format = hooks.calendarFormat(this, sod) || 'sameElse', + output = + formats && + (isFunction(formats[format]) + ? formats[format].call(this, now) + : formats[format]); + + return this.format( + output || this.localeData().calendar(format, this, createLocal(now)) + ); + } + + function clone() { + return new Moment(this); + } + + function isAfter(input, units) { + var localInput = isMoment(input) ? input : createLocal(input); + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units) || 'millisecond'; + if (units === 'millisecond') { + return this.valueOf() > localInput.valueOf(); + } else { + return localInput.valueOf() < this.clone().startOf(units).valueOf(); + } + } + + function isBefore(input, units) { + var localInput = isMoment(input) ? input : createLocal(input); + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units) || 'millisecond'; + if (units === 'millisecond') { + return this.valueOf() < localInput.valueOf(); + } else { + return this.clone().endOf(units).valueOf() < localInput.valueOf(); + } + } + + function isBetween(from, to, units, inclusivity) { + var localFrom = isMoment(from) ? from : createLocal(from), + localTo = isMoment(to) ? to : createLocal(to); + if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) { + return false; + } + inclusivity = inclusivity || '()'; + return ( + (inclusivity[0] === '(' + ? this.isAfter(localFrom, units) + : !this.isBefore(localFrom, units)) && + (inclusivity[1] === ')' + ? this.isBefore(localTo, units) + : !this.isAfter(localTo, units)) + ); + } + + function isSame(input, units) { + var localInput = isMoment(input) ? input : createLocal(input), + inputMs; + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units) || 'millisecond'; + if (units === 'millisecond') { + return this.valueOf() === localInput.valueOf(); + } else { + inputMs = localInput.valueOf(); + return ( + this.clone().startOf(units).valueOf() <= inputMs && + inputMs <= this.clone().endOf(units).valueOf() + ); + } + } + + function isSameOrAfter(input, units) { + return this.isSame(input, units) || this.isAfter(input, units); + } + + function isSameOrBefore(input, units) { + return this.isSame(input, units) || this.isBefore(input, units); + } + + function diff(input, units, asFloat) { + var that, zoneDelta, output; + + if (!this.isValid()) { + return NaN; + } + + that = cloneWithOffset(input, this); + + if (!that.isValid()) { + return NaN; + } + + zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4; + + units = normalizeUnits(units); + + switch (units) { + case 'year': + output = monthDiff(this, that) / 12; + break; + case 'month': + output = monthDiff(this, that); + break; + case 'quarter': + output = monthDiff(this, that) / 3; + break; + case 'second': + output = (this - that) / 1e3; + break; // 1000 + case 'minute': + output = (this - that) / 6e4; + break; // 1000 * 60 + case 'hour': + output = (this - that) / 36e5; + break; // 1000 * 60 * 60 + case 'day': + output = (this - that - zoneDelta) / 864e5; + break; // 1000 * 60 * 60 * 24, negate dst + case 'week': + output = (this - that - zoneDelta) / 6048e5; + break; // 1000 * 60 * 60 * 24 * 7, negate dst + default: + output = this - that; + } + + return asFloat ? output : absFloor(output); + } + + function monthDiff(a, b) { + if (a.date() < b.date()) { + // end-of-month calculations work correct when the start month has more + // days than the end month. + return -monthDiff(b, a); + } + // difference in months + var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()), + // b is in (anchor - 1 month, anchor + 1 month) + anchor = a.clone().add(wholeMonthDiff, 'months'), + anchor2, + adjust; + + if (b - anchor < 0) { + anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor - anchor2); + } else { + anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor2 - anchor); + } + + //check for negative zero, return zero if negative zero + return -(wholeMonthDiff + adjust) || 0; + } + + hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; + hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]'; + + function toString() { + return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); + } + + function toISOString(keepOffset) { + if (!this.isValid()) { + return null; + } + var utc = keepOffset !== true, + m = utc ? this.clone().utc() : this; + if (m.year() < 0 || m.year() > 9999) { + return formatMoment( + m, + utc + ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' + : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ' + ); + } + if (isFunction(Date.prototype.toISOString)) { + // native implementation is ~50x faster, use it when we can + if (utc) { + return this.toDate().toISOString(); + } else { + return new Date(this.valueOf() + this.utcOffset() * 60 * 1000) + .toISOString() + .replace('Z', formatMoment(m, 'Z')); + } + } + return formatMoment( + m, + utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ' + ); + } + + /** + * Return a human readable representation of a moment that can + * also be evaluated to get a new moment which is the same + * + * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects + */ + function inspect() { + if (!this.isValid()) { + return 'moment.invalid(/* ' + this._i + ' */)'; + } + var func = 'moment', + zone = '', + prefix, + year, + datetime, + suffix; + if (!this.isLocal()) { + func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone'; + zone = 'Z'; + } + prefix = '[' + func + '("]'; + year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY'; + datetime = '-MM-DD[T]HH:mm:ss.SSS'; + suffix = zone + '[")]'; + + return this.format(prefix + year + datetime + suffix); + } + + function format(inputString) { + if (!inputString) { + inputString = this.isUtc() + ? hooks.defaultFormatUtc + : hooks.defaultFormat; + } + var output = formatMoment(this, inputString); + return this.localeData().postformat(output); + } + + function from(time, withoutSuffix) { + if ( + this.isValid() && + ((isMoment(time) && time.isValid()) || createLocal(time).isValid()) + ) { + return createDuration({ to: this, from: time }) + .locale(this.locale()) + .humanize(!withoutSuffix); + } else { + return this.localeData().invalidDate(); + } + } + + function fromNow(withoutSuffix) { + return this.from(createLocal(), withoutSuffix); + } + + function to(time, withoutSuffix) { + if ( + this.isValid() && + ((isMoment(time) && time.isValid()) || createLocal(time).isValid()) + ) { + return createDuration({ from: this, to: time }) + .locale(this.locale()) + .humanize(!withoutSuffix); + } else { + return this.localeData().invalidDate(); + } + } + + function toNow(withoutSuffix) { + return this.to(createLocal(), withoutSuffix); + } + + // If passed a locale key, it will set the locale for this + // instance. Otherwise, it will return the locale configuration + // variables for this instance. + function locale(key) { + var newLocaleData; + + if (key === undefined) { + return this._locale._abbr; + } else { + newLocaleData = getLocale(key); + if (newLocaleData != null) { + this._locale = newLocaleData; + } + return this; + } + } + + var lang = deprecate( + 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', + function (key) { + if (key === undefined) { + return this.localeData(); + } else { + return this.locale(key); + } + } + ); + + function localeData() { + return this._locale; + } + + var MS_PER_SECOND = 1000, + MS_PER_MINUTE = 60 * MS_PER_SECOND, + MS_PER_HOUR = 60 * MS_PER_MINUTE, + MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR; + + // actual modulo - handles negative numbers (for dates before 1970): + function mod$1(dividend, divisor) { + return ((dividend % divisor) + divisor) % divisor; + } + + function localStartOfDate(y, m, d) { + // the date constructor remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + // preserve leap years using a full 400 year cycle, then reset + return new Date(y + 400, m, d) - MS_PER_400_YEARS; + } else { + return new Date(y, m, d).valueOf(); + } + } + + function utcStartOfDate(y, m, d) { + // Date.UTC remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + // preserve leap years using a full 400 year cycle, then reset + return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS; + } else { + return Date.UTC(y, m, d); + } + } + + function startOf(units) { + var time, startOfDate; + units = normalizeUnits(units); + if (units === undefined || units === 'millisecond' || !this.isValid()) { + return this; + } + + startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate; + + switch (units) { + case 'year': + time = startOfDate(this.year(), 0, 1); + break; + case 'quarter': + time = startOfDate( + this.year(), + this.month() - (this.month() % 3), + 1 + ); + break; + case 'month': + time = startOfDate(this.year(), this.month(), 1); + break; + case 'week': + time = startOfDate( + this.year(), + this.month(), + this.date() - this.weekday() + ); + break; + case 'isoWeek': + time = startOfDate( + this.year(), + this.month(), + this.date() - (this.isoWeekday() - 1) + ); + break; + case 'day': + case 'date': + time = startOfDate(this.year(), this.month(), this.date()); + break; + case 'hour': + time = this._d.valueOf(); + time -= mod$1( + time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), + MS_PER_HOUR + ); + break; + case 'minute': + time = this._d.valueOf(); + time -= mod$1(time, MS_PER_MINUTE); + break; + case 'second': + time = this._d.valueOf(); + time -= mod$1(time, MS_PER_SECOND); + break; + } + + this._d.setTime(time); + hooks.updateOffset(this, true); + return this; + } + + function endOf(units) { + var time, startOfDate; + units = normalizeUnits(units); + if (units === undefined || units === 'millisecond' || !this.isValid()) { + return this; + } + + startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate; + + switch (units) { + case 'year': + time = startOfDate(this.year() + 1, 0, 1) - 1; + break; + case 'quarter': + time = + startOfDate( + this.year(), + this.month() - (this.month() % 3) + 3, + 1 + ) - 1; + break; + case 'month': + time = startOfDate(this.year(), this.month() + 1, 1) - 1; + break; + case 'week': + time = + startOfDate( + this.year(), + this.month(), + this.date() - this.weekday() + 7 + ) - 1; + break; + case 'isoWeek': + time = + startOfDate( + this.year(), + this.month(), + this.date() - (this.isoWeekday() - 1) + 7 + ) - 1; + break; + case 'day': + case 'date': + time = startOfDate(this.year(), this.month(), this.date() + 1) - 1; + break; + case 'hour': + time = this._d.valueOf(); + time += + MS_PER_HOUR - + mod$1( + time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), + MS_PER_HOUR + ) - + 1; + break; + case 'minute': + time = this._d.valueOf(); + time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1; + break; + case 'second': + time = this._d.valueOf(); + time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1; + break; + } + + this._d.setTime(time); + hooks.updateOffset(this, true); + return this; + } + + function valueOf() { + return this._d.valueOf() - (this._offset || 0) * 60000; + } + + function unix() { + return Math.floor(this.valueOf() / 1000); + } + + function toDate() { + return new Date(this.valueOf()); + } + + function toArray() { + var m = this; + return [ + m.year(), + m.month(), + m.date(), + m.hour(), + m.minute(), + m.second(), + m.millisecond(), + ]; + } + + function toObject() { + var m = this; + return { + years: m.year(), + months: m.month(), + date: m.date(), + hours: m.hours(), + minutes: m.minutes(), + seconds: m.seconds(), + milliseconds: m.milliseconds(), + }; + } + + function toJSON() { + // new Date(NaN).toJSON() === null + return this.isValid() ? this.toISOString() : null; + } + + function isValid$2() { + return isValid(this); + } + + function parsingFlags() { + return extend({}, getParsingFlags(this)); + } + + function invalidAt() { + return getParsingFlags(this).overflow; + } + + function creationData() { + return { + input: this._i, + format: this._f, + locale: this._locale, + isUTC: this._isUTC, + strict: this._strict, + }; + } + + addFormatToken('N', 0, 0, 'eraAbbr'); + addFormatToken('NN', 0, 0, 'eraAbbr'); + addFormatToken('NNN', 0, 0, 'eraAbbr'); + addFormatToken('NNNN', 0, 0, 'eraName'); + addFormatToken('NNNNN', 0, 0, 'eraNarrow'); + + addFormatToken('y', ['y', 1], 'yo', 'eraYear'); + addFormatToken('y', ['yy', 2], 0, 'eraYear'); + addFormatToken('y', ['yyy', 3], 0, 'eraYear'); + addFormatToken('y', ['yyyy', 4], 0, 'eraYear'); + + addRegexToken('N', matchEraAbbr); + addRegexToken('NN', matchEraAbbr); + addRegexToken('NNN', matchEraAbbr); + addRegexToken('NNNN', matchEraName); + addRegexToken('NNNNN', matchEraNarrow); + + addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function ( + input, + array, + config, + token + ) { + var era = config._locale.erasParse(input, token, config._strict); + if (era) { + getParsingFlags(config).era = era; + } else { + getParsingFlags(config).invalidEra = input; + } + }); + + addRegexToken('y', matchUnsigned); + addRegexToken('yy', matchUnsigned); + addRegexToken('yyy', matchUnsigned); + addRegexToken('yyyy', matchUnsigned); + addRegexToken('yo', matchEraYearOrdinal); + + addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR); + addParseToken(['yo'], function (input, array, config, token) { + var match; + if (config._locale._eraYearOrdinalRegex) { + match = input.match(config._locale._eraYearOrdinalRegex); + } + + if (config._locale.eraYearOrdinalParse) { + array[YEAR] = config._locale.eraYearOrdinalParse(input, match); + } else { + array[YEAR] = parseInt(input, 10); + } + }); + + function localeEras(m, format) { + var i, + l, + date, + eras = this._eras || getLocale('en')._eras; + for (i = 0, l = eras.length; i < l; ++i) { + switch (typeof eras[i].since) { + case 'string': + // truncate time + date = hooks(eras[i].since).startOf('day'); + eras[i].since = date.valueOf(); + break; + } + + switch (typeof eras[i].until) { + case 'undefined': + eras[i].until = +Infinity; + break; + case 'string': + // truncate time + date = hooks(eras[i].until).startOf('day').valueOf(); + eras[i].until = date.valueOf(); + break; + } + } + return eras; + } + + function localeErasParse(eraName, format, strict) { + var i, + l, + eras = this.eras(), + name, + abbr, + narrow; + eraName = eraName.toUpperCase(); + + for (i = 0, l = eras.length; i < l; ++i) { + name = eras[i].name.toUpperCase(); + abbr = eras[i].abbr.toUpperCase(); + narrow = eras[i].narrow.toUpperCase(); + + if (strict) { + switch (format) { + case 'N': + case 'NN': + case 'NNN': + if (abbr === eraName) { + return eras[i]; + } + break; + + case 'NNNN': + if (name === eraName) { + return eras[i]; + } + break; + + case 'NNNNN': + if (narrow === eraName) { + return eras[i]; + } + break; + } + } else if ([name, abbr, narrow].indexOf(eraName) >= 0) { + return eras[i]; + } + } + } + + function localeErasConvertYear(era, year) { + var dir = era.since <= era.until ? +1 : -1; + if (year === undefined) { + return hooks(era.since).year(); + } else { + return hooks(era.since).year() + (year - era.offset) * dir; + } + } + + function getEraName() { + var i, + l, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + // truncate time + val = this.clone().startOf('day').valueOf(); + + if (eras[i].since <= val && val <= eras[i].until) { + return eras[i].name; + } + if (eras[i].until <= val && val <= eras[i].since) { + return eras[i].name; + } + } + + return ''; + } + + function getEraNarrow() { + var i, + l, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + // truncate time + val = this.clone().startOf('day').valueOf(); + + if (eras[i].since <= val && val <= eras[i].until) { + return eras[i].narrow; + } + if (eras[i].until <= val && val <= eras[i].since) { + return eras[i].narrow; + } + } + + return ''; + } + + function getEraAbbr() { + var i, + l, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + // truncate time + val = this.clone().startOf('day').valueOf(); + + if (eras[i].since <= val && val <= eras[i].until) { + return eras[i].abbr; + } + if (eras[i].until <= val && val <= eras[i].since) { + return eras[i].abbr; + } + } + + return ''; + } + + function getEraYear() { + var i, + l, + dir, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + dir = eras[i].since <= eras[i].until ? +1 : -1; + + // truncate time + val = this.clone().startOf('day').valueOf(); + + if ( + (eras[i].since <= val && val <= eras[i].until) || + (eras[i].until <= val && val <= eras[i].since) + ) { + return ( + (this.year() - hooks(eras[i].since).year()) * dir + + eras[i].offset + ); + } + } + + return this.year(); + } + + function erasNameRegex(isStrict) { + if (!hasOwnProp(this, '_erasNameRegex')) { + computeErasParse.call(this); + } + return isStrict ? this._erasNameRegex : this._erasRegex; + } + + function erasAbbrRegex(isStrict) { + if (!hasOwnProp(this, '_erasAbbrRegex')) { + computeErasParse.call(this); + } + return isStrict ? this._erasAbbrRegex : this._erasRegex; + } + + function erasNarrowRegex(isStrict) { + if (!hasOwnProp(this, '_erasNarrowRegex')) { + computeErasParse.call(this); + } + return isStrict ? this._erasNarrowRegex : this._erasRegex; + } + + function matchEraAbbr(isStrict, locale) { + return locale.erasAbbrRegex(isStrict); + } + + function matchEraName(isStrict, locale) { + return locale.erasNameRegex(isStrict); + } + + function matchEraNarrow(isStrict, locale) { + return locale.erasNarrowRegex(isStrict); + } + + function matchEraYearOrdinal(isStrict, locale) { + return locale._eraYearOrdinalRegex || matchUnsigned; + } + + function computeErasParse() { + var abbrPieces = [], + namePieces = [], + narrowPieces = [], + mixedPieces = [], + i, + l, + eras = this.eras(); + + for (i = 0, l = eras.length; i < l; ++i) { + namePieces.push(regexEscape(eras[i].name)); + abbrPieces.push(regexEscape(eras[i].abbr)); + narrowPieces.push(regexEscape(eras[i].narrow)); + + mixedPieces.push(regexEscape(eras[i].name)); + mixedPieces.push(regexEscape(eras[i].abbr)); + mixedPieces.push(regexEscape(eras[i].narrow)); + } + + this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i'); + this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i'); + this._erasNarrowRegex = new RegExp( + '^(' + narrowPieces.join('|') + ')', + 'i' + ); + } + + // FORMATTING + + addFormatToken(0, ['gg', 2], 0, function () { + return this.weekYear() % 100; + }); + + addFormatToken(0, ['GG', 2], 0, function () { + return this.isoWeekYear() % 100; + }); + + function addWeekYearFormatToken(token, getter) { + addFormatToken(0, [token, token.length], 0, getter); + } + + addWeekYearFormatToken('gggg', 'weekYear'); + addWeekYearFormatToken('ggggg', 'weekYear'); + addWeekYearFormatToken('GGGG', 'isoWeekYear'); + addWeekYearFormatToken('GGGGG', 'isoWeekYear'); + + // ALIASES + + addUnitAlias('weekYear', 'gg'); + addUnitAlias('isoWeekYear', 'GG'); + + // PRIORITY + + addUnitPriority('weekYear', 1); + addUnitPriority('isoWeekYear', 1); + + // PARSING + + addRegexToken('G', matchSigned); + addRegexToken('g', matchSigned); + addRegexToken('GG', match1to2, match2); + addRegexToken('gg', match1to2, match2); + addRegexToken('GGGG', match1to4, match4); + addRegexToken('gggg', match1to4, match4); + addRegexToken('GGGGG', match1to6, match6); + addRegexToken('ggggg', match1to6, match6); + + addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function ( + input, + week, + config, + token + ) { + week[token.substr(0, 2)] = toInt(input); + }); + + addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { + week[token] = hooks.parseTwoDigitYear(input); + }); + + // MOMENTS + + function getSetWeekYear(input) { + return getSetWeekYearHelper.call( + this, + input, + this.week(), + this.weekday(), + this.localeData()._week.dow, + this.localeData()._week.doy + ); + } + + function getSetISOWeekYear(input) { + return getSetWeekYearHelper.call( + this, + input, + this.isoWeek(), + this.isoWeekday(), + 1, + 4 + ); + } + + function getISOWeeksInYear() { + return weeksInYear(this.year(), 1, 4); + } + + function getISOWeeksInISOWeekYear() { + return weeksInYear(this.isoWeekYear(), 1, 4); + } + + function getWeeksInYear() { + var weekInfo = this.localeData()._week; + return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); + } + + function getWeeksInWeekYear() { + var weekInfo = this.localeData()._week; + return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy); + } + + function getSetWeekYearHelper(input, week, weekday, dow, doy) { + var weeksTarget; + if (input == null) { + return weekOfYear(this, dow, doy).year; + } else { + weeksTarget = weeksInYear(input, dow, doy); + if (week > weeksTarget) { + week = weeksTarget; + } + return setWeekAll.call(this, input, week, weekday, dow, doy); + } + } + + function setWeekAll(weekYear, week, weekday, dow, doy) { + var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), + date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear); + + this.year(date.getUTCFullYear()); + this.month(date.getUTCMonth()); + this.date(date.getUTCDate()); + return this; + } + + // FORMATTING + + addFormatToken('Q', 0, 'Qo', 'quarter'); + + // ALIASES + + addUnitAlias('quarter', 'Q'); + + // PRIORITY + + addUnitPriority('quarter', 7); + + // PARSING + + addRegexToken('Q', match1); + addParseToken('Q', function (input, array) { + array[MONTH] = (toInt(input) - 1) * 3; + }); + + // MOMENTS + + function getSetQuarter(input) { + return input == null + ? Math.ceil((this.month() + 1) / 3) + : this.month((input - 1) * 3 + (this.month() % 3)); + } + + // FORMATTING + + addFormatToken('D', ['DD', 2], 'Do', 'date'); + + // ALIASES + + addUnitAlias('date', 'D'); + + // PRIORITY + addUnitPriority('date', 9); + + // PARSING + + addRegexToken('D', match1to2); + addRegexToken('DD', match1to2, match2); + addRegexToken('Do', function (isStrict, locale) { + // TODO: Remove "ordinalParse" fallback in next major release. + return isStrict + ? locale._dayOfMonthOrdinalParse || locale._ordinalParse + : locale._dayOfMonthOrdinalParseLenient; + }); + + addParseToken(['D', 'DD'], DATE); + addParseToken('Do', function (input, array) { + array[DATE] = toInt(input.match(match1to2)[0]); + }); + + // MOMENTS + + var getSetDayOfMonth = makeGetSet('Date', true); + + // FORMATTING + + addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); + + // ALIASES + + addUnitAlias('dayOfYear', 'DDD'); + + // PRIORITY + addUnitPriority('dayOfYear', 4); + + // PARSING + + addRegexToken('DDD', match1to3); + addRegexToken('DDDD', match3); + addParseToken(['DDD', 'DDDD'], function (input, array, config) { + config._dayOfYear = toInt(input); + }); + + // HELPERS + + // MOMENTS + + function getSetDayOfYear(input) { + var dayOfYear = + Math.round( + (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5 + ) + 1; + return input == null ? dayOfYear : this.add(input - dayOfYear, 'd'); + } + + // FORMATTING + + addFormatToken('m', ['mm', 2], 0, 'minute'); + + // ALIASES + + addUnitAlias('minute', 'm'); + + // PRIORITY + + addUnitPriority('minute', 14); + + // PARSING + + addRegexToken('m', match1to2); + addRegexToken('mm', match1to2, match2); + addParseToken(['m', 'mm'], MINUTE); + + // MOMENTS + + var getSetMinute = makeGetSet('Minutes', false); + + // FORMATTING + + addFormatToken('s', ['ss', 2], 0, 'second'); + + // ALIASES + + addUnitAlias('second', 's'); + + // PRIORITY + + addUnitPriority('second', 15); + + // PARSING + + addRegexToken('s', match1to2); + addRegexToken('ss', match1to2, match2); + addParseToken(['s', 'ss'], SECOND); + + // MOMENTS + + var getSetSecond = makeGetSet('Seconds', false); + + // FORMATTING + + addFormatToken('S', 0, 0, function () { + return ~~(this.millisecond() / 100); + }); + + addFormatToken(0, ['SS', 2], 0, function () { + return ~~(this.millisecond() / 10); + }); + + addFormatToken(0, ['SSS', 3], 0, 'millisecond'); + addFormatToken(0, ['SSSS', 4], 0, function () { + return this.millisecond() * 10; + }); + addFormatToken(0, ['SSSSS', 5], 0, function () { + return this.millisecond() * 100; + }); + addFormatToken(0, ['SSSSSS', 6], 0, function () { + return this.millisecond() * 1000; + }); + addFormatToken(0, ['SSSSSSS', 7], 0, function () { + return this.millisecond() * 10000; + }); + addFormatToken(0, ['SSSSSSSS', 8], 0, function () { + return this.millisecond() * 100000; + }); + addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { + return this.millisecond() * 1000000; + }); + + // ALIASES + + addUnitAlias('millisecond', 'ms'); + + // PRIORITY + + addUnitPriority('millisecond', 16); + + // PARSING + + addRegexToken('S', match1to3, match1); + addRegexToken('SS', match1to3, match2); + addRegexToken('SSS', match1to3, match3); + + var token, getSetMillisecond; + for (token = 'SSSS'; token.length <= 9; token += 'S') { + addRegexToken(token, matchUnsigned); + } + + function parseMs(input, array) { + array[MILLISECOND] = toInt(('0.' + input) * 1000); + } + + for (token = 'S'; token.length <= 9; token += 'S') { + addParseToken(token, parseMs); + } + + getSetMillisecond = makeGetSet('Milliseconds', false); + + // FORMATTING + + addFormatToken('z', 0, 0, 'zoneAbbr'); + addFormatToken('zz', 0, 0, 'zoneName'); + + // MOMENTS + + function getZoneAbbr() { + return this._isUTC ? 'UTC' : ''; + } + + function getZoneName() { + return this._isUTC ? 'Coordinated Universal Time' : ''; + } + + var proto = Moment.prototype; + + proto.add = add; + proto.calendar = calendar$1; + proto.clone = clone; + proto.diff = diff; + proto.endOf = endOf; + proto.format = format; + proto.from = from; + proto.fromNow = fromNow; + proto.to = to; + proto.toNow = toNow; + proto.get = stringGet; + proto.invalidAt = invalidAt; + proto.isAfter = isAfter; + proto.isBefore = isBefore; + proto.isBetween = isBetween; + proto.isSame = isSame; + proto.isSameOrAfter = isSameOrAfter; + proto.isSameOrBefore = isSameOrBefore; + proto.isValid = isValid$2; + proto.lang = lang; + proto.locale = locale; + proto.localeData = localeData; + proto.max = prototypeMax; + proto.min = prototypeMin; + proto.parsingFlags = parsingFlags; + proto.set = stringSet; + proto.startOf = startOf; + proto.subtract = subtract; + proto.toArray = toArray; + proto.toObject = toObject; + proto.toDate = toDate; + proto.toISOString = toISOString; + proto.inspect = inspect; + if (typeof Symbol !== 'undefined' && Symbol.for != null) { + proto[Symbol.for('nodejs.util.inspect.custom')] = function () { + return 'Moment<' + this.format() + '>'; + }; + } + proto.toJSON = toJSON; + proto.toString = toString; + proto.unix = unix; + proto.valueOf = valueOf; + proto.creationData = creationData; + proto.eraName = getEraName; + proto.eraNarrow = getEraNarrow; + proto.eraAbbr = getEraAbbr; + proto.eraYear = getEraYear; + proto.year = getSetYear; + proto.isLeapYear = getIsLeapYear; + proto.weekYear = getSetWeekYear; + proto.isoWeekYear = getSetISOWeekYear; + proto.quarter = proto.quarters = getSetQuarter; + proto.month = getSetMonth; + proto.daysInMonth = getDaysInMonth; + proto.week = proto.weeks = getSetWeek; + proto.isoWeek = proto.isoWeeks = getSetISOWeek; + proto.weeksInYear = getWeeksInYear; + proto.weeksInWeekYear = getWeeksInWeekYear; + proto.isoWeeksInYear = getISOWeeksInYear; + proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear; + proto.date = getSetDayOfMonth; + proto.day = proto.days = getSetDayOfWeek; + proto.weekday = getSetLocaleDayOfWeek; + proto.isoWeekday = getSetISODayOfWeek; + proto.dayOfYear = getSetDayOfYear; + proto.hour = proto.hours = getSetHour; + proto.minute = proto.minutes = getSetMinute; + proto.second = proto.seconds = getSetSecond; + proto.millisecond = proto.milliseconds = getSetMillisecond; + proto.utcOffset = getSetOffset; + proto.utc = setOffsetToUTC; + proto.local = setOffsetToLocal; + proto.parseZone = setOffsetToParsedOffset; + proto.hasAlignedHourOffset = hasAlignedHourOffset; + proto.isDST = isDaylightSavingTime; + proto.isLocal = isLocal; + proto.isUtcOffset = isUtcOffset; + proto.isUtc = isUtc; + proto.isUTC = isUtc; + proto.zoneAbbr = getZoneAbbr; + proto.zoneName = getZoneName; + proto.dates = deprecate( + 'dates accessor is deprecated. Use date instead.', + getSetDayOfMonth + ); + proto.months = deprecate( + 'months accessor is deprecated. Use month instead', + getSetMonth + ); + proto.years = deprecate( + 'years accessor is deprecated. Use year instead', + getSetYear + ); + proto.zone = deprecate( + 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', + getSetZone + ); + proto.isDSTShifted = deprecate( + 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', + isDaylightSavingTimeShifted + ); + + function createUnix(input) { + return createLocal(input * 1000); + } + + function createInZone() { + return createLocal.apply(null, arguments).parseZone(); + } + + function preParsePostFormat(string) { + return string; + } + + var proto$1 = Locale.prototype; + + proto$1.calendar = calendar; + proto$1.longDateFormat = longDateFormat; + proto$1.invalidDate = invalidDate; + proto$1.ordinal = ordinal; + proto$1.preparse = preParsePostFormat; + proto$1.postformat = preParsePostFormat; + proto$1.relativeTime = relativeTime; + proto$1.pastFuture = pastFuture; + proto$1.set = set; + proto$1.eras = localeEras; + proto$1.erasParse = localeErasParse; + proto$1.erasConvertYear = localeErasConvertYear; + proto$1.erasAbbrRegex = erasAbbrRegex; + proto$1.erasNameRegex = erasNameRegex; + proto$1.erasNarrowRegex = erasNarrowRegex; + + proto$1.months = localeMonths; + proto$1.monthsShort = localeMonthsShort; + proto$1.monthsParse = localeMonthsParse; + proto$1.monthsRegex = monthsRegex; + proto$1.monthsShortRegex = monthsShortRegex; + proto$1.week = localeWeek; + proto$1.firstDayOfYear = localeFirstDayOfYear; + proto$1.firstDayOfWeek = localeFirstDayOfWeek; + + proto$1.weekdays = localeWeekdays; + proto$1.weekdaysMin = localeWeekdaysMin; + proto$1.weekdaysShort = localeWeekdaysShort; + proto$1.weekdaysParse = localeWeekdaysParse; + + proto$1.weekdaysRegex = weekdaysRegex; + proto$1.weekdaysShortRegex = weekdaysShortRegex; + proto$1.weekdaysMinRegex = weekdaysMinRegex; + + proto$1.isPM = localeIsPM; + proto$1.meridiem = localeMeridiem; + + function get$1(format, index, field, setter) { + var locale = getLocale(), + utc = createUTC().set(setter, index); + return locale[field](utc, format); + } + + function listMonthsImpl(format, index, field) { + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + + if (index != null) { + return get$1(format, index, field, 'month'); + } + + var i, + out = []; + for (i = 0; i < 12; i++) { + out[i] = get$1(format, i, field, 'month'); + } + return out; + } + + // () + // (5) + // (fmt, 5) + // (fmt) + // (true) + // (true, 5) + // (true, fmt, 5) + // (true, fmt) + function listWeekdaysImpl(localeSorted, format, index, field) { + if (typeof localeSorted === 'boolean') { + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + } else { + format = localeSorted; + index = format; + localeSorted = false; + + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + } + + var locale = getLocale(), + shift = localeSorted ? locale._week.dow : 0, + i, + out = []; + + if (index != null) { + return get$1(format, (index + shift) % 7, field, 'day'); + } + + for (i = 0; i < 7; i++) { + out[i] = get$1(format, (i + shift) % 7, field, 'day'); + } + return out; + } + + function listMonths(format, index) { + return listMonthsImpl(format, index, 'months'); + } + + function listMonthsShort(format, index) { + return listMonthsImpl(format, index, 'monthsShort'); + } + + function listWeekdays(localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdays'); + } + + function listWeekdaysShort(localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort'); + } + + function listWeekdaysMin(localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin'); + } + + getSetGlobalLocale('en', { + eras: [ + { + since: '0001-01-01', + until: +Infinity, + offset: 1, + name: 'Anno Domini', + narrow: 'AD', + abbr: 'AD', + }, + { + since: '0000-12-31', + until: -Infinity, + offset: 1, + name: 'Before Christ', + narrow: 'BC', + abbr: 'BC', + }, + ], + dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal: function (number) { + var b = number % 10, + output = + toInt((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + }); + + // Side effect imports + + hooks.lang = deprecate( + 'moment.lang is deprecated. Use moment.locale instead.', + getSetGlobalLocale + ); + hooks.langData = deprecate( + 'moment.langData is deprecated. Use moment.localeData instead.', + getLocale + ); + + var mathAbs = Math.abs; + + function abs() { + var data = this._data; + + this._milliseconds = mathAbs(this._milliseconds); + this._days = mathAbs(this._days); + this._months = mathAbs(this._months); + + data.milliseconds = mathAbs(data.milliseconds); + data.seconds = mathAbs(data.seconds); + data.minutes = mathAbs(data.minutes); + data.hours = mathAbs(data.hours); + data.months = mathAbs(data.months); + data.years = mathAbs(data.years); + + return this; + } + + function addSubtract$1(duration, input, value, direction) { + var other = createDuration(input, value); + + duration._milliseconds += direction * other._milliseconds; + duration._days += direction * other._days; + duration._months += direction * other._months; + + return duration._bubble(); + } + + // supports only 2.0-style add(1, 's') or add(duration) + function add$1(input, value) { + return addSubtract$1(this, input, value, 1); + } + + // supports only 2.0-style subtract(1, 's') or subtract(duration) + function subtract$1(input, value) { + return addSubtract$1(this, input, value, -1); + } + + function absCeil(number) { + if (number < 0) { + return Math.floor(number); + } else { + return Math.ceil(number); + } + } + + function bubble() { + var milliseconds = this._milliseconds, + days = this._days, + months = this._months, + data = this._data, + seconds, + minutes, + hours, + years, + monthsFromDays; + + // if we have a mix of positive and negative values, bubble down first + // check: https://github.com/moment/moment/issues/2166 + if ( + !( + (milliseconds >= 0 && days >= 0 && months >= 0) || + (milliseconds <= 0 && days <= 0 && months <= 0) + ) + ) { + milliseconds += absCeil(monthsToDays(months) + days) * 864e5; + days = 0; + months = 0; + } + + // The following code bubbles up values, see the tests for + // examples of what that means. + data.milliseconds = milliseconds % 1000; + + seconds = absFloor(milliseconds / 1000); + data.seconds = seconds % 60; + + minutes = absFloor(seconds / 60); + data.minutes = minutes % 60; + + hours = absFloor(minutes / 60); + data.hours = hours % 24; + + days += absFloor(hours / 24); + + // convert days to months + monthsFromDays = absFloor(daysToMonths(days)); + months += monthsFromDays; + days -= absCeil(monthsToDays(monthsFromDays)); + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + data.days = days; + data.months = months; + data.years = years; + + return this; + } + + function daysToMonths(days) { + // 400 years have 146097 days (taking into account leap year rules) + // 400 years have 12 months === 4800 + return (days * 4800) / 146097; + } + + function monthsToDays(months) { + // the reverse of daysToMonths + return (months * 146097) / 4800; + } + + function as(units) { + if (!this.isValid()) { + return NaN; + } + var days, + months, + milliseconds = this._milliseconds; + + units = normalizeUnits(units); + + if (units === 'month' || units === 'quarter' || units === 'year') { + days = this._days + milliseconds / 864e5; + months = this._months + daysToMonths(days); + switch (units) { + case 'month': + return months; + case 'quarter': + return months / 3; + case 'year': + return months / 12; + } + } else { + // handle milliseconds separately because of floating point math errors (issue #1867) + days = this._days + Math.round(monthsToDays(this._months)); + switch (units) { + case 'week': + return days / 7 + milliseconds / 6048e5; + case 'day': + return days + milliseconds / 864e5; + case 'hour': + return days * 24 + milliseconds / 36e5; + case 'minute': + return days * 1440 + milliseconds / 6e4; + case 'second': + return days * 86400 + milliseconds / 1000; + // Math.floor prevents floating point math errors here + case 'millisecond': + return Math.floor(days * 864e5) + milliseconds; + default: + throw new Error('Unknown unit ' + units); + } + } + } + + // TODO: Use this.as('ms')? + function valueOf$1() { + if (!this.isValid()) { + return NaN; + } + return ( + this._milliseconds + + this._days * 864e5 + + (this._months % 12) * 2592e6 + + toInt(this._months / 12) * 31536e6 + ); + } + + function makeAs(alias) { + return function () { + return this.as(alias); + }; + } + + var asMilliseconds = makeAs('ms'), + asSeconds = makeAs('s'), + asMinutes = makeAs('m'), + asHours = makeAs('h'), + asDays = makeAs('d'), + asWeeks = makeAs('w'), + asMonths = makeAs('M'), + asQuarters = makeAs('Q'), + asYears = makeAs('y'); + + function clone$1() { + return createDuration(this); + } + + function get$2(units) { + units = normalizeUnits(units); + return this.isValid() ? this[units + 's']() : NaN; + } + + function makeGetter(name) { + return function () { + return this.isValid() ? this._data[name] : NaN; + }; + } + + var milliseconds = makeGetter('milliseconds'), + seconds = makeGetter('seconds'), + minutes = makeGetter('minutes'), + hours = makeGetter('hours'), + days = makeGetter('days'), + months = makeGetter('months'), + years = makeGetter('years'); + + function weeks() { + return absFloor(this.days() / 7); + } + + var round = Math.round, + thresholds = { + ss: 44, // a few seconds to seconds + s: 45, // seconds to minute + m: 45, // minutes to hour + h: 22, // hours to day + d: 26, // days to month/week + w: null, // weeks to month + M: 11, // months to year + }; + + // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize + function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { + return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); + } + + function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) { + var duration = createDuration(posNegDuration).abs(), + seconds = round(duration.as('s')), + minutes = round(duration.as('m')), + hours = round(duration.as('h')), + days = round(duration.as('d')), + months = round(duration.as('M')), + weeks = round(duration.as('w')), + years = round(duration.as('y')), + a = + (seconds <= thresholds.ss && ['s', seconds]) || + (seconds < thresholds.s && ['ss', seconds]) || + (minutes <= 1 && ['m']) || + (minutes < thresholds.m && ['mm', minutes]) || + (hours <= 1 && ['h']) || + (hours < thresholds.h && ['hh', hours]) || + (days <= 1 && ['d']) || + (days < thresholds.d && ['dd', days]); + + if (thresholds.w != null) { + a = + a || + (weeks <= 1 && ['w']) || + (weeks < thresholds.w && ['ww', weeks]); + } + a = a || + (months <= 1 && ['M']) || + (months < thresholds.M && ['MM', months]) || + (years <= 1 && ['y']) || ['yy', years]; + + a[2] = withoutSuffix; + a[3] = +posNegDuration > 0; + a[4] = locale; + return substituteTimeAgo.apply(null, a); + } + + // This function allows you to set the rounding function for relative time strings + function getSetRelativeTimeRounding(roundingFunction) { + if (roundingFunction === undefined) { + return round; + } + if (typeof roundingFunction === 'function') { + round = roundingFunction; + return true; + } + return false; + } + + // This function allows you to set a threshold for relative time strings + function getSetRelativeTimeThreshold(threshold, limit) { + if (thresholds[threshold] === undefined) { + return false; + } + if (limit === undefined) { + return thresholds[threshold]; + } + thresholds[threshold] = limit; + if (threshold === 's') { + thresholds.ss = limit - 1; + } + return true; + } + + function humanize(argWithSuffix, argThresholds) { + if (!this.isValid()) { + return this.localeData().invalidDate(); + } + + var withSuffix = false, + th = thresholds, + locale, + output; + + if (typeof argWithSuffix === 'object') { + argThresholds = argWithSuffix; + argWithSuffix = false; + } + if (typeof argWithSuffix === 'boolean') { + withSuffix = argWithSuffix; + } + if (typeof argThresholds === 'object') { + th = Object.assign({}, thresholds, argThresholds); + if (argThresholds.s != null && argThresholds.ss == null) { + th.ss = argThresholds.s - 1; + } + } + + locale = this.localeData(); + output = relativeTime$1(this, !withSuffix, th, locale); + + if (withSuffix) { + output = locale.pastFuture(+this, output); + } + + return locale.postformat(output); + } + + var abs$1 = Math.abs; + + function sign(x) { + return (x > 0) - (x < 0) || +x; + } + + function toISOString$1() { + // for ISO strings we do not use the normal bubbling rules: + // * milliseconds bubble up until they become hours + // * days do not bubble at all + // * months bubble up until they become years + // This is because there is no context-free conversion between hours and days + // (think of clock changes) + // and also not between days and months (28-31 days per month) + if (!this.isValid()) { + return this.localeData().invalidDate(); + } + + var seconds = abs$1(this._milliseconds) / 1000, + days = abs$1(this._days), + months = abs$1(this._months), + minutes, + hours, + years, + s, + total = this.asSeconds(), + totalSign, + ymSign, + daysSign, + hmsSign; + + if (!total) { + // this is the same as C#'s (Noda) and python (isodate)... + // but not other JS (goog.date) + return 'P0D'; + } + + // 3600 seconds -> 60 minutes -> 1 hour + minutes = absFloor(seconds / 60); + hours = absFloor(minutes / 60); + seconds %= 60; + minutes %= 60; + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js + s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : ''; + + totalSign = total < 0 ? '-' : ''; + ymSign = sign(this._months) !== sign(total) ? '-' : ''; + daysSign = sign(this._days) !== sign(total) ? '-' : ''; + hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : ''; + + return ( + totalSign + + 'P' + + (years ? ymSign + years + 'Y' : '') + + (months ? ymSign + months + 'M' : '') + + (days ? daysSign + days + 'D' : '') + + (hours || minutes || seconds ? 'T' : '') + + (hours ? hmsSign + hours + 'H' : '') + + (minutes ? hmsSign + minutes + 'M' : '') + + (seconds ? hmsSign + s + 'S' : '') + ); + } + + var proto$2 = Duration.prototype; + + proto$2.isValid = isValid$1; + proto$2.abs = abs; + proto$2.add = add$1; + proto$2.subtract = subtract$1; + proto$2.as = as; + proto$2.asMilliseconds = asMilliseconds; + proto$2.asSeconds = asSeconds; + proto$2.asMinutes = asMinutes; + proto$2.asHours = asHours; + proto$2.asDays = asDays; + proto$2.asWeeks = asWeeks; + proto$2.asMonths = asMonths; + proto$2.asQuarters = asQuarters; + proto$2.asYears = asYears; + proto$2.valueOf = valueOf$1; + proto$2._bubble = bubble; + proto$2.clone = clone$1; + proto$2.get = get$2; + proto$2.milliseconds = milliseconds; + proto$2.seconds = seconds; + proto$2.minutes = minutes; + proto$2.hours = hours; + proto$2.days = days; + proto$2.weeks = weeks; + proto$2.months = months; + proto$2.years = years; + proto$2.humanize = humanize; + proto$2.toISOString = toISOString$1; + proto$2.toString = toISOString$1; + proto$2.toJSON = toISOString$1; + proto$2.locale = locale; + proto$2.localeData = localeData; + + proto$2.toIsoString = deprecate( + 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', + toISOString$1 + ); + proto$2.lang = lang; + + // FORMATTING + + addFormatToken('X', 0, 0, 'unix'); + addFormatToken('x', 0, 0, 'valueOf'); + + // PARSING + + addRegexToken('x', matchSigned); + addRegexToken('X', matchTimestamp); + addParseToken('X', function (input, array, config) { + config._d = new Date(parseFloat(input) * 1000); + }); + addParseToken('x', function (input, array, config) { + config._d = new Date(toInt(input)); + }); + + //! moment.js + + hooks.version = '2.28.0'; + + setHookCallback(createLocal); + + hooks.fn = proto; + hooks.min = min; + hooks.max = max; + hooks.now = now; + hooks.utc = createUTC; + hooks.unix = createUnix; + hooks.months = listMonths; + hooks.isDate = isDate; + hooks.locale = getSetGlobalLocale; + hooks.invalid = createInvalid; + hooks.duration = createDuration; + hooks.isMoment = isMoment; + hooks.weekdays = listWeekdays; + hooks.parseZone = createInZone; + hooks.localeData = getLocale; + hooks.isDuration = isDuration; + hooks.monthsShort = listMonthsShort; + hooks.weekdaysMin = listWeekdaysMin; + hooks.defineLocale = defineLocale; + hooks.updateLocale = updateLocale; + hooks.locales = listLocales; + hooks.weekdaysShort = listWeekdaysShort; + hooks.normalizeUnits = normalizeUnits; + hooks.relativeTimeRounding = getSetRelativeTimeRounding; + hooks.relativeTimeThreshold = getSetRelativeTimeThreshold; + hooks.calendarFormat = getCalendarFormat; + hooks.prototype = proto; + + // currently HTML5 input type only supports 24-hour formats + hooks.HTML5_FMT = { + DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // + DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // + DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // + DATE: 'YYYY-MM-DD', // + TIME: 'HH:mm', // + TIME_SECONDS: 'HH:mm:ss', // + TIME_MS: 'HH:mm:ss.SSS', // + WEEK: 'GGGG-[W]WW', // + MONTH: 'YYYY-MM', // + }; + + //! moment.js locale configuration + + hooks.defineLocale('af', { + months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'), + weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split( + '_' + ), + weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'), + weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'), + meridiemParse: /vm|nm/i, + isPM: function (input) { + return /^nm$/i.test(input); + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 12) { + return isLower ? 'vm' : 'VM'; + } else { + return isLower ? 'nm' : 'NM'; + } + }, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Vandag om] LT', + nextDay: '[Môre om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[Gister om] LT', + lastWeek: '[Laas] dddd [om] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'oor %s', + past: '%s gelede', + s: "'n paar sekondes", + ss: '%d sekondes', + m: "'n minuut", + mm: '%d minute', + h: "'n uur", + hh: '%d ure', + d: "'n dag", + dd: '%d dae', + M: "'n maand", + MM: '%d maande', + y: "'n jaar", + yy: '%d jaar', + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal: function (number) { + return ( + number + + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de') + ); // Thanks to Joris Röling : https://github.com/jjupiter + }, + week: { + dow: 1, // Maandag is die eerste dag van die week. + doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar. + }, + }); + + //! moment.js locale configuration + + var pluralForm = function (n) { + return n === 0 + ? 0 + : n === 1 + ? 1 + : n === 2 + ? 2 + : n % 100 >= 3 && n % 100 <= 10 + ? 3 + : n % 100 >= 11 + ? 4 + : 5; + }, + plurals = { + s: [ + 'أقل من ثانية', + 'ثانية واحدة', + ['ثانيتان', 'ثانيتين'], + '%d ثوان', + '%d ثانية', + '%d ثانية', + ], + m: [ + 'أقل من دقيقة', + 'دقيقة واحدة', + ['دقيقتان', 'دقيقتين'], + '%d دقائق', + '%d دقيقة', + '%d دقيقة', + ], + h: [ + 'أقل من ساعة', + 'ساعة واحدة', + ['ساعتان', 'ساعتين'], + '%d ساعات', + '%d ساعة', + '%d ساعة', + ], + d: [ + 'أقل من يوم', + 'يوم واحد', + ['يومان', 'يومين'], + '%d أيام', + '%d يومًا', + '%d يوم', + ], + M: [ + 'أقل من شهر', + 'شهر واحد', + ['شهران', 'شهرين'], + '%d أشهر', + '%d شهرا', + '%d شهر', + ], + y: [ + 'أقل من عام', + 'عام واحد', + ['عامان', 'عامين'], + '%d أعوام', + '%d عامًا', + '%d عام', + ], + }, + pluralize = function (u) { + return function (number, withoutSuffix, string, isFuture) { + var f = pluralForm(number), + str = plurals[u][pluralForm(number)]; + if (f === 2) { + str = str[withoutSuffix ? 0 : 1]; + } + return str.replace(/%d/i, number); + }; + }, + months$1 = [ + 'جانفي', + 'فيفري', + 'مارس', + 'أفريل', + 'ماي', + 'جوان', + 'جويلية', + 'أوت', + 'سبتمبر', + 'أكتوبر', + 'نوفمبر', + 'ديسمبر', + ]; + + hooks.defineLocale('ar-dz', { + months: months$1, + monthsShort: months$1, + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'D/\u200FM/\u200FYYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + meridiemParse: /ص|م/, + isPM: function (input) { + return 'م' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar: { + sameDay: '[اليوم عند الساعة] LT', + nextDay: '[غدًا عند الساعة] LT', + nextWeek: 'dddd [عند الساعة] LT', + lastDay: '[أمس عند الساعة] LT', + lastWeek: 'dddd [عند الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'بعد %s', + past: 'منذ %s', + s: pluralize('s'), + ss: pluralize('s'), + m: pluralize('m'), + mm: pluralize('m'), + h: pluralize('h'), + hh: pluralize('h'), + d: pluralize('d'), + dd: pluralize('d'), + M: pluralize('M'), + MM: pluralize('M'), + y: pluralize('y'), + yy: pluralize('y'), + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('ar-kw', { + months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split( + '_' + ), + monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split( + '_' + ), + weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + ss: '%d ثانية', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات', + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap = { + '1': '1', + '2': '2', + '3': '3', + '4': '4', + '5': '5', + '6': '6', + '7': '7', + '8': '8', + '9': '9', + '0': '0', + }, + pluralForm$1 = function (n) { + return n === 0 + ? 0 + : n === 1 + ? 1 + : n === 2 + ? 2 + : n % 100 >= 3 && n % 100 <= 10 + ? 3 + : n % 100 >= 11 + ? 4 + : 5; + }, + plurals$1 = { + s: [ + 'أقل من ثانية', + 'ثانية واحدة', + ['ثانيتان', 'ثانيتين'], + '%d ثوان', + '%d ثانية', + '%d ثانية', + ], + m: [ + 'أقل من دقيقة', + 'دقيقة واحدة', + ['دقيقتان', 'دقيقتين'], + '%d دقائق', + '%d دقيقة', + '%d دقيقة', + ], + h: [ + 'أقل من ساعة', + 'ساعة واحدة', + ['ساعتان', 'ساعتين'], + '%d ساعات', + '%d ساعة', + '%d ساعة', + ], + d: [ + 'أقل من يوم', + 'يوم واحد', + ['يومان', 'يومين'], + '%d أيام', + '%d يومًا', + '%d يوم', + ], + M: [ + 'أقل من شهر', + 'شهر واحد', + ['شهران', 'شهرين'], + '%d أشهر', + '%d شهرا', + '%d شهر', + ], + y: [ + 'أقل من عام', + 'عام واحد', + ['عامان', 'عامين'], + '%d أعوام', + '%d عامًا', + '%d عام', + ], + }, + pluralize$1 = function (u) { + return function (number, withoutSuffix, string, isFuture) { + var f = pluralForm$1(number), + str = plurals$1[u][pluralForm$1(number)]; + if (f === 2) { + str = str[withoutSuffix ? 0 : 1]; + } + return str.replace(/%d/i, number); + }; + }, + months$2 = [ + 'يناير', + 'فبراير', + 'مارس', + 'أبريل', + 'مايو', + 'يونيو', + 'يوليو', + 'أغسطس', + 'سبتمبر', + 'أكتوبر', + 'نوفمبر', + 'ديسمبر', + ]; + + hooks.defineLocale('ar-ly', { + months: months$2, + monthsShort: months$2, + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'D/\u200FM/\u200FYYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + meridiemParse: /ص|م/, + isPM: function (input) { + return 'م' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar: { + sameDay: '[اليوم عند الساعة] LT', + nextDay: '[غدًا عند الساعة] LT', + nextWeek: 'dddd [عند الساعة] LT', + lastDay: '[أمس عند الساعة] LT', + lastWeek: 'dddd [عند الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'بعد %s', + past: 'منذ %s', + s: pluralize$1('s'), + ss: pluralize$1('s'), + m: pluralize$1('m'), + mm: pluralize$1('m'), + h: pluralize$1('h'), + hh: pluralize$1('h'), + d: pluralize$1('d'), + dd: pluralize$1('d'), + M: pluralize$1('M'), + MM: pluralize$1('M'), + y: pluralize$1('y'), + yy: pluralize$1('y'), + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string + .replace(/\d/g, function (match) { + return symbolMap[match]; + }) + .replace(/,/g, '،'); + }, + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('ar-ma', { + months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split( + '_' + ), + monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split( + '_' + ), + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + ss: '%d ثانية', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات', + }, + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$1 = { + '1': '١', + '2': '٢', + '3': '٣', + '4': '٤', + '5': '٥', + '6': '٦', + '7': '٧', + '8': '٨', + '9': '٩', + '0': '٠', + }, + numberMap = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0', + }; + + hooks.defineLocale('ar-sa', { + months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split( + '_' + ), + monthsShort: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split( + '_' + ), + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + meridiemParse: /ص|م/, + isPM: function (input) { + return 'م' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar: { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + ss: '%d ثانية', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات', + }, + preparse: function (string) { + return string + .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { + return numberMap[match]; + }) + .replace(/،/g, ','); + }, + postformat: function (string) { + return string + .replace(/\d/g, function (match) { + return symbolMap$1[match]; + }) + .replace(/,/g, '،'); + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('ar-tn', { + months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split( + '_' + ), + monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split( + '_' + ), + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + ss: '%d ثانية', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$2 = { + '1': '١', + '2': '٢', + '3': '٣', + '4': '٤', + '5': '٥', + '6': '٦', + '7': '٧', + '8': '٨', + '9': '٩', + '0': '٠', + }, + numberMap$1 = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0', + }, + pluralForm$2 = function (n) { + return n === 0 + ? 0 + : n === 1 + ? 1 + : n === 2 + ? 2 + : n % 100 >= 3 && n % 100 <= 10 + ? 3 + : n % 100 >= 11 + ? 4 + : 5; + }, + plurals$2 = { + s: [ + 'أقل من ثانية', + 'ثانية واحدة', + ['ثانيتان', 'ثانيتين'], + '%d ثوان', + '%d ثانية', + '%d ثانية', + ], + m: [ + 'أقل من دقيقة', + 'دقيقة واحدة', + ['دقيقتان', 'دقيقتين'], + '%d دقائق', + '%d دقيقة', + '%d دقيقة', + ], + h: [ + 'أقل من ساعة', + 'ساعة واحدة', + ['ساعتان', 'ساعتين'], + '%d ساعات', + '%d ساعة', + '%d ساعة', + ], + d: [ + 'أقل من يوم', + 'يوم واحد', + ['يومان', 'يومين'], + '%d أيام', + '%d يومًا', + '%d يوم', + ], + M: [ + 'أقل من شهر', + 'شهر واحد', + ['شهران', 'شهرين'], + '%d أشهر', + '%d شهرا', + '%d شهر', + ], + y: [ + 'أقل من عام', + 'عام واحد', + ['عامان', 'عامين'], + '%d أعوام', + '%d عامًا', + '%d عام', + ], + }, + pluralize$2 = function (u) { + return function (number, withoutSuffix, string, isFuture) { + var f = pluralForm$2(number), + str = plurals$2[u][pluralForm$2(number)]; + if (f === 2) { + str = str[withoutSuffix ? 0 : 1]; + } + return str.replace(/%d/i, number); + }; + }, + months$3 = [ + 'يناير', + 'فبراير', + 'مارس', + 'أبريل', + 'مايو', + 'يونيو', + 'يوليو', + 'أغسطس', + 'سبتمبر', + 'أكتوبر', + 'نوفمبر', + 'ديسمبر', + ]; + + hooks.defineLocale('ar', { + months: months$3, + monthsShort: months$3, + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'D/\u200FM/\u200FYYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + meridiemParse: /ص|م/, + isPM: function (input) { + return 'م' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar: { + sameDay: '[اليوم عند الساعة] LT', + nextDay: '[غدًا عند الساعة] LT', + nextWeek: 'dddd [عند الساعة] LT', + lastDay: '[أمس عند الساعة] LT', + lastWeek: 'dddd [عند الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'بعد %s', + past: 'منذ %s', + s: pluralize$2('s'), + ss: pluralize$2('s'), + m: pluralize$2('m'), + mm: pluralize$2('m'), + h: pluralize$2('h'), + hh: pluralize$2('h'), + d: pluralize$2('d'), + dd: pluralize$2('d'), + M: pluralize$2('M'), + MM: pluralize$2('M'), + y: pluralize$2('y'), + yy: pluralize$2('y'), + }, + preparse: function (string) { + return string + .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { + return numberMap$1[match]; + }) + .replace(/،/g, ','); + }, + postformat: function (string) { + return string + .replace(/\d/g, function (match) { + return symbolMap$2[match]; + }) + .replace(/,/g, '،'); + }, + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var suffixes = { + 1: '-inci', + 5: '-inci', + 8: '-inci', + 70: '-inci', + 80: '-inci', + 2: '-nci', + 7: '-nci', + 20: '-nci', + 50: '-nci', + 3: '-üncü', + 4: '-üncü', + 100: '-üncü', + 6: '-ncı', + 9: '-uncu', + 10: '-uncu', + 30: '-uncu', + 60: '-ıncı', + 90: '-ıncı', + }; + + hooks.defineLocale('az', { + months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split( + '_' + ), + monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'), + weekdays: 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split( + '_' + ), + weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'), + weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[bugün saat] LT', + nextDay: '[sabah saat] LT', + nextWeek: '[gələn həftə] dddd [saat] LT', + lastDay: '[dünən] LT', + lastWeek: '[keçən həftə] dddd [saat] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s sonra', + past: '%s əvvəl', + s: 'bir neçə saniyə', + ss: '%d saniyə', + m: 'bir dəqiqə', + mm: '%d dəqiqə', + h: 'bir saat', + hh: '%d saat', + d: 'bir gün', + dd: '%d gün', + M: 'bir ay', + MM: '%d ay', + y: 'bir il', + yy: '%d il', + }, + meridiemParse: /gecə|səhər|gündüz|axşam/, + isPM: function (input) { + return /^(gündüz|axşam)$/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'gecə'; + } else if (hour < 12) { + return 'səhər'; + } else if (hour < 17) { + return 'gündüz'; + } else { + return 'axşam'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/, + ordinal: function (number) { + if (number === 0) { + // special case for zero + return number + '-ıncı'; + } + var a = number % 10, + b = (number % 100) - a, + c = number >= 100 ? 100 : null; + return number + (suffixes[a] || suffixes[b] || suffixes[c]); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function plural(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 + ? forms[0] + : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) + ? forms[1] + : forms[2]; + } + function relativeTimeWithPlural(number, withoutSuffix, key) { + var format = { + ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд', + mm: withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін', + hh: withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін', + dd: 'дзень_дні_дзён', + MM: 'месяц_месяцы_месяцаў', + yy: 'год_гады_гадоў', + }; + if (key === 'm') { + return withoutSuffix ? 'хвіліна' : 'хвіліну'; + } else if (key === 'h') { + return withoutSuffix ? 'гадзіна' : 'гадзіну'; + } else { + return number + ' ' + plural(format[key], +number); + } + } + + hooks.defineLocale('be', { + months: { + format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split( + '_' + ), + standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split( + '_' + ), + }, + monthsShort: 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split( + '_' + ), + weekdays: { + format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split( + '_' + ), + standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split( + '_' + ), + isFormat: /\[ ?[Ууў] ?(?:мінулую|наступную)? ?\] ?dddd/, + }, + weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'), + weekdaysMin: 'нд_пн_ат_ср_чц_пт_сб'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY г.', + LLL: 'D MMMM YYYY г., HH:mm', + LLLL: 'dddd, D MMMM YYYY г., HH:mm', + }, + calendar: { + sameDay: '[Сёння ў] LT', + nextDay: '[Заўтра ў] LT', + lastDay: '[Учора ў] LT', + nextWeek: function () { + return '[У] dddd [ў] LT'; + }, + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 5: + case 6: + return '[У мінулую] dddd [ў] LT'; + case 1: + case 2: + case 4: + return '[У мінулы] dddd [ў] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'праз %s', + past: '%s таму', + s: 'некалькі секунд', + m: relativeTimeWithPlural, + mm: relativeTimeWithPlural, + h: relativeTimeWithPlural, + hh: relativeTimeWithPlural, + d: 'дзень', + dd: relativeTimeWithPlural, + M: 'месяц', + MM: relativeTimeWithPlural, + y: 'год', + yy: relativeTimeWithPlural, + }, + meridiemParse: /ночы|раніцы|дня|вечара/, + isPM: function (input) { + return /^(дня|вечара)$/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'ночы'; + } else if (hour < 12) { + return 'раніцы'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечара'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(і|ы|га)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + case 'w': + case 'W': + return (number % 10 === 2 || number % 10 === 3) && + number % 100 !== 12 && + number % 100 !== 13 + ? number + '-і' + : number + '-ы'; + case 'D': + return number + '-га'; + default: + return number; + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('bg', { + months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split( + '_' + ), + monthsShort: 'яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'), + weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split( + '_' + ), + weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'), + weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'D.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY H:mm', + LLLL: 'dddd, D MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[Днес в] LT', + nextDay: '[Утре в] LT', + nextWeek: 'dddd [в] LT', + lastDay: '[Вчера в] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 6: + return '[Миналата] dddd [в] LT'; + case 1: + case 2: + case 4: + case 5: + return '[Миналия] dddd [в] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'след %s', + past: 'преди %s', + s: 'няколко секунди', + ss: '%d секунди', + m: 'минута', + mm: '%d минути', + h: 'час', + hh: '%d часа', + d: 'ден', + dd: '%d дена', + M: 'месец', + MM: '%d месеца', + y: 'година', + yy: '%d години', + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/, + ordinal: function (number) { + var lastDigit = number % 10, + last2Digits = number % 100; + if (number === 0) { + return number + '-ев'; + } else if (last2Digits === 0) { + return number + '-ен'; + } else if (last2Digits > 10 && last2Digits < 20) { + return number + '-ти'; + } else if (lastDigit === 1) { + return number + '-ви'; + } else if (lastDigit === 2) { + return number + '-ри'; + } else if (lastDigit === 7 || lastDigit === 8) { + return number + '-ми'; + } else { + return number + '-ти'; + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('bm', { + months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split( + '_' + ), + monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'), + weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'), + weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'), + weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'MMMM [tile] D [san] YYYY', + LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm', + LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm', + }, + calendar: { + sameDay: '[Bi lɛrɛ] LT', + nextDay: '[Sini lɛrɛ] LT', + nextWeek: 'dddd [don lɛrɛ] LT', + lastDay: '[Kunu lɛrɛ] LT', + lastWeek: 'dddd [tɛmɛnen lɛrɛ] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s kɔnɔ', + past: 'a bɛ %s bɔ', + s: 'sanga dama dama', + ss: 'sekondi %d', + m: 'miniti kelen', + mm: 'miniti %d', + h: 'lɛrɛ kelen', + hh: 'lɛrɛ %d', + d: 'tile kelen', + dd: 'tile %d', + M: 'kalo kelen', + MM: 'kalo %d', + y: 'san kelen', + yy: 'san %d', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$3 = { + '1': '১', + '2': '২', + '3': '৩', + '4': '৪', + '5': '৫', + '6': '৬', + '7': '৭', + '8': '৮', + '9': '৯', + '0': '০', + }, + numberMap$2 = { + '১': '1', + '২': '2', + '৩': '3', + '৪': '4', + '৫': '5', + '৬': '6', + '৭': '7', + '৮': '8', + '৯': '9', + '০': '0', + }; + + hooks.defineLocale('bn', { + months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split( + '_' + ), + monthsShort: 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split( + '_' + ), + weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split( + '_' + ), + weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'), + weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'), + longDateFormat: { + LT: 'A h:mm সময়', + LTS: 'A h:mm:ss সময়', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm সময়', + LLLL: 'dddd, D MMMM YYYY, A h:mm সময়', + }, + calendar: { + sameDay: '[আজ] LT', + nextDay: '[আগামীকাল] LT', + nextWeek: 'dddd, LT', + lastDay: '[গতকাল] LT', + lastWeek: '[গত] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s পরে', + past: '%s আগে', + s: 'কয়েক সেকেন্ড', + ss: '%d সেকেন্ড', + m: 'এক মিনিট', + mm: '%d মিনিট', + h: 'এক ঘন্টা', + hh: '%d ঘন্টা', + d: 'এক দিন', + dd: '%d দিন', + M: 'এক মাস', + MM: '%d মাস', + y: 'এক বছর', + yy: '%d বছর', + }, + preparse: function (string) { + return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) { + return numberMap$2[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$3[match]; + }); + }, + meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ( + (meridiem === 'রাত' && hour >= 4) || + (meridiem === 'দুপুর' && hour < 5) || + meridiem === 'বিকাল' + ) { + return hour + 12; + } else { + return hour; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'রাত'; + } else if (hour < 10) { + return 'সকাল'; + } else if (hour < 17) { + return 'দুপুর'; + } else if (hour < 20) { + return 'বিকাল'; + } else { + return 'রাত'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$4 = { + '1': '༡', + '2': '༢', + '3': '༣', + '4': '༤', + '5': '༥', + '6': '༦', + '7': '༧', + '8': '༨', + '9': '༩', + '0': '༠', + }, + numberMap$3 = { + '༡': '1', + '༢': '2', + '༣': '3', + '༤': '4', + '༥': '5', + '༦': '6', + '༧': '7', + '༨': '8', + '༩': '9', + '༠': '0', + }; + + hooks.defineLocale('bo', { + months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split( + '_' + ), + monthsShort: 'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split( + '_' + ), + monthsShortRegex: /^(ཟླ་\d{1,2})/, + monthsParseExact: true, + weekdays: 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split( + '_' + ), + weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split( + '_' + ), + weekdaysMin: 'ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན'.split('_'), + longDateFormat: { + LT: 'A h:mm', + LTS: 'A h:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm', + LLLL: 'dddd, D MMMM YYYY, A h:mm', + }, + calendar: { + sameDay: '[དི་རིང] LT', + nextDay: '[སང་ཉིན] LT', + nextWeek: '[བདུན་ཕྲག་རྗེས་མ], LT', + lastDay: '[ཁ་སང] LT', + lastWeek: '[བདུན་ཕྲག་མཐའ་མ] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s ལ་', + past: '%s སྔན་ལ', + s: 'ལམ་སང', + ss: '%d སྐར་ཆ།', + m: 'སྐར་མ་གཅིག', + mm: '%d སྐར་མ', + h: 'ཆུ་ཚོད་གཅིག', + hh: '%d ཆུ་ཚོད', + d: 'ཉིན་གཅིག', + dd: '%d ཉིན་', + M: 'ཟླ་བ་གཅིག', + MM: '%d ཟླ་བ', + y: 'ལོ་གཅིག', + yy: '%d ལོ', + }, + preparse: function (string) { + return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) { + return numberMap$3[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$4[match]; + }); + }, + meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ( + (meridiem === 'མཚན་མོ' && hour >= 4) || + (meridiem === 'ཉིན་གུང' && hour < 5) || + meridiem === 'དགོང་དག' + ) { + return hour + 12; + } else { + return hour; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'མཚན་མོ'; + } else if (hour < 10) { + return 'ཞོགས་ཀས'; + } else if (hour < 17) { + return 'ཉིན་གུང'; + } else if (hour < 20) { + return 'དགོང་དག'; + } else { + return 'མཚན་མོ'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function relativeTimeWithMutation(number, withoutSuffix, key) { + var format = { + mm: 'munutenn', + MM: 'miz', + dd: 'devezh', + }; + return number + ' ' + mutation(format[key], number); + } + function specialMutationForYears(number) { + switch (lastNumber(number)) { + case 1: + case 3: + case 4: + case 5: + case 9: + return number + ' bloaz'; + default: + return number + ' vloaz'; + } + } + function lastNumber(number) { + if (number > 9) { + return lastNumber(number % 10); + } + return number; + } + function mutation(text, number) { + if (number === 2) { + return softMutation(text); + } + return text; + } + function softMutation(text) { + var mutationTable = { + m: 'v', + b: 'v', + d: 'z', + }; + if (mutationTable[text.charAt(0)] === undefined) { + return text; + } + return mutationTable[text.charAt(0)] + text.substring(1); + } + + var monthsParse = [ + /^gen/i, + /^c[ʼ\']hwe/i, + /^meu/i, + /^ebr/i, + /^mae/i, + /^(mez|eve)/i, + /^gou/i, + /^eos/i, + /^gwe/i, + /^her/i, + /^du/i, + /^ker/i, + ], + monthsRegex$1 = /^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i, + monthsStrictRegex = /^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i, + monthsShortStrictRegex = /^(gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i, + fullWeekdaysParse = [ + /^sul/i, + /^lun/i, + /^meurzh/i, + /^merc[ʼ\']her/i, + /^yaou/i, + /^gwener/i, + /^sadorn/i, + ], + shortWeekdaysParse = [ + /^Sul/i, + /^Lun/i, + /^Meu/i, + /^Mer/i, + /^Yao/i, + /^Gwe/i, + /^Sad/i, + ], + minWeekdaysParse = [ + /^Su/i, + /^Lu/i, + /^Me([^r]|$)/i, + /^Mer/i, + /^Ya/i, + /^Gw/i, + /^Sa/i, + ]; + + hooks.defineLocale('br', { + months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split( + '_' + ), + monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'), + weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'), + weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'), + weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'), + weekdaysParse: minWeekdaysParse, + fullWeekdaysParse: fullWeekdaysParse, + shortWeekdaysParse: shortWeekdaysParse, + minWeekdaysParse: minWeekdaysParse, + + monthsRegex: monthsRegex$1, + monthsShortRegex: monthsRegex$1, + monthsStrictRegex: monthsStrictRegex, + monthsShortStrictRegex: monthsShortStrictRegex, + monthsParse: monthsParse, + longMonthsParse: monthsParse, + shortMonthsParse: monthsParse, + + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [a viz] MMMM YYYY', + LLL: 'D [a viz] MMMM YYYY HH:mm', + LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Hiziv da] LT', + nextDay: '[Warcʼhoazh da] LT', + nextWeek: 'dddd [da] LT', + lastDay: '[Decʼh da] LT', + lastWeek: 'dddd [paset da] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'a-benn %s', + past: '%s ʼzo', + s: 'un nebeud segondennoù', + ss: '%d eilenn', + m: 'ur vunutenn', + mm: relativeTimeWithMutation, + h: 'un eur', + hh: '%d eur', + d: 'un devezh', + dd: relativeTimeWithMutation, + M: 'ur miz', + MM: relativeTimeWithMutation, + y: 'ur bloaz', + yy: specialMutationForYears, + }, + dayOfMonthOrdinalParse: /\d{1,2}(añ|vet)/, + ordinal: function (number) { + var output = number === 1 ? 'añ' : 'vet'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn + isPM: function (token) { + return token === 'g.m.'; + }, + meridiem: function (hour, minute, isLower) { + return hour < 12 ? 'a.m.' : 'g.m.'; + }, + }); + + //! moment.js locale configuration + + function translate(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'ss': + if (number === 1) { + result += 'sekunda'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sekunde'; + } else { + result += 'sekundi'; + } + return result; + case 'm': + return withoutSuffix ? 'jedna minuta' : 'jedne minute'; + case 'mm': + if (number === 1) { + result += 'minuta'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'minute'; + } else { + result += 'minuta'; + } + return result; + case 'h': + return withoutSuffix ? 'jedan sat' : 'jednog sata'; + case 'hh': + if (number === 1) { + result += 'sat'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sata'; + } else { + result += 'sati'; + } + return result; + case 'dd': + if (number === 1) { + result += 'dan'; + } else { + result += 'dana'; + } + return result; + case 'MM': + if (number === 1) { + result += 'mjesec'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'mjeseca'; + } else { + result += 'mjeseci'; + } + return result; + case 'yy': + if (number === 1) { + result += 'godina'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'godine'; + } else { + result += 'godina'; + } + return result; + } + } + + hooks.defineLocale('bs', { + months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split( + '_' + ), + monthsShort: 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split( + '_' + ), + weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sutra u] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay: '[jučer u] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + return '[prošlu] dddd [u] LT'; + case 6: + return '[prošle] [subote] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prošli] dddd [u] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: 'prije %s', + s: 'par sekundi', + ss: translate, + m: translate, + mm: translate, + h: translate, + hh: translate, + d: 'dan', + dd: translate, + M: 'mjesec', + MM: translate, + y: 'godinu', + yy: translate, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('ca', { + months: { + standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split( + '_' + ), + format: "de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split( + '_' + ), + isFormat: /D[oD]?(\s)+MMMM/, + }, + monthsShort: 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split( + '_' + ), + weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'), + weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM [de] YYYY', + ll: 'D MMM YYYY', + LLL: 'D MMMM [de] YYYY [a les] H:mm', + lll: 'D MMM YYYY, H:mm', + LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm', + llll: 'ddd D MMM YYYY, H:mm', + }, + calendar: { + sameDay: function () { + return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT'; + }, + nextDay: function () { + return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT'; + }, + nextWeek: function () { + return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT'; + }, + lastDay: function () { + return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT'; + }, + lastWeek: function () { + return ( + '[el] dddd [passat a ' + + (this.hours() !== 1 ? 'les' : 'la') + + '] LT' + ); + }, + sameElse: 'L', + }, + relativeTime: { + future: "d'aquí %s", + past: 'fa %s', + s: 'uns segons', + ss: '%d segons', + m: 'un minut', + mm: '%d minuts', + h: 'una hora', + hh: '%d hores', + d: 'un dia', + dd: '%d dies', + M: 'un mes', + MM: '%d mesos', + y: 'un any', + yy: '%d anys', + }, + dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/, + ordinal: function (number, period) { + var output = + number === 1 + ? 'r' + : number === 2 + ? 'n' + : number === 3 + ? 'r' + : number === 4 + ? 't' + : 'è'; + if (period === 'w' || period === 'W') { + output = 'a'; + } + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var months$4 = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split( + '_' + ), + monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'), + monthsParse$1 = [ + /^led/i, + /^úno/i, + /^bře/i, + /^dub/i, + /^kvě/i, + /^(čvn|červen$|června)/i, + /^(čvc|červenec|července)/i, + /^srp/i, + /^zář/i, + /^říj/i, + /^lis/i, + /^pro/i, + ], + // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched. + // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'. + monthsRegex$2 = /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i; + + function plural$1(n) { + return n > 1 && n < 5 && ~~(n / 10) !== 1; + } + function translate$1(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': // a few seconds / in a few seconds / a few seconds ago + return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami'; + case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'sekundy' : 'sekund'); + } else { + return result + 'sekundami'; + } + case 'm': // a minute / in a minute / a minute ago + return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou'; + case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'minuty' : 'minut'); + } else { + return result + 'minutami'; + } + case 'h': // an hour / in an hour / an hour ago + return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou'; + case 'hh': // 9 hours / in 9 hours / 9 hours ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'hodiny' : 'hodin'); + } else { + return result + 'hodinami'; + } + case 'd': // a day / in a day / a day ago + return withoutSuffix || isFuture ? 'den' : 'dnem'; + case 'dd': // 9 days / in 9 days / 9 days ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'dny' : 'dní'); + } else { + return result + 'dny'; + } + case 'M': // a month / in a month / a month ago + return withoutSuffix || isFuture ? 'měsíc' : 'měsícem'; + case 'MM': // 9 months / in 9 months / 9 months ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'měsíce' : 'měsíců'); + } else { + return result + 'měsíci'; + } + case 'y': // a year / in a year / a year ago + return withoutSuffix || isFuture ? 'rok' : 'rokem'; + case 'yy': // 9 years / in 9 years / 9 years ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'roky' : 'let'); + } else { + return result + 'lety'; + } + } + } + + hooks.defineLocale('cs', { + months: months$4, + monthsShort: monthsShort, + monthsRegex: monthsRegex$2, + monthsShortRegex: monthsRegex$2, + // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched. + // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'. + monthsStrictRegex: /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i, + monthsShortStrictRegex: /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i, + monthsParse: monthsParse$1, + longMonthsParse: monthsParse$1, + shortMonthsParse: monthsParse$1, + weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'), + weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'), + weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd D. MMMM YYYY H:mm', + l: 'D. M. YYYY', + }, + calendar: { + sameDay: '[dnes v] LT', + nextDay: '[zítra v] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[v neděli v] LT'; + case 1: + case 2: + return '[v] dddd [v] LT'; + case 3: + return '[ve středu v] LT'; + case 4: + return '[ve čtvrtek v] LT'; + case 5: + return '[v pátek v] LT'; + case 6: + return '[v sobotu v] LT'; + } + }, + lastDay: '[včera v] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[minulou neděli v] LT'; + case 1: + case 2: + return '[minulé] dddd [v] LT'; + case 3: + return '[minulou středu v] LT'; + case 4: + case 5: + return '[minulý] dddd [v] LT'; + case 6: + return '[minulou sobotu v] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: 'před %s', + s: translate$1, + ss: translate$1, + m: translate$1, + mm: translate$1, + h: translate$1, + hh: translate$1, + d: translate$1, + dd: translate$1, + M: translate$1, + MM: translate$1, + y: translate$1, + yy: translate$1, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('cv', { + months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split( + '_' + ), + monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'), + weekdays: 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split( + '_' + ), + weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'), + weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD-MM-YYYY', + LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]', + LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm', + LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm', + }, + calendar: { + sameDay: '[Паян] LT [сехетре]', + nextDay: '[Ыран] LT [сехетре]', + lastDay: '[Ӗнер] LT [сехетре]', + nextWeek: '[Ҫитес] dddd LT [сехетре]', + lastWeek: '[Иртнӗ] dddd LT [сехетре]', + sameElse: 'L', + }, + relativeTime: { + future: function (output) { + var affix = /сехет$/i.exec(output) + ? 'рен' + : /ҫул$/i.exec(output) + ? 'тан' + : 'ран'; + return output + affix; + }, + past: '%s каялла', + s: 'пӗр-ик ҫеккунт', + ss: '%d ҫеккунт', + m: 'пӗр минут', + mm: '%d минут', + h: 'пӗр сехет', + hh: '%d сехет', + d: 'пӗр кун', + dd: '%d кун', + M: 'пӗр уйӑх', + MM: '%d уйӑх', + y: 'пӗр ҫул', + yy: '%d ҫул', + }, + dayOfMonthOrdinalParse: /\d{1,2}-мӗш/, + ordinal: '%d-мӗш', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('cy', { + months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split( + '_' + ), + monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split( + '_' + ), + weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split( + '_' + ), + weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'), + weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'), + weekdaysParseExact: true, + // time formats are the same as en-gb + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Heddiw am] LT', + nextDay: '[Yfory am] LT', + nextWeek: 'dddd [am] LT', + lastDay: '[Ddoe am] LT', + lastWeek: 'dddd [diwethaf am] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'mewn %s', + past: '%s yn ôl', + s: 'ychydig eiliadau', + ss: '%d eiliad', + m: 'munud', + mm: '%d munud', + h: 'awr', + hh: '%d awr', + d: 'diwrnod', + dd: '%d diwrnod', + M: 'mis', + MM: '%d mis', + y: 'blwyddyn', + yy: '%d flynedd', + }, + dayOfMonthOrdinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/, + // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh + ordinal: function (number) { + var b = number, + output = '', + lookup = [ + '', + 'af', + 'il', + 'ydd', + 'ydd', + 'ed', + 'ed', + 'ed', + 'fed', + 'fed', + 'fed', // 1af to 10fed + 'eg', + 'fed', + 'eg', + 'eg', + 'fed', + 'eg', + 'eg', + 'fed', + 'eg', + 'fed', // 11eg to 20fed + ]; + if (b > 20) { + if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) { + output = 'fed'; // not 30ain, 70ain or 90ain + } else { + output = 'ain'; + } + } else if (b > 0) { + output = lookup[b]; + } + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('da', { + months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split( + '_' + ), + monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), + weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), + weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'), + weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY HH:mm', + LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm', + }, + calendar: { + sameDay: '[i dag kl.] LT', + nextDay: '[i morgen kl.] LT', + nextWeek: 'på dddd [kl.] LT', + lastDay: '[i går kl.] LT', + lastWeek: '[i] dddd[s kl.] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'om %s', + past: '%s siden', + s: 'få sekunder', + ss: '%d sekunder', + m: 'et minut', + mm: '%d minutter', + h: 'en time', + hh: '%d timer', + d: 'en dag', + dd: '%d dage', + M: 'en måned', + MM: '%d måneder', + y: 'et år', + yy: '%d år', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + m: ['eine Minute', 'einer Minute'], + h: ['eine Stunde', 'einer Stunde'], + d: ['ein Tag', 'einem Tag'], + dd: [number + ' Tage', number + ' Tagen'], + w: ['eine Woche', 'einer Woche'], + M: ['ein Monat', 'einem Monat'], + MM: [number + ' Monate', number + ' Monaten'], + y: ['ein Jahr', 'einem Jahr'], + yy: [number + ' Jahre', number + ' Jahren'], + }; + return withoutSuffix ? format[key][0] : format[key][1]; + } + + hooks.defineLocale('de-at', { + months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split( + '_' + ), + monthsShort: 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split( + '_' + ), + weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), + weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY HH:mm', + LLLL: 'dddd, D. MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]', + }, + relativeTime: { + future: 'in %s', + past: 'vor %s', + s: 'ein paar Sekunden', + ss: '%d Sekunden', + m: processRelativeTime, + mm: '%d Minuten', + h: processRelativeTime, + hh: '%d Stunden', + d: processRelativeTime, + dd: processRelativeTime, + w: processRelativeTime, + ww: '%d Wochen', + M: processRelativeTime, + MM: processRelativeTime, + y: processRelativeTime, + yy: processRelativeTime, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function processRelativeTime$1(number, withoutSuffix, key, isFuture) { + var format = { + m: ['eine Minute', 'einer Minute'], + h: ['eine Stunde', 'einer Stunde'], + d: ['ein Tag', 'einem Tag'], + dd: [number + ' Tage', number + ' Tagen'], + w: ['eine Woche', 'einer Woche'], + M: ['ein Monat', 'einem Monat'], + MM: [number + ' Monate', number + ' Monaten'], + y: ['ein Jahr', 'einem Jahr'], + yy: [number + ' Jahre', number + ' Jahren'], + }; + return withoutSuffix ? format[key][0] : format[key][1]; + } + + hooks.defineLocale('de-ch', { + months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split( + '_' + ), + monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split( + '_' + ), + weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY HH:mm', + LLLL: 'dddd, D. MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]', + }, + relativeTime: { + future: 'in %s', + past: 'vor %s', + s: 'ein paar Sekunden', + ss: '%d Sekunden', + m: processRelativeTime$1, + mm: '%d Minuten', + h: processRelativeTime$1, + hh: '%d Stunden', + d: processRelativeTime$1, + dd: processRelativeTime$1, + w: processRelativeTime$1, + ww: '%d Wochen', + M: processRelativeTime$1, + MM: processRelativeTime$1, + y: processRelativeTime$1, + yy: processRelativeTime$1, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function processRelativeTime$2(number, withoutSuffix, key, isFuture) { + var format = { + m: ['eine Minute', 'einer Minute'], + h: ['eine Stunde', 'einer Stunde'], + d: ['ein Tag', 'einem Tag'], + dd: [number + ' Tage', number + ' Tagen'], + w: ['eine Woche', 'einer Woche'], + M: ['ein Monat', 'einem Monat'], + MM: [number + ' Monate', number + ' Monaten'], + y: ['ein Jahr', 'einem Jahr'], + yy: [number + ' Jahre', number + ' Jahren'], + }; + return withoutSuffix ? format[key][0] : format[key][1]; + } + + hooks.defineLocale('de', { + months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split( + '_' + ), + monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split( + '_' + ), + weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), + weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY HH:mm', + LLLL: 'dddd, D. MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]', + }, + relativeTime: { + future: 'in %s', + past: 'vor %s', + s: 'ein paar Sekunden', + ss: '%d Sekunden', + m: processRelativeTime$2, + mm: '%d Minuten', + h: processRelativeTime$2, + hh: '%d Stunden', + d: processRelativeTime$2, + dd: processRelativeTime$2, + w: processRelativeTime$2, + ww: '%d Wochen', + M: processRelativeTime$2, + MM: processRelativeTime$2, + y: processRelativeTime$2, + yy: processRelativeTime$2, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var months$5 = [ + 'ޖެނުއަރީ', + 'ފެބްރުއަރީ', + 'މާރިޗު', + 'އޭޕްރީލު', + 'މޭ', + 'ޖޫން', + 'ޖުލައި', + 'އޯގަސްޓު', + 'ސެޕްޓެމްބަރު', + 'އޮކްޓޯބަރު', + 'ނޮވެމްބަރު', + 'ޑިސެމްބަރު', + ], + weekdays = [ + 'އާދިއްތަ', + 'ހޯމަ', + 'އަންގާރަ', + 'ބުދަ', + 'ބުރާސްފަތި', + 'ހުކުރު', + 'ހޮނިހިރު', + ]; + + hooks.defineLocale('dv', { + months: months$5, + monthsShort: months$5, + weekdays: weekdays, + weekdaysShort: weekdays, + weekdaysMin: 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'D/M/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + meridiemParse: /މކ|މފ/, + isPM: function (input) { + return 'މފ' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'މކ'; + } else { + return 'މފ'; + } + }, + calendar: { + sameDay: '[މިއަދު] LT', + nextDay: '[މާދަމާ] LT', + nextWeek: 'dddd LT', + lastDay: '[އިއްޔެ] LT', + lastWeek: '[ފާއިތުވި] dddd LT', + sameElse: 'L', + }, + relativeTime: { + future: 'ތެރޭގައި %s', + past: 'ކުރިން %s', + s: 'ސިކުންތުކޮޅެއް', + ss: 'd% ސިކުންތު', + m: 'މިނިޓެއް', + mm: 'މިނިޓު %d', + h: 'ގަޑިއިރެއް', + hh: 'ގަޑިއިރު %d', + d: 'ދުވަހެއް', + dd: 'ދުވަސް %d', + M: 'މަހެއް', + MM: 'މަސް %d', + y: 'އަހަރެއް', + yy: 'އަހަރު %d', + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week: { + dow: 7, // Sunday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function isFunction$1(input) { + return ( + (typeof Function !== 'undefined' && input instanceof Function) || + Object.prototype.toString.call(input) === '[object Function]' + ); + } + + hooks.defineLocale('el', { + monthsNominativeEl: 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split( + '_' + ), + monthsGenitiveEl: 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split( + '_' + ), + months: function (momentToFormat, format) { + if (!momentToFormat) { + return this._monthsNominativeEl; + } else if ( + typeof format === 'string' && + /D/.test(format.substring(0, format.indexOf('MMMM'))) + ) { + // if there is a day number before 'MMMM' + return this._monthsGenitiveEl[momentToFormat.month()]; + } else { + return this._monthsNominativeEl[momentToFormat.month()]; + } + }, + monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'), + weekdays: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split( + '_' + ), + weekdaysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'), + weekdaysMin: 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'), + meridiem: function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'μμ' : 'ΜΜ'; + } else { + return isLower ? 'πμ' : 'ΠΜ'; + } + }, + isPM: function (input) { + return (input + '').toLowerCase()[0] === 'μ'; + }, + meridiemParse: /[ΠΜ]\.?Μ?\.?/i, + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A', + }, + calendarEl: { + sameDay: '[Σήμερα {}] LT', + nextDay: '[Αύριο {}] LT', + nextWeek: 'dddd [{}] LT', + lastDay: '[Χθες {}] LT', + lastWeek: function () { + switch (this.day()) { + case 6: + return '[το προηγούμενο] dddd [{}] LT'; + default: + return '[την προηγούμενη] dddd [{}] LT'; + } + }, + sameElse: 'L', + }, + calendar: function (key, mom) { + var output = this._calendarEl[key], + hours = mom && mom.hours(); + if (isFunction$1(output)) { + output = output.apply(mom); + } + return output.replace('{}', hours % 12 === 1 ? 'στη' : 'στις'); + }, + relativeTime: { + future: 'σε %s', + past: '%s πριν', + s: 'λίγα δευτερόλεπτα', + ss: '%d δευτερόλεπτα', + m: 'ένα λεπτό', + mm: '%d λεπτά', + h: 'μία ώρα', + hh: '%d ώρες', + d: 'μία μέρα', + dd: '%d μέρες', + M: 'ένας μήνας', + MM: '%d μήνες', + y: 'ένας χρόνος', + yy: '%d χρόνια', + }, + dayOfMonthOrdinalParse: /\d{1,2}η/, + ordinal: '%dη', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4st is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('en-au', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('en-ca', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'YYYY-MM-DD', + LL: 'MMMM D, YYYY', + LLL: 'MMMM D, YYYY h:mm A', + LLLL: 'dddd, MMMM D, YYYY h:mm A', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('en-gb', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('en-ie', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('en-il', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('en-in', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 1st is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('en-nz', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('en-sg', { + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('eo', { + months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split( + '_' + ), + monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec'.split('_'), + weekdays: 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'), + weekdaysShort: 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'), + weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: '[la] D[-an de] MMMM, YYYY', + LLL: '[la] D[-an de] MMMM, YYYY HH:mm', + LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm', + llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm', + }, + meridiemParse: /[ap]\.t\.m/i, + isPM: function (input) { + return input.charAt(0).toLowerCase() === 'p'; + }, + meridiem: function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'p.t.m.' : 'P.T.M.'; + } else { + return isLower ? 'a.t.m.' : 'A.T.M.'; + } + }, + calendar: { + sameDay: '[Hodiaŭ je] LT', + nextDay: '[Morgaŭ je] LT', + nextWeek: 'dddd[n je] LT', + lastDay: '[Hieraŭ je] LT', + lastWeek: '[pasintan] dddd[n je] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'post %s', + past: 'antaŭ %s', + s: 'kelkaj sekundoj', + ss: '%d sekundoj', + m: 'unu minuto', + mm: '%d minutoj', + h: 'unu horo', + hh: '%d horoj', + d: 'unu tago', //ne 'diurno', ĉar estas uzita por proksimumo + dd: '%d tagoj', + M: 'unu monato', + MM: '%d monatoj', + y: 'unu jaro', + yy: '%d jaroj', + }, + dayOfMonthOrdinalParse: /\d{1,2}a/, + ordinal: '%da', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split( + '_' + ), + monthsShort$1 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'), + monthsParse$2 = [ + /^ene/i, + /^feb/i, + /^mar/i, + /^abr/i, + /^may/i, + /^jun/i, + /^jul/i, + /^ago/i, + /^sep/i, + /^oct/i, + /^nov/i, + /^dic/i, + ], + monthsRegex$3 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; + + hooks.defineLocale('es-do', { + months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split( + '_' + ), + monthsShort: function (m, format) { + if (!m) { + return monthsShortDot; + } else if (/-MMM-/.test(format)) { + return monthsShort$1[m.month()]; + } else { + return monthsShortDot[m.month()]; + } + }, + monthsRegex: monthsRegex$3, + monthsShortRegex: monthsRegex$3, + monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, + monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, + monthsParse: monthsParse$2, + longMonthsParse: monthsParse$2, + shortMonthsParse: monthsParse$2, + weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY h:mm A', + LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A', + }, + calendar: { + sameDay: function () { + return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + nextDay: function () { + return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + nextWeek: function () { + return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + lastDay: function () { + return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + lastWeek: function () { + return ( + '[el] dddd [pasado a la' + + (this.hours() !== 1 ? 's' : '') + + '] LT' + ); + }, + sameElse: 'L', + }, + relativeTime: { + future: 'en %s', + past: 'hace %s', + s: 'unos segundos', + ss: '%d segundos', + m: 'un minuto', + mm: '%d minutos', + h: 'una hora', + hh: '%d horas', + d: 'un día', + dd: '%d días', + M: 'un mes', + MM: '%d meses', + y: 'un año', + yy: '%d años', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsShortDot$1 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split( + '_' + ), + monthsShort$2 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'), + monthsParse$3 = [ + /^ene/i, + /^feb/i, + /^mar/i, + /^abr/i, + /^may/i, + /^jun/i, + /^jul/i, + /^ago/i, + /^sep/i, + /^oct/i, + /^nov/i, + /^dic/i, + ], + monthsRegex$4 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; + + hooks.defineLocale('es-us', { + months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split( + '_' + ), + monthsShort: function (m, format) { + if (!m) { + return monthsShortDot$1; + } else if (/-MMM-/.test(format)) { + return monthsShort$2[m.month()]; + } else { + return monthsShortDot$1[m.month()]; + } + }, + monthsRegex: monthsRegex$4, + monthsShortRegex: monthsRegex$4, + monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, + monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, + monthsParse: monthsParse$3, + longMonthsParse: monthsParse$3, + shortMonthsParse: monthsParse$3, + weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'MM/DD/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY h:mm A', + LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A', + }, + calendar: { + sameDay: function () { + return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + nextDay: function () { + return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + nextWeek: function () { + return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + lastDay: function () { + return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + lastWeek: function () { + return ( + '[el] dddd [pasado a la' + + (this.hours() !== 1 ? 's' : '') + + '] LT' + ); + }, + sameElse: 'L', + }, + relativeTime: { + future: 'en %s', + past: 'hace %s', + s: 'unos segundos', + ss: '%d segundos', + m: 'un minuto', + mm: '%d minutos', + h: 'una hora', + hh: '%d horas', + d: 'un día', + dd: '%d días', + M: 'un mes', + MM: '%d meses', + y: 'un año', + yy: '%d años', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsShortDot$2 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split( + '_' + ), + monthsShort$3 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'), + monthsParse$4 = [ + /^ene/i, + /^feb/i, + /^mar/i, + /^abr/i, + /^may/i, + /^jun/i, + /^jul/i, + /^ago/i, + /^sep/i, + /^oct/i, + /^nov/i, + /^dic/i, + ], + monthsRegex$5 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; + + hooks.defineLocale('es', { + months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split( + '_' + ), + monthsShort: function (m, format) { + if (!m) { + return monthsShortDot$2; + } else if (/-MMM-/.test(format)) { + return monthsShort$3[m.month()]; + } else { + return monthsShortDot$2[m.month()]; + } + }, + monthsRegex: monthsRegex$5, + monthsShortRegex: monthsRegex$5, + monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, + monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, + monthsParse: monthsParse$4, + longMonthsParse: monthsParse$4, + shortMonthsParse: monthsParse$4, + weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY H:mm', + LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm', + }, + calendar: { + sameDay: function () { + return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + nextDay: function () { + return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + nextWeek: function () { + return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + lastDay: function () { + return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + lastWeek: function () { + return ( + '[el] dddd [pasado a la' + + (this.hours() !== 1 ? 's' : '') + + '] LT' + ); + }, + sameElse: 'L', + }, + relativeTime: { + future: 'en %s', + past: 'hace %s', + s: 'unos segundos', + ss: '%d segundos', + m: 'un minuto', + mm: '%d minutos', + h: 'una hora', + hh: '%d horas', + d: 'un día', + dd: '%d días', + M: 'un mes', + MM: '%d meses', + y: 'un año', + yy: '%d años', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + invalidDate: 'Fecha inválida', + }); + + //! moment.js locale configuration + + function processRelativeTime$3(number, withoutSuffix, key, isFuture) { + var format = { + s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'], + ss: [number + 'sekundi', number + 'sekundit'], + m: ['ühe minuti', 'üks minut'], + mm: [number + ' minuti', number + ' minutit'], + h: ['ühe tunni', 'tund aega', 'üks tund'], + hh: [number + ' tunni', number + ' tundi'], + d: ['ühe päeva', 'üks päev'], + M: ['kuu aja', 'kuu aega', 'üks kuu'], + MM: [number + ' kuu', number + ' kuud'], + y: ['ühe aasta', 'aasta', 'üks aasta'], + yy: [number + ' aasta', number + ' aastat'], + }; + if (withoutSuffix) { + return format[key][2] ? format[key][2] : format[key][1]; + } + return isFuture ? format[key][0] : format[key][1]; + } + + hooks.defineLocale('et', { + months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split( + '_' + ), + monthsShort: 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split( + '_' + ), + weekdays: 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split( + '_' + ), + weekdaysShort: 'P_E_T_K_N_R_L'.split('_'), + weekdaysMin: 'P_E_T_K_N_R_L'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[Täna,] LT', + nextDay: '[Homme,] LT', + nextWeek: '[Järgmine] dddd LT', + lastDay: '[Eile,] LT', + lastWeek: '[Eelmine] dddd LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s pärast', + past: '%s tagasi', + s: processRelativeTime$3, + ss: processRelativeTime$3, + m: processRelativeTime$3, + mm: processRelativeTime$3, + h: processRelativeTime$3, + hh: processRelativeTime$3, + d: processRelativeTime$3, + dd: '%d päeva', + M: processRelativeTime$3, + MM: processRelativeTime$3, + y: processRelativeTime$3, + yy: processRelativeTime$3, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('eu', { + months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split( + '_' + ), + monthsShort: 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split( + '_' + ), + weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'), + weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'YYYY[ko] MMMM[ren] D[a]', + LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm', + LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm', + l: 'YYYY-M-D', + ll: 'YYYY[ko] MMM D[a]', + lll: 'YYYY[ko] MMM D[a] HH:mm', + llll: 'ddd, YYYY[ko] MMM D[a] HH:mm', + }, + calendar: { + sameDay: '[gaur] LT[etan]', + nextDay: '[bihar] LT[etan]', + nextWeek: 'dddd LT[etan]', + lastDay: '[atzo] LT[etan]', + lastWeek: '[aurreko] dddd LT[etan]', + sameElse: 'L', + }, + relativeTime: { + future: '%s barru', + past: 'duela %s', + s: 'segundo batzuk', + ss: '%d segundo', + m: 'minutu bat', + mm: '%d minutu', + h: 'ordu bat', + hh: '%d ordu', + d: 'egun bat', + dd: '%d egun', + M: 'hilabete bat', + MM: '%d hilabete', + y: 'urte bat', + yy: '%d urte', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$5 = { + '1': '۱', + '2': '۲', + '3': '۳', + '4': '۴', + '5': '۵', + '6': '۶', + '7': '۷', + '8': '۸', + '9': '۹', + '0': '۰', + }, + numberMap$4 = { + '۱': '1', + '۲': '2', + '۳': '3', + '۴': '4', + '۵': '5', + '۶': '6', + '۷': '7', + '۸': '8', + '۹': '9', + '۰': '0', + }; + + hooks.defineLocale('fa', { + months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split( + '_' + ), + monthsShort: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split( + '_' + ), + weekdays: 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split( + '_' + ), + weekdaysShort: 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split( + '_' + ), + weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + meridiemParse: /قبل از ظهر|بعد از ظهر/, + isPM: function (input) { + return /بعد از ظهر/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'قبل از ظهر'; + } else { + return 'بعد از ظهر'; + } + }, + calendar: { + sameDay: '[امروز ساعت] LT', + nextDay: '[فردا ساعت] LT', + nextWeek: 'dddd [ساعت] LT', + lastDay: '[دیروز ساعت] LT', + lastWeek: 'dddd [پیش] [ساعت] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'در %s', + past: '%s پیش', + s: 'چند ثانیه', + ss: '%d ثانیه', + m: 'یک دقیقه', + mm: '%d دقیقه', + h: 'یک ساعت', + hh: '%d ساعت', + d: 'یک روز', + dd: '%d روز', + M: 'یک ماه', + MM: '%d ماه', + y: 'یک سال', + yy: '%d سال', + }, + preparse: function (string) { + return string + .replace(/[۰-۹]/g, function (match) { + return numberMap$4[match]; + }) + .replace(/،/g, ','); + }, + postformat: function (string) { + return string + .replace(/\d/g, function (match) { + return symbolMap$5[match]; + }) + .replace(/,/g, '،'); + }, + dayOfMonthOrdinalParse: /\d{1,2}م/, + ordinal: '%dم', + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split( + ' ' + ), + numbersFuture = [ + 'nolla', + 'yhden', + 'kahden', + 'kolmen', + 'neljän', + 'viiden', + 'kuuden', + numbersPast[7], + numbersPast[8], + numbersPast[9], + ]; + function translate$2(number, withoutSuffix, key, isFuture) { + var result = ''; + switch (key) { + case 's': + return isFuture ? 'muutaman sekunnin' : 'muutama sekunti'; + case 'ss': + result = isFuture ? 'sekunnin' : 'sekuntia'; + break; + case 'm': + return isFuture ? 'minuutin' : 'minuutti'; + case 'mm': + result = isFuture ? 'minuutin' : 'minuuttia'; + break; + case 'h': + return isFuture ? 'tunnin' : 'tunti'; + case 'hh': + result = isFuture ? 'tunnin' : 'tuntia'; + break; + case 'd': + return isFuture ? 'päivän' : 'päivä'; + case 'dd': + result = isFuture ? 'päivän' : 'päivää'; + break; + case 'M': + return isFuture ? 'kuukauden' : 'kuukausi'; + case 'MM': + result = isFuture ? 'kuukauden' : 'kuukautta'; + break; + case 'y': + return isFuture ? 'vuoden' : 'vuosi'; + case 'yy': + result = isFuture ? 'vuoden' : 'vuotta'; + break; + } + result = verbalNumber(number, isFuture) + ' ' + result; + return result; + } + function verbalNumber(number, isFuture) { + return number < 10 + ? isFuture + ? numbersFuture[number] + : numbersPast[number] + : number; + } + + hooks.defineLocale('fi', { + months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split( + '_' + ), + monthsShort: 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split( + '_' + ), + weekdays: 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split( + '_' + ), + weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'), + weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'), + longDateFormat: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD.MM.YYYY', + LL: 'Do MMMM[ta] YYYY', + LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm', + LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm', + l: 'D.M.YYYY', + ll: 'Do MMM YYYY', + lll: 'Do MMM YYYY, [klo] HH.mm', + llll: 'ddd, Do MMM YYYY, [klo] HH.mm', + }, + calendar: { + sameDay: '[tänään] [klo] LT', + nextDay: '[huomenna] [klo] LT', + nextWeek: 'dddd [klo] LT', + lastDay: '[eilen] [klo] LT', + lastWeek: '[viime] dddd[na] [klo] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s päästä', + past: '%s sitten', + s: translate$2, + ss: translate$2, + m: translate$2, + mm: translate$2, + h: translate$2, + hh: translate$2, + d: translate$2, + dd: translate$2, + M: translate$2, + MM: translate$2, + y: translate$2, + yy: translate$2, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('fil', { + months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split( + '_' + ), + monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'), + weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split( + '_' + ), + weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'), + weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'MM/D/YYYY', + LL: 'MMMM D, YYYY', + LLL: 'MMMM D, YYYY HH:mm', + LLLL: 'dddd, MMMM DD, YYYY HH:mm', + }, + calendar: { + sameDay: 'LT [ngayong araw]', + nextDay: '[Bukas ng] LT', + nextWeek: 'LT [sa susunod na] dddd', + lastDay: 'LT [kahapon]', + lastWeek: 'LT [noong nakaraang] dddd', + sameElse: 'L', + }, + relativeTime: { + future: 'sa loob ng %s', + past: '%s ang nakalipas', + s: 'ilang segundo', + ss: '%d segundo', + m: 'isang minuto', + mm: '%d minuto', + h: 'isang oras', + hh: '%d oras', + d: 'isang araw', + dd: '%d araw', + M: 'isang buwan', + MM: '%d buwan', + y: 'isang taon', + yy: '%d taon', + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal: function (number) { + return number; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('fo', { + months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split( + '_' + ), + monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'), + weekdays: 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split( + '_' + ), + weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'), + weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D. MMMM, YYYY HH:mm', + }, + calendar: { + sameDay: '[Í dag kl.] LT', + nextDay: '[Í morgin kl.] LT', + nextWeek: 'dddd [kl.] LT', + lastDay: '[Í gjár kl.] LT', + lastWeek: '[síðstu] dddd [kl] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'um %s', + past: '%s síðani', + s: 'fá sekund', + ss: '%d sekundir', + m: 'ein minuttur', + mm: '%d minuttir', + h: 'ein tími', + hh: '%d tímar', + d: 'ein dagur', + dd: '%d dagar', + M: 'ein mánaður', + MM: '%d mánaðir', + y: 'eitt ár', + yy: '%d ár', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('fr-ca', { + months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split( + '_' + ), + monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Aujourd’hui à] LT', + nextDay: '[Demain à] LT', + nextWeek: 'dddd [à] LT', + lastDay: '[Hier à] LT', + lastWeek: 'dddd [dernier à] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dans %s', + past: 'il y a %s', + s: 'quelques secondes', + ss: '%d secondes', + m: 'une minute', + mm: '%d minutes', + h: 'une heure', + hh: '%d heures', + d: 'un jour', + dd: '%d jours', + M: 'un mois', + MM: '%d mois', + y: 'un an', + yy: '%d ans', + }, + dayOfMonthOrdinalParse: /\d{1,2}(er|e)/, + ordinal: function (number, period) { + switch (period) { + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'D': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('fr-ch', { + months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split( + '_' + ), + monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Aujourd’hui à] LT', + nextDay: '[Demain à] LT', + nextWeek: 'dddd [à] LT', + lastDay: '[Hier à] LT', + lastWeek: 'dddd [dernier à] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dans %s', + past: 'il y a %s', + s: 'quelques secondes', + ss: '%d secondes', + m: 'une minute', + mm: '%d minutes', + h: 'une heure', + hh: '%d heures', + d: 'un jour', + dd: '%d jours', + M: 'un mois', + MM: '%d mois', + y: 'un an', + yy: '%d ans', + }, + dayOfMonthOrdinalParse: /\d{1,2}(er|e)/, + ordinal: function (number, period) { + switch (period) { + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'D': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsStrictRegex$1 = /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i, + monthsShortStrictRegex$1 = /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?)/i, + monthsRegex$6 = /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i, + monthsParse$5 = [ + /^janv/i, + /^févr/i, + /^mars/i, + /^avr/i, + /^mai/i, + /^juin/i, + /^juil/i, + /^août/i, + /^sept/i, + /^oct/i, + /^nov/i, + /^déc/i, + ]; + + hooks.defineLocale('fr', { + months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split( + '_' + ), + monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split( + '_' + ), + monthsRegex: monthsRegex$6, + monthsShortRegex: monthsRegex$6, + monthsStrictRegex: monthsStrictRegex$1, + monthsShortStrictRegex: monthsShortStrictRegex$1, + monthsParse: monthsParse$5, + longMonthsParse: monthsParse$5, + shortMonthsParse: monthsParse$5, + weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Aujourd’hui à] LT', + nextDay: '[Demain à] LT', + nextWeek: 'dddd [à] LT', + lastDay: '[Hier à] LT', + lastWeek: 'dddd [dernier à] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dans %s', + past: 'il y a %s', + s: 'quelques secondes', + ss: '%d secondes', + m: 'une minute', + mm: '%d minutes', + h: 'une heure', + hh: '%d heures', + d: 'un jour', + dd: '%d jours', + M: 'un mois', + MM: '%d mois', + y: 'un an', + yy: '%d ans', + }, + dayOfMonthOrdinalParse: /\d{1,2}(er|)/, + ordinal: function (number, period) { + switch (period) { + // TODO: Return 'e' when day of month > 1. Move this case inside + // block for masculine words below. + // See https://github.com/moment/moment/issues/3375 + case 'D': + return number + (number === 1 ? 'er' : ''); + + // Words with masculine grammatical gender: mois, trimestre, jour + default: + case 'M': + case 'Q': + case 'DDD': + case 'd': + return number + (number === 1 ? 'er' : 'e'); + + // Words with feminine grammatical gender: semaine + case 'w': + case 'W': + return number + (number === 1 ? 're' : 'e'); + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split( + '_' + ), + monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split( + '_' + ); + + hooks.defineLocale('fy', { + months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split( + '_' + ), + monthsShort: function (m, format) { + if (!m) { + return monthsShortWithDots; + } else if (/-MMM-/.test(format)) { + return monthsShortWithoutDots[m.month()]; + } else { + return monthsShortWithDots[m.month()]; + } + }, + monthsParseExact: true, + weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split( + '_' + ), + weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'), + weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD-MM-YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[hjoed om] LT', + nextDay: '[moarn om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[juster om] LT', + lastWeek: '[ôfrûne] dddd [om] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'oer %s', + past: '%s lyn', + s: 'in pear sekonden', + ss: '%d sekonden', + m: 'ien minút', + mm: '%d minuten', + h: 'ien oere', + hh: '%d oeren', + d: 'ien dei', + dd: '%d dagen', + M: 'ien moanne', + MM: '%d moannen', + y: 'ien jier', + yy: '%d jierren', + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal: function (number) { + return ( + number + + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de') + ); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var months$6 = [ + 'Eanáir', + 'Feabhra', + 'Márta', + 'Aibreán', + 'Bealtaine', + 'Meitheamh', + 'Iúil', + 'Lúnasa', + 'Meán Fómhair', + 'Deireadh Fómhair', + 'Samhain', + 'Nollaig', + ], + monthsShort$4 = [ + 'Ean', + 'Feabh', + 'Márt', + 'Aib', + 'Beal', + 'Meith', + 'Iúil', + 'Lún', + 'M.F.', + 'D.F.', + 'Samh', + 'Noll', + ], + weekdays$1 = [ + 'Dé Domhnaigh', + 'Dé Luain', + 'Dé Máirt', + 'Dé Céadaoin', + 'Déardaoin', + 'Dé hAoine', + 'Dé Sathairn', + ], + weekdaysShort = ['Domh', 'Luan', 'Máirt', 'Céad', 'Déar', 'Aoine', 'Sath'], + weekdaysMin = ['Do', 'Lu', 'Má', 'Cé', 'Dé', 'A', 'Sa']; + + hooks.defineLocale('ga', { + months: months$6, + monthsShort: monthsShort$4, + monthsParseExact: true, + weekdays: weekdays$1, + weekdaysShort: weekdaysShort, + weekdaysMin: weekdaysMin, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Inniu ag] LT', + nextDay: '[Amárach ag] LT', + nextWeek: 'dddd [ag] LT', + lastDay: '[Inné ag] LT', + lastWeek: 'dddd [seo caite] [ag] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'i %s', + past: '%s ó shin', + s: 'cúpla soicind', + ss: '%d soicind', + m: 'nóiméad', + mm: '%d nóiméad', + h: 'uair an chloig', + hh: '%d uair an chloig', + d: 'lá', + dd: '%d lá', + M: 'mí', + MM: '%d míonna', + y: 'bliain', + yy: '%d bliain', + }, + dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/, + ordinal: function (number) { + var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var months$7 = [ + 'Am Faoilleach', + 'An Gearran', + 'Am Màrt', + 'An Giblean', + 'An Cèitean', + 'An t-Ògmhios', + 'An t-Iuchar', + 'An Lùnastal', + 'An t-Sultain', + 'An Dàmhair', + 'An t-Samhain', + 'An Dùbhlachd', + ], + monthsShort$5 = [ + 'Faoi', + 'Gear', + 'Màrt', + 'Gibl', + 'Cèit', + 'Ògmh', + 'Iuch', + 'Lùn', + 'Sult', + 'Dàmh', + 'Samh', + 'Dùbh', + ], + weekdays$2 = [ + 'Didòmhnaich', + 'Diluain', + 'Dimàirt', + 'Diciadain', + 'Diardaoin', + 'Dihaoine', + 'Disathairne', + ], + weekdaysShort$1 = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'], + weekdaysMin$1 = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa']; + + hooks.defineLocale('gd', { + months: months$7, + monthsShort: monthsShort$5, + monthsParseExact: true, + weekdays: weekdays$2, + weekdaysShort: weekdaysShort$1, + weekdaysMin: weekdaysMin$1, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[An-diugh aig] LT', + nextDay: '[A-màireach aig] LT', + nextWeek: 'dddd [aig] LT', + lastDay: '[An-dè aig] LT', + lastWeek: 'dddd [seo chaidh] [aig] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'ann an %s', + past: 'bho chionn %s', + s: 'beagan diogan', + ss: '%d diogan', + m: 'mionaid', + mm: '%d mionaidean', + h: 'uair', + hh: '%d uairean', + d: 'latha', + dd: '%d latha', + M: 'mìos', + MM: '%d mìosan', + y: 'bliadhna', + yy: '%d bliadhna', + }, + dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/, + ordinal: function (number) { + var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('gl', { + months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split( + '_' + ), + monthsShort: 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'), + weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'), + weekdaysMin: 'do_lu_ma_mé_xo_ve_sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY H:mm', + LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm', + }, + calendar: { + sameDay: function () { + return '[hoxe ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT'; + }, + nextDay: function () { + return '[mañá ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT'; + }, + nextWeek: function () { + return 'dddd [' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT'; + }, + lastDay: function () { + return '[onte ' + (this.hours() !== 1 ? 'á' : 'a') + '] LT'; + }, + lastWeek: function () { + return ( + '[o] dddd [pasado ' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT' + ); + }, + sameElse: 'L', + }, + relativeTime: { + future: function (str) { + if (str.indexOf('un') === 0) { + return 'n' + str; + } + return 'en ' + str; + }, + past: 'hai %s', + s: 'uns segundos', + ss: '%d segundos', + m: 'un minuto', + mm: '%d minutos', + h: 'unha hora', + hh: '%d horas', + d: 'un día', + dd: '%d días', + M: 'un mes', + MM: '%d meses', + y: 'un ano', + yy: '%d anos', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function processRelativeTime$4(number, withoutSuffix, key, isFuture) { + var format = { + s: ['थोडया सॅकंडांनी', 'थोडे सॅकंड'], + ss: [number + ' सॅकंडांनी', number + ' सॅकंड'], + m: ['एका मिणटान', 'एक मिनूट'], + mm: [number + ' मिणटांनी', number + ' मिणटां'], + h: ['एका वरान', 'एक वर'], + hh: [number + ' वरांनी', number + ' वरां'], + d: ['एका दिसान', 'एक दीस'], + dd: [number + ' दिसांनी', number + ' दीस'], + M: ['एका म्हयन्यान', 'एक म्हयनो'], + MM: [number + ' म्हयन्यानी', number + ' म्हयने'], + y: ['एका वर्सान', 'एक वर्स'], + yy: [number + ' वर्सांनी', number + ' वर्सां'], + }; + return isFuture ? format[key][0] : format[key][1]; + } + + hooks.defineLocale('gom-deva', { + months: { + standalone: 'जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split( + '_' + ), + format: 'जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या'.split( + '_' + ), + isFormat: /MMMM(\s)+D[oD]?/, + }, + monthsShort: 'जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार'.split('_'), + weekdaysShort: 'आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.'.split('_'), + weekdaysMin: 'आ_सो_मं_बु_ब्रे_सु_शे'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'A h:mm [वाजतां]', + LTS: 'A h:mm:ss [वाजतां]', + L: 'DD-MM-YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY A h:mm [वाजतां]', + LLLL: 'dddd, MMMM Do, YYYY, A h:mm [वाजतां]', + llll: 'ddd, D MMM YYYY, A h:mm [वाजतां]', + }, + calendar: { + sameDay: '[आयज] LT', + nextDay: '[फाल्यां] LT', + nextWeek: '[फुडलो] dddd[,] LT', + lastDay: '[काल] LT', + lastWeek: '[फाटलो] dddd[,] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s', + past: '%s आदीं', + s: processRelativeTime$4, + ss: processRelativeTime$4, + m: processRelativeTime$4, + mm: processRelativeTime$4, + h: processRelativeTime$4, + hh: processRelativeTime$4, + d: processRelativeTime$4, + dd: processRelativeTime$4, + M: processRelativeTime$4, + MM: processRelativeTime$4, + y: processRelativeTime$4, + yy: processRelativeTime$4, + }, + dayOfMonthOrdinalParse: /\d{1,2}(वेर)/, + ordinal: function (number, period) { + switch (period) { + // the ordinal 'वेर' only applies to day of the month + case 'D': + return number + 'वेर'; + default: + case 'M': + case 'Q': + case 'DDD': + case 'd': + case 'w': + case 'W': + return number; + } + }, + week: { + dow: 0, // Sunday is the first day of the week + doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4) + }, + meridiemParse: /राती|सकाळीं|दनपारां|सांजे/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'राती') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'सकाळीं') { + return hour; + } else if (meridiem === 'दनपारां') { + return hour > 12 ? hour : hour + 12; + } else if (meridiem === 'सांजे') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'राती'; + } else if (hour < 12) { + return 'सकाळीं'; + } else if (hour < 16) { + return 'दनपारां'; + } else if (hour < 20) { + return 'सांजे'; + } else { + return 'राती'; + } + }, + }); + + //! moment.js locale configuration + + function processRelativeTime$5(number, withoutSuffix, key, isFuture) { + var format = { + s: ['thoddea sekondamni', 'thodde sekond'], + ss: [number + ' sekondamni', number + ' sekond'], + m: ['eka mintan', 'ek minut'], + mm: [number + ' mintamni', number + ' mintam'], + h: ['eka voran', 'ek vor'], + hh: [number + ' voramni', number + ' voram'], + d: ['eka disan', 'ek dis'], + dd: [number + ' disamni', number + ' dis'], + M: ['eka mhoinean', 'ek mhoino'], + MM: [number + ' mhoineamni', number + ' mhoine'], + y: ['eka vorsan', 'ek voros'], + yy: [number + ' vorsamni', number + ' vorsam'], + }; + return isFuture ? format[key][0] : format[key][1]; + } + + hooks.defineLocale('gom-latn', { + months: { + standalone: 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split( + '_' + ), + format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split( + '_' + ), + isFormat: /MMMM(\s)+D[oD]?/, + }, + monthsShort: 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split( + '_' + ), + monthsParseExact: true, + weekdays: "Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split('_'), + weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'), + weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'A h:mm [vazta]', + LTS: 'A h:mm:ss [vazta]', + L: 'DD-MM-YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY A h:mm [vazta]', + LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]', + llll: 'ddd, D MMM YYYY, A h:mm [vazta]', + }, + calendar: { + sameDay: '[Aiz] LT', + nextDay: '[Faleam] LT', + nextWeek: '[Fuddlo] dddd[,] LT', + lastDay: '[Kal] LT', + lastWeek: '[Fattlo] dddd[,] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s', + past: '%s adim', + s: processRelativeTime$5, + ss: processRelativeTime$5, + m: processRelativeTime$5, + mm: processRelativeTime$5, + h: processRelativeTime$5, + hh: processRelativeTime$5, + d: processRelativeTime$5, + dd: processRelativeTime$5, + M: processRelativeTime$5, + MM: processRelativeTime$5, + y: processRelativeTime$5, + yy: processRelativeTime$5, + }, + dayOfMonthOrdinalParse: /\d{1,2}(er)/, + ordinal: function (number, period) { + switch (period) { + // the ordinal 'er' only applies to day of the month + case 'D': + return number + 'er'; + default: + case 'M': + case 'Q': + case 'DDD': + case 'd': + case 'w': + case 'W': + return number; + } + }, + week: { + dow: 0, // Sunday is the first day of the week + doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4) + }, + meridiemParse: /rati|sokallim|donparam|sanje/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'rati') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'sokallim') { + return hour; + } else if (meridiem === 'donparam') { + return hour > 12 ? hour : hour + 12; + } else if (meridiem === 'sanje') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'rati'; + } else if (hour < 12) { + return 'sokallim'; + } else if (hour < 16) { + return 'donparam'; + } else if (hour < 20) { + return 'sanje'; + } else { + return 'rati'; + } + }, + }); + + //! moment.js locale configuration + + var symbolMap$6 = { + '1': '૧', + '2': '૨', + '3': '૩', + '4': '૪', + '5': '૫', + '6': '૬', + '7': '૭', + '8': '૮', + '9': '૯', + '0': '૦', + }, + numberMap$5 = { + '૧': '1', + '૨': '2', + '૩': '3', + '૪': '4', + '૫': '5', + '૬': '6', + '૭': '7', + '૮': '8', + '૯': '9', + '૦': '0', + }; + + hooks.defineLocale('gu', { + months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split( + '_' + ), + monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split( + '_' + ), + weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'), + weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'), + longDateFormat: { + LT: 'A h:mm વાગ્યે', + LTS: 'A h:mm:ss વાગ્યે', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm વાગ્યે', + LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે', + }, + calendar: { + sameDay: '[આજ] LT', + nextDay: '[કાલે] LT', + nextWeek: 'dddd, LT', + lastDay: '[ગઇકાલે] LT', + lastWeek: '[પાછલા] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s મા', + past: '%s પહેલા', + s: 'અમુક પળો', + ss: '%d સેકંડ', + m: 'એક મિનિટ', + mm: '%d મિનિટ', + h: 'એક કલાક', + hh: '%d કલાક', + d: 'એક દિવસ', + dd: '%d દિવસ', + M: 'એક મહિનો', + MM: '%d મહિનો', + y: 'એક વર્ષ', + yy: '%d વર્ષ', + }, + preparse: function (string) { + return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) { + return numberMap$5[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$6[match]; + }); + }, + // Gujarati notation for meridiems are quite fuzzy in practice. While there exists + // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati. + meridiemParse: /રાત|બપોર|સવાર|સાંજ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'રાત') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'સવાર') { + return hour; + } else if (meridiem === 'બપોર') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'સાંજ') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'રાત'; + } else if (hour < 10) { + return 'સવાર'; + } else if (hour < 17) { + return 'બપોર'; + } else if (hour < 20) { + return 'સાંજ'; + } else { + return 'રાત'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('he', { + months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split( + '_' + ), + monthsShort: 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split( + '_' + ), + weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'), + weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'), + weekdaysMin: 'א_ב_ג_ד_ה_ו_ש'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [ב]MMMM YYYY', + LLL: 'D [ב]MMMM YYYY HH:mm', + LLLL: 'dddd, D [ב]MMMM YYYY HH:mm', + l: 'D/M/YYYY', + ll: 'D MMM YYYY', + lll: 'D MMM YYYY HH:mm', + llll: 'ddd, D MMM YYYY HH:mm', + }, + calendar: { + sameDay: '[היום ב־]LT', + nextDay: '[מחר ב־]LT', + nextWeek: 'dddd [בשעה] LT', + lastDay: '[אתמול ב־]LT', + lastWeek: '[ביום] dddd [האחרון בשעה] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'בעוד %s', + past: 'לפני %s', + s: 'מספר שניות', + ss: '%d שניות', + m: 'דקה', + mm: '%d דקות', + h: 'שעה', + hh: function (number) { + if (number === 2) { + return 'שעתיים'; + } + return number + ' שעות'; + }, + d: 'יום', + dd: function (number) { + if (number === 2) { + return 'יומיים'; + } + return number + ' ימים'; + }, + M: 'חודש', + MM: function (number) { + if (number === 2) { + return 'חודשיים'; + } + return number + ' חודשים'; + }, + y: 'שנה', + yy: function (number) { + if (number === 2) { + return 'שנתיים'; + } else if (number % 10 === 0 && number !== 10) { + return number + ' שנה'; + } + return number + ' שנים'; + }, + }, + meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i, + isPM: function (input) { + return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 5) { + return 'לפנות בוקר'; + } else if (hour < 10) { + return 'בבוקר'; + } else if (hour < 12) { + return isLower ? 'לפנה"צ' : 'לפני הצהריים'; + } else if (hour < 18) { + return isLower ? 'אחה"צ' : 'אחרי הצהריים'; + } else { + return 'בערב'; + } + }, + }); + + //! moment.js locale configuration + + var symbolMap$7 = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०', + }, + numberMap$6 = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0', + }; + + hooks.defineLocale('hi', { + months: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split( + '_' + ), + monthsShort: 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'), + weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'), + weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'), + longDateFormat: { + LT: 'A h:mm बजे', + LTS: 'A h:mm:ss बजे', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm बजे', + LLLL: 'dddd, D MMMM YYYY, A h:mm बजे', + }, + calendar: { + sameDay: '[आज] LT', + nextDay: '[कल] LT', + nextWeek: 'dddd, LT', + lastDay: '[कल] LT', + lastWeek: '[पिछले] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s में', + past: '%s पहले', + s: 'कुछ ही क्षण', + ss: '%d सेकंड', + m: 'एक मिनट', + mm: '%d मिनट', + h: 'एक घंटा', + hh: '%d घंटे', + d: 'एक दिन', + dd: '%d दिन', + M: 'एक महीने', + MM: '%d महीने', + y: 'एक वर्ष', + yy: '%d वर्ष', + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap$6[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$7[match]; + }); + }, + // Hindi notation for meridiems are quite fuzzy in practice. While there exists + // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi. + meridiemParse: /रात|सुबह|दोपहर|शाम/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'रात') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'सुबह') { + return hour; + } else if (meridiem === 'दोपहर') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'शाम') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'रात'; + } else if (hour < 10) { + return 'सुबह'; + } else if (hour < 17) { + return 'दोपहर'; + } else if (hour < 20) { + return 'शाम'; + } else { + return 'रात'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function translate$3(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'ss': + if (number === 1) { + result += 'sekunda'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sekunde'; + } else { + result += 'sekundi'; + } + return result; + case 'm': + return withoutSuffix ? 'jedna minuta' : 'jedne minute'; + case 'mm': + if (number === 1) { + result += 'minuta'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'minute'; + } else { + result += 'minuta'; + } + return result; + case 'h': + return withoutSuffix ? 'jedan sat' : 'jednog sata'; + case 'hh': + if (number === 1) { + result += 'sat'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sata'; + } else { + result += 'sati'; + } + return result; + case 'dd': + if (number === 1) { + result += 'dan'; + } else { + result += 'dana'; + } + return result; + case 'MM': + if (number === 1) { + result += 'mjesec'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'mjeseca'; + } else { + result += 'mjeseci'; + } + return result; + case 'yy': + if (number === 1) { + result += 'godina'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'godine'; + } else { + result += 'godina'; + } + return result; + } + } + + hooks.defineLocale('hr', { + months: { + format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split( + '_' + ), + standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split( + '_' + ), + }, + monthsShort: 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split( + '_' + ), + weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'Do MMMM YYYY', + LLL: 'Do MMMM YYYY H:mm', + LLLL: 'dddd, Do MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sutra u] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay: '[jučer u] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[prošlu] [nedjelju] [u] LT'; + case 3: + return '[prošlu] [srijedu] [u] LT'; + case 6: + return '[prošle] [subote] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prošli] dddd [u] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: 'prije %s', + s: 'par sekundi', + ss: translate$3, + m: translate$3, + mm: translate$3, + h: translate$3, + hh: translate$3, + d: 'dan', + dd: translate$3, + M: 'mjesec', + MM: translate$3, + y: 'godinu', + yy: translate$3, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split( + ' ' + ); + function translate$4(number, withoutSuffix, key, isFuture) { + var num = number; + switch (key) { + case 's': + return isFuture || withoutSuffix + ? 'néhány másodperc' + : 'néhány másodperce'; + case 'ss': + return num + (isFuture || withoutSuffix) + ? ' másodperc' + : ' másodperce'; + case 'm': + return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce'); + case 'mm': + return num + (isFuture || withoutSuffix ? ' perc' : ' perce'); + case 'h': + return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája'); + case 'hh': + return num + (isFuture || withoutSuffix ? ' óra' : ' órája'); + case 'd': + return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja'); + case 'dd': + return num + (isFuture || withoutSuffix ? ' nap' : ' napja'); + case 'M': + return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); + case 'MM': + return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); + case 'y': + return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve'); + case 'yy': + return num + (isFuture || withoutSuffix ? ' év' : ' éve'); + } + return ''; + } + function week(isFuture) { + return ( + (isFuture ? '' : '[múlt] ') + + '[' + + weekEndings[this.day()] + + '] LT[-kor]' + ); + } + + hooks.defineLocale('hu', { + months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split( + '_' + ), + monthsShort: 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split( + '_' + ), + weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'), + weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'), + weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'YYYY.MM.DD.', + LL: 'YYYY. MMMM D.', + LLL: 'YYYY. MMMM D. H:mm', + LLLL: 'YYYY. MMMM D., dddd H:mm', + }, + meridiemParse: /de|du/i, + isPM: function (input) { + return input.charAt(1).toLowerCase() === 'u'; + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 12) { + return isLower === true ? 'de' : 'DE'; + } else { + return isLower === true ? 'du' : 'DU'; + } + }, + calendar: { + sameDay: '[ma] LT[-kor]', + nextDay: '[holnap] LT[-kor]', + nextWeek: function () { + return week.call(this, true); + }, + lastDay: '[tegnap] LT[-kor]', + lastWeek: function () { + return week.call(this, false); + }, + sameElse: 'L', + }, + relativeTime: { + future: '%s múlva', + past: '%s', + s: translate$4, + ss: translate$4, + m: translate$4, + mm: translate$4, + h: translate$4, + hh: translate$4, + d: translate$4, + dd: translate$4, + M: translate$4, + MM: translate$4, + y: translate$4, + yy: translate$4, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('hy-am', { + months: { + format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split( + '_' + ), + standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split( + '_' + ), + }, + monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'), + weekdays: 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split( + '_' + ), + weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'), + weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY թ.', + LLL: 'D MMMM YYYY թ., HH:mm', + LLLL: 'dddd, D MMMM YYYY թ., HH:mm', + }, + calendar: { + sameDay: '[այսօր] LT', + nextDay: '[վաղը] LT', + lastDay: '[երեկ] LT', + nextWeek: function () { + return 'dddd [օրը ժամը] LT'; + }, + lastWeek: function () { + return '[անցած] dddd [օրը ժամը] LT'; + }, + sameElse: 'L', + }, + relativeTime: { + future: '%s հետո', + past: '%s առաջ', + s: 'մի քանի վայրկյան', + ss: '%d վայրկյան', + m: 'րոպե', + mm: '%d րոպե', + h: 'ժամ', + hh: '%d ժամ', + d: 'օր', + dd: '%d օր', + M: 'ամիս', + MM: '%d ամիս', + y: 'տարի', + yy: '%d տարի', + }, + meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/, + isPM: function (input) { + return /^(ցերեկվա|երեկոյան)$/.test(input); + }, + meridiem: function (hour) { + if (hour < 4) { + return 'գիշերվա'; + } else if (hour < 12) { + return 'առավոտվա'; + } else if (hour < 17) { + return 'ցերեկվա'; + } else { + return 'երեկոյան'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/, + ordinal: function (number, period) { + switch (period) { + case 'DDD': + case 'w': + case 'W': + case 'DDDo': + if (number === 1) { + return number + '-ին'; + } + return number + '-րդ'; + default: + return number; + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('id', { + months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'), + weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'), + weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'), + weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [pukul] HH.mm', + LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm', + }, + meridiemParse: /pagi|siang|sore|malam/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'siang') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'sore' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'siang'; + } else if (hours < 19) { + return 'sore'; + } else { + return 'malam'; + } + }, + calendar: { + sameDay: '[Hari ini pukul] LT', + nextDay: '[Besok pukul] LT', + nextWeek: 'dddd [pukul] LT', + lastDay: '[Kemarin pukul] LT', + lastWeek: 'dddd [lalu pukul] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dalam %s', + past: '%s yang lalu', + s: 'beberapa detik', + ss: '%d detik', + m: 'semenit', + mm: '%d menit', + h: 'sejam', + hh: '%d jam', + d: 'sehari', + dd: '%d hari', + M: 'sebulan', + MM: '%d bulan', + y: 'setahun', + yy: '%d tahun', + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function plural$2(n) { + if (n % 100 === 11) { + return true; + } else if (n % 10 === 1) { + return false; + } + return true; + } + function translate$5(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': + return withoutSuffix || isFuture + ? 'nokkrar sekúndur' + : 'nokkrum sekúndum'; + case 'ss': + if (plural$2(number)) { + return ( + result + + (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum') + ); + } + return result + 'sekúnda'; + case 'm': + return withoutSuffix ? 'mínúta' : 'mínútu'; + case 'mm': + if (plural$2(number)) { + return ( + result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum') + ); + } else if (withoutSuffix) { + return result + 'mínúta'; + } + return result + 'mínútu'; + case 'hh': + if (plural$2(number)) { + return ( + result + + (withoutSuffix || isFuture + ? 'klukkustundir' + : 'klukkustundum') + ); + } + return result + 'klukkustund'; + case 'd': + if (withoutSuffix) { + return 'dagur'; + } + return isFuture ? 'dag' : 'degi'; + case 'dd': + if (plural$2(number)) { + if (withoutSuffix) { + return result + 'dagar'; + } + return result + (isFuture ? 'daga' : 'dögum'); + } else if (withoutSuffix) { + return result + 'dagur'; + } + return result + (isFuture ? 'dag' : 'degi'); + case 'M': + if (withoutSuffix) { + return 'mánuður'; + } + return isFuture ? 'mánuð' : 'mánuði'; + case 'MM': + if (plural$2(number)) { + if (withoutSuffix) { + return result + 'mánuðir'; + } + return result + (isFuture ? 'mánuði' : 'mánuðum'); + } else if (withoutSuffix) { + return result + 'mánuður'; + } + return result + (isFuture ? 'mánuð' : 'mánuði'); + case 'y': + return withoutSuffix || isFuture ? 'ár' : 'ári'; + case 'yy': + if (plural$2(number)) { + return result + (withoutSuffix || isFuture ? 'ár' : 'árum'); + } + return result + (withoutSuffix || isFuture ? 'ár' : 'ári'); + } + } + + hooks.defineLocale('is', { + months: 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split( + '_' + ), + monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'), + weekdays: 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split( + '_' + ), + weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'), + weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY [kl.] H:mm', + LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm', + }, + calendar: { + sameDay: '[í dag kl.] LT', + nextDay: '[á morgun kl.] LT', + nextWeek: 'dddd [kl.] LT', + lastDay: '[í gær kl.] LT', + lastWeek: '[síðasta] dddd [kl.] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'eftir %s', + past: 'fyrir %s síðan', + s: translate$5, + ss: translate$5, + m: translate$5, + mm: translate$5, + h: 'klukkustund', + hh: translate$5, + d: translate$5, + dd: translate$5, + M: translate$5, + MM: translate$5, + y: translate$5, + yy: translate$5, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('it-ch', { + months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split( + '_' + ), + monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'), + weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split( + '_' + ), + weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'), + weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Oggi alle] LT', + nextDay: '[Domani alle] LT', + nextWeek: 'dddd [alle] LT', + lastDay: '[Ieri alle] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[la scorsa] dddd [alle] LT'; + default: + return '[lo scorso] dddd [alle] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: function (s) { + return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s; + }, + past: '%s fa', + s: 'alcuni secondi', + ss: '%d secondi', + m: 'un minuto', + mm: '%d minuti', + h: "un'ora", + hh: '%d ore', + d: 'un giorno', + dd: '%d giorni', + M: 'un mese', + MM: '%d mesi', + y: 'un anno', + yy: '%d anni', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('it', { + months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split( + '_' + ), + monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'), + weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split( + '_' + ), + weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'), + weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: function () { + return ( + '[Oggi a' + + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + + ']LT' + ); + }, + nextDay: function () { + return ( + '[Domani a' + + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + + ']LT' + ); + }, + nextWeek: function () { + return ( + 'dddd [a' + + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + + ']LT' + ); + }, + lastDay: function () { + return ( + '[Ieri a' + + (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") + + ']LT' + ); + }, + lastWeek: function () { + switch (this.day()) { + case 0: + return ( + '[La scorsa] dddd [a' + + (this.hours() > 1 + ? 'lle ' + : this.hours() === 0 + ? ' ' + : "ll'") + + ']LT' + ); + default: + return ( + '[Lo scorso] dddd [a' + + (this.hours() > 1 + ? 'lle ' + : this.hours() === 0 + ? ' ' + : "ll'") + + ']LT' + ); + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'tra %s', + past: '%s fa', + s: 'alcuni secondi', + ss: '%d secondi', + m: 'un minuto', + mm: '%d minuti', + h: "un'ora", + hh: '%d ore', + d: 'un giorno', + dd: '%d giorni', + M: 'un mese', + MM: '%d mesi', + y: 'un anno', + yy: '%d anni', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('ja', { + eras: [ + { + since: '2019-05-01', + offset: 1, + name: '令和', + narrow: '㋿', + abbr: 'R', + }, + { + since: '1989-01-08', + until: '2019-04-30', + offset: 1, + name: '平成', + narrow: '㍻', + abbr: 'H', + }, + { + since: '1926-12-25', + until: '1989-01-07', + offset: 1, + name: '昭和', + narrow: '㍼', + abbr: 'S', + }, + { + since: '1912-07-30', + until: '1926-12-24', + offset: 1, + name: '大正', + narrow: '㍽', + abbr: 'T', + }, + { + since: '1873-01-01', + until: '1912-07-29', + offset: 6, + name: '明治', + narrow: '㍾', + abbr: 'M', + }, + { + since: '0001-01-01', + until: '1873-12-31', + offset: 1, + name: '西暦', + narrow: 'AD', + abbr: 'AD', + }, + { + since: '0000-12-31', + until: -Infinity, + offset: 1, + name: '紀元前', + narrow: 'BC', + abbr: 'BC', + }, + ], + eraYearOrdinalRegex: /(元|\d+)年/, + eraYearOrdinalParse: function (input, match) { + return match[1] === '元' ? 1 : parseInt(match[1] || input, 10); + }, + months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split( + '_' + ), + weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'), + weekdaysShort: '日_月_火_水_木_金_土'.split('_'), + weekdaysMin: '日_月_火_水_木_金_土'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY年M月D日', + LLL: 'YYYY年M月D日 HH:mm', + LLLL: 'YYYY年M月D日 dddd HH:mm', + l: 'YYYY/MM/DD', + ll: 'YYYY年M月D日', + lll: 'YYYY年M月D日 HH:mm', + llll: 'YYYY年M月D日(ddd) HH:mm', + }, + meridiemParse: /午前|午後/i, + isPM: function (input) { + return input === '午後'; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return '午前'; + } else { + return '午後'; + } + }, + calendar: { + sameDay: '[今日] LT', + nextDay: '[明日] LT', + nextWeek: function (now) { + if (now.week() !== this.week()) { + return '[来週]dddd LT'; + } else { + return 'dddd LT'; + } + }, + lastDay: '[昨日] LT', + lastWeek: function (now) { + if (this.week() !== now.week()) { + return '[先週]dddd LT'; + } else { + return 'dddd LT'; + } + }, + sameElse: 'L', + }, + dayOfMonthOrdinalParse: /\d{1,2}日/, + ordinal: function (number, period) { + switch (period) { + case 'y': + return number === 1 ? '元年' : number + '年'; + case 'd': + case 'D': + case 'DDD': + return number + '日'; + default: + return number; + } + }, + relativeTime: { + future: '%s後', + past: '%s前', + s: '数秒', + ss: '%d秒', + m: '1分', + mm: '%d分', + h: '1時間', + hh: '%d時間', + d: '1日', + dd: '%d日', + M: '1ヶ月', + MM: '%dヶ月', + y: '1年', + yy: '%d年', + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('jv', { + months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'), + weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'), + weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'), + weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'), + longDateFormat: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [pukul] HH.mm', + LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm', + }, + meridiemParse: /enjing|siyang|sonten|ndalu/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'enjing') { + return hour; + } else if (meridiem === 'siyang') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'sonten' || meridiem === 'ndalu') { + return hour + 12; + } + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 11) { + return 'enjing'; + } else if (hours < 15) { + return 'siyang'; + } else if (hours < 19) { + return 'sonten'; + } else { + return 'ndalu'; + } + }, + calendar: { + sameDay: '[Dinten puniko pukul] LT', + nextDay: '[Mbenjang pukul] LT', + nextWeek: 'dddd [pukul] LT', + lastDay: '[Kala wingi pukul] LT', + lastWeek: 'dddd [kepengker pukul] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'wonten ing %s', + past: '%s ingkang kepengker', + s: 'sawetawis detik', + ss: '%d detik', + m: 'setunggal menit', + mm: '%d menit', + h: 'setunggal jam', + hh: '%d jam', + d: 'sedinten', + dd: '%d dinten', + M: 'sewulan', + MM: '%d wulan', + y: 'setaun', + yy: '%d taun', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('ka', { + months: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split( + '_' + ), + monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'), + weekdays: { + standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split( + '_' + ), + format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split( + '_' + ), + isFormat: /(წინა|შემდეგ)/, + }, + weekdaysShort: 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'), + weekdaysMin: 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[დღეს] LT[-ზე]', + nextDay: '[ხვალ] LT[-ზე]', + lastDay: '[გუშინ] LT[-ზე]', + nextWeek: '[შემდეგ] dddd LT[-ზე]', + lastWeek: '[წინა] dddd LT-ზე', + sameElse: 'L', + }, + relativeTime: { + future: function (s) { + return s.replace(/(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/, function ( + $0, + $1, + $2 + ) { + return $2 === 'ი' ? $1 + 'ში' : $1 + $2 + 'ში'; + }); + }, + past: function (s) { + if (/(წამი|წუთი|საათი|დღე|თვე)/.test(s)) { + return s.replace(/(ი|ე)$/, 'ის წინ'); + } + if (/წელი/.test(s)) { + return s.replace(/წელი$/, 'წლის წინ'); + } + return s; + }, + s: 'რამდენიმე წამი', + ss: '%d წამი', + m: 'წუთი', + mm: '%d წუთი', + h: 'საათი', + hh: '%d საათი', + d: 'დღე', + dd: '%d დღე', + M: 'თვე', + MM: '%d თვე', + y: 'წელი', + yy: '%d წელი', + }, + dayOfMonthOrdinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/, + ordinal: function (number) { + if (number === 0) { + return number; + } + if (number === 1) { + return number + '-ლი'; + } + if ( + number < 20 || + (number <= 100 && number % 20 === 0) || + number % 100 === 0 + ) { + return 'მე-' + number; + } + return number + '-ე'; + }, + week: { + dow: 1, + doy: 7, + }, + }); + + //! moment.js locale configuration + + var suffixes$1 = { + 0: '-ші', + 1: '-ші', + 2: '-ші', + 3: '-ші', + 4: '-ші', + 5: '-ші', + 6: '-шы', + 7: '-ші', + 8: '-ші', + 9: '-шы', + 10: '-шы', + 20: '-шы', + 30: '-шы', + 40: '-шы', + 50: '-ші', + 60: '-шы', + 70: '-ші', + 80: '-ші', + 90: '-шы', + 100: '-ші', + }; + + hooks.defineLocale('kk', { + months: 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split( + '_' + ), + monthsShort: 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'), + weekdays: 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split( + '_' + ), + weekdaysShort: 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'), + weekdaysMin: 'жк_дй_сй_ср_бй_жм_сн'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Бүгін сағат] LT', + nextDay: '[Ертең сағат] LT', + nextWeek: 'dddd [сағат] LT', + lastDay: '[Кеше сағат] LT', + lastWeek: '[Өткен аптаның] dddd [сағат] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s ішінде', + past: '%s бұрын', + s: 'бірнеше секунд', + ss: '%d секунд', + m: 'бір минут', + mm: '%d минут', + h: 'бір сағат', + hh: '%d сағат', + d: 'бір күн', + dd: '%d күн', + M: 'бір ай', + MM: '%d ай', + y: 'бір жыл', + yy: '%d жыл', + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ші|шы)/, + ordinal: function (number) { + var a = number % 10, + b = number >= 100 ? 100 : null; + return number + (suffixes$1[number] || suffixes$1[a] || suffixes$1[b]); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$8 = { + '1': '១', + '2': '២', + '3': '៣', + '4': '៤', + '5': '៥', + '6': '៦', + '7': '៧', + '8': '៨', + '9': '៩', + '0': '០', + }, + numberMap$7 = { + '១': '1', + '២': '2', + '៣': '3', + '៤': '4', + '៥': '5', + '៦': '6', + '៧': '7', + '៨': '8', + '៩': '9', + '០': '0', + }; + + hooks.defineLocale('km', { + months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split( + '_' + ), + monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split( + '_' + ), + weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'), + weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'), + weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + meridiemParse: /ព្រឹក|ល្ងាច/, + isPM: function (input) { + return input === 'ល្ងាច'; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ព្រឹក'; + } else { + return 'ល្ងាច'; + } + }, + calendar: { + sameDay: '[ថ្ងៃនេះ ម៉ោង] LT', + nextDay: '[ស្អែក ម៉ោង] LT', + nextWeek: 'dddd [ម៉ោង] LT', + lastDay: '[ម្សិលមិញ ម៉ោង] LT', + lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%sទៀត', + past: '%sមុន', + s: 'ប៉ុន្មានវិនាទី', + ss: '%d វិនាទី', + m: 'មួយនាទី', + mm: '%d នាទី', + h: 'មួយម៉ោង', + hh: '%d ម៉ោង', + d: 'មួយថ្ងៃ', + dd: '%d ថ្ងៃ', + M: 'មួយខែ', + MM: '%d ខែ', + y: 'មួយឆ្នាំ', + yy: '%d ឆ្នាំ', + }, + dayOfMonthOrdinalParse: /ទី\d{1,2}/, + ordinal: 'ទី%d', + preparse: function (string) { + return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) { + return numberMap$7[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$8[match]; + }); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$9 = { + '1': '೧', + '2': '೨', + '3': '೩', + '4': '೪', + '5': '೫', + '6': '೬', + '7': '೭', + '8': '೮', + '9': '೯', + '0': '೦', + }, + numberMap$8 = { + '೧': '1', + '೨': '2', + '೩': '3', + '೪': '4', + '೫': '5', + '೬': '6', + '೭': '7', + '೮': '8', + '೯': '9', + '೦': '0', + }; + + hooks.defineLocale('kn', { + months: 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split( + '_' + ), + monthsShort: 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split( + '_' + ), + weekdaysShort: 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'), + weekdaysMin: 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'), + longDateFormat: { + LT: 'A h:mm', + LTS: 'A h:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm', + LLLL: 'dddd, D MMMM YYYY, A h:mm', + }, + calendar: { + sameDay: '[ಇಂದು] LT', + nextDay: '[ನಾಳೆ] LT', + nextWeek: 'dddd, LT', + lastDay: '[ನಿನ್ನೆ] LT', + lastWeek: '[ಕೊನೆಯ] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s ನಂತರ', + past: '%s ಹಿಂದೆ', + s: 'ಕೆಲವು ಕ್ಷಣಗಳು', + ss: '%d ಸೆಕೆಂಡುಗಳು', + m: 'ಒಂದು ನಿಮಿಷ', + mm: '%d ನಿಮಿಷ', + h: 'ಒಂದು ಗಂಟೆ', + hh: '%d ಗಂಟೆ', + d: 'ಒಂದು ದಿನ', + dd: '%d ದಿನ', + M: 'ಒಂದು ತಿಂಗಳು', + MM: '%d ತಿಂಗಳು', + y: 'ಒಂದು ವರ್ಷ', + yy: '%d ವರ್ಷ', + }, + preparse: function (string) { + return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) { + return numberMap$8[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$9[match]; + }); + }, + meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ರಾತ್ರಿ') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') { + return hour; + } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'ಸಂಜೆ') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'ರಾತ್ರಿ'; + } else if (hour < 10) { + return 'ಬೆಳಿಗ್ಗೆ'; + } else if (hour < 17) { + return 'ಮಧ್ಯಾಹ್ನ'; + } else if (hour < 20) { + return 'ಸಂಜೆ'; + } else { + return 'ರಾತ್ರಿ'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}(ನೇ)/, + ordinal: function (number) { + return number + 'ನೇ'; + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('ko', { + months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'), + monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split( + '_' + ), + weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'), + weekdaysShort: '일_월_화_수_목_금_토'.split('_'), + weekdaysMin: '일_월_화_수_목_금_토'.split('_'), + longDateFormat: { + LT: 'A h:mm', + LTS: 'A h:mm:ss', + L: 'YYYY.MM.DD.', + LL: 'YYYY년 MMMM D일', + LLL: 'YYYY년 MMMM D일 A h:mm', + LLLL: 'YYYY년 MMMM D일 dddd A h:mm', + l: 'YYYY.MM.DD.', + ll: 'YYYY년 MMMM D일', + lll: 'YYYY년 MMMM D일 A h:mm', + llll: 'YYYY년 MMMM D일 dddd A h:mm', + }, + calendar: { + sameDay: '오늘 LT', + nextDay: '내일 LT', + nextWeek: 'dddd LT', + lastDay: '어제 LT', + lastWeek: '지난주 dddd LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s 후', + past: '%s 전', + s: '몇 초', + ss: '%d초', + m: '1분', + mm: '%d분', + h: '한 시간', + hh: '%d시간', + d: '하루', + dd: '%d일', + M: '한 달', + MM: '%d달', + y: '일 년', + yy: '%d년', + }, + dayOfMonthOrdinalParse: /\d{1,2}(일|월|주)/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '일'; + case 'M': + return number + '월'; + case 'w': + case 'W': + return number + '주'; + default: + return number; + } + }, + meridiemParse: /오전|오후/, + isPM: function (token) { + return token === '오후'; + }, + meridiem: function (hour, minute, isUpper) { + return hour < 12 ? '오전' : '오후'; + }, + }); + + //! moment.js locale configuration + + var symbolMap$a = { + '1': '١', + '2': '٢', + '3': '٣', + '4': '٤', + '5': '٥', + '6': '٦', + '7': '٧', + '8': '٨', + '9': '٩', + '0': '٠', + }, + numberMap$9 = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0', + }, + months$8 = [ + 'کانونی دووەم', + 'شوبات', + 'ئازار', + 'نیسان', + 'ئایار', + 'حوزەیران', + 'تەمموز', + 'ئاب', + 'ئەیلوول', + 'تشرینی یەكەم', + 'تشرینی دووەم', + 'كانونی یەکەم', + ]; + + hooks.defineLocale('ku', { + months: months$8, + monthsShort: months$8, + weekdays: 'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split( + '_' + ), + weekdaysShort: 'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split( + '_' + ), + weekdaysMin: 'ی_د_س_چ_پ_ه_ش'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + meridiemParse: /ئێواره‌|به‌یانی/, + isPM: function (input) { + return /ئێواره‌/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'به‌یانی'; + } else { + return 'ئێواره‌'; + } + }, + calendar: { + sameDay: '[ئه‌مرۆ كاتژمێر] LT', + nextDay: '[به‌یانی كاتژمێر] LT', + nextWeek: 'dddd [كاتژمێر] LT', + lastDay: '[دوێنێ كاتژمێر] LT', + lastWeek: 'dddd [كاتژمێر] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'له‌ %s', + past: '%s', + s: 'چه‌ند چركه‌یه‌ك', + ss: 'چركه‌ %d', + m: 'یه‌ك خوله‌ك', + mm: '%d خوله‌ك', + h: 'یه‌ك كاتژمێر', + hh: '%d كاتژمێر', + d: 'یه‌ك ڕۆژ', + dd: '%d ڕۆژ', + M: 'یه‌ك مانگ', + MM: '%d مانگ', + y: 'یه‌ك ساڵ', + yy: '%d ساڵ', + }, + preparse: function (string) { + return string + .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { + return numberMap$9[match]; + }) + .replace(/،/g, ','); + }, + postformat: function (string) { + return string + .replace(/\d/g, function (match) { + return symbolMap$a[match]; + }) + .replace(/,/g, '،'); + }, + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var suffixes$2 = { + 0: '-чү', + 1: '-чи', + 2: '-чи', + 3: '-чү', + 4: '-чү', + 5: '-чи', + 6: '-чы', + 7: '-чи', + 8: '-чи', + 9: '-чу', + 10: '-чу', + 20: '-чы', + 30: '-чу', + 40: '-чы', + 50: '-чү', + 60: '-чы', + 70: '-чи', + 80: '-чи', + 90: '-чу', + 100: '-чү', + }; + + hooks.defineLocale('ky', { + months: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split( + '_' + ), + monthsShort: 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split( + '_' + ), + weekdays: 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split( + '_' + ), + weekdaysShort: 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'), + weekdaysMin: 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Бүгүн саат] LT', + nextDay: '[Эртең саат] LT', + nextWeek: 'dddd [саат] LT', + lastDay: '[Кечээ саат] LT', + lastWeek: '[Өткөн аптанын] dddd [күнү] [саат] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s ичинде', + past: '%s мурун', + s: 'бирнече секунд', + ss: '%d секунд', + m: 'бир мүнөт', + mm: '%d мүнөт', + h: 'бир саат', + hh: '%d саат', + d: 'бир күн', + dd: '%d күн', + M: 'бир ай', + MM: '%d ай', + y: 'бир жыл', + yy: '%d жыл', + }, + dayOfMonthOrdinalParse: /\d{1,2}-(чи|чы|чү|чу)/, + ordinal: function (number) { + var a = number % 10, + b = number >= 100 ? 100 : null; + return number + (suffixes$2[number] || suffixes$2[a] || suffixes$2[b]); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function processRelativeTime$6(number, withoutSuffix, key, isFuture) { + var format = { + m: ['eng Minutt', 'enger Minutt'], + h: ['eng Stonn', 'enger Stonn'], + d: ['een Dag', 'engem Dag'], + M: ['ee Mount', 'engem Mount'], + y: ['ee Joer', 'engem Joer'], + }; + return withoutSuffix ? format[key][0] : format[key][1]; + } + function processFutureTime(string) { + var number = string.substr(0, string.indexOf(' ')); + if (eifelerRegelAppliesToNumber(number)) { + return 'a ' + string; + } + return 'an ' + string; + } + function processPastTime(string) { + var number = string.substr(0, string.indexOf(' ')); + if (eifelerRegelAppliesToNumber(number)) { + return 'viru ' + string; + } + return 'virun ' + string; + } + /** + * Returns true if the word before the given number loses the '-n' ending. + * e.g. 'an 10 Deeg' but 'a 5 Deeg' + * + * @param number {integer} + * @returns {boolean} + */ + function eifelerRegelAppliesToNumber(number) { + number = parseInt(number, 10); + if (isNaN(number)) { + return false; + } + if (number < 0) { + // Negative Number --> always true + return true; + } else if (number < 10) { + // Only 1 digit + if (4 <= number && number <= 7) { + return true; + } + return false; + } else if (number < 100) { + // 2 digits + var lastDigit = number % 10, + firstDigit = number / 10; + if (lastDigit === 0) { + return eifelerRegelAppliesToNumber(firstDigit); + } + return eifelerRegelAppliesToNumber(lastDigit); + } else if (number < 10000) { + // 3 or 4 digits --> recursively check first digit + while (number >= 10) { + number = number / 10; + } + return eifelerRegelAppliesToNumber(number); + } else { + // Anything larger than 4 digits: recursively check first n-3 digits + number = number / 1000; + return eifelerRegelAppliesToNumber(number); + } + } + + hooks.defineLocale('lb', { + months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split( + '_' + ), + monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split( + '_' + ), + weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'), + weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm [Auer]', + LTS: 'H:mm:ss [Auer]', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm [Auer]', + LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]', + }, + calendar: { + sameDay: '[Haut um] LT', + sameElse: 'L', + nextDay: '[Muer um] LT', + nextWeek: 'dddd [um] LT', + lastDay: '[Gëschter um] LT', + lastWeek: function () { + // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule + switch (this.day()) { + case 2: + case 4: + return '[Leschten] dddd [um] LT'; + default: + return '[Leschte] dddd [um] LT'; + } + }, + }, + relativeTime: { + future: processFutureTime, + past: processPastTime, + s: 'e puer Sekonnen', + ss: '%d Sekonnen', + m: processRelativeTime$6, + mm: '%d Minutten', + h: processRelativeTime$6, + hh: '%d Stonnen', + d: processRelativeTime$6, + dd: '%d Deeg', + M: processRelativeTime$6, + MM: '%d Méint', + y: processRelativeTime$6, + yy: '%d Joer', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('lo', { + months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split( + '_' + ), + monthsShort: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split( + '_' + ), + weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'), + weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'), + weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'ວັນdddd D MMMM YYYY HH:mm', + }, + meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/, + isPM: function (input) { + return input === 'ຕອນແລງ'; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ຕອນເຊົ້າ'; + } else { + return 'ຕອນແລງ'; + } + }, + calendar: { + sameDay: '[ມື້ນີ້ເວລາ] LT', + nextDay: '[ມື້ອື່ນເວລາ] LT', + nextWeek: '[ວັນ]dddd[ໜ້າເວລາ] LT', + lastDay: '[ມື້ວານນີ້ເວລາ] LT', + lastWeek: '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'ອີກ %s', + past: '%sຜ່ານມາ', + s: 'ບໍ່ເທົ່າໃດວິນາທີ', + ss: '%d ວິນາທີ', + m: '1 ນາທີ', + mm: '%d ນາທີ', + h: '1 ຊົ່ວໂມງ', + hh: '%d ຊົ່ວໂມງ', + d: '1 ມື້', + dd: '%d ມື້', + M: '1 ເດືອນ', + MM: '%d ເດືອນ', + y: '1 ປີ', + yy: '%d ປີ', + }, + dayOfMonthOrdinalParse: /(ທີ່)\d{1,2}/, + ordinal: function (number) { + return 'ທີ່' + number; + }, + }); + + //! moment.js locale configuration + + var units = { + ss: 'sekundė_sekundžių_sekundes', + m: 'minutė_minutės_minutę', + mm: 'minutės_minučių_minutes', + h: 'valanda_valandos_valandą', + hh: 'valandos_valandų_valandas', + d: 'diena_dienos_dieną', + dd: 'dienos_dienų_dienas', + M: 'mėnuo_mėnesio_mėnesį', + MM: 'mėnesiai_mėnesių_mėnesius', + y: 'metai_metų_metus', + yy: 'metai_metų_metus', + }; + function translateSeconds(number, withoutSuffix, key, isFuture) { + if (withoutSuffix) { + return 'kelios sekundės'; + } else { + return isFuture ? 'kelių sekundžių' : 'kelias sekundes'; + } + } + function translateSingular(number, withoutSuffix, key, isFuture) { + return withoutSuffix + ? forms(key)[0] + : isFuture + ? forms(key)[1] + : forms(key)[2]; + } + function special(number) { + return number % 10 === 0 || (number > 10 && number < 20); + } + function forms(key) { + return units[key].split('_'); + } + function translate$6(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + if (number === 1) { + return ( + result + translateSingular(number, withoutSuffix, key[0], isFuture) + ); + } else if (withoutSuffix) { + return result + (special(number) ? forms(key)[1] : forms(key)[0]); + } else { + if (isFuture) { + return result + forms(key)[1]; + } else { + return result + (special(number) ? forms(key)[1] : forms(key)[2]); + } + } + } + hooks.defineLocale('lt', { + months: { + format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split( + '_' + ), + standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split( + '_' + ), + isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/, + }, + monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'), + weekdays: { + format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split( + '_' + ), + standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split( + '_' + ), + isFormat: /dddd HH:mm/, + }, + weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'), + weekdaysMin: 'S_P_A_T_K_Pn_Š'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'YYYY [m.] MMMM D [d.]', + LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]', + LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]', + l: 'YYYY-MM-DD', + ll: 'YYYY [m.] MMMM D [d.]', + lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]', + llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]', + }, + calendar: { + sameDay: '[Šiandien] LT', + nextDay: '[Rytoj] LT', + nextWeek: 'dddd LT', + lastDay: '[Vakar] LT', + lastWeek: '[Praėjusį] dddd LT', + sameElse: 'L', + }, + relativeTime: { + future: 'po %s', + past: 'prieš %s', + s: translateSeconds, + ss: translate$6, + m: translateSingular, + mm: translate$6, + h: translateSingular, + hh: translate$6, + d: translateSingular, + dd: translate$6, + M: translateSingular, + MM: translate$6, + y: translateSingular, + yy: translate$6, + }, + dayOfMonthOrdinalParse: /\d{1,2}-oji/, + ordinal: function (number) { + return number + '-oji'; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var units$1 = { + ss: 'sekundes_sekundēm_sekunde_sekundes'.split('_'), + m: 'minūtes_minūtēm_minūte_minūtes'.split('_'), + mm: 'minūtes_minūtēm_minūte_minūtes'.split('_'), + h: 'stundas_stundām_stunda_stundas'.split('_'), + hh: 'stundas_stundām_stunda_stundas'.split('_'), + d: 'dienas_dienām_diena_dienas'.split('_'), + dd: 'dienas_dienām_diena_dienas'.split('_'), + M: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'), + MM: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'), + y: 'gada_gadiem_gads_gadi'.split('_'), + yy: 'gada_gadiem_gads_gadi'.split('_'), + }; + /** + * @param withoutSuffix boolean true = a length of time; false = before/after a period of time. + */ + function format$1(forms, number, withoutSuffix) { + if (withoutSuffix) { + // E.g. "21 minūte", "3 minūtes". + return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3]; + } else { + // E.g. "21 minūtes" as in "pēc 21 minūtes". + // E.g. "3 minūtēm" as in "pēc 3 minūtēm". + return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1]; + } + } + function relativeTimeWithPlural$1(number, withoutSuffix, key) { + return number + ' ' + format$1(units$1[key], number, withoutSuffix); + } + function relativeTimeWithSingular(number, withoutSuffix, key) { + return format$1(units$1[key], number, withoutSuffix); + } + function relativeSeconds(number, withoutSuffix) { + return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm'; + } + + hooks.defineLocale('lv', { + months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split( + '_' + ), + monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'), + weekdays: 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split( + '_' + ), + weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'), + weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY.', + LL: 'YYYY. [gada] D. MMMM', + LLL: 'YYYY. [gada] D. MMMM, HH:mm', + LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm', + }, + calendar: { + sameDay: '[Šodien pulksten] LT', + nextDay: '[Rīt pulksten] LT', + nextWeek: 'dddd [pulksten] LT', + lastDay: '[Vakar pulksten] LT', + lastWeek: '[Pagājušā] dddd [pulksten] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'pēc %s', + past: 'pirms %s', + s: relativeSeconds, + ss: relativeTimeWithPlural$1, + m: relativeTimeWithSingular, + mm: relativeTimeWithPlural$1, + h: relativeTimeWithSingular, + hh: relativeTimeWithPlural$1, + d: relativeTimeWithSingular, + dd: relativeTimeWithPlural$1, + M: relativeTimeWithSingular, + MM: relativeTimeWithPlural$1, + y: relativeTimeWithSingular, + yy: relativeTimeWithPlural$1, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var translator = { + words: { + //Different grammatical cases + ss: ['sekund', 'sekunda', 'sekundi'], + m: ['jedan minut', 'jednog minuta'], + mm: ['minut', 'minuta', 'minuta'], + h: ['jedan sat', 'jednog sata'], + hh: ['sat', 'sata', 'sati'], + dd: ['dan', 'dana', 'dana'], + MM: ['mjesec', 'mjeseca', 'mjeseci'], + yy: ['godina', 'godine', 'godina'], + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 + ? wordKey[0] + : number >= 2 && number <= 4 + ? wordKey[1] + : wordKey[2]; + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return ( + number + + ' ' + + translator.correctGrammaticalCase(number, wordKey) + ); + } + }, + }; + + hooks.defineLocale('me', { + months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split( + '_' + ), + monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split( + '_' + ), + weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sjutra u] LT', + + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay: '[juče u] LT', + lastWeek: function () { + var lastWeekDays = [ + '[prošle] [nedjelje] [u] LT', + '[prošlog] [ponedjeljka] [u] LT', + '[prošlog] [utorka] [u] LT', + '[prošle] [srijede] [u] LT', + '[prošlog] [četvrtka] [u] LT', + '[prošlog] [petka] [u] LT', + '[prošle] [subote] [u] LT', + ]; + return lastWeekDays[this.day()]; + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: 'prije %s', + s: 'nekoliko sekundi', + ss: translator.translate, + m: translator.translate, + mm: translator.translate, + h: translator.translate, + hh: translator.translate, + d: 'dan', + dd: translator.translate, + M: 'mjesec', + MM: translator.translate, + y: 'godinu', + yy: translator.translate, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('mi', { + months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split( + '_' + ), + monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split( + '_' + ), + monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i, + weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'), + weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'), + weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [i] HH:mm', + LLLL: 'dddd, D MMMM YYYY [i] HH:mm', + }, + calendar: { + sameDay: '[i teie mahana, i] LT', + nextDay: '[apopo i] LT', + nextWeek: 'dddd [i] LT', + lastDay: '[inanahi i] LT', + lastWeek: 'dddd [whakamutunga i] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'i roto i %s', + past: '%s i mua', + s: 'te hēkona ruarua', + ss: '%d hēkona', + m: 'he meneti', + mm: '%d meneti', + h: 'te haora', + hh: '%d haora', + d: 'he ra', + dd: '%d ra', + M: 'he marama', + MM: '%d marama', + y: 'he tau', + yy: '%d tau', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('mk', { + months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split( + '_' + ), + monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'), + weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split( + '_' + ), + weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'), + weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'D.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY H:mm', + LLLL: 'dddd, D MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[Денес во] LT', + nextDay: '[Утре во] LT', + nextWeek: '[Во] dddd [во] LT', + lastDay: '[Вчера во] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 6: + return '[Изминатата] dddd [во] LT'; + case 1: + case 2: + case 4: + case 5: + return '[Изминатиот] dddd [во] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'за %s', + past: 'пред %s', + s: 'неколку секунди', + ss: '%d секунди', + m: 'една минута', + mm: '%d минути', + h: 'еден час', + hh: '%d часа', + d: 'еден ден', + dd: '%d дена', + M: 'еден месец', + MM: '%d месеци', + y: 'една година', + yy: '%d години', + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/, + ordinal: function (number) { + var lastDigit = number % 10, + last2Digits = number % 100; + if (number === 0) { + return number + '-ев'; + } else if (last2Digits === 0) { + return number + '-ен'; + } else if (last2Digits > 10 && last2Digits < 20) { + return number + '-ти'; + } else if (lastDigit === 1) { + return number + '-ви'; + } else if (lastDigit === 2) { + return number + '-ри'; + } else if (lastDigit === 7 || lastDigit === 8) { + return number + '-ми'; + } else { + return number + '-ти'; + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('ml', { + months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split( + '_' + ), + monthsShort: 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split( + '_' + ), + weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'), + weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'), + longDateFormat: { + LT: 'A h:mm -നു', + LTS: 'A h:mm:ss -നു', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm -നു', + LLLL: 'dddd, D MMMM YYYY, A h:mm -നു', + }, + calendar: { + sameDay: '[ഇന്ന്] LT', + nextDay: '[നാളെ] LT', + nextWeek: 'dddd, LT', + lastDay: '[ഇന്നലെ] LT', + lastWeek: '[കഴിഞ്ഞ] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s കഴിഞ്ഞ്', + past: '%s മുൻപ്', + s: 'അൽപ നിമിഷങ്ങൾ', + ss: '%d സെക്കൻഡ്', + m: 'ഒരു മിനിറ്റ്', + mm: '%d മിനിറ്റ്', + h: 'ഒരു മണിക്കൂർ', + hh: '%d മണിക്കൂർ', + d: 'ഒരു ദിവസം', + dd: '%d ദിവസം', + M: 'ഒരു മാസം', + MM: '%d മാസം', + y: 'ഒരു വർഷം', + yy: '%d വർഷം', + }, + meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ( + (meridiem === 'രാത്രി' && hour >= 4) || + meridiem === 'ഉച്ച കഴിഞ്ഞ്' || + meridiem === 'വൈകുന്നേരം' + ) { + return hour + 12; + } else { + return hour; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'രാത്രി'; + } else if (hour < 12) { + return 'രാവിലെ'; + } else if (hour < 17) { + return 'ഉച്ച കഴിഞ്ഞ്'; + } else if (hour < 20) { + return 'വൈകുന്നേരം'; + } else { + return 'രാത്രി'; + } + }, + }); + + //! moment.js locale configuration + + function translate$7(number, withoutSuffix, key, isFuture) { + switch (key) { + case 's': + return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын'; + case 'ss': + return number + (withoutSuffix ? ' секунд' : ' секундын'); + case 'm': + case 'mm': + return number + (withoutSuffix ? ' минут' : ' минутын'); + case 'h': + case 'hh': + return number + (withoutSuffix ? ' цаг' : ' цагийн'); + case 'd': + case 'dd': + return number + (withoutSuffix ? ' өдөр' : ' өдрийн'); + case 'M': + case 'MM': + return number + (withoutSuffix ? ' сар' : ' сарын'); + case 'y': + case 'yy': + return number + (withoutSuffix ? ' жил' : ' жилийн'); + default: + return number; + } + } + + hooks.defineLocale('mn', { + months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split( + '_' + ), + monthsShort: '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'), + weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'), + weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'YYYY оны MMMMын D', + LLL: 'YYYY оны MMMMын D HH:mm', + LLLL: 'dddd, YYYY оны MMMMын D HH:mm', + }, + meridiemParse: /ҮӨ|ҮХ/i, + isPM: function (input) { + return input === 'ҮХ'; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ҮӨ'; + } else { + return 'ҮХ'; + } + }, + calendar: { + sameDay: '[Өнөөдөр] LT', + nextDay: '[Маргааш] LT', + nextWeek: '[Ирэх] dddd LT', + lastDay: '[Өчигдөр] LT', + lastWeek: '[Өнгөрсөн] dddd LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s дараа', + past: '%s өмнө', + s: translate$7, + ss: translate$7, + m: translate$7, + mm: translate$7, + h: translate$7, + hh: translate$7, + d: translate$7, + dd: translate$7, + M: translate$7, + MM: translate$7, + y: translate$7, + yy: translate$7, + }, + dayOfMonthOrdinalParse: /\d{1,2} өдөр/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + ' өдөр'; + default: + return number; + } + }, + }); + + //! moment.js locale configuration + + var symbolMap$b = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०', + }, + numberMap$a = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0', + }; + + function relativeTimeMr(number, withoutSuffix, string, isFuture) { + var output = ''; + if (withoutSuffix) { + switch (string) { + case 's': + output = 'काही सेकंद'; + break; + case 'ss': + output = '%d सेकंद'; + break; + case 'm': + output = 'एक मिनिट'; + break; + case 'mm': + output = '%d मिनिटे'; + break; + case 'h': + output = 'एक तास'; + break; + case 'hh': + output = '%d तास'; + break; + case 'd': + output = 'एक दिवस'; + break; + case 'dd': + output = '%d दिवस'; + break; + case 'M': + output = 'एक महिना'; + break; + case 'MM': + output = '%d महिने'; + break; + case 'y': + output = 'एक वर्ष'; + break; + case 'yy': + output = '%d वर्षे'; + break; + } + } else { + switch (string) { + case 's': + output = 'काही सेकंदां'; + break; + case 'ss': + output = '%d सेकंदां'; + break; + case 'm': + output = 'एका मिनिटा'; + break; + case 'mm': + output = '%d मिनिटां'; + break; + case 'h': + output = 'एका तासा'; + break; + case 'hh': + output = '%d तासां'; + break; + case 'd': + output = 'एका दिवसा'; + break; + case 'dd': + output = '%d दिवसां'; + break; + case 'M': + output = 'एका महिन्या'; + break; + case 'MM': + output = '%d महिन्यां'; + break; + case 'y': + output = 'एका वर्षा'; + break; + case 'yy': + output = '%d वर्षां'; + break; + } + } + return output.replace(/%d/i, number); + } + + hooks.defineLocale('mr', { + months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split( + '_' + ), + monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'), + weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'), + weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'), + longDateFormat: { + LT: 'A h:mm वाजता', + LTS: 'A h:mm:ss वाजता', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm वाजता', + LLLL: 'dddd, D MMMM YYYY, A h:mm वाजता', + }, + calendar: { + sameDay: '[आज] LT', + nextDay: '[उद्या] LT', + nextWeek: 'dddd, LT', + lastDay: '[काल] LT', + lastWeek: '[मागील] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%sमध्ये', + past: '%sपूर्वी', + s: relativeTimeMr, + ss: relativeTimeMr, + m: relativeTimeMr, + mm: relativeTimeMr, + h: relativeTimeMr, + hh: relativeTimeMr, + d: relativeTimeMr, + dd: relativeTimeMr, + M: relativeTimeMr, + MM: relativeTimeMr, + y: relativeTimeMr, + yy: relativeTimeMr, + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap$a[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$b[match]; + }); + }, + meridiemParse: /पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'पहाटे' || meridiem === 'सकाळी') { + return hour; + } else if ( + meridiem === 'दुपारी' || + meridiem === 'सायंकाळी' || + meridiem === 'रात्री' + ) { + return hour >= 12 ? hour : hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour >= 0 && hour < 6) { + return 'पहाटे'; + } else if (hour < 12) { + return 'सकाळी'; + } else if (hour < 17) { + return 'दुपारी'; + } else if (hour < 20) { + return 'सायंकाळी'; + } else { + return 'रात्री'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('ms-my', { + months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), + weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), + weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), + weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [pukul] HH.mm', + LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm', + }, + meridiemParse: /pagi|tengahari|petang|malam/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'tengahari') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'petang' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'tengahari'; + } else if (hours < 19) { + return 'petang'; + } else { + return 'malam'; + } + }, + calendar: { + sameDay: '[Hari ini pukul] LT', + nextDay: '[Esok pukul] LT', + nextWeek: 'dddd [pukul] LT', + lastDay: '[Kelmarin pukul] LT', + lastWeek: 'dddd [lepas pukul] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dalam %s', + past: '%s yang lepas', + s: 'beberapa saat', + ss: '%d saat', + m: 'seminit', + mm: '%d minit', + h: 'sejam', + hh: '%d jam', + d: 'sehari', + dd: '%d hari', + M: 'sebulan', + MM: '%d bulan', + y: 'setahun', + yy: '%d tahun', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('ms', { + months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), + weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), + weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), + weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [pukul] HH.mm', + LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm', + }, + meridiemParse: /pagi|tengahari|petang|malam/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'tengahari') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'petang' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'tengahari'; + } else if (hours < 19) { + return 'petang'; + } else { + return 'malam'; + } + }, + calendar: { + sameDay: '[Hari ini pukul] LT', + nextDay: '[Esok pukul] LT', + nextWeek: 'dddd [pukul] LT', + lastDay: '[Kelmarin pukul] LT', + lastWeek: 'dddd [lepas pukul] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dalam %s', + past: '%s yang lepas', + s: 'beberapa saat', + ss: '%d saat', + m: 'seminit', + mm: '%d minit', + h: 'sejam', + hh: '%d jam', + d: 'sehari', + dd: '%d hari', + M: 'sebulan', + MM: '%d bulan', + y: 'setahun', + yy: '%d tahun', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('mt', { + months: 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split( + '_' + ), + monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'), + weekdays: 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split( + '_' + ), + weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'), + weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Illum fil-]LT', + nextDay: '[Għada fil-]LT', + nextWeek: 'dddd [fil-]LT', + lastDay: '[Il-bieraħ fil-]LT', + lastWeek: 'dddd [li għadda] [fil-]LT', + sameElse: 'L', + }, + relativeTime: { + future: 'f’ %s', + past: '%s ilu', + s: 'ftit sekondi', + ss: '%d sekondi', + m: 'minuta', + mm: '%d minuti', + h: 'siegħa', + hh: '%d siegħat', + d: 'ġurnata', + dd: '%d ġranet', + M: 'xahar', + MM: '%d xhur', + y: 'sena', + yy: '%d sni', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$c = { + '1': '၁', + '2': '၂', + '3': '၃', + '4': '၄', + '5': '၅', + '6': '၆', + '7': '၇', + '8': '၈', + '9': '၉', + '0': '၀', + }, + numberMap$b = { + '၁': '1', + '၂': '2', + '၃': '3', + '၄': '4', + '၅': '5', + '၆': '6', + '၇': '7', + '၈': '8', + '၉': '9', + '၀': '0', + }; + + hooks.defineLocale('my', { + months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split( + '_' + ), + monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'), + weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split( + '_' + ), + weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'), + weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'), + + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[ယနေ.] LT [မှာ]', + nextDay: '[မနက်ဖြန်] LT [မှာ]', + nextWeek: 'dddd LT [မှာ]', + lastDay: '[မနေ.က] LT [မှာ]', + lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]', + sameElse: 'L', + }, + relativeTime: { + future: 'လာမည့် %s မှာ', + past: 'လွန်ခဲ့သော %s က', + s: 'စက္ကန်.အနည်းငယ်', + ss: '%d စက္ကန့်', + m: 'တစ်မိနစ်', + mm: '%d မိနစ်', + h: 'တစ်နာရီ', + hh: '%d နာရီ', + d: 'တစ်ရက်', + dd: '%d ရက်', + M: 'တစ်လ', + MM: '%d လ', + y: 'တစ်နှစ်', + yy: '%d နှစ်', + }, + preparse: function (string) { + return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) { + return numberMap$b[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$c[match]; + }); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('nb', { + months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split( + '_' + ), + monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), + weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'), + weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY [kl.] HH:mm', + LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm', + }, + calendar: { + sameDay: '[i dag kl.] LT', + nextDay: '[i morgen kl.] LT', + nextWeek: 'dddd [kl.] LT', + lastDay: '[i går kl.] LT', + lastWeek: '[forrige] dddd [kl.] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'om %s', + past: '%s siden', + s: 'noen sekunder', + ss: '%d sekunder', + m: 'ett minutt', + mm: '%d minutter', + h: 'en time', + hh: '%d timer', + d: 'en dag', + dd: '%d dager', + M: 'en måned', + MM: '%d måneder', + y: 'ett år', + yy: '%d år', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$d = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०', + }, + numberMap$c = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0', + }; + + hooks.defineLocale('ne', { + months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split( + '_' + ), + monthsShort: 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split( + '_' + ), + weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'), + weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'Aको h:mm बजे', + LTS: 'Aको h:mm:ss बजे', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, Aको h:mm बजे', + LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे', + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap$c[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$d[match]; + }); + }, + meridiemParse: /राति|बिहान|दिउँसो|साँझ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'राति') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'बिहान') { + return hour; + } else if (meridiem === 'दिउँसो') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'साँझ') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 3) { + return 'राति'; + } else if (hour < 12) { + return 'बिहान'; + } else if (hour < 16) { + return 'दिउँसो'; + } else if (hour < 20) { + return 'साँझ'; + } else { + return 'राति'; + } + }, + calendar: { + sameDay: '[आज] LT', + nextDay: '[भोलि] LT', + nextWeek: '[आउँदो] dddd[,] LT', + lastDay: '[हिजो] LT', + lastWeek: '[गएको] dddd[,] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%sमा', + past: '%s अगाडि', + s: 'केही क्षण', + ss: '%d सेकेण्ड', + m: 'एक मिनेट', + mm: '%d मिनेट', + h: 'एक घण्टा', + hh: '%d घण्टा', + d: 'एक दिन', + dd: '%d दिन', + M: 'एक महिना', + MM: '%d महिना', + y: 'एक बर्ष', + yy: '%d बर्ष', + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsShortWithDots$1 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split( + '_' + ), + monthsShortWithoutDots$1 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split( + '_' + ), + monthsParse$6 = [ + /^jan/i, + /^feb/i, + /^maart|mrt.?$/i, + /^apr/i, + /^mei$/i, + /^jun[i.]?$/i, + /^jul[i.]?$/i, + /^aug/i, + /^sep/i, + /^okt/i, + /^nov/i, + /^dec/i, + ], + monthsRegex$7 = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; + + hooks.defineLocale('nl-be', { + months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split( + '_' + ), + monthsShort: function (m, format) { + if (!m) { + return monthsShortWithDots$1; + } else if (/-MMM-/.test(format)) { + return monthsShortWithoutDots$1[m.month()]; + } else { + return monthsShortWithDots$1[m.month()]; + } + }, + + monthsRegex: monthsRegex$7, + monthsShortRegex: monthsRegex$7, + monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i, + monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, + + monthsParse: monthsParse$6, + longMonthsParse: monthsParse$6, + shortMonthsParse: monthsParse$6, + + weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split( + '_' + ), + weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'), + weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[vandaag om] LT', + nextDay: '[morgen om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[gisteren om] LT', + lastWeek: '[afgelopen] dddd [om] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'over %s', + past: '%s geleden', + s: 'een paar seconden', + ss: '%d seconden', + m: 'één minuut', + mm: '%d minuten', + h: 'één uur', + hh: '%d uur', + d: 'één dag', + dd: '%d dagen', + M: 'één maand', + MM: '%d maanden', + y: 'één jaar', + yy: '%d jaar', + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal: function (number) { + return ( + number + + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de') + ); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsShortWithDots$2 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split( + '_' + ), + monthsShortWithoutDots$2 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split( + '_' + ), + monthsParse$7 = [ + /^jan/i, + /^feb/i, + /^maart|mrt.?$/i, + /^apr/i, + /^mei$/i, + /^jun[i.]?$/i, + /^jul[i.]?$/i, + /^aug/i, + /^sep/i, + /^okt/i, + /^nov/i, + /^dec/i, + ], + monthsRegex$8 = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; + + hooks.defineLocale('nl', { + months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split( + '_' + ), + monthsShort: function (m, format) { + if (!m) { + return monthsShortWithDots$2; + } else if (/-MMM-/.test(format)) { + return monthsShortWithoutDots$2[m.month()]; + } else { + return monthsShortWithDots$2[m.month()]; + } + }, + + monthsRegex: monthsRegex$8, + monthsShortRegex: monthsRegex$8, + monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i, + monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, + + monthsParse: monthsParse$7, + longMonthsParse: monthsParse$7, + shortMonthsParse: monthsParse$7, + + weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split( + '_' + ), + weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'), + weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD-MM-YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[vandaag om] LT', + nextDay: '[morgen om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[gisteren om] LT', + lastWeek: '[afgelopen] dddd [om] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'over %s', + past: '%s geleden', + s: 'een paar seconden', + ss: '%d seconden', + m: 'één minuut', + mm: '%d minuten', + h: 'één uur', + hh: '%d uur', + d: 'één dag', + dd: '%d dagen', + M: 'één maand', + MM: '%d maanden', + y: 'één jaar', + yy: '%d jaar', + }, + dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, + ordinal: function (number) { + return ( + number + + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de') + ); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('nn', { + months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split( + '_' + ), + monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'), + weekdaysShort: 'su._må._ty._on._to._fr._lau.'.split('_'), + weekdaysMin: 'su_må_ty_on_to_fr_la'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY [kl.] H:mm', + LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm', + }, + calendar: { + sameDay: '[I dag klokka] LT', + nextDay: '[I morgon klokka] LT', + nextWeek: 'dddd [klokka] LT', + lastDay: '[I går klokka] LT', + lastWeek: '[Føregåande] dddd [klokka] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'om %s', + past: '%s sidan', + s: 'nokre sekund', + ss: '%d sekund', + m: 'eit minutt', + mm: '%d minutt', + h: 'ein time', + hh: '%d timar', + d: 'ein dag', + dd: '%d dagar', + M: 'ein månad', + MM: '%d månader', + y: 'eit år', + yy: '%d år', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('oc-lnc', { + months: { + standalone: 'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split( + '_' + ), + format: "de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre".split( + '_' + ), + isFormat: /D[oD]?(\s)+MMMM/, + }, + monthsShort: 'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split( + '_' + ), + weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'), + weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM [de] YYYY', + ll: 'D MMM YYYY', + LLL: 'D MMMM [de] YYYY [a] H:mm', + lll: 'D MMM YYYY, H:mm', + LLLL: 'dddd D MMMM [de] YYYY [a] H:mm', + llll: 'ddd D MMM YYYY, H:mm', + }, + calendar: { + sameDay: '[uèi a] LT', + nextDay: '[deman a] LT', + nextWeek: 'dddd [a] LT', + lastDay: '[ièr a] LT', + lastWeek: 'dddd [passat a] LT', + sameElse: 'L', + }, + relativeTime: { + future: "d'aquí %s", + past: 'fa %s', + s: 'unas segondas', + ss: '%d segondas', + m: 'una minuta', + mm: '%d minutas', + h: 'una ora', + hh: '%d oras', + d: 'un jorn', + dd: '%d jorns', + M: 'un mes', + MM: '%d meses', + y: 'un an', + yy: '%d ans', + }, + dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/, + ordinal: function (number, period) { + var output = + number === 1 + ? 'r' + : number === 2 + ? 'n' + : number === 3 + ? 'r' + : number === 4 + ? 't' + : 'è'; + if (period === 'w' || period === 'W') { + output = 'a'; + } + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, + }, + }); + + //! moment.js locale configuration + + var symbolMap$e = { + '1': '੧', + '2': '੨', + '3': '੩', + '4': '੪', + '5': '੫', + '6': '੬', + '7': '੭', + '8': '੮', + '9': '੯', + '0': '੦', + }, + numberMap$d = { + '੧': '1', + '੨': '2', + '੩': '3', + '੪': '4', + '੫': '5', + '੬': '6', + '੭': '7', + '੮': '8', + '੯': '9', + '੦': '0', + }; + + hooks.defineLocale('pa-in', { + // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi. + months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split( + '_' + ), + monthsShort: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split( + '_' + ), + weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split( + '_' + ), + weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'), + weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'), + longDateFormat: { + LT: 'A h:mm ਵਜੇ', + LTS: 'A h:mm:ss ਵਜੇ', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm ਵਜੇ', + LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ', + }, + calendar: { + sameDay: '[ਅਜ] LT', + nextDay: '[ਕਲ] LT', + nextWeek: '[ਅਗਲਾ] dddd, LT', + lastDay: '[ਕਲ] LT', + lastWeek: '[ਪਿਛਲੇ] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s ਵਿੱਚ', + past: '%s ਪਿਛਲੇ', + s: 'ਕੁਝ ਸਕਿੰਟ', + ss: '%d ਸਕਿੰਟ', + m: 'ਇਕ ਮਿੰਟ', + mm: '%d ਮਿੰਟ', + h: 'ਇੱਕ ਘੰਟਾ', + hh: '%d ਘੰਟੇ', + d: 'ਇੱਕ ਦਿਨ', + dd: '%d ਦਿਨ', + M: 'ਇੱਕ ਮਹੀਨਾ', + MM: '%d ਮਹੀਨੇ', + y: 'ਇੱਕ ਸਾਲ', + yy: '%d ਸਾਲ', + }, + preparse: function (string) { + return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) { + return numberMap$d[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$e[match]; + }); + }, + // Punjabi notation for meridiems are quite fuzzy in practice. While there exists + // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi. + meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ਰਾਤ') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ਸਵੇਰ') { + return hour; + } else if (meridiem === 'ਦੁਪਹਿਰ') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'ਸ਼ਾਮ') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'ਰਾਤ'; + } else if (hour < 10) { + return 'ਸਵੇਰ'; + } else if (hour < 17) { + return 'ਦੁਪਹਿਰ'; + } else if (hour < 20) { + return 'ਸ਼ਾਮ'; + } else { + return 'ਰਾਤ'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split( + '_' + ), + monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split( + '_' + ); + function plural$3(n) { + return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1; + } + function translate$8(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'ss': + return result + (plural$3(number) ? 'sekundy' : 'sekund'); + case 'm': + return withoutSuffix ? 'minuta' : 'minutę'; + case 'mm': + return result + (plural$3(number) ? 'minuty' : 'minut'); + case 'h': + return withoutSuffix ? 'godzina' : 'godzinę'; + case 'hh': + return result + (plural$3(number) ? 'godziny' : 'godzin'); + case 'MM': + return result + (plural$3(number) ? 'miesiące' : 'miesięcy'); + case 'yy': + return result + (plural$3(number) ? 'lata' : 'lat'); + } + } + + hooks.defineLocale('pl', { + months: function (momentToFormat, format) { + if (!momentToFormat) { + return monthsNominative; + } else if (format === '') { + // Hack: if format empty we know this is used to generate + // RegExp by moment. Give then back both valid forms of months + // in RegExp ready format. + return ( + '(' + + monthsSubjective[momentToFormat.month()] + + '|' + + monthsNominative[momentToFormat.month()] + + ')' + ); + } else if (/D MMMM/.test(format)) { + return monthsSubjective[momentToFormat.month()]; + } else { + return monthsNominative[momentToFormat.month()]; + } + }, + monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'), + weekdays: 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split( + '_' + ), + weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'), + weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Dziś o] LT', + nextDay: '[Jutro o] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[W niedzielę o] LT'; + + case 2: + return '[We wtorek o] LT'; + + case 3: + return '[W środę o] LT'; + + case 6: + return '[W sobotę o] LT'; + + default: + return '[W] dddd [o] LT'; + } + }, + lastDay: '[Wczoraj o] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[W zeszłą niedzielę o] LT'; + case 3: + return '[W zeszłą środę o] LT'; + case 6: + return '[W zeszłą sobotę o] LT'; + default: + return '[W zeszły] dddd [o] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: '%s temu', + s: 'kilka sekund', + ss: translate$8, + m: translate$8, + mm: translate$8, + h: translate$8, + hh: translate$8, + d: '1 dzień', + dd: '%d dni', + M: 'miesiąc', + MM: translate$8, + y: 'rok', + yy: translate$8, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('pt-br', { + months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split( + '_' + ), + monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'), + weekdays: 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split( + '_' + ), + weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'), + weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY [às] HH:mm', + LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm', + }, + calendar: { + sameDay: '[Hoje às] LT', + nextDay: '[Amanhã às] LT', + nextWeek: 'dddd [às] LT', + lastDay: '[Ontem às] LT', + lastWeek: function () { + return this.day() === 0 || this.day() === 6 + ? '[Último] dddd [às] LT' // Saturday + Sunday + : '[Última] dddd [às] LT'; // Monday - Friday + }, + sameElse: 'L', + }, + relativeTime: { + future: 'em %s', + past: 'há %s', + s: 'poucos segundos', + ss: '%d segundos', + m: 'um minuto', + mm: '%d minutos', + h: 'uma hora', + hh: '%d horas', + d: 'um dia', + dd: '%d dias', + M: 'um mês', + MM: '%d meses', + y: 'um ano', + yy: '%d anos', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + }); + + //! moment.js locale configuration + + hooks.defineLocale('pt', { + months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split( + '_' + ), + monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'), + weekdays: 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split( + '_' + ), + weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'), + weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY HH:mm', + LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm', + }, + calendar: { + sameDay: '[Hoje às] LT', + nextDay: '[Amanhã às] LT', + nextWeek: 'dddd [às] LT', + lastDay: '[Ontem às] LT', + lastWeek: function () { + return this.day() === 0 || this.day() === 6 + ? '[Último] dddd [às] LT' // Saturday + Sunday + : '[Última] dddd [às] LT'; // Monday - Friday + }, + sameElse: 'L', + }, + relativeTime: { + future: 'em %s', + past: 'há %s', + s: 'segundos', + ss: '%d segundos', + m: 'um minuto', + mm: '%d minutos', + h: 'uma hora', + hh: '%d horas', + d: 'um dia', + dd: '%d dias', + M: 'um mês', + MM: '%d meses', + y: 'um ano', + yy: '%d anos', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function relativeTimeWithPlural$2(number, withoutSuffix, key) { + var format = { + ss: 'secunde', + mm: 'minute', + hh: 'ore', + dd: 'zile', + MM: 'luni', + yy: 'ani', + }, + separator = ' '; + if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) { + separator = ' de '; + } + return number + separator + format[key]; + } + + hooks.defineLocale('ro', { + months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split( + '_' + ), + monthsShort: 'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'), + weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'), + weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY H:mm', + LLLL: 'dddd, D MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[azi la] LT', + nextDay: '[mâine la] LT', + nextWeek: 'dddd [la] LT', + lastDay: '[ieri la] LT', + lastWeek: '[fosta] dddd [la] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'peste %s', + past: '%s în urmă', + s: 'câteva secunde', + ss: relativeTimeWithPlural$2, + m: 'un minut', + mm: relativeTimeWithPlural$2, + h: 'o oră', + hh: relativeTimeWithPlural$2, + d: 'o zi', + dd: relativeTimeWithPlural$2, + M: 'o lună', + MM: relativeTimeWithPlural$2, + y: 'un an', + yy: relativeTimeWithPlural$2, + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function plural$4(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 + ? forms[0] + : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) + ? forms[1] + : forms[2]; + } + function relativeTimeWithPlural$3(number, withoutSuffix, key) { + var format = { + ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд', + mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут', + hh: 'час_часа_часов', + dd: 'день_дня_дней', + MM: 'месяц_месяца_месяцев', + yy: 'год_года_лет', + }; + if (key === 'm') { + return withoutSuffix ? 'минута' : 'минуту'; + } else { + return number + ' ' + plural$4(format[key], +number); + } + } + var monthsParse$8 = [ + /^янв/i, + /^фев/i, + /^мар/i, + /^апр/i, + /^ма[йя]/i, + /^июн/i, + /^июл/i, + /^авг/i, + /^сен/i, + /^окт/i, + /^ноя/i, + /^дек/i, + ]; + + // http://new.gramota.ru/spravka/rules/139-prop : § 103 + // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637 + // CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753 + hooks.defineLocale('ru', { + months: { + format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split( + '_' + ), + standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split( + '_' + ), + }, + monthsShort: { + // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку? + format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split( + '_' + ), + standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split( + '_' + ), + }, + weekdays: { + standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split( + '_' + ), + format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split( + '_' + ), + isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/, + }, + weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'), + weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'), + monthsParse: monthsParse$8, + longMonthsParse: monthsParse$8, + shortMonthsParse: monthsParse$8, + + // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки + monthsRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i, + + // копия предыдущего + monthsShortRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i, + + // полные названия с падежами + monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i, + + // Выражение, которое соответствует только сокращённым формам + monthsShortStrictRegex: /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY г.', + LLL: 'D MMMM YYYY г., H:mm', + LLLL: 'dddd, D MMMM YYYY г., H:mm', + }, + calendar: { + sameDay: '[Сегодня, в] LT', + nextDay: '[Завтра, в] LT', + lastDay: '[Вчера, в] LT', + nextWeek: function (now) { + if (now.week() !== this.week()) { + switch (this.day()) { + case 0: + return '[В следующее] dddd, [в] LT'; + case 1: + case 2: + case 4: + return '[В следующий] dddd, [в] LT'; + case 3: + case 5: + case 6: + return '[В следующую] dddd, [в] LT'; + } + } else { + if (this.day() === 2) { + return '[Во] dddd, [в] LT'; + } else { + return '[В] dddd, [в] LT'; + } + } + }, + lastWeek: function (now) { + if (now.week() !== this.week()) { + switch (this.day()) { + case 0: + return '[В прошлое] dddd, [в] LT'; + case 1: + case 2: + case 4: + return '[В прошлый] dddd, [в] LT'; + case 3: + case 5: + case 6: + return '[В прошлую] dddd, [в] LT'; + } + } else { + if (this.day() === 2) { + return '[Во] dddd, [в] LT'; + } else { + return '[В] dddd, [в] LT'; + } + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'через %s', + past: '%s назад', + s: 'несколько секунд', + ss: relativeTimeWithPlural$3, + m: relativeTimeWithPlural$3, + mm: relativeTimeWithPlural$3, + h: 'час', + hh: relativeTimeWithPlural$3, + d: 'день', + dd: relativeTimeWithPlural$3, + M: 'месяц', + MM: relativeTimeWithPlural$3, + y: 'год', + yy: relativeTimeWithPlural$3, + }, + meridiemParse: /ночи|утра|дня|вечера/i, + isPM: function (input) { + return /^(дня|вечера)$/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'ночи'; + } else if (hour < 12) { + return 'утра'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечера'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(й|го|я)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + return number + '-й'; + case 'D': + return number + '-го'; + case 'w': + case 'W': + return number + '-я'; + default: + return number; + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var months$9 = [ + 'جنوري', + 'فيبروري', + 'مارچ', + 'اپريل', + 'مئي', + 'جون', + 'جولاءِ', + 'آگسٽ', + 'سيپٽمبر', + 'آڪٽوبر', + 'نومبر', + 'ڊسمبر', + ], + days$1 = ['آچر', 'سومر', 'اڱارو', 'اربع', 'خميس', 'جمع', 'ڇنڇر']; + + hooks.defineLocale('sd', { + months: months$9, + monthsShort: months$9, + weekdays: days$1, + weekdaysShort: days$1, + weekdaysMin: days$1, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd، D MMMM YYYY HH:mm', + }, + meridiemParse: /صبح|شام/, + isPM: function (input) { + return 'شام' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'صبح'; + } + return 'شام'; + }, + calendar: { + sameDay: '[اڄ] LT', + nextDay: '[سڀاڻي] LT', + nextWeek: 'dddd [اڳين هفتي تي] LT', + lastDay: '[ڪالهه] LT', + lastWeek: '[گزريل هفتي] dddd [تي] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s پوء', + past: '%s اڳ', + s: 'چند سيڪنڊ', + ss: '%d سيڪنڊ', + m: 'هڪ منٽ', + mm: '%d منٽ', + h: 'هڪ ڪلاڪ', + hh: '%d ڪلاڪ', + d: 'هڪ ڏينهن', + dd: '%d ڏينهن', + M: 'هڪ مهينو', + MM: '%d مهينا', + y: 'هڪ سال', + yy: '%d سال', + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('se', { + months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split( + '_' + ), + monthsShort: 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split( + '_' + ), + weekdays: 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split( + '_' + ), + weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'), + weekdaysMin: 's_v_m_g_d_b_L'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'MMMM D. [b.] YYYY', + LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm', + LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm', + }, + calendar: { + sameDay: '[otne ti] LT', + nextDay: '[ihttin ti] LT', + nextWeek: 'dddd [ti] LT', + lastDay: '[ikte ti] LT', + lastWeek: '[ovddit] dddd [ti] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s geažes', + past: 'maŋit %s', + s: 'moadde sekunddat', + ss: '%d sekunddat', + m: 'okta minuhta', + mm: '%d minuhtat', + h: 'okta diimmu', + hh: '%d diimmut', + d: 'okta beaivi', + dd: '%d beaivvit', + M: 'okta mánnu', + MM: '%d mánut', + y: 'okta jahki', + yy: '%d jagit', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + /*jshint -W100*/ + hooks.defineLocale('si', { + months: 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split( + '_' + ), + monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split( + '_' + ), + weekdays: 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split( + '_' + ), + weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'), + weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'a h:mm', + LTS: 'a h:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY MMMM D', + LLL: 'YYYY MMMM D, a h:mm', + LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss', + }, + calendar: { + sameDay: '[අද] LT[ට]', + nextDay: '[හෙට] LT[ට]', + nextWeek: 'dddd LT[ට]', + lastDay: '[ඊයේ] LT[ට]', + lastWeek: '[පසුගිය] dddd LT[ට]', + sameElse: 'L', + }, + relativeTime: { + future: '%sකින්', + past: '%sකට පෙර', + s: 'තත්පර කිහිපය', + ss: 'තත්පර %d', + m: 'මිනිත්තුව', + mm: 'මිනිත්තු %d', + h: 'පැය', + hh: 'පැය %d', + d: 'දිනය', + dd: 'දින %d', + M: 'මාසය', + MM: 'මාස %d', + y: 'වසර', + yy: 'වසර %d', + }, + dayOfMonthOrdinalParse: /\d{1,2} වැනි/, + ordinal: function (number) { + return number + ' වැනි'; + }, + meridiemParse: /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./, + isPM: function (input) { + return input === 'ප.ව.' || input === 'පස් වරු'; + }, + meridiem: function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'ප.ව.' : 'පස් වරු'; + } else { + return isLower ? 'පෙ.ව.' : 'පෙර වරු'; + } + }, + }); + + //! moment.js locale configuration + + var months$a = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split( + '_' + ), + monthsShort$6 = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_'); + function plural$5(n) { + return n > 1 && n < 5; + } + function translate$9(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': // a few seconds / in a few seconds / a few seconds ago + return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami'; + case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'sekundy' : 'sekúnd'); + } else { + return result + 'sekundami'; + } + case 'm': // a minute / in a minute / a minute ago + return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou'; + case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'minúty' : 'minút'); + } else { + return result + 'minútami'; + } + case 'h': // an hour / in an hour / an hour ago + return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou'; + case 'hh': // 9 hours / in 9 hours / 9 hours ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'hodiny' : 'hodín'); + } else { + return result + 'hodinami'; + } + case 'd': // a day / in a day / a day ago + return withoutSuffix || isFuture ? 'deň' : 'dňom'; + case 'dd': // 9 days / in 9 days / 9 days ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'dni' : 'dní'); + } else { + return result + 'dňami'; + } + case 'M': // a month / in a month / a month ago + return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom'; + case 'MM': // 9 months / in 9 months / 9 months ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'mesiace' : 'mesiacov'); + } else { + return result + 'mesiacmi'; + } + case 'y': // a year / in a year / a year ago + return withoutSuffix || isFuture ? 'rok' : 'rokom'; + case 'yy': // 9 years / in 9 years / 9 years ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'roky' : 'rokov'); + } else { + return result + 'rokmi'; + } + } + } + + hooks.defineLocale('sk', { + months: months$a, + monthsShort: monthsShort$6, + weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'), + weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'), + weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'), + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[dnes o] LT', + nextDay: '[zajtra o] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[v nedeľu o] LT'; + case 1: + case 2: + return '[v] dddd [o] LT'; + case 3: + return '[v stredu o] LT'; + case 4: + return '[vo štvrtok o] LT'; + case 5: + return '[v piatok o] LT'; + case 6: + return '[v sobotu o] LT'; + } + }, + lastDay: '[včera o] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[minulú nedeľu o] LT'; + case 1: + case 2: + return '[minulý] dddd [o] LT'; + case 3: + return '[minulú stredu o] LT'; + case 4: + case 5: + return '[minulý] dddd [o] LT'; + case 6: + return '[minulú sobotu o] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: 'pred %s', + s: translate$9, + ss: translate$9, + m: translate$9, + mm: translate$9, + h: translate$9, + hh: translate$9, + d: translate$9, + dd: translate$9, + M: translate$9, + MM: translate$9, + y: translate$9, + yy: translate$9, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function processRelativeTime$7(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': + return withoutSuffix || isFuture + ? 'nekaj sekund' + : 'nekaj sekundami'; + case 'ss': + if (number === 1) { + result += withoutSuffix ? 'sekundo' : 'sekundi'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah'; + } else { + result += 'sekund'; + } + return result; + case 'm': + return withoutSuffix ? 'ena minuta' : 'eno minuto'; + case 'mm': + if (number === 1) { + result += withoutSuffix ? 'minuta' : 'minuto'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'minuti' : 'minutama'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'minute' : 'minutami'; + } else { + result += withoutSuffix || isFuture ? 'minut' : 'minutami'; + } + return result; + case 'h': + return withoutSuffix ? 'ena ura' : 'eno uro'; + case 'hh': + if (number === 1) { + result += withoutSuffix ? 'ura' : 'uro'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'uri' : 'urama'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'ure' : 'urami'; + } else { + result += withoutSuffix || isFuture ? 'ur' : 'urami'; + } + return result; + case 'd': + return withoutSuffix || isFuture ? 'en dan' : 'enim dnem'; + case 'dd': + if (number === 1) { + result += withoutSuffix || isFuture ? 'dan' : 'dnem'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'dni' : 'dnevoma'; + } else { + result += withoutSuffix || isFuture ? 'dni' : 'dnevi'; + } + return result; + case 'M': + return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem'; + case 'MM': + if (number === 1) { + result += withoutSuffix || isFuture ? 'mesec' : 'mesecem'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'meseca' : 'mesecema'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'mesece' : 'meseci'; + } else { + result += withoutSuffix || isFuture ? 'mesecev' : 'meseci'; + } + return result; + case 'y': + return withoutSuffix || isFuture ? 'eno leto' : 'enim letom'; + case 'yy': + if (number === 1) { + result += withoutSuffix || isFuture ? 'leto' : 'letom'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'leti' : 'letoma'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'leta' : 'leti'; + } else { + result += withoutSuffix || isFuture ? 'let' : 'leti'; + } + return result; + } + } + + hooks.defineLocale('sl', { + months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split( + '_' + ), + monthsShort: 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'), + weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'), + weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD. MM. YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[danes ob] LT', + nextDay: '[jutri ob] LT', + + nextWeek: function () { + switch (this.day()) { + case 0: + return '[v] [nedeljo] [ob] LT'; + case 3: + return '[v] [sredo] [ob] LT'; + case 6: + return '[v] [soboto] [ob] LT'; + case 1: + case 2: + case 4: + case 5: + return '[v] dddd [ob] LT'; + } + }, + lastDay: '[včeraj ob] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[prejšnjo] [nedeljo] [ob] LT'; + case 3: + return '[prejšnjo] [sredo] [ob] LT'; + case 6: + return '[prejšnjo] [soboto] [ob] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prejšnji] dddd [ob] LT'; + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'čez %s', + past: 'pred %s', + s: processRelativeTime$7, + ss: processRelativeTime$7, + m: processRelativeTime$7, + mm: processRelativeTime$7, + h: processRelativeTime$7, + hh: processRelativeTime$7, + d: processRelativeTime$7, + dd: processRelativeTime$7, + M: processRelativeTime$7, + MM: processRelativeTime$7, + y: processRelativeTime$7, + yy: processRelativeTime$7, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('sq', { + months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split( + '_' + ), + monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'), + weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split( + '_' + ), + weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'), + weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'), + weekdaysParseExact: true, + meridiemParse: /PD|MD/, + isPM: function (input) { + return input.charAt(0) === 'M'; + }, + meridiem: function (hours, minutes, isLower) { + return hours < 12 ? 'PD' : 'MD'; + }, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Sot në] LT', + nextDay: '[Nesër në] LT', + nextWeek: 'dddd [në] LT', + lastDay: '[Dje në] LT', + lastWeek: 'dddd [e kaluar në] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'në %s', + past: '%s më parë', + s: 'disa sekonda', + ss: '%d sekonda', + m: 'një minutë', + mm: '%d minuta', + h: 'një orë', + hh: '%d orë', + d: 'një ditë', + dd: '%d ditë', + M: 'një muaj', + MM: '%d muaj', + y: 'një vit', + yy: '%d vite', + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var translator$1 = { + words: { + //Different grammatical cases + ss: ['секунда', 'секунде', 'секунди'], + m: ['један минут', 'једне минуте'], + mm: ['минут', 'минуте', 'минута'], + h: ['један сат', 'једног сата'], + hh: ['сат', 'сата', 'сати'], + dd: ['дан', 'дана', 'дана'], + MM: ['месец', 'месеца', 'месеци'], + yy: ['година', 'године', 'година'], + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 + ? wordKey[0] + : number >= 2 && number <= 4 + ? wordKey[1] + : wordKey[2]; + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator$1.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return ( + number + + ' ' + + translator$1.correctGrammaticalCase(number, wordKey) + ); + } + }, + }; + + hooks.defineLocale('sr-cyrl', { + months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split( + '_' + ), + monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'), + weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'), + weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[данас у] LT', + nextDay: '[сутра у] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[у] [недељу] [у] LT'; + case 3: + return '[у] [среду] [у] LT'; + case 6: + return '[у] [суботу] [у] LT'; + case 1: + case 2: + case 4: + case 5: + return '[у] dddd [у] LT'; + } + }, + lastDay: '[јуче у] LT', + lastWeek: function () { + var lastWeekDays = [ + '[прошле] [недеље] [у] LT', + '[прошлог] [понедељка] [у] LT', + '[прошлог] [уторка] [у] LT', + '[прошле] [среде] [у] LT', + '[прошлог] [четвртка] [у] LT', + '[прошлог] [петка] [у] LT', + '[прошле] [суботе] [у] LT', + ]; + return lastWeekDays[this.day()]; + }, + sameElse: 'L', + }, + relativeTime: { + future: 'за %s', + past: 'пре %s', + s: 'неколико секунди', + ss: translator$1.translate, + m: translator$1.translate, + mm: translator$1.translate, + h: translator$1.translate, + hh: translator$1.translate, + d: 'дан', + dd: translator$1.translate, + M: 'месец', + MM: translator$1.translate, + y: 'годину', + yy: translator$1.translate, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var translator$2 = { + words: { + //Different grammatical cases + ss: ['sekunda', 'sekunde', 'sekundi'], + m: ['jedan minut', 'jedne minute'], + mm: ['minut', 'minute', 'minuta'], + h: ['jedan sat', 'jednog sata'], + hh: ['sat', 'sata', 'sati'], + dd: ['dan', 'dana', 'dana'], + MM: ['mesec', 'meseca', 'meseci'], + yy: ['godina', 'godine', 'godina'], + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 + ? wordKey[0] + : number >= 2 && number <= 4 + ? wordKey[1] + : wordKey[2]; + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator$2.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return ( + number + + ' ' + + translator$2.correctGrammaticalCase(number, wordKey) + ); + } + }, + }; + + hooks.defineLocale('sr', { + months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split( + '_' + ), + monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split( + '_' + ), + weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm', + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sutra u] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedelju] [u] LT'; + case 3: + return '[u] [sredu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay: '[juče u] LT', + lastWeek: function () { + var lastWeekDays = [ + '[prošle] [nedelje] [u] LT', + '[prošlog] [ponedeljka] [u] LT', + '[prošlog] [utorka] [u] LT', + '[prošle] [srede] [u] LT', + '[prošlog] [četvrtka] [u] LT', + '[prošlog] [petka] [u] LT', + '[prošle] [subote] [u] LT', + ]; + return lastWeekDays[this.day()]; + }, + sameElse: 'L', + }, + relativeTime: { + future: 'za %s', + past: 'pre %s', + s: 'nekoliko sekundi', + ss: translator$2.translate, + m: translator$2.translate, + mm: translator$2.translate, + h: translator$2.translate, + hh: translator$2.translate, + d: 'dan', + dd: translator$2.translate, + M: 'mesec', + MM: translator$2.translate, + y: 'godinu', + yy: translator$2.translate, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('ss', { + months: "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split( + '_' + ), + monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'), + weekdays: 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split( + '_' + ), + weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'), + weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A', + }, + calendar: { + sameDay: '[Namuhla nga] LT', + nextDay: '[Kusasa nga] LT', + nextWeek: 'dddd [nga] LT', + lastDay: '[Itolo nga] LT', + lastWeek: 'dddd [leliphelile] [nga] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'nga %s', + past: 'wenteka nga %s', + s: 'emizuzwana lomcane', + ss: '%d mzuzwana', + m: 'umzuzu', + mm: '%d emizuzu', + h: 'lihora', + hh: '%d emahora', + d: 'lilanga', + dd: '%d emalanga', + M: 'inyanga', + MM: '%d tinyanga', + y: 'umnyaka', + yy: '%d iminyaka', + }, + meridiemParse: /ekuseni|emini|entsambama|ebusuku/, + meridiem: function (hours, minutes, isLower) { + if (hours < 11) { + return 'ekuseni'; + } else if (hours < 15) { + return 'emini'; + } else if (hours < 19) { + return 'entsambama'; + } else { + return 'ebusuku'; + } + }, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ekuseni') { + return hour; + } else if (meridiem === 'emini') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') { + if (hour === 0) { + return 0; + } + return hour + 12; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal: '%d', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('sv', { + months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split( + '_' + ), + monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), + weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'), + weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'), + weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [kl.] HH:mm', + LLLL: 'dddd D MMMM YYYY [kl.] HH:mm', + lll: 'D MMM YYYY HH:mm', + llll: 'ddd D MMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Idag] LT', + nextDay: '[Imorgon] LT', + lastDay: '[Igår] LT', + nextWeek: '[På] dddd LT', + lastWeek: '[I] dddd[s] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'om %s', + past: 'för %s sedan', + s: 'några sekunder', + ss: '%d sekunder', + m: 'en minut', + mm: '%d minuter', + h: 'en timme', + hh: '%d timmar', + d: 'en dag', + dd: '%d dagar', + M: 'en månad', + MM: '%d månader', + y: 'ett år', + yy: '%d år', + }, + dayOfMonthOrdinalParse: /\d{1,2}(\:e|\:a)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? ':e' + : b === 1 + ? ':a' + : b === 2 + ? ':a' + : b === 3 + ? ':e' + : ':e'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('sw', { + months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split( + '_' + ), + monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'), + weekdays: 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split( + '_' + ), + weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'), + weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'hh:mm A', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[leo saa] LT', + nextDay: '[kesho saa] LT', + nextWeek: '[wiki ijayo] dddd [saat] LT', + lastDay: '[jana] LT', + lastWeek: '[wiki iliyopita] dddd [saat] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s baadaye', + past: 'tokea %s', + s: 'hivi punde', + ss: 'sekunde %d', + m: 'dakika moja', + mm: 'dakika %d', + h: 'saa limoja', + hh: 'masaa %d', + d: 'siku moja', + dd: 'siku %d', + M: 'mwezi mmoja', + MM: 'miezi %d', + y: 'mwaka mmoja', + yy: 'miaka %d', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var symbolMap$f = { + '1': '௧', + '2': '௨', + '3': '௩', + '4': '௪', + '5': '௫', + '6': '௬', + '7': '௭', + '8': '௮', + '9': '௯', + '0': '௦', + }, + numberMap$e = { + '௧': '1', + '௨': '2', + '௩': '3', + '௪': '4', + '௫': '5', + '௬': '6', + '௭': '7', + '௮': '8', + '௯': '9', + '௦': '0', + }; + + hooks.defineLocale('ta', { + months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split( + '_' + ), + monthsShort: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split( + '_' + ), + weekdays: 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split( + '_' + ), + weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split( + '_' + ), + weekdaysMin: 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, HH:mm', + LLLL: 'dddd, D MMMM YYYY, HH:mm', + }, + calendar: { + sameDay: '[இன்று] LT', + nextDay: '[நாளை] LT', + nextWeek: 'dddd, LT', + lastDay: '[நேற்று] LT', + lastWeek: '[கடந்த வாரம்] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s இல்', + past: '%s முன்', + s: 'ஒரு சில விநாடிகள்', + ss: '%d விநாடிகள்', + m: 'ஒரு நிமிடம்', + mm: '%d நிமிடங்கள்', + h: 'ஒரு மணி நேரம்', + hh: '%d மணி நேரம்', + d: 'ஒரு நாள்', + dd: '%d நாட்கள்', + M: 'ஒரு மாதம்', + MM: '%d மாதங்கள்', + y: 'ஒரு வருடம்', + yy: '%d ஆண்டுகள்', + }, + dayOfMonthOrdinalParse: /\d{1,2}வது/, + ordinal: function (number) { + return number + 'வது'; + }, + preparse: function (string) { + return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) { + return numberMap$e[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$f[match]; + }); + }, + // refer http://ta.wikipedia.org/s/1er1 + meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/, + meridiem: function (hour, minute, isLower) { + if (hour < 2) { + return ' யாமம்'; + } else if (hour < 6) { + return ' வைகறை'; // வைகறை + } else if (hour < 10) { + return ' காலை'; // காலை + } else if (hour < 14) { + return ' நண்பகல்'; // நண்பகல் + } else if (hour < 18) { + return ' எற்பாடு'; // எற்பாடு + } else if (hour < 22) { + return ' மாலை'; // மாலை + } else { + return ' யாமம்'; + } + }, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'யாமம்') { + return hour < 2 ? hour : hour + 12; + } else if (meridiem === 'வைகறை' || meridiem === 'காலை') { + return hour; + } else if (meridiem === 'நண்பகல்') { + return hour >= 10 ? hour : hour + 12; + } else { + return hour + 12; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('te', { + months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split( + '_' + ), + monthsShort: 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split( + '_' + ), + weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'), + weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'), + longDateFormat: { + LT: 'A h:mm', + LTS: 'A h:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm', + LLLL: 'dddd, D MMMM YYYY, A h:mm', + }, + calendar: { + sameDay: '[నేడు] LT', + nextDay: '[రేపు] LT', + nextWeek: 'dddd, LT', + lastDay: '[నిన్న] LT', + lastWeek: '[గత] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s లో', + past: '%s క్రితం', + s: 'కొన్ని క్షణాలు', + ss: '%d సెకన్లు', + m: 'ఒక నిమిషం', + mm: '%d నిమిషాలు', + h: 'ఒక గంట', + hh: '%d గంటలు', + d: 'ఒక రోజు', + dd: '%d రోజులు', + M: 'ఒక నెల', + MM: '%d నెలలు', + y: 'ఒక సంవత్సరం', + yy: '%d సంవత్సరాలు', + }, + dayOfMonthOrdinalParse: /\d{1,2}వ/, + ordinal: '%dవ', + meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'రాత్రి') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ఉదయం') { + return hour; + } else if (meridiem === 'మధ్యాహ్నం') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'సాయంత్రం') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'రాత్రి'; + } else if (hour < 10) { + return 'ఉదయం'; + } else if (hour < 17) { + return 'మధ్యాహ్నం'; + } else if (hour < 20) { + return 'సాయంత్రం'; + } else { + return 'రాత్రి'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('tet', { + months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split( + '_' + ), + monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), + weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'), + weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'), + weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Ohin iha] LT', + nextDay: '[Aban iha] LT', + nextWeek: 'dddd [iha] LT', + lastDay: '[Horiseik iha] LT', + lastWeek: 'dddd [semana kotuk] [iha] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'iha %s', + past: '%s liuba', + s: 'segundu balun', + ss: 'segundu %d', + m: 'minutu ida', + mm: 'minutu %d', + h: 'oras ida', + hh: 'oras %d', + d: 'loron ida', + dd: 'loron %d', + M: 'fulan ida', + MM: 'fulan %d', + y: 'tinan ida', + yy: 'tinan %d', + }, + dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var suffixes$3 = { + 0: '-ум', + 1: '-ум', + 2: '-юм', + 3: '-юм', + 4: '-ум', + 5: '-ум', + 6: '-ум', + 7: '-ум', + 8: '-ум', + 9: '-ум', + 10: '-ум', + 12: '-ум', + 13: '-ум', + 20: '-ум', + 30: '-юм', + 40: '-ум', + 50: '-ум', + 60: '-ум', + 70: '-ум', + 80: '-ум', + 90: '-ум', + 100: '-ум', + }; + + hooks.defineLocale('tg', { + months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split( + '_' + ), + monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'), + weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split( + '_' + ), + weekdaysShort: 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'), + weekdaysMin: 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Имрӯз соати] LT', + nextDay: '[Пагоҳ соати] LT', + lastDay: '[Дирӯз соати] LT', + nextWeek: 'dddd[и] [ҳафтаи оянда соати] LT', + lastWeek: 'dddd[и] [ҳафтаи гузашта соати] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'баъди %s', + past: '%s пеш', + s: 'якчанд сония', + m: 'як дақиқа', + mm: '%d дақиқа', + h: 'як соат', + hh: '%d соат', + d: 'як рӯз', + dd: '%d рӯз', + M: 'як моҳ', + MM: '%d моҳ', + y: 'як сол', + yy: '%d сол', + }, + meridiemParse: /шаб|субҳ|рӯз|бегоҳ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'шаб') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'субҳ') { + return hour; + } else if (meridiem === 'рӯз') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'бегоҳ') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'шаб'; + } else if (hour < 11) { + return 'субҳ'; + } else if (hour < 16) { + return 'рӯз'; + } else if (hour < 19) { + return 'бегоҳ'; + } else { + return 'шаб'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(ум|юм)/, + ordinal: function (number) { + var a = number % 10, + b = number >= 100 ? 100 : null; + return number + (suffixes$3[number] || suffixes$3[a] || suffixes$3[b]); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 1th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('th', { + months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split( + '_' + ), + monthsShort: 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'), + weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference + weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY เวลา H:mm', + LLLL: 'วันddddที่ D MMMM YYYY เวลา H:mm', + }, + meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/, + isPM: function (input) { + return input === 'หลังเที่ยง'; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ก่อนเที่ยง'; + } else { + return 'หลังเที่ยง'; + } + }, + calendar: { + sameDay: '[วันนี้ เวลา] LT', + nextDay: '[พรุ่งนี้ เวลา] LT', + nextWeek: 'dddd[หน้า เวลา] LT', + lastDay: '[เมื่อวานนี้ เวลา] LT', + lastWeek: '[วัน]dddd[ที่แล้ว เวลา] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'อีก %s', + past: '%sที่แล้ว', + s: 'ไม่กี่วินาที', + ss: '%d วินาที', + m: '1 นาที', + mm: '%d นาที', + h: '1 ชั่วโมง', + hh: '%d ชั่วโมง', + d: '1 วัน', + dd: '%d วัน', + M: '1 เดือน', + MM: '%d เดือน', + y: '1 ปี', + yy: '%d ปี', + }, + }); + + //! moment.js locale configuration + + var suffixes$4 = { + 1: "'inji", + 5: "'inji", + 8: "'inji", + 70: "'inji", + 80: "'inji", + 2: "'nji", + 7: "'nji", + 20: "'nji", + 50: "'nji", + 3: "'ünji", + 4: "'ünji", + 100: "'ünji", + 6: "'njy", + 9: "'unjy", + 10: "'unjy", + 30: "'unjy", + 60: "'ynjy", + 90: "'ynjy", + }; + + hooks.defineLocale('tk', { + months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split( + '_' + ), + monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'), + weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split( + '_' + ), + weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'), + weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[bugün sagat] LT', + nextDay: '[ertir sagat] LT', + nextWeek: '[indiki] dddd [sagat] LT', + lastDay: '[düýn] LT', + lastWeek: '[geçen] dddd [sagat] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s soň', + past: '%s öň', + s: 'birnäçe sekunt', + m: 'bir minut', + mm: '%d minut', + h: 'bir sagat', + hh: '%d sagat', + d: 'bir gün', + dd: '%d gün', + M: 'bir aý', + MM: '%d aý', + y: 'bir ýyl', + yy: '%d ýyl', + }, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'Do': + case 'DD': + return number; + default: + if (number === 0) { + // special case for zero + return number + "'unjy"; + } + var a = number % 10, + b = (number % 100) - a, + c = number >= 100 ? 100 : null; + return number + (suffixes$4[a] || suffixes$4[b] || suffixes$4[c]); + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('tl-ph', { + months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split( + '_' + ), + monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'), + weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split( + '_' + ), + weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'), + weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'MM/D/YYYY', + LL: 'MMMM D, YYYY', + LLL: 'MMMM D, YYYY HH:mm', + LLLL: 'dddd, MMMM DD, YYYY HH:mm', + }, + calendar: { + sameDay: 'LT [ngayong araw]', + nextDay: '[Bukas ng] LT', + nextWeek: 'LT [sa susunod na] dddd', + lastDay: 'LT [kahapon]', + lastWeek: 'LT [noong nakaraang] dddd', + sameElse: 'L', + }, + relativeTime: { + future: 'sa loob ng %s', + past: '%s ang nakalipas', + s: 'ilang segundo', + ss: '%d segundo', + m: 'isang minuto', + mm: '%d minuto', + h: 'isang oras', + hh: '%d oras', + d: 'isang araw', + dd: '%d araw', + M: 'isang buwan', + MM: '%d buwan', + y: 'isang taon', + yy: '%d taon', + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal: function (number) { + return number; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_'); + + function translateFuture(output) { + var time = output; + time = + output.indexOf('jaj') !== -1 + ? time.slice(0, -3) + 'leS' + : output.indexOf('jar') !== -1 + ? time.slice(0, -3) + 'waQ' + : output.indexOf('DIS') !== -1 + ? time.slice(0, -3) + 'nem' + : time + ' pIq'; + return time; + } + + function translatePast(output) { + var time = output; + time = + output.indexOf('jaj') !== -1 + ? time.slice(0, -3) + 'Hu’' + : output.indexOf('jar') !== -1 + ? time.slice(0, -3) + 'wen' + : output.indexOf('DIS') !== -1 + ? time.slice(0, -3) + 'ben' + : time + ' ret'; + return time; + } + + function translate$a(number, withoutSuffix, string, isFuture) { + var numberNoun = numberAsNoun(number); + switch (string) { + case 'ss': + return numberNoun + ' lup'; + case 'mm': + return numberNoun + ' tup'; + case 'hh': + return numberNoun + ' rep'; + case 'dd': + return numberNoun + ' jaj'; + case 'MM': + return numberNoun + ' jar'; + case 'yy': + return numberNoun + ' DIS'; + } + } + + function numberAsNoun(number) { + var hundred = Math.floor((number % 1000) / 100), + ten = Math.floor((number % 100) / 10), + one = number % 10, + word = ''; + if (hundred > 0) { + word += numbersNouns[hundred] + 'vatlh'; + } + if (ten > 0) { + word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH'; + } + if (one > 0) { + word += (word !== '' ? ' ' : '') + numbersNouns[one]; + } + return word === '' ? 'pagh' : word; + } + + hooks.defineLocale('tlh', { + months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split( + '_' + ), + monthsShort: 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split( + '_' + ), + weekdaysShort: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split( + '_' + ), + weekdaysMin: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split( + '_' + ), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[DaHjaj] LT', + nextDay: '[wa’leS] LT', + nextWeek: 'LLL', + lastDay: '[wa’Hu’] LT', + lastWeek: 'LLL', + sameElse: 'L', + }, + relativeTime: { + future: translateFuture, + past: translatePast, + s: 'puS lup', + ss: translate$a, + m: 'wa’ tup', + mm: translate$a, + h: 'wa’ rep', + hh: translate$a, + d: 'wa’ jaj', + dd: translate$a, + M: 'wa’ jar', + MM: translate$a, + y: 'wa’ DIS', + yy: translate$a, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var suffixes$5 = { + 1: "'inci", + 5: "'inci", + 8: "'inci", + 70: "'inci", + 80: "'inci", + 2: "'nci", + 7: "'nci", + 20: "'nci", + 50: "'nci", + 3: "'üncü", + 4: "'üncü", + 100: "'üncü", + 6: "'ncı", + 9: "'uncu", + 10: "'uncu", + 30: "'uncu", + 60: "'ıncı", + 90: "'ıncı", + }; + + hooks.defineLocale('tr', { + months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split( + '_' + ), + monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'), + weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split( + '_' + ), + weekdaysShort: 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'), + weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'), + meridiem: function (hours, minutes, isLower) { + if (hours < 12) { + return isLower ? 'öö' : 'ÖÖ'; + } else { + return isLower ? 'ös' : 'ÖS'; + } + }, + meridiemParse: /öö|ÖÖ|ös|ÖS/, + isPM: function (input) { + return input === 'ös' || input === 'ÖS'; + }, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[bugün saat] LT', + nextDay: '[yarın saat] LT', + nextWeek: '[gelecek] dddd [saat] LT', + lastDay: '[dün] LT', + lastWeek: '[geçen] dddd [saat] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s sonra', + past: '%s önce', + s: 'birkaç saniye', + ss: '%d saniye', + m: 'bir dakika', + mm: '%d dakika', + h: 'bir saat', + hh: '%d saat', + d: 'bir gün', + dd: '%d gün', + M: 'bir ay', + MM: '%d ay', + y: 'bir yıl', + yy: '%d yıl', + }, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'Do': + case 'DD': + return number; + default: + if (number === 0) { + // special case for zero + return number + "'ıncı"; + } + var a = number % 10, + b = (number % 100) - a, + c = number >= 100 ? 100 : null; + return number + (suffixes$5[a] || suffixes$5[b] || suffixes$5[c]); + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals. + // This is currently too difficult (maybe even impossible) to add. + hooks.defineLocale('tzl', { + months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split( + '_' + ), + monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'), + weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'), + weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'), + weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'), + longDateFormat: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM [dallas] YYYY', + LLL: 'D. MMMM [dallas] YYYY HH.mm', + LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm', + }, + meridiemParse: /d\'o|d\'a/i, + isPM: function (input) { + return "d'o" === input.toLowerCase(); + }, + meridiem: function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? "d'o" : "D'O"; + } else { + return isLower ? "d'a" : "D'A"; + } + }, + calendar: { + sameDay: '[oxhi à] LT', + nextDay: '[demà à] LT', + nextWeek: 'dddd [à] LT', + lastDay: '[ieiri à] LT', + lastWeek: '[sür el] dddd [lasteu à] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'osprei %s', + past: 'ja%s', + s: processRelativeTime$8, + ss: processRelativeTime$8, + m: processRelativeTime$8, + mm: processRelativeTime$8, + h: processRelativeTime$8, + hh: processRelativeTime$8, + d: processRelativeTime$8, + dd: processRelativeTime$8, + M: processRelativeTime$8, + MM: processRelativeTime$8, + y: processRelativeTime$8, + yy: processRelativeTime$8, + }, + dayOfMonthOrdinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + function processRelativeTime$8(number, withoutSuffix, key, isFuture) { + var format = { + s: ['viensas secunds', "'iensas secunds"], + ss: [number + ' secunds', '' + number + ' secunds'], + m: ["'n míut", "'iens míut"], + mm: [number + ' míuts', '' + number + ' míuts'], + h: ["'n þora", "'iensa þora"], + hh: [number + ' þoras', '' + number + ' þoras'], + d: ["'n ziua", "'iensa ziua"], + dd: [number + ' ziuas', '' + number + ' ziuas'], + M: ["'n mes", "'iens mes"], + MM: [number + ' mesen', '' + number + ' mesen'], + y: ["'n ar", "'iens ar"], + yy: [number + ' ars', '' + number + ' ars'], + }; + return isFuture + ? format[key][0] + : withoutSuffix + ? format[key][0] + : format[key][1]; + } + + //! moment.js locale configuration + + hooks.defineLocale('tzm-latn', { + months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split( + '_' + ), + monthsShort: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split( + '_' + ), + weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[asdkh g] LT', + nextDay: '[aska g] LT', + nextWeek: 'dddd [g] LT', + lastDay: '[assant g] LT', + lastWeek: 'dddd [g] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'dadkh s yan %s', + past: 'yan %s', + s: 'imik', + ss: '%d imik', + m: 'minuḍ', + mm: '%d minuḍ', + h: 'saɛa', + hh: '%d tassaɛin', + d: 'ass', + dd: '%d ossan', + M: 'ayowr', + MM: '%d iyyirn', + y: 'asgas', + yy: '%d isgasn', + }, + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('tzm', { + months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split( + '_' + ), + monthsShort: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split( + '_' + ), + weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[ⴰⵙⴷⵅ ⴴ] LT', + nextDay: '[ⴰⵙⴽⴰ ⴴ] LT', + nextWeek: 'dddd [ⴴ] LT', + lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT', + lastWeek: 'dddd [ⴴ] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s', + past: 'ⵢⴰⵏ %s', + s: 'ⵉⵎⵉⴽ', + ss: '%d ⵉⵎⵉⴽ', + m: 'ⵎⵉⵏⵓⴺ', + mm: '%d ⵎⵉⵏⵓⴺ', + h: 'ⵙⴰⵄⴰ', + hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ', + d: 'ⴰⵙⵙ', + dd: '%d oⵙⵙⴰⵏ', + M: 'ⴰⵢoⵓⵔ', + MM: '%d ⵉⵢⵢⵉⵔⵏ', + y: 'ⴰⵙⴳⴰⵙ', + yy: '%d ⵉⵙⴳⴰⵙⵏ', + }, + week: { + dow: 6, // Saturday is the first day of the week. + doy: 12, // The week that contains Jan 12th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('ug-cn', { + months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split( + '_' + ), + monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split( + '_' + ), + weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split( + '_' + ), + weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'), + weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى', + LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm', + LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm', + }, + meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ( + meridiem === 'يېرىم كېچە' || + meridiem === 'سەھەر' || + meridiem === 'چۈشتىن بۇرۇن' + ) { + return hour; + } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') { + return hour + 12; + } else { + return hour >= 11 ? hour : hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return 'يېرىم كېچە'; + } else if (hm < 900) { + return 'سەھەر'; + } else if (hm < 1130) { + return 'چۈشتىن بۇرۇن'; + } else if (hm < 1230) { + return 'چۈش'; + } else if (hm < 1800) { + return 'چۈشتىن كېيىن'; + } else { + return 'كەچ'; + } + }, + calendar: { + sameDay: '[بۈگۈن سائەت] LT', + nextDay: '[ئەتە سائەت] LT', + nextWeek: '[كېلەركى] dddd [سائەت] LT', + lastDay: '[تۆنۈگۈن] LT', + lastWeek: '[ئالدىنقى] dddd [سائەت] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s كېيىن', + past: '%s بۇرۇن', + s: 'نەچچە سېكونت', + ss: '%d سېكونت', + m: 'بىر مىنۇت', + mm: '%d مىنۇت', + h: 'بىر سائەت', + hh: '%d سائەت', + d: 'بىر كۈن', + dd: '%d كۈن', + M: 'بىر ئاي', + MM: '%d ئاي', + y: 'بىر يىل', + yy: '%d يىل', + }, + + dayOfMonthOrdinalParse: /\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '-كۈنى'; + case 'w': + case 'W': + return number + '-ھەپتە'; + default: + return number; + } + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week: { + // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效 + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 1st is the first week of the year. + }, + }); + + //! moment.js locale configuration + + function plural$6(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 + ? forms[0] + : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) + ? forms[1] + : forms[2]; + } + function relativeTimeWithPlural$4(number, withoutSuffix, key) { + var format = { + ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд', + mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин', + hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин', + dd: 'день_дні_днів', + MM: 'місяць_місяці_місяців', + yy: 'рік_роки_років', + }; + if (key === 'm') { + return withoutSuffix ? 'хвилина' : 'хвилину'; + } else if (key === 'h') { + return withoutSuffix ? 'година' : 'годину'; + } else { + return number + ' ' + plural$6(format[key], +number); + } + } + function weekdaysCaseReplace(m, format) { + var weekdays = { + nominative: 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split( + '_' + ), + accusative: 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split( + '_' + ), + genitive: 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split( + '_' + ), + }, + nounCase; + + if (m === true) { + return weekdays['nominative'] + .slice(1, 7) + .concat(weekdays['nominative'].slice(0, 1)); + } + if (!m) { + return weekdays['nominative']; + } + + nounCase = /(\[[ВвУу]\]) ?dddd/.test(format) + ? 'accusative' + : /\[?(?:минулої|наступної)? ?\] ?dddd/.test(format) + ? 'genitive' + : 'nominative'; + return weekdays[nounCase][m.day()]; + } + function processHoursFunction(str) { + return function () { + return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT'; + }; + } + + hooks.defineLocale('uk', { + months: { + format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split( + '_' + ), + standalone: 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split( + '_' + ), + }, + monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split( + '_' + ), + weekdays: weekdaysCaseReplace, + weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY р.', + LLL: 'D MMMM YYYY р., HH:mm', + LLLL: 'dddd, D MMMM YYYY р., HH:mm', + }, + calendar: { + sameDay: processHoursFunction('[Сьогодні '), + nextDay: processHoursFunction('[Завтра '), + lastDay: processHoursFunction('[Вчора '), + nextWeek: processHoursFunction('[У] dddd ['), + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 5: + case 6: + return processHoursFunction('[Минулої] dddd [').call(this); + case 1: + case 2: + case 4: + return processHoursFunction('[Минулого] dddd [').call(this); + } + }, + sameElse: 'L', + }, + relativeTime: { + future: 'за %s', + past: '%s тому', + s: 'декілька секунд', + ss: relativeTimeWithPlural$4, + m: relativeTimeWithPlural$4, + mm: relativeTimeWithPlural$4, + h: 'годину', + hh: relativeTimeWithPlural$4, + d: 'день', + dd: relativeTimeWithPlural$4, + M: 'місяць', + MM: relativeTimeWithPlural$4, + y: 'рік', + yy: relativeTimeWithPlural$4, + }, + // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason + meridiemParse: /ночі|ранку|дня|вечора/, + isPM: function (input) { + return /^(дня|вечора)$/.test(input); + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'ночі'; + } else if (hour < 12) { + return 'ранку'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечора'; + } + }, + dayOfMonthOrdinalParse: /\d{1,2}-(й|го)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + case 'w': + case 'W': + return number + '-й'; + case 'D': + return number + '-го'; + default: + return number; + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + var months$b = [ + 'جنوری', + 'فروری', + 'مارچ', + 'اپریل', + 'مئی', + 'جون', + 'جولائی', + 'اگست', + 'ستمبر', + 'اکتوبر', + 'نومبر', + 'دسمبر', + ], + days$2 = ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'ہفتہ']; + + hooks.defineLocale('ur', { + months: months$b, + monthsShort: months$b, + weekdays: days$2, + weekdaysShort: days$2, + weekdaysMin: days$2, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd، D MMMM YYYY HH:mm', + }, + meridiemParse: /صبح|شام/, + isPM: function (input) { + return 'شام' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'صبح'; + } + return 'شام'; + }, + calendar: { + sameDay: '[آج بوقت] LT', + nextDay: '[کل بوقت] LT', + nextWeek: 'dddd [بوقت] LT', + lastDay: '[گذشتہ روز بوقت] LT', + lastWeek: '[گذشتہ] dddd [بوقت] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s بعد', + past: '%s قبل', + s: 'چند سیکنڈ', + ss: '%d سیکنڈ', + m: 'ایک منٹ', + mm: '%d منٹ', + h: 'ایک گھنٹہ', + hh: '%d گھنٹے', + d: 'ایک دن', + dd: '%d دن', + M: 'ایک ماہ', + MM: '%d ماہ', + y: 'ایک سال', + yy: '%d سال', + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('uz-latn', { + months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split( + '_' + ), + monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'), + weekdays: 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split( + '_' + ), + weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'), + weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'D MMMM YYYY, dddd HH:mm', + }, + calendar: { + sameDay: '[Bugun soat] LT [da]', + nextDay: '[Ertaga] LT [da]', + nextWeek: 'dddd [kuni soat] LT [da]', + lastDay: '[Kecha soat] LT [da]', + lastWeek: "[O'tgan] dddd [kuni soat] LT [da]", + sameElse: 'L', + }, + relativeTime: { + future: 'Yaqin %s ichida', + past: 'Bir necha %s oldin', + s: 'soniya', + ss: '%d soniya', + m: 'bir daqiqa', + mm: '%d daqiqa', + h: 'bir soat', + hh: '%d soat', + d: 'bir kun', + dd: '%d kun', + M: 'bir oy', + MM: '%d oy', + y: 'bir yil', + yy: '%d yil', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('uz', { + months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split( + '_' + ), + monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'), + weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'), + weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'), + weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'D MMMM YYYY, dddd HH:mm', + }, + calendar: { + sameDay: '[Бугун соат] LT [да]', + nextDay: '[Эртага] LT [да]', + nextWeek: 'dddd [куни соат] LT [да]', + lastDay: '[Кеча соат] LT [да]', + lastWeek: '[Утган] dddd [куни соат] LT [да]', + sameElse: 'L', + }, + relativeTime: { + future: 'Якин %s ичида', + past: 'Бир неча %s олдин', + s: 'фурсат', + ss: '%d фурсат', + m: 'бир дакика', + mm: '%d дакика', + h: 'бир соат', + hh: '%d соат', + d: 'бир кун', + dd: '%d кун', + M: 'бир ой', + MM: '%d ой', + y: 'бир йил', + yy: '%d йил', + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('vi', { + months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split( + '_' + ), + monthsShort: 'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split( + '_' + ), + weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'), + weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'), + weekdaysParseExact: true, + meridiemParse: /sa|ch/i, + isPM: function (input) { + return /^ch$/i.test(input); + }, + meridiem: function (hours, minutes, isLower) { + if (hours < 12) { + return isLower ? 'sa' : 'SA'; + } else { + return isLower ? 'ch' : 'CH'; + } + }, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM [năm] YYYY', + LLL: 'D MMMM [năm] YYYY HH:mm', + LLLL: 'dddd, D MMMM [năm] YYYY HH:mm', + l: 'DD/M/YYYY', + ll: 'D MMM YYYY', + lll: 'D MMM YYYY HH:mm', + llll: 'ddd, D MMM YYYY HH:mm', + }, + calendar: { + sameDay: '[Hôm nay lúc] LT', + nextDay: '[Ngày mai lúc] LT', + nextWeek: 'dddd [tuần tới lúc] LT', + lastDay: '[Hôm qua lúc] LT', + lastWeek: 'dddd [tuần trước lúc] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s tới', + past: '%s trước', + s: 'vài giây', + ss: '%d giây', + m: 'một phút', + mm: '%d phút', + h: 'một giờ', + hh: '%d giờ', + d: 'một ngày', + dd: '%d ngày', + M: 'một tháng', + MM: '%d tháng', + y: 'một năm', + yy: '%d năm', + }, + dayOfMonthOrdinalParse: /\d{1,2}/, + ordinal: function (number) { + return number; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('x-pseudo', { + months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split( + '_' + ), + monthsShort: 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split( + '_' + ), + monthsParseExact: true, + weekdays: 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split( + '_' + ), + weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'), + weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[T~ódá~ý át] LT', + nextDay: '[T~ómó~rró~w át] LT', + nextWeek: 'dddd [át] LT', + lastDay: '[Ý~ést~érdá~ý át] LT', + lastWeek: '[L~ást] dddd [át] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'í~ñ %s', + past: '%s á~gó', + s: 'á ~féw ~sécó~ñds', + ss: '%d s~écóñ~ds', + m: 'á ~míñ~úté', + mm: '%d m~íñú~tés', + h: 'á~ñ hó~úr', + hh: '%d h~óúrs', + d: 'á ~dáý', + dd: '%d d~áýs', + M: 'á ~móñ~th', + MM: '%d m~óñt~hs', + y: 'á ~ýéár', + yy: '%d ý~éárs', + }, + dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal: function (number) { + var b = number % 10, + output = + ~~((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('yo', { + months: 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split( + '_' + ), + monthsShort: 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'), + weekdays: 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'), + weekdaysShort: 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'), + weekdaysMin: 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'), + longDateFormat: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A', + }, + calendar: { + sameDay: '[Ònì ni] LT', + nextDay: '[Ọ̀la ni] LT', + nextWeek: "dddd [Ọsẹ̀ tón'bọ] [ni] LT", + lastDay: '[Àna ni] LT', + lastWeek: 'dddd [Ọsẹ̀ tólọ́] [ni] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'ní %s', + past: '%s kọjá', + s: 'ìsẹjú aayá die', + ss: 'aayá %d', + m: 'ìsẹjú kan', + mm: 'ìsẹjú %d', + h: 'wákati kan', + hh: 'wákati %d', + d: 'ọjọ́ kan', + dd: 'ọjọ́ %d', + M: 'osù kan', + MM: 'osù %d', + y: 'ọdún kan', + yy: 'ọdún %d', + }, + dayOfMonthOrdinalParse: /ọjọ́\s\d{1,2}/, + ordinal: 'ọjọ́ %d', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('zh-cn', { + months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split( + '_' + ), + monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split( + '_' + ), + weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'), + weekdaysMin: '日_一_二_三_四_五_六'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY年M月D日', + LLL: 'YYYY年M月D日Ah点mm分', + LLLL: 'YYYY年M月D日ddddAh点mm分', + l: 'YYYY/M/D', + ll: 'YYYY年M月D日', + lll: 'YYYY年M月D日 HH:mm', + llll: 'YYYY年M月D日dddd HH:mm', + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { + return hour; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } else { + // '中午' + return hour >= 11 ? hour : hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar: { + sameDay: '[今天]LT', + nextDay: '[明天]LT', + nextWeek: function (now) { + if (now.week() !== this.week()) { + return '[下]dddLT'; + } else { + return '[本]dddLT'; + } + }, + lastDay: '[昨天]LT', + lastWeek: function (now) { + if (this.week() !== now.week()) { + return '[上]dddLT'; + } else { + return '[本]dddLT'; + } + }, + sameElse: 'L', + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '日'; + case 'M': + return number + '月'; + case 'w': + case 'W': + return number + '周'; + default: + return number; + } + }, + relativeTime: { + future: '%s后', + past: '%s前', + s: '几秒', + ss: '%d 秒', + m: '1 分钟', + mm: '%d 分钟', + h: '1 小时', + hh: '%d 小时', + d: '1 天', + dd: '%d 天', + M: '1 个月', + MM: '%d 个月', + y: '1 年', + yy: '%d 年', + }, + week: { + // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效 + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('zh-hk', { + months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split( + '_' + ), + monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split( + '_' + ), + weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'), + weekdaysMin: '日_一_二_三_四_五_六'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY年M月D日', + LLL: 'YYYY年M月D日 HH:mm', + LLLL: 'YYYY年M月D日dddd HH:mm', + l: 'YYYY/M/D', + ll: 'YYYY年M月D日', + lll: 'YYYY年M月D日 HH:mm', + llll: 'YYYY年M月D日dddd HH:mm', + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { + return hour; + } else if (meridiem === '中午') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1200) { + return '上午'; + } else if (hm === 1200) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar: { + sameDay: '[今天]LT', + nextDay: '[明天]LT', + nextWeek: '[下]ddddLT', + lastDay: '[昨天]LT', + lastWeek: '[上]ddddLT', + sameElse: 'L', + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '日'; + case 'M': + return number + '月'; + case 'w': + case 'W': + return number + '週'; + default: + return number; + } + }, + relativeTime: { + future: '%s後', + past: '%s前', + s: '幾秒', + ss: '%d 秒', + m: '1 分鐘', + mm: '%d 分鐘', + h: '1 小時', + hh: '%d 小時', + d: '1 天', + dd: '%d 天', + M: '1 個月', + MM: '%d 個月', + y: '1 年', + yy: '%d 年', + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('zh-mo', { + months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split( + '_' + ), + monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split( + '_' + ), + weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'), + weekdaysMin: '日_一_二_三_四_五_六'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'YYYY年M月D日', + LLL: 'YYYY年M月D日 HH:mm', + LLLL: 'YYYY年M月D日dddd HH:mm', + l: 'D/M/YYYY', + ll: 'YYYY年M月D日', + lll: 'YYYY年M月D日 HH:mm', + llll: 'YYYY年M月D日dddd HH:mm', + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { + return hour; + } else if (meridiem === '中午') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar: { + sameDay: '[今天] LT', + nextDay: '[明天] LT', + nextWeek: '[下]dddd LT', + lastDay: '[昨天] LT', + lastWeek: '[上]dddd LT', + sameElse: 'L', + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '日'; + case 'M': + return number + '月'; + case 'w': + case 'W': + return number + '週'; + default: + return number; + } + }, + relativeTime: { + future: '%s內', + past: '%s前', + s: '幾秒', + ss: '%d 秒', + m: '1 分鐘', + mm: '%d 分鐘', + h: '1 小時', + hh: '%d 小時', + d: '1 天', + dd: '%d 天', + M: '1 個月', + MM: '%d 個月', + y: '1 年', + yy: '%d 年', + }, + }); + + //! moment.js locale configuration + + hooks.defineLocale('zh-tw', { + months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split( + '_' + ), + monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split( + '_' + ), + weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'), + weekdaysMin: '日_一_二_三_四_五_六'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY年M月D日', + LLL: 'YYYY年M月D日 HH:mm', + LLLL: 'YYYY年M月D日dddd HH:mm', + l: 'YYYY/M/D', + ll: 'YYYY年M月D日', + lll: 'YYYY年M月D日 HH:mm', + llll: 'YYYY年M月D日dddd HH:mm', + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { + return hour; + } else if (meridiem === '中午') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar: { + sameDay: '[今天] LT', + nextDay: '[明天] LT', + nextWeek: '[下]dddd LT', + lastDay: '[昨天] LT', + lastWeek: '[上]dddd LT', + sameElse: 'L', + }, + dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '日'; + case 'M': + return number + '月'; + case 'w': + case 'W': + return number + '週'; + default: + return number; + } + }, + relativeTime: { + future: '%s後', + past: '%s前', + s: '幾秒', + ss: '%d 秒', + m: '1 分鐘', + mm: '%d 分鐘', + h: '1 小時', + hh: '%d 小時', + d: '1 天', + dd: '%d 天', + M: '1 個月', + MM: '%d 個月', + y: '1 年', + yy: '%d 年', + }, + }); + + hooks.locale('en'); + + return hooks; + +}))); diff --git a/admin/js/vendors/moment/moment-with-locales.min.js b/admin/js/vendors/moment/moment-with-locales.min.js new file mode 100644 index 0000000..f1f8aba --- /dev/null +++ b/admin/js/vendors/moment/moment-with-locales.min.js @@ -0,0 +1,2 @@ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define(a):e.moment=a()}(this,function(){"use strict";var e,n;function M(){return e.apply(null,arguments)}function _(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function i(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function h(e,a){return Object.prototype.hasOwnProperty.call(e,a)}function o(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;for(var a in e)if(h(e,a))return;return 1}function r(e){return void 0===e}function m(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function d(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function u(e,a){for(var t=[],s=0;s>>0,s=0;sFe(e)?(r=e+1,d-Fe(e)):(r=e,d);return{year:r,dayOfYear:_}}function Ce(e,a,t){var s,n,r=Je(e.year(),a,t),d=Math.floor((e.dayOfYear()-r-1)/7)+1;return d<1?s=d+Ie(n=e.year()-1,a,t):d>Ie(e.year(),a,t)?(s=d-Ie(e.year(),a,t),n=e.year()+1):(n=e.year(),s=d),{week:s,year:n}}function Ie(e,a,t){var s=Je(e,a,t),n=Je(e+1,a,t);return(Fe(e)-s+n)/7}W("w",["ww",2],"wo","week"),W("W",["WW",2],"Wo","isoWeek"),z("week","w"),z("isoWeek","W"),C("week",5),C("isoWeek",5),le("w",ae),le("ww",ae,$),le("W",ae),le("WW",ae,$),Ye(["w","ww","W","WW"],function(e,a,t,s){a[s.substr(0,1)]=G(e)});function Ue(e,a){return e.slice(a,7).concat(e.slice(0,a))}W("d",0,"do","day"),W("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),W("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),W("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),W("e",0,0,"weekday"),W("E",0,0,"isoWeekday"),z("day","d"),z("weekday","e"),z("isoWeekday","E"),C("day",11),C("weekday",11),C("isoWeekday",11),le("d",ae),le("e",ae),le("E",ae),le("dd",function(e,a){return a.weekdaysMinRegex(e)}),le("ddd",function(e,a){return a.weekdaysShortRegex(e)}),le("dddd",function(e,a){return a.weekdaysRegex(e)}),Ye(["dd","ddd","dddd"],function(e,a,t,s){var n=t._locale.weekdaysParse(e,s,t._strict);null!=n?a.d=n:L(t).invalidWeekday=e}),Ye(["d","e","E"],function(e,a,t,s){a[s]=G(e)});var Ge="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Ve="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Be="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Ke=ue,qe=ue,Ze=ue;function $e(){function e(e,a){return a.length-e.length}for(var a,t,s,n,r=[],d=[],_=[],i=[],o=0;o<7;o++)a=c([2e3,1]).day(o),t=he(this.weekdaysMin(a,"")),s=he(this.weekdaysShort(a,"")),n=he(this.weekdays(a,"")),r.push(t),d.push(s),_.push(n),i.push(t),i.push(s),i.push(n);r.sort(e),d.sort(e),_.sort(e),i.sort(e),this._weekdaysRegex=new RegExp("^("+i.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+_.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+d.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Qe(){return this.hours()%12||12}function Xe(e,a){W(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),a)})}function ea(e,a){return a._meridiemParse}W("H",["HH",2],0,"hour"),W("h",["hh",2],0,Qe),W("k",["kk",2],0,function(){return this.hours()||24}),W("hmm",0,0,function(){return""+Qe.apply(this)+S(this.minutes(),2)}),W("hmmss",0,0,function(){return""+Qe.apply(this)+S(this.minutes(),2)+S(this.seconds(),2)}),W("Hmm",0,0,function(){return""+this.hours()+S(this.minutes(),2)}),W("Hmmss",0,0,function(){return""+this.hours()+S(this.minutes(),2)+S(this.seconds(),2)}),Xe("a",!0),Xe("A",!1),z("hour","h"),C("hour",13),le("a",ea),le("A",ea),le("H",ae),le("h",ae),le("k",ae),le("HH",ae,$),le("hh",ae,$),le("kk",ae,$),le("hmm",te),le("hmmss",se),le("Hmm",te),le("Hmmss",se),Le(["H","HH"],De),Le(["k","kk"],function(e,a,t){var s=G(e);a[De]=24===s?0:s}),Le(["a","A"],function(e,a,t){t._isPm=t._locale.isPM(e),t._meridiem=e}),Le(["h","hh"],function(e,a,t){a[De]=G(e),L(t).bigHour=!0}),Le("hmm",function(e,a,t){var s=e.length-2;a[De]=G(e.substr(0,s)),a[Te]=G(e.substr(s)),L(t).bigHour=!0}),Le("hmmss",function(e,a,t){var s=e.length-4,n=e.length-2;a[De]=G(e.substr(0,s)),a[Te]=G(e.substr(s,2)),a[ge]=G(e.substr(n)),L(t).bigHour=!0}),Le("Hmm",function(e,a,t){var s=e.length-2;a[De]=G(e.substr(0,s)),a[Te]=G(e.substr(s))}),Le("Hmmss",function(e,a,t){var s=e.length-4,n=e.length-2;a[De]=G(e.substr(0,s)),a[Te]=G(e.substr(s,2)),a[ge]=G(e.substr(n))});var aa=V("Hours",!0);var ta,sa={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Se,monthsShort:je,week:{dow:0,doy:6},weekdays:Ge,weekdaysMin:Be,weekdaysShort:Ve,meridiemParse:/[ap]\.?m?\.?/i},na={},ra={};function da(e){return e?e.toLowerCase().replace("_","-"):e}function _a(e){for(var a,t,s,n,r=0;r=a&&function(e,a){for(var t=Math.min(e.length,a.length),s=0;s=a-1)break;a--}r++}return ta}function ia(a){var e;if(void 0===na[a]&&"undefined"!=typeof module&&module&&module.exports)try{e=ta._abbr,require("./locale/"+a),oa(e)}catch(e){na[a]=null}return na[a]}function oa(e,a){var t;return e&&((t=r(a)?ua(e):ma(e,a))?ta=t:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),ta._abbr}function ma(e,a){if(null===a)return delete na[e],null;var t,s=sa;if(a.abbr=e,null!=na[e])w("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),s=na[e]._config;else if(null!=a.parentLocale)if(null!=na[a.parentLocale])s=na[a.parentLocale]._config;else{if(null==(t=ia(a.parentLocale)))return ra[a.parentLocale]||(ra[a.parentLocale]=[]),ra[a.parentLocale].push({name:e,config:a}),null;s=t._config}return na[e]=new H(b(s,a)),ra[e]&&ra[e].forEach(function(e){ma(e.name,e.config)}),oa(e),na[e]}function ua(e){var a;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return ta;if(!_(e)){if(a=ia(e))return a;e=[e]}return _a(e)}function la(e){var a,t=e._a;return t&&-2===L(e).overflow&&(a=t[pe]<0||11He(t[fe],t[pe])?ke:t[De]<0||24Ie(t,r,d)?L(e)._overflowWeeks=!0:null!=i?L(e)._overflowWeekday=!0:(_=Re(t,s,n,r,d),e._a[fe]=_.year,e._dayOfYear=_.dayOfYear)}(e),null!=e._dayOfYear&&(r=ga(e._a[fe],s[fe]),(e._dayOfYear>Fe(r)||0===e._dayOfYear)&&(L(e)._overflowDayOfYear=!0),t=Ne(r,0,e._dayOfYear),e._a[pe]=t.getUTCMonth(),e._a[ke]=t.getUTCDate()),a=0;a<3&&null==e._a[a];++a)e._a[a]=i[a]=s[a];for(;a<7;a++)e._a[a]=i[a]=null==e._a[a]?2===a?1:0:e._a[a];24===e._a[De]&&0===e._a[Te]&&0===e._a[ge]&&0===e._a[we]&&(e._nextDay=!0,e._a[De]=0),e._d=(e._useUTC?Ne:function(e,a,t,s,n,r,d){var _;return e<100&&0<=e?(_=new Date(e+400,a,t,s,n,r,d),isFinite(_.getFullYear())&&_.setFullYear(e)):_=new Date(e,a,t,s,n,r,d),_}).apply(null,i),n=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[De]=24),e._w&&void 0!==e._w.d&&e._w.d!==n&&(L(e).weekdayMismatch=!0)}}function va(e){if(e._f!==M.ISO_8601)if(e._f!==M.RFC_2822){e._a=[],L(e).empty=!0;for(var a,t,s,n,r,d,_,i=""+e._i,o=i.length,m=0,u=E(e._f,e._locale).match(j)||[],l=0;lt.valueOf():t.valueOf()"}),yt.toJSON=function(){return this.isValid()?this.toISOString():null},yt.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},yt.unix=function(){return Math.floor(this.valueOf()/1e3)},yt.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},yt.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},yt.eraName=function(){for(var e,a=this.localeData().eras(),t=0,s=a.length;tthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},yt.isLocal=function(){return!!this.isValid()&&!this._isUTC},yt.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},yt.isUtc=Ca,yt.isUTC=Ca,yt.zoneAbbr=function(){return this._isUTC?"UTC":""},yt.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},yt.dates=t("dates accessor is deprecated. Use date instead.",lt),yt.months=t("months accessor is deprecated. Use month instead",Ae),yt.years=t("years accessor is deprecated. Use year instead",ze),yt.zone=t("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,a){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,a),this):-this.utcOffset()}),yt.isDSTShifted=t("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!r(this._isDSTShifted))return this._isDSTShifted;var e,a={};return p(a,this),(a=ba(a))._a?(e=(a._isUTC?c:Sa)(a._a),this._isDSTShifted=this.isValid()&&0>> 0, + i; + + for (i = 0; i < len; i++) { + if (i in t && fun.call(this, t[i], i, t)) { + return true; + } + } + + return false; + }; + } + + function isValid(m) { + if (m._isValid == null) { + var flags = getParsingFlags(m), + parsedParts = some.call(flags.parsedDateParts, function (i) { + return i != null; + }), + isNowValid = + !isNaN(m._d.getTime()) && + flags.overflow < 0 && + !flags.empty && + !flags.invalidEra && + !flags.invalidMonth && + !flags.invalidWeekday && + !flags.weekdayMismatch && + !flags.nullInput && + !flags.invalidFormat && + !flags.userInvalidated && + (!flags.meridiem || (flags.meridiem && parsedParts)); + + if (m._strict) { + isNowValid = + isNowValid && + flags.charsLeftOver === 0 && + flags.unusedTokens.length === 0 && + flags.bigHour === undefined; + } + + if (Object.isFrozen == null || !Object.isFrozen(m)) { + m._isValid = isNowValid; + } else { + return isNowValid; + } + } + return m._isValid; + } + + function createInvalid(flags) { + var m = createUTC(NaN); + if (flags != null) { + extend(getParsingFlags(m), flags); + } else { + getParsingFlags(m).userInvalidated = true; + } + + return m; + } + + // Plugins that add properties should also add the key here (null value), + // so we can properly clone ourselves. + var momentProperties = (hooks.momentProperties = []), + updateInProgress = false; + + function copyConfig(to, from) { + var i, prop, val; + + if (!isUndefined(from._isAMomentObject)) { + to._isAMomentObject = from._isAMomentObject; + } + if (!isUndefined(from._i)) { + to._i = from._i; + } + if (!isUndefined(from._f)) { + to._f = from._f; + } + if (!isUndefined(from._l)) { + to._l = from._l; + } + if (!isUndefined(from._strict)) { + to._strict = from._strict; + } + if (!isUndefined(from._tzm)) { + to._tzm = from._tzm; + } + if (!isUndefined(from._isUTC)) { + to._isUTC = from._isUTC; + } + if (!isUndefined(from._offset)) { + to._offset = from._offset; + } + if (!isUndefined(from._pf)) { + to._pf = getParsingFlags(from); + } + if (!isUndefined(from._locale)) { + to._locale = from._locale; + } + + if (momentProperties.length > 0) { + for (i = 0; i < momentProperties.length; i++) { + prop = momentProperties[i]; + val = from[prop]; + if (!isUndefined(val)) { + to[prop] = val; + } + } + } + + return to; + } + + // Moment prototype object + function Moment(config) { + copyConfig(this, config); + this._d = new Date(config._d != null ? config._d.getTime() : NaN); + if (!this.isValid()) { + this._d = new Date(NaN); + } + // Prevent infinite loop in case updateOffset creates new moment + // objects. + if (updateInProgress === false) { + updateInProgress = true; + hooks.updateOffset(this); + updateInProgress = false; + } + } + + function isMoment(obj) { + return ( + obj instanceof Moment || (obj != null && obj._isAMomentObject != null) + ); + } + + function warn(msg) { + if ( + hooks.suppressDeprecationWarnings === false && + typeof console !== 'undefined' && + console.warn + ) { + console.warn('Deprecation warning: ' + msg); + } + } + + function deprecate(msg, fn) { + var firstTime = true; + + return extend(function () { + if (hooks.deprecationHandler != null) { + hooks.deprecationHandler(null, msg); + } + if (firstTime) { + var args = [], + arg, + i, + key; + for (i = 0; i < arguments.length; i++) { + arg = ''; + if (typeof arguments[i] === 'object') { + arg += '\n[' + i + '] '; + for (key in arguments[0]) { + if (hasOwnProp(arguments[0], key)) { + arg += key + ': ' + arguments[0][key] + ', '; + } + } + arg = arg.slice(0, -2); // Remove trailing comma and space + } else { + arg = arguments[i]; + } + args.push(arg); + } + warn( + msg + + '\nArguments: ' + + Array.prototype.slice.call(args).join('') + + '\n' + + new Error().stack + ); + firstTime = false; + } + return fn.apply(this, arguments); + }, fn); + } + + var deprecations = {}; + + function deprecateSimple(name, msg) { + if (hooks.deprecationHandler != null) { + hooks.deprecationHandler(name, msg); + } + if (!deprecations[name]) { + warn(msg); + deprecations[name] = true; + } + } + + hooks.suppressDeprecationWarnings = false; + hooks.deprecationHandler = null; + + function isFunction(input) { + return ( + (typeof Function !== 'undefined' && input instanceof Function) || + Object.prototype.toString.call(input) === '[object Function]' + ); + } + + function set(config) { + var prop, i; + for (i in config) { + if (hasOwnProp(config, i)) { + prop = config[i]; + if (isFunction(prop)) { + this[i] = prop; + } else { + this['_' + i] = prop; + } + } + } + this._config = config; + // Lenient ordinal parsing accepts just a number in addition to + // number + (possibly) stuff coming from _dayOfMonthOrdinalParse. + // TODO: Remove "ordinalParse" fallback in next major release. + this._dayOfMonthOrdinalParseLenient = new RegExp( + (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + + '|' + + /\d{1,2}/.source + ); + } + + function mergeConfigs(parentConfig, childConfig) { + var res = extend({}, parentConfig), + prop; + for (prop in childConfig) { + if (hasOwnProp(childConfig, prop)) { + if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) { + res[prop] = {}; + extend(res[prop], parentConfig[prop]); + extend(res[prop], childConfig[prop]); + } else if (childConfig[prop] != null) { + res[prop] = childConfig[prop]; + } else { + delete res[prop]; + } + } + } + for (prop in parentConfig) { + if ( + hasOwnProp(parentConfig, prop) && + !hasOwnProp(childConfig, prop) && + isObject(parentConfig[prop]) + ) { + // make sure changes to properties don't modify parent config + res[prop] = extend({}, res[prop]); + } + } + return res; + } + + function Locale(config) { + if (config != null) { + this.set(config); + } + } + + var keys; + + if (Object.keys) { + keys = Object.keys; + } else { + keys = function (obj) { + var i, + res = []; + for (i in obj) { + if (hasOwnProp(obj, i)) { + res.push(i); + } + } + return res; + }; + } + + var defaultCalendar = { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }; + + function calendar(key, mom, now) { + var output = this._calendar[key] || this._calendar['sameElse']; + return isFunction(output) ? output.call(mom, now) : output; + } + + function zeroFill(number, targetLength, forceSign) { + var absNumber = '' + Math.abs(number), + zerosToFill = targetLength - absNumber.length, + sign = number >= 0; + return ( + (sign ? (forceSign ? '+' : '') : '-') + + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + + absNumber + ); + } + + var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g, + localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, + formatFunctions = {}, + formatTokenFunctions = {}; + + // token: 'M' + // padded: ['MM', 2] + // ordinal: 'Mo' + // callback: function () { this.month() + 1 } + function addFormatToken(token, padded, ordinal, callback) { + var func = callback; + if (typeof callback === 'string') { + func = function () { + return this[callback](); + }; + } + if (token) { + formatTokenFunctions[token] = func; + } + if (padded) { + formatTokenFunctions[padded[0]] = function () { + return zeroFill(func.apply(this, arguments), padded[1], padded[2]); + }; + } + if (ordinal) { + formatTokenFunctions[ordinal] = function () { + return this.localeData().ordinal( + func.apply(this, arguments), + token + ); + }; + } + } + + function removeFormattingTokens(input) { + if (input.match(/\[[\s\S]/)) { + return input.replace(/^\[|\]$/g, ''); + } + return input.replace(/\\/g, ''); + } + + function makeFormatFunction(format) { + var array = format.match(formattingTokens), + i, + length; + + for (i = 0, length = array.length; i < length; i++) { + if (formatTokenFunctions[array[i]]) { + array[i] = formatTokenFunctions[array[i]]; + } else { + array[i] = removeFormattingTokens(array[i]); + } + } + + return function (mom) { + var output = '', + i; + for (i = 0; i < length; i++) { + output += isFunction(array[i]) + ? array[i].call(mom, format) + : array[i]; + } + return output; + }; + } + + // format date using native date object + function formatMoment(m, format) { + if (!m.isValid()) { + return m.localeData().invalidDate(); + } + + format = expandFormat(format, m.localeData()); + formatFunctions[format] = + formatFunctions[format] || makeFormatFunction(format); + + return formatFunctions[format](m); + } + + function expandFormat(format, locale) { + var i = 5; + + function replaceLongDateFormatTokens(input) { + return locale.longDateFormat(input) || input; + } + + localFormattingTokens.lastIndex = 0; + while (i >= 0 && localFormattingTokens.test(format)) { + format = format.replace( + localFormattingTokens, + replaceLongDateFormatTokens + ); + localFormattingTokens.lastIndex = 0; + i -= 1; + } + + return format; + } + + var defaultLongDateFormat = { + LTS: 'h:mm:ss A', + LT: 'h:mm A', + L: 'MM/DD/YYYY', + LL: 'MMMM D, YYYY', + LLL: 'MMMM D, YYYY h:mm A', + LLLL: 'dddd, MMMM D, YYYY h:mm A', + }; + + function longDateFormat(key) { + var format = this._longDateFormat[key], + formatUpper = this._longDateFormat[key.toUpperCase()]; + + if (format || !formatUpper) { + return format; + } + + this._longDateFormat[key] = formatUpper + .match(formattingTokens) + .map(function (tok) { + if ( + tok === 'MMMM' || + tok === 'MM' || + tok === 'DD' || + tok === 'dddd' + ) { + return tok.slice(1); + } + return tok; + }) + .join(''); + + return this._longDateFormat[key]; + } + + var defaultInvalidDate = 'Invalid date'; + + function invalidDate() { + return this._invalidDate; + } + + var defaultOrdinal = '%d', + defaultDayOfMonthOrdinalParse = /\d{1,2}/; + + function ordinal(number) { + return this._ordinal.replace('%d', number); + } + + var defaultRelativeTime = { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + w: 'a week', + ww: '%d weeks', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }; + + function relativeTime(number, withoutSuffix, string, isFuture) { + var output = this._relativeTime[string]; + return isFunction(output) + ? output(number, withoutSuffix, string, isFuture) + : output.replace(/%d/i, number); + } + + function pastFuture(diff, output) { + var format = this._relativeTime[diff > 0 ? 'future' : 'past']; + return isFunction(format) ? format(output) : format.replace(/%s/i, output); + } + + var aliases = {}; + + function addUnitAlias(unit, shorthand) { + var lowerCase = unit.toLowerCase(); + aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; + } + + function normalizeUnits(units) { + return typeof units === 'string' + ? aliases[units] || aliases[units.toLowerCase()] + : undefined; + } + + function normalizeObjectUnits(inputObject) { + var normalizedInput = {}, + normalizedProp, + prop; + + for (prop in inputObject) { + if (hasOwnProp(inputObject, prop)) { + normalizedProp = normalizeUnits(prop); + if (normalizedProp) { + normalizedInput[normalizedProp] = inputObject[prop]; + } + } + } + + return normalizedInput; + } + + var priorities = {}; + + function addUnitPriority(unit, priority) { + priorities[unit] = priority; + } + + function getPrioritizedUnits(unitsObj) { + var units = [], + u; + for (u in unitsObj) { + if (hasOwnProp(unitsObj, u)) { + units.push({ unit: u, priority: priorities[u] }); + } + } + units.sort(function (a, b) { + return a.priority - b.priority; + }); + return units; + } + + function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; + } + + function absFloor(number) { + if (number < 0) { + // -0 -> 0 + return Math.ceil(number) || 0; + } else { + return Math.floor(number); + } + } + + function toInt(argumentForCoercion) { + var coercedNumber = +argumentForCoercion, + value = 0; + + if (coercedNumber !== 0 && isFinite(coercedNumber)) { + value = absFloor(coercedNumber); + } + + return value; + } + + function makeGetSet(unit, keepTime) { + return function (value) { + if (value != null) { + set$1(this, unit, value); + hooks.updateOffset(this, keepTime); + return this; + } else { + return get(this, unit); + } + }; + } + + function get(mom, unit) { + return mom.isValid() + ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() + : NaN; + } + + function set$1(mom, unit, value) { + if (mom.isValid() && !isNaN(value)) { + if ( + unit === 'FullYear' && + isLeapYear(mom.year()) && + mom.month() === 1 && + mom.date() === 29 + ) { + value = toInt(value); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit]( + value, + mom.month(), + daysInMonth(value, mom.month()) + ); + } else { + mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); + } + } + } + + // MOMENTS + + function stringGet(units) { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](); + } + return this; + } + + function stringSet(units, value) { + if (typeof units === 'object') { + units = normalizeObjectUnits(units); + var prioritized = getPrioritizedUnits(units), + i; + for (i = 0; i < prioritized.length; i++) { + this[prioritized[i].unit](units[prioritized[i].unit]); + } + } else { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](value); + } + } + return this; + } + + var match1 = /\d/, // 0 - 9 + match2 = /\d\d/, // 00 - 99 + match3 = /\d{3}/, // 000 - 999 + match4 = /\d{4}/, // 0000 - 9999 + match6 = /[+-]?\d{6}/, // -999999 - 999999 + match1to2 = /\d\d?/, // 0 - 99 + match3to4 = /\d\d\d\d?/, // 999 - 9999 + match5to6 = /\d\d\d\d\d\d?/, // 99999 - 999999 + match1to3 = /\d{1,3}/, // 0 - 999 + match1to4 = /\d{1,4}/, // 0 - 9999 + match1to6 = /[+-]?\d{1,6}/, // -999999 - 999999 + matchUnsigned = /\d+/, // 0 - inf + matchSigned = /[+-]?\d+/, // -inf - inf + matchOffset = /Z|[+-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z + matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z + matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123 + // any word (or two) characters or numbers including two/three word month in arabic. + // includes scottish gaelic two word and hyphenated months + matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i, + regexes; + + regexes = {}; + + function addRegexToken(token, regex, strictRegex) { + regexes[token] = isFunction(regex) + ? regex + : function (isStrict, localeData) { + return isStrict && strictRegex ? strictRegex : regex; + }; + } + + function getParseRegexForToken(token, config) { + if (!hasOwnProp(regexes, token)) { + return new RegExp(unescapeFormat(token)); + } + + return regexes[token](config._strict, config._locale); + } + + // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript + function unescapeFormat(s) { + return regexEscape( + s + .replace('\\', '') + .replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function ( + matched, + p1, + p2, + p3, + p4 + ) { + return p1 || p2 || p3 || p4; + }) + ); + } + + function regexEscape(s) { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + } + + var tokens = {}; + + function addParseToken(token, callback) { + var i, + func = callback; + if (typeof token === 'string') { + token = [token]; + } + if (isNumber(callback)) { + func = function (input, array) { + array[callback] = toInt(input); + }; + } + for (i = 0; i < token.length; i++) { + tokens[token[i]] = func; + } + } + + function addWeekParseToken(token, callback) { + addParseToken(token, function (input, array, config, token) { + config._w = config._w || {}; + callback(input, config._w, config, token); + }); + } + + function addTimeToArrayFromToken(token, input, config) { + if (input != null && hasOwnProp(tokens, token)) { + tokens[token](input, config._a, config, token); + } + } + + var YEAR = 0, + MONTH = 1, + DATE = 2, + HOUR = 3, + MINUTE = 4, + SECOND = 5, + MILLISECOND = 6, + WEEK = 7, + WEEKDAY = 8; + + function mod(n, x) { + return ((n % x) + x) % x; + } + + var indexOf; + + if (Array.prototype.indexOf) { + indexOf = Array.prototype.indexOf; + } else { + indexOf = function (o) { + // I know + var i; + for (i = 0; i < this.length; ++i) { + if (this[i] === o) { + return i; + } + } + return -1; + }; + } + + function daysInMonth(year, month) { + if (isNaN(year) || isNaN(month)) { + return NaN; + } + var modMonth = mod(month, 12); + year += (month - modMonth) / 12; + return modMonth === 1 + ? isLeapYear(year) + ? 29 + : 28 + : 31 - ((modMonth % 7) % 2); + } + + // FORMATTING + + addFormatToken('M', ['MM', 2], 'Mo', function () { + return this.month() + 1; + }); + + addFormatToken('MMM', 0, 0, function (format) { + return this.localeData().monthsShort(this, format); + }); + + addFormatToken('MMMM', 0, 0, function (format) { + return this.localeData().months(this, format); + }); + + // ALIASES + + addUnitAlias('month', 'M'); + + // PRIORITY + + addUnitPriority('month', 8); + + // PARSING + + addRegexToken('M', match1to2); + addRegexToken('MM', match1to2, match2); + addRegexToken('MMM', function (isStrict, locale) { + return locale.monthsShortRegex(isStrict); + }); + addRegexToken('MMMM', function (isStrict, locale) { + return locale.monthsRegex(isStrict); + }); + + addParseToken(['M', 'MM'], function (input, array) { + array[MONTH] = toInt(input) - 1; + }); + + addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { + var month = config._locale.monthsParse(input, token, config._strict); + // if we didn't find a month name, mark the date as invalid. + if (month != null) { + array[MONTH] = month; + } else { + getParsingFlags(config).invalidMonth = input; + } + }); + + // LOCALES + + var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split( + '_' + ), + MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/, + defaultMonthsShortRegex = matchWord, + defaultMonthsRegex = matchWord; + + function localeMonths(m, format) { + if (!m) { + return isArray(this._months) + ? this._months + : this._months['standalone']; + } + return isArray(this._months) + ? this._months[m.month()] + : this._months[ + (this._months.isFormat || MONTHS_IN_FORMAT).test(format) + ? 'format' + : 'standalone' + ][m.month()]; + } + + function localeMonthsShort(m, format) { + if (!m) { + return isArray(this._monthsShort) + ? this._monthsShort + : this._monthsShort['standalone']; + } + return isArray(this._monthsShort) + ? this._monthsShort[m.month()] + : this._monthsShort[ + MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone' + ][m.month()]; + } + + function handleStrictParse(monthName, format, strict) { + var i, + ii, + mom, + llc = monthName.toLocaleLowerCase(); + if (!this._monthsParse) { + // this is not used + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + for (i = 0; i < 12; ++i) { + mom = createUTC([2000, i]); + this._shortMonthsParse[i] = this.monthsShort( + mom, + '' + ).toLocaleLowerCase(); + this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase(); + } + } + + if (strict) { + if (format === 'MMM') { + ii = indexOf.call(this._shortMonthsParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._longMonthsParse, llc); + return ii !== -1 ? ii : null; + } + } else { + if (format === 'MMM') { + ii = indexOf.call(this._shortMonthsParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._longMonthsParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._longMonthsParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortMonthsParse, llc); + return ii !== -1 ? ii : null; + } + } + } + + function localeMonthsParse(monthName, format, strict) { + var i, mom, regex; + + if (this._monthsParseExact) { + return handleStrictParse.call(this, monthName, format, strict); + } + + if (!this._monthsParse) { + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + } + + // TODO: add sorting + // Sorting makes sure if one month (or abbr) is a prefix of another + // see sorting in computeMonthsParse + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, i]); + if (strict && !this._longMonthsParse[i]) { + this._longMonthsParse[i] = new RegExp( + '^' + this.months(mom, '').replace('.', '') + '$', + 'i' + ); + this._shortMonthsParse[i] = new RegExp( + '^' + this.monthsShort(mom, '').replace('.', '') + '$', + 'i' + ); + } + if (!strict && !this._monthsParse[i]) { + regex = + '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); + this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if ( + strict && + format === 'MMMM' && + this._longMonthsParse[i].test(monthName) + ) { + return i; + } else if ( + strict && + format === 'MMM' && + this._shortMonthsParse[i].test(monthName) + ) { + return i; + } else if (!strict && this._monthsParse[i].test(monthName)) { + return i; + } + } + } + + // MOMENTS + + function setMonth(mom, value) { + var dayOfMonth; + + if (!mom.isValid()) { + // No op + return mom; + } + + if (typeof value === 'string') { + if (/^\d+$/.test(value)) { + value = toInt(value); + } else { + value = mom.localeData().monthsParse(value); + // TODO: Another silent failure? + if (!isNumber(value)) { + return mom; + } + } + } + + dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); + return mom; + } + + function getSetMonth(value) { + if (value != null) { + setMonth(this, value); + hooks.updateOffset(this, true); + return this; + } else { + return get(this, 'Month'); + } + } + + function getDaysInMonth() { + return daysInMonth(this.year(), this.month()); + } + + function monthsShortRegex(isStrict) { + if (this._monthsParseExact) { + if (!hasOwnProp(this, '_monthsRegex')) { + computeMonthsParse.call(this); + } + if (isStrict) { + return this._monthsShortStrictRegex; + } else { + return this._monthsShortRegex; + } + } else { + if (!hasOwnProp(this, '_monthsShortRegex')) { + this._monthsShortRegex = defaultMonthsShortRegex; + } + return this._monthsShortStrictRegex && isStrict + ? this._monthsShortStrictRegex + : this._monthsShortRegex; + } + } + + function monthsRegex(isStrict) { + if (this._monthsParseExact) { + if (!hasOwnProp(this, '_monthsRegex')) { + computeMonthsParse.call(this); + } + if (isStrict) { + return this._monthsStrictRegex; + } else { + return this._monthsRegex; + } + } else { + if (!hasOwnProp(this, '_monthsRegex')) { + this._monthsRegex = defaultMonthsRegex; + } + return this._monthsStrictRegex && isStrict + ? this._monthsStrictRegex + : this._monthsRegex; + } + } + + function computeMonthsParse() { + function cmpLenRev(a, b) { + return b.length - a.length; + } + + var shortPieces = [], + longPieces = [], + mixedPieces = [], + i, + mom; + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, i]); + shortPieces.push(this.monthsShort(mom, '')); + longPieces.push(this.months(mom, '')); + mixedPieces.push(this.months(mom, '')); + mixedPieces.push(this.monthsShort(mom, '')); + } + // Sorting makes sure if one month (or abbr) is a prefix of another it + // will match the longer piece. + shortPieces.sort(cmpLenRev); + longPieces.sort(cmpLenRev); + mixedPieces.sort(cmpLenRev); + for (i = 0; i < 12; i++) { + shortPieces[i] = regexEscape(shortPieces[i]); + longPieces[i] = regexEscape(longPieces[i]); + } + for (i = 0; i < 24; i++) { + mixedPieces[i] = regexEscape(mixedPieces[i]); + } + + this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._monthsShortRegex = this._monthsRegex; + this._monthsStrictRegex = new RegExp( + '^(' + longPieces.join('|') + ')', + 'i' + ); + this._monthsShortStrictRegex = new RegExp( + '^(' + shortPieces.join('|') + ')', + 'i' + ); + } + + // FORMATTING + + addFormatToken('Y', 0, 0, function () { + var y = this.year(); + return y <= 9999 ? zeroFill(y, 4) : '+' + y; + }); + + addFormatToken(0, ['YY', 2], 0, function () { + return this.year() % 100; + }); + + addFormatToken(0, ['YYYY', 4], 0, 'year'); + addFormatToken(0, ['YYYYY', 5], 0, 'year'); + addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); + + // ALIASES + + addUnitAlias('year', 'y'); + + // PRIORITIES + + addUnitPriority('year', 1); + + // PARSING + + addRegexToken('Y', matchSigned); + addRegexToken('YY', match1to2, match2); + addRegexToken('YYYY', match1to4, match4); + addRegexToken('YYYYY', match1to6, match6); + addRegexToken('YYYYYY', match1to6, match6); + + addParseToken(['YYYYY', 'YYYYYY'], YEAR); + addParseToken('YYYY', function (input, array) { + array[YEAR] = + input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input); + }); + addParseToken('YY', function (input, array) { + array[YEAR] = hooks.parseTwoDigitYear(input); + }); + addParseToken('Y', function (input, array) { + array[YEAR] = parseInt(input, 10); + }); + + // HELPERS + + function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; + } + + // HOOKS + + hooks.parseTwoDigitYear = function (input) { + return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); + }; + + // MOMENTS + + var getSetYear = makeGetSet('FullYear', true); + + function getIsLeapYear() { + return isLeapYear(this.year()); + } + + function createDate(y, m, d, h, M, s, ms) { + // can't just apply() to create a date: + // https://stackoverflow.com/q/181348 + var date; + // the date constructor remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + // preserve leap years using a full 400 year cycle, then reset + date = new Date(y + 400, m, d, h, M, s, ms); + if (isFinite(date.getFullYear())) { + date.setFullYear(y); + } + } else { + date = new Date(y, m, d, h, M, s, ms); + } + + return date; + } + + function createUTCDate(y) { + var date, args; + // the Date.UTC function remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + args = Array.prototype.slice.call(arguments); + // preserve leap years using a full 400 year cycle, then reset + args[0] = y + 400; + date = new Date(Date.UTC.apply(null, args)); + if (isFinite(date.getUTCFullYear())) { + date.setUTCFullYear(y); + } + } else { + date = new Date(Date.UTC.apply(null, arguments)); + } + + return date; + } + + // start-of-first-week - start-of-year + function firstWeekOffset(year, dow, doy) { + var // first-week day -- which january is always in the first week (4 for iso, 1 for other) + fwd = 7 + dow - doy, + // first-week day local weekday -- which local weekday is fwd + fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7; + + return -fwdlw + fwd - 1; + } + + // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday + function dayOfYearFromWeeks(year, week, weekday, dow, doy) { + var localWeekday = (7 + weekday - dow) % 7, + weekOffset = firstWeekOffset(year, dow, doy), + dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, + resYear, + resDayOfYear; + + if (dayOfYear <= 0) { + resYear = year - 1; + resDayOfYear = daysInYear(resYear) + dayOfYear; + } else if (dayOfYear > daysInYear(year)) { + resYear = year + 1; + resDayOfYear = dayOfYear - daysInYear(year); + } else { + resYear = year; + resDayOfYear = dayOfYear; + } + + return { + year: resYear, + dayOfYear: resDayOfYear, + }; + } + + function weekOfYear(mom, dow, doy) { + var weekOffset = firstWeekOffset(mom.year(), dow, doy), + week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, + resWeek, + resYear; + + if (week < 1) { + resYear = mom.year() - 1; + resWeek = week + weeksInYear(resYear, dow, doy); + } else if (week > weeksInYear(mom.year(), dow, doy)) { + resWeek = week - weeksInYear(mom.year(), dow, doy); + resYear = mom.year() + 1; + } else { + resYear = mom.year(); + resWeek = week; + } + + return { + week: resWeek, + year: resYear, + }; + } + + function weeksInYear(year, dow, doy) { + var weekOffset = firstWeekOffset(year, dow, doy), + weekOffsetNext = firstWeekOffset(year + 1, dow, doy); + return (daysInYear(year) - weekOffset + weekOffsetNext) / 7; + } + + // FORMATTING + + addFormatToken('w', ['ww', 2], 'wo', 'week'); + addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); + + // ALIASES + + addUnitAlias('week', 'w'); + addUnitAlias('isoWeek', 'W'); + + // PRIORITIES + + addUnitPriority('week', 5); + addUnitPriority('isoWeek', 5); + + // PARSING + + addRegexToken('w', match1to2); + addRegexToken('ww', match1to2, match2); + addRegexToken('W', match1to2); + addRegexToken('WW', match1to2, match2); + + addWeekParseToken(['w', 'ww', 'W', 'WW'], function ( + input, + week, + config, + token + ) { + week[token.substr(0, 1)] = toInt(input); + }); + + // HELPERS + + // LOCALES + + function localeWeek(mom) { + return weekOfYear(mom, this._week.dow, this._week.doy).week; + } + + var defaultLocaleWeek = { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }; + + function localeFirstDayOfWeek() { + return this._week.dow; + } + + function localeFirstDayOfYear() { + return this._week.doy; + } + + // MOMENTS + + function getSetWeek(input) { + var week = this.localeData().week(this); + return input == null ? week : this.add((input - week) * 7, 'd'); + } + + function getSetISOWeek(input) { + var week = weekOfYear(this, 1, 4).week; + return input == null ? week : this.add((input - week) * 7, 'd'); + } + + // FORMATTING + + addFormatToken('d', 0, 'do', 'day'); + + addFormatToken('dd', 0, 0, function (format) { + return this.localeData().weekdaysMin(this, format); + }); + + addFormatToken('ddd', 0, 0, function (format) { + return this.localeData().weekdaysShort(this, format); + }); + + addFormatToken('dddd', 0, 0, function (format) { + return this.localeData().weekdays(this, format); + }); + + addFormatToken('e', 0, 0, 'weekday'); + addFormatToken('E', 0, 0, 'isoWeekday'); + + // ALIASES + + addUnitAlias('day', 'd'); + addUnitAlias('weekday', 'e'); + addUnitAlias('isoWeekday', 'E'); + + // PRIORITY + addUnitPriority('day', 11); + addUnitPriority('weekday', 11); + addUnitPriority('isoWeekday', 11); + + // PARSING + + addRegexToken('d', match1to2); + addRegexToken('e', match1to2); + addRegexToken('E', match1to2); + addRegexToken('dd', function (isStrict, locale) { + return locale.weekdaysMinRegex(isStrict); + }); + addRegexToken('ddd', function (isStrict, locale) { + return locale.weekdaysShortRegex(isStrict); + }); + addRegexToken('dddd', function (isStrict, locale) { + return locale.weekdaysRegex(isStrict); + }); + + addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) { + var weekday = config._locale.weekdaysParse(input, token, config._strict); + // if we didn't get a weekday name, mark the date as invalid + if (weekday != null) { + week.d = weekday; + } else { + getParsingFlags(config).invalidWeekday = input; + } + }); + + addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { + week[token] = toInt(input); + }); + + // HELPERS + + function parseWeekday(input, locale) { + if (typeof input !== 'string') { + return input; + } + + if (!isNaN(input)) { + return parseInt(input, 10); + } + + input = locale.weekdaysParse(input); + if (typeof input === 'number') { + return input; + } + + return null; + } + + function parseIsoWeekday(input, locale) { + if (typeof input === 'string') { + return locale.weekdaysParse(input) % 7 || 7; + } + return isNaN(input) ? null : input; + } + + // LOCALES + function shiftWeekdays(ws, n) { + return ws.slice(n, 7).concat(ws.slice(0, n)); + } + + var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + defaultWeekdaysRegex = matchWord, + defaultWeekdaysShortRegex = matchWord, + defaultWeekdaysMinRegex = matchWord; + + function localeWeekdays(m, format) { + var weekdays = isArray(this._weekdays) + ? this._weekdays + : this._weekdays[ + m && m !== true && this._weekdays.isFormat.test(format) + ? 'format' + : 'standalone' + ]; + return m === true + ? shiftWeekdays(weekdays, this._week.dow) + : m + ? weekdays[m.day()] + : weekdays; + } + + function localeWeekdaysShort(m) { + return m === true + ? shiftWeekdays(this._weekdaysShort, this._week.dow) + : m + ? this._weekdaysShort[m.day()] + : this._weekdaysShort; + } + + function localeWeekdaysMin(m) { + return m === true + ? shiftWeekdays(this._weekdaysMin, this._week.dow) + : m + ? this._weekdaysMin[m.day()] + : this._weekdaysMin; + } + + function handleStrictParse$1(weekdayName, format, strict) { + var i, + ii, + mom, + llc = weekdayName.toLocaleLowerCase(); + if (!this._weekdaysParse) { + this._weekdaysParse = []; + this._shortWeekdaysParse = []; + this._minWeekdaysParse = []; + + for (i = 0; i < 7; ++i) { + mom = createUTC([2000, 1]).day(i); + this._minWeekdaysParse[i] = this.weekdaysMin( + mom, + '' + ).toLocaleLowerCase(); + this._shortWeekdaysParse[i] = this.weekdaysShort( + mom, + '' + ).toLocaleLowerCase(); + this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase(); + } + } + + if (strict) { + if (format === 'dddd') { + ii = indexOf.call(this._weekdaysParse, llc); + return ii !== -1 ? ii : null; + } else if (format === 'ddd') { + ii = indexOf.call(this._shortWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } + } else { + if (format === 'dddd') { + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else if (format === 'ddd') { + ii = indexOf.call(this._shortWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._minWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } + } + } + + function localeWeekdaysParse(weekdayName, format, strict) { + var i, mom, regex; + + if (this._weekdaysParseExact) { + return handleStrictParse$1.call(this, weekdayName, format, strict); + } + + if (!this._weekdaysParse) { + this._weekdaysParse = []; + this._minWeekdaysParse = []; + this._shortWeekdaysParse = []; + this._fullWeekdaysParse = []; + } + + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + + mom = createUTC([2000, 1]).day(i); + if (strict && !this._fullWeekdaysParse[i]) { + this._fullWeekdaysParse[i] = new RegExp( + '^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', + 'i' + ); + this._shortWeekdaysParse[i] = new RegExp( + '^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', + 'i' + ); + this._minWeekdaysParse[i] = new RegExp( + '^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', + 'i' + ); + } + if (!this._weekdaysParse[i]) { + regex = + '^' + + this.weekdays(mom, '') + + '|^' + + this.weekdaysShort(mom, '') + + '|^' + + this.weekdaysMin(mom, ''); + this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if ( + strict && + format === 'dddd' && + this._fullWeekdaysParse[i].test(weekdayName) + ) { + return i; + } else if ( + strict && + format === 'ddd' && + this._shortWeekdaysParse[i].test(weekdayName) + ) { + return i; + } else if ( + strict && + format === 'dd' && + this._minWeekdaysParse[i].test(weekdayName) + ) { + return i; + } else if (!strict && this._weekdaysParse[i].test(weekdayName)) { + return i; + } + } + } + + // MOMENTS + + function getSetDayOfWeek(input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); + if (input != null) { + input = parseWeekday(input, this.localeData()); + return this.add(input - day, 'd'); + } else { + return day; + } + } + + function getSetLocaleDayOfWeek(input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; + return input == null ? weekday : this.add(input - weekday, 'd'); + } + + function getSetISODayOfWeek(input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + + // behaves the same as moment#day except + // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) + // as a setter, sunday should belong to the previous week. + + if (input != null) { + var weekday = parseIsoWeekday(input, this.localeData()); + return this.day(this.day() % 7 ? weekday : weekday - 7); + } else { + return this.day() || 7; + } + } + + function weekdaysRegex(isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysStrictRegex; + } else { + return this._weekdaysRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysRegex')) { + this._weekdaysRegex = defaultWeekdaysRegex; + } + return this._weekdaysStrictRegex && isStrict + ? this._weekdaysStrictRegex + : this._weekdaysRegex; + } + } + + function weekdaysShortRegex(isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysShortStrictRegex; + } else { + return this._weekdaysShortRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysShortRegex')) { + this._weekdaysShortRegex = defaultWeekdaysShortRegex; + } + return this._weekdaysShortStrictRegex && isStrict + ? this._weekdaysShortStrictRegex + : this._weekdaysShortRegex; + } + } + + function weekdaysMinRegex(isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysMinStrictRegex; + } else { + return this._weekdaysMinRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysMinRegex')) { + this._weekdaysMinRegex = defaultWeekdaysMinRegex; + } + return this._weekdaysMinStrictRegex && isStrict + ? this._weekdaysMinStrictRegex + : this._weekdaysMinRegex; + } + } + + function computeWeekdaysParse() { + function cmpLenRev(a, b) { + return b.length - a.length; + } + + var minPieces = [], + shortPieces = [], + longPieces = [], + mixedPieces = [], + i, + mom, + minp, + shortp, + longp; + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, 1]).day(i); + minp = regexEscape(this.weekdaysMin(mom, '')); + shortp = regexEscape(this.weekdaysShort(mom, '')); + longp = regexEscape(this.weekdays(mom, '')); + minPieces.push(minp); + shortPieces.push(shortp); + longPieces.push(longp); + mixedPieces.push(minp); + mixedPieces.push(shortp); + mixedPieces.push(longp); + } + // Sorting makes sure if one weekday (or abbr) is a prefix of another it + // will match the longer piece. + minPieces.sort(cmpLenRev); + shortPieces.sort(cmpLenRev); + longPieces.sort(cmpLenRev); + mixedPieces.sort(cmpLenRev); + + this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._weekdaysShortRegex = this._weekdaysRegex; + this._weekdaysMinRegex = this._weekdaysRegex; + + this._weekdaysStrictRegex = new RegExp( + '^(' + longPieces.join('|') + ')', + 'i' + ); + this._weekdaysShortStrictRegex = new RegExp( + '^(' + shortPieces.join('|') + ')', + 'i' + ); + this._weekdaysMinStrictRegex = new RegExp( + '^(' + minPieces.join('|') + ')', + 'i' + ); + } + + // FORMATTING + + function hFormat() { + return this.hours() % 12 || 12; + } + + function kFormat() { + return this.hours() || 24; + } + + addFormatToken('H', ['HH', 2], 0, 'hour'); + addFormatToken('h', ['hh', 2], 0, hFormat); + addFormatToken('k', ['kk', 2], 0, kFormat); + + addFormatToken('hmm', 0, 0, function () { + return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2); + }); + + addFormatToken('hmmss', 0, 0, function () { + return ( + '' + + hFormat.apply(this) + + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2) + ); + }); + + addFormatToken('Hmm', 0, 0, function () { + return '' + this.hours() + zeroFill(this.minutes(), 2); + }); + + addFormatToken('Hmmss', 0, 0, function () { + return ( + '' + + this.hours() + + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2) + ); + }); + + function meridiem(token, lowercase) { + addFormatToken(token, 0, 0, function () { + return this.localeData().meridiem( + this.hours(), + this.minutes(), + lowercase + ); + }); + } + + meridiem('a', true); + meridiem('A', false); + + // ALIASES + + addUnitAlias('hour', 'h'); + + // PRIORITY + addUnitPriority('hour', 13); + + // PARSING + + function matchMeridiem(isStrict, locale) { + return locale._meridiemParse; + } + + addRegexToken('a', matchMeridiem); + addRegexToken('A', matchMeridiem); + addRegexToken('H', match1to2); + addRegexToken('h', match1to2); + addRegexToken('k', match1to2); + addRegexToken('HH', match1to2, match2); + addRegexToken('hh', match1to2, match2); + addRegexToken('kk', match1to2, match2); + + addRegexToken('hmm', match3to4); + addRegexToken('hmmss', match5to6); + addRegexToken('Hmm', match3to4); + addRegexToken('Hmmss', match5to6); + + addParseToken(['H', 'HH'], HOUR); + addParseToken(['k', 'kk'], function (input, array, config) { + var kInput = toInt(input); + array[HOUR] = kInput === 24 ? 0 : kInput; + }); + addParseToken(['a', 'A'], function (input, array, config) { + config._isPm = config._locale.isPM(input); + config._meridiem = input; + }); + addParseToken(['h', 'hh'], function (input, array, config) { + array[HOUR] = toInt(input); + getParsingFlags(config).bigHour = true; + }); + addParseToken('hmm', function (input, array, config) { + var pos = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos)); + array[MINUTE] = toInt(input.substr(pos)); + getParsingFlags(config).bigHour = true; + }); + addParseToken('hmmss', function (input, array, config) { + var pos1 = input.length - 4, + pos2 = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos1)); + array[MINUTE] = toInt(input.substr(pos1, 2)); + array[SECOND] = toInt(input.substr(pos2)); + getParsingFlags(config).bigHour = true; + }); + addParseToken('Hmm', function (input, array, config) { + var pos = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos)); + array[MINUTE] = toInt(input.substr(pos)); + }); + addParseToken('Hmmss', function (input, array, config) { + var pos1 = input.length - 4, + pos2 = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos1)); + array[MINUTE] = toInt(input.substr(pos1, 2)); + array[SECOND] = toInt(input.substr(pos2)); + }); + + // LOCALES + + function localeIsPM(input) { + // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays + // Using charAt should be more compatible. + return (input + '').toLowerCase().charAt(0) === 'p'; + } + + var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i, + // Setting the hour should keep the time, because the user explicitly + // specified which hour they want. So trying to maintain the same hour (in + // a new timezone) makes sense. Adding/subtracting hours does not follow + // this rule. + getSetHour = makeGetSet('Hours', true); + + function localeMeridiem(hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'pm' : 'PM'; + } else { + return isLower ? 'am' : 'AM'; + } + } + + var baseConfig = { + calendar: defaultCalendar, + longDateFormat: defaultLongDateFormat, + invalidDate: defaultInvalidDate, + ordinal: defaultOrdinal, + dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse, + relativeTime: defaultRelativeTime, + + months: defaultLocaleMonths, + monthsShort: defaultLocaleMonthsShort, + + week: defaultLocaleWeek, + + weekdays: defaultLocaleWeekdays, + weekdaysMin: defaultLocaleWeekdaysMin, + weekdaysShort: defaultLocaleWeekdaysShort, + + meridiemParse: defaultLocaleMeridiemParse, + }; + + // internal storage for locale config files + var locales = {}, + localeFamilies = {}, + globalLocale; + + function commonPrefix(arr1, arr2) { + var i, + minl = Math.min(arr1.length, arr2.length); + for (i = 0; i < minl; i += 1) { + if (arr1[i] !== arr2[i]) { + return i; + } + } + return minl; + } + + function normalizeLocale(key) { + return key ? key.toLowerCase().replace('_', '-') : key; + } + + // pick the locale from the array + // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each + // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root + function chooseLocale(names) { + var i = 0, + j, + next, + locale, + split; + + while (i < names.length) { + split = normalizeLocale(names[i]).split('-'); + j = split.length; + next = normalizeLocale(names[i + 1]); + next = next ? next.split('-') : null; + while (j > 0) { + locale = loadLocale(split.slice(0, j).join('-')); + if (locale) { + return locale; + } + if ( + next && + next.length >= j && + commonPrefix(split, next) >= j - 1 + ) { + //the next array item is better than a shallower substring of this one + break; + } + j--; + } + i++; + } + return globalLocale; + } + + function loadLocale(name) { + var oldLocale = null, + aliasedRequire; + // TODO: Find a better way to register and load all the locales in Node + if ( + locales[name] === undefined && + typeof module !== 'undefined' && + module && + module.exports + ) { + try { + oldLocale = globalLocale._abbr; + aliasedRequire = require; + aliasedRequire('./locale/' + name); + getSetGlobalLocale(oldLocale); + } catch (e) { + // mark as not found to avoid repeating expensive file require call causing high CPU + // when trying to find en-US, en_US, en-us for every format call + locales[name] = null; // null means not found + } + } + return locales[name]; + } + + // This function will load locale and then set the global locale. If + // no arguments are passed in, it will simply return the current global + // locale key. + function getSetGlobalLocale(key, values) { + var data; + if (key) { + if (isUndefined(values)) { + data = getLocale(key); + } else { + data = defineLocale(key, values); + } + + if (data) { + // moment.duration._locale = moment._locale = data; + globalLocale = data; + } else { + if (typeof console !== 'undefined' && console.warn) { + //warn user if arguments are passed but the locale could not be set + console.warn( + 'Locale ' + key + ' not found. Did you forget to load it?' + ); + } + } + } + + return globalLocale._abbr; + } + + function defineLocale(name, config) { + if (config !== null) { + var locale, + parentConfig = baseConfig; + config.abbr = name; + if (locales[name] != null) { + deprecateSimple( + 'defineLocaleOverride', + 'use moment.updateLocale(localeName, config) to change ' + + 'an existing locale. moment.defineLocale(localeName, ' + + 'config) should only be used for creating a new locale ' + + 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.' + ); + parentConfig = locales[name]._config; + } else if (config.parentLocale != null) { + if (locales[config.parentLocale] != null) { + parentConfig = locales[config.parentLocale]._config; + } else { + locale = loadLocale(config.parentLocale); + if (locale != null) { + parentConfig = locale._config; + } else { + if (!localeFamilies[config.parentLocale]) { + localeFamilies[config.parentLocale] = []; + } + localeFamilies[config.parentLocale].push({ + name: name, + config: config, + }); + return null; + } + } + } + locales[name] = new Locale(mergeConfigs(parentConfig, config)); + + if (localeFamilies[name]) { + localeFamilies[name].forEach(function (x) { + defineLocale(x.name, x.config); + }); + } + + // backwards compat for now: also set the locale + // make sure we set the locale AFTER all child locales have been + // created, so we won't end up with the child locale set. + getSetGlobalLocale(name); + + return locales[name]; + } else { + // useful for testing + delete locales[name]; + return null; + } + } + + function updateLocale(name, config) { + if (config != null) { + var locale, + tmpLocale, + parentConfig = baseConfig; + + if (locales[name] != null && locales[name].parentLocale != null) { + // Update existing child locale in-place to avoid memory-leaks + locales[name].set(mergeConfigs(locales[name]._config, config)); + } else { + // MERGE + tmpLocale = loadLocale(name); + if (tmpLocale != null) { + parentConfig = tmpLocale._config; + } + config = mergeConfigs(parentConfig, config); + if (tmpLocale == null) { + // updateLocale is called for creating a new locale + // Set abbr so it will have a name (getters return + // undefined otherwise). + config.abbr = name; + } + locale = new Locale(config); + locale.parentLocale = locales[name]; + locales[name] = locale; + } + + // backwards compat for now: also set the locale + getSetGlobalLocale(name); + } else { + // pass null for config to unupdate, useful for tests + if (locales[name] != null) { + if (locales[name].parentLocale != null) { + locales[name] = locales[name].parentLocale; + if (name === getSetGlobalLocale()) { + getSetGlobalLocale(name); + } + } else if (locales[name] != null) { + delete locales[name]; + } + } + } + return locales[name]; + } + + // returns locale data + function getLocale(key) { + var locale; + + if (key && key._locale && key._locale._abbr) { + key = key._locale._abbr; + } + + if (!key) { + return globalLocale; + } + + if (!isArray(key)) { + //short-circuit everything else + locale = loadLocale(key); + if (locale) { + return locale; + } + key = [key]; + } + + return chooseLocale(key); + } + + function listLocales() { + return keys(locales); + } + + function checkOverflow(m) { + var overflow, + a = m._a; + + if (a && getParsingFlags(m).overflow === -2) { + overflow = + a[MONTH] < 0 || a[MONTH] > 11 + ? MONTH + : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) + ? DATE + : a[HOUR] < 0 || + a[HOUR] > 24 || + (a[HOUR] === 24 && + (a[MINUTE] !== 0 || + a[SECOND] !== 0 || + a[MILLISECOND] !== 0)) + ? HOUR + : a[MINUTE] < 0 || a[MINUTE] > 59 + ? MINUTE + : a[SECOND] < 0 || a[SECOND] > 59 + ? SECOND + : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 + ? MILLISECOND + : -1; + + if ( + getParsingFlags(m)._overflowDayOfYear && + (overflow < YEAR || overflow > DATE) + ) { + overflow = DATE; + } + if (getParsingFlags(m)._overflowWeeks && overflow === -1) { + overflow = WEEK; + } + if (getParsingFlags(m)._overflowWeekday && overflow === -1) { + overflow = WEEKDAY; + } + + getParsingFlags(m).overflow = overflow; + } + + return m; + } + + // iso 8601 regex + // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) + var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, + basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, + tzRegex = /Z|[+-]\d\d(?::?\d\d)?/, + isoDates = [ + ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/], + ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/], + ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/], + ['GGGG-[W]WW', /\d{4}-W\d\d/, false], + ['YYYY-DDD', /\d{4}-\d{3}/], + ['YYYY-MM', /\d{4}-\d\d/, false], + ['YYYYYYMMDD', /[+-]\d{10}/], + ['YYYYMMDD', /\d{8}/], + ['GGGG[W]WWE', /\d{4}W\d{3}/], + ['GGGG[W]WW', /\d{4}W\d{2}/, false], + ['YYYYDDD', /\d{7}/], + ['YYYYMM', /\d{6}/, false], + ['YYYY', /\d{4}/, false], + ], + // iso time formats and regexes + isoTimes = [ + ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/], + ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/], + ['HH:mm:ss', /\d\d:\d\d:\d\d/], + ['HH:mm', /\d\d:\d\d/], + ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/], + ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/], + ['HHmmss', /\d\d\d\d\d\d/], + ['HHmm', /\d\d\d\d/], + ['HH', /\d\d/], + ], + aspNetJsonRegex = /^\/?Date\((-?\d+)/i, + // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3 + rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/, + obsOffsets = { + UT: 0, + GMT: 0, + EDT: -4 * 60, + EST: -5 * 60, + CDT: -5 * 60, + CST: -6 * 60, + MDT: -6 * 60, + MST: -7 * 60, + PDT: -7 * 60, + PST: -8 * 60, + }; + + // date from iso format + function configFromISO(config) { + var i, + l, + string = config._i, + match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), + allowTime, + dateFormat, + timeFormat, + tzFormat; + + if (match) { + getParsingFlags(config).iso = true; + + for (i = 0, l = isoDates.length; i < l; i++) { + if (isoDates[i][1].exec(match[1])) { + dateFormat = isoDates[i][0]; + allowTime = isoDates[i][2] !== false; + break; + } + } + if (dateFormat == null) { + config._isValid = false; + return; + } + if (match[3]) { + for (i = 0, l = isoTimes.length; i < l; i++) { + if (isoTimes[i][1].exec(match[3])) { + // match[2] should be 'T' or space + timeFormat = (match[2] || ' ') + isoTimes[i][0]; + break; + } + } + if (timeFormat == null) { + config._isValid = false; + return; + } + } + if (!allowTime && timeFormat != null) { + config._isValid = false; + return; + } + if (match[4]) { + if (tzRegex.exec(match[4])) { + tzFormat = 'Z'; + } else { + config._isValid = false; + return; + } + } + config._f = dateFormat + (timeFormat || '') + (tzFormat || ''); + configFromStringAndFormat(config); + } else { + config._isValid = false; + } + } + + function extractFromRFC2822Strings( + yearStr, + monthStr, + dayStr, + hourStr, + minuteStr, + secondStr + ) { + var result = [ + untruncateYear(yearStr), + defaultLocaleMonthsShort.indexOf(monthStr), + parseInt(dayStr, 10), + parseInt(hourStr, 10), + parseInt(minuteStr, 10), + ]; + + if (secondStr) { + result.push(parseInt(secondStr, 10)); + } + + return result; + } + + function untruncateYear(yearStr) { + var year = parseInt(yearStr, 10); + if (year <= 49) { + return 2000 + year; + } else if (year <= 999) { + return 1900 + year; + } + return year; + } + + function preprocessRFC2822(s) { + // Remove comments and folding whitespace and replace multiple-spaces with a single space + return s + .replace(/\([^)]*\)|[\n\t]/g, ' ') + .replace(/(\s\s+)/g, ' ') + .replace(/^\s\s*/, '') + .replace(/\s\s*$/, ''); + } + + function checkWeekday(weekdayStr, parsedInput, config) { + if (weekdayStr) { + // TODO: Replace the vanilla JS Date object with an independent day-of-week check. + var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr), + weekdayActual = new Date( + parsedInput[0], + parsedInput[1], + parsedInput[2] + ).getDay(); + if (weekdayProvided !== weekdayActual) { + getParsingFlags(config).weekdayMismatch = true; + config._isValid = false; + return false; + } + } + return true; + } + + function calculateOffset(obsOffset, militaryOffset, numOffset) { + if (obsOffset) { + return obsOffsets[obsOffset]; + } else if (militaryOffset) { + // the only allowed military tz is Z + return 0; + } else { + var hm = parseInt(numOffset, 10), + m = hm % 100, + h = (hm - m) / 100; + return h * 60 + m; + } + } + + // date and time from ref 2822 format + function configFromRFC2822(config) { + var match = rfc2822.exec(preprocessRFC2822(config._i)), + parsedArray; + if (match) { + parsedArray = extractFromRFC2822Strings( + match[4], + match[3], + match[2], + match[5], + match[6], + match[7] + ); + if (!checkWeekday(match[1], parsedArray, config)) { + return; + } + + config._a = parsedArray; + config._tzm = calculateOffset(match[8], match[9], match[10]); + + config._d = createUTCDate.apply(null, config._a); + config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); + + getParsingFlags(config).rfc2822 = true; + } else { + config._isValid = false; + } + } + + // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict + function configFromString(config) { + var matched = aspNetJsonRegex.exec(config._i); + if (matched !== null) { + config._d = new Date(+matched[1]); + return; + } + + configFromISO(config); + if (config._isValid === false) { + delete config._isValid; + } else { + return; + } + + configFromRFC2822(config); + if (config._isValid === false) { + delete config._isValid; + } else { + return; + } + + if (config._strict) { + config._isValid = false; + } else { + // Final attempt, use Input Fallback + hooks.createFromInputFallback(config); + } + } + + hooks.createFromInputFallback = deprecate( + 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + + 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + + 'discouraged and will be removed in an upcoming major release. Please refer to ' + + 'http://momentjs.com/guides/#/warnings/js-date/ for more info.', + function (config) { + config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); + } + ); + + // Pick the first defined of two or three arguments. + function defaults(a, b, c) { + if (a != null) { + return a; + } + if (b != null) { + return b; + } + return c; + } + + function currentDateArray(config) { + // hooks is actually the exported moment object + var nowValue = new Date(hooks.now()); + if (config._useUTC) { + return [ + nowValue.getUTCFullYear(), + nowValue.getUTCMonth(), + nowValue.getUTCDate(), + ]; + } + return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]; + } + + // convert an array to a date. + // the array should mirror the parameters below + // note: all values past the year are optional and will default to the lowest possible value. + // [year, month, day , hour, minute, second, millisecond] + function configFromArray(config) { + var i, + date, + input = [], + currentDate, + expectedWeekday, + yearToUse; + + if (config._d) { + return; + } + + currentDate = currentDateArray(config); + + //compute day of the year from weeks and weekdays + if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { + dayOfYearFromWeekInfo(config); + } + + //if the day of the year is set, figure out what it is + if (config._dayOfYear != null) { + yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); + + if ( + config._dayOfYear > daysInYear(yearToUse) || + config._dayOfYear === 0 + ) { + getParsingFlags(config)._overflowDayOfYear = true; + } + + date = createUTCDate(yearToUse, 0, config._dayOfYear); + config._a[MONTH] = date.getUTCMonth(); + config._a[DATE] = date.getUTCDate(); + } + + // Default to current date. + // * if no year, month, day of month are given, default to today + // * if day of month is given, default month and year + // * if month is given, default only year + // * if year is given, don't default anything + for (i = 0; i < 3 && config._a[i] == null; ++i) { + config._a[i] = input[i] = currentDate[i]; + } + + // Zero out whatever was not defaulted, including time + for (; i < 7; i++) { + config._a[i] = input[i] = + config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i]; + } + + // Check for 24:00:00.000 + if ( + config._a[HOUR] === 24 && + config._a[MINUTE] === 0 && + config._a[SECOND] === 0 && + config._a[MILLISECOND] === 0 + ) { + config._nextDay = true; + config._a[HOUR] = 0; + } + + config._d = (config._useUTC ? createUTCDate : createDate).apply( + null, + input + ); + expectedWeekday = config._useUTC + ? config._d.getUTCDay() + : config._d.getDay(); + + // Apply timezone offset from input. The actual utcOffset can be changed + // with parseZone. + if (config._tzm != null) { + config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); + } + + if (config._nextDay) { + config._a[HOUR] = 24; + } + + // check for mismatching day of week + if ( + config._w && + typeof config._w.d !== 'undefined' && + config._w.d !== expectedWeekday + ) { + getParsingFlags(config).weekdayMismatch = true; + } + } + + function dayOfYearFromWeekInfo(config) { + var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek; + + w = config._w; + if (w.GG != null || w.W != null || w.E != null) { + dow = 1; + doy = 4; + + // TODO: We need to take the current isoWeekYear, but that depends on + // how we interpret now (local, utc, fixed offset). So create + // a now version of current config (take local/utc/offset flags, and + // create now). + weekYear = defaults( + w.GG, + config._a[YEAR], + weekOfYear(createLocal(), 1, 4).year + ); + week = defaults(w.W, 1); + weekday = defaults(w.E, 1); + if (weekday < 1 || weekday > 7) { + weekdayOverflow = true; + } + } else { + dow = config._locale._week.dow; + doy = config._locale._week.doy; + + curWeek = weekOfYear(createLocal(), dow, doy); + + weekYear = defaults(w.gg, config._a[YEAR], curWeek.year); + + // Default to current week. + week = defaults(w.w, curWeek.week); + + if (w.d != null) { + // weekday -- low day numbers are considered next week + weekday = w.d; + if (weekday < 0 || weekday > 6) { + weekdayOverflow = true; + } + } else if (w.e != null) { + // local weekday -- counting starts from beginning of week + weekday = w.e + dow; + if (w.e < 0 || w.e > 6) { + weekdayOverflow = true; + } + } else { + // default to beginning of week + weekday = dow; + } + } + if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { + getParsingFlags(config)._overflowWeeks = true; + } else if (weekdayOverflow != null) { + getParsingFlags(config)._overflowWeekday = true; + } else { + temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy); + config._a[YEAR] = temp.year; + config._dayOfYear = temp.dayOfYear; + } + } + + // constant that refers to the ISO standard + hooks.ISO_8601 = function () {}; + + // constant that refers to the RFC 2822 form + hooks.RFC_2822 = function () {}; + + // date from string and format string + function configFromStringAndFormat(config) { + // TODO: Move this to another part of the creation flow to prevent circular deps + if (config._f === hooks.ISO_8601) { + configFromISO(config); + return; + } + if (config._f === hooks.RFC_2822) { + configFromRFC2822(config); + return; + } + config._a = []; + getParsingFlags(config).empty = true; + + // This array is used to make a Date, either with `new Date` or `Date.UTC` + var string = '' + config._i, + i, + parsedInput, + tokens, + token, + skipped, + stringLength = string.length, + totalParsedInputLength = 0, + era; + + tokens = + expandFormat(config._f, config._locale).match(formattingTokens) || []; + + for (i = 0; i < tokens.length; i++) { + token = tokens[i]; + parsedInput = (string.match(getParseRegexForToken(token, config)) || + [])[0]; + if (parsedInput) { + skipped = string.substr(0, string.indexOf(parsedInput)); + if (skipped.length > 0) { + getParsingFlags(config).unusedInput.push(skipped); + } + string = string.slice( + string.indexOf(parsedInput) + parsedInput.length + ); + totalParsedInputLength += parsedInput.length; + } + // don't parse if it's not a known token + if (formatTokenFunctions[token]) { + if (parsedInput) { + getParsingFlags(config).empty = false; + } else { + getParsingFlags(config).unusedTokens.push(token); + } + addTimeToArrayFromToken(token, parsedInput, config); + } else if (config._strict && !parsedInput) { + getParsingFlags(config).unusedTokens.push(token); + } + } + + // add remaining unparsed input length to the string + getParsingFlags(config).charsLeftOver = + stringLength - totalParsedInputLength; + if (string.length > 0) { + getParsingFlags(config).unusedInput.push(string); + } + + // clear _12h flag if hour is <= 12 + if ( + config._a[HOUR] <= 12 && + getParsingFlags(config).bigHour === true && + config._a[HOUR] > 0 + ) { + getParsingFlags(config).bigHour = undefined; + } + + getParsingFlags(config).parsedDateParts = config._a.slice(0); + getParsingFlags(config).meridiem = config._meridiem; + // handle meridiem + config._a[HOUR] = meridiemFixWrap( + config._locale, + config._a[HOUR], + config._meridiem + ); + + // handle era + era = getParsingFlags(config).era; + if (era !== null) { + config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]); + } + + configFromArray(config); + checkOverflow(config); + } + + function meridiemFixWrap(locale, hour, meridiem) { + var isPm; + + if (meridiem == null) { + // nothing to do + return hour; + } + if (locale.meridiemHour != null) { + return locale.meridiemHour(hour, meridiem); + } else if (locale.isPM != null) { + // Fallback + isPm = locale.isPM(meridiem); + if (isPm && hour < 12) { + hour += 12; + } + if (!isPm && hour === 12) { + hour = 0; + } + return hour; + } else { + // this is not supposed to happen + return hour; + } + } + + // date from string and array of format strings + function configFromStringAndArray(config) { + var tempConfig, + bestMoment, + scoreToBeat, + i, + currentScore, + validFormatFound, + bestFormatIsValid = false; + + if (config._f.length === 0) { + getParsingFlags(config).invalidFormat = true; + config._d = new Date(NaN); + return; + } + + for (i = 0; i < config._f.length; i++) { + currentScore = 0; + validFormatFound = false; + tempConfig = copyConfig({}, config); + if (config._useUTC != null) { + tempConfig._useUTC = config._useUTC; + } + tempConfig._f = config._f[i]; + configFromStringAndFormat(tempConfig); + + if (isValid(tempConfig)) { + validFormatFound = true; + } + + // if there is any input that was not parsed add a penalty for that format + currentScore += getParsingFlags(tempConfig).charsLeftOver; + + //or tokens + currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; + + getParsingFlags(tempConfig).score = currentScore; + + if (!bestFormatIsValid) { + if ( + scoreToBeat == null || + currentScore < scoreToBeat || + validFormatFound + ) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + if (validFormatFound) { + bestFormatIsValid = true; + } + } + } else { + if (currentScore < scoreToBeat) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + } + } + } + + extend(config, bestMoment || tempConfig); + } + + function configFromObject(config) { + if (config._d) { + return; + } + + var i = normalizeObjectUnits(config._i), + dayOrDate = i.day === undefined ? i.date : i.day; + config._a = map( + [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond], + function (obj) { + return obj && parseInt(obj, 10); + } + ); + + configFromArray(config); + } + + function createFromConfig(config) { + var res = new Moment(checkOverflow(prepareConfig(config))); + if (res._nextDay) { + // Adding is smart enough around DST + res.add(1, 'd'); + res._nextDay = undefined; + } + + return res; + } + + function prepareConfig(config) { + var input = config._i, + format = config._f; + + config._locale = config._locale || getLocale(config._l); + + if (input === null || (format === undefined && input === '')) { + return createInvalid({ nullInput: true }); + } + + if (typeof input === 'string') { + config._i = input = config._locale.preparse(input); + } + + if (isMoment(input)) { + return new Moment(checkOverflow(input)); + } else if (isDate(input)) { + config._d = input; + } else if (isArray(format)) { + configFromStringAndArray(config); + } else if (format) { + configFromStringAndFormat(config); + } else { + configFromInput(config); + } + + if (!isValid(config)) { + config._d = null; + } + + return config; + } + + function configFromInput(config) { + var input = config._i; + if (isUndefined(input)) { + config._d = new Date(hooks.now()); + } else if (isDate(input)) { + config._d = new Date(input.valueOf()); + } else if (typeof input === 'string') { + configFromString(config); + } else if (isArray(input)) { + config._a = map(input.slice(0), function (obj) { + return parseInt(obj, 10); + }); + configFromArray(config); + } else if (isObject(input)) { + configFromObject(config); + } else if (isNumber(input)) { + // from milliseconds + config._d = new Date(input); + } else { + hooks.createFromInputFallback(config); + } + } + + function createLocalOrUTC(input, format, locale, strict, isUTC) { + var c = {}; + + if (format === true || format === false) { + strict = format; + format = undefined; + } + + if (locale === true || locale === false) { + strict = locale; + locale = undefined; + } + + if ( + (isObject(input) && isObjectEmpty(input)) || + (isArray(input) && input.length === 0) + ) { + input = undefined; + } + // object construction must be done this way. + // https://github.com/moment/moment/issues/1423 + c._isAMomentObject = true; + c._useUTC = c._isUTC = isUTC; + c._l = locale; + c._i = input; + c._f = format; + c._strict = strict; + + return createFromConfig(c); + } + + function createLocal(input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, false); + } + + var prototypeMin = deprecate( + 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', + function () { + var other = createLocal.apply(null, arguments); + if (this.isValid() && other.isValid()) { + return other < this ? this : other; + } else { + return createInvalid(); + } + } + ), + prototypeMax = deprecate( + 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', + function () { + var other = createLocal.apply(null, arguments); + if (this.isValid() && other.isValid()) { + return other > this ? this : other; + } else { + return createInvalid(); + } + } + ); + + // Pick a moment m from moments so that m[fn](other) is true for all + // other. This relies on the function fn to be transitive. + // + // moments should either be an array of moment objects or an array, whose + // first element is an array of moment objects. + function pickBy(fn, moments) { + var res, i; + if (moments.length === 1 && isArray(moments[0])) { + moments = moments[0]; + } + if (!moments.length) { + return createLocal(); + } + res = moments[0]; + for (i = 1; i < moments.length; ++i) { + if (!moments[i].isValid() || moments[i][fn](res)) { + res = moments[i]; + } + } + return res; + } + + // TODO: Use [].sort instead? + function min() { + var args = [].slice.call(arguments, 0); + + return pickBy('isBefore', args); + } + + function max() { + var args = [].slice.call(arguments, 0); + + return pickBy('isAfter', args); + } + + var now = function () { + return Date.now ? Date.now() : +new Date(); + }; + + var ordering = [ + 'year', + 'quarter', + 'month', + 'week', + 'day', + 'hour', + 'minute', + 'second', + 'millisecond', + ]; + + function isDurationValid(m) { + var key, + unitHasDecimal = false, + i; + for (key in m) { + if ( + hasOwnProp(m, key) && + !( + indexOf.call(ordering, key) !== -1 && + (m[key] == null || !isNaN(m[key])) + ) + ) { + return false; + } + } + + for (i = 0; i < ordering.length; ++i) { + if (m[ordering[i]]) { + if (unitHasDecimal) { + return false; // only allow non-integers for smallest unit + } + if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) { + unitHasDecimal = true; + } + } + } + + return true; + } + + function isValid$1() { + return this._isValid; + } + + function createInvalid$1() { + return createDuration(NaN); + } + + function Duration(duration) { + var normalizedInput = normalizeObjectUnits(duration), + years = normalizedInput.year || 0, + quarters = normalizedInput.quarter || 0, + months = normalizedInput.month || 0, + weeks = normalizedInput.week || normalizedInput.isoWeek || 0, + days = normalizedInput.day || 0, + hours = normalizedInput.hour || 0, + minutes = normalizedInput.minute || 0, + seconds = normalizedInput.second || 0, + milliseconds = normalizedInput.millisecond || 0; + + this._isValid = isDurationValid(normalizedInput); + + // representation for dateAddRemove + this._milliseconds = + +milliseconds + + seconds * 1e3 + // 1000 + minutes * 6e4 + // 1000 * 60 + hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978 + // Because of dateAddRemove treats 24 hours as different from a + // day when working around DST, we need to store them separately + this._days = +days + weeks * 7; + // It is impossible to translate months into days without knowing + // which months you are are talking about, so we have to store + // it separately. + this._months = +months + quarters * 3 + years * 12; + + this._data = {}; + + this._locale = getLocale(); + + this._bubble(); + } + + function isDuration(obj) { + return obj instanceof Duration; + } + + function absRound(number) { + if (number < 0) { + return Math.round(-1 * number) * -1; + } else { + return Math.round(number); + } + } + + // compare two arrays, return the number of differences + function compareArrays(array1, array2, dontConvert) { + var len = Math.min(array1.length, array2.length), + lengthDiff = Math.abs(array1.length - array2.length), + diffs = 0, + i; + for (i = 0; i < len; i++) { + if ( + (dontConvert && array1[i] !== array2[i]) || + (!dontConvert && toInt(array1[i]) !== toInt(array2[i])) + ) { + diffs++; + } + } + return diffs + lengthDiff; + } + + // FORMATTING + + function offset(token, separator) { + addFormatToken(token, 0, 0, function () { + var offset = this.utcOffset(), + sign = '+'; + if (offset < 0) { + offset = -offset; + sign = '-'; + } + return ( + sign + + zeroFill(~~(offset / 60), 2) + + separator + + zeroFill(~~offset % 60, 2) + ); + }); + } + + offset('Z', ':'); + offset('ZZ', ''); + + // PARSING + + addRegexToken('Z', matchShortOffset); + addRegexToken('ZZ', matchShortOffset); + addParseToken(['Z', 'ZZ'], function (input, array, config) { + config._useUTC = true; + config._tzm = offsetFromString(matchShortOffset, input); + }); + + // HELPERS + + // timezone chunker + // '+10:00' > ['10', '00'] + // '-1530' > ['-15', '30'] + var chunkOffset = /([\+\-]|\d\d)/gi; + + function offsetFromString(matcher, string) { + var matches = (string || '').match(matcher), + chunk, + parts, + minutes; + + if (matches === null) { + return null; + } + + chunk = matches[matches.length - 1] || []; + parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; + minutes = +(parts[1] * 60) + toInt(parts[2]); + + return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes; + } + + // Return a moment from input, that is local/utc/zone equivalent to model. + function cloneWithOffset(input, model) { + var res, diff; + if (model._isUTC) { + res = model.clone(); + diff = + (isMoment(input) || isDate(input) + ? input.valueOf() + : createLocal(input).valueOf()) - res.valueOf(); + // Use low-level api, because this fn is low-level api. + res._d.setTime(res._d.valueOf() + diff); + hooks.updateOffset(res, false); + return res; + } else { + return createLocal(input).local(); + } + } + + function getDateOffset(m) { + // On Firefox.24 Date#getTimezoneOffset returns a floating point. + // https://github.com/moment/moment/pull/1871 + return -Math.round(m._d.getTimezoneOffset()); + } + + // HOOKS + + // This function will be called whenever a moment is mutated. + // It is intended to keep the offset in sync with the timezone. + hooks.updateOffset = function () {}; + + // MOMENTS + + // keepLocalTime = true means only change the timezone, without + // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> + // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset + // +0200, so we adjust the time as needed, to be valid. + // + // Keeping the time actually adds/subtracts (one hour) + // from the actual represented time. That is why we call updateOffset + // a second time. In case it wants us to change the offset again + // _changeInProgress == true case, then we have to adjust, because + // there is no such time in the given timezone. + function getSetOffset(input, keepLocalTime, keepMinutes) { + var offset = this._offset || 0, + localAdjust; + if (!this.isValid()) { + return input != null ? this : NaN; + } + if (input != null) { + if (typeof input === 'string') { + input = offsetFromString(matchShortOffset, input); + if (input === null) { + return this; + } + } else if (Math.abs(input) < 16 && !keepMinutes) { + input = input * 60; + } + if (!this._isUTC && keepLocalTime) { + localAdjust = getDateOffset(this); + } + this._offset = input; + this._isUTC = true; + if (localAdjust != null) { + this.add(localAdjust, 'm'); + } + if (offset !== input) { + if (!keepLocalTime || this._changeInProgress) { + addSubtract( + this, + createDuration(input - offset, 'm'), + 1, + false + ); + } else if (!this._changeInProgress) { + this._changeInProgress = true; + hooks.updateOffset(this, true); + this._changeInProgress = null; + } + } + return this; + } else { + return this._isUTC ? offset : getDateOffset(this); + } + } + + function getSetZone(input, keepLocalTime) { + if (input != null) { + if (typeof input !== 'string') { + input = -input; + } + + this.utcOffset(input, keepLocalTime); + + return this; + } else { + return -this.utcOffset(); + } + } + + function setOffsetToUTC(keepLocalTime) { + return this.utcOffset(0, keepLocalTime); + } + + function setOffsetToLocal(keepLocalTime) { + if (this._isUTC) { + this.utcOffset(0, keepLocalTime); + this._isUTC = false; + + if (keepLocalTime) { + this.subtract(getDateOffset(this), 'm'); + } + } + return this; + } + + function setOffsetToParsedOffset() { + if (this._tzm != null) { + this.utcOffset(this._tzm, false, true); + } else if (typeof this._i === 'string') { + var tZone = offsetFromString(matchOffset, this._i); + if (tZone != null) { + this.utcOffset(tZone); + } else { + this.utcOffset(0, true); + } + } + return this; + } + + function hasAlignedHourOffset(input) { + if (!this.isValid()) { + return false; + } + input = input ? createLocal(input).utcOffset() : 0; + + return (this.utcOffset() - input) % 60 === 0; + } + + function isDaylightSavingTime() { + return ( + this.utcOffset() > this.clone().month(0).utcOffset() || + this.utcOffset() > this.clone().month(5).utcOffset() + ); + } + + function isDaylightSavingTimeShifted() { + if (!isUndefined(this._isDSTShifted)) { + return this._isDSTShifted; + } + + var c = {}, + other; + + copyConfig(c, this); + c = prepareConfig(c); + + if (c._a) { + other = c._isUTC ? createUTC(c._a) : createLocal(c._a); + this._isDSTShifted = + this.isValid() && compareArrays(c._a, other.toArray()) > 0; + } else { + this._isDSTShifted = false; + } + + return this._isDSTShifted; + } + + function isLocal() { + return this.isValid() ? !this._isUTC : false; + } + + function isUtcOffset() { + return this.isValid() ? this._isUTC : false; + } + + function isUtc() { + return this.isValid() ? this._isUTC && this._offset === 0 : false; + } + + // ASP.NET json date format regex + var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/, + // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html + // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere + // and further modified to allow for strings containing both week and day + isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/; + + function createDuration(input, key) { + var duration = input, + // matching against regexp is expensive, do it on demand + match = null, + sign, + ret, + diffRes; + + if (isDuration(input)) { + duration = { + ms: input._milliseconds, + d: input._days, + M: input._months, + }; + } else if (isNumber(input) || !isNaN(+input)) { + duration = {}; + if (key) { + duration[key] = +input; + } else { + duration.milliseconds = +input; + } + } else if ((match = aspNetRegex.exec(input))) { + sign = match[1] === '-' ? -1 : 1; + duration = { + y: 0, + d: toInt(match[DATE]) * sign, + h: toInt(match[HOUR]) * sign, + m: toInt(match[MINUTE]) * sign, + s: toInt(match[SECOND]) * sign, + ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match + }; + } else if ((match = isoRegex.exec(input))) { + sign = match[1] === '-' ? -1 : 1; + duration = { + y: parseIso(match[2], sign), + M: parseIso(match[3], sign), + w: parseIso(match[4], sign), + d: parseIso(match[5], sign), + h: parseIso(match[6], sign), + m: parseIso(match[7], sign), + s: parseIso(match[8], sign), + }; + } else if (duration == null) { + // checks for null or undefined + duration = {}; + } else if ( + typeof duration === 'object' && + ('from' in duration || 'to' in duration) + ) { + diffRes = momentsDifference( + createLocal(duration.from), + createLocal(duration.to) + ); + + duration = {}; + duration.ms = diffRes.milliseconds; + duration.M = diffRes.months; + } + + ret = new Duration(duration); + + if (isDuration(input) && hasOwnProp(input, '_locale')) { + ret._locale = input._locale; + } + + if (isDuration(input) && hasOwnProp(input, '_isValid')) { + ret._isValid = input._isValid; + } + + return ret; + } + + createDuration.fn = Duration.prototype; + createDuration.invalid = createInvalid$1; + + function parseIso(inp, sign) { + // We'd normally use ~~inp for this, but unfortunately it also + // converts floats to ints. + // inp may be undefined, so careful calling replace on it. + var res = inp && parseFloat(inp.replace(',', '.')); + // apply sign while we're at it + return (isNaN(res) ? 0 : res) * sign; + } + + function positiveMomentsDifference(base, other) { + var res = {}; + + res.months = + other.month() - base.month() + (other.year() - base.year()) * 12; + if (base.clone().add(res.months, 'M').isAfter(other)) { + --res.months; + } + + res.milliseconds = +other - +base.clone().add(res.months, 'M'); + + return res; + } + + function momentsDifference(base, other) { + var res; + if (!(base.isValid() && other.isValid())) { + return { milliseconds: 0, months: 0 }; + } + + other = cloneWithOffset(other, base); + if (base.isBefore(other)) { + res = positiveMomentsDifference(base, other); + } else { + res = positiveMomentsDifference(other, base); + res.milliseconds = -res.milliseconds; + res.months = -res.months; + } + + return res; + } + + // TODO: remove 'name' arg after deprecation is removed + function createAdder(direction, name) { + return function (val, period) { + var dur, tmp; + //invert the arguments, but complain about it + if (period !== null && !isNaN(+period)) { + deprecateSimple( + name, + 'moment().' + + name + + '(period, number) is deprecated. Please use moment().' + + name + + '(number, period). ' + + 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.' + ); + tmp = val; + val = period; + period = tmp; + } + + dur = createDuration(val, period); + addSubtract(this, dur, direction); + return this; + }; + } + + function addSubtract(mom, duration, isAdding, updateOffset) { + var milliseconds = duration._milliseconds, + days = absRound(duration._days), + months = absRound(duration._months); + + if (!mom.isValid()) { + // No op + return; + } + + updateOffset = updateOffset == null ? true : updateOffset; + + if (months) { + setMonth(mom, get(mom, 'Month') + months * isAdding); + } + if (days) { + set$1(mom, 'Date', get(mom, 'Date') + days * isAdding); + } + if (milliseconds) { + mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding); + } + if (updateOffset) { + hooks.updateOffset(mom, days || months); + } + } + + var add = createAdder(1, 'add'), + subtract = createAdder(-1, 'subtract'); + + function isString(input) { + return typeof input === 'string' || input instanceof String; + } + + // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined + function isMomentInput(input) { + return ( + isMoment(input) || + isDate(input) || + isString(input) || + isNumber(input) || + isNumberOrStringArray(input) || + isMomentInputObject(input) || + input === null || + input === undefined + ); + } + + function isMomentInputObject(input) { + var objectTest = isObject(input) && !isObjectEmpty(input), + propertyTest = false, + properties = [ + 'years', + 'year', + 'y', + 'months', + 'month', + 'M', + 'days', + 'day', + 'd', + 'dates', + 'date', + 'D', + 'hours', + 'hour', + 'h', + 'minutes', + 'minute', + 'm', + 'seconds', + 'second', + 's', + 'milliseconds', + 'millisecond', + 'ms', + ], + i, + property; + + for (i = 0; i < properties.length; i += 1) { + property = properties[i]; + propertyTest = propertyTest || hasOwnProp(input, property); + } + + return objectTest && propertyTest; + } + + function isNumberOrStringArray(input) { + var arrayTest = isArray(input), + dataTypeTest = false; + if (arrayTest) { + dataTypeTest = + input.filter(function (item) { + return !isNumber(item) && isString(input); + }).length === 0; + } + return arrayTest && dataTypeTest; + } + + function isCalendarSpec(input) { + var objectTest = isObject(input) && !isObjectEmpty(input), + propertyTest = false, + properties = [ + 'sameDay', + 'nextDay', + 'lastDay', + 'nextWeek', + 'lastWeek', + 'sameElse', + ], + i, + property; + + for (i = 0; i < properties.length; i += 1) { + property = properties[i]; + propertyTest = propertyTest || hasOwnProp(input, property); + } + + return objectTest && propertyTest; + } + + function getCalendarFormat(myMoment, now) { + var diff = myMoment.diff(now, 'days', true); + return diff < -6 + ? 'sameElse' + : diff < -1 + ? 'lastWeek' + : diff < 0 + ? 'lastDay' + : diff < 1 + ? 'sameDay' + : diff < 2 + ? 'nextDay' + : diff < 7 + ? 'nextWeek' + : 'sameElse'; + } + + function calendar$1(time, formats) { + // Support for single parameter, formats only overload to the calendar function + if (arguments.length === 1) { + if (isMomentInput(arguments[0])) { + time = arguments[0]; + formats = undefined; + } else if (isCalendarSpec(arguments[0])) { + formats = arguments[0]; + time = undefined; + } + } + // We want to compare the start of today, vs this. + // Getting start-of-today depends on whether we're local/utc/offset or not. + var now = time || createLocal(), + sod = cloneWithOffset(now, this).startOf('day'), + format = hooks.calendarFormat(this, sod) || 'sameElse', + output = + formats && + (isFunction(formats[format]) + ? formats[format].call(this, now) + : formats[format]); + + return this.format( + output || this.localeData().calendar(format, this, createLocal(now)) + ); + } + + function clone() { + return new Moment(this); + } + + function isAfter(input, units) { + var localInput = isMoment(input) ? input : createLocal(input); + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units) || 'millisecond'; + if (units === 'millisecond') { + return this.valueOf() > localInput.valueOf(); + } else { + return localInput.valueOf() < this.clone().startOf(units).valueOf(); + } + } + + function isBefore(input, units) { + var localInput = isMoment(input) ? input : createLocal(input); + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units) || 'millisecond'; + if (units === 'millisecond') { + return this.valueOf() < localInput.valueOf(); + } else { + return this.clone().endOf(units).valueOf() < localInput.valueOf(); + } + } + + function isBetween(from, to, units, inclusivity) { + var localFrom = isMoment(from) ? from : createLocal(from), + localTo = isMoment(to) ? to : createLocal(to); + if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) { + return false; + } + inclusivity = inclusivity || '()'; + return ( + (inclusivity[0] === '(' + ? this.isAfter(localFrom, units) + : !this.isBefore(localFrom, units)) && + (inclusivity[1] === ')' + ? this.isBefore(localTo, units) + : !this.isAfter(localTo, units)) + ); + } + + function isSame(input, units) { + var localInput = isMoment(input) ? input : createLocal(input), + inputMs; + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units) || 'millisecond'; + if (units === 'millisecond') { + return this.valueOf() === localInput.valueOf(); + } else { + inputMs = localInput.valueOf(); + return ( + this.clone().startOf(units).valueOf() <= inputMs && + inputMs <= this.clone().endOf(units).valueOf() + ); + } + } + + function isSameOrAfter(input, units) { + return this.isSame(input, units) || this.isAfter(input, units); + } + + function isSameOrBefore(input, units) { + return this.isSame(input, units) || this.isBefore(input, units); + } + + function diff(input, units, asFloat) { + var that, zoneDelta, output; + + if (!this.isValid()) { + return NaN; + } + + that = cloneWithOffset(input, this); + + if (!that.isValid()) { + return NaN; + } + + zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4; + + units = normalizeUnits(units); + + switch (units) { + case 'year': + output = monthDiff(this, that) / 12; + break; + case 'month': + output = monthDiff(this, that); + break; + case 'quarter': + output = monthDiff(this, that) / 3; + break; + case 'second': + output = (this - that) / 1e3; + break; // 1000 + case 'minute': + output = (this - that) / 6e4; + break; // 1000 * 60 + case 'hour': + output = (this - that) / 36e5; + break; // 1000 * 60 * 60 + case 'day': + output = (this - that - zoneDelta) / 864e5; + break; // 1000 * 60 * 60 * 24, negate dst + case 'week': + output = (this - that - zoneDelta) / 6048e5; + break; // 1000 * 60 * 60 * 24 * 7, negate dst + default: + output = this - that; + } + + return asFloat ? output : absFloor(output); + } + + function monthDiff(a, b) { + if (a.date() < b.date()) { + // end-of-month calculations work correct when the start month has more + // days than the end month. + return -monthDiff(b, a); + } + // difference in months + var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()), + // b is in (anchor - 1 month, anchor + 1 month) + anchor = a.clone().add(wholeMonthDiff, 'months'), + anchor2, + adjust; + + if (b - anchor < 0) { + anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor - anchor2); + } else { + anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor2 - anchor); + } + + //check for negative zero, return zero if negative zero + return -(wholeMonthDiff + adjust) || 0; + } + + hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; + hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]'; + + function toString() { + return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); + } + + function toISOString(keepOffset) { + if (!this.isValid()) { + return null; + } + var utc = keepOffset !== true, + m = utc ? this.clone().utc() : this; + if (m.year() < 0 || m.year() > 9999) { + return formatMoment( + m, + utc + ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' + : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ' + ); + } + if (isFunction(Date.prototype.toISOString)) { + // native implementation is ~50x faster, use it when we can + if (utc) { + return this.toDate().toISOString(); + } else { + return new Date(this.valueOf() + this.utcOffset() * 60 * 1000) + .toISOString() + .replace('Z', formatMoment(m, 'Z')); + } + } + return formatMoment( + m, + utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ' + ); + } + + /** + * Return a human readable representation of a moment that can + * also be evaluated to get a new moment which is the same + * + * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects + */ + function inspect() { + if (!this.isValid()) { + return 'moment.invalid(/* ' + this._i + ' */)'; + } + var func = 'moment', + zone = '', + prefix, + year, + datetime, + suffix; + if (!this.isLocal()) { + func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone'; + zone = 'Z'; + } + prefix = '[' + func + '("]'; + year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY'; + datetime = '-MM-DD[T]HH:mm:ss.SSS'; + suffix = zone + '[")]'; + + return this.format(prefix + year + datetime + suffix); + } + + function format(inputString) { + if (!inputString) { + inputString = this.isUtc() + ? hooks.defaultFormatUtc + : hooks.defaultFormat; + } + var output = formatMoment(this, inputString); + return this.localeData().postformat(output); + } + + function from(time, withoutSuffix) { + if ( + this.isValid() && + ((isMoment(time) && time.isValid()) || createLocal(time).isValid()) + ) { + return createDuration({ to: this, from: time }) + .locale(this.locale()) + .humanize(!withoutSuffix); + } else { + return this.localeData().invalidDate(); + } + } + + function fromNow(withoutSuffix) { + return this.from(createLocal(), withoutSuffix); + } + + function to(time, withoutSuffix) { + if ( + this.isValid() && + ((isMoment(time) && time.isValid()) || createLocal(time).isValid()) + ) { + return createDuration({ from: this, to: time }) + .locale(this.locale()) + .humanize(!withoutSuffix); + } else { + return this.localeData().invalidDate(); + } + } + + function toNow(withoutSuffix) { + return this.to(createLocal(), withoutSuffix); + } + + // If passed a locale key, it will set the locale for this + // instance. Otherwise, it will return the locale configuration + // variables for this instance. + function locale(key) { + var newLocaleData; + + if (key === undefined) { + return this._locale._abbr; + } else { + newLocaleData = getLocale(key); + if (newLocaleData != null) { + this._locale = newLocaleData; + } + return this; + } + } + + var lang = deprecate( + 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', + function (key) { + if (key === undefined) { + return this.localeData(); + } else { + return this.locale(key); + } + } + ); + + function localeData() { + return this._locale; + } + + var MS_PER_SECOND = 1000, + MS_PER_MINUTE = 60 * MS_PER_SECOND, + MS_PER_HOUR = 60 * MS_PER_MINUTE, + MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR; + + // actual modulo - handles negative numbers (for dates before 1970): + function mod$1(dividend, divisor) { + return ((dividend % divisor) + divisor) % divisor; + } + + function localStartOfDate(y, m, d) { + // the date constructor remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + // preserve leap years using a full 400 year cycle, then reset + return new Date(y + 400, m, d) - MS_PER_400_YEARS; + } else { + return new Date(y, m, d).valueOf(); + } + } + + function utcStartOfDate(y, m, d) { + // Date.UTC remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + // preserve leap years using a full 400 year cycle, then reset + return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS; + } else { + return Date.UTC(y, m, d); + } + } + + function startOf(units) { + var time, startOfDate; + units = normalizeUnits(units); + if (units === undefined || units === 'millisecond' || !this.isValid()) { + return this; + } + + startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate; + + switch (units) { + case 'year': + time = startOfDate(this.year(), 0, 1); + break; + case 'quarter': + time = startOfDate( + this.year(), + this.month() - (this.month() % 3), + 1 + ); + break; + case 'month': + time = startOfDate(this.year(), this.month(), 1); + break; + case 'week': + time = startOfDate( + this.year(), + this.month(), + this.date() - this.weekday() + ); + break; + case 'isoWeek': + time = startOfDate( + this.year(), + this.month(), + this.date() - (this.isoWeekday() - 1) + ); + break; + case 'day': + case 'date': + time = startOfDate(this.year(), this.month(), this.date()); + break; + case 'hour': + time = this._d.valueOf(); + time -= mod$1( + time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), + MS_PER_HOUR + ); + break; + case 'minute': + time = this._d.valueOf(); + time -= mod$1(time, MS_PER_MINUTE); + break; + case 'second': + time = this._d.valueOf(); + time -= mod$1(time, MS_PER_SECOND); + break; + } + + this._d.setTime(time); + hooks.updateOffset(this, true); + return this; + } + + function endOf(units) { + var time, startOfDate; + units = normalizeUnits(units); + if (units === undefined || units === 'millisecond' || !this.isValid()) { + return this; + } + + startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate; + + switch (units) { + case 'year': + time = startOfDate(this.year() + 1, 0, 1) - 1; + break; + case 'quarter': + time = + startOfDate( + this.year(), + this.month() - (this.month() % 3) + 3, + 1 + ) - 1; + break; + case 'month': + time = startOfDate(this.year(), this.month() + 1, 1) - 1; + break; + case 'week': + time = + startOfDate( + this.year(), + this.month(), + this.date() - this.weekday() + 7 + ) - 1; + break; + case 'isoWeek': + time = + startOfDate( + this.year(), + this.month(), + this.date() - (this.isoWeekday() - 1) + 7 + ) - 1; + break; + case 'day': + case 'date': + time = startOfDate(this.year(), this.month(), this.date() + 1) - 1; + break; + case 'hour': + time = this._d.valueOf(); + time += + MS_PER_HOUR - + mod$1( + time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), + MS_PER_HOUR + ) - + 1; + break; + case 'minute': + time = this._d.valueOf(); + time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1; + break; + case 'second': + time = this._d.valueOf(); + time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1; + break; + } + + this._d.setTime(time); + hooks.updateOffset(this, true); + return this; + } + + function valueOf() { + return this._d.valueOf() - (this._offset || 0) * 60000; + } + + function unix() { + return Math.floor(this.valueOf() / 1000); + } + + function toDate() { + return new Date(this.valueOf()); + } + + function toArray() { + var m = this; + return [ + m.year(), + m.month(), + m.date(), + m.hour(), + m.minute(), + m.second(), + m.millisecond(), + ]; + } + + function toObject() { + var m = this; + return { + years: m.year(), + months: m.month(), + date: m.date(), + hours: m.hours(), + minutes: m.minutes(), + seconds: m.seconds(), + milliseconds: m.milliseconds(), + }; + } + + function toJSON() { + // new Date(NaN).toJSON() === null + return this.isValid() ? this.toISOString() : null; + } + + function isValid$2() { + return isValid(this); + } + + function parsingFlags() { + return extend({}, getParsingFlags(this)); + } + + function invalidAt() { + return getParsingFlags(this).overflow; + } + + function creationData() { + return { + input: this._i, + format: this._f, + locale: this._locale, + isUTC: this._isUTC, + strict: this._strict, + }; + } + + addFormatToken('N', 0, 0, 'eraAbbr'); + addFormatToken('NN', 0, 0, 'eraAbbr'); + addFormatToken('NNN', 0, 0, 'eraAbbr'); + addFormatToken('NNNN', 0, 0, 'eraName'); + addFormatToken('NNNNN', 0, 0, 'eraNarrow'); + + addFormatToken('y', ['y', 1], 'yo', 'eraYear'); + addFormatToken('y', ['yy', 2], 0, 'eraYear'); + addFormatToken('y', ['yyy', 3], 0, 'eraYear'); + addFormatToken('y', ['yyyy', 4], 0, 'eraYear'); + + addRegexToken('N', matchEraAbbr); + addRegexToken('NN', matchEraAbbr); + addRegexToken('NNN', matchEraAbbr); + addRegexToken('NNNN', matchEraName); + addRegexToken('NNNNN', matchEraNarrow); + + addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function ( + input, + array, + config, + token + ) { + var era = config._locale.erasParse(input, token, config._strict); + if (era) { + getParsingFlags(config).era = era; + } else { + getParsingFlags(config).invalidEra = input; + } + }); + + addRegexToken('y', matchUnsigned); + addRegexToken('yy', matchUnsigned); + addRegexToken('yyy', matchUnsigned); + addRegexToken('yyyy', matchUnsigned); + addRegexToken('yo', matchEraYearOrdinal); + + addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR); + addParseToken(['yo'], function (input, array, config, token) { + var match; + if (config._locale._eraYearOrdinalRegex) { + match = input.match(config._locale._eraYearOrdinalRegex); + } + + if (config._locale.eraYearOrdinalParse) { + array[YEAR] = config._locale.eraYearOrdinalParse(input, match); + } else { + array[YEAR] = parseInt(input, 10); + } + }); + + function localeEras(m, format) { + var i, + l, + date, + eras = this._eras || getLocale('en')._eras; + for (i = 0, l = eras.length; i < l; ++i) { + switch (typeof eras[i].since) { + case 'string': + // truncate time + date = hooks(eras[i].since).startOf('day'); + eras[i].since = date.valueOf(); + break; + } + + switch (typeof eras[i].until) { + case 'undefined': + eras[i].until = +Infinity; + break; + case 'string': + // truncate time + date = hooks(eras[i].until).startOf('day').valueOf(); + eras[i].until = date.valueOf(); + break; + } + } + return eras; + } + + function localeErasParse(eraName, format, strict) { + var i, + l, + eras = this.eras(), + name, + abbr, + narrow; + eraName = eraName.toUpperCase(); + + for (i = 0, l = eras.length; i < l; ++i) { + name = eras[i].name.toUpperCase(); + abbr = eras[i].abbr.toUpperCase(); + narrow = eras[i].narrow.toUpperCase(); + + if (strict) { + switch (format) { + case 'N': + case 'NN': + case 'NNN': + if (abbr === eraName) { + return eras[i]; + } + break; + + case 'NNNN': + if (name === eraName) { + return eras[i]; + } + break; + + case 'NNNNN': + if (narrow === eraName) { + return eras[i]; + } + break; + } + } else if ([name, abbr, narrow].indexOf(eraName) >= 0) { + return eras[i]; + } + } + } + + function localeErasConvertYear(era, year) { + var dir = era.since <= era.until ? +1 : -1; + if (year === undefined) { + return hooks(era.since).year(); + } else { + return hooks(era.since).year() + (year - era.offset) * dir; + } + } + + function getEraName() { + var i, + l, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + // truncate time + val = this.startOf('day').valueOf(); + + if (eras[i].since <= val && val <= eras[i].until) { + return eras[i].name; + } + if (eras[i].until <= val && val <= eras[i].since) { + return eras[i].name; + } + } + + return ''; + } + + function getEraNarrow() { + var i, + l, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + // truncate time + val = this.startOf('day').valueOf(); + + if (eras[i].since <= val && val <= eras[i].until) { + return eras[i].narrow; + } + if (eras[i].until <= val && val <= eras[i].since) { + return eras[i].narrow; + } + } + + return ''; + } + + function getEraAbbr() { + var i, + l, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + // truncate time + val = this.startOf('day').valueOf(); + + if (eras[i].since <= val && val <= eras[i].until) { + return eras[i].abbr; + } + if (eras[i].until <= val && val <= eras[i].since) { + return eras[i].abbr; + } + } + + return ''; + } + + function getEraYear() { + var i, + l, + dir, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + dir = eras[i].since <= eras[i].until ? +1 : -1; + + // truncate time + val = this.startOf('day').valueOf(); + + if ( + (eras[i].since <= val && val <= eras[i].until) || + (eras[i].until <= val && val <= eras[i].since) + ) { + return ( + (this.year() - hooks(eras[i].since).year()) * dir + + eras[i].offset + ); + } + } + + return this.year(); + } + + function erasNameRegex(isStrict) { + if (!hasOwnProp(this, '_erasNameRegex')) { + computeErasParse.call(this); + } + return isStrict ? this._erasNameRegex : this._erasRegex; + } + + function erasAbbrRegex(isStrict) { + if (!hasOwnProp(this, '_erasAbbrRegex')) { + computeErasParse.call(this); + } + return isStrict ? this._erasAbbrRegex : this._erasRegex; + } + + function erasNarrowRegex(isStrict) { + if (!hasOwnProp(this, '_erasNarrowRegex')) { + computeErasParse.call(this); + } + return isStrict ? this._erasNarrowRegex : this._erasRegex; + } + + function matchEraAbbr(isStrict, locale) { + return locale.erasAbbrRegex(isStrict); + } + + function matchEraName(isStrict, locale) { + return locale.erasNameRegex(isStrict); + } + + function matchEraNarrow(isStrict, locale) { + return locale.erasNarrowRegex(isStrict); + } + + function matchEraYearOrdinal(isStrict, locale) { + return locale._eraYearOrdinalRegex || matchUnsigned; + } + + function computeErasParse() { + var abbrPieces = [], + namePieces = [], + narrowPieces = [], + mixedPieces = [], + i, + l, + eras = this.eras(); + + for (i = 0, l = eras.length; i < l; ++i) { + namePieces.push(regexEscape(eras[i].name)); + abbrPieces.push(regexEscape(eras[i].abbr)); + narrowPieces.push(regexEscape(eras[i].narrow)); + + mixedPieces.push(regexEscape(eras[i].name)); + mixedPieces.push(regexEscape(eras[i].abbr)); + mixedPieces.push(regexEscape(eras[i].narrow)); + } + + this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i'); + this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i'); + this._erasNarrowRegex = new RegExp( + '^(' + narrowPieces.join('|') + ')', + 'i' + ); + } + + // FORMATTING + + addFormatToken(0, ['gg', 2], 0, function () { + return this.weekYear() % 100; + }); + + addFormatToken(0, ['GG', 2], 0, function () { + return this.isoWeekYear() % 100; + }); + + function addWeekYearFormatToken(token, getter) { + addFormatToken(0, [token, token.length], 0, getter); + } + + addWeekYearFormatToken('gggg', 'weekYear'); + addWeekYearFormatToken('ggggg', 'weekYear'); + addWeekYearFormatToken('GGGG', 'isoWeekYear'); + addWeekYearFormatToken('GGGGG', 'isoWeekYear'); + + // ALIASES + + addUnitAlias('weekYear', 'gg'); + addUnitAlias('isoWeekYear', 'GG'); + + // PRIORITY + + addUnitPriority('weekYear', 1); + addUnitPriority('isoWeekYear', 1); + + // PARSING + + addRegexToken('G', matchSigned); + addRegexToken('g', matchSigned); + addRegexToken('GG', match1to2, match2); + addRegexToken('gg', match1to2, match2); + addRegexToken('GGGG', match1to4, match4); + addRegexToken('gggg', match1to4, match4); + addRegexToken('GGGGG', match1to6, match6); + addRegexToken('ggggg', match1to6, match6); + + addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function ( + input, + week, + config, + token + ) { + week[token.substr(0, 2)] = toInt(input); + }); + + addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { + week[token] = hooks.parseTwoDigitYear(input); + }); + + // MOMENTS + + function getSetWeekYear(input) { + return getSetWeekYearHelper.call( + this, + input, + this.week(), + this.weekday(), + this.localeData()._week.dow, + this.localeData()._week.doy + ); + } + + function getSetISOWeekYear(input) { + return getSetWeekYearHelper.call( + this, + input, + this.isoWeek(), + this.isoWeekday(), + 1, + 4 + ); + } + + function getISOWeeksInYear() { + return weeksInYear(this.year(), 1, 4); + } + + function getISOWeeksInISOWeekYear() { + return weeksInYear(this.isoWeekYear(), 1, 4); + } + + function getWeeksInYear() { + var weekInfo = this.localeData()._week; + return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); + } + + function getWeeksInWeekYear() { + var weekInfo = this.localeData()._week; + return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy); + } + + function getSetWeekYearHelper(input, week, weekday, dow, doy) { + var weeksTarget; + if (input == null) { + return weekOfYear(this, dow, doy).year; + } else { + weeksTarget = weeksInYear(input, dow, doy); + if (week > weeksTarget) { + week = weeksTarget; + } + return setWeekAll.call(this, input, week, weekday, dow, doy); + } + } + + function setWeekAll(weekYear, week, weekday, dow, doy) { + var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), + date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear); + + this.year(date.getUTCFullYear()); + this.month(date.getUTCMonth()); + this.date(date.getUTCDate()); + return this; + } + + // FORMATTING + + addFormatToken('Q', 0, 'Qo', 'quarter'); + + // ALIASES + + addUnitAlias('quarter', 'Q'); + + // PRIORITY + + addUnitPriority('quarter', 7); + + // PARSING + + addRegexToken('Q', match1); + addParseToken('Q', function (input, array) { + array[MONTH] = (toInt(input) - 1) * 3; + }); + + // MOMENTS + + function getSetQuarter(input) { + return input == null + ? Math.ceil((this.month() + 1) / 3) + : this.month((input - 1) * 3 + (this.month() % 3)); + } + + // FORMATTING + + addFormatToken('D', ['DD', 2], 'Do', 'date'); + + // ALIASES + + addUnitAlias('date', 'D'); + + // PRIORITY + addUnitPriority('date', 9); + + // PARSING + + addRegexToken('D', match1to2); + addRegexToken('DD', match1to2, match2); + addRegexToken('Do', function (isStrict, locale) { + // TODO: Remove "ordinalParse" fallback in next major release. + return isStrict + ? locale._dayOfMonthOrdinalParse || locale._ordinalParse + : locale._dayOfMonthOrdinalParseLenient; + }); + + addParseToken(['D', 'DD'], DATE); + addParseToken('Do', function (input, array) { + array[DATE] = toInt(input.match(match1to2)[0]); + }); + + // MOMENTS + + var getSetDayOfMonth = makeGetSet('Date', true); + + // FORMATTING + + addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); + + // ALIASES + + addUnitAlias('dayOfYear', 'DDD'); + + // PRIORITY + addUnitPriority('dayOfYear', 4); + + // PARSING + + addRegexToken('DDD', match1to3); + addRegexToken('DDDD', match3); + addParseToken(['DDD', 'DDDD'], function (input, array, config) { + config._dayOfYear = toInt(input); + }); + + // HELPERS + + // MOMENTS + + function getSetDayOfYear(input) { + var dayOfYear = + Math.round( + (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5 + ) + 1; + return input == null ? dayOfYear : this.add(input - dayOfYear, 'd'); + } + + // FORMATTING + + addFormatToken('m', ['mm', 2], 0, 'minute'); + + // ALIASES + + addUnitAlias('minute', 'm'); + + // PRIORITY + + addUnitPriority('minute', 14); + + // PARSING + + addRegexToken('m', match1to2); + addRegexToken('mm', match1to2, match2); + addParseToken(['m', 'mm'], MINUTE); + + // MOMENTS + + var getSetMinute = makeGetSet('Minutes', false); + + // FORMATTING + + addFormatToken('s', ['ss', 2], 0, 'second'); + + // ALIASES + + addUnitAlias('second', 's'); + + // PRIORITY + + addUnitPriority('second', 15); + + // PARSING + + addRegexToken('s', match1to2); + addRegexToken('ss', match1to2, match2); + addParseToken(['s', 'ss'], SECOND); + + // MOMENTS + + var getSetSecond = makeGetSet('Seconds', false); + + // FORMATTING + + addFormatToken('S', 0, 0, function () { + return ~~(this.millisecond() / 100); + }); + + addFormatToken(0, ['SS', 2], 0, function () { + return ~~(this.millisecond() / 10); + }); + + addFormatToken(0, ['SSS', 3], 0, 'millisecond'); + addFormatToken(0, ['SSSS', 4], 0, function () { + return this.millisecond() * 10; + }); + addFormatToken(0, ['SSSSS', 5], 0, function () { + return this.millisecond() * 100; + }); + addFormatToken(0, ['SSSSSS', 6], 0, function () { + return this.millisecond() * 1000; + }); + addFormatToken(0, ['SSSSSSS', 7], 0, function () { + return this.millisecond() * 10000; + }); + addFormatToken(0, ['SSSSSSSS', 8], 0, function () { + return this.millisecond() * 100000; + }); + addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { + return this.millisecond() * 1000000; + }); + + // ALIASES + + addUnitAlias('millisecond', 'ms'); + + // PRIORITY + + addUnitPriority('millisecond', 16); + + // PARSING + + addRegexToken('S', match1to3, match1); + addRegexToken('SS', match1to3, match2); + addRegexToken('SSS', match1to3, match3); + + var token, getSetMillisecond; + for (token = 'SSSS'; token.length <= 9; token += 'S') { + addRegexToken(token, matchUnsigned); + } + + function parseMs(input, array) { + array[MILLISECOND] = toInt(('0.' + input) * 1000); + } + + for (token = 'S'; token.length <= 9; token += 'S') { + addParseToken(token, parseMs); + } + + getSetMillisecond = makeGetSet('Milliseconds', false); + + // FORMATTING + + addFormatToken('z', 0, 0, 'zoneAbbr'); + addFormatToken('zz', 0, 0, 'zoneName'); + + // MOMENTS + + function getZoneAbbr() { + return this._isUTC ? 'UTC' : ''; + } + + function getZoneName() { + return this._isUTC ? 'Coordinated Universal Time' : ''; + } + + var proto = Moment.prototype; + + proto.add = add; + proto.calendar = calendar$1; + proto.clone = clone; + proto.diff = diff; + proto.endOf = endOf; + proto.format = format; + proto.from = from; + proto.fromNow = fromNow; + proto.to = to; + proto.toNow = toNow; + proto.get = stringGet; + proto.invalidAt = invalidAt; + proto.isAfter = isAfter; + proto.isBefore = isBefore; + proto.isBetween = isBetween; + proto.isSame = isSame; + proto.isSameOrAfter = isSameOrAfter; + proto.isSameOrBefore = isSameOrBefore; + proto.isValid = isValid$2; + proto.lang = lang; + proto.locale = locale; + proto.localeData = localeData; + proto.max = prototypeMax; + proto.min = prototypeMin; + proto.parsingFlags = parsingFlags; + proto.set = stringSet; + proto.startOf = startOf; + proto.subtract = subtract; + proto.toArray = toArray; + proto.toObject = toObject; + proto.toDate = toDate; + proto.toISOString = toISOString; + proto.inspect = inspect; + if (typeof Symbol !== 'undefined' && Symbol.for != null) { + proto[Symbol.for('nodejs.util.inspect.custom')] = function () { + return 'Moment<' + this.format() + '>'; + }; + } + proto.toJSON = toJSON; + proto.toString = toString; + proto.unix = unix; + proto.valueOf = valueOf; + proto.creationData = creationData; + proto.eraName = getEraName; + proto.eraNarrow = getEraNarrow; + proto.eraAbbr = getEraAbbr; + proto.eraYear = getEraYear; + proto.year = getSetYear; + proto.isLeapYear = getIsLeapYear; + proto.weekYear = getSetWeekYear; + proto.isoWeekYear = getSetISOWeekYear; + proto.quarter = proto.quarters = getSetQuarter; + proto.month = getSetMonth; + proto.daysInMonth = getDaysInMonth; + proto.week = proto.weeks = getSetWeek; + proto.isoWeek = proto.isoWeeks = getSetISOWeek; + proto.weeksInYear = getWeeksInYear; + proto.weeksInWeekYear = getWeeksInWeekYear; + proto.isoWeeksInYear = getISOWeeksInYear; + proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear; + proto.date = getSetDayOfMonth; + proto.day = proto.days = getSetDayOfWeek; + proto.weekday = getSetLocaleDayOfWeek; + proto.isoWeekday = getSetISODayOfWeek; + proto.dayOfYear = getSetDayOfYear; + proto.hour = proto.hours = getSetHour; + proto.minute = proto.minutes = getSetMinute; + proto.second = proto.seconds = getSetSecond; + proto.millisecond = proto.milliseconds = getSetMillisecond; + proto.utcOffset = getSetOffset; + proto.utc = setOffsetToUTC; + proto.local = setOffsetToLocal; + proto.parseZone = setOffsetToParsedOffset; + proto.hasAlignedHourOffset = hasAlignedHourOffset; + proto.isDST = isDaylightSavingTime; + proto.isLocal = isLocal; + proto.isUtcOffset = isUtcOffset; + proto.isUtc = isUtc; + proto.isUTC = isUtc; + proto.zoneAbbr = getZoneAbbr; + proto.zoneName = getZoneName; + proto.dates = deprecate( + 'dates accessor is deprecated. Use date instead.', + getSetDayOfMonth + ); + proto.months = deprecate( + 'months accessor is deprecated. Use month instead', + getSetMonth + ); + proto.years = deprecate( + 'years accessor is deprecated. Use year instead', + getSetYear + ); + proto.zone = deprecate( + 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', + getSetZone + ); + proto.isDSTShifted = deprecate( + 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', + isDaylightSavingTimeShifted + ); + + function createUnix(input) { + return createLocal(input * 1000); + } + + function createInZone() { + return createLocal.apply(null, arguments).parseZone(); + } + + function preParsePostFormat(string) { + return string; + } + + var proto$1 = Locale.prototype; + + proto$1.calendar = calendar; + proto$1.longDateFormat = longDateFormat; + proto$1.invalidDate = invalidDate; + proto$1.ordinal = ordinal; + proto$1.preparse = preParsePostFormat; + proto$1.postformat = preParsePostFormat; + proto$1.relativeTime = relativeTime; + proto$1.pastFuture = pastFuture; + proto$1.set = set; + proto$1.eras = localeEras; + proto$1.erasParse = localeErasParse; + proto$1.erasConvertYear = localeErasConvertYear; + proto$1.erasAbbrRegex = erasAbbrRegex; + proto$1.erasNameRegex = erasNameRegex; + proto$1.erasNarrowRegex = erasNarrowRegex; + + proto$1.months = localeMonths; + proto$1.monthsShort = localeMonthsShort; + proto$1.monthsParse = localeMonthsParse; + proto$1.monthsRegex = monthsRegex; + proto$1.monthsShortRegex = monthsShortRegex; + proto$1.week = localeWeek; + proto$1.firstDayOfYear = localeFirstDayOfYear; + proto$1.firstDayOfWeek = localeFirstDayOfWeek; + + proto$1.weekdays = localeWeekdays; + proto$1.weekdaysMin = localeWeekdaysMin; + proto$1.weekdaysShort = localeWeekdaysShort; + proto$1.weekdaysParse = localeWeekdaysParse; + + proto$1.weekdaysRegex = weekdaysRegex; + proto$1.weekdaysShortRegex = weekdaysShortRegex; + proto$1.weekdaysMinRegex = weekdaysMinRegex; + + proto$1.isPM = localeIsPM; + proto$1.meridiem = localeMeridiem; + + function get$1(format, index, field, setter) { + var locale = getLocale(), + utc = createUTC().set(setter, index); + return locale[field](utc, format); + } + + function listMonthsImpl(format, index, field) { + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + + if (index != null) { + return get$1(format, index, field, 'month'); + } + + var i, + out = []; + for (i = 0; i < 12; i++) { + out[i] = get$1(format, i, field, 'month'); + } + return out; + } + + // () + // (5) + // (fmt, 5) + // (fmt) + // (true) + // (true, 5) + // (true, fmt, 5) + // (true, fmt) + function listWeekdaysImpl(localeSorted, format, index, field) { + if (typeof localeSorted === 'boolean') { + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + } else { + format = localeSorted; + index = format; + localeSorted = false; + + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + } + + var locale = getLocale(), + shift = localeSorted ? locale._week.dow : 0, + i, + out = []; + + if (index != null) { + return get$1(format, (index + shift) % 7, field, 'day'); + } + + for (i = 0; i < 7; i++) { + out[i] = get$1(format, (i + shift) % 7, field, 'day'); + } + return out; + } + + function listMonths(format, index) { + return listMonthsImpl(format, index, 'months'); + } + + function listMonthsShort(format, index) { + return listMonthsImpl(format, index, 'monthsShort'); + } + + function listWeekdays(localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdays'); + } + + function listWeekdaysShort(localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort'); + } + + function listWeekdaysMin(localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin'); + } + + getSetGlobalLocale('en', { + eras: [ + { + since: '0001-01-01', + until: +Infinity, + offset: 1, + name: 'Anno Domini', + narrow: 'AD', + abbr: 'AD', + }, + { + since: '0000-12-31', + until: -Infinity, + offset: 1, + name: 'Before Christ', + narrow: 'BC', + abbr: 'BC', + }, + ], + dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal: function (number) { + var b = number % 10, + output = + toInt((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + }); + + // Side effect imports + + hooks.lang = deprecate( + 'moment.lang is deprecated. Use moment.locale instead.', + getSetGlobalLocale + ); + hooks.langData = deprecate( + 'moment.langData is deprecated. Use moment.localeData instead.', + getLocale + ); + + var mathAbs = Math.abs; + + function abs() { + var data = this._data; + + this._milliseconds = mathAbs(this._milliseconds); + this._days = mathAbs(this._days); + this._months = mathAbs(this._months); + + data.milliseconds = mathAbs(data.milliseconds); + data.seconds = mathAbs(data.seconds); + data.minutes = mathAbs(data.minutes); + data.hours = mathAbs(data.hours); + data.months = mathAbs(data.months); + data.years = mathAbs(data.years); + + return this; + } + + function addSubtract$1(duration, input, value, direction) { + var other = createDuration(input, value); + + duration._milliseconds += direction * other._milliseconds; + duration._days += direction * other._days; + duration._months += direction * other._months; + + return duration._bubble(); + } + + // supports only 2.0-style add(1, 's') or add(duration) + function add$1(input, value) { + return addSubtract$1(this, input, value, 1); + } + + // supports only 2.0-style subtract(1, 's') or subtract(duration) + function subtract$1(input, value) { + return addSubtract$1(this, input, value, -1); + } + + function absCeil(number) { + if (number < 0) { + return Math.floor(number); + } else { + return Math.ceil(number); + } + } + + function bubble() { + var milliseconds = this._milliseconds, + days = this._days, + months = this._months, + data = this._data, + seconds, + minutes, + hours, + years, + monthsFromDays; + + // if we have a mix of positive and negative values, bubble down first + // check: https://github.com/moment/moment/issues/2166 + if ( + !( + (milliseconds >= 0 && days >= 0 && months >= 0) || + (milliseconds <= 0 && days <= 0 && months <= 0) + ) + ) { + milliseconds += absCeil(monthsToDays(months) + days) * 864e5; + days = 0; + months = 0; + } + + // The following code bubbles up values, see the tests for + // examples of what that means. + data.milliseconds = milliseconds % 1000; + + seconds = absFloor(milliseconds / 1000); + data.seconds = seconds % 60; + + minutes = absFloor(seconds / 60); + data.minutes = minutes % 60; + + hours = absFloor(minutes / 60); + data.hours = hours % 24; + + days += absFloor(hours / 24); + + // convert days to months + monthsFromDays = absFloor(daysToMonths(days)); + months += monthsFromDays; + days -= absCeil(monthsToDays(monthsFromDays)); + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + data.days = days; + data.months = months; + data.years = years; + + return this; + } + + function daysToMonths(days) { + // 400 years have 146097 days (taking into account leap year rules) + // 400 years have 12 months === 4800 + return (days * 4800) / 146097; + } + + function monthsToDays(months) { + // the reverse of daysToMonths + return (months * 146097) / 4800; + } + + function as(units) { + if (!this.isValid()) { + return NaN; + } + var days, + months, + milliseconds = this._milliseconds; + + units = normalizeUnits(units); + + if (units === 'month' || units === 'quarter' || units === 'year') { + days = this._days + milliseconds / 864e5; + months = this._months + daysToMonths(days); + switch (units) { + case 'month': + return months; + case 'quarter': + return months / 3; + case 'year': + return months / 12; + } + } else { + // handle milliseconds separately because of floating point math errors (issue #1867) + days = this._days + Math.round(monthsToDays(this._months)); + switch (units) { + case 'week': + return days / 7 + milliseconds / 6048e5; + case 'day': + return days + milliseconds / 864e5; + case 'hour': + return days * 24 + milliseconds / 36e5; + case 'minute': + return days * 1440 + milliseconds / 6e4; + case 'second': + return days * 86400 + milliseconds / 1000; + // Math.floor prevents floating point math errors here + case 'millisecond': + return Math.floor(days * 864e5) + milliseconds; + default: + throw new Error('Unknown unit ' + units); + } + } + } + + // TODO: Use this.as('ms')? + function valueOf$1() { + if (!this.isValid()) { + return NaN; + } + return ( + this._milliseconds + + this._days * 864e5 + + (this._months % 12) * 2592e6 + + toInt(this._months / 12) * 31536e6 + ); + } + + function makeAs(alias) { + return function () { + return this.as(alias); + }; + } + + var asMilliseconds = makeAs('ms'), + asSeconds = makeAs('s'), + asMinutes = makeAs('m'), + asHours = makeAs('h'), + asDays = makeAs('d'), + asWeeks = makeAs('w'), + asMonths = makeAs('M'), + asQuarters = makeAs('Q'), + asYears = makeAs('y'); + + function clone$1() { + return createDuration(this); + } + + function get$2(units) { + units = normalizeUnits(units); + return this.isValid() ? this[units + 's']() : NaN; + } + + function makeGetter(name) { + return function () { + return this.isValid() ? this._data[name] : NaN; + }; + } + + var milliseconds = makeGetter('milliseconds'), + seconds = makeGetter('seconds'), + minutes = makeGetter('minutes'), + hours = makeGetter('hours'), + days = makeGetter('days'), + months = makeGetter('months'), + years = makeGetter('years'); + + function weeks() { + return absFloor(this.days() / 7); + } + + var round = Math.round, + thresholds = { + ss: 44, // a few seconds to seconds + s: 45, // seconds to minute + m: 45, // minutes to hour + h: 22, // hours to day + d: 26, // days to month/week + w: null, // weeks to month + M: 11, // months to year + }; + + // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize + function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { + return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); + } + + function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) { + var duration = createDuration(posNegDuration).abs(), + seconds = round(duration.as('s')), + minutes = round(duration.as('m')), + hours = round(duration.as('h')), + days = round(duration.as('d')), + months = round(duration.as('M')), + weeks = round(duration.as('w')), + years = round(duration.as('y')), + a = + (seconds <= thresholds.ss && ['s', seconds]) || + (seconds < thresholds.s && ['ss', seconds]) || + (minutes <= 1 && ['m']) || + (minutes < thresholds.m && ['mm', minutes]) || + (hours <= 1 && ['h']) || + (hours < thresholds.h && ['hh', hours]) || + (days <= 1 && ['d']) || + (days < thresholds.d && ['dd', days]); + + if (thresholds.w != null) { + a = + a || + (weeks <= 1 && ['w']) || + (weeks < thresholds.w && ['ww', weeks]); + } + a = a || + (months <= 1 && ['M']) || + (months < thresholds.M && ['MM', months]) || + (years <= 1 && ['y']) || ['yy', years]; + + a[2] = withoutSuffix; + a[3] = +posNegDuration > 0; + a[4] = locale; + return substituteTimeAgo.apply(null, a); + } + + // This function allows you to set the rounding function for relative time strings + function getSetRelativeTimeRounding(roundingFunction) { + if (roundingFunction === undefined) { + return round; + } + if (typeof roundingFunction === 'function') { + round = roundingFunction; + return true; + } + return false; + } + + // This function allows you to set a threshold for relative time strings + function getSetRelativeTimeThreshold(threshold, limit) { + if (thresholds[threshold] === undefined) { + return false; + } + if (limit === undefined) { + return thresholds[threshold]; + } + thresholds[threshold] = limit; + if (threshold === 's') { + thresholds.ss = limit - 1; + } + return true; + } + + function humanize(argWithSuffix, argThresholds) { + if (!this.isValid()) { + return this.localeData().invalidDate(); + } + + var withSuffix = false, + th = thresholds, + locale, + output; + + if (typeof argWithSuffix === 'object') { + argThresholds = argWithSuffix; + argWithSuffix = false; + } + if (typeof argWithSuffix === 'boolean') { + withSuffix = argWithSuffix; + } + if (typeof argThresholds === 'object') { + th = Object.assign({}, thresholds, argThresholds); + if (argThresholds.s != null && argThresholds.ss == null) { + th.ss = argThresholds.s - 1; + } + } + + locale = this.localeData(); + output = relativeTime$1(this, !withSuffix, th, locale); + + if (withSuffix) { + output = locale.pastFuture(+this, output); + } + + return locale.postformat(output); + } + + var abs$1 = Math.abs; + + function sign(x) { + return (x > 0) - (x < 0) || +x; + } + + function toISOString$1() { + // for ISO strings we do not use the normal bubbling rules: + // * milliseconds bubble up until they become hours + // * days do not bubble at all + // * months bubble up until they become years + // This is because there is no context-free conversion between hours and days + // (think of clock changes) + // and also not between days and months (28-31 days per month) + if (!this.isValid()) { + return this.localeData().invalidDate(); + } + + var seconds = abs$1(this._milliseconds) / 1000, + days = abs$1(this._days), + months = abs$1(this._months), + minutes, + hours, + years, + s, + total = this.asSeconds(), + totalSign, + ymSign, + daysSign, + hmsSign; + + if (!total) { + // this is the same as C#'s (Noda) and python (isodate)... + // but not other JS (goog.date) + return 'P0D'; + } + + // 3600 seconds -> 60 minutes -> 1 hour + minutes = absFloor(seconds / 60); + hours = absFloor(minutes / 60); + seconds %= 60; + minutes %= 60; + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js + s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : ''; + + totalSign = total < 0 ? '-' : ''; + ymSign = sign(this._months) !== sign(total) ? '-' : ''; + daysSign = sign(this._days) !== sign(total) ? '-' : ''; + hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : ''; + + return ( + totalSign + + 'P' + + (years ? ymSign + years + 'Y' : '') + + (months ? ymSign + months + 'M' : '') + + (days ? daysSign + days + 'D' : '') + + (hours || minutes || seconds ? 'T' : '') + + (hours ? hmsSign + hours + 'H' : '') + + (minutes ? hmsSign + minutes + 'M' : '') + + (seconds ? hmsSign + s + 'S' : '') + ); + } + + var proto$2 = Duration.prototype; + + proto$2.isValid = isValid$1; + proto$2.abs = abs; + proto$2.add = add$1; + proto$2.subtract = subtract$1; + proto$2.as = as; + proto$2.asMilliseconds = asMilliseconds; + proto$2.asSeconds = asSeconds; + proto$2.asMinutes = asMinutes; + proto$2.asHours = asHours; + proto$2.asDays = asDays; + proto$2.asWeeks = asWeeks; + proto$2.asMonths = asMonths; + proto$2.asQuarters = asQuarters; + proto$2.asYears = asYears; + proto$2.valueOf = valueOf$1; + proto$2._bubble = bubble; + proto$2.clone = clone$1; + proto$2.get = get$2; + proto$2.milliseconds = milliseconds; + proto$2.seconds = seconds; + proto$2.minutes = minutes; + proto$2.hours = hours; + proto$2.days = days; + proto$2.weeks = weeks; + proto$2.months = months; + proto$2.years = years; + proto$2.humanize = humanize; + proto$2.toISOString = toISOString$1; + proto$2.toString = toISOString$1; + proto$2.toJSON = toISOString$1; + proto$2.locale = locale; + proto$2.localeData = localeData; + + proto$2.toIsoString = deprecate( + 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', + toISOString$1 + ); + proto$2.lang = lang; + + // FORMATTING + + addFormatToken('X', 0, 0, 'unix'); + addFormatToken('x', 0, 0, 'valueOf'); + + // PARSING + + addRegexToken('x', matchSigned); + addRegexToken('X', matchTimestamp); + addParseToken('X', function (input, array, config) { + config._d = new Date(parseFloat(input) * 1000); + }); + addParseToken('x', function (input, array, config) { + config._d = new Date(toInt(input)); + }); + + //! moment.js + + hooks.version = '2.27.0'; + + setHookCallback(createLocal); + + hooks.fn = proto; + hooks.min = min; + hooks.max = max; + hooks.now = now; + hooks.utc = createUTC; + hooks.unix = createUnix; + hooks.months = listMonths; + hooks.isDate = isDate; + hooks.locale = getSetGlobalLocale; + hooks.invalid = createInvalid; + hooks.duration = createDuration; + hooks.isMoment = isMoment; + hooks.weekdays = listWeekdays; + hooks.parseZone = createInZone; + hooks.localeData = getLocale; + hooks.isDuration = isDuration; + hooks.monthsShort = listMonthsShort; + hooks.weekdaysMin = listWeekdaysMin; + hooks.defineLocale = defineLocale; + hooks.updateLocale = updateLocale; + hooks.locales = listLocales; + hooks.weekdaysShort = listWeekdaysShort; + hooks.normalizeUnits = normalizeUnits; + hooks.relativeTimeRounding = getSetRelativeTimeRounding; + hooks.relativeTimeThreshold = getSetRelativeTimeThreshold; + hooks.calendarFormat = getCalendarFormat; + hooks.prototype = proto; + + // currently HTML5 input type only supports 24-hour formats + hooks.HTML5_FMT = { + DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // + DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // + DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // + DATE: 'YYYY-MM-DD', // + TIME: 'HH:mm', // + TIME_SECONDS: 'HH:mm:ss', // + TIME_MS: 'HH:mm:ss.SSS', // + WEEK: 'GGGG-[W]WW', // + MONTH: 'YYYY-MM', // + }; + + return hooks; + +}))); diff --git a/admin/js/vendors/moment/moment.min.js b/admin/js/vendors/moment/moment.min.js new file mode 100644 index 0000000..36f8628 --- /dev/null +++ b/admin/js/vendors/moment/moment.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.moment=t()}(this,function(){"use strict";var e,i;function f(){return e.apply(null,arguments)}function o(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function u(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function m(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function l(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;for(var t in e)if(m(e,t))return;return 1}function r(e){return void 0===e}function h(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function a(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function d(e,t){for(var n=[],s=0;s>>0,s=0;sFe(e)?(r=e+1,a-Fe(e)):(r=e,a);return{year:r,dayOfYear:o}}function Ae(e,t,n){var s,i,r=Ge(e.year(),t,n),a=Math.floor((e.dayOfYear()-r-1)/7)+1;return a<1?s=a+je(i=e.year()-1,t,n):a>je(e.year(),t,n)?(s=a-je(e.year(),t,n),i=e.year()+1):(i=e.year(),s=a),{week:s,year:i}}function je(e,t,n){var s=Ge(e,t,n),i=Ge(e+1,t,n);return(Fe(e)-s+i)/7}C("w",["ww",2],"wo","week"),C("W",["WW",2],"Wo","isoWeek"),L("week","w"),L("isoWeek","W"),A("week",5),A("isoWeek",5),ce("w",te),ce("ww",te,Q),ce("W",te),ce("WW",te,Q),ge(["w","ww","W","WW"],function(e,t,n,s){t[s.substr(0,1)]=Z(e)});function Ie(e,t){return e.slice(t,7).concat(e.slice(0,t))}C("d",0,"do","day"),C("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),C("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),C("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),C("e",0,0,"weekday"),C("E",0,0,"isoWeekday"),L("day","d"),L("weekday","e"),L("isoWeekday","E"),A("day",11),A("weekday",11),A("isoWeekday",11),ce("d",te),ce("e",te),ce("E",te),ce("dd",function(e,t){return t.weekdaysMinRegex(e)}),ce("ddd",function(e,t){return t.weekdaysShortRegex(e)}),ce("dddd",function(e,t){return t.weekdaysRegex(e)}),ge(["dd","ddd","dddd"],function(e,t,n,s){var i=n._locale.weekdaysParse(e,s,n._strict);null!=i?t.d=i:y(n).invalidWeekday=e}),ge(["d","e","E"],function(e,t,n,s){t[s]=Z(e)});var Ze="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),ze="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),$e="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),qe=de,Be=de,Je=de;function Qe(){function e(e,t){return t.length-e.length}for(var t,n,s,i,r=[],a=[],o=[],u=[],l=0;l<7;l++)t=_([2e3,1]).day(l),n=me(this.weekdaysMin(t,"")),s=me(this.weekdaysShort(t,"")),i=me(this.weekdays(t,"")),r.push(n),a.push(s),o.push(i),u.push(n),u.push(s),u.push(i);r.sort(e),a.sort(e),o.sort(e),u.sort(e),this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Xe(){return this.hours()%12||12}function Ke(e,t){C(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function et(e,t){return t._meridiemParse}C("H",["HH",2],0,"hour"),C("h",["hh",2],0,Xe),C("k",["kk",2],0,function(){return this.hours()||24}),C("hmm",0,0,function(){return""+Xe.apply(this)+T(this.minutes(),2)}),C("hmmss",0,0,function(){return""+Xe.apply(this)+T(this.minutes(),2)+T(this.seconds(),2)}),C("Hmm",0,0,function(){return""+this.hours()+T(this.minutes(),2)}),C("Hmmss",0,0,function(){return""+this.hours()+T(this.minutes(),2)+T(this.seconds(),2)}),Ke("a",!0),Ke("A",!1),L("hour","h"),A("hour",13),ce("a",et),ce("A",et),ce("H",te),ce("h",te),ce("k",te),ce("HH",te,Q),ce("hh",te,Q),ce("kk",te,Q),ce("hmm",ne),ce("hmmss",se),ce("Hmm",ne),ce("Hmmss",se),ye(["H","HH"],Me),ye(["k","kk"],function(e,t,n){var s=Z(e);t[Me]=24===s?0:s}),ye(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),ye(["h","hh"],function(e,t,n){t[Me]=Z(e),y(n).bigHour=!0}),ye("hmm",function(e,t,n){var s=e.length-2;t[Me]=Z(e.substr(0,s)),t[De]=Z(e.substr(s)),y(n).bigHour=!0}),ye("hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[Me]=Z(e.substr(0,s)),t[De]=Z(e.substr(s,2)),t[Se]=Z(e.substr(i)),y(n).bigHour=!0}),ye("Hmm",function(e,t,n){var s=e.length-2;t[Me]=Z(e.substr(0,s)),t[De]=Z(e.substr(s))}),ye("Hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[Me]=Z(e.substr(0,s)),t[De]=Z(e.substr(s,2)),t[Se]=Z(e.substr(i))});var tt=z("Hours",!0);var nt,st={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Te,monthsShort:Ne,week:{dow:0,doy:6},weekdays:Ze,weekdaysMin:$e,weekdaysShort:ze,meridiemParse:/[ap]\.?m?\.?/i},it={},rt={};function at(e){return e?e.toLowerCase().replace("_","-"):e}function ot(e){for(var t,n,s,i,r=0;r=t&&function(e,t){for(var n=Math.min(e.length,t.length),s=0;s=t-1)break;t--}r++}return nt}function ut(t){var e;if(void 0===it[t]&&"undefined"!=typeof module&&module&&module.exports)try{e=nt._abbr,require("./locale/"+t),lt(e)}catch(e){it[t]=null}return it[t]}function lt(e,t){var n;return e&&((n=r(t)?dt(e):ht(e,t))?nt=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),nt._abbr}function ht(e,t){if(null===t)return delete it[e],null;var n,s=st;if(t.abbr=e,null!=it[e])Y("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),s=it[e]._config;else if(null!=t.parentLocale)if(null!=it[t.parentLocale])s=it[t.parentLocale]._config;else{if(null==(n=ut(t.parentLocale)))return rt[t.parentLocale]||(rt[t.parentLocale]=[]),rt[t.parentLocale].push({name:e,config:t}),null;s=n._config}return it[e]=new x(b(s,t)),rt[e]&&rt[e].forEach(function(e){ht(e.name,e.config)}),lt(e),it[e]}function dt(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return nt;if(!o(e)){if(t=ut(e))return t;e=[e]}return ot(e)}function ct(e){var t,n=e._a;return n&&-2===y(e).overflow&&(t=n[ve]<0||11xe(n[pe],n[ve])?ke:n[Me]<0||24je(n,r,a)?y(e)._overflowWeeks=!0:null!=u?y(e)._overflowWeekday=!0:(o=Ee(n,s,i,r,a),e._a[pe]=o.year,e._dayOfYear=o.dayOfYear)}(e),null!=e._dayOfYear&&(r=St(e._a[pe],s[pe]),(e._dayOfYear>Fe(r)||0===e._dayOfYear)&&(y(e)._overflowDayOfYear=!0),n=Ve(r,0,e._dayOfYear),e._a[ve]=n.getUTCMonth(),e._a[ke]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=u[t]=s[t];for(;t<7;t++)e._a[t]=u[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[Me]&&0===e._a[De]&&0===e._a[Se]&&0===e._a[Ye]&&(e._nextDay=!0,e._a[Me]=0),e._d=(e._useUTC?Ve:function(e,t,n,s,i,r,a){var o;return e<100&&0<=e?(o=new Date(e+400,t,n,s,i,r,a),isFinite(o.getFullYear())&&o.setFullYear(e)):o=new Date(e,t,n,s,i,r,a),o}).apply(null,u),i=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[Me]=24),e._w&&void 0!==e._w.d&&e._w.d!==i&&(y(e).weekdayMismatch=!0)}}function Ot(e){if(e._f!==f.ISO_8601)if(e._f!==f.RFC_2822){e._a=[],y(e).empty=!0;for(var t,n,s,i,r,a,o,u=""+e._i,l=u.length,h=0,d=H(e._f,e._locale).match(N)||[],c=0;cn.valueOf():n.valueOf()"}),pn.toJSON=function(){return this.isValid()?this.toISOString():null},pn.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},pn.unix=function(){return Math.floor(this.valueOf()/1e3)},pn.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},pn.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},pn.eraName=function(){for(var e,t=this.localeData().eras(),n=0,s=t.length;nthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},pn.isLocal=function(){return!!this.isValid()&&!this._isUTC},pn.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},pn.isUtc=At,pn.isUTC=At,pn.zoneAbbr=function(){return this._isUTC?"UTC":""},pn.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},pn.dates=n("dates accessor is deprecated. Use date instead.",fn),pn.months=n("months accessor is deprecated. Use month instead",Ue),pn.years=n("years accessor is deprecated. Use year instead",Le),pn.zone=n("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}),pn.isDSTShifted=n("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!r(this._isDSTShifted))return this._isDSTShifted;var e,t={};return v(t,this),(t=bt(t))._a?(e=(t._isUTC?_:Tt)(t._a),this._isDSTShifted=this.isValid()&&0cBottom&&(container.scrollTop+=eBottom-cBottom)}function putContent(el,currentPosition,isOpen){var height=el.offsetHeight,rect=el.getBoundingClientRect(),elemTop=isOpen?rect.top:rect.top-height,elemBottom=isOpen?rect.bottom:rect.bottom+height;return elemTop<=0?"below":elemBottom>=window.innerHeight?"above":isOpen?currentPosition:"below"}function debounce(func,wait,immediate){var timeout;return void 0===wait&&(wait=100),void 0===immediate&&(immediate=!1),function(){for(var args=[],_i=0;_i[^<>]*'+originalTextFoundByRegex+"")}function kebabCase(str){var result=str.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g,(function(match){return"-"+match.toLowerCase()}));return str[0]===str[0].toUpperCase()?result.substring(1):result}exports.__esModule=!0,exports.hasClassInTree=hasClassInTree,exports.ensureElementInView=ensureElementInView,exports.putContent=putContent,exports.debounce=debounce,exports.isValueInArrayOfObjects=isValueInArrayOfObjects,exports.highlight=highlight,exports.kebabCase=kebabCase,function(){var w=window;function CustomEvent(event,params){params=params||{bubbles:!1,cancelable:!1,detail:void 0};var evt=document.createEvent("CustomEvent");return evt.initCustomEvent(event,params.bubbles,params.cancelable,params.detail),evt}"function"!=typeof w.CustomEvent&&(CustomEvent.prototype=w.Event.prototype,w.CustomEvent=CustomEvent)}()},function(module,exports,__webpack_require__){"use strict";exports.__esModule=!0;var Data=function(){function Data(info){this.contentOpen=!1,this.contentPosition="below",this.isOnChangeEnabled=!0,this.main=info.main,this.searchValue="",this.data=[],this.filtered=null,this.parseSelectData(),this.setSelectedFromSelect()}return Data.prototype.newOption=function(info){return{id:info.id?info.id:String(Math.floor(1e8*Math.random())),value:info.value?info.value:"",text:info.text?info.text:"",innerHTML:info.innerHTML?info.innerHTML:"",selected:!!info.selected&&info.selected,display:void 0===info.display||info.display,disabled:!!info.disabled&&info.disabled,placeholder:!!info.placeholder&&info.placeholder,class:info.class?info.class:void 0,data:info.data?info.data:{},mandatory:!!info.mandatory&&info.mandatory}},Data.prototype.add=function(data){this.data.push({id:String(Math.floor(1e8*Math.random())),value:data.value,text:data.text,innerHTML:"",selected:!1,display:!0,disabled:!1,placeholder:!1,class:void 0,mandatory:data.mandatory,data:{}})},Data.prototype.parseSelectData=function(){this.data=[];for(var nodes,_i=0,nodes_1=this.main.select.element.childNodes;_i:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-print-table .tabulator-print-table-group{box-sizing:border-box;border-bottom:1px solid #999;border-right:1px solid #aaa;border-top:1px solid #999;padding:5px;padding-left:10px;background:#ccc;font-weight:700;min-width:100%}.tabulator-print-table .tabulator-print-table-group:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;border-bottom:0}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #666;vertical-align:middle}.tabulator-print-table .tabulator-print-table-group span{margin-left:10px;color:#d00}.tabulator-print-table .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-print-table .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333} +/*# sourceMappingURL=tabulator.min.css.map */ diff --git a/admin/js/vendors/tabulator/css/tabulator.min.css.map b/admin/js/vendors/tabulator/css/tabulator.min.css.map new file mode 100644 index 0000000..47a4c5c --- /dev/null +++ b/admin/js/vendors/tabulator/css/tabulator.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["tabulator.scss"],"names":[],"mappings":"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","file":"tabulator.min.css","sourcesContent":["/* Tabulator v4.7.0 (c) Oliver Folkerd */\n\n\r\n//Main Theme Variables\r\n$backgroundColor: #888 !default; //background color of tabulator\r\n$borderColor:#999 !default; //border to tabulator\r\n$textSize:14px !default; //table text size\r\n\r\n//header themeing\r\n$headerBackgroundColor:#e6e6e6 !default; //border to tabulator\r\n$headerTextColor:#555 !default; //header text colour\r\n$headerBorderColor:#aaa !default; //header border color\r\n$headerSeperatorColor:#999 !default; //header bottom seperator color\r\n$headerMargin:4px !default; //padding round header\r\n\r\n//column header arrows\r\n$sortArrowActive: #666 !default;\r\n$sortArrowInactive: #bbb !default;\r\n\r\n//row themeing\r\n$rowBackgroundColor:#fff !default; //table row background color\r\n$rowAltBackgroundColor:#EFEFEF !default; //table row background color\r\n$rowBorderColor:#aaa !default; //table border color\r\n$rowTextColor:#333 !default; //table text color\r\n$rowHoverBackground:#bbb !default; //row background color on hover\r\n\r\n$rowSelectedBackground: #9ABCEA !default; //row background color when selected\r\n$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered\r\n\r\n$editBoxColor:#1D68CD !default; //border color for edit boxes\r\n$errorColor:#dd0000 !default; //error indication\r\n\r\n//footer themeing\r\n$footerBackgroundColor:#e6e6e6 !default; //border to tabulator\r\n$footerTextColor:#555 !default; //footer text colour\r\n$footerBorderColor:#aaa !default; //footer border color\r\n$footerSeperatorColor:#999 !default; //footer bottom seperator color\r\n$footerActiveColor:#d00 !default; //footer bottom active text color\r\n\r\n\r\n\r\n//Tabulator Containing Element\r\n.tabulator{\r\n\tposition: relative;\r\n\r\n\tborder: 1px solid $borderColor;\r\n\r\n\tbackground-color: $backgroundColor;\r\n\r\n\tfont-size:$textSize;\r\n\ttext-align: left;\r\n\toverflow:hidden;\r\n\r\n\t-webkit-transform: translatez(0);\r\n\t-moz-transform: translatez(0);\r\n\t-ms-transform: translatez(0);\r\n\t-o-transform: translatez(0);\r\n\ttransform: translatez(0);\r\n\r\n\t&[tabulator-layout=\"fitDataFill\"]{\r\n\t\t.tabulator-tableHolder{\r\n\t\t\t.tabulator-table{\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&[tabulator-layout=\"fitDataTable\"]{\r\n\t\tdisplay: inline-block;\r\n\t}\r\n\r\n\t&.tabulator-block-select{\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t//column header containing element\r\n\t.tabulator-header{\r\n\t\tposition:relative;\r\n\t\tbox-sizing: border-box;\r\n\r\n\t\twidth:100%;\r\n\r\n\t\tborder-bottom:1px solid $headerSeperatorColor;\r\n\t\tbackground-color: $headerBackgroundColor;\r\n\t\tcolor: $headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:hidden;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t&.tabulator-header-hidden{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\t//individual column header element\r\n\t\t.tabulator-col{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition:relative;\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tborder-right:1px solid $headerBorderColor;\r\n\t\t\tbackground:$headerBackgroundColor;\r\n\t\t\ttext-align:left;\r\n\t\t\tvertical-align: bottom;\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&.tabulator-moving{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tborder:1px solid $headerSeperatorColor;\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 10%);\r\n\t\t\t\tpointer-events: none;\r\n\t\t\t}\r\n\r\n\t\t\t//hold content of column header\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tpadding:4px;\r\n\r\n\t\t\t\t//header menu button\r\n\t\t\t\t.tabulator-header-menu-button{\r\n\t\t\t\t\tpadding: 0 8px;\r\n\r\n\t\t\t\t\t&:hover{\r\n\t\t\t\t\t\tcursor: pointer;\r\n\t\t\t\t\t\topacity: .6;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title of column header\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\tvertical-align:bottom;\r\n\r\n\t\t\t\t\t//element to hold title editor\r\n\t\t\t\t\t.tabulator-title-editor{\r\n\t\t\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\t\tborder:1px solid #999;\r\n\r\n\t\t\t\t\t\tpadding:1px;\r\n\r\n\t\t\t\t\t\tbackground: #fff;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//column sorter arrow\r\n\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\tdisplay: inline-block;\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\ttop:9px;\r\n\t\t\t\t\tright:8px;\r\n\t\t\t\t\twidth: 0;\r\n\t\t\t\t\theight: 0;\r\n\t\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t//complex header column group\r\n\t\t\t&.tabulator-col-group{\r\n\r\n\t\t\t\t//gelement to hold sub columns in column group\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tposition:relative;\r\n\t\t\t\t\tdisplay: flex;\r\n\r\n\t\t\t\t\tborder-top:1px solid $headerBorderColor;\r\n\t\t\t\t\toverflow: hidden;\r\n\r\n\t\t\t\t\tmargin-right:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t&:first-child{\r\n\t\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//header filter containing element\r\n\t\t\t.tabulator-header-filter{\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\tmargin-top:2px;\r\n\t\t\t\twidth:100%;\r\n\t\t\t\ttext-align: center;\r\n\r\n\t\t\t\t//styling adjustment for inbuilt editors\r\n\t\t\t\ttextarea{\r\n\t\t\t\t\theight:auto !important;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsvg{\r\n\t\t\t\t\tmargin-top: 3px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinput{\r\n\t\t\t\t\t&::-ms-clear {\r\n\t\t\t\t\t\twidth : 0;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//styling child elements for sortable columns\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:25px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"none\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"asc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowActive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"desc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\t\t\tborder-bottom: none;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t&.tabulator-col-vertical{\r\n\t\t\t\t.tabulator-col-content{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\twriting-mode: vertical-rl;\r\n\t\t\t\t\t\ttext-orientation: mixed;\r\n\r\n\t\t\t\t\t\tdisplay:flex;\r\n\t\t\t\t\t\talign-items:center;\r\n\t\t\t\t\t\tjustify-content:center;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\ttransform: rotate(180deg);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-sortable{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\tpadding-top:20px;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\t\tpadding-bottom:20px;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\tright:calc(50% - 6px);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: absolute;\r\n\r\n\t\t\t// background-color: inherit;\r\n\r\n\t\t\tz-index: 10;\r\n\r\n\t\t\t&.tabulator-frozen-left{\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-frozen-right{\r\n\t\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\tbackground:lighten($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\t\t\tborder-bottom:1px solid $headerBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen-rows-holder{\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\t&:empty{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//scrolling element to hold table\r\n\t.tabulator-tableHolder{\r\n\t\tposition:relative;\r\n\t\twidth:100%;\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:auto;\r\n\t\t-webkit-overflow-scrolling: touch;\r\n\r\n\t\t&:focus{\r\n\t\t\toutline: none;\r\n\t\t}\r\n\r\n\t\t//default placeholder element\r\n\t\t.tabulator-placeholder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t&[tabulator-render-mode=\"virtual\"]{\r\n\t\t\t\tmin-height:100%;\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\r\n\t\t\twidth:100%;\r\n\r\n\t\t\tspan{\r\n\t\t\t\tdisplay: inline-block;\r\n\r\n\t\t\t\tmargin:0 auto;\r\n\t\t\t\tpadding:10px;\r\n\r\n\t\t\t\tcolor:#ccc;\r\n\t\t\t\tfont-weight: bold;\r\n\t\t\t\tfont-size: 20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//element to hold table rows\r\n\t\t.tabulator-table{\r\n\t\t\tposition:relative;\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tbackground-color:$rowBackgroundColor;\r\n\t\t\twhite-space: nowrap;\r\n\t\t\toverflow:visible;\r\n\t\t\tcolor:$rowTextColor;\r\n\r\n\t\t\t//row element\r\n\t\t\t.tabulator-row{\r\n\t\t\t\t&.tabulator-calcs{\r\n\t\t\t\t\tfont-weight: bold;\r\n\t\t\t\t\tbackground:darken($rowAltBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t\t&.tabulator-calcs-top{\r\n\t\t\t\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-calcs-bottom{\r\n\t\t\t\t\t\tborder-top:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\t//footer element\r\n\t.tabulator-footer{\r\n\t\tpadding:5px 10px;\r\n\t\tborder-top:1px solid $footerSeperatorColor;\r\n\t\tbackground-color: $footerBackgroundColor;\r\n\t\ttext-align: right;\r\n\t\tcolor: $footerTextColor;\r\n\t\tfont-weight:bold;\r\n\t\twhite-space:nowrap;\r\n\t\tuser-select:none;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\twidth:calc(100% + 20px);\r\n\t\t\tmargin:-5px -10px 5px -10px;\r\n\r\n\t\t\ttext-align: left;\r\n\r\n\t\t\tbackground:lighten($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-bottom:1px solid $rowBorderColor;\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&:only-child{\r\n\t\t\t\tmargin-bottom:-5px;\r\n\t\t\t\tborder-bottom:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-paginator{\r\n\t\t\tcolor: $footerTextColor;\r\n\t\t\tfont-family:inherit;\r\n\t\t\tfont-weight:inherit;\r\n\t\t\tfont-size:inherit;\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-page-size{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 5px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\t\t}\r\n\r\n\t\t.tabulator-pages{\r\n\t\t\tmargin:0 7px;\r\n\t\t}\r\n\r\n\t\t//pagination button\r\n\t\t.tabulator-page{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 2px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\r\n\t\t\tbackground:rgba(255,255,255,.2);\r\n\r\n\t\t\t&.active{\r\n\t\t\t\tcolor:$footerActiveColor;\r\n\t\t\t}\r\n\r\n\t\t\t&:disabled{\r\n\t\t\t\topacity:.5;\r\n\t\t\t}\r\n\r\n\t\t\t&:not(.disabled){\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground:rgba(0,0,0,.2);\r\n\t\t\t\t\tcolor:#fff;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\ttop:0;\r\n\t\tbottom:0;\r\n\t\twidth:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\tleft:0;\r\n\t\t\tright:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ew-resize;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//holding div that contains loader and covers tabulator element to prevent interaction\r\n\t.tabulator-loader{\r\n\t\tposition:absolute;\r\n\t\tdisplay: flex;\r\n\t\talign-items:center;\r\n\r\n\t\ttop:0;\r\n\t\tleft:0;\r\n\t\tz-index:100;\r\n\r\n\t\theight:100%;\r\n\t\twidth:100%;\r\n\t\tbackground:rgba(0,0,0,.4);\r\n\t\ttext-align:center;\r\n\r\n\t\t//loading message element\r\n\t\t.tabulator-loader-msg{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 auto;\r\n\t\t\tpadding:10px 20px;\r\n\r\n\t\t\tborder-radius:10px;\r\n\r\n\t\t\tbackground:#fff;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:16px;\r\n\r\n\t\t\t//loading message\r\n\t\t\t&.tabulator-loading{\r\n\t\t\t\tborder:4px solid #333;\r\n\t\t\t\tcolor:#000;\r\n\t\t\t}\r\n\r\n\t\t\t//error message\r\n\t\t\t&.tabulator-error{\r\n\t\t\t\tborder:4px solid #D00;\r\n\t\t\t\tcolor:#590000;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//row element\r\n.tabulator-row{\r\n\tposition: relative;\r\n\tbox-sizing: border-box;\r\n\tmin-height:$textSize + ($headerMargin * 2);\r\n\tbackground-color: $rowBackgroundColor;\r\n\r\n\r\n\t&.tabulator-row-even{\r\n\t\tbackground-color: $rowAltBackgroundColor;\r\n\t}\r\n\r\n\t&.tabulator-selectable:hover{\r\n\t\tbackground-color:$rowHoverBackground;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-selected{\r\n\t\tbackground-color:$rowSelectedBackground;\r\n\t}\r\n\r\n\t&.tabulator-selected:hover{\r\n\t\tbackground-color:$rowSelectedBackgroundHover;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-row-moving{\r\n\t\tborder:1px solid #000;\r\n\t\tbackground:#fff;\r\n\t}\r\n\r\n\t&.tabulator-moving{\r\n\t\tposition: absolute;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpointer-events: none;\r\n\t\tz-index:15;\r\n\t}\r\n\r\n\t//row resize handles\r\n\t.tabulator-row-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\tbottom:0;\r\n\t\tleft:0;\r\n\t\theight:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\ttop:0;\r\n\t\t\tbottom:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ns-resize;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-frozen{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: absolute;\r\n\r\n\t\tbackground-color: inherit;\r\n\r\n\t\tz-index: 10;\r\n\r\n\t\t&.tabulator-frozen-left{\r\n\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-frozen-right{\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-responsive-collapse{\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t&:empty{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\ttable{\r\n\t\t\tfont-size:$textSize;\r\n\r\n\t\t\ttr{\r\n\t\t\t\ttd{\r\n\t\t\t\t\tposition: relative;\r\n\r\n\t\t\t\t\t&:first-of-type{\r\n\t\t\t\t\t\tpadding-right:10px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//cell element\r\n\t.tabulator-cell{\r\n\t\tdisplay:inline-block;\r\n\t\tposition: relative;\r\n\t\tbox-sizing:border-box;\r\n\t\tpadding:4px;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tvertical-align:middle;\r\n\t\twhite-space:nowrap;\r\n\t\toverflow:hidden;\r\n\t\ttext-overflow:ellipsis;\r\n\r\n\t\t&.tabulator-editing{\r\n\t\t\tborder:1px solid $editBoxColor;\r\n\t\t\tpadding: 0;\r\n\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-validation-fail{\r\n\t\t\tborder:1px solid $errorColor;\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\r\n\t\t\t\tcolor: $errorColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//hide left resize handle on first column\r\n\t\t&:first-child{\r\n\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//movable row handle\r\n\t\t&.tabulator-row-handle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\t//handle holder\r\n\t\t\t.tabulator-row-handle-box{\r\n\t\t\t\twidth:80%;\r\n\r\n\t\t\t\t//Hamburger element\r\n\t\t\t\t.tabulator-row-handle-bar{\r\n\t\t\t\t\twidth:100%;\r\n\t\t\t\t\theight:3px;\r\n\t\t\t\t\tmargin-top:2px;\r\n\t\t\t\t\tbackground:#666;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-branch{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:9px;\r\n\t\t\twidth:7px;\r\n\r\n\t\t\tmargin-top:-9px;\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control{\r\n\r\n\t\t\tdisplay:inline-flex;\r\n\t\t\tjustify-content:center;\r\n\t\t\talign-items:center;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:11px;\r\n\t\t\twidth:11px;\r\n\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder:1px solid $rowTextColor;\r\n\t\t\tborder-radius:2px;\r\n\t\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\t\toverflow:hidden;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\tcursor:pointer;\r\n\t\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: transparent;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-expand{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-responsive-collapse-toggle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\theight:15px;\r\n\t\t\twidth:15px;\r\n\r\n\t\t\tborder-radius:20px;\r\n\t\t\tbackground:#666;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:1.1em;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\topacity:.7;\r\n\t\t\t}\r\n\r\n\t\t\t&.open{\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\t\tdisplay:initial;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-open{\r\n\t\t\t\t\tdisplay:none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\tdisplay:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-traffic-light{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\theight:14px;\r\n\t\t\twidth:14px;\r\n\r\n\t\t\tborder-radius:14px;\r\n\t\t}\r\n\t}\r\n\r\n\t//row grouping element\r\n\t&.tabulator-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:1px solid #999;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #999;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:#ccc;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\tpadding-left:30px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\tpadding-left:50px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\tpadding-left:70px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\tpadding-left:90px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\tpadding-left:110px;\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:#d00;\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n.tabulator-menu{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\tbox-shadow: 0 0 5px 0 rgba(0, 0, 0, .2);\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-menu-item{\r\n\r\n\t\tpadding:5px 10px;\r\n\r\n\t\tuser-select: none;\r\n\r\n\t\t&.tabulator-menu-item-disabled{\r\n\t\t\topacity: .5;\r\n\t\t}\r\n\r\n\t\t&:not(.tabulator-menu-item-disabled):hover{\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground: $rowAltBackgroundColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-menu-separator{\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t}\r\n}\r\n\r\n.tabulator-edit-select-list{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tmax-height:200px;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-edit-select-list-item{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\r\n\t\t&.active{\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\r\n\t\t\t&.focused{\r\n\t\t\t\toutline:1px solid rgba($rowBackgroundColor, .5);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.focused{\r\n\t\t\toutline:1px solid $editBoxColor;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-notice{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\ttext-align: center;\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-group{\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpadding:4px;\r\n\t\tpadding-top:6px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\tfont-weight:bold;\r\n\t}\r\n}\r\n\r\n// Table print styling\r\n\r\n.tabulator-print-fullscreen{\r\n\tposition: absolute;\r\n\ttop:0;\r\n\tbottom:0;\r\n\tleft:0;\r\n\tright:0;\r\n\r\n\tz-index: 10000;\r\n}\r\n\r\nbody.tabulator-print-fullscreen-hide>*:not(.tabulator-print-fullscreen){\r\n\tdisplay:none !important;\r\n}\r\n\r\n.tabulator-print-table{\r\n\tborder-collapse: collapse;\r\n\r\n\t.tabulator-data-tree-branch{\r\n\t\tdisplay:inline-block;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:9px;\r\n\t\twidth:7px;\r\n\r\n\t\tmargin-top:-9px;\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\tborder-left:2px solid $rowBorderColor;\r\n\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t}\r\n\r\n\t//row grouping element\r\n\t.tabulator-print-table-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:1px solid #999;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #999;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:#ccc;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:30px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:50px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:70px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:90px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:110px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:#d00;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-data-tree-control{\r\n\r\n\t\tdisplay:inline-flex;\r\n\t\tjustify-content:center;\r\n\t\talign-items:center;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:11px;\r\n\t\twidth:11px;\r\n\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder:1px solid $rowTextColor;\r\n\t\tborder-radius:2px;\r\n\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\toverflow:hidden;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: transparent;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-expand{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n"]} \ No newline at end of file diff --git a/website/js/vendor/tabulator/css/tabulator_site.css b/admin/js/vendors/tabulator/css/tabulator_site.css similarity index 84% rename from website/js/vendor/tabulator/css/tabulator_site.css rename to admin/js/vendors/tabulator/css/tabulator_site.css index fc14e20..7139757 100644 --- a/website/js/vendor/tabulator/css/tabulator_site.css +++ b/admin/js/vendors/tabulator/css/tabulator_site.css @@ -1,7 +1,7 @@ -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ .tabulator { position: relative; - border-bottom: 5px solid #222; + border-bottom: 5px solid #293146; background-color: #fff; font-size: 14px; text-align: left; @@ -32,8 +32,8 @@ position: relative; box-sizing: border-box; width: 100%; - border-bottom: 3px solid rgba(32.1569%,38.8235%,55.6863%,1); - background-color: #222; + /* border-bottom: 3px solid #003268; */ + background-color: #293146; color: #fff; font-weight: bold; white-space: nowrap; @@ -53,7 +53,7 @@ position: relative; box-sizing: border-box; border-right: 1px solid #aaa; - background-color: #222; + background-color: #293146; text-align: left; vertical-align: bottom; overflow: hidden; @@ -61,7 +61,7 @@ .tabulator .tabulator-header .tabulator-col.tabulator-moving { position: absolute; - border: 1px solid rgba(32.1569%,38.8235%,55.6863%,1); + /* border: 1px solid #3FB449; */ background: #090909; pointer-events: none; } @@ -81,10 +81,6 @@ opacity: .6; } -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder { - position: relative; -} - .tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title { box-sizing: border-box; width: 100%; @@ -102,22 +98,11 @@ background: #fff; } -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-menu-button + .tabulator-title-editor { - width: calc(100% - 22px); -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter { - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; +.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow { + display: inline-block; position: absolute; - top: 0; - bottom: 0; - right: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { + top: 14px; + right: 8px; width: 0; height: 0; border-left: 6px solid transparent; @@ -168,32 +153,19 @@ background-color: #090909; } -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter { - color: #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { +.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-arrow { border-top: none; border-bottom: 6px solid #bbb; } -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-col-sorter { - color: rgba(32.1569%,38.8235%,55.6863%,1); -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { +.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-arrow { border-top: none; - border-bottom: 6px solid rgba(32.1569%,38.8235%,55.6863%,1); -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-col-sorter { - color: rgba(32.1569%,38.8235%,55.6863%,1); + /* border-bottom: 6px solid #3FB449; */ } -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow { +.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-arrow { + border-top: 6px solid #3FB449; border-bottom: none; - border-top: 6px solid rgba(32.1569%,38.8235%,55.6863%,1); - color: rgba(32.1569%,38.8235%,55.6863%,1); } .tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title { @@ -223,13 +195,8 @@ padding-bottom: 20px; } -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter { - -ms-flex-pack: center; - justify-content: center; - left: 0; - right: 0; - top: 4px; - bottom: auto; +.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow { + right: calc(50% - 6px); } .tabulator .tabulator-header .tabulator-frozen { @@ -300,7 +267,7 @@ display: inline-block; margin: 0 auto; padding: 10px; - color: rgba(32.1569%,38.8235%,55.6863%,1); + color: #3FB449; font-weight: bold; font-size: 20px; } @@ -323,10 +290,10 @@ .tabulator .tabulator-footer { padding: 5px 10px; padding-top: 8px; - border-top: 3px solid rgba(32.1569%,38.8235%,55.6863%,1); - background-color: #222; + /* border-top: 3px solid #3FB449; */ + background-color: #293146; text-align: right; - color: #222; + color: #293146; font-weight: bold; white-space: nowrap; -ms-user-select: none; @@ -384,14 +351,14 @@ border: 1px solid #aaa; border-radius: 3px; background: #fff; - color: #222; + color: #293146; font-family: inherit; font-weight: inherit; font-size: inherit; } .tabulator .tabulator-footer .tabulator-page.active { - color: rgba(32.1569%,38.8235%,55.6863%,1); + /* color: #3FB449; */ } .tabulator .tabulator-footer .tabulator-page:disabled { @@ -604,7 +571,7 @@ width: 100%; height: 3px; margin-top: 2px; - background: rgba(32.1569%,38.8235%,55.6863%,1); + background: #3FB449; } .tabulator-row .tabulator-cell .tabulator-data-tree-branch { @@ -724,10 +691,10 @@ box-sizing: border-box; border-right: 1px solid #aaa; border-top: 1px solid #000; - border-bottom: 2px solid rgba(32.1569%,38.8235%,55.6863%,1); + /* border-bottom: 2px solid #3FB449; */ padding: 5px; padding-left: 10px; - background: #222; + background: #293146; color: #fff; font-weight: bold; min-width: 100%; @@ -742,7 +709,7 @@ margin-right: 10px; border-left: 6px solid transparent; border-right: 6px solid transparent; - border-top: 6px solid rgba(32.1569%,38.8235%,55.6863%,1); + border-top: 6px solid #bbb; border-bottom: 0; } @@ -778,13 +745,13 @@ border-top: 6px solid transparent; border-bottom: 6px solid transparent; border-right: 0; - border-left: 6px solid rgba(32.1569%,38.8235%,55.6863%,1); + border-left: 6px solid #bbb; vertical-align: middle; } .tabulator-row.tabulator-group span { margin-left: 10px; - color: rgba(32.1569%,38.8235%,55.6863%,1); + color: #bbb; } .tabulator-menu { @@ -871,66 +838,6 @@ font-weight: bold; } -.tabulator.tabulator-ltr { - direction: ltr; -} - -.tabulator.tabulator-rtl { - text-align: initial; - direction: rtl; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col { - text-align: initial; - border-left: 1px solid #aaa; - border-right: initial; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - margin-right: initial; - margin-left: -1px; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-left: 25px; -} - -.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow { - left: 8px; - right: initial; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell { - border-right: initial; - border-left: 1px solid #aaa; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch { - margin-right: initial; - margin-left: 5px; - border-bottom-left-radius: initial; - border-bottom-right-radius: 1px; - border-left: initial; - border-right: 2px solid #aaa; -} - -.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control { - margin-right: initial; - margin-left: 5px; -} - -.tabulator.tabulator-rtl .tabulator-col-resize-handle { - position: absolute; - left: 0; - right: auto; -} - -.tabulator.tabulator-rtl .tabulator-col-resize-handle.prev { - right: 0; - left: auto; -} - .tabulator-print-fullscreen { position: absolute; top: 0; @@ -952,10 +859,10 @@ body.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) { box-sizing: border-box; border-right: 1px solid #aaa; border-top: 1px solid #000; - border-bottom: 2px solid rgba(32.1569%,38.8235%,55.6863%,1); + border-bottom: 2px solid #3FB449; padding: 5px; padding-left: 10px; - background: #222; + background: #293146; color: #fff; font-weight: bold; min-width: 100%; @@ -970,7 +877,7 @@ body.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) { margin-right: 10px; border-left: 6px solid transparent; border-right: 6px solid transparent; - border-top: 6px solid rgba(32.1569%,38.8235%,55.6863%,1); + border-top: 6px solid #3FB449; border-bottom: 0; } @@ -1006,13 +913,13 @@ body.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) { border-top: 6px solid transparent; border-bottom: 6px solid transparent; border-right: 0; - border-left: 6px solid rgba(32.1569%,38.8235%,55.6863%,1); + border-left: 6px solid #3FB449; vertical-align: middle; } .tabulator-print-table .tabulator-print-table-group span { margin-left: 10px; - color: rgba(32.1569%,38.8235%,55.6863%,1); + color: #3FB449; } .tabulator-print-table .tabulator-data-tree-branch { diff --git a/admin/js/vendors/tabulator/css/tabulator_site.min.css b/admin/js/vendors/tabulator/css/tabulator_site.min.css new file mode 100644 index 0000000..67f5443 --- /dev/null +++ b/admin/js/vendors/tabulator/css/tabulator_site.min.css @@ -0,0 +1 @@ +.tabulator{position:relative;border-bottom:5px solid #293146;background-color:#fff;font-size:14px;text-align:left;overflow:hidden;-ms-transform:translatez(0);transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator[tabulator-layout=fitColumns] .tabulator-row .tabulator-cell:last-of-type{border-right:none}.tabulator.tabulator-block-select{-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator .tabulator-header{position:relative;box-sizing:border-box;width:100%;background-color:#293146;color:#fff;font-weight:700;white-space:nowrap;overflow:hidden;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-col{display:inline-block;position:relative;box-sizing:border-box;border-right:1px solid #aaa;background-color:#293146;text-align:left;vertical-align:bottom;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;background:#090909;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{box-sizing:border-box;width:100%;border:1px solid #999;padding:1px;background:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{display:inline-block;position:absolute;top:14px;right:8px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{position:relative;display:-ms-flexbox;display:flex;border-top:1px solid #aaa;overflow:hidden;margin-right:-1px}.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{position:relative;box-sizing:border-box;margin-top:2px;width:100%;text-align:center}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{width:0;height:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover{cursor:pointer;background-color:#090909}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-arrow{border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-arrow{border-top:6px solid #3fb449;border-bottom:none}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{-ms-writing-mode:tb-rl;writing-mode:vertical-rl;text-orientation:mixed;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{-ms-transform:rotate(180deg);transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-right:0;padding-bottom:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow{right:calc(50% - 6px)}.tabulator .tabulator-header .tabulator-frozen{display:inline-block;position:absolute;z-index:10}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;min-width:600%;background:#3c3c3c!important;border-top:1px solid #aaa;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#3c3c3c!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{min-width:600%}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableHolder{position:relative;width:100%;white-space:nowrap;overflow:auto;-webkit-overflow-scrolling:touch}.tabulator .tabulator-tableHolder:focus{outline:0}.tabulator .tabulator-tableHolder .tabulator-placeholder{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%;min-width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder span{display:inline-block;margin:0 auto;padding:10px;color:#3fb449;font-weight:700;font-size:20px}.tabulator .tabulator-tableHolder .tabulator-table{position:relative;display:inline-block;background-color:#fff;white-space:nowrap;overflow:visible;color:#333}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs{font-weight:700;background:#484848!important;color:#fff}.tabulator .tabulator-footer{padding:5px 10px;padding-top:8px;background-color:#293146;text-align:right;color:#293146;font-weight:700;white-space:nowrap;-ms-user-select:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-footer .tabulator-calcs-holder{box-sizing:border-box;width:calc(100% + 20px);margin:-8px -10px 8px -10px;text-align:left;background:#3c3c3c!important;border-bottom:1px solid #aaa;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#3c3c3c!important;color:#fff!important}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{margin-bottom:-5px;border-bottom:none}.tabulator .tabulator-footer .tabulator-paginator label{color:#fff}.tabulator .tabulator-footer .tabulator-page-size{display:inline-block;margin:0 5px;padding:2px 5px;border:1px solid #aaa;border-radius:3px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{display:inline-block;margin:0 2px;padding:2px 5px;border:1px solid #aaa;border-radius:3px;background:#fff;color:#293146;font-family:inherit;font-weight:inherit;font-size:inherit}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{cursor:pointer;background:rgba(0,0,0,.2);color:#fff}.tabulator .tabulator-col-resize-handle{position:absolute;right:0;top:0;bottom:0;width:5px}.tabulator .tabulator-col-resize-handle.prev{left:0;right:auto}.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}.tabulator .tabulator-loader{position:absolute;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;top:0;left:0;z-index:100;height:100%;width:100%;background:rgba(0,0,0,.4);text-align:center}.tabulator .tabulator-loader .tabulator-loader-msg{display:inline-block;margin:0 auto;padding:10px 20px;border-radius:10px;background:#fff;font-weight:700;font-size:16px}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading{border:4px solid #333;color:#000}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error{border:4px solid #d00;color:#590000}.tabulator-row{position:relative;box-sizing:border-box;min-height:22px;background-color:#fff}.tabulator-row.tabulator-row-even{background-color:#efefef}.tabulator-row.tabulator-selectable:hover{background-color:#bbb;cursor:pointer}.tabulator-row.tabulator-selected{background-color:#9abcea}.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}.tabulator-row.tabulator-row-moving{border:1px solid #000;background:#fff}.tabulator-row.tabulator-moving{position:absolute;border-top:1px solid #aaa;border-bottom:1px solid #aaa;pointer-events:none!important;z-index:15}.tabulator-row .tabulator-row-resize-handle{position:absolute;right:0;bottom:0;left:0;height:5px}.tabulator-row .tabulator-row-resize-handle.prev{top:0;bottom:auto}.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}.tabulator-row .tabulator-frozen{display:inline-block;position:absolute;background-color:inherit;z-index:10}.tabulator-row .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #aaa;border-bottom:1px solid #aaa}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{display:inline-block;position:relative;box-sizing:border-box;padding:6px;border-right:1px solid #aaa;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{border:1px;background:0 0}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{border:1px;background:0 0;color:#d00}.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator-row .tabulator-cell.tabulator-row-handle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{width:100%;height:3px;margin-top:2px;background:#3fb449}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-row .tabulator-cell .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:0 0}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;height:15px;width:15px;border-radius:20px;background:#666;color:#fff;font-weight:700;font-size:1.1em}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{opacity:.7}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open{display:none}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{display:inline-block;height:14px;width:14px;border-radius:14px}.tabulator-row.tabulator-group{box-sizing:border-box;border-right:1px solid #aaa;border-top:1px solid #000;padding:5px;padding-left:10px;background:#293146;color:#fff;font-weight:700;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:#090909}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #bbb;border-bottom:0}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #bbb;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#bbb}.tabulator-menu{position:absolute;display:inline-block;box-sizing:border-box;background:#fff;border:1px solid #aaa;box-shadow:0 0 5px 0 rgba(0,0,0,.2);font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-menu .tabulator-menu-item{padding:5px 10px;-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{cursor:pointer;background:#efefef}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #aaa}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:#fff;border:1px solid #aaa;font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-edit-select-list .tabulator-edit-select-list-item{padding:4px;color:#333}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused{outline:1px solid rgba(255,255,255,.5)}.tabulator-edit-select-list .tabulator-edit-select-list-item.focused{outline:1px solid #1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{cursor:pointer;color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-notice{padding:4px;color:#333;text-align:center}.tabulator-edit-select-list .tabulator-edit-select-list-group{border-bottom:1px solid #aaa;padding:4px;padding-top:6px;color:#333;font-weight:700}.tabulator-print-fullscreen{position:absolute;top:0;bottom:0;left:0;right:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-print-table-group{box-sizing:border-box;border-right:1px solid #aaa;border-top:1px solid #000;border-bottom:2px solid #3fb449;padding:5px;padding-left:10px;background:#293146;color:#fff;font-weight:700;min-width:100%}.tabulator-print-table .tabulator-print-table-group:hover{cursor:pointer;background-color:#090909}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #3fb449;border-bottom:0}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #3fb449;vertical-align:middle}.tabulator-print-table .tabulator-print-table-group span{margin-left:10px;color:#3fb449}.tabulator-print-table .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-print-table .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-print-table .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:0 0}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333} \ No newline at end of file diff --git a/admin/js/vendors/tabulator/css/tabulator_site.min.css.map b/admin/js/vendors/tabulator/css/tabulator_site.min.css.map new file mode 100644 index 0000000..6970f0b --- /dev/null +++ b/admin/js/vendors/tabulator/css/tabulator_site.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["tabulator_site.scss"],"names":[],"mappings":"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","file":"tabulator_site.min.css","sourcesContent":["/* Tabulator v4.7.0 (c) Oliver Folkerd */\n\n\r\n//Main Theme Variables\r\n$backgroundColor: #fff !default; //background color of tabulator\r\n$borderColor:#222 !default; //border to tabulator\r\n$textSize:14px !default; //table text size\r\n\r\n//header themeing\r\n$headerBackgroundColor:#222 !default; //border to tabulator\r\n$headerTextColor:#fff !default; //header text colour\r\n$headerBorderColor:#aaa !default; //header border color\r\n$headerSeperatorColor:#3FB449 !default; //header bottom seperator color\r\n$headerMargin:4px !default; //padding round header\r\n\r\n//column header arrows\r\n$sortArrowActive: #3FB449 !default;\r\n$sortArrowInactive: #bbb !default;\r\n\r\n//row themeing\r\n$rowBackgroundColor:#fff !default; //table row background color\r\n$rowAltBackgroundColor:#EFEFEF !default; //table row background color\r\n$rowBorderColor:#aaa !default; //table border color\r\n$rowTextColor:#333 !default; //table text color\r\n$rowHoverBackground:#bbb !default; //row background color on hover\r\n\r\n$rowSelectedBackground: #9ABCEA !default; //row background color when selected\r\n$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered\r\n\r\n$editBoxColor:#1D68CD !default; //border color for edit boxes\r\n$errorColor:#dd0000 !default; //error indication\r\n\r\n//footer themeing\r\n$footerBackgroundColor:#222 !default; //border to tabulator\r\n$footerTextColor:#222 !default; //footer text colour\r\n$footerBorderColor:#aaa !default; //footer border color\r\n$footerSeperatorColor:#3FB449 !default; //footer bottom seperator color\r\n$footerActiveColor:$footerSeperatorColor !default; //footer bottom active text color\r\n\r\n\r\n//Tabulator Containing Element\r\n.tabulator{\r\n\tposition: relative;\r\n\r\n\tborder-bottom: 5px solid $borderColor;\r\n\r\n\tbackground-color: $backgroundColor;\r\n\r\n\tfont-size:$textSize;\r\n\ttext-align: left;\r\n\toverflow:hidden;\r\n\r\n\t-webkit-transform: translatez(0);\r\n\t-moz-transform: translatez(0);\r\n\t-ms-transform: translatez(0);\r\n\t-o-transform: translatez(0);\r\n\ttransform: translatez(0);\r\n\r\n\t&[tabulator-layout=\"fitDataFill\"]{\r\n\t\t.tabulator-tableHolder{\r\n\t\t\t.tabulator-table{\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&[tabulator-layout=\"fitDataTable\"]{\r\n\t\tdisplay: inline-block;\r\n\t}\r\n\r\n\t&[tabulator-layout=\"fitColumns\"]{\r\n\t\t.tabulator-row{\r\n\t\t\t.tabulator-cell{\r\n\t\t\t\t&:last-of-type{\r\n\t\t\t\t\tborder-right: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t&.tabulator-block-select{\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t//column header containing element\r\n\t.tabulator-header{\r\n\t\tposition:relative;\r\n\t\tbox-sizing: border-box;\r\n\r\n\t\twidth:100%;\r\n\r\n\t\tborder-bottom:3px solid $headerSeperatorColor;\r\n\t\tbackground-color: $headerBackgroundColor;\r\n\t\tcolor: $headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:hidden;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t&.tabulator-header-hidden{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\t//individual column header element\r\n\t\t.tabulator-col{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tposition:relative;\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tborder-right:1px solid $headerBorderColor;\r\n\t\t\tbackground-color: $headerBackgroundColor;\r\n\t\t\ttext-align:left;\r\n\t\t\tvertical-align: bottom;\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&.tabulator-moving{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tborder:1px solid $headerSeperatorColor;\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 10%);\r\n\t\t\t\tpointer-events: none;\r\n\t\t\t}\r\n\r\n\t\t\t//hold content of column header\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tpadding:8px;\r\n\r\n\t\t\t\t//header menu button\r\n\t\t\t\t.tabulator-header-menu-button{\r\n\t\t\t\t\tpadding: 0 8px;\r\n\r\n\t\t\t\t\t&:hover{\r\n\t\t\t\t\t\tcursor: pointer;\r\n\t\t\t\t\t\topacity: .6;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title of column header\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\tvertical-align:bottom;\r\n\r\n\t\t\t\t\t//element to hold title editor\r\n\t\t\t\t\t.tabulator-title-editor{\r\n\t\t\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\t\tborder:1px solid #999;\r\n\r\n\t\t\t\t\t\tpadding:1px;\r\n\r\n\t\t\t\t\t\tbackground: #fff;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//column sorter arrow\r\n\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\tdisplay: inline-block;\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\ttop:14px;\r\n\t\t\t\t\tright:8px;\r\n\t\t\t\t\twidth: 0;\r\n\t\t\t\t\theight: 0;\r\n\t\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t//complex header column group\r\n\t\t\t&.tabulator-col-group{\r\n\r\n\t\t\t\t//gelement to hold sub columns in column group\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tposition:relative;\r\n\t\t\t\t\tdisplay: flex;\r\n\r\n\t\t\t\t\tborder-top:1px solid $headerBorderColor;\r\n\t\t\t\t\toverflow: hidden;\r\n\r\n\t\t\t\t\tmargin-right:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t&:first-child{\r\n\t\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//header filter containing element\r\n\t\t\t.tabulator-header-filter{\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\tmargin-top:2px;\r\n\t\t\t\twidth:100%;\r\n\t\t\t\ttext-align: center;\r\n\r\n\t\t\t\t//styling adjustment for inbuilt editors\r\n\t\t\t\ttextarea{\r\n\t\t\t\t\theight:auto !important;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsvg{\r\n\t\t\t\t\tmargin-top: 3px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinput{\r\n\t\t\t\t\t&::-ms-clear {\r\n\t\t\t\t\t width : 0;\r\n\t\t\t\t\t height: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//styling child elements for sortable columns\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:25px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"none\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"asc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowActive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"desc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\t\t\tborder-bottom: none;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-col-vertical{\r\n\t\t\t\t.tabulator-col-content{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\twriting-mode: vertical-rl;\r\n\t\t\t\t\t\ttext-orientation: mixed;\r\n\r\n\t\t\t\t\t\tdisplay:flex;\r\n\t\t\t\t\t\talign-items:center;\r\n\t\t\t\t\t\tjustify-content:center;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\ttransform: rotate(180deg);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-sortable{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\tpadding-top:20px;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\t\tpadding-bottom:20px;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\tright:calc(50% - 6px);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: absolute;\r\n\r\n\t\t\t// background-color: inherit;\r\n\r\n\t\t\tz-index: 10;\r\n\r\n\t\t\t&.tabulator-frozen-left{\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-frozen-right{\r\n\t\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\tbackground:lighten($headerBackgroundColor, 10%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($headerBackgroundColor, 10%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\t\t\t// border-bottom:1px solid $headerBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen-rows-holder{\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\t&:empty{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//scrolling element to hold table\r\n\t.tabulator-tableHolder{\r\n\t\tposition:relative;\r\n\t\twidth:100%;\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:auto;\r\n\t\t-webkit-overflow-scrolling: touch;\r\n\r\n\t\t&:focus{\r\n\t\t\toutline: none;\r\n\t\t}\r\n\r\n\t\t//default placeholder element\r\n\t\t.tabulator-placeholder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t&[tabulator-render-mode=\"virtual\"]{\r\n\t\t\t\tmin-height:100%;\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\r\n\t\t\twidth:100%;\r\n\r\n\t\t\tspan{\r\n\t\t\t\tdisplay: inline-block;\r\n\r\n\t\t\t\tmargin:0 auto;\r\n\t\t\t\tpadding:10px;\r\n\r\n\t\t\t\tcolor:$headerSeperatorColor;\r\n\t\t\t\tfont-weight: bold;\r\n\t\t\t\tfont-size: 20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//element to hold table rows\r\n\t\t.tabulator-table{\r\n\t\t\tposition:relative;\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tbackground-color:$rowBackgroundColor;\r\n\t\t\twhite-space: nowrap;\r\n\t\t\toverflow:visible;\r\n\t\t\tcolor:$rowTextColor;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\t&.tabulator-calcs{\r\n\t\t\t\t\tfont-weight: bold;\r\n\t\t\t\t\tbackground:lighten($headerBackgroundColor, 15%) !important;\r\n\t\t\t\t\tcolor:$headerTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//footer element\r\n\t.tabulator-footer{\r\n\t\tpadding:5px 10px;\r\n\t\tpadding-top:8px;\r\n\t\tborder-top:3px solid $footerSeperatorColor;\r\n\t\tbackground-color: $footerBackgroundColor;\r\n\t\ttext-align:right;\r\n\t\tcolor: $footerTextColor;\r\n\t\tfont-weight:bold;\r\n\t\twhite-space:nowrap;\r\n\t\tuser-select:none;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\twidth:calc(100% + 20px);\r\n\t\t\tmargin:-8px -10px 8px -10px;\r\n\r\n\t\t\ttext-align: left;\r\n\r\n\t\t\tbackground:lighten($footerBackgroundColor, 10%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($footerBackgroundColor, 10%) !important;\r\n\t\t\t\tcolor:$headerTextColor !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// border-top:1px solid $rowBorderColor;\r\n\t\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&:only-child{\r\n\t\t\t\tmargin-bottom:-5px;\r\n\t\t\t\tborder-bottom:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-paginator{\r\n\t\t\tlabel{\r\n\t\t\t\tcolor:#fff;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//page size select element\r\n\t\t.tabulator-page-size{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 5px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-pages{\r\n\t\t\tmargin:0 7px;\r\n\t\t}\r\n\r\n\t\t//pagination button\r\n\t\t.tabulator-page{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 2px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\r\n\t\t\tbackground:#fff;\r\n\r\n\t\t\tcolor: $footerTextColor;\r\n\t\t\tfont-family:inherit;\r\n\t\t\tfont-weight:inherit;\r\n\t\t\tfont-size:inherit;\r\n\r\n\t\t\t&.active{\r\n\t\t\t\tcolor:$footerActiveColor;\r\n\t\t\t}\r\n\r\n\t\t\t&:disabled{\r\n\t\t\t\topacity:.5;\r\n\t\t\t}\r\n\r\n\t\t\t&:not(.disabled){\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground:rgba(0,0,0,.2);\r\n\t\t\t\t\tcolor:#fff;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\ttop:0;\r\n\t\tbottom:0;\r\n\t\twidth:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\tleft:0;\r\n\t\t\tright:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ew-resize;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//holding div that contains loader and covers tabulator element to prevent interaction\r\n\t.tabulator-loader{\r\n\t\tposition:absolute;\r\n\t\tdisplay: flex;\r\n\t\talign-items:center;\r\n\r\n\t\ttop:0;\r\n\t\tleft:0;\r\n\t\tz-index:100;\r\n\r\n\t\theight:100%;\r\n\t\twidth:100%;\r\n\t\tbackground:rgba(0,0,0,.4);\r\n\t\ttext-align:center;\r\n\r\n\t\t//loading message element\r\n\t\t.tabulator-loader-msg{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 auto;\r\n\t\t\tpadding:10px 20px;\r\n\r\n\t\t\tborder-radius:10px;\r\n\r\n\t\t\tbackground:#fff;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:16px;\r\n\r\n\t\t\t//loading message\r\n\t\t\t&.tabulator-loading{\r\n\t\t\t\tborder:4px solid #333;\r\n\t\t\t\tcolor:#000;\r\n\t\t\t}\r\n\r\n\t\t\t//error message\r\n\t\t\t&.tabulator-error{\r\n\t\t\t\tborder:4px solid #D00;\r\n\t\t\t\tcolor:#590000;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//row element\r\n.tabulator-row{\r\n\tposition: relative;\r\n\tbox-sizing: border-box;\r\n\tmin-height:$textSize + ($headerMargin * 2);\r\n\tbackground-color: $rowBackgroundColor;\r\n\r\n\r\n\t&.tabulator-row-even{\r\n\t\tbackground-color: $rowAltBackgroundColor;\r\n\t}\r\n\r\n\t&.tabulator-selectable:hover{\r\n\t\tbackground-color:$rowHoverBackground;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-selected{\r\n\t\tbackground-color:$rowSelectedBackground;\r\n\t}\r\n\r\n\t&.tabulator-selected:hover{\r\n\t\tbackground-color:$rowSelectedBackgroundHover;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-row-moving{\r\n\t\tborder:1px solid #000;\r\n\t\tbackground:#fff;\r\n\t}\r\n\r\n\t&.tabulator-moving{\r\n\t\tposition: absolute;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpointer-events: none !important;\r\n\t\tz-index:15;\r\n\t}\r\n\r\n\t//row resize handles\r\n\t.tabulator-row-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\tbottom:0;\r\n\t\tleft:0;\r\n\t\theight:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\ttop:0;\r\n\t\t\tbottom:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ns-resize;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-frozen{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: absolute;\r\n\r\n\t\tbackground-color: inherit;\r\n\r\n\t\tz-index: 10;\r\n\r\n\t\t&.tabulator-frozen-left{\r\n\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-frozen-right{\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-responsive-collapse{\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t&:empty{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\ttable{\r\n\t\t\tfont-size:$textSize;\r\n\r\n\t\t\ttr{\r\n\t\t\t\ttd{\r\n\t\t\t\t\tposition: relative;\r\n\r\n\t\t\t\t\t&:first-of-type{\r\n\t\t\t\t\t\tpadding-right:10px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//cell element\r\n\t.tabulator-cell{\r\n\t\tdisplay:inline-block;\r\n\t\tposition: relative;\r\n\t\tbox-sizing:border-box;\r\n\t\tpadding:6px;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tvertical-align:middle;\r\n\t\twhite-space:nowrap;\r\n\t\toverflow:hidden;\r\n\t\ttext-overflow:ellipsis;\r\n\r\n\r\n\t\t&.tabulator-editing{\r\n\t\t\tborder:1px solid $editBoxColor;\r\n\t\t\tpadding: 0;\r\n\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-validation-fail{\r\n\t\t\tborder:1px solid $errorColor;\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\r\n\t\t\t\tcolor: $errorColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//hide left resize handle on first column\r\n\t\t&:first-child{\r\n\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//movable row handle\r\n\t\t&.tabulator-row-handle{\r\n\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\t//handle holder\r\n\t\t\t.tabulator-row-handle-box{\r\n\t\t\t\twidth:80%;\r\n\r\n\t\t\t\t//Hamburger element\r\n\t\t\t\t.tabulator-row-handle-bar{\r\n\t\t\t\t\twidth:100%;\r\n\t\t\t\t\theight:3px;\r\n\t\t\t\t\tmargin-top:2px;\r\n\t\t\t\t\tbackground:$sortArrowActive;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-branch{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:9px;\r\n\t\t\twidth:7px;\r\n\r\n\t\t\tmargin-top:-9px;\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control{\r\n\r\n\t\t\tdisplay:inline-flex;\r\n\t\t\tjustify-content:center;\r\n\t\t\talign-items:center;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:11px;\r\n\t\t\twidth:11px;\r\n\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder:1px solid $rowTextColor;\r\n\t\t\tborder-radius:2px;\r\n\t\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\t\toverflow:hidden;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\tcursor:pointer;\r\n\t\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: transparent;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-expand{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-responsive-collapse-toggle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\theight:15px;\r\n\t\t\twidth:15px;\r\n\r\n\t\t\tborder-radius:20px;\r\n\t\t\tbackground:#666;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:1.1em;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\topacity:.7;\r\n\t\t\t}\r\n\r\n\t\t\t&.open{\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\t\tdisplay:initial;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-open{\r\n\t\t\t\t\tdisplay:none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\tdisplay:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-traffic-light{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\theight:14px;\r\n\t\t\twidth:14px;\r\n\r\n\t\t\tborder-radius:14px;\r\n\t\t}\r\n\t}\r\n\r\n\t//row grouping element\r\n\t&.tabulator-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #000;\r\n\t\tborder-bottom:2px solid $headerSeperatorColor;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:$headerBackgroundColor;\r\n\t\tcolor:$headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\tpadding-left:30px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\tpadding-left:50px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\tpadding-left:70px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\tpadding-left:90px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\tpadding-left:110px;\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:$headerSeperatorColor;\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n.tabulator-menu{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\tbox-shadow: 0 0 5px 0 rgba(0, 0, 0, .2);\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-menu-item{\r\n\r\n\t\tpadding:5px 10px;\r\n\r\n\t\tuser-select: none;\r\n\r\n\t\t&.tabulator-menu-item-disabled{\r\n\t\t\topacity: .5;\r\n\t\t}\r\n\r\n\t\t&:not(.tabulator-menu-item-disabled):hover{\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground: $rowAltBackgroundColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-menu-separator{\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t}\r\n}\r\n\r\n.tabulator-edit-select-list{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tmax-height:200px;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-edit-select-list-item{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\r\n\t\t&.active{\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\r\n\t\t\t&.focused{\r\n\t\t\t\toutline:1px solid rgba($rowBackgroundColor, .5);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.focused{\r\n\t\t\toutline:1px solid $editBoxColor;\r\n\t\t}\r\n\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-notice{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\ttext-align: center;\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-group{\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpadding:4px;\r\n\t\tpadding-top:6px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\tfont-weight:bold;\r\n\t}\r\n}\r\n\r\n// Table print styling\r\n\r\n.tabulator-print-fullscreen{\r\n\tposition: absolute;\r\n\ttop:0;\r\n\tbottom:0;\r\n\tleft:0;\r\n\tright:0;\r\n\r\n\tz-index: 10000;\r\n}\r\n\r\nbody.tabulator-print-fullscreen-hide>*:not(.tabulator-print-fullscreen){\r\n\tdisplay:none !important;\r\n}\r\n\r\n.tabulator-print-table{\r\n\tborder-collapse: collapse;\r\n\r\n\t//row grouping element\r\n\t.tabulator-print-table-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #000;\r\n\t\tborder-bottom:2px solid $headerSeperatorColor;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:$headerBackgroundColor;\r\n\t\tcolor:$headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:30px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:50px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:70px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:90px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:110px !important;\r\n\t\t\t}\r\n\t\t}\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:$headerSeperatorColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-data-tree-branch{\r\n\t\tdisplay:inline-block;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:9px;\r\n\t\twidth:7px;\r\n\r\n\t\tmargin-top:-9px;\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\tborder-left:2px solid $rowBorderColor;\r\n\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t}\r\n\r\n\t.tabulator-data-tree-control{\r\n\r\n\t\tdisplay:inline-flex;\r\n\t\tjustify-content:center;\r\n\t\talign-items:center;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:11px;\r\n\t\twidth:11px;\r\n\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder:1px solid $rowTextColor;\r\n\t\tborder-radius:2px;\r\n\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\toverflow:hidden;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: transparent;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-expand{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n"]} \ No newline at end of file diff --git a/admin/js/vendors/tabulator/css/tabulator_site.min.orig.css b/admin/js/vendors/tabulator/css/tabulator_site.min.orig.css new file mode 100644 index 0000000..2fc522d --- /dev/null +++ b/admin/js/vendors/tabulator/css/tabulator_site.min.orig.css @@ -0,0 +1,3 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +.tabulator{position:relative;border-bottom:5px solid #222;background-color:#fff;font-size:14px;text-align:left;overflow:hidden;transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator[tabulator-layout=fitColumns] .tabulator-row .tabulator-cell:last-of-type{border-right:none}.tabulator.tabulator-block-select{-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator .tabulator-header{position:relative;box-sizing:border-box;width:100%;border-bottom:3px solid #3fb449;background-color:#222;color:#fff;font-weight:700;white-space:nowrap;overflow:hidden;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-col{display:inline-block;position:relative;box-sizing:border-box;border-right:1px solid #aaa;background-color:#222;text-align:left;vertical-align:bottom;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;border:1px solid #3fb449;background:#090909;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{box-sizing:border-box;width:100%;border:1px solid #999;padding:1px;background:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{display:inline-block;position:absolute;top:14px;right:8px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{position:relative;display:-ms-flexbox;display:flex;border-top:1px solid #aaa;overflow:hidden;margin-right:-1px}.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{position:relative;box-sizing:border-box;margin-top:2px;width:100%;text-align:center}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{width:0;height:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover{cursor:pointer;background-color:#090909}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #3fb449}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-arrow{border-top:6px solid #3fb449;border-bottom:none}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{-ms-writing-mode:tb-rl;writing-mode:vertical-rl;text-orientation:mixed;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-right:0;padding-bottom:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow{right:calc(50% - 6px)}.tabulator .tabulator-header .tabulator-frozen{display:inline-block;position:absolute;z-index:10}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;min-width:600%;background:#3c3c3c!important;border-top:1px solid #aaa;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#3c3c3c!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{min-width:600%}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableHolder{position:relative;width:100%;white-space:nowrap;overflow:auto;-webkit-overflow-scrolling:touch}.tabulator .tabulator-tableHolder:focus{outline:none}.tabulator .tabulator-tableHolder .tabulator-placeholder{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%;min-width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder span{display:inline-block;margin:0 auto;padding:10px;color:#3fb449;font-weight:700;font-size:20px}.tabulator .tabulator-tableHolder .tabulator-table{position:relative;display:inline-block;background-color:#fff;white-space:nowrap;overflow:visible;color:#333}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs{font-weight:700;background:#484848!important;color:#fff}.tabulator .tabulator-footer{padding:5px 10px;padding-top:8px;border-top:3px solid #3fb449;background-color:#222;text-align:right;color:#222;font-weight:700;white-space:nowrap;-ms-user-select:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-footer .tabulator-calcs-holder{box-sizing:border-box;width:calc(100% + 20px);margin:-8px -10px 8px;text-align:left;background:#3c3c3c!important;border-bottom:1px solid #aaa;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#3c3c3c!important;color:#fff!important}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{margin-bottom:-5px;border-bottom:none}.tabulator .tabulator-footer .tabulator-paginator label{color:#fff}.tabulator .tabulator-footer .tabulator-page-size{display:inline-block;margin:0 5px;padding:2px 5px;border:1px solid #aaa;border-radius:3px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{display:inline-block;margin:0 2px;padding:2px 5px;border:1px solid #aaa;border-radius:3px;background:#fff;color:#222;font-family:inherit;font-weight:inherit;font-size:inherit}.tabulator .tabulator-footer .tabulator-page.active{color:#3fb449}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{cursor:pointer;background:rgba(0,0,0,.2);color:#fff}.tabulator .tabulator-col-resize-handle{position:absolute;right:0;top:0;bottom:0;width:5px}.tabulator .tabulator-col-resize-handle.prev{left:0;right:auto}.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}.tabulator .tabulator-loader{position:absolute;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;top:0;left:0;z-index:100;height:100%;width:100%;background:rgba(0,0,0,.4);text-align:center}.tabulator .tabulator-loader .tabulator-loader-msg{display:inline-block;margin:0 auto;padding:10px 20px;border-radius:10px;background:#fff;font-weight:700;font-size:16px}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading{border:4px solid #333;color:#000}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error{border:4px solid #d00;color:#590000}.tabulator-row{position:relative;box-sizing:border-box;min-height:22px;background-color:#fff}.tabulator-row.tabulator-row-even{background-color:#efefef}.tabulator-row.tabulator-selectable:hover{background-color:#bbb;cursor:pointer}.tabulator-row.tabulator-selected{background-color:#9abcea}.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}.tabulator-row.tabulator-row-moving{border:1px solid #000;background:#fff}.tabulator-row.tabulator-moving{position:absolute;border-top:1px solid #aaa;border-bottom:1px solid #aaa;pointer-events:none!important;z-index:15}.tabulator-row .tabulator-row-resize-handle{position:absolute;right:0;bottom:0;left:0;height:5px}.tabulator-row .tabulator-row-resize-handle.prev{top:0;bottom:auto}.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}.tabulator-row .tabulator-frozen{display:inline-block;position:absolute;background-color:inherit;z-index:10}.tabulator-row .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #aaa;border-bottom:1px solid #aaa}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{display:inline-block;position:relative;box-sizing:border-box;padding:6px;border-right:1px solid #aaa;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{border:1px;background:transparent}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{border:1px;background:transparent;color:#d00}.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator-row .tabulator-cell.tabulator-row-handle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{width:100%;height:3px;margin-top:2px;background:#3fb449}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-row .tabulator-cell .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;height:15px;width:15px;border-radius:20px;background:#666;color:#fff;font-weight:700;font-size:1.1em}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{opacity:.7}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open,.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{display:inline-block;height:14px;width:14px;border-radius:14px}.tabulator-row.tabulator-group{box-sizing:border-box;border-right:1px solid #aaa;border-top:1px solid #000;border-bottom:2px solid #3fb449;padding:5px;padding-left:10px;background:#222;color:#fff;font-weight:700;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:#090909}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #3fb449;border-bottom:0}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #3fb449;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#3fb449}.tabulator-menu{position:absolute;display:inline-block;box-sizing:border-box;background:#fff;border:1px solid #aaa;box-shadow:0 0 5px 0 rgba(0,0,0,.2);font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-menu .tabulator-menu-item{padding:5px 10px;-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{cursor:pointer;background:#efefef}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #aaa}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:#fff;border:1px solid #aaa;font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-edit-select-list .tabulator-edit-select-list-item{padding:4px;color:#333}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused{outline:1px solid hsla(0,0%,100%,.5)}.tabulator-edit-select-list .tabulator-edit-select-list-item.focused{outline:1px solid #1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{cursor:pointer;color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-notice{padding:4px;color:#333;text-align:center}.tabulator-edit-select-list .tabulator-edit-select-list-group{border-bottom:1px solid #aaa;padding:4px;padding-top:6px;color:#333;font-weight:700}.tabulator-print-fullscreen{position:absolute;top:0;bottom:0;left:0;right:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-print-table-group{box-sizing:border-box;border-right:1px solid #aaa;border-top:1px solid #000;border-bottom:2px solid #3fb449;padding:5px;padding-left:10px;background:#222;color:#fff;font-weight:700;min-width:100%}.tabulator-print-table .tabulator-print-table-group:hover{cursor:pointer;background-color:#090909}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #3fb449;border-bottom:0}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #3fb449;vertical-align:middle}.tabulator-print-table .tabulator-print-table-group span{margin-left:10px;color:#3fb449}.tabulator-print-table .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-print-table .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-print-table .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333} +/*# sourceMappingURL=tabulator_site.min.css.map */ diff --git a/website/js/vendor/tabulator/js/modules/accessor.js b/admin/js/vendors/tabulator/js/modules/accessor.js similarity index 77% rename from website/js/vendor/tabulator/js/modules/accessor.js rename to admin/js/vendors/tabulator/js/modules/accessor.js index 192c6de..8ffe1bf 100644 --- a/website/js/vendor/tabulator/js/modules/accessor.js +++ b/admin/js/vendors/tabulator/js/modules/accessor.js @@ -1,6 +1,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var Accessor = function Accessor(table) { this.table = table; //hold Tabulator object @@ -58,15 +58,15 @@ Accessor.prototype.lookupAccessor = function (value) { }; //apply accessor to row -Accessor.prototype.transformRow = function (row, type) { - var key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)), - rowComponent = row.getComponent(); +Accessor.prototype.transformRow = function (dataIn, type) { + var self = this, + key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)); //clone data object with deep copy to isolate internal data from returned result - var data = Tabulator.prototype.helpers.deepClone(row.data || {}); + var data = Tabulator.prototype.helpers.deepClone(dataIn || {}); - this.table.columnManager.traverse(function (column) { - var value, accessor, params, colCompnent; + self.table.columnManager.traverse(function (column) { + var value, accessor, params, component; if (column.modules.accessor) { @@ -76,9 +76,9 @@ Accessor.prototype.transformRow = function (row, type) { value = column.getFieldValue(data); if (value != "undefined") { - colCompnent = column.getComponent(); - params = typeof accessor.params === "function" ? accessor.params(value, data, type, colCompnent, rowComponent) : accessor.params; - column.setFieldValue(data, accessor.accessor(value, data, type, params, colCompnent, rowComponent)); + component = column.getComponent(); + params = typeof accessor.params === "function" ? accessor.params(value, data, type, component) : accessor.params; + column.setFieldValue(data, accessor.accessor(value, data, type, params, component)); } } } diff --git a/admin/js/vendors/tabulator/js/modules/accessor.min.js b/admin/js/vendors/tabulator/js/modules/accessor.min.js new file mode 100644 index 0000000..2633b8f --- /dev/null +++ b/admin/js/vendors/tabulator/js/modules/accessor.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},Accessor=function(o){this.table=o,this.allowedTypes=["","data","download","clipboard","print","htmlOutput"]};Accessor.prototype.initializeColumn=function(o){var e=this,s=!1,r={};this.allowedTypes.forEach(function(t){var c,a="accessor"+(t.charAt(0).toUpperCase()+t.slice(1));o.definition[a]&&(c=e.lookupAccessor(o.definition[a]))&&(s=!0,r[a]={accessor:c,params:o.definition[a+"Params"]||{}})}),s&&(o.modules.accessor=r)},Accessor.prototype.lookupAccessor=function(o){var e=!1;switch(void 0===o?"undefined":_typeof(o)){case"string":this.accessors[o]?e=this.accessors[o]:console.warn("Accessor Error - No such accessor found, ignoring: ",o);break;case"function":e=o}return e},Accessor.prototype.transformRow=function(o,e){var s=this,r="accessor"+(e.charAt(0).toUpperCase()+e.slice(1)),t=Tabulator.prototype.helpers.deepClone(o||{});return s.table.columnManager.traverse(function(o){var s,c,a,n;o.modules.accessor&&(c=o.modules.accessor[r]||o.modules.accessor.accessor||!1)&&"undefined"!=(s=o.getFieldValue(t))&&(n=o.getComponent(),a="function"==typeof c.params?c.params(s,t,e,n):c.params,o.setFieldValue(t,c.accessor(s,t,e,a,n)))}),t},Accessor.prototype.accessors={},Tabulator.prototype.registerModule("accessor",Accessor); \ No newline at end of file diff --git a/website/js/vendor/tabulator/js/modules/ajax.js b/admin/js/vendors/tabulator/js/modules/ajax.js similarity index 99% rename from website/js/vendor/tabulator/js/modules/ajax.js rename to admin/js/vendors/tabulator/js/modules/ajax.js index d81cbb6..7d72604 100644 --- a/website/js/vendor/tabulator/js/modules/ajax.js +++ b/admin/js/vendors/tabulator/js/modules/ajax.js @@ -1,6 +1,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var Ajax = function Ajax(table) { diff --git a/website/js/vendor/tabulator/js/modules/ajax.min.js b/admin/js/vendors/tabulator/js/modules/ajax.min.js similarity index 99% rename from website/js/vendor/tabulator/js/modules/ajax.min.js rename to admin/js/vendors/tabulator/js/modules/ajax.min.js index 8a3f0c7..a5dae29 100644 --- a/website/js/vendor/tabulator/js/modules/ajax.min.js +++ b/admin/js/vendors/tabulator/js/modules/ajax.min.js @@ -1,2 +1,2 @@ -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ajax=function(e){this.table=e,this.config=!1,this.url="",this.urlGenerator=!1,this.params=!1,this.loaderElement=this.createLoaderElement(),this.msgElement=this.createMsgElement(),this.loadingElement=!1,this.errorElement=!1,this.loaderPromise=!1,this.progressiveLoad=!1,this.loading=!1,this.requestOrder=0};Ajax.prototype.initialize=function(){var e;this.loaderElement.appendChild(this.msgElement),this.table.options.ajaxLoaderLoading&&("string"==typeof this.table.options.ajaxLoaderLoading?(e=document.createElement("template"),e.innerHTML=this.table.options.ajaxLoaderLoading.trim(),this.loadingElement=e.content.firstChild):this.loadingElement=this.table.options.ajaxLoaderLoading),this.loaderPromise=this.table.options.ajaxRequestFunc||this.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||this.defaultURLGenerator,this.table.options.ajaxLoaderError&&("string"==typeof this.table.options.ajaxLoaderError?(e=document.createElement("template"),e.innerHTML=this.table.options.ajaxLoaderError.trim(),this.errorElement=e.content.firstChild):this.errorElement=this.table.options.ajaxLoaderError),this.table.options.ajaxParams&&this.setParams(this.table.options.ajaxParams),this.table.options.ajaxConfig&&this.setConfig(this.table.options.ajaxConfig),this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.table.options.ajaxProgressiveLoad&&(this.table.options.pagination?(this.progressiveLoad=!1,console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time")):this.table.modExists("page")?(this.progressiveLoad=this.table.options.ajaxProgressiveLoad,this.table.modules.page.initializeProgressive(this.progressiveLoad)):console.error("Pagination plugin is required for progressive ajax loading"))},Ajax.prototype.createLoaderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-loader"),e},Ajax.prototype.createMsgElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-loader-msg"),e.setAttribute("role","alert"),e},Ajax.prototype.setParams=function(e,t){if(t){this.params=this.params||{};for(var o in e)this.params[o]=e[o]}else this.params=e},Ajax.prototype.getParams=function(){return this.params||{}},Ajax.prototype.setConfig=function(e){if(this._loadDefaultConfig(),"string"==typeof e)this.config.method=e;else for(var t in e)this.config[t]=e[t]},Ajax.prototype._loadDefaultConfig=function(e){var t=this;if(!t.config||e){t.config={};for(var o in t.defaultConfig)t.config[o]=t.defaultConfig[o]}},Ajax.prototype.setUrl=function(e){this.url=e},Ajax.prototype.getUrl=function(){return this.url},Ajax.prototype.loadData=function(e,t){return this.progressiveLoad?this._loadDataProgressive():this._loadDataStandard(e,t)},Ajax.prototype.nextPage=function(e){var t;this.loading||(t=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.getElement().clientHeight,el||null===l)&&(l=t)}),null!==l?!1!==i?l.toFixed(i):l:""},min:function(t,o,e){var l=null,i=void 0!==e.precision&&e.precision;return t.forEach(function(t){((t=Number(t))"),a.dataTreeExpandElement?"string"==typeof a.dataTreeExpandElement?(e=document.createElement("div"),e.innerHTML=a.dataTreeExpandElement,this.expandEl=e.firstChild):this.expandEl=a.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="
"),_typeof(a.dataTreeStartExpanded)){case"boolean":this.startOpen=function(e,t){return a.dataTreeStartExpanded};break;case"function":this.startOpen=a.dataTreeStartExpanded;break;default:this.startOpen=function(e,t){return a.dataTreeStartExpanded[t]}}},DataTree.prototype.initializeRow=function(e){var t=e.getData()[this.field],a=Array.isArray(t),n=a||!a&&"object"===(void 0===t?"undefined":_typeof(t))&&null!==t;!n&&e.modules.dataTree&&e.modules.dataTree.branchEl&&e.modules.dataTree.branchEl.parentNode.removeChild(e.modules.dataTree.branchEl),!n&&e.modules.dataTree&&e.modules.dataTree.controlEl&&e.modules.dataTree.controlEl.parentNode.removeChild(e.modules.dataTree.controlEl),e.modules.dataTree={index:e.modules.dataTree?e.modules.dataTree.index:0,open:!!n&&(e.modules.dataTree?e.modules.dataTree.open:this.startOpen(e.getComponent(),0)),controlEl:!(!e.modules.dataTree||!n)&&e.modules.dataTree.controlEl,branchEl:!(!e.modules.dataTree||!n)&&e.modules.dataTree.branchEl,parent:!!e.modules.dataTree&&e.modules.dataTree.parent,children:n}},DataTree.prototype.layoutRow=function(e){var t=this.elementField?e.getCell(this.elementField):e.getCells()[0],a=t.getElement(),n=e.modules.dataTree;n.branchEl&&(n.branchEl.parentNode&&n.branchEl.parentNode.removeChild(n.branchEl),n.branchEl=!1),n.controlEl&&(n.controlEl.parentNode&&n.controlEl.parentNode.removeChild(n.controlEl),n.controlEl=!1),this.generateControlElement(e,a),e.element.classList.add("tabulator-tree-level-"+n.index),n.index&&(this.branchEl?(n.branchEl=this.branchEl.cloneNode(!0),a.insertBefore(n.branchEl,a.firstChild),n.branchEl.style.marginLeft=(n.branchEl.offsetWidth+n.branchEl.style.marginRight)*(n.index-1)+n.index*this.indent+"px"):a.style.paddingLeft=parseInt(window.getComputedStyle(a,null).getPropertyValue("padding-left"))+n.index*this.indent+"px")},DataTree.prototype.generateControlElement=function(e,t){var a=this,n=e.modules.dataTree,t=t||e.getCells()[0].getElement(),r=n.controlEl;!1!==n.children&&(n.open?(n.controlEl=this.collapseEl.cloneNode(!0),n.controlEl.addEventListener("click",function(t){t.stopPropagation(),a.collapseRow(e)})):(n.controlEl=this.expandEl.cloneNode(!0),n.controlEl.addEventListener("click",function(t){t.stopPropagation(),a.expandRow(e)})),n.controlEl.addEventListener("mousedown",function(e){e.stopPropagation()}),r&&r.parentNode===t?r.parentNode.replaceChild(n.controlEl,r):t.insertBefore(n.controlEl,t.firstChild))},DataTree.prototype.setDisplayIndex=function(e){this.displayIndex=e},DataTree.prototype.getDisplayIndex=function(){return this.displayIndex},DataTree.prototype.getRows=function(e){var t=this,a=[];return e.forEach(function(e,n){var r,l;a.push(e),e instanceof Row&&(r=e.modules.dataTree.children,r.index||!1===r.children||(l=t.getChildren(e),l.forEach(function(e){a.push(e)})))}),a},DataTree.prototype.getChildren=function(e){var t=this,a=e.modules.dataTree,n=[],r=[];return!1!==a.children&&a.open&&(Array.isArray(a.children)||(a.children=this.generateChildren(e)),n=this.table.modExists("filter")?this.table.modules.filter.filter(a.children):a.children,this.table.modExists("sort")&&this.table.modules.sort.sort(n),n.forEach(function(e){r.push(e),t.getChildren(e).forEach(function(e){r.push(e)})})),r},DataTree.prototype.generateChildren=function(e){var t=this,a=[],n=e.getData()[this.field];return Array.isArray(n)||(n=[n]),n.forEach(function(n){var r=new Row(n||{},t.table.rowManager);r.modules.dataTree.index=e.modules.dataTree.index+1,r.modules.dataTree.parent=e,r.modules.dataTree.children&&(r.modules.dataTree.open=t.startOpen(r.getComponent(),r.modules.dataTree.index)),a.push(r)}),a},DataTree.prototype.expandRow=function(e,t){var a=e.modules.dataTree;!1!==a.children&&(a.open=!0,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowExpanded(e.getComponent(),e.modules.dataTree.index))},DataTree.prototype.collapseRow=function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open=!1,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowCollapsed(e.getComponent(),e.modules.dataTree.index))},DataTree.prototype.toggleRow=function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open?this.collapseRow(e):this.expandRow(e))},DataTree.prototype.getTreeParent=function(e){return!!e.modules.dataTree.parent&&e.modules.dataTree.parent.getComponent()},DataTree.prototype.getFilteredTreeChildren=function(e){var t,a=e.modules.dataTree,n=[];return a.children&&(Array.isArray(a.children)||(a.children=this.generateChildren(e)),t=this.table.modExists("filter")?this.table.modules.filter.filter(a.children):a.children,t.forEach(function(e){e instanceof Row&&n.push(e)})),n},DataTree.prototype.rowDelete=function(e){var t,a=e.modules.dataTree.parent;a&&(t=this.findChildIndex(e,a),!1!==t&&a.data[this.field].splice(t,1),a.data[this.field].length||delete a.data[this.field],this.initializeRow(a),this.layoutRow(a)),this.table.rowManager.refreshActiveData("tree",!1,!0)},DataTree.prototype.addTreeChildRow=function(e,t,a,n){var r=!1;"string"==typeof t&&(t=JSON.parse(t)),Array.isArray(e.data[this.field])||(e.data[this.field]=[],e.modules.dataTree.open=this.startOpen(e.getComponent(),e.modules.dataTree.index)),void 0!==n&&!1!==(r=this.findChildIndex(n,e))&&e.data[this.field].splice(a?r:r+1,0,t),!1===r&&(a?e.data[this.field].unshift(t):e.data[this.field].push(t)),this.initializeRow(e),this.layoutRow(e),this.table.rowManager.refreshActiveData("tree",!1,!0)},DataTree.prototype.findChildIndex=function(e,t){var a=this,n=!1;return"object"==(void 0===e?"undefined":_typeof(e))?e instanceof Row?n=e.data:e instanceof RowComponent?n=e._getSelf().data:"undefined"!=typeof HTMLElement&&e instanceof HTMLElement&&t.modules.dataTree&&(n=t.modules.dataTree.children.find(function(t){return t instanceof Row&&t.element===e}))&&(n=n.data):n=void 0!==e&&null!==e&&t.data[this.field].find(function(t){return t.data[a.table.options.index]==e}),n&&(Array.isArray(t.data[this.field])&&(n=t.data[this.field].indexOf(n)),-1==n&&(n=!1)),n},DataTree.prototype.getTreeChildren=function(e){var t=e.modules.dataTree,a=[];return t.children&&(Array.isArray(t.children)||(t.children=this.generateChildren(e)),t.children.forEach(function(e){e instanceof Row&&a.push(e.getComponent())})),a},DataTree.prototype.checkForRestyle=function(e){e.row.cells.indexOf(e)||e.row.reinitialize()},DataTree.prototype.getChildField=function(){return this.field},DataTree.prototype.redrawNeeded=function(e){return!!this.field&&void 0!==e[this.field]||!!this.elementField&&void 0!==e[this.elementField]},Tabulator.prototype.registerModule("dataTree",DataTree); \ No newline at end of file diff --git a/website/js/vendor/tabulator/js/modules/download.js b/admin/js/vendors/tabulator/js/modules/download.js similarity index 96% rename from website/js/vendor/tabulator/js/modules/download.js rename to admin/js/vendors/tabulator/js/modules/download.js index ddaec41..9954910 100644 --- a/website/js/vendor/tabulator/js/modules/download.js +++ b/admin/js/vendors/tabulator/js/modules/download.js @@ -1,6 +1,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var Download = function Download(table) { this.table = table; //hold Tabulator object @@ -131,7 +131,7 @@ Download.prototype.downloaders = { case "header": row.columns.forEach(function (col, i) { if (col && col.depth === 1) { - headers[i] = typeof col.value == "undefined" || col.value === null ? "" : '"' + String(col.value).split('"').join('""') + '"'; + headers[i] = typeof col.value == "undefined" || typeof col.value == "null" ? "" : col.value; } }); break; @@ -162,7 +162,7 @@ Download.prototype.downloaders = { }); if (headers.length) { - fileContents.unshift(headers.join(delimiter)); + fileContents = [headers].concat(fileContents); } fileContents = fileContents.join("\n"); @@ -389,7 +389,7 @@ Download.prototype.downloaders = { workbook.SheetNames.push(sheet); - this.modules.comms.send(options.sheets[sheet], "download", "intercept", { + this.table.modules.comms.send(options.sheets[sheet], "download", "intercept", { type: "xlsx", options: { sheetOnly: true }, active: self.active, diff --git a/admin/js/vendors/tabulator/js/modules/download.min.js b/admin/js/vendors/tabulator/js/modules/download.min.js new file mode 100644 index 0000000..b3b776c --- /dev/null +++ b/admin/js/vendors/tabulator/js/modules/download.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Download=function(e){this.table=e};Download.prototype.download=function(e,o,t,n,a){function r(t,n){a?!0===a?l.triggerDownload(t,n,e,o,!0):a(t):l.triggerDownload(t,n,e,o)}var l=this,s=!1;if("function"==typeof e?s=e:l.downloaders[e]?s=l.downloaders[e]:console.warn("Download Error - No such download type found: ",e),s){var i=this.generateExportList(n);s.call(this.table,i,t||{},r)}},Download.prototype.generateExportList=function(e){var o=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,e||this.table.options.downloadRowRange,"download"),t=this.table.options.groupHeaderDownload;return t&&!Array.isArray(t)&&(t=[t]),o.forEach(function(e){var o;"group"===e.type&&(o=e.columns[0],t&&t[e.indent]&&(o.value=t[e.indent](o.value,e.component._group.getRowCount(),e.component._group.getData(),e.component)))}),o},Download.prototype.triggerDownload=function(e,o,t,n,a){var r=document.createElement("a"),l=new Blob([e],{type:o}),n=n||"Tabulator."+("function"==typeof t?"txt":t);(l=this.table.options.downloadReady.call(this.table,e,l))&&(a?window.open(window.URL.createObjectURL(l)):navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(l,n):(r.setAttribute("href",window.URL.createObjectURL(l)),r.setAttribute("download",n),r.style.display="none",document.body.appendChild(r),r.click(),document.body.removeChild(r)),this.table.options.downloadComplete&&this.table.options.downloadComplete())},Download.prototype.commsReceived=function(e,o,t){switch(o){case"intercept":this.download(t.type,"",t.options,t.active,t.intercept)}},Download.prototype.downloaders={csv:function(e,o,t){var n=o&&o.delimiter?o.delimiter:",",a=[],r=[];e.forEach(function(e){var o=[];switch(e.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":e.columns.forEach(function(e,o){e&&1===e.depth&&(r[o]=void 0===e.value||"null"==typeof e.value?"":e.value)});break;case"row":e.columns.forEach(function(e){if(e){switch(_typeof(e.value)){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}o.push('"'+String(e.value).split('"').join('""')+'"')}}),a.push(o.join(n))}}),r.length&&(a=[r].concat(a)),a=a.join("\n"),o.bom&&(a="\ufeff"+a),t(a,"text/csv")},json:function(e,o,t){var n=[];e.forEach(function(e){var o={};switch(e.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":e.columns.forEach(function(e){e&&(o[e.component.getField()]=e.value)}),n.push(o)}}),n=JSON.stringify(n,null,"\t"),t(n,"application/json")},pdf:function(e,o,t){function n(e,o){var t=[];return e.columns.forEach(function(e){var n;if(e){switch(_typeof(e.value)){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}n={content:e.value,colSpan:e.width,rowSpan:e.height},o&&(n.styles=o),t.push(n)}else t.push("")}),t}var a=[],r=[],l={},s=o.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},i=o.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},c=o.jsPDF||{},u=o&&o.title?o.title:"";c.orientation||(c.orientation=o.orientation||"landscape"),c.unit||(c.unit="pt"),e.forEach(function(e){switch(e.type){case"header":a.push(n(e));break;case"group":r.push(n(e,s));break;case"calc":r.push(n(e,i));break;case"row":r.push(n(e))}});var d=new jsPDF(c);o&&o.autoTable&&(l="function"==typeof o.autoTable?o.autoTable(d)||{}:o.autoTable),u&&(l.addPageContent=function(e){d.text(u,40,30)}),l.head=a,l.body=r,d.autoTable(l),o&&o.documentProcessing&&o.documentProcessing(d),t(d.output("arraybuffer"),"application/pdf")},xlsx:function(e,o,t){function n(){var o=[],t=[],n={},a={s:{c:0,r:0},e:{c:e[0]?e[0].columns.reduce(function(e,o){return e+(o&&o.width?o.width:1)},0):0,r:e.length}};return e.forEach(function(e,n){var a=[];e.columns.forEach(function(e,o){e?(a.push(e.value instanceof Date||"object"!==_typeof(e.value)?e.value:JSON.stringify(e.value)),(e.width>1||e.height>-1)&&t.push({s:{r:n,c:o},e:{r:n+e.height-1,c:o+e.width-1}})):a.push("")}),o.push(a)}),XLSX.utils.sheet_add_aoa(n,o),n["!ref"]=XLSX.utils.encode_range(a),t.length&&(n["!merges"]=t),n}var a,r=this,l=o.sheetName||"Sheet1",s=XLSX.utils.book_new();if(s.SheetNames=[],s.Sheets={},o.sheetOnly)return void t(n());if(o.sheets)for(var i in o.sheets)!0===o.sheets[i]?(s.SheetNames.push(i),s.Sheets[i]=n()):(s.SheetNames.push(i),this.table.modules.comms.send(o.sheets[i],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:r.active,intercept:function(e){s.Sheets[i]=e}}));else s.SheetNames.push(l),s.Sheets[l]=n();o.documentProcessing&&(s=o.documentProcessing(s)),a=XLSX.write(s,{bookType:"xlsx",bookSST:!0,type:"binary"}),t(function(e){for(var o=new ArrayBuffer(e.length),t=new Uint8Array(o),n=0;n!=e.length;++n)t[n]=255&e.charCodeAt(n);return o}(a),"application/octet-stream")},html:function(e,o,t){this.modExists("export",!0)&&t(this.modules.export.genereateHTMLTable(e),"text/html")}},Tabulator.prototype.registerModule("download",Download); \ No newline at end of file diff --git a/website/js/vendor/tabulator/js/modules/edit.js b/admin/js/vendors/tabulator/js/modules/edit.js similarity index 93% rename from website/js/vendor/tabulator/js/modules/edit.js rename to admin/js/vendors/tabulator/js/modules/edit.js index 16240be..e35dd84 100644 --- a/website/js/vendor/tabulator/js/modules/edit.js +++ b/admin/js/vendors/tabulator/js/modules/edit.js @@ -1,6 +1,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var Edit = function Edit(table) { this.table = table; //hold Tabulator object @@ -107,10 +107,6 @@ Edit.prototype.cancelEdit = function () { cell.setValueActual(cell.getValue()); cell.cellRendered(); - if (cell.column.definition.editor == "textarea" || cell.column.definition.variableHeight) { - cell.row.normalizeHeight(true); - } - if (cell.column.cellEvents.cellEditCancelled) { cell.column.cellEvents.cellEditCancelled.call(this.table, component); } @@ -133,11 +129,7 @@ Edit.prototype.bindEditor = function (cell) { }); element.addEventListener("mousedown", function (e) { - if (e.button === 2) { - e.preventDefault(); - } else { - self.mouseClick = true; - } + self.mouseClick = true; }); element.addEventListener("focus", function (e) { @@ -174,24 +166,6 @@ Edit.prototype.focusScrollAdjust = function (cell) { this.table.rowManager.element.scrollTop += rowEl.offsetTop + rowEl.offsetHeight - bottomEdge; } } - - var leftEdge = this.table.rowManager.element.scrollLeft, - rightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft, - cellEl = cell.getElement(), - offset = cellEl.offsetLeft; - - if (this.table.modExists("frozenColumns")) { - leftEdge += parseInt(this.table.modules.frozenColumns.leftMargin); - rightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin); - } - - if (cellEl.offsetLeft < leftEdge) { - this.table.rowManager.element.scrollLeft -= leftEdge - cellEl.offsetLeft; - } else { - if (cellEl.offsetLeft + cellEl.offsetWidth > rightEdge) { - this.table.rowManager.element.scrollLeft += cellEl.offsetLeft + cellEl.offsetWidth - rightEdge; - } - } } }; @@ -223,6 +197,7 @@ Edit.prototype.edit = function (cell, e, forceEdit) { if (valid === true || self.table.options.validationMode === "highlight") { self.clearEditor(); + cell.setValue(value, true); if (!cell.modules.edit) { cell.modules.edit = {}; @@ -234,15 +209,12 @@ Edit.prototype.edit = function (cell, e, forceEdit) { self.editedCells.push(cell); } - cell.setValue(value, true); - if (self.table.options.dataTree && self.table.modExists("dataTree")) { self.table.modules.dataTree.checkForRestyle(cell); } if (valid !== true) { element.classList.add("tabulator-validation-fail"); - self.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid); return false; } @@ -460,17 +432,13 @@ Edit.prototype.clearEdited = function (cell) { var editIndex; if (cell.modules.edit && cell.modules.edit.edited) { - cell.modules.edit.edited = false; + cell.modules.validate.invalid = false; - if (cell.modules.validate) { - cell.modules.validate.invalid = false; - } - } + editIndex = this.editedCells.indexOf(cell); - editIndex = this.editedCells.indexOf(cell); - - if (editIndex > -1) { - this.editedCells.splice(editIndex, 1); + if (editIndex > -1) { + this.editedCells.splice(editIndex, 1); + } } }; @@ -533,11 +501,6 @@ Edit.prototype.editors = { case 27: cancel(); break; - - case 35: - case 36: - e.stopPropagation(); - break; } }); @@ -583,10 +546,6 @@ Edit.prototype.editors = { onRendered(function () { input.focus({ preventScroll: true }); input.style.height = "100%"; - - input.scrollHeight; - input.style.height = input.scrollHeight + "px"; - cell.getRow().normalizeHeight(); }); function onChange(e) { @@ -646,11 +605,6 @@ Edit.prototype.editors = { e.stopPropagation(); } break; - - case 35: - case 36: - e.stopPropagation(); - break; } }); @@ -751,11 +705,6 @@ Edit.prototype.editors = { e.stopPropagation(); } break; - - case 35: - case 36: - e.stopPropagation(); - break; } }); @@ -849,13 +798,11 @@ Edit.prototype.editors = { //select select: function select(cell, onRendered, success, cancel, editorParams) { - var _this = this; - var self = this, cellEl = cell.getElement(), initialValue = cell.getValue(), vertNav = editorParams.verticalNavigation || "editor", - initialDisplayValue = typeof initialValue !== "undefined" || initialValue === null ? Array.isArray(initialValue) ? initialValue : [initialValue] : typeof editorParams.defaultValue !== "undefined" ? editorParams.defaultValue : [], + initialDisplayValue = typeof initialValue !== "undefined" || initialValue === null ? initialValue : typeof editorParams.defaultValue !== "undefined" ? editorParams.defaultValue : [], input = document.createElement("input"), listEl = document.createElement("div"), multiselect = editorParams.multiselect, @@ -863,8 +810,9 @@ Edit.prototype.editors = { currentItem = {}, displayItems = [], currentItems = [], - blurable = true, - blockListShow = false; + blurable = true; + + this.table.rowManager.element.addEventListener("scroll", cancelItem); if (Array.isArray(editorParams) || !Array.isArray(editorParams) && (typeof editorParams === "undefined" ? "undefined" : _typeof(editorParams)) === "object" && !editorParams.values) { console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object"); @@ -1028,12 +976,6 @@ Edit.prototype.editors = { el.innerHTML = item.label === "" ? " " : item.label; el.addEventListener("click", function () { - blockListShow = true; - - setTimeout(function () { - blockListShow = false; - }, 10); - // setCurrentItem(item); // chooseItem(); if (multiselect) { @@ -1096,10 +1038,6 @@ Edit.prototype.editors = { item.element.classList.add("active"); } } - - if (item && item.element && item.element.scrollIntoView) { - item.element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' }); - } } // function chooseItem(){ @@ -1163,17 +1101,12 @@ Edit.prototype.editors = { } if (item) { - input.value = item.label; success(item.value); } - - initialDisplayValue = input.value; } - function chooseItems(silent) { - if (!silent) { - hideList(); - } + function chooseItems() { + hideList(); var output = []; @@ -1181,8 +1114,6 @@ Edit.prototype.editors = { output.push(item.value); }); - initialDisplayValue = input.value; - success(output); } @@ -1194,19 +1125,6 @@ Edit.prototype.editors = { }); input.value = output.join(", "); - - if (self.currentCell === false) { - chooseItems(true); - } - } - - function unsetItems() { - - var len = currentItems.length; - - for (var i = 0; i < len; i++) { - unsetItem(0); - } } function cancelItem() { @@ -1215,9 +1133,8 @@ Edit.prototype.editors = { } function showList() { - currentItems = []; - if (!listEl.parentNode) { + if (editorParams.values === true) { parseItems(getUniqueColumnValues(), initialDisplayValue); } else if (typeof editorParams.values === "string") { @@ -1287,13 +1204,6 @@ Edit.prototype.editors = { // parseItems(editorParams.values || [], initialValue); // } - input.addEventListener("search", function (e) { - if (!input.value) { - unsetItems(); - chooseItems(); - } - }); - //allow key based navigation input.addEventListener("keydown", function (e) { var index; @@ -1357,15 +1267,6 @@ Edit.prototype.editors = { //escape cancelItem(); break; - - case 9: - //tab - break; - - default: - if (self.currentCell === false) { - e.preventDefault(); - } } }); @@ -1380,9 +1281,7 @@ Edit.prototype.editors = { }); input.addEventListener("focus", function (e) { - if (!blockListShow) { - showList(); - } + showList(); }); //style list element @@ -1394,17 +1293,11 @@ Edit.prototype.editors = { input.focus({ preventScroll: true }); }); - setTimeout(function () { - _this.table.rowManager.element.addEventListener("scroll", cancelItem); - }, 10); - return input; }, //autocomplete autocomplete: function autocomplete(cell, onRendered, success, cancel, editorParams) { - var _this2 = this; - var self = this, cellEl = cell.getElement(), initialValue = cell.getValue(), @@ -1419,6 +1312,8 @@ Edit.prototype.editors = { blurable = true, uniqueColumnValues = false; + this.table.rowManager.element.addEventListener("scroll", cancelItem); + //style input input.setAttribute("type", "search"); @@ -1709,10 +1604,6 @@ Edit.prototype.editors = { if (item && item.element) { item.element.classList.add("active"); } - - if (item && item.element && item.element.scrollIntoView) { - item.element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' }); - } } function hideList() { @@ -1846,14 +1737,6 @@ Edit.prototype.editors = { this.table.modules.edit.maskInput(input, editorParams); } - setTimeout(function () { - _this2.table.rowManager.element.addEventListener("scroll", cancelItem); - }, 10); - - genUniqueColumnValues(); - input.value = initialDisplayValue; - filterList(initialDisplayValue, true); - return input; }, @@ -2176,10 +2059,6 @@ Edit.prototype.editors = { input.checked = value === true || value === "true" || value === "True" || value === 1; - onRendered(function () { - input.focus(); - }); - function setValue(blur) { if (tristate) { if (!blur) { diff --git a/admin/js/vendors/tabulator/js/modules/edit.min.js b/admin/js/vendors/tabulator/js/modules/edit.min.js new file mode 100644 index 0000000..8e256be --- /dev/null +++ b/admin/js/vendors/tabulator/js/modules/edit.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Edit=function(e){this.table=e,this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1,this.editedCells=[]};Edit.prototype.initializeColumn=function(e){var t=this,i={editor:!1,blocked:!1,check:e.definition.editable,params:e.definition.editorParams||{}};switch(_typeof(e.definition.editor)){case"string":"tick"===e.definition.editor&&(e.definition.editor="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),t.editors[e.definition.editor]?i.editor=t.editors[e.definition.editor]:console.warn("Editor Error - No such editor found: ",e.definition.editor);break;case"function":i.editor=e.definition.editor;break;case"boolean":!0===e.definition.editor&&("function"!=typeof e.definition.formatter?("tick"===e.definition.formatter&&(e.definition.formatter="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),t.editors[e.definition.formatter]?i.editor=t.editors[e.definition.formatter]:i.editor=t.editors.input):console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",e.definition.formatter))}i.editor&&(e.modules.edit=i)},Edit.prototype.getCurrentCell=function(){return!!this.currentCell&&this.currentCell.getComponent()},Edit.prototype.clearEditor=function(e){var t,i=this.currentCell;if(this.invalidEdit=!1,i){for(this.currentCell=!1,t=i.getElement(),e?i.validate():t.classList.remove("tabulator-validation-fail"),t.classList.remove("tabulator-editing");t.firstChild;)t.removeChild(t.firstChild);i.row.getElement().classList.remove("tabulator-row-editing")}},Edit.prototype.cancelEdit=function(){if(this.currentCell){var e=this.currentCell,t=this.currentCell.getComponent();this.clearEditor(!0),e.setValueActual(e.getValue()),e.cellRendered(),e.column.cellEvents.cellEditCancelled&&e.column.cellEvents.cellEditCancelled.call(this.table,t),this.table.options.cellEditCancelled.call(this.table,t)}},Edit.prototype.bindEditor=function(e){var t=this,i=e.getElement();i.setAttribute("tabindex",0),i.addEventListener("click",function(e){i.classList.contains("tabulator-editing")||i.focus({preventScroll:!0})}),i.addEventListener("mousedown",function(e){t.mouseClick=!0}),i.addEventListener("focus",function(i){t.recursionBlock||t.edit(e,i,!1)})},Edit.prototype.focusCellNoEvent=function(e,t){this.recursionBlock=!0,t&&"ie"===this.table.browser||e.getElement().focus({preventScroll:!0}),this.recursionBlock=!1},Edit.prototype.editCell=function(e,t){this.focusCellNoEvent(e),this.edit(e,!1,t)},Edit.prototype.focusScrollAdjust=function(e){if("virtual"==this.table.rowManager.getRenderMode()){var t=this.table.rowManager.element.scrollTop,i=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,n=e.row.getElement();n.offsetTop;n.offsetTopi&&(this.table.rowManager.element.scrollTop+=n.offsetTop+n.offsetHeight-i)}},Edit.prototype.edit=function(e,t,i){function n(t){if(u.currentCell===e){var i=!0;return e.column.modules.validate&&u.table.modExists("validate")&&"manual"!=u.table.options.validationMode&&(i=u.table.modules.validate.validate(e.column.modules.validate,e,t)),!0===i||"highlight"===u.table.options.validationMode?(u.clearEditor(),e.setValue(t,!0),e.modules.edit||(e.modules.edit={}),e.modules.edit.edited=!0,-1==u.editedCells.indexOf(e)&&u.editedCells.push(e),u.table.options.dataTree&&u.table.modExists("dataTree")&&u.table.modules.dataTree.checkForRestyle(e),!0===i||(m.classList.add("tabulator-validation-fail"),!1)):(u.invalidEdit=!0,m.classList.add("tabulator-validation-fail"),u.focusCellNoEvent(e,!0),c(),u.table.options.validationFailed.call(u.table,e.getComponent(),t,i),!1)}}function o(){u.currentCell===e&&(u.cancelEdit(),u.table.options.dataTree&&u.table.modExists("dataTree")&&u.table.modules.dataTree.checkForRestyle(e))}function a(e){c=e}var r,l,s,u=this,d=!0,c=function(){},m=e.getElement();if(this.currentCell)return void(this.invalidEdit||this.cancelEdit());if(e.column.modules.edit.blocked)return this.mouseClick=!1,m.blur(),!1;switch(t&&t.stopPropagation(),_typeof(e.column.modules.edit.check)){case"function":d=e.column.modules.edit.check(e.getComponent());break;case"boolean":d=e.column.modules.edit.check}if(d||i){if(u.cancelEdit(),u.currentCell=e,this.focusScrollAdjust(e),l=e.getComponent(),this.mouseClick&&(this.mouseClick=!1,e.column.cellEvents.cellClick&&e.column.cellEvents.cellClick.call(this.table,t,l)),e.column.cellEvents.cellEditing&&e.column.cellEvents.cellEditing.call(this.table,l),u.table.options.cellEditing.call(this.table,l),s="function"==typeof e.column.modules.edit.params?e.column.modules.edit.params(l):e.column.modules.edit.params,!1===(r=e.column.modules.edit.editor.call(u,l,a,n,o,s)))return m.blur(),!1;if(!(r instanceof Node))return console.warn("Edit Error - Editor should return an instance of Node, the editor returned:",r),m.blur(),!1;for(m.classList.add("tabulator-editing"),e.row.getElement().classList.add("tabulator-row-editing");m.firstChild;)m.removeChild(m.firstChild);m.appendChild(r),c();for(var f=m.children,p=0;p46){if(i>=n.length)return t.preventDefault(),t.stopPropagation(),l=!1,!1;switch(n[i]){case o:if(s.toUpperCase()==s.toLowerCase())return t.preventDefault(),t.stopPropagation(),l=!1,!1;break;case a:if(isNaN(s))return t.preventDefault(),t.stopPropagation(),l=!1,!1;break;case r:break;default:if(s!==n[i])return t.preventDefault(),t.stopPropagation(),l=!1,!1}l=!0}}),e.addEventListener("keyup",function(n){n.keyCode>46&&t.maskAutoFill&&i(e.value.length)}),e.placeholder||(e.placeholder=n),t.maskAutoFill&&i(e.value.length)},Edit.prototype.getEditedCells=function(){var e=[];return this.editedCells.forEach(function(t){e.push(t.getComponent())}),e},Edit.prototype.clearEdited=function(e){var t;e.modules.edit&&e.modules.edit.edited&&(e.modules.validate.invalid=!1,(t=this.editedCells.indexOf(e))>-1&&this.editedCells.splice(t,1))},Edit.prototype.editors={input:function(e,t,i,n,o){function a(e){(null===r||void 0===r)&&""!==l.value||l.value!==r?i(l.value)&&(r=l.value):n()}var r=e.getValue(),l=document.createElement("input");if(l.setAttribute("type",o.search?"search":"text"),l.style.padding="4px",l.style.width="100%",l.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var s in o.elementAttributes)"+"==s.charAt(0)?(s=s.slice(1),l.setAttribute(s,l.getAttribute(s)+o.elementAttributes["+"+s])):l.setAttribute(s,o.elementAttributes[s]);return l.value=void 0!==r?r:"",t(function(){l.focus({preventScroll:!0}),l.style.height="100%"}),l.addEventListener("change",a),l.addEventListener("blur",a),l.addEventListener("keydown",function(e){switch(e.keyCode){case 13:a(e);break;case 27:n()}}),o.mask&&this.table.modules.edit.maskInput(l,o),l},textarea:function(e,t,i,n,o){function a(t){(null===r||void 0===r)&&""!==u.value||u.value!==r?(i(u.value)&&(r=u.value),setTimeout(function(){e.getRow().normalizeHeight()},300)):n()}var r=e.getValue(),l=o.verticalNavigation||"hybrid",s=String(null!==r&&void 0!==r?r:""),u=(s.match(/(?:\r\n|\r|\n)/g),document.createElement("textarea")),d=0;if(u.style.display="block",u.style.padding="2px",u.style.height="100%",u.style.width="100%",u.style.boxSizing="border-box",u.style.whiteSpace="pre-wrap",u.style.resize="none",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var c in o.elementAttributes)"+"==c.charAt(0)?(c=c.slice(1),u.setAttribute(c,u.getAttribute(c)+o.elementAttributes["+"+c])):u.setAttribute(c,o.elementAttributes[c]);return u.value=s,t(function(){u.focus({preventScroll:!0}),u.style.height="100%"}),u.addEventListener("change",a),u.addEventListener("blur",a),u.addEventListener("keyup",function(){u.style.height="";var t=u.scrollHeight;u.style.height=t+"px",t!=d&&(d=t,e.getRow().normalizeHeight())}),u.addEventListener("keydown",function(e){switch(e.keyCode){case 27:n();break;case 38:("editor"==l||"hybrid"==l&&u.selectionStart)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 40:("editor"==l||"hybrid"==l&&u.selectionStart!==u.value.length)&&(e.stopImmediatePropagation(),e.stopPropagation())}}),o.mask&&this.table.modules.edit.maskInput(u,o),u},number:function(e,t,i,n,o){function a(){var e=s.value;isNaN(e)||""===e||(e=Number(e)),e!==r?i(e)&&(r=e):n()}var r=e.getValue(),l=o.verticalNavigation||"editor",s=document.createElement("input");if(s.setAttribute("type","number"),void 0!==o.max&&s.setAttribute("max",o.max),void 0!==o.min&&s.setAttribute("min",o.min),void 0!==o.step&&s.setAttribute("step",o.step),s.style.padding="4px",s.style.width="100%",s.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var u in o.elementAttributes)"+"==u.charAt(0)?(u=u.slice(1),s.setAttribute(u,s.getAttribute(u)+o.elementAttributes["+"+u])):s.setAttribute(u,o.elementAttributes[u]);s.value=r;var d=function(e){a()};return t(function(){s.removeEventListener("blur",d),s.focus({preventScroll:!0}),s.style.height="100%",s.addEventListener("blur",d)}),s.addEventListener("keydown",function(e){switch(e.keyCode){case 13:a();break;case 27:n();break;case 38:case 40:"editor"==l&&(e.stopImmediatePropagation(),e.stopPropagation())}}),o.mask&&this.table.modules.edit.maskInput(s,o),s},range:function(e,t,i,n,o){function a(){var e=l.value;isNaN(e)||""===e||(e=Number(e)),e!=r?i(e)&&(r=e):n()}var r=e.getValue(),l=document.createElement("input");if(l.setAttribute("type","range"),void 0!==o.max&&l.setAttribute("max",o.max),void 0!==o.min&&l.setAttribute("min",o.min),void 0!==o.step&&l.setAttribute("step",o.step),l.style.padding="4px",l.style.width="100%",l.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var s in o.elementAttributes)"+"==s.charAt(0)?(s=s.slice(1),l.setAttribute(s,l.getAttribute(s)+o.elementAttributes["+"+s])):l.setAttribute(s,o.elementAttributes[s]);return l.value=r,t(function(){l.focus({preventScroll:!0}),l.style.height="100%"}),l.addEventListener("blur",function(e){a()}),l.addEventListener("keydown",function(e){switch(e.keyCode){case 13:a();break;case 27:n()}}),l},select:function(e,t,i,n,o){function a(t){var i,n={},a=y.table.getData();return i=t?y.table.columnManager.getColumnByField(t):e.getColumn()._getSelf(),i?(a.forEach(function(e){var t=i.getFieldValue(e);null!==t&&void 0!==t&&""!==t&&(n[t]=!0)}),n=o.sortValuesList?"asc"==o.sortValuesList?Object.keys(n).sort():Object.keys(n).sort().reverse():Object.keys(n)):console.warn("unable to find matching column to create select lookup list:",t),n}function r(t,i){function n(e){var e={label:e.label,value:e.value,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1};return i.indexOf(e.value)>-1&&u(e),o.push(e),a.push(e),e}var o=[],a=[];if("function"==typeof t&&(t=t(e)),Array.isArray(t))t.forEach(function(e){var t;"object"===(void 0===e?"undefined":_typeof(e))?e.options?(t={label:e.label,group:!0,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1},a.push(t),e.options.forEach(function(e){n(e)})):n(e):(t={label:e,value:e,element:!1},i.indexOf(t.value)>-1&&u(t),o.push(t),a.push(t))});else for(var r in t){var s={label:t[r],value:r,element:!1};i.indexOf(s.value)>-1&&u(s),o.push(s),a.push(s)}P=o,T=a,l()}function l(){for(;w.firstChild;)w.removeChild(w.firstChild);T.forEach(function(t){var i=t.element;if(!i){if(i=document.createElement("div"),t.label=o.listItemFormatter?o.listItemFormatter(t.value,t.label,e,i,t.itemParams):t.label,t.group?(i.classList.add("tabulator-edit-select-list-group"),i.tabIndex=0,i.innerHTML=""===t.label?" ":t.label):(i.classList.add("tabulator-edit-select-list-item"),i.tabIndex=0,i.innerHTML=""===t.label?" ":t.label,i.addEventListener("click",function(){x?(c(t),L.focus()):m(t)}),I.indexOf(t)>-1&&i.classList.add("active")),t.elementAttributes&&"object"==_typeof(t.elementAttributes))for(var n in t.elementAttributes)"+"==n.charAt(0)?(n=n.slice(1),i.setAttribute(n,L.getAttribute(n)+t.elementAttributes["+"+n])):i.setAttribute(n,t.elementAttributes[n]);i.addEventListener("mousedown",function(){S=!1,setTimeout(function(){S=!0},10)}),t.element=i}w.appendChild(i)})}function s(e,t){!x&&N&&N.element&&N.element.classList.remove("active"),N&&N.element&&N.element.classList.remove("focused"),N=e,e.element&&(e.element.classList.add("focused"),t&&e.element.classList.add("active"))}function u(e){-1==I.indexOf(e)&&(I.push(e),s(e,!0)),p()}function d(e){var t=I[e];e>-1&&(I.splice(e,1),t.element&&t.element.classList.remove("active"))}function c(e){e||(e=N);var t=I.indexOf(e);t>-1?d(t):(!0!==x&&I.length>=x&&d(0),u(e)),p()}function m(e){h(),e||(e=N),e&&i(e.value)}function f(){h();var e=[];I.forEach(function(t){e.push(t.value)}),i(e)}function p(){var e=[];I.forEach(function(t){e.push(t.label)}),L.value=e.join(", ")}function v(){h(),n()}function b(){if(!w.parentNode){!0===o.values?r(a(),C):"string"==typeof o.values?r(a(o.values),C):r(o.values||[],C);var e=Tabulator.prototype.helpers.elOffset(E);w.style.minWidth=E.offsetWidth+"px",w.style.top=e.top+E.offsetHeight+"px",w.style.left=e.left+"px",w.addEventListener("mousedown",function(e){S=!1,setTimeout(function(){S=!0},10)}),document.body.appendChild(w)}}function h(){w.parentNode&&w.parentNode.removeChild(w),g()}function g(){y.table.rowManager.element.removeEventListener("scroll",v)}var y=this,E=e.getElement(),A=e.getValue(),k=o.verticalNavigation||"editor",C=void 0!==A||null===A?A:void 0!==o.defaultValue?o.defaultValue:[],L=document.createElement("input"),w=document.createElement("div"),x=o.multiselect,P=[],N={},T=[],I=[],S=!0;if(this.table.rowManager.element.addEventListener("scroll",v),(Array.isArray(o)||!Array.isArray(o)&&"object"===(void 0===o?"undefined":_typeof(o))&&!o.values)&&(console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object"),o={values:o}),L.setAttribute("type","text"),L.style.padding="4px",L.style.width="100%",L.style.boxSizing="border-box",L.style.cursor="default",L.readOnly=0!=this.currentCell,o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var O in o.elementAttributes)"+"==O.charAt(0)?(O=O.slice(1),L.setAttribute(O,L.getAttribute(O)+o.elementAttributes["+"+O])):L.setAttribute(O,o.elementAttributes[O]);return L.value=void 0!==A||null===A?A:"",L.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=P.indexOf(N),("editor"==k||"hybrid"==k&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t>0&&s(P[t-1],!x));break;case 40:t=P.indexOf(N),("editor"==k||"hybrid"==k&&t-1||String(t.title).toLowerCase().indexOf(String(e).toLowerCase())>-1)&&a.push(t)}),c(a,t))}function s(e){var t=document.createElement("div");d(),!1!==e&&(t.classList.add("tabulator-edit-select-list-notice"),t.tabIndex=0,e instanceof Node?t.appendChild(e):t.innerHTML=e,w.appendChild(t))}function u(e){var t=[];if(Array.isArray(e))e.forEach(function(e){var i={};"object"===(void 0===e?"undefined":_typeof(e))?(i.title=o.listItemFormatter?o.listItemFormatter(e.value,e.label):e.label,i.value=e.value):(i.title=o.listItemFormatter?o.listItemFormatter(e,e):e,i.value=e),t.push(i)});else for(var i in e){var n={title:o.listItemFormatter?o.listItemFormatter(i,e[i]):e[i],value:i};t.push(n)}return t}function d(){for(;w.firstChild;)w.removeChild(w.firstChild)}function c(e,t){e.length?m(e,t):o.emptyPlaceholder&&s(o.emptyPlaceholder)}function m(e,t){var i=!1;d(),x=e,x.forEach(function(e){var n=e.element;n||(n=document.createElement("div"),n.classList.add("tabulator-edit-select-list-item"),n.tabIndex=0,n.innerHTML=e.title,n.addEventListener("click",function(t){v(e),f()}),n.addEventListener("mousedown",function(e){N=!1,setTimeout(function(){N=!0},10)}),e.element=n,t&&e.value==A&&(L.value=e.title,e.element.classList.add("active"),i=!0),e===P&&(e.element.classList.add("active"),i=!0)),w.appendChild(n)}),i||v(!1)}function f(){b(),P?A!==P.value?(A=P.value,L.value=P.title,i(P.value)):n():o.freetext?(A=L.value,i(L.value)):o.allowEmpty&&""===L.value?(A=L.value,i(L.value)):n()}function p(){if(!w.parentNode){for(;w.firstChild;)w.removeChild(w.firstChild);var e=Tabulator.prototype.helpers.elOffset(E);w.style.minWidth=E.offsetWidth+"px",w.style.top=e.top+E.offsetHeight+"px",w.style.left=e.left+"px",document.body.appendChild(w)}}function v(e,t){P&&P.element&&P.element.classList.remove("active"),P=e,e&&e.element&&e.element.classList.add("active")}function b(){w.parentNode&&w.parentNode.removeChild(w),g()}function h(){b(),n()}function g(){y.table.rowManager.element.removeEventListener("scroll",h)}var y=this,E=e.getElement(),A=e.getValue(),k=o.verticalNavigation||"editor",C=void 0!==A||null===A?A:void 0!==o.defaultValue?o.defaultValue:"",L=document.createElement("input"),w=document.createElement("div"),x=[],P=!1,N=!0,T=!1;if(this.table.rowManager.element.addEventListener("scroll",h),L.setAttribute("type","search"),L.style.padding="4px",L.style.width="100%",L.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var I in o.elementAttributes)"+"==I.charAt(0)?(I=I.slice(1),L.setAttribute(I,L.getAttribute(I)+o.elementAttributes["+"+I])):L.setAttribute(I,o.elementAttributes[I]);return w.classList.add("tabulator-edit-select-list"),w.addEventListener("mousedown",function(e){N=!1,setTimeout(function(){N=!0},10)}),L.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=x.indexOf(P),("editor"==k||"hybrid"==k&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),v(t>0?x[t-1]:!1));break;case 40:t=x.indexOf(P),("editor"==k||"hybrid"==k&&t'):("ie"==l.table.browser?t.setAttribute("class","tabulator-star-inactive"):t.classList.replace("tabulator-star-active","tabulator-star-inactive"),t.innerHTML='')})}function r(e){u=e,a(e)}var l=this,s=e.getElement(),u=e.getValue(),d=s.getElementsByTagName("svg").length||5,c=s.getElementsByTagName("svg")[0]?s.getElementsByTagName("svg")[0].getAttribute("width"):14,m=[],f=document.createElement("div"),p=document.createElementNS("http://www.w3.org/2000/svg","svg");if(s.style.whiteSpace="nowrap",s.style.overflow="hidden",s.style.textOverflow="ellipsis",f.style.verticalAlign="middle",f.style.display="inline-block",f.style.padding="4px",p.setAttribute("width",c),p.setAttribute("height",c),p.setAttribute("viewBox","0 0 512 512"),p.setAttribute("xml:space","preserve"),p.style.padding="0 1px",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var v in o.elementAttributes)"+"==v.charAt(0)?(v=v.slice(1),f.setAttribute(v,f.getAttribute(v)+o.elementAttributes["+"+v])):f.setAttribute(v,o.elementAttributes[v]);for(var b=1;b<=d;b++)!function(e){var t=document.createElement("span"),n=p.cloneNode(!0);m.push(n),t.addEventListener("mouseenter",function(t){t.stopPropagation(),t.stopImmediatePropagation(),a(e)}),t.addEventListener("mousemove",function(e){e.stopPropagation(),e.stopImmediatePropagation()}),t.addEventListener("click",function(t){t.stopPropagation(),t.stopImmediatePropagation(),i(e),s.blur()}),t.appendChild(n),f.appendChild(t)}(b);return u=Math.min(parseInt(u),d),a(u),f.addEventListener("mousemove",function(e){a(0)}),f.addEventListener("click",function(e){i(0)}),s.addEventListener("blur",function(e){n()}),s.addEventListener("keydown",function(e){switch(e.keyCode){case 39:r(u+1);break;case 37:r(u-1);break;case 13:i(u);break;case 27:n()}}),f},progress:function(e,t,i,n,o){function a(){var e=c*Math.round(p.offsetWidth/(s.clientWidth/100))+d;i(e),s.setAttribute("aria-valuenow",e),s.setAttribute("aria-label",m)}var r,l,s=e.getElement(),u=void 0===o.max?s.getElementsByTagName("div")[0].getAttribute("max")||100:o.max,d=void 0===o.min?s.getElementsByTagName("div")[0].getAttribute("min")||0:o.min,c=(u-d)/100,m=e.getValue()||0,f=document.createElement("div"),p=document.createElement("div");if(f.style.position="absolute",f.style.right="0",f.style.top="0",f.style.bottom="0",f.style.width="5px",f.classList.add("tabulator-progress-handle"),p.style.display="inline-block",p.style.position="relative",p.style.height="100%",p.style.backgroundColor="#488CE9",p.style.maxWidth="100%",p.style.minWidth="0%",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var v in o.elementAttributes)"+"==v.charAt(0)?(v=v.slice(1),p.setAttribute(v,p.getAttribute(v)+o.elementAttributes["+"+v])):p.setAttribute(v,o.elementAttributes[v]);return s.style.padding="4px 4px",m=Math.min(parseFloat(m),u),m=Math.max(parseFloat(m),d),m=Math.round((m-d)/c),p.style.width=m+"%",s.setAttribute("aria-valuemin",d),s.setAttribute("aria-valuemax",u),p.appendChild(f),f.addEventListener("mousedown",function(e){r=e.screenX,l=p.offsetWidth}),f.addEventListener("mouseover",function(){f.style.cursor="ew-resize"}),s.addEventListener("mousemove",function(e){r&&(p.style.width=l+e.screenX-r+"px")}),s.addEventListener("mouseup",function(e){r&&(e.stopPropagation(),e.stopImmediatePropagation(),r=!1,l=!1,a())}),s.addEventListener("keydown",function(e){switch(e.keyCode){case 39:e.preventDefault(),p.style.width=p.clientWidth+s.clientWidth/100+"px";break;case 37:e.preventDefault(),p.style.width=p.clientWidth-s.clientWidth/100+"px";break;case 9:case 13:a();break;case 27:n()}}),s.addEventListener("blur",function(){n()}),p},tickCross:function(e,t,i,n,o){function a(e){return s?e?d?u:l.checked:l.checked&&!d?(l.checked=!1,l.indeterminate=!0,d=!0,u):(d=!1,l.checked):l.checked}var r=e.getValue(),l=document.createElement("input"),s=o.tristate,u=void 0===o.indeterminateValue?null:o.indeterminateValue,d=!1;if(l.setAttribute("type","checkbox"),l.style.marginTop="5px",l.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var c in o.elementAttributes)"+"==c.charAt(0)?(c=c.slice(1),l.setAttribute(c,l.getAttribute(c)+o.elementAttributes["+"+c])):l.setAttribute(c,o.elementAttributes[c]);return l.value=r,!s||void 0!==r&&r!==u&&""!==r||(d=!0,l.indeterminate=!0),"firefox"!=this.table.browser&&t(function(){l.focus({preventScroll:!0})}),l.checked=!0===r||"true"===r||"True"===r||1===r,l.addEventListener("change",function(e){i(a())}),l.addEventListener("blur",function(e){i(a(!0))}),l.addEventListener("keydown",function(e){13==e.keyCode&&i(a()),27==e.keyCode&&n()}),l}},Tabulator.prototype.registerModule("edit",Edit); \ No newline at end of file diff --git a/website/js/vendor/tabulator/js/modules/export.js b/admin/js/vendors/tabulator/js/modules/export.js similarity index 97% rename from website/js/vendor/tabulator/js/modules/export.js rename to admin/js/vendors/tabulator/js/modules/export.js index 9f9806d..18d3f6c 100644 --- a/website/js/vendor/tabulator/js/modules/export.js +++ b/admin/js/vendors/tabulator/js/modules/export.js @@ -1,6 +1,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var ExportRow = function ExportRow(type, columns, component, indent) { this.type = type; @@ -71,11 +71,7 @@ Export.prototype.rowLookup = function (range) { case "active": default: - if (this.table.options.pagination) { - rows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2); - } else { - rows = this.table.rowManager.getDisplayRows(); - } + rows = this.table.rowManager.getDisplayRows(); } } @@ -441,7 +437,7 @@ Export.prototype.genereateGroupElement = function (row, setup, styles) { rowEl.classList.add("tabulator-print-table-group"); rowEl.classList.add("tabulator-group-level-" + row.indent); - if (group.component.isVisible()) { + if (group.component.getVisibility()) { rowEl.classList.add("tabulator-group-visible"); } @@ -491,10 +487,10 @@ Export.prototype.genereateRowElement = function (row, setup, styles) { return column.getComponent(); }, getData: function getData() { - return row.component.getData(); + return rowData; }, getRow: function getRow() { - return row.component; + return row.getComponent(); }, getComponent: function getComponent() { return cellWrapper; @@ -558,7 +554,13 @@ Export.prototype.genereateRowElement = function (row, setup, styles) { } if (setup.rowFormatter && _this7.config.formatCells !== false) { - setup.rowFormatter(row.component); + var rowComponent = row.getComponent(); + + rowComponent.getElement = function () { + return rowEl; + }; + + setup.rowFormatter(rowComponent); } } }); diff --git a/admin/js/vendors/tabulator/js/modules/export.min.js b/admin/js/vendors/tabulator/js/modules/export.min.js new file mode 100644 index 0000000..d0dcccd --- /dev/null +++ b/admin/js/vendors/tabulator/js/modules/export.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ExportRow=function(t,e,o,r){this.type=t,this.columns=e,this.component=o||!1,this.indent=r||0},ExportColumn=function(t,e,o,r,n){this.value=t,this.component=e||!1,this.width=o,this.height=r,this.depth=n},Export=function(t){this.table=t,this.config={},this.cloneTableStyle=!0,this.colVisProp=""};Export.prototype.generateExportList=function(t,e,o,r){this.cloneTableStyle=e,this.config=t||{},this.colVisProp=r;var n=!1!==this.config.columnHeaders?this.headersToExportRows(this.generateColumnGroupHeaders()):[],l=this.bodyToExportRows(this.rowLookup(o));return n.concat(l)},Export.prototype.genereateTable=function(t,e,o,r){var n=this.generateExportList(t,e,o,r);return this.genereateTableElement(n)},Export.prototype.rowLookup=function(t){var e=this,o=[];if("function"==typeof t)t.call(this.table).forEach(function(t){(t=e.table.rowManager.findRow(t))&&o.push(t)});else switch(t){case!0:case"visible":o=this.table.rowManager.getVisibleRows(!0);break;case"all":o=this.table.rowManager.rows;break;case"selected":o=this.table.modules.selectRow.selectedRows;break;case"active":default:o=this.table.rowManager.getDisplayRows()}return Object.assign([],o)},Export.prototype.generateColumnGroupHeaders=function(){var t=this,e=[];return(!1!==this.config.columnGroups?this.table.columnManager.columns:this.table.columnManager.columnsByIndex).forEach(function(o){var r=t.processColumnGroup(o);r&&e.push(r)}),e},Export.prototype.processColumnGroup=function(t){var e=this,o=t.columns,r=0,n=t.definition["title"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))]||t.definition.title,l={title:n,column:t,depth:1};if(o.length){if(l.subGroups=[],l.width=0,o.forEach(function(t){var o=e.processColumnGroup(t);o&&(l.width+=o.width,l.subGroups.push(o),o.depth>r&&(r=o.depth))}),l.depth+=r,!l.width)return!1}else{if(!this.columnVisCheck(t))return!1;l.width=1}return l},Export.prototype.columnVisCheck=function(t){return!1!==t.definition[this.colVisProp]&&(t.visible||!t.visible&&t.definition[this.colVisProp])},Export.prototype.headersToExportRows=function(t){function e(t,n){var l=r-n;if(void 0===o[n]&&(o[n]=[]),t.height=t.subGroups?1:l-t.depth+1,o[n].push(t),t.height>1)for(var a=1;a1)for(var i=1;ir&&(r=t.depth)}),t.forEach(function(t){e(t,0)}),o.forEach(function(t){var e=[];t.forEach(function(t){t?e.push(new ExportColumn(t.title,t.column.getComponent(),t.width,t.height,t.depth)):e.push(null)}),n.push(new ExportRow("header",e))}),n},Export.prototype.bodyToExportRows=function(t){var e=this,o=[],r=[];return this.table.columnManager.columnsByIndex.forEach(function(t){e.columnVisCheck(t)&&o.push(t.getComponent())}),!1!==this.config.columnCalcs&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&t.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&t.push(this.table.modules.columnCalcs.botRow)),t=t.filter(function(t){switch(t.type){case"group":return!1!==e.config.rowGroups;case"calc":return!1!==e.config.columnCalcs;case"row":return!(e.table.options.dataTree&&!1===e.config.dataTree&&t.modules.dataTree.parent)}return!0}),t.forEach(function(t,n){var l=t.getData(e.colVisProp),a=[],i=0;switch(t.type){case"group":i=t.level,a.push(new ExportColumn(t.key,t.getComponent(),o.length,1));break;case"calc":case"row":o.forEach(function(t){a.push(new ExportColumn(t._column.getFieldValue(l),t,1,1))}),e.table.options.dataTree&&!1!==e.config.dataTree&&(i=t.modules.dataTree.index)}r.push(new ExportRow(t.type,a,t.getComponent(),i))}),r},Export.prototype.genereateTableElement=function(t){var e=this,o=document.createElement("table"),r=document.createElement("thead"),n=document.createElement("tbody"),l=this.lookupTableStyles(),a=this.table.options["rowFormatter"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],i={};return i.rowFormatter=null!==a?a:this.table.options.rowFormatter,this.table.options.dataTree&&!1!==this.config.dataTree&&this.table.modExists("columnCalcs")&&(i.treeElementField=this.table.modules.dataTree.elementField),i.groupHeader=this.table.options["groupHeader"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],i.groupHeader&&!Array.isArray(i.groupHeader)&&(i.groupHeader=[i.groupHeader]),o.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),r,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),t.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),t.forEach(function(t,o){switch(t.type){case"header":r.appendChild(e.genereateHeaderElement(t,i,l));break;case"group":n.appendChild(e.genereateGroupElement(t,i,l));break;case"calc":n.appendChild(e.genereateCalcElement(t,i,l));break;case"row":var a=e.genereateRowElement(t,i,l);e.mapElementStyles(o%2&&l.evenRow?l.evenRow:l.oddRow,a,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),n.appendChild(a)}}),r.innerHTML&&o.appendChild(r),o.appendChild(n),this.mapElementStyles(this.table.element,o,["border-top","border-left","border-right","border-bottom"]),o},Export.prototype.lookupTableStyles=function(){var t={};return this.cloneTableStyle&&window.getComputedStyle&&(t.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),t.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),t.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),t.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),t.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],t.firstRow&&(t.styleCells=t.firstRow.getElementsByClassName("tabulator-cell"),t.firstCell=t.styleCells[0],t.lastCell=t.styleCells[t.styleCells.length-1])),t},Export.prototype.genereateHeaderElement=function(t,e,o){var r=this,n=document.createElement("tr");return t.columns.forEach(function(t){if(t){var e=document.createElement("th"),o=t.component._column.definition.cssClass?t.component._column.definition.cssClass.split(" "):[];e.colSpan=t.width,e.rowSpan=t.height,e.innerHTML=t.value,r.cloneTableStyle&&(e.style.boxSizing="border-box"),o.forEach(function(t){e.classList.add(t)}),r.mapElementStyles(t.component.getElement(),e,["text-align","border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),r.mapElementStyles(t.component._column.contentElement,e,["padding-top","padding-left","padding-right","padding-bottom"]),t.component._column.visible?r.mapElementStyles(t.component.getElement(),e,["width"]):t.component._column.definition.width&&(e.style.width=t.component._column.definition.width+"px"),t.component._column.parent&&r.mapElementStyles(t.component._column.parent.groupElement,e,["border-top"]),n.appendChild(e)}}),n},Export.prototype.genereateGroupElement=function(t,e,o){var r=document.createElement("tr"),n=document.createElement("td"),l=t.columns[0];return r.classList.add("tabulator-print-table-row"),e.groupHeader&&e.groupHeader[t.indent]?l.value=e.groupHeader[t.indent](l.value,t.component._group.getRowCount(),t.component._group.getData(),t.component):!1===e.groupHeader?l.value=l.value:l.value=t.component._group.generator(l.value,t.component._group.getRowCount(),t.component._group.getData(),t.component),n.colSpan=l.width,n.innerHTML=l.value,r.classList.add("tabulator-print-table-group"),r.classList.add("tabulator-group-level-"+t.indent),l.component.getVisibility()&&r.classList.add("tabulator-group-visible"),this.mapElementStyles(o.firstGroup,r,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(o.firstGroup,n,["padding-top","padding-left","padding-right","padding-bottom"]),r.appendChild(n),r},Export.prototype.genereateCalcElement=function(t,e,o){var r=this.genereateRowElement(t,e,o);return r.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(o.calcRow,r,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),r},Export.prototype.genereateRowElement=function(t,e,o){var r=this,n=document.createElement("tr");return n.classList.add("tabulator-print-table-row"),t.columns.forEach(function(l){if(l){var a=document.createElement("td"),s=l.component._column,p=l.value,c={modules:{},getValue:function(){return p},getField:function(){return s.definition.field},getElement:function(){return a},getColumn:function(){return s.getComponent()},getData:function(){return rowData},getRow:function(){return t.getComponent()},getComponent:function(){return c},column:s};if((s.definition.cssClass?s.definition.cssClass.split(" "):[]).forEach(function(t){a.classList.add(t)}),r.table.modExists("format")&&!1!==r.config.formatCells)p=r.table.modules.format.formatExportValue(c,r.colVisProp);else switch(void 0===p?"undefined":_typeof(p)){case"object":p=JSON.stringify(p);break;case"undefined":case"null":p="";break;default:p=p}if(p instanceof Node?a.appendChild(p):a.innerHTML=p,o.firstCell&&(r.mapElementStyles(o.firstCell,a,["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size"]),s.definition.align&&(a.style.textAlign=s.definition.align)),r.table.options.dataTree&&!1!==r.config.dataTree&&(e.treeElementField&&e.treeElementField==s.field||!e.treeElementField&&0==i)&&(t.component._row.modules.dataTree.controlEl&&a.insertBefore(t.component._row.modules.dataTree.controlEl.cloneNode(!0),a.firstChild),t.component._row.modules.dataTree.branchEl&&a.insertBefore(t.component._row.modules.dataTree.branchEl.cloneNode(!0),a.firstChild)),n.appendChild(a),c.modules.format&&c.modules.format.renderedCallback&&c.modules.format.renderedCallback(),e.rowFormatter&&!1!==r.config.formatCells){var u=t.getComponent();u.getElement=function(){return n},e.rowFormatter(u)}}}),n},Export.prototype.genereateHTMLTable=function(t){var e=document.createElement("div");return e.appendChild(this.genereateTableElement(t)),e.innerHTML},Export.prototype.getHtml=function(t,e,o,r){var n=this.generateExportList(o||this.table.options.htmlOutputConfig,e,t,r||"htmlOutput");return this.genereateHTMLTable(n)},Export.prototype.mapElementStyles=function(t,e,o){if(this.cloneTableStyle&&t&&e){var r={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var n=window.getComputedStyle(t);o.forEach(function(t){e.style[r[t]]=n.getPropertyValue(t)})}}},Tabulator.prototype.registerModule("export",Export); \ No newline at end of file diff --git a/website/js/vendor/tabulator/js/modules/filter.js b/admin/js/vendors/tabulator/js/modules/filter.js similarity index 99% rename from website/js/vendor/tabulator/js/modules/filter.js rename to admin/js/vendors/tabulator/js/modules/filter.js index 7173cd1..aaed59b 100644 --- a/website/js/vendor/tabulator/js/modules/filter.js +++ b/admin/js/vendors/tabulator/js/modules/filter.js @@ -1,6 +1,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var Filter = function Filter(table) { @@ -796,7 +796,7 @@ Filter.prototype.filters = { //in array "in": function _in(filterVal, rowVal, rowData, filterParams) { if (Array.isArray(filterVal)) { - return filterVal.length ? filterVal.indexOf(rowVal) > -1 : true; + return filterVal.indexOf(rowVal) > -1; } else { console.warn("Filter Error - filter value is not an array:", filterVal); return false; diff --git a/website/js/vendor/tabulator/js/modules/filter.min.js b/admin/js/vendors/tabulator/js/modules/filter.min.js similarity index 98% rename from website/js/vendor/tabulator/js/modules/filter.min.js rename to admin/js/vendors/tabulator/js/modules/filter.min.js index eace11d..8be2662 100644 --- a/website/js/vendor/tabulator/js/modules/filter.min.js +++ b/admin/js/vendors/tabulator/js/modules/filter.min.js @@ -1,2 +1,2 @@ -/* Tabulator v4.8.3 (c) Oliver Folkerd */ -var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Filter=function(e){this.table=e,this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1};Filter.prototype.initializeColumn=function(e,t){function r(t){var r,o="input"==e.modules.filter.tagType&&"text"==e.modules.filter.attrType||"textarea"==e.modules.filter.tagType?"partial":"match",a="",s="";if(void 0===e.modules.filter.prevSuccess||e.modules.filter.prevSuccess!==t){if(e.modules.filter.prevSuccess=t,e.modules.filter.emptyFunc(t))delete n.headerFilters[l];else{switch(e.modules.filter.value=t,_typeof(e.definition.headerFilterFunc)){case"string":n.filters[e.definition.headerFilterFunc]?(a=e.definition.headerFilterFunc,r=function(r){var i=e.definition.headerFilterFuncParams||{},l=e.getFieldValue(r);return i="function"==typeof i?i(t,l,r):i,n.filters[e.definition.headerFilterFunc](t,l,r,i)}):console.warn("Header Filter Error - Matching filter function not found: ",e.definition.headerFilterFunc);break;case"function":r=function(r){var i=e.definition.headerFilterFuncParams||{},n=e.getFieldValue(r);return i="function"==typeof i?i(t,n,r):i,e.definition.headerFilterFunc(t,n,r,i)},a=r}if(!r)switch(o){case"partial":r=function(r){var i=e.getFieldValue(r);return void 0!==i&&null!==i&&String(i).toLowerCase().indexOf(String(t).toLowerCase())>-1},a="like";break;default:r=function(r){return e.getFieldValue(r)==t},a="="}n.headerFilters[l]={value:t,func:r,type:a,params:i||{}}}s=JSON.stringify(n.headerFilters),n.prevHeaderFilterChangeCheck!==s&&(n.prevHeaderFilterChangeCheck=s,n.changed=!0,n.table.rowManager.filterRefresh())}return!0}var i,n=this,l=e.getField();e.modules.filter={success:r,attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(e)},Filter.prototype.generateHeaderFilterElement=function(e,t,r){function i(){}var n,l,o,a,s,d,u,f=this,c=this,h=e.modules.filter.success,p=e.getField();if(e.modules.filter.headerElement&&e.modules.filter.headerElement.parentNode&&e.contentElement.removeChild(e.modules.filter.headerElement.parentNode),p){switch(e.modules.filter.emptyFunc=e.definition.headerFilterEmptyCheck||function(e){return!e&&"0"!==e},n=document.createElement("div"),n.classList.add("tabulator-header-filter"),_typeof(e.definition.headerFilter)){case"string":c.table.modules.edit.editors[e.definition.headerFilter]?(l=c.table.modules.edit.editors[e.definition.headerFilter],"tick"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",e.definition.editor);break;case"function":l=e.definition.headerFilter;break;case"boolean":e.modules.edit&&e.modules.edit.editor?l=e.modules.edit.editor:e.definition.formatter&&c.table.modules.edit.editors[e.definition.formatter]?(l=c.table.modules.edit.editors[e.definition.formatter],"tick"!==e.definition.formatter&&"tickCross"!==e.definition.formatter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):l=c.table.modules.edit.editors.input}if(l){if(a={getValue:function(){return void 0!==t?t:""},getField:function(){return e.definition.field},getElement:function(){return n},getColumn:function(){return e.getComponent()},getRow:function(){return{normalizeHeight:function(){}}}},u=e.definition.headerFilterParams||{},u="function"==typeof u?u.call(c.table):u,!(o=l.call(this.table.modules.edit,a,function(){},h,i,u)))return void console.warn("Filter Error - Cannot add filter to "+p+" column, editor returned a value of false");if(!(o instanceof Node))return void console.warn("Filter Error - Cannot add filter to "+p+" column, editor should return an instance of Node, the editor returned:",o);p?c.table.modules.localize.bind("headerFilters|columns|"+e.definition.field,function(e){o.setAttribute("placeholder",void 0!==e&&e?e:c.table.modules.localize.getText("headerFilters|default"))}):c.table.modules.localize.bind("headerFilters|default",function(e){o.setAttribute("placeholder",void 0!==c.column.definition.headerFilterPlaceholder&&c.column.definition.headerFilterPlaceholder?c.column.definition.headerFilterPlaceholder:e)}),o.addEventListener("click",function(e){e.stopPropagation(),o.focus()}),o.addEventListener("focus",function(e){var t=f.table.columnManager.element.scrollLeft;t!==f.table.rowManager.element.scrollLeft&&(f.table.rowManager.scrollHorizontal(t),f.table.columnManager.scrollHorizontal(t))}),s=!1,d=function(e){s&&clearTimeout(s),s=setTimeout(function(){h(o.value)},c.table.options.headerFilterLiveFilterDelay)},e.modules.filter.headerElement=o,e.modules.filter.attrType=o.hasAttribute("type")?o.getAttribute("type").toLowerCase():"",e.modules.filter.tagType=o.tagName.toLowerCase(),!1!==e.definition.headerFilterLiveFilter&&("autocomplete"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter&&("autocomplete"!==e.definition.editor&&"tickCross"!==e.definition.editor||!0!==e.definition.headerFilter)&&(o.addEventListener("keyup",d),o.addEventListener("search",d),"number"==e.modules.filter.attrType&&o.addEventListener("change",function(e){h(o.value)}),"text"==e.modules.filter.attrType&&"ie"!==this.table.browser&&o.setAttribute("type","search")),"input"!=e.modules.filter.tagType&&"select"!=e.modules.filter.tagType&&"textarea"!=e.modules.filter.tagType||o.addEventListener("mousedown",function(e){e.stopPropagation()})),n.appendChild(o),e.contentElement.appendChild(n),r||c.headerFilterColumns.push(e)}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",e.definition.title)},Filter.prototype.hideHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="none")})},Filter.prototype.showHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="")})},Filter.prototype.setHeaderFilterFocus=function(e){e.modules.filter&&e.modules.filter.headerElement?e.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",e.getField())},Filter.prototype.getHeaderFilterValue=function(e){if(e.modules.filter&&e.modules.filter.headerElement)return e.modules.filter.headerElement.value;console.warn("Column Filter Error - No header filter set on column:",e.getField())},Filter.prototype.setHeaderFilterValue=function(e,t){e&&(e.modules.filter&&e.modules.filter.headerElement?(this.generateHeaderFilterElement(e,t,!0),e.modules.filter.success(t)):console.warn("Column Filter Error - No header filter set on column:",e.getField()))},Filter.prototype.reloadHeaderFilter=function(e){e&&(e.modules.filter&&e.modules.filter.headerElement?this.generateHeaderFilterElement(e,e.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",e.getField()))},Filter.prototype.hasChanged=function(){var e=this.changed;return this.changed=!1,e},Filter.prototype.setFilter=function(e,t,r,i){var n=this;n.filterList=[],Array.isArray(e)||(e=[{field:e,type:t,value:r,params:i}]),n.addFilter(e)},Filter.prototype.addFilter=function(e,t,r,i){var n=this;Array.isArray(e)||(e=[{field:e,type:t,value:r,params:i}]),e.forEach(function(e){(e=n.findFilter(e))&&(n.filterList.push(e),n.changed=!0)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.findFilter=function(e){var t,r=this;if(Array.isArray(e))return this.findSubFilters(e);var i=!1;return"function"==typeof e.field?i=function(t){return e.field(t,e.type||{})}:r.filters[e.type]?(t=r.table.columnManager.getColumnByField(e.field),i=t?function(i){return r.filters[e.type](e.value,t.getFieldValue(i),i,e.params||{})}:function(t){return r.filters[e.type](e.value,t[e.field],t,e.params||{})}):console.warn("Filter Error - No such filter type found, ignoring: ",e.type),e.func=i,!!e.func&&e},Filter.prototype.findSubFilters=function(e){var t=this,r=[];return e.forEach(function(e){(e=t.findFilter(e))&&r.push(e)}),!!r.length&&r},Filter.prototype.getFilters=function(e,t){var r=[];return e&&(r=this.getHeaderFilters()),t&&r.forEach(function(e){"function"==typeof e.type&&(e.type="function")}),r=r.concat(this.filtersToArray(this.filterList,t))},Filter.prototype.filtersToArray=function(e,t){var r=this,i=[];return e.forEach(function(e){var n;Array.isArray(e)?i.push(r.filtersToArray(e,t)):(n={field:e.field,type:e.type,value:e.value},t&&"function"==typeof n.type&&(n.type="function"),i.push(n))}),i},Filter.prototype.getHeaderFilters=function(){var e=[];for(var t in this.headerFilters)e.push({field:t,type:this.headerFilters[t].type,value:this.headerFilters[t].value});return e},Filter.prototype.removeFilter=function(e,t,r){var i=this;Array.isArray(e)||(e=[{field:e,type:t,value:r}]),e.forEach(function(e){var t=-1;t="object"==_typeof(e.field)?i.filterList.findIndex(function(t){return e===t}):i.filterList.findIndex(function(t){return e.field===t.field&&e.type===t.type&&e.value===t.value}),t>-1?(i.filterList.splice(t,1),i.changed=!0):console.warn("Filter Error - No matching filter type found, ignoring: ",e.type)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.clearFilter=function(e){this.filterList=[],e&&this.clearHeaderFilter(),this.changed=!0,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.clearHeaderFilter=function(){var e=this;this.headerFilters={},e.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach(function(t){t.modules.filter.value=null,t.modules.filter.prevSuccess=void 0,e.reloadHeaderFilter(t)}),this.changed=!0},Filter.prototype.search=function(e,t,r,i){var n=this,l=[],o=[];return Array.isArray(t)||(t=[{field:t,type:r,value:i}]),t.forEach(function(e){(e=n.findFilter(e))&&o.push(e)}),this.table.rowManager.rows.forEach(function(t){var r=!0;o.forEach(function(e){n.filterRecurse(e,t.getData())||(r=!1)}),r&&l.push("data"===e?t.getData("data"):t.getComponent())}),l},Filter.prototype.filter=function(e,t){var r=this,i=[],n=[];return r.table.options.dataFiltering&&r.table.options.dataFiltering.call(r.table,r.getFilters()),r.table.options.ajaxFiltering||!r.filterList.length&&!Object.keys(r.headerFilters).length?i=e.slice(0):e.forEach(function(e){r.filterRow(e)&&i.push(e)}),r.table.options.dataFiltered&&(i.forEach(function(e){n.push(e.getComponent())}),r.table.options.dataFiltered.call(r.table,r.getFilters(),n)),i},Filter.prototype.filterRow=function(e,t){var r=this,i=!0,n=e.getData();r.filterList.forEach(function(e){r.filterRecurse(e,n)||(i=!1)});for(var l in r.headerFilters)r.headerFilters[l].func(n)||(i=!1);return i},Filter.prototype.filterRecurse=function(e,t){var r=this,i=!1;return Array.isArray(e)?e.forEach(function(e){r.filterRecurse(e,t)&&(i=!0)}):i=e.func(t),i},Filter.prototype.filters={"=":function(e,t,r,i){return t==e},"<":function(e,t,r,i){return t":function(e,t,r,i){return t>e},">=":function(e,t,r,i){return t>=e},"!=":function(e,t,r,i){return t!=e},regex:function(e,t,r,i){return"string"==typeof e&&(e=new RegExp(e)),e.test(t)},like:function(e,t,r,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().indexOf(e.toLowerCase())>-1},keywords:function(e,t,r,i){var n=e.toLowerCase().split(void 0===i.separator?" ":i.separator),l=String(null===t||void 0===t?"":t).toLowerCase(),o=[];return n.forEach(function(e){l.includes(e)&&o.push(!0)}),i.matchAll?o.length===n.length:!!o.length},starts:function(e,t,r,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().startsWith(e.toLowerCase())},ends:function(e,t,r,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().endsWith(e.toLowerCase())},in:function(e,t,r,i){return Array.isArray(e)?!e.length||e.indexOf(t)>-1:(console.warn("Filter Error - filter value is not an array:",e),!1)}},Tabulator.prototype.registerModule("filter",Filter); \ No newline at end of file +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Filter=function(e){this.table=e,this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1};Filter.prototype.initializeColumn=function(e,t){function r(t){var r,o="input"==e.modules.filter.tagType&&"text"==e.modules.filter.attrType||"textarea"==e.modules.filter.tagType?"partial":"match",a="",s="";if(void 0===e.modules.filter.prevSuccess||e.modules.filter.prevSuccess!==t){if(e.modules.filter.prevSuccess=t,e.modules.filter.emptyFunc(t))delete n.headerFilters[l];else{switch(e.modules.filter.value=t,_typeof(e.definition.headerFilterFunc)){case"string":n.filters[e.definition.headerFilterFunc]?(a=e.definition.headerFilterFunc,r=function(r){var i=e.definition.headerFilterFuncParams||{},l=e.getFieldValue(r);return i="function"==typeof i?i(t,l,r):i,n.filters[e.definition.headerFilterFunc](t,l,r,i)}):console.warn("Header Filter Error - Matching filter function not found: ",e.definition.headerFilterFunc);break;case"function":r=function(r){var i=e.definition.headerFilterFuncParams||{},n=e.getFieldValue(r);return i="function"==typeof i?i(t,n,r):i,e.definition.headerFilterFunc(t,n,r,i)},a=r}if(!r)switch(o){case"partial":r=function(r){var i=e.getFieldValue(r);return void 0!==i&&null!==i&&String(i).toLowerCase().indexOf(String(t).toLowerCase())>-1},a="like";break;default:r=function(r){return e.getFieldValue(r)==t},a="="}n.headerFilters[l]={value:t,func:r,type:a,params:i||{}}}s=JSON.stringify(n.headerFilters),n.prevHeaderFilterChangeCheck!==s&&(n.prevHeaderFilterChangeCheck=s,n.changed=!0,n.table.rowManager.filterRefresh())}return!0}var i,n=this,l=e.getField();e.modules.filter={success:r,attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(e)},Filter.prototype.generateHeaderFilterElement=function(e,t,r){function i(){}var n,l,o,a,s,d,u,f=this,c=this,h=e.modules.filter.success,p=e.getField();if(e.modules.filter.headerElement&&e.modules.filter.headerElement.parentNode&&e.contentElement.removeChild(e.modules.filter.headerElement.parentNode),p){switch(e.modules.filter.emptyFunc=e.definition.headerFilterEmptyCheck||function(e){return!e&&"0"!==e},n=document.createElement("div"),n.classList.add("tabulator-header-filter"),_typeof(e.definition.headerFilter)){case"string":c.table.modules.edit.editors[e.definition.headerFilter]?(l=c.table.modules.edit.editors[e.definition.headerFilter],"tick"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",e.definition.editor);break;case"function":l=e.definition.headerFilter;break;case"boolean":e.modules.edit&&e.modules.edit.editor?l=e.modules.edit.editor:e.definition.formatter&&c.table.modules.edit.editors[e.definition.formatter]?(l=c.table.modules.edit.editors[e.definition.formatter],"tick"!==e.definition.formatter&&"tickCross"!==e.definition.formatter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):l=c.table.modules.edit.editors.input}if(l){if(a={getValue:function(){return void 0!==t?t:""},getField:function(){return e.definition.field},getElement:function(){return n},getColumn:function(){return e.getComponent()},getRow:function(){return{normalizeHeight:function(){}}}},u=e.definition.headerFilterParams||{},u="function"==typeof u?u.call(c.table):u,!(o=l.call(this.table.modules.edit,a,function(){},h,i,u)))return void console.warn("Filter Error - Cannot add filter to "+p+" column, editor returned a value of false");if(!(o instanceof Node))return void console.warn("Filter Error - Cannot add filter to "+p+" column, editor should return an instance of Node, the editor returned:",o);p?c.table.modules.localize.bind("headerFilters|columns|"+e.definition.field,function(e){o.setAttribute("placeholder",void 0!==e&&e?e:c.table.modules.localize.getText("headerFilters|default"))}):c.table.modules.localize.bind("headerFilters|default",function(e){o.setAttribute("placeholder",void 0!==c.column.definition.headerFilterPlaceholder&&c.column.definition.headerFilterPlaceholder?c.column.definition.headerFilterPlaceholder:e)}),o.addEventListener("click",function(e){e.stopPropagation(),o.focus()}),o.addEventListener("focus",function(e){var t=f.table.columnManager.element.scrollLeft;t!==f.table.rowManager.element.scrollLeft&&(f.table.rowManager.scrollHorizontal(t),f.table.columnManager.scrollHorizontal(t))}),s=!1,d=function(e){s&&clearTimeout(s),s=setTimeout(function(){h(o.value)},c.table.options.headerFilterLiveFilterDelay)},e.modules.filter.headerElement=o,e.modules.filter.attrType=o.hasAttribute("type")?o.getAttribute("type").toLowerCase():"",e.modules.filter.tagType=o.tagName.toLowerCase(),!1!==e.definition.headerFilterLiveFilter&&("autocomplete"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter&&("autocomplete"!==e.definition.editor&&"tickCross"!==e.definition.editor||!0!==e.definition.headerFilter)&&(o.addEventListener("keyup",d),o.addEventListener("search",d),"number"==e.modules.filter.attrType&&o.addEventListener("change",function(e){h(o.value)}),"text"==e.modules.filter.attrType&&"ie"!==this.table.browser&&o.setAttribute("type","search")),"input"!=e.modules.filter.tagType&&"select"!=e.modules.filter.tagType&&"textarea"!=e.modules.filter.tagType||o.addEventListener("mousedown",function(e){e.stopPropagation()})),n.appendChild(o),e.contentElement.appendChild(n),r||c.headerFilterColumns.push(e)}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",e.definition.title)},Filter.prototype.hideHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="none")})},Filter.prototype.showHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="")})},Filter.prototype.setHeaderFilterFocus=function(e){e.modules.filter&&e.modules.filter.headerElement?e.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",e.getField())},Filter.prototype.getHeaderFilterValue=function(e){if(e.modules.filter&&e.modules.filter.headerElement)return e.modules.filter.headerElement.value;console.warn("Column Filter Error - No header filter set on column:",e.getField())},Filter.prototype.setHeaderFilterValue=function(e,t){e&&(e.modules.filter&&e.modules.filter.headerElement?(this.generateHeaderFilterElement(e,t,!0),e.modules.filter.success(t)):console.warn("Column Filter Error - No header filter set on column:",e.getField()))},Filter.prototype.reloadHeaderFilter=function(e){e&&(e.modules.filter&&e.modules.filter.headerElement?this.generateHeaderFilterElement(e,e.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",e.getField()))},Filter.prototype.hasChanged=function(){var e=this.changed;return this.changed=!1,e},Filter.prototype.setFilter=function(e,t,r,i){var n=this;n.filterList=[],Array.isArray(e)||(e=[{field:e,type:t,value:r,params:i}]),n.addFilter(e)},Filter.prototype.addFilter=function(e,t,r,i){var n=this;Array.isArray(e)||(e=[{field:e,type:t,value:r,params:i}]),e.forEach(function(e){(e=n.findFilter(e))&&(n.filterList.push(e),n.changed=!0)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.findFilter=function(e){var t,r=this;if(Array.isArray(e))return this.findSubFilters(e);var i=!1;return"function"==typeof e.field?i=function(t){return e.field(t,e.type||{})}:r.filters[e.type]?(t=r.table.columnManager.getColumnByField(e.field),i=t?function(i){return r.filters[e.type](e.value,t.getFieldValue(i),i,e.params||{})}:function(t){return r.filters[e.type](e.value,t[e.field],t,e.params||{})}):console.warn("Filter Error - No such filter type found, ignoring: ",e.type),e.func=i,!!e.func&&e},Filter.prototype.findSubFilters=function(e){var t=this,r=[];return e.forEach(function(e){(e=t.findFilter(e))&&r.push(e)}),!!r.length&&r},Filter.prototype.getFilters=function(e,t){var r=[];return e&&(r=this.getHeaderFilters()),t&&r.forEach(function(e){"function"==typeof e.type&&(e.type="function")}),r=r.concat(this.filtersToArray(this.filterList,t))},Filter.prototype.filtersToArray=function(e,t){var r=this,i=[];return e.forEach(function(e){var n;Array.isArray(e)?i.push(r.filtersToArray(e,t)):(n={field:e.field,type:e.type,value:e.value},t&&"function"==typeof n.type&&(n.type="function"),i.push(n))}),i},Filter.prototype.getHeaderFilters=function(){var e=[];for(var t in this.headerFilters)e.push({field:t,type:this.headerFilters[t].type,value:this.headerFilters[t].value});return e},Filter.prototype.removeFilter=function(e,t,r){var i=this;Array.isArray(e)||(e=[{field:e,type:t,value:r}]),e.forEach(function(e){var t=-1;t="object"==_typeof(e.field)?i.filterList.findIndex(function(t){return e===t}):i.filterList.findIndex(function(t){return e.field===t.field&&e.type===t.type&&e.value===t.value}),t>-1?(i.filterList.splice(t,1),i.changed=!0):console.warn("Filter Error - No matching filter type found, ignoring: ",e.type)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.clearFilter=function(e){this.filterList=[],e&&this.clearHeaderFilter(),this.changed=!0,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.clearHeaderFilter=function(){var e=this;this.headerFilters={},e.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach(function(t){t.modules.filter.value=null,t.modules.filter.prevSuccess=void 0,e.reloadHeaderFilter(t)}),this.changed=!0},Filter.prototype.search=function(e,t,r,i){var n=this,l=[],o=[];return Array.isArray(t)||(t=[{field:t,type:r,value:i}]),t.forEach(function(e){(e=n.findFilter(e))&&o.push(e)}),this.table.rowManager.rows.forEach(function(t){var r=!0;o.forEach(function(e){n.filterRecurse(e,t.getData())||(r=!1)}),r&&l.push("data"===e?t.getData("data"):t.getComponent())}),l},Filter.prototype.filter=function(e,t){var r=this,i=[],n=[];return r.table.options.dataFiltering&&r.table.options.dataFiltering.call(r.table,r.getFilters()),r.table.options.ajaxFiltering||!r.filterList.length&&!Object.keys(r.headerFilters).length?i=e.slice(0):e.forEach(function(e){r.filterRow(e)&&i.push(e)}),r.table.options.dataFiltered&&(i.forEach(function(e){n.push(e.getComponent())}),r.table.options.dataFiltered.call(r.table,r.getFilters(),n)),i},Filter.prototype.filterRow=function(e,t){var r=this,i=!0,n=e.getData();r.filterList.forEach(function(e){r.filterRecurse(e,n)||(i=!1)});for(var l in r.headerFilters)r.headerFilters[l].func(n)||(i=!1);return i},Filter.prototype.filterRecurse=function(e,t){var r=this,i=!1;return Array.isArray(e)?e.forEach(function(e){r.filterRecurse(e,t)&&(i=!0)}):i=e.func(t),i},Filter.prototype.filters={"=":function(e,t,r,i){return t==e},"<":function(e,t,r,i){return t":function(e,t,r,i){return t>e},">=":function(e,t,r,i){return t>=e},"!=":function(e,t,r,i){return t!=e},regex:function(e,t,r,i){return"string"==typeof e&&(e=new RegExp(e)),e.test(t)},like:function(e,t,r,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().indexOf(e.toLowerCase())>-1},keywords:function(e,t,r,i){var n=e.toLowerCase().split(void 0===i.separator?" ":i.separator),l=String(null===t||void 0===t?"":t).toLowerCase(),o=[];return n.forEach(function(e){l.includes(e)&&o.push(!0)}),i.matchAll?o.length===n.length:!!o.length},starts:function(e,t,r,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().startsWith(e.toLowerCase())},ends:function(e,t,r,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().endsWith(e.toLowerCase())},in:function(e,t,r,i){return Array.isArray(e)?e.indexOf(t)>-1:(console.warn("Filter Error - filter value is not an array:",e),!1)}},Tabulator.prototype.registerModule("filter",Filter); \ No newline at end of file diff --git a/website/js/vendor/tabulator/js/modules/format.js b/admin/js/vendors/tabulator/js/modules/format.js similarity index 97% rename from website/js/vendor/tabulator/js/modules/format.js rename to admin/js/vendors/tabulator/js/modules/format.js index 8c77ec2..5714027 100644 --- a/website/js/vendor/tabulator/js/modules/format.js +++ b/admin/js/vendors/tabulator/js/modules/format.js @@ -1,6 +1,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var Format = function Format(table) { this.table = table; //hold Tabulator object @@ -62,9 +62,8 @@ Format.prototype.lookupFormatter = function (column, type) { }; Format.prototype.cellRendered = function (cell) { - if (cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered) { + if (cell.modules.format && cell.modules.format.renderedCallback) { cell.modules.format.renderedCallback(); - cell.modules.format.rendered = true; } }; @@ -79,7 +78,6 @@ Format.prototype.formatValue = function (cell) { } cell.modules.format.renderedCallback = callback; - cell.modules.format.rendered = false; } return cell.column.modules.format.formatter.call(this, component, params, onRendered); @@ -96,7 +94,6 @@ Format.prototype.formatExportValue = function (cell, type) { } cell.modules.format.renderedCallback = callback; - cell.modules.format.rendered = false; }; params = typeof formatter.params === "function" ? formatter.params(component) : formatter.params; @@ -687,7 +684,7 @@ Format.prototype.formatters = { return el; }, - rowSelection: function rowSelection(cell, formatterParams, onRendered) { + rowSelection: function rowSelection(cell) { var _this = this; var checkbox = document.createElement("input"); @@ -703,23 +700,18 @@ Format.prototype.formatters = { if (typeof cell.getRow == 'function') { var row = cell.getRow(); - if (row instanceof RowComponent) { - - checkbox.addEventListener("change", function (e) { - row.toggleSelect(); - }); + checkbox.addEventListener("change", function (e) { + row.toggleSelect(); + }); - checkbox.checked = row.isSelected && row.isSelected(); - this.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox); - } else { - checkbox = ""; - } + checkbox.checked = row.isSelected(); + this.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox); } else { checkbox.addEventListener("change", function (e) { if (_this.table.modules.selectRow.selectedRows.length) { _this.table.deselectRow(); } else { - _this.table.selectRow(formatterParams.rowRange); + _this.table.selectRow(); } }); diff --git a/admin/js/vendors/tabulator/js/modules/format.min.js b/admin/js/vendors/tabulator/js/modules/format.min.js new file mode 100644 index 0000000..0b39b61 --- /dev/null +++ b/admin/js/vendors/tabulator/js/modules/format.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Format=function(e){this.table=e};Format.prototype.initializeColumn=function(e){e.modules.format=this.lookupFormatter(e,""),void 0!==e.definition.formatterPrint&&(e.modules.format.print=this.lookupFormatter(e,"Print")),void 0!==e.definition.formatterClipboard&&(e.modules.format.clipboard=this.lookupFormatter(e,"Clipboard")),void 0!==e.definition.formatterHtmlOutput&&(e.modules.format.htmlOutput=this.lookupFormatter(e,"HtmlOutput"))},Format.prototype.lookupFormatter=function(e,t){var o={params:e.definition["formatter"+t+"Params"]||{}},r=e.definition["formatter"+t];switch(void 0===r?"undefined":_typeof(r)){case"string":"tick"===r&&(r="tickCross",void 0===o.params.crossElement&&(o.params.crossElement=!1),console.warn("DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false")),this.formatters[r]?o.formatter=this.formatters[r]:(console.warn("Formatter Error - No such formatter found: ",r),o.formatter=this.formatters.plaintext);break;case"function":o.formatter=r;break;default:o.formatter=this.formatters.plaintext}return o},Format.prototype.cellRendered=function(e){e.modules.format&&e.modules.format.renderedCallback&&e.modules.format.renderedCallback()},Format.prototype.formatValue=function(e){function t(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t}var o=e.getComponent(),r="function"==typeof e.column.modules.format.params?e.column.modules.format.params(o):e.column.modules.format.params;return e.column.modules.format.formatter.call(this,o,r,t)},Format.prototype.formatExportValue=function(e,t){var o,r=e.column.modules.format[t];if(r){var a=function(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t};return o="function"==typeof r.params?r.params(component):r.params,r.formatter.call(this,e.getComponent(),o,a)}return this.formatValue(e)},Format.prototype.sanitizeHTML=function(e){if(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};return String(e).replace(/[&<>"'`=\/]/g,function(e){return t[e]})}return e},Format.prototype.emptyToSpace=function(e){return null===e||void 0===e||""===e?" ":e},Format.prototype.getFormatter=function(e){var e;switch(void 0===e?"undefined":_typeof(e)){case"string":this.formatters[e]?e=this.formatters[e]:(console.warn("Formatter Error - No such formatter found: ",e),e=this.formatters.plaintext);break;case"function":e=e;break;default:e=this.formatters.plaintext}return e},Format.prototype.formatters={plaintext:function(e,t,o){return this.emptyToSpace(this.sanitizeHTML(e.getValue()))},html:function(e,t,o){return e.getValue()},textarea:function(e,t,o){return e.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(e.getValue()))},money:function(e,t,o){var r,a,n,l,i=parseFloat(e.getValue()),s=t.decimal||".",c=t.thousand||",",u=t.symbol||"",d=!!t.symbolAfter,m=void 0!==t.precision?t.precision:2;if(isNaN(i))return this.emptyToSpace(this.sanitizeHTML(e.getValue()));for(r=!1!==m?i.toFixed(m):i,r=String(r).split("."),a=r[0],n=r.length>1?s+r[1]:"",l=/(\d+)(\d{3})/;l.test(a);)a=a.replace(l,"$1"+c+"$2");return d?a+n+u:u+a+n},link:function(e,t,o){var r,a=e.getValue(),n=t.urlPrefix||"",l=t.download,i=a,s=document.createElement("a");if(t.labelField&&(r=e.getData(),i=r[t.labelField]),t.label)switch(_typeof(t.label)){case"string":i=t.label;break;case"function":i=t.label(e)}if(i){if(t.urlField&&(r=e.getData(),a=r[t.urlField]),t.url)switch(_typeof(t.url)){case"string":a=t.url;break;case"function":a=t.url(e)}return s.setAttribute("href",n+a),t.target&&s.setAttribute("target",t.target),t.download&&(l="function"==typeof l?l(e):!0===l?"":l,s.setAttribute("download",l)),s.innerHTML=this.emptyToSpace(this.sanitizeHTML(i)),s}return" "},image:function(e,t,o){var r=document.createElement("img");switch(r.setAttribute("src",e.getValue()),_typeof(t.height)){case"number":r.style.height=t.height+"px";break;case"string":r.style.height=t.height}switch(_typeof(t.width)){case"number":r.style.width=t.width+"px";break;case"string":r.style.width=t.width}return r.addEventListener("load",function(){e.getRow().normalizeHeight()}),r},tickCross:function(e,t,o){var r=e.getValue(),a=e.getElement(),n=t.allowEmpty,l=t.allowTruthy,i=void 0!==t.tickElement?t.tickElement:'',s=void 0!==t.crossElement?t.crossElement:'';return l&&r||!0===r||"true"===r||"True"===r||1===r||"1"===r?(a.setAttribute("aria-checked",!0),i||""):!n||"null"!==r&&""!==r&&null!==r&&void 0!==r?(a.setAttribute("aria-checked",!1),s||""):(a.setAttribute("aria-checked","mixed"),"")},datetime:function(e,t,o){var r=t.inputFormat||"YYYY-MM-DD hh:mm:ss",a=t.outputFormat||"DD/MM/YYYY hh:mm:ss",n=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",l=e.getValue(),i=moment(l,r);return i.isValid()?t.timezone?i.tz(t.timezone).format(a):i.format(a):!0===n?l:"function"==typeof n?n(l):n},datetimediff:function(e,t,o){var r=t.inputFormat||"YYYY-MM-DD hh:mm:ss",a=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",n=void 0!==t.suffix&&t.suffix,l=void 0!==t.unit?t.unit:void 0,i=void 0!==t.humanize&&t.humanize,s=void 0!==t.date?t.date:moment(),c=e.getValue(),u=moment(c,r);return u.isValid()?i?moment.duration(u.diff(s)).humanize(n):u.diff(s,l)+(n?" "+n:""):!0===a?c:"function"==typeof a?a(c):a},lookup:function(e,t,o){var r=e.getValue();return void 0===t[r]?(console.warn("Missing display value for "+r),r):t[r]},star:function(e,t,o){var r=e.getValue(),a=e.getElement(),n=t&&t.stars?t.stars:5,l=document.createElement("span"),i=document.createElementNS("http://www.w3.org/2000/svg","svg");l.style.verticalAlign="middle",i.setAttribute("width","14"),i.setAttribute("height","14"),i.setAttribute("viewBox","0 0 512 512"),i.setAttribute("xml:space","preserve"),i.style.padding="0 1px",r=r&&!isNaN(r)?parseInt(r):0,r=Math.max(0,Math.min(r,n));for(var s=1;s<=n;s++){var c=i.cloneNode(!0);c.innerHTML=s<=r?'':'',l.appendChild(c)}return a.style.whiteSpace="nowrap",a.style.overflow="hidden",a.style.textOverflow="ellipsis",a.setAttribute("aria-label",r),l},traffic:function(e,t,o){var r,a,n=this.sanitizeHTML(e.getValue())||0,l=document.createElement("span"),i=t&&t.max?t.max:100,s=t&&t.min?t.min:0,c=t&&void 0!==t.color?t.color:["red","orange","green"],u="#666666";if(!isNaN(n)&&void 0!==e.getValue()){switch(l.classList.add("tabulator-traffic-light"),a=parseFloat(n)<=i?parseFloat(n):i,a=parseFloat(a)>=s?parseFloat(a):s,r=(i-s)/100,a=Math.round((a-s)/r),void 0===c?"undefined":_typeof(c)){case"string":u=c;break;case"function":u=c(n);break;case"object":if(Array.isArray(c)){var d=100/c.length,m=Math.floor(a/d);m=Math.min(m,c.length-1),m=Math.max(m,0),u=c[m];break}}return l.style.backgroundColor=u,l}},progress:function(e,t,o){var r,a,n,l,i,s=this.sanitizeHTML(e.getValue())||0,c=e.getElement(),u=t&&t.max?t.max:100,d=t&&t.min?t.min:0,m=t&&t.legendAlign?t.legendAlign:"center";switch(a=parseFloat(s)<=u?parseFloat(s):u,a=parseFloat(a)>=d?parseFloat(a):d,r=(u-d)/100,a=Math.round((a-d)/r),_typeof(t.color)){case"string":n=t.color;break;case"function":n=t.color(s);break;case"object":if(Array.isArray(t.color)){var p=100/t.color.length,f=Math.floor(a/p);f=Math.min(f,t.color.length-1),f=Math.max(f,0),n=t.color[f];break}default:n="#2DC214"}switch(_typeof(t.legend)){case"string":l=t.legend;break;case"function":l=t.legend(s);break;case"boolean":l=s;break;default:l=!1}switch(_typeof(t.legendColor)){case"string":i=t.legendColor;break;case"function":i=t.legendColor(s);break;case"object":if(Array.isArray(t.legendColor)){var p=100/t.legendColor.length,f=Math.floor(a/p);f=Math.min(f,t.legendColor.length-1),f=Math.max(f,0),i=t.legendColor[f]}break;default:i="#000"}c.style.minWidth="30px",c.style.position="relative",c.setAttribute("aria-label",a);var h=document.createElement("div");if(h.style.display="inline-block",h.style.position="relative",h.style.width=a+"%",h.style.backgroundColor=n,h.style.height="100%",h.setAttribute("data-max",u),h.setAttribute("data-min",d),l){var g=document.createElement("div");g.style.position="absolute",g.style.top="4px",g.style.left=0,g.style.textAlign=m,g.style.width="100%",g.style.color=i,g.innerHTML=l}return o(function(){if(!(e instanceof CellComponent)){var t=document.createElement("div");t.style.position="absolute",t.style.top="4px",t.style.bottom="4px",t.style.left="4px",t.style.right="4px",c.appendChild(t),c=t}c.appendChild(h),l&&c.appendChild(g)}),""},color:function(e,t,o){return e.getElement().style.backgroundColor=this.sanitizeHTML(e.getValue()),""},buttonTick:function(e,t,o){return''},buttonCross:function(e,t,o){return''},rownum:function(e,t,o){return this.table.rowManager.activeRows.indexOf(e.getRow()._getSelf())+1},handle:function(e,t,o){return e.getElement().classList.add("tabulator-row-handle"),"
"},responsiveCollapse:function(e,t,o){function r(e){var t=n.element;n.open=e,t&&(n.open?(a.classList.add("open"),t.style.display=""):(a.classList.remove("open"),t.style.display="none"))}var a=document.createElement("div"),n=e.getRow()._row.modules.responsiveLayout;return a.classList.add("tabulator-responsive-collapse-toggle"),a.innerHTML="+-",e.getElement().classList.add("tabulator-row-handle"),a.addEventListener("click",function(e){e.stopImmediatePropagation(),r(!n.open)}),r(n.open),a},rowSelection:function(e){var t=this,o=document.createElement("input");if(o.type="checkbox",this.table.modExists("selectRow",!0))if(o.addEventListener("click",function(e){e.stopPropagation()}),"function"==typeof e.getRow){var r=e.getRow();o.addEventListener("change",function(e){r.toggleSelect()}),o.checked=r.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(r,o)}else o.addEventListener("change",function(e){t.table.modules.selectRow.selectedRows.length?t.table.deselectRow():t.table.selectRow()}),this.table.modules.selectRow.registerHeaderSelectCheckbox(o);return o}},Tabulator.prototype.registerModule("format",Format); \ No newline at end of file diff --git a/website/js/vendor/tabulator/js/modules/frozen_columns.js b/admin/js/vendors/tabulator/js/modules/frozen_columns.js similarity index 99% rename from website/js/vendor/tabulator/js/modules/frozen_columns.js rename to admin/js/vendors/tabulator/js/modules/frozen_columns.js index 1edd4f7..fdbc4ab 100644 --- a/website/js/vendor/tabulator/js/modules/frozen_columns.js +++ b/admin/js/vendors/tabulator/js/modules/frozen_columns.js @@ -1,4 +1,4 @@ -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var FrozenColumns = function FrozenColumns(table) { this.table = table; //hold Tabulator object diff --git a/website/js/vendor/tabulator/js/modules/frozen_columns.min.js b/admin/js/vendors/tabulator/js/modules/frozen_columns.min.js similarity index 98% rename from website/js/vendor/tabulator/js/modules/frozen_columns.min.js rename to admin/js/vendors/tabulator/js/modules/frozen_columns.min.js index 7813e4e..bf2bb60 100644 --- a/website/js/vendor/tabulator/js/modules/frozen_columns.min.js +++ b/admin/js/vendors/tabulator/js/modules/frozen_columns.min.js @@ -1,2 +1,2 @@ -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var FrozenColumns=function(t){this.table=t,this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightPadding=0,this.initializationMode="left",this.active=!1,this.scrollEndTimer=!1};FrozenColumns.prototype.reset=function(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightMargin=0,this.active=!1,this.table.columnManager.headersElement.style.marginLeft=0,this.table.columnManager.element.style.paddingRight=0},FrozenColumns.prototype.initializeColumn=function(t){var e={margin:0,edge:!1};t.isGroup||(this.frozenCheck(t)?(e.position=this.initializationMode,"left"==this.initializationMode?this.leftColumns.push(t):this.rightColumns.unshift(t),this.active=!0,t.modules.frozen=e):this.initializationMode="right")},FrozenColumns.prototype.frozenCheck=function(t){return t.parent.isGroup&&t.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),t.parent.isGroup?this.frozenCheck(t.parent):t.definition.frozen},FrozenColumns.prototype.scrollHorizontal=function(){var t,e=this;this.active&&(clearTimeout(this.scrollEndTimer),this.scrollEndTimer=setTimeout(function(){e.layout()},100),t=this.table.rowManager.getVisibleRows(),this.calcMargins(),this.layoutColumnPosition(),this.layoutCalcRows(),t.forEach(function(t){"row"===t.type&&e.layoutRow(t)}),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},FrozenColumns.prototype.calcMargins=function(){this.leftMargin=this._calcSpace(this.leftColumns,this.leftColumns.length)+"px",this.table.columnManager.headersElement.style.marginLeft=this.leftMargin,this.rightMargin=this._calcSpace(this.rightColumns,this.rightColumns.length)+"px",this.table.columnManager.element.style.paddingRight=this.rightMargin,this.rightPadding=this.table.rowManager.element.clientWidth+this.table.columnManager.scrollLeft},FrozenColumns.prototype.layoutCalcRows=function(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow))},FrozenColumns.prototype.layoutColumnPosition=function(t){var e=this,o=[];this.leftColumns.forEach(function(n,l){if(n.modules.frozen.margin=e._calcSpace(e.leftColumns,l)+e.table.columnManager.scrollLeft+"px",l==e.leftColumns.length-1?n.modules.frozen.edge=!0:n.modules.frozen.edge=!1,n.parent.isGroup){var i=e.getColGroupParentElement(n);o.includes(i)||(e.layoutElement(i,n),o.push(i)),n.modules.frozen.edge&&i.classList.add("tabulator-frozen-"+n.modules.frozen.position)}else e.layoutElement(n.getElement(),n);t&&n.cells.forEach(function(t){e.layoutElement(t.getElement(),n)})}),this.rightColumns.forEach(function(o,n){o.modules.frozen.margin=e.rightPadding-e._calcSpace(e.rightColumns,n+1)+"px",n==e.rightColumns.length-1?o.modules.frozen.edge=!0:o.modules.frozen.edge=!1,o.parent.isGroup?e.layoutElement(e.getColGroupParentElement(o),o):e.layoutElement(o.getElement(),o),t&&o.cells.forEach(function(t){e.layoutElement(t.getElement(),o)})})},FrozenColumns.prototype.getColGroupParentElement=function(t){return t.parent.isGroup?this.getColGroupParentElement(t.parent):t.getElement()},FrozenColumns.prototype.layout=function(){var t=this;t.active&&(this.calcMargins(),t.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&t.layoutRow(e)}),this.layoutCalcRows(),this.layoutColumnPosition(!0),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},FrozenColumns.prototype.layoutRow=function(t){var e=this;t.getElement().style.paddingLeft=this.leftMargin,this.leftColumns.forEach(function(o){var n=t.getCell(o);n&&e.layoutElement(n.getElement(),o)}),this.rightColumns.forEach(function(o){var n=t.getCell(o);n&&e.layoutElement(n.getElement(),o)})},FrozenColumns.prototype.layoutElement=function(t,e){e.modules.frozen&&(t.style.position="absolute",t.style.left=e.modules.frozen.margin,t.classList.add("tabulator-frozen"),e.modules.frozen.edge&&t.classList.add("tabulator-frozen-"+e.modules.frozen.position))},FrozenColumns.prototype._calcSpace=function(t,e){for(var o=0,n=0;n -1) { - var rowEl = row.getElement(); - rowEl.parentNode.removeChild(rowEl); - - this.rows.splice(index, 1); - } -}; - FrozenRows.prototype.styleRows = function (row) { var self = this; diff --git a/website/js/vendor/tabulator/js/modules/frozen_rows.min.js b/admin/js/vendors/tabulator/js/modules/frozen_rows.min.js similarity index 62% rename from website/js/vendor/tabulator/js/modules/frozen_rows.min.js rename to admin/js/vendors/tabulator/js/modules/frozen_rows.min.js index 13ee75d..c38e992 100644 --- a/website/js/vendor/tabulator/js/modules/frozen_rows.min.js +++ b/admin/js/vendors/tabulator/js/modules/frozen_rows.min.js @@ -1,2 +1,2 @@ -/* Tabulator v4.8.3 (c) Oliver Folkerd */ -var FrozenRows=function(e){this.table=e,this.topElement=document.createElement("div"),this.rows=[],this.displayIndex=0};FrozenRows.prototype.initialize=function(){this.rows=[],this.topElement.classList.add("tabulator-frozen-rows-holder"),this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling)},FrozenRows.prototype.setDisplayIndex=function(e){this.displayIndex=e},FrozenRows.prototype.getDisplayIndex=function(){return this.displayIndex},FrozenRows.prototype.isFrozen=function(){return!!this.rows.length},FrozenRows.prototype.getRows=function(e){var o=e.slice(0);return this.rows.forEach(function(e){var t=o.indexOf(e);t>-1&&o.splice(t,1)}),o},FrozenRows.prototype.freezeRow=function(e){e.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(e.modules.frozen=!0,this.topElement.appendChild(e.getElement()),e.initialize(),e.normalizeHeight(),this.table.rowManager.adjustTableSize(),this.rows.push(e),this.table.rowManager.refreshActiveData("display"),this.styleRows())},FrozenRows.prototype.unfreezeRow=function(e){this.rows.indexOf(e);e.modules.frozen?(e.modules.frozen=!1,this.detachRow(e),this.table.rowManager.adjustTableSize(),this.table.rowManager.refreshActiveData("display"),this.rows.length&&this.styleRows()):console.warn("Freeze Error - Row is already unfrozen")},FrozenRows.prototype.detachRow=function(e){var o=this.rows.indexOf(e);if(o>-1){var t=e.getElement();t.parentNode.removeChild(t),this.rows.splice(o,1)}},FrozenRows.prototype.styleRows=function(e){var o=this;this.rows.forEach(function(e,t){o.table.rowManager.styleRow(e,t)})},Tabulator.prototype.registerModule("frozenRows",FrozenRows); \ No newline at end of file +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var FrozenRows=function(e){this.table=e,this.topElement=document.createElement("div"),this.rows=[],this.displayIndex=0};FrozenRows.prototype.initialize=function(){this.rows=[],this.topElement.classList.add("tabulator-frozen-rows-holder"),this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling)},FrozenRows.prototype.setDisplayIndex=function(e){this.displayIndex=e},FrozenRows.prototype.getDisplayIndex=function(){return this.displayIndex},FrozenRows.prototype.isFrozen=function(){return!!this.rows.length},FrozenRows.prototype.getRows=function(e){var o=e.slice(0);return this.rows.forEach(function(e){var t=o.indexOf(e);t>-1&&o.splice(t,1)}),o},FrozenRows.prototype.freezeRow=function(e){e.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(e.modules.frozen=!0,this.topElement.appendChild(e.getElement()),e.initialize(),e.normalizeHeight(),this.table.rowManager.adjustTableSize(),this.rows.push(e),this.table.rowManager.refreshActiveData("display"),this.styleRows())},FrozenRows.prototype.unfreezeRow=function(e){var o=this.rows.indexOf(e);if(e.modules.frozen){e.modules.frozen=!1;var t=e.getElement();t.parentNode.removeChild(t),this.table.rowManager.adjustTableSize(),this.rows.splice(o,1),this.table.rowManager.refreshActiveData("display"),this.rows.length&&this.styleRows()}else console.warn("Freeze Error - Row is already unfrozen")},FrozenRows.prototype.styleRows=function(e){var o=this;this.rows.forEach(function(e,t){o.table.rowManager.styleRow(e,t)})},Tabulator.prototype.registerModule("frozenRows",FrozenRows); \ No newline at end of file diff --git a/website/js/vendor/tabulator/js/modules/group_rows.js b/admin/js/vendors/tabulator/js/modules/group_rows.js similarity index 94% rename from website/js/vendor/tabulator/js/modules/group_rows.js rename to admin/js/vendors/tabulator/js/modules/group_rows.js index 2e28c2d..05731ec 100644 --- a/website/js/vendor/tabulator/js/modules/group_rows.js +++ b/admin/js/vendors/tabulator/js/modules/group_rows.js @@ -1,4 +1,4 @@ -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ //public group object var GroupComponent = function GroupComponent(group) { @@ -166,7 +166,7 @@ Group.prototype.addBindings = function () { }); } - if ((self.groupManager.table.options.groupContextMenu || self.groupManager.table.options.groupClickMenu) && self.groupManager.table.modExists("menu")) { + if (self.groupManager.table.options.groupContextMenu && self.groupManager.table.modExists("menu")) { self.groupManager.table.modules.menu.initializeGroup.call(self.groupManager.table.modules.menu, self); } @@ -645,15 +645,6 @@ Group.prototype.generateGroupHeaderContents = function () { this.element.insertBefore(this.arrowElement, this.element.firstChild); }; -Group.prototype.getPath = function () { - var path = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - - path.unshift(this.key); - if (this.parent) { - this.parent.getPath(path); - } - return path; -}; ////////////// Standard Row Functions ////////////// Group.prototype.getElement = function () { @@ -1046,32 +1037,6 @@ GroupRows.prototype.assignRowToGroup = function (row, oldGroups) { return !newGroupNeeded; }; -GroupRows.prototype.reassignRowToGroup = function (row) { - var oldRowGroup = row.getGroup(), - oldGroupPath = oldRowGroup.getPath(), - newGroupPath = this.getExpectedPath(row), - samePath = true; - // figure out if new group path is the same as old group path - var samePath = oldGroupPath.length == newGroupPath.length && oldGroupPath.every(function (element, index) { - return element === newGroupPath[index]; - }); - // refresh if they new path and old path aren't the same (aka the row's groupings have changed) - if (!samePath) { - oldRowGroup.removeRow(row); - this.assignRowToGroup(row, self.groups); - this.table.rowManager.refreshActiveData("group", false, true); - } -}; - -GroupRows.prototype.getExpectedPath = function (row) { - var groupPath = [], - rowData = row.getData(); - this.groupIDLookups.forEach(function (groupId) { - groupPath.push(groupId.func(rowData)); - }); - return groupPath; -}; - GroupRows.prototype.updateGroupRows = function (force) { var self = this, output = [], @@ -1097,10 +1062,6 @@ GroupRows.prototype.updateGroupRows = function (force) { }; GroupRows.prototype.scrollHeaders = function (left) { - if (this.table.options.virtualDomHoz) { - left -= this.table.vdomHoz.vDomPadLeft; - } - left = left + "px"; this.groupList.forEach(function (group) { diff --git a/admin/js/vendors/tabulator/js/modules/group_rows.min.js b/admin/js/vendors/tabulator/js/modules/group_rows.min.js new file mode 100644 index 0000000..6039f2c --- /dev/null +++ b/admin/js/vendors/tabulator/js/modules/group_rows.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var GroupComponent=function(t){this._group=t,this.type="GroupComponent"};GroupComponent.prototype.getKey=function(){return this._group.key},GroupComponent.prototype.getField=function(){return this._group.field},GroupComponent.prototype.getElement=function(){return this._group.element},GroupComponent.prototype.getRows=function(){return this._group.getRows(!0)},GroupComponent.prototype.getSubGroups=function(){return this._group.getSubGroups(!0)},GroupComponent.prototype.getParentGroup=function(){return!!this._group.parent&&this._group.parent.getComponent()},GroupComponent.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._group.visible},GroupComponent.prototype.isVisible=function(){return this._group.visible},GroupComponent.prototype.show=function(){this._group.show()},GroupComponent.prototype.hide=function(){this._group.hide()},GroupComponent.prototype.toggle=function(){this._group.toggleVisibility()},GroupComponent.prototype._getSelf=function(){return this._group},GroupComponent.prototype.getTable=function(){return this._group.groupManager.table};var Group=function(t,o,e,r,i,s,n){this.groupManager=t,this.parent=o,this.key=r,this.level=e,this.field=i,this.hasSubGroups=e-1?e?this.rows.splice(i+1,0,t):this.rows.splice(i,0,t):e?this.rows.push(t):this.rows.unshift(t),t.modules.group=this,this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)},Group.prototype.scrollHeader=function(t){this.arrowElement.style.marginLeft=t,this.groupList.forEach(function(o){o.scrollHeader(t)})},Group.prototype.getRowIndex=function(t){},Group.prototype.conformRowData=function(t){return this.field?t[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(t=this.parent.conformRowData(t)),t},Group.prototype.removeRow=function(t){var o=this.rows.indexOf(t),e=t.getElement();o>-1&&this.rows.splice(o,1),this.groupManager.table.options.groupValues||this.rows.length?(e.parentNode&&e.parentNode.removeChild(e),this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)):(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0))},Group.prototype.removeGroup=function(t){var o,e=t.level+"_"+t.key;this.groups[e]&&(delete this.groups[e],o=this.groupList.indexOf(t),o>-1&&this.groupList.splice(o,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))},Group.prototype.getHeadersAndRows=function(t){var o=[];return o.push(this),this._visSet(),this.visible?this.groupList.length?this.groupList.forEach(function(e){o=o.concat(e.getHeadersAndRows(t))}):(!t&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),o.push(this.calcs.top)),o=o.concat(this.rows),!t&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),o.push(this.calcs.bottom))):this.groupList.length||"table"==this.groupManager.table.options.columnCalcs||this.groupManager.table.modExists("columnCalcs")&&(!t&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),o.push(this.calcs.top))),!t&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),o.push(this.calcs.bottom)))),o},Group.prototype.getData=function(t,o){var e=[];return this._visSet(),(!t||t&&this.visible)&&this.rows.forEach(function(t){e.push(t.getData(o||"data"))}),e},Group.prototype.getRowCount=function(){var t=0;return this.groupList.length?this.groupList.forEach(function(o){t+=o.getRowCount()}):t=this.rows.length,t},Group.prototype.toggleVisibility=function(){this.visible?this.hide():this.show()},Group.prototype.hide=function(){this.visible=!1,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination?this.groupManager.updateGroupRows(!0):(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach(function(t){t.getHeadersAndRows().forEach(function(t){t.detachElement()})}):this.rows.forEach(function(t){var o=t.getElement();o.parentNode.removeChild(o)}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()),this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!1)},Group.prototype.show=function(){var t=this;if(t.visible=!0,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination)this.groupManager.updateGroupRows(!0);else{this.element.classList.add("tabulator-group-visible");var o=t.getElement();this.groupList.length?this.groupList.forEach(function(t){t.getHeadersAndRows().forEach(function(t){var e=t.getElement();o.parentNode.insertBefore(e,o.nextSibling),t.initialize(),o=e})}):t.rows.forEach(function(t){var e=t.getElement();o.parentNode.insertBefore(e,o.nextSibling),t.initialize(),o=e}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()}this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!0)},Group.prototype._visSet=function(){var t=[];"function"==typeof this.visible&&(this.rows.forEach(function(o){t.push(o.getData())}),this.visible=this.visible(this.key,this.getRowCount(),t,this.getComponent()))},Group.prototype.getRowGroup=function(t){var o=!1;return this.groupList.length?this.groupList.forEach(function(e){var r=e.getRowGroup(t);r&&(o=r)}):this.rows.find(function(o){return o===t})&&(o=this),o},Group.prototype.getSubGroups=function(t){var o=[];return this.groupList.forEach(function(e){o.push(t?e.getComponent():e)}),o},Group.prototype.getRows=function(t){var o=[];return this.rows.forEach(function(e){o.push(t?e.getComponent():e)}),o},Group.prototype.generateGroupHeaderContents=function(){var t=[];for(this.rows.forEach(function(o){t.push(o.getData())}),this.elementContents=this.generator(this.key,this.getRowCount(),t,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);"string"==typeof this.elementContents?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)},Group.prototype.getElement=function(){this.addBindingsd=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var t=0;tr.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),t.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],t.table.modules.localize.bind("groups|item",function(o,e){t.headerGenerator[0]=function(t,r,i){return(void 0===t?"":t)+"("+r+" "+(1===r?o:e.groups.items)+")"}}),this.groupIDLookups=[],Array.isArray(o)||o)this.table.modExists("columnCalcs")&&"table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.removeCalcs();else if(this.table.modExists("columnCalcs")&&"group"!=this.table.options.columnCalcs){var i=this.table.columnManager.getRealColumns();i.forEach(function(o){o.definition.topCalc&&t.table.modules.columnCalcs.initializeTopRow(),o.definition.bottomCalc&&t.table.modules.columnCalcs.initializeBottomRow()})}Array.isArray(o)||(o=[o]),o.forEach(function(o,e){var r,i;"function"==typeof o?r=o:(i=t.table.columnManager.getColumnByField(o),r=i?function(t){return i.getFieldValue(t)}:function(t){return t[o]}),t.groupIDLookups.push({field:"function"!=typeof o&&o,func:r,values:!!t.allowedValues&&t.allowedValues[e]})}),e&&(Array.isArray(e)||(e=[e]),e.forEach(function(t){t="function"==typeof t?t:function(){return!0}}),t.startOpen=e),r&&(t.headerGenerator=Array.isArray(r)?r:[r]),this.initialized=!0},GroupRows.prototype.setDisplayIndex=function(t){this.displayIndex=t},GroupRows.prototype.getDisplayIndex=function(){return this.displayIndex},GroupRows.prototype.getRows=function(t){return this.groupIDLookups.length?(this.table.options.dataGrouping.call(this.table),this.generateGroups(t),this.table.options.dataGrouped&&this.table.options.dataGrouped.call(this.table,this.getGroups(!0)),this.updateGroupRows()):t.slice(0)},GroupRows.prototype.getGroups=function(t){var o=[];return this.groupList.forEach(function(e){o.push(t?e.getComponent():e)}),o},GroupRows.prototype.getChildGroups=function(t){var o=this,e=[];return t||(t=this),t.groupList.forEach(function(t){t.groupList.length?e=e.concat(o.getChildGroups(t)):e.push(t)}),e},GroupRows.prototype.wipe=function(){this.groupList.forEach(function(t){t.wipe()})},GroupRows.prototype.pullGroupListData=function(t){var o=this,e=[];return t.forEach(function(t){var r={};r.level=0,r.rowCount=0,r.headerContent="";var i=[];t.hasSubGroups?(i=o.pullGroupListData(t.groupList),r.level=t.level,r.rowCount=i.length-t.groupList.length,r.headerContent=t.generator(t.key,r.rowCount,t.rows,t),e.push(r),e=e.concat(i)):(r.level=t.level,r.headerContent=t.generator(t.key,t.rows.length,t.rows,t),r.rowCount=t.getRows().length,e.push(r),t.getRows().forEach(function(t){e.push(t.getData("data"))}))}),e},GroupRows.prototype.getGroupedData=function(){return this.pullGroupListData(this.groupList)},GroupRows.prototype.getRowGroup=function(t){var o=!1;return this.groupList.forEach(function(e){var r=e.getRowGroup(t);r&&(o=r)}),o},GroupRows.prototype.countGroups=function(){return this.groupList.length},GroupRows.prototype.generateGroups=function(t){var o=this,e=o.groups;o.groups={},o.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach(function(t){o.createGroup(t,0,e)}),t.forEach(function(t){o.assignRowToExistingGroup(t,e)})):t.forEach(function(t){o.assignRowToGroup(t,e)})},GroupRows.prototype.createGroup=function(t,o,e){var r,i=o+"_"+t;e=e||[],r=new Group(this,!1,o,t,this.groupIDLookups[0].field,this.headerGenerator[0],e[i]),this.groups[i]=r,this.groupList.push(r)},GroupRows.prototype.assignRowToExistingGroup=function(t,o){var e=this.groupIDLookups[0].func(t.getData()),r="0_"+e;this.groups[r]&&this.groups[r].addRow(t)},GroupRows.prototype.assignRowToGroup=function(t,o){var e=this.groupIDLookups[0].func(t.getData()),r=!this.groups["0_"+e];return r&&this.createGroup(e,0,o),this.groups["0_"+e].addRow(t),!r},GroupRows.prototype.updateGroupRows=function(t){var o=this,e=[];if(o.groupList.forEach(function(t){e=e.concat(t.getHeadersAndRows())}),t){var r=o.table.rowManager.setDisplayRows(e,this.getDisplayIndex());!0!==r&&this.setDisplayIndex(r),o.table.rowManager.refreshActiveData("group",!0,!0)}return e},GroupRows.prototype.scrollHeaders=function(t){t+="px",this.groupList.forEach(function(o){o.scrollHeader(t)})},GroupRows.prototype.removeGroup=function(t){var o,e=t.level+"_"+t.key;this.groups[e]&&(delete this.groups[e],(o=this.groupList.indexOf(t))>-1&&this.groupList.splice(o,1))},Tabulator.prototype.registerModule("groupRows",GroupRows); \ No newline at end of file diff --git a/website/js/vendor/tabulator/js/modules/history.js b/admin/js/vendors/tabulator/js/modules/history.js similarity index 89% rename from website/js/vendor/tabulator/js/modules/history.js rename to admin/js/vendors/tabulator/js/modules/history.js index 87a053d..1c3ae3e 100644 --- a/website/js/vendor/tabulator/js/modules/history.js +++ b/admin/js/vendors/tabulator/js/modules/history.js @@ -1,4 +1,4 @@ -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var History = function History(table) { this.table = table; //hold Tabulator object @@ -33,21 +33,6 @@ History.prototype.getHistoryRedoSize = function () { return this.history.length - (this.index + 1); }; -History.prototype.clearComponentHistory = function (component) { - var index = this.history.findIndex(function (item) { - return item.component === component; - }); - - if (index > -1) { - this.history.splice(index, 1); - if (index <= this.index) { - this.index--; - } - - this.clearComponentHistory(component); - } -}; - History.prototype.undo = function () { if (this.index > -1) { diff --git a/admin/js/vendors/tabulator/js/modules/history.min.js b/admin/js/vendors/tabulator/js/modules/history.min.js new file mode 100644 index 0000000..5df3187 --- /dev/null +++ b/admin/js/vendors/tabulator/js/modules/history.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var History=function(t){this.table=t,this.history=[],this.index=-1};History.prototype.clear=function(){this.history=[],this.index=-1},History.prototype.action=function(t,o,e){this.history=this.history.slice(0,this.index+1),this.history.push({type:t,component:o,data:e}),this.index++},History.prototype.getHistoryUndoSize=function(){return this.index+1},History.prototype.getHistoryRedoSize=function(){return this.history.length-(this.index+1)},History.prototype.undo=function(){if(this.index>-1){var t=this.history[this.index];return this.undoers[t.type].call(this,t),this.index--,this.table.options.historyUndo.call(this.table,t.type,t.component.getComponent(),t.data),!0}return console.warn("History Undo Error - No more history to undo"),!1},History.prototype.redo=function(){if(this.history.length-1>this.index){this.index++;var t=this.history[this.index];return this.redoers[t.type].call(this,t),this.table.options.historyRedo.call(this.table,t.type,t.component.getComponent(),t.data),!0}return console.warn("History Redo Error - No more history to redo"),!1},History.prototype.undoers={cellEdit:function(t){t.component.setValueProcessData(t.data.oldValue)},rowAdd:function(t){t.component.deleteActual()},rowDelete:function(t){var o=this.table.rowManager.addRowActual(t.data.data,t.data.pos,t.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(t.component,o)},rowMove:function(t){this.table.rowManager.moveRowActual(t.component,this.table.rowManager.rows[t.data.posFrom],!t.data.after),this.table.rowManager.redraw()}},History.prototype.redoers={cellEdit:function(t){t.component.setValueProcessData(t.data.newValue)},rowAdd:function(t){var o=this.table.rowManager.addRowActual(t.data.data,t.data.pos,t.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(t.component,o)},rowDelete:function(t){t.component.deleteActual()},rowMove:function(t){this.table.rowManager.moveRowActual(t.component,this.table.rowManager.rows[t.data.posTo],t.data.after),this.table.rowManager.redraw()}},History.prototype._rebindRow=function(t,o){this.history.forEach(function(e){if(e.component instanceof Row)e.component===t&&(e.component=o);else if(e.component instanceof Cell&&e.component.row===t){var i=e.component.column.getField();i&&(e.component=o.getCell(i))}})},Tabulator.prototype.registerModule("history",History); \ No newline at end of file diff --git a/website/js/vendor/tabulator/js/modules/html_table_import.js b/admin/js/vendors/tabulator/js/modules/html_table_import.js similarity index 98% rename from website/js/vendor/tabulator/js/modules/html_table_import.js rename to admin/js/vendors/tabulator/js/modules/html_table_import.js index 2f5f0fb..34fed7c 100644 --- a/website/js/vendor/tabulator/js/modules/html_table_import.js +++ b/admin/js/vendors/tabulator/js/modules/html_table_import.js @@ -1,6 +1,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var HtmlTableImport = function HtmlTableImport(table) { this.table = table; //hold Tabulator object diff --git a/website/js/vendor/tabulator/js/modules/html_table_import.min.js b/admin/js/vendors/tabulator/js/modules/html_table_import.min.js similarity index 96% rename from website/js/vendor/tabulator/js/modules/html_table_import.min.js rename to admin/js/vendors/tabulator/js/modules/html_table_import.min.js index 0076035..aef2b5c 100644 --- a/website/js/vendor/tabulator/js/modules/html_table_import.min.js +++ b/admin/js/vendors/tabulator/js/modules/html_table_import.min.js @@ -1,2 +1,2 @@ -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},HtmlTableImport=function(t){this.table=t,this.fieldIndex=[],this.hasIndex=!1};HtmlTableImport.prototype.parseTable=function(){var t=this,e=t.table.element,o=t.table.options,a=(o.columns,e.getElementsByTagName("th")),n=e.getElementsByTagName("tbody")[0],l=[];t.hasIndex=!1,t.table.options.htmlImporting.call(this.table),n=n?n.getElementsByTagName("tr"):[],t._extractOptions(e,o),a.length?t._extractHeaders(a,n):t._generateBlankHeaders(a,n);for(var r=0;r-1&&t.pressedKeys.splice(n,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)},Keybindings.prototype.clearBindings=function(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)},Keybindings.prototype.checkBinding=function(t,e){var i=this,n=!0;return t.ctrlKey==e.ctrl&&t.shiftKey==e.shift&&t.metaKey==e.meta&&(e.keys.forEach(function(t){-1==i.pressedKeys.indexOf(t)&&(n=!1)}),n&&e.action.call(i,t),!0)},Keybindings.prototype.bindings={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35,undo:"ctrl + 90",redo:"ctrl + 89",copyToClipboard:"ctrl + 67"},Keybindings.prototype.actions={keyBlock:function(t){t.stopPropagation(),t.preventDefault()},scrollPageUp:function(t){var e=this.table.rowManager,i=e.scrollTop-e.height;e.element.scrollHeight;t.preventDefault(),e.displayRowsCount&&(i>=0?e.element.scrollTop=i:e.scrollToRow(e.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function(t){var e=this.table.rowManager,i=e.scrollTop+e.height,n=e.element.scrollHeight;t.preventDefault(),e.displayRowsCount&&(i<=n?e.element.scrollTop=i:e.scrollToRow(e.getDisplayRows()[e.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function(t){var e=this.table.rowManager;t.preventDefault(),e.displayRowsCount&&e.scrollToRow(e.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function(t){var e=this.table.rowManager;t.preventDefault(),e.displayRowsCount&&e.scrollToRow(e.getDisplayRows()[e.displayRowsCount-1]),this.table.element.focus()},navPrev:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().prev())},navNext:function(t){var e,i=!1,n=this.table.options.tabEndNewRow;this.table.modExists("edit")&&(i=this.table.modules.edit.currentCell)&&(t.preventDefault(),e=i.nav(),e.next()||n&&(i.getElement().firstChild.blur(),n=!0===n?this.table.addRow({}):"function"==typeof n?this.table.addRow(n(i.row.getComponent())):this.table.addRow(Object.assign({},n)),n.then(function(){setTimeout(function(){e.next()})})))},navLeft:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().left())},navRight:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().right())},navUp:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().up())},navDown:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().down())},undo:function(t){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(t.preventDefault(),this.table.modules.history.undo()))},redo:function(t){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(t.preventDefault(),this.table.modules.history.redo()))},copyToClipboard:function(t){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(!1,!0)}},Tabulator.prototype.registerModule("keybindings",Keybindings); \ No newline at end of file diff --git a/website/js/vendor/tabulator/js/modules/menu.js b/admin/js/vendors/tabulator/js/modules/menu.js similarity index 54% rename from website/js/vendor/tabulator/js/modules/menu.js rename to admin/js/vendors/tabulator/js/modules/menu.js index bbcf83d..d86575f 100644 --- a/website/js/vendor/tabulator/js/modules/menu.js +++ b/admin/js/vendors/tabulator/js/modules/menu.js @@ -1,4 +1,4 @@ -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var Menu = function Menu(table) { this.table = table; //hold Tabulator object @@ -14,13 +14,14 @@ Menu.prototype.initializeColumnHeader = function (column) { var headerMenuEl; if (column.definition.headerContextMenu) { - column.getElement().addEventListener("contextmenu", this.LoadMenuEvent.bind(this, column, column.definition.headerContextMenu)); - this.tapHold(column, column.definition.headerContextMenu); - } + column.getElement().addEventListener("contextmenu", function (e) { + var menu = typeof column.definition.headerContextMenu == "function" ? column.definition.headerContextMenu(column.getComponent()) : column.definition.headerContextMenu; - // if(column.definition.headerClickMenu){ - // column.getElement().addEventListener("click", this.LoadMenuEvent.bind(this, column, column.definition.headerClickMenu)); - // } + e.preventDefault(); + + _this.loadMenu(e, column, menu); + }); + } if (column.definition.headerMenu) { @@ -29,7 +30,7 @@ Menu.prototype.initializeColumnHeader = function (column) { headerMenuEl.innerHTML = "⋮"; headerMenuEl.addEventListener("click", function (e) { - var menu = typeof column.definition.headerMenu == "function" ? column.definition.headerMenu(column.getComponent(), e) : column.definition.headerMenu; + var menu = typeof column.definition.headerMenu == "function" ? column.definition.headerMenu(column.getComponent()) : column.definition.headerMenu; e.stopPropagation(); e.preventDefault(); @@ -40,88 +41,44 @@ Menu.prototype.initializeColumnHeader = function (column) { } }; -Menu.prototype.LoadMenuEvent = function (component, menu, e) { - menu = typeof menu == "function" ? menu(component.getComponent(), e) : menu; - - // if(component instanceof Cell){ - // e.stopImmediatePropagation(); - // } - - this.loadMenu(e, component, menu); -}; - -Menu.prototype.tapHold = function (component, menu) { +Menu.prototype.initializeCell = function (cell) { var _this2 = this; - var element = component.getElement(), - tapHold = null, - loaded = false; - - element.addEventListener("touchstart", function (e) { - clearTimeout(tapHold); - loaded = false; - - tapHold = setTimeout(function () { - clearTimeout(tapHold); - tapHold = null; - loaded = true; - - _this2.LoadMenuEvent(component, menu, e); - }, 1000); - }, { passive: true }); + cell.getElement().addEventListener("contextmenu", function (e) { + var menu = typeof cell.column.definition.contextMenu == "function" ? cell.column.definition.contextMenu(cell.getComponent()) : cell.column.definition.contextMenu; - element.addEventListener("touchend", function (e) { - clearTimeout(tapHold); - tapHold = null; + e.stopImmediatePropagation(); - if (loaded) { - e.preventDefault(); - } + _this2.loadMenu(e, cell, menu); }); }; -Menu.prototype.initializeCell = function (cell) { - if (cell.column.definition.contextMenu) { - cell.getElement().addEventListener("contextmenu", this.LoadMenuEvent.bind(this, cell, cell.column.definition.contextMenu)); - this.tapHold(cell, cell.column.definition.contextMenu); - } - - if (cell.column.definition.clickMenu) { - cell.getElement().addEventListener("click", this.LoadMenuEvent.bind(this, cell, cell.column.definition.clickMenu)); - } -}; - Menu.prototype.initializeRow = function (row) { - if (this.table.options.rowContextMenu) { - row.getElement().addEventListener("contextmenu", this.LoadMenuEvent.bind(this, row, this.table.options.rowContextMenu)); - this.tapHold(row, this.table.options.rowContextMenu); - } + var _this3 = this; - if (this.table.options.rowClickMenu) { - row.getElement().addEventListener("click", this.LoadMenuEvent.bind(this, row, this.table.options.rowClickMenu)); - } + row.getElement().addEventListener("contextmenu", function (e) { + var menu = typeof _this3.table.options.rowContextMenu == "function" ? _this3.table.options.rowContextMenu(row.getComponent()) : _this3.table.options.rowContextMenu; + + _this3.loadMenu(e, row, menu); + }); }; Menu.prototype.initializeGroup = function (group) { - if (this.table.options.groupContextMenu) { - group.getElement().addEventListener("contextmenu", this.LoadMenuEvent.bind(this, group, this.table.options.groupContextMenu)); - this.tapHold(group, this.table.options.groupContextMenu); - } + var _this4 = this; - if (this.table.options.groupClickMenu) { - group.getElement().addEventListener("click", this.LoadMenuEvent.bind(this, group, this.table.options.groupClickMenu)); - } + group.getElement().addEventListener("contextmenu", function (e) { + var menu = typeof _this4.table.options.groupContextMenu == "function" ? _this4.table.options.groupContextMenu(group.getComponent()) : _this4.table.options.groupContextMenu; + + _this4.loadMenu(e, group, menu); + }); }; Menu.prototype.loadMenu = function (e, component, menu) { - var _this3 = this; + var _this5 = this; - var docHeight = Math.max(document.body.offsetHeight, window.innerHeight), - touch = !(e instanceof MouseEvent); + var docHeight = Math.max(document.body.offsetHeight, window.innerHeight); - if (!touch) { - e.preventDefault(); - } + e.preventDefault(); //abort if no menu set if (!menu || !menu.length) { @@ -135,7 +92,7 @@ Menu.prototype.loadMenu = function (e, component, menu) { } } else { this.nestedMenuBlock = setTimeout(function () { - _this3.nestedMenuBlock = false; + _this5.nestedMenuBlock = false; }, 100); } @@ -175,25 +132,27 @@ Menu.prototype.loadMenu = function (e, component, menu) { }); } else { itemEl.addEventListener("click", function (e) { - _this3.hideMenu(); + _this5.hideMenu(); item.action(e, component.getComponent()); }); } } - _this3.menuEl.appendChild(itemEl); + _this5.menuEl.appendChild(itemEl); }); - this.menuEl.style.top = (touch ? e.touches[0].pageY : e.pageY) + "px"; - this.menuEl.style.left = (touch ? e.touches[0].pageX : e.pageX) + "px"; + this.menuEl.style.top = e.pageY + "px"; + this.menuEl.style.left = e.pageX + "px"; + + document.body.addEventListener("click", this.blurEvent); + this.table.rowManager.element.addEventListener("scroll", this.blurEvent); setTimeout(function () { - _this3.table.rowManager.element.addEventListener("scroll", _this3.blurEvent); - document.body.addEventListener("click", _this3.blurEvent); - document.body.addEventListener("contextmenu", _this3.blurEvent); - document.body.addEventListener("keydown", _this3.escEvent); + document.body.addEventListener("contextmenu", _this5.blurEvent); }, 100); + document.body.addEventListener("keydown", this.escEvent); + document.body.appendChild(this.menuEl); //move menu to start on right edge if it is too close to the edge of the screen diff --git a/admin/js/vendors/tabulator/js/modules/menu.min.js b/admin/js/vendors/tabulator/js/modules/menu.min.js new file mode 100644 index 0000000..40b8241 --- /dev/null +++ b/admin/js/vendors/tabulator/js/modules/menu.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var Menu=function(e){this.table=e,this.menuEl=!1,this.blurEvent=this.hideMenu.bind(this),this.escEvent=this.escMenu.bind(this),this.nestedMenuBlock=!1};Menu.prototype.initializeColumnHeader=function(e){var t,n=this;e.definition.headerContextMenu&&e.getElement().addEventListener("contextmenu",function(t){var o="function"==typeof e.definition.headerContextMenu?e.definition.headerContextMenu(e.getComponent()):e.definition.headerContextMenu;t.preventDefault(),n.loadMenu(t,e,o)}),e.definition.headerMenu&&(t=document.createElement("span"),t.classList.add("tabulator-header-menu-button"),t.innerHTML="⋮",t.addEventListener("click",function(t){var o="function"==typeof e.definition.headerMenu?e.definition.headerMenu(e.getComponent()):e.definition.headerMenu;t.stopPropagation(),t.preventDefault(),n.loadMenu(t,e,o)}),e.titleElement.insertBefore(t,e.titleElement.firstChild))},Menu.prototype.initializeCell=function(e){var t=this;e.getElement().addEventListener("contextmenu",function(n){var o="function"==typeof e.column.definition.contextMenu?e.column.definition.contextMenu(e.getComponent()):e.column.definition.contextMenu;n.stopImmediatePropagation(),t.loadMenu(n,e,o)})},Menu.prototype.initializeRow=function(e){var t=this;e.getElement().addEventListener("contextmenu",function(n){var o="function"==typeof t.table.options.rowContextMenu?t.table.options.rowContextMenu(e.getComponent()):t.table.options.rowContextMenu;t.loadMenu(n,e,o)})},Menu.prototype.initializeGroup=function(e){var t=this;e.getElement().addEventListener("contextmenu",function(n){var o="function"==typeof t.table.options.groupContextMenu?t.table.options.groupContextMenu(e.getComponent()):t.table.options.groupContextMenu;t.loadMenu(n,e,o)})},Menu.prototype.loadMenu=function(e,t,n){var o=this,i=Math.max(document.body.offsetHeight,window.innerHeight);if(e.preventDefault(),n&&n.length){if(this.nestedMenuBlock){if(this.isOpen())return}else this.nestedMenuBlock=setTimeout(function(){o.nestedMenuBlock=!1},100);this.hideMenu(),this.menuEl=document.createElement("div"),this.menuEl.classList.add("tabulator-menu"),n.forEach(function(e){var n=document.createElement("div"),i=e.label,u=e.disabled;e.separator?n.classList.add("tabulator-menu-separator"):(n.classList.add("tabulator-menu-item"),"function"==typeof i&&(i=i(t.getComponent())),i instanceof Node?n.appendChild(i):n.innerHTML=i,"function"==typeof u&&(u=u(t.getComponent())),u?(n.classList.add("tabulator-menu-item-disabled"),n.addEventListener("click",function(e){e.stopPropagation()})):n.addEventListener("click",function(n){o.hideMenu(),e.action(n,t.getComponent())})),o.menuEl.appendChild(n)}),this.menuEl.style.top=e.pageY+"px",this.menuEl.style.left=e.pageX+"px",document.body.addEventListener("click",this.blurEvent),this.table.rowManager.element.addEventListener("scroll",this.blurEvent),setTimeout(function(){document.body.addEventListener("contextmenu",o.blurEvent)},100),document.body.addEventListener("keydown",this.escEvent),document.body.appendChild(this.menuEl),e.pageX+this.menuEl.offsetWidth>=document.body.offsetWidth&&(this.menuEl.style.left="",this.menuEl.style.right=document.body.offsetWidth-e.pageX+"px"),e.pageY+this.menuEl.offsetHeight>=i&&(this.menuEl.style.top="",this.menuEl.style.bottom=i-e.pageY+"px")}},Menu.prototype.isOpen=function(){return!!this.menuEl.parentNode},Menu.prototype.escMenu=function(e){27==e.keyCode&&this.hideMenu()},Menu.prototype.hideMenu=function(){this.menuEl.parentNode&&this.menuEl.parentNode.removeChild(this.menuEl),this.escEvent&&document.body.removeEventListener("keydown",this.escEvent),this.blurEvent&&(document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent))},Menu.prototype.menus={},Tabulator.prototype.registerModule("menu",Menu); \ No newline at end of file diff --git a/website/js/vendor/tabulator/js/modules/moveable_columns.js b/admin/js/vendors/tabulator/js/modules/moveable_columns.js similarity index 98% rename from website/js/vendor/tabulator/js/modules/moveable_columns.js rename to admin/js/vendors/tabulator/js/modules/moveable_columns.js index b22faea..5244016 100644 --- a/website/js/vendor/tabulator/js/modules/moveable_columns.js +++ b/admin/js/vendors/tabulator/js/modules/moveable_columns.js @@ -1,4 +1,4 @@ -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var MoveColumns = function MoveColumns(table) { this.table = table; //hold Tabulator object diff --git a/website/js/vendor/tabulator/js/modules/moveable_columns.min.js b/admin/js/vendors/tabulator/js/modules/moveable_columns.min.js similarity index 98% rename from website/js/vendor/tabulator/js/modules/moveable_columns.min.js rename to admin/js/vendors/tabulator/js/modules/moveable_columns.min.js index 4319932..0135a3b 100644 --- a/website/js/vendor/tabulator/js/modules/moveable_columns.min.js +++ b/admin/js/vendors/tabulator/js/modules/moveable_columns.min.js @@ -1,2 +1,2 @@ -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var MoveColumns=function(e){this.table=e,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.touchMove=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this)};MoveColumns.prototype.createPlaceholderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.classList.add("tabulator-col-placeholder"),e},MoveColumns.prototype.initializeColumn=function(e){var t,o=this,n={};e.modules.frozen||(t=e.getElement(),n.mousemove=function(n){e.parent===o.moving.parent&&((o.touchMove?n.touches[0].pageX:n.pageX)-Tabulator.prototype.helpers.elOffset(t).left+o.table.columnManager.element.scrollLeft>e.getWidth()/2?o.toCol===e&&o.toColAfter||(t.parentNode.insertBefore(o.placeholderElement,t.nextSibling),o.moveColumn(e,!0)):(o.toCol!==e||o.toColAfter)&&(t.parentNode.insertBefore(o.placeholderElement,t),o.moveColumn(e,!1)))}.bind(o),t.addEventListener("mousedown",function(t){o.touchMove=!1,1===t.which&&(o.checkTimeout=setTimeout(function(){o.startMove(t,e)},o.checkPeriod))}),t.addEventListener("mouseup",function(e){1===e.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)}),o.bindTouchEvents(e)),e.modules.moveColumn=n},MoveColumns.prototype.bindTouchEvents=function(e){var t,o,n,l,i,s,m,r=this,u=e.getElement(),h=!1;u.addEventListener("touchstart",function(u){r.checkTimeout=setTimeout(function(){r.touchMove=!0,t=e,o=e.nextColumn(),l=o?o.getWidth()/2:0,n=e.prevColumn(),i=n?n.getWidth()/2:0,s=0,m=0,h=!1,r.startMove(u,e)},r.checkPeriod)},{passive:!0}),u.addEventListener("touchmove",function(u){var a,c;r.moving&&(r.moveHover(u),h||(h=u.touches[0].pageX),a=u.touches[0].pageX-h,a>0?o&&a-s>l&&(c=o)!==e&&(h=u.touches[0].pageX,c.getElement().parentNode.insertBefore(r.placeholderElement,c.getElement().nextSibling),r.moveColumn(c,!0)):n&&-a-m>i&&(c=n)!==e&&(h=u.touches[0].pageX,c.getElement().parentNode.insertBefore(r.placeholderElement,c.getElement()),r.moveColumn(c,!1)),c&&(t=c,o=c.nextColumn(),s=l,l=o?o.getWidth()/2:0,n=c.prevColumn(),m=i,i=n?n.getWidth()/2:0))},{passive:!0}),u.addEventListener("touchend",function(e){r.checkTimeout&&clearTimeout(r.checkTimeout),r.moving&&r.endMove(e)})},MoveColumns.prototype.startMove=function(e,t){var o=t.getElement();this.moving=t,this.startX=(this.touchMove?e.touches[0].pageX:e.pageX)-Tabulator.prototype.helpers.elOffset(o).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.table.columnManager.getElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom="0",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(e)},MoveColumns.prototype._bindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveColumn.mousemove)})},MoveColumns.prototype._unbindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveColumn.mousemove)})},MoveColumns.prototype.moveColumn=function(e,t){var o=this.moving.getCells();this.toCol=e,this.toColAfter=t,t?e.getCells().forEach(function(e,t){var n=e.getElement();n.parentNode.insertBefore(o[t].getElement(),n.nextSibling)}):e.getCells().forEach(function(e,t){var n=e.getElement();n.parentNode.insertBefore(o[t].getElement(),n)})},MoveColumns.prototype.endMove=function(e){(1===e.which||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))},MoveColumns.prototype.moveHover=function(e){var t,o=this,n=o.table.columnManager.getElement(),l=n.scrollLeft,i=(o.touchMove?e.touches[0].pageX:e.pageX)-Tabulator.prototype.helpers.elOffset(n).left+l;o.hoverElement.style.left=i-o.startX+"px",i-le.getHeight()/2){if(t.toRow!==e||!t.toRowAfter){var n=e.getElement();n.parentNode.insertBefore(t.placeholderElement,n.nextSibling),t.moveRow(e,!0)}}else if(t.toRow!==e||t.toRowAfter){var n=e.getElement();n.previousSibling&&(n.parentNode.insertBefore(t.placeholderElement,n),t.moveRow(e,!1))}}.bind(t),e.modules.moveRow=o},MoveRows.prototype.initializeRow=function(e){var t,o=this,n={};n.mouseup=function(t){o.tableRowDrop(t,e)}.bind(o),n.mousemove=function(t){if(t.pageY-Tabulator.prototype.helpers.elOffset(e.element).top+o.table.rowManager.element.scrollTop>e.getHeight()/2){if(o.toRow!==e||!o.toRowAfter){var n=e.getElement();n.parentNode.insertBefore(o.placeholderElement,n.nextSibling),o.moveRow(e,!0)}}else if(o.toRow!==e||o.toRowAfter){var n=e.getElement();n.parentNode.insertBefore(o.placeholderElement,n),o.moveRow(e,!1)}}.bind(o),this.hasHandle||(t=e.getElement(),t.addEventListener("mousedown",function(t){1===t.which&&(o.checkTimeout=setTimeout(function(){o.startMove(t,e)},o.checkPeriod))}),t.addEventListener("mouseup",function(e){1===e.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)}),this.bindTouchEvents(e,e.getElement())),e.modules.moveRow=n},MoveRows.prototype.initializeCell=function(e){var t=this,o=e.getElement();o.addEventListener("mousedown",function(o){1===o.which&&(t.checkTimeout=setTimeout(function(){t.startMove(o,e.row)},t.checkPeriod))}),o.addEventListener("mouseup",function(e){1===e.which&&t.checkTimeout&&clearTimeout(t.checkTimeout)}),this.bindTouchEvents(e.row,e.getElement())},MoveRows.prototype.bindTouchEvents=function(e,t){var o,n,s,i,l,c,r,a=this,h=!1;t.addEventListener("touchstart",function(t){a.checkTimeout=setTimeout(function(){a.touchMove=!0,o=e,n=e.nextRow(),i=n?n.getHeight()/2:0,s=e.prevRow(),l=s?s.getHeight()/2:0,c=0,r=0,h=!1,a.startMove(t,e)},a.checkPeriod)},{passive:!0}),this.moving,this.toRow,this.toRowAfter,t.addEventListener("touchmove",function(t){var m,v;a.moving&&(t.preventDefault(),a.moveHover(t),h||(h=t.touches[0].pageY),m=t.touches[0].pageY-h,m>0?n&&m-c>i&&(v=n)!==e&&(h=t.touches[0].pageY,v.getElement().parentNode.insertBefore(a.placeholderElement,v.getElement().nextSibling),a.moveRow(v,!0)):s&&-m-r>l&&(v=s)!==e&&(h=t.touches[0].pageY,v.getElement().parentNode.insertBefore(a.placeholderElement,v.getElement()),a.moveRow(v,!1)),v&&(o=v,n=v.nextRow(),c=i,i=n?n.getHeight()/2:0,s=v.prevRow(),r=l,l=s?s.getHeight()/2:0))}),t.addEventListener("touchend",function(e){a.checkTimeout&&clearTimeout(a.checkTimeout),a.moving&&(a.endMove(e),a.touchMove=!1)})},MoveRows.prototype._bindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(e){"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().addEventListener("mousemove",e.modules.moveRow.mousemove)})},MoveRows.prototype._unbindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(e){"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().removeEventListener("mousemove",e.modules.moveRow.mousemove)})},MoveRows.prototype.startMove=function(e,t){var o=t.getElement();this.setStartPosition(e,t),this.moving=t,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(t)):(o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o)),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.moveHover(e)},MoveRows.prototype.setStartPosition=function(e,t){var o,n,s=this.touchMove?e.touches[0].pageX:e.pageX,i=this.touchMove?e.touches[0].pageY:e.pageY;o=t.getElement(),this.connection?(n=o.getBoundingClientRect(),this.startX=n.left-s+window.pageXOffset,this.startY=n.top-i+window.pageYOffset):this.startY=i-o.getBoundingClientRect().top},MoveRows.prototype.endMove=function(e){e&&1!==e.which&&!this.touchMove||(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow&&this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))},MoveRows.prototype.moveRow=function(e,t){this.toRow=e,this.toRowAfter=t},MoveRows.prototype.moveHover=function(e){this.connection?this.moveHoverConnections.call(this,e):this.moveHoverTable.call(this,e)},MoveRows.prototype.moveHoverTable=function(e){var t=this.table.rowManager.getElement(),o=t.scrollTop,n=(this.touchMove?e.touches[0].pageY:e.pageY)-t.getBoundingClientRect().top+o;this.hoverElement.style.top=n-this.startY+"px"},MoveRows.prototype.moveHoverConnections=function(e){this.hoverElement.style.left=this.startX+(this.touchMove?e.touches[0].pageX:e.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?e.touches[0].pageY:e.pageY)+"px"},MoveRows.prototype.elementRowDrop=function(e,t,o){this.table.options.movableRowsElementDrop&&this.table.options.movableRowsElementDrop(e,t,!!o&&o.getComponent())},MoveRows.prototype.connectToTables=function(e){var t,o=this;this.connectionSelectorsTables&&(t=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStart.call(this.table,t),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","connect",{row:e})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach(function(e){"string"==typeof e?o.connectionElements=o.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(e))):o.connectionElements.push(e)}),this.connectionElements.forEach(function(e){var t=function(t){o.elementRowDrop(t,e,o.moving)};e.addEventListener("mouseup",t),e.tabulatorElementDropEvent=t,e.classList.add("tabulator-movingrow-receiving")}))},MoveRows.prototype.disconnectFromTables=function(){var e;this.connectionSelectorsTables&&(e=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStop.call(this.table,e),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach(function(e){e.classList.remove("tabulator-movingrow-receiving"),e.removeEventListener("mouseup",e.tabulatorElementDropEvent),delete e.tabulatorElementDropEvent})},MoveRows.prototype.connect=function(e,t){var o=this;return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=e,this.connectedRow=t,this.table.element.classList.add("tabulator-movingrow-receiving"),o.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().addEventListener("mouseup",e.modules.moveRow.mouseup)}),o.tableRowDropEvent=o.tableRowDrop.bind(o),o.table.element.addEventListener("mouseup",o.tableRowDropEvent),this.table.options.movableRowsReceivingStart.call(this.table,t,e),!0)},MoveRows.prototype.disconnect=function(e){var t=this;e===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),t.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().removeEventListener("mouseup",e.modules.moveRow.mouseup)}),t.table.element.removeEventListener("mouseup",t.tableRowDropEvent),this.table.options.movableRowsReceivingStop.call(this.table,e)):console.warn("Move Row Error - trying to disconnect from non connected table")},MoveRows.prototype.dropComplete=function(e,t,o){var n=!1;if(o){switch(_typeof(this.table.options.movableRowsSender)){case"string":n=this.senders[this.table.options.movableRowsSender];break;case"function":n=this.table.options.movableRowsSender}n?n.call(this,this.moving.getComponent(),t?t.getComponent():void 0,e):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.table.options.movableRowsSent.call(this.table,this.moving.getComponent(),t?t.getComponent():void 0,e)}else this.table.options.movableRowsSentFailed.call(this.table,this.moving.getComponent(),t?t.getComponent():void 0,e);this.endMove()},MoveRows.prototype.tableRowDrop=function(e,t){var o=!1,n=!1;switch(console.trace("drop"),e.stopImmediatePropagation(),_typeof(this.table.options.movableRowsReceiver)){case"string":o=this.receivers[this.table.options.movableRowsReceiver];break;case"function":o=this.table.options.movableRowsReceiver}o?n=o.call(this,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),n?this.table.options.movableRowsReceived.call(this.table,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):this.table.options.movableRowsReceivedFailed.call(this.table,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable),this.table.modules.comms.send(this.connectedTable,"moveRow","dropcomplete",{row:t,success:n})},MoveRows.prototype.receivers={insert:function(e,t,o){return this.table.addRow(e.getData(),void 0,t),!0},add:function(e,t,o){return this.table.addRow(e.getData()),!0},update:function(e,t,o){return!!t&&(t.update(e.getData()),!0)},replace:function(e,t,o){return!!t&&(this.table.addRow(e.getData(),void 0,t),t.delete(),!0)}},MoveRows.prototype.senders={delete:function(e,t,o){e.delete()}},MoveRows.prototype.commsReceived=function(e,t,o){switch(t){case"connect":return this.connect(e,o.row);case"disconnect":return this.disconnect(e);case"dropcomplete":return this.dropComplete(e,o.row,o.success)}},Tabulator.prototype.registerModule("moveRow",MoveRows); \ No newline at end of file diff --git a/website/js/vendor/tabulator/js/modules/mutator.js b/admin/js/vendors/tabulator/js/modules/mutator.js similarity index 96% rename from website/js/vendor/tabulator/js/modules/mutator.js rename to admin/js/vendors/tabulator/js/modules/mutator.js index 830b891..e5b5dad 100644 --- a/website/js/vendor/tabulator/js/modules/mutator.js +++ b/admin/js/vendors/tabulator/js/modules/mutator.js @@ -1,6 +1,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var Mutator = function Mutator(table) { this.table = table; //hold Tabulator object diff --git a/website/js/vendor/tabulator/js/modules/mutator.min.js b/admin/js/vendors/tabulator/js/modules/mutator.min.js similarity index 96% rename from website/js/vendor/tabulator/js/modules/mutator.min.js rename to admin/js/vendors/tabulator/js/modules/mutator.min.js index 8f4f037..00005d1 100644 --- a/website/js/vendor/tabulator/js/modules/mutator.min.js +++ b/admin/js/vendors/tabulator/js/modules/mutator.min.js @@ -1,2 +1,2 @@ -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Mutator=function(t){this.table=t,this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0};Mutator.prototype.initializeColumn=function(t){var o=this,e=!1,a={};this.allowedTypes.forEach(function(r){var u,n="mutator"+(r.charAt(0).toUpperCase()+r.slice(1));t.definition[n]&&(u=o.lookupMutator(t.definition[n]))&&(e=!0,a[n]={mutator:u,params:t.definition[n+"Params"]||{}})}),e&&(t.modules.mutate=a)},Mutator.prototype.lookupMutator=function(t){var o=!1;switch(void 0===t?"undefined":_typeof(t)){case"string":this.mutators[t]?o=this.mutators[t]:console.warn("Mutator Error - No such mutator found, ignoring: ",t);break;case"function":o=t}return o},Mutator.prototype.transformRow=function(t,o,e){var a,r=this,u="mutator"+(o.charAt(0).toUpperCase()+o.slice(1));return this.enabled&&r.table.columnManager.traverse(function(r){var n,i,s;r.modules.mutate&&(n=r.modules.mutate[u]||r.modules.mutate.mutator||!1)&&(a=r.getFieldValue(void 0!==e?e:t),"data"!=o&&void 0===a||(s=r.getComponent(),i="function"==typeof n.params?n.params(a,t,o,s):n.params,r.setFieldValue(t,n.mutator(a,t,o,i,s))))}),t},Mutator.prototype.transformCell=function(t,o){var e=t.column.modules.mutate.mutatorEdit||t.column.modules.mutate.mutator||!1,a={};return e?(a=Object.assign(a,t.row.getData()),t.column.setFieldValue(a,o),e.mutator(o,a,"edit",e.params,t.getComponent())):o},Mutator.prototype.enable=function(){this.enabled=!0},Mutator.prototype.disable=function(){this.enabled=!1},Mutator.prototype.mutators={},Tabulator.prototype.registerModule("mutator",Mutator); \ No newline at end of file diff --git a/website/js/vendor/tabulator/js/modules/page.js b/admin/js/vendors/tabulator/js/modules/page.js similarity index 97% rename from website/js/vendor/tabulator/js/modules/page.js rename to admin/js/vendors/tabulator/js/modules/page.js index 81d5e1e..d37b814 100644 --- a/website/js/vendor/tabulator/js/modules/page.js +++ b/admin/js/vendors/tabulator/js/modules/page.js @@ -1,4 +1,4 @@ -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var Page = function Page(table) { @@ -164,11 +164,11 @@ Page.prototype.initialize = function (hidden) { //click bindings self.firstBut.addEventListener("click", function () { - self.setPage(1).then(function () {}).catch(function () {}); + self.setPage(1); }); self.prevBut.addEventListener("click", function () { - self.previousPage().then(function () {}).catch(function () {}); + self.previousPage(); }); self.nextBut.addEventListener("click", function () { @@ -176,7 +176,7 @@ Page.prototype.initialize = function (hidden) { }); self.lastBut.addEventListener("click", function () { - self.setPage(self.max).then(function () {}).catch(function () {}); + self.setPage(self.max); }); if (self.table.options.paginationElement) { @@ -439,7 +439,7 @@ Page.prototype._generatePageButton = function (page) { button.textContent = page; button.addEventListener("click", function (e) { - self.setPage(page).then(function () {}).catch(function () {}); + self.setPage(page); }); return button; @@ -520,7 +520,7 @@ Page.prototype.getRows = function (data) { if (this.size === true) { start = 0; - end = data.length; + end = data.length - 1; } else { start = this.size * (this.page - 1); end = start + parseInt(this.size); diff --git a/admin/js/vendors/tabulator/js/modules/page.min.js b/admin/js/vendors/tabulator/js/modules/page.min.js new file mode 100644 index 0000000..c2835ba --- /dev/null +++ b/admin/js/vendors/tabulator/js/modules/page.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var Page=function(e){this.table=e,this.mode="local",this.progressiveLoad=!1,this.size=0,this.page=1,this.count=5,this.max=1,this.displayIndex=0,this.initialLoad=!0,this.pageSizes=[],this.dataReceivedNames={},this.dataSentNames={},this.createElements()};Page.prototype.createElements=function(){var e;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),e=document.createElement("button"),e.classList.add("tabulator-page"),e.setAttribute("type","button"),e.setAttribute("role","button"),e.setAttribute("aria-label",""),e.setAttribute("title",""),this.firstBut=e.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=e.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=e.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=e.cloneNode(!0),this.lastBut.setAttribute("data-page","last"),this.table.options.paginationSizeSelector&&(this.pageSizeSelect=document.createElement("select"),this.pageSizeSelect.classList.add("tabulator-page-size"))},Page.prototype.generatePageSizeSelectList=function(){var e=this,t=[];if(this.pageSizeSelect){if(Array.isArray(this.table.options.paginationSizeSelector))t=this.table.options.paginationSizeSelector,this.pageSizes=t,-1==this.pageSizes.indexOf(this.size)&&t.unshift(this.size);else if(-1==this.pageSizes.indexOf(this.size)){t=[];for(var a=1;a<5;a++)t.push(this.size*a);this.pageSizes=t}else t=this.pageSizes;for(;this.pageSizeSelect.firstChild;)this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);t.forEach(function(t){var a=document.createElement("option");a.value=t,!0===t?e.table.modules.localize.bind("pagination|all",function(e){a.innerHTML=e}):a.innerHTML=t,e.pageSizeSelect.appendChild(a)}),this.pageSizeSelect.value=this.size}},Page.prototype.initialize=function(e){var t,a,i,s=this;this.dataSentNames=Object.assign({},this.paginationDataSentNames),this.dataSentNames=Object.assign(this.dataSentNames,this.table.options.paginationDataSent),this.dataReceivedNames=Object.assign({},this.paginationDataReceivedNames),this.dataReceivedNames=Object.assign(this.dataReceivedNames,this.table.options.paginationDataReceived),s.table.modules.localize.bind("pagination|first",function(e){s.firstBut.innerHTML=e}),s.table.modules.localize.bind("pagination|first_title",function(e){s.firstBut.setAttribute("aria-label",e),s.firstBut.setAttribute("title",e)}),s.table.modules.localize.bind("pagination|prev",function(e){s.prevBut.innerHTML=e}),s.table.modules.localize.bind("pagination|prev_title",function(e){s.prevBut.setAttribute("aria-label",e),s.prevBut.setAttribute("title",e)}),s.table.modules.localize.bind("pagination|next",function(e){s.nextBut.innerHTML=e}),s.table.modules.localize.bind("pagination|next_title",function(e){s.nextBut.setAttribute("aria-label",e),s.nextBut.setAttribute("title",e)}),s.table.modules.localize.bind("pagination|last",function(e){s.lastBut.innerHTML=e}),s.table.modules.localize.bind("pagination|last_title",function(e){s.lastBut.setAttribute("aria-label",e),s.lastBut.setAttribute("title",e)}),s.firstBut.addEventListener("click",function(){s.setPage(1)}),s.prevBut.addEventListener("click",function(){s.previousPage()}),s.nextBut.addEventListener("click",function(){s.nextPage().then(function(){}).catch(function(){})}),s.lastBut.addEventListener("click",function(){s.setPage(s.max)}),s.table.options.paginationElement&&(s.element=s.table.options.paginationElement),this.pageSizeSelect&&(t=document.createElement("label"),s.table.modules.localize.bind("pagination|page_size",function(e){s.pageSizeSelect.setAttribute("aria-label",e),s.pageSizeSelect.setAttribute("title",e),t.innerHTML=e}),s.element.appendChild(t),s.element.appendChild(s.pageSizeSelect),s.pageSizeSelect.addEventListener("change",function(e){s.setPageSize("true"==s.pageSizeSelect.value||s.pageSizeSelect.value),s.setPage(1).then(function(){}).catch(function(){})})),s.element.appendChild(s.firstBut),s.element.appendChild(s.prevBut),s.element.appendChild(s.pagesElement),s.element.appendChild(s.nextBut),s.element.appendChild(s.lastBut),s.table.options.paginationElement||e||s.table.footerManager.append(s.element,s),s.mode=s.table.options.pagination,s.table.options.paginationSize?s.size=s.table.options.paginationSize:(a=document.createElement("div"),a.classList.add("tabulator-row"),a.style.visibility=e,i=document.createElement("div"),i.classList.add("tabulator-cell"),i.innerHTML="Page Row Test",a.appendChild(i),s.table.rowManager.getTableElement().appendChild(a),s.size=Math.floor(s.table.rowManager.getElement().clientHeight/a.offsetHeight),s.table.rowManager.getTableElement().removeChild(a)),s.count=s.table.options.paginationButtonCount,s.generatePageSizeSelectList()},Page.prototype.initializeProgressive=function(e){this.initialize(!0),this.mode="progressive_"+e,this.progressiveLoad=!0},Page.prototype.setDisplayIndex=function(e){this.displayIndex=e},Page.prototype.getDisplayIndex=function(){return this.displayIndex},Page.prototype.setMaxRows=function(e){this.max=e?!0===this.size?1:Math.ceil(e/this.size):1,this.page>this.max&&(this.page=this.max)},Page.prototype.reset=function(e,t){return("local"==this.mode||e)&&(this.page=1),t&&(this.initialLoad=!0),!0},Page.prototype.setMaxPage=function(e){e=parseInt(e),this.max=e||1,this.page>this.max&&(this.page=this.max,this.trigger())},Page.prototype.setPage=function(e){var t=this,a=this;switch(e){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return new Promise(function(i,s){e=parseInt(e),e>0&&e<=t.max?(t.page=e,t.trigger().then(function(){i()}).catch(function(){s()}),a.table.options.persistence&&a.table.modExists("persistence",!0)&&a.table.modules.persistence.config.page&&a.table.modules.persistence.save("page")):(console.warn("Pagination Error - Requested page is out of range of 1 - "+t.max+":",e),s())})},Page.prototype.setPageToRow=function(e){var t=this;return new Promise(function(a,i){var s=t.table.rowManager.getDisplayRows(t.displayIndex-1),n=s.indexOf(e);if(n>-1){var o=!0===t.size?1:Math.ceil((n+1)/t.size);t.setPage(o).then(function(){a()}).catch(function(){i()})}else console.warn("Pagination Error - Requested row is not visible"),i()})},Page.prototype.setPageSize=function(e){!0!==e&&(e=parseInt(e)),e>0&&(this.size=e),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.page&&this.table.modules.persistence.save("page")},Page.prototype._setPageButtons=function(){for(var e=this,t=Math.floor((this.count-1)/2),a=Math.ceil((this.count-1)/2),i=this.max-this.page+t+10&&n<=e.max&&e.pagesElement.appendChild(e._generatePageButton(n));this.footerRedraw()},Page.prototype._generatePageButton=function(e){var t=this,a=document.createElement("button");return a.classList.add("tabulator-page"),e==t.page&&a.classList.add("active"),a.setAttribute("type","button"),a.setAttribute("role","button"),t.table.modules.localize.bind("pagination|page_title",function(t){a.setAttribute("aria-label",t+" "+e),a.setAttribute("title",t+" "+e)}),a.setAttribute("data-page",e),a.textContent=e,a.addEventListener("click",function(a){t.setPage(e)}),a},Page.prototype.previousPage=function(){var e=this;return new Promise(function(t,a){e.page>1?(e.page--,e.trigger().then(function(){t()}).catch(function(){a()}),e.table.options.persistence&&e.table.modExists("persistence",!0)&&e.table.modules.persistence.config.page&&e.table.modules.persistence.save("page")):(console.warn("Pagination Error - Previous page would be less than page 1:",0),a())})},Page.prototype.nextPage=function(){var e=this;return new Promise(function(t,a){e.pages?o.splice(s,0,e):o.push(e))}),o},Persistence.prototype._findColumn=function(e,t){var i=t.columns?"group":t.field?"field":"object";return e.find(function(e){switch(i){case"group":return e.title===t.title&&e.columns.length===t.columns.length;case"field":return e.field===t.field;case"object":return e===t}})},Persistence.prototype.save=function(e){var t={};switch(e){case"columns":t=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":t=this.table.modules.filter.getFilters();break;case"sort":t=this.validateSorters(this.table.modules.sort.getSort());break;case"group":t=this.getGroupConfig();break;case"page":t=this.getPageConfig()}this.writeFunc&&this.writeFunc(this.id,e,t)},Persistence.prototype.validateSorters=function(e){return e.forEach(function(e){e.column=e.field,delete e.field}),e},Persistence.prototype.getGroupConfig=function(){var e={};return this.config.group&&((!0===this.config.group||this.config.group.groupBy)&&(e.groupBy=this.table.options.groupBy),(!0===this.config.group||this.config.group.groupStartOpen)&&(e.groupStartOpen=this.table.options.groupStartOpen),(!0===this.config.group||this.config.group.groupHeader)&&(e.groupHeader=this.table.options.groupHeader)),e},Persistence.prototype.getPageConfig=function(){var e={};return this.config.page&&((!0===this.config.page||this.config.page.size)&&(e.paginationSize=this.table.modules.page.getPageSize()),(!0===this.config.page||this.config.page.page)&&(e.paginationInitialPage=this.table.modules.page.getPage())),e},Persistence.prototype.parseColumns=function(e){var t=this,i=[],o=["headerContextMenu","headerMenu","contextMenu","clickMenu"];return e.forEach(function(e){var s,n={},r=e.getDefinition();e.isGroup?(n.title=r.title,n.columns=t.parseColumns(e.getColumns())):(n.field=e.getField(),!0===t.config.columns||void 0==t.config.columns?(s=Object.keys(r),s.push("width")):s=t.config.columns,s.forEach(function(t){switch(t){case"width":n.width=e.getWidth();break;case"visible":n.visible=e.visible;break;default:"function"!=typeof r[t]&&-1===o.indexOf(t)&&(n[t]=r[t])}})),i.push(n)}),i},Persistence.prototype.readers={local:function(e,t){var i=localStorage.getItem(e+"-"+t);return!!i&&JSON.parse(i)},cookie:function(e,t){var i,o,s=document.cookie,n=e+"-"+t,r=s.indexOf(n+"=");return r>-1&&(s=s.substr(r),i=s.indexOf(";"),i>-1&&(s=s.substr(0,i)),o=s.replace(n+"=","")),!!o&&JSON.parse(o)}},Persistence.prototype.writers={local:function(e,t,i){localStorage.setItem(e+"-"+t,JSON.stringify(i))},cookie:function(e,t,i){var o=new Date;o.setDate(o.getDate()+1e4),document.cookie=e+"-"+t+"="+JSON.stringify(i)+"; expires="+o.toUTCString()}},Tabulator.prototype.registerModule("persistence",Persistence); \ No newline at end of file +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var Persistence=function(e){this.table=e,this.mode="",this.id="",this.defWatcherBlock=!1,this.config={},this.readFunc=!1,this.writeFunc=!1};Persistence.prototype.localStorageTest=function(){var e="_tabulator_test";try{return window.localStorage.setItem(e,e),window.localStorage.removeItem(e),!0}catch(e){return!1}},Persistence.prototype.initialize=function(){var e,t=this.table.options.persistenceMode,i=this.table.options.persistenceID;this.mode=!0!==t?t:this.localStorageTest()?"local":"cookie",this.table.options.persistenceReaderFunc?"function"==typeof this.table.options.persistenceReaderFunc?this.readFunc=this.table.options.persistenceReaderFunc:this.readers[this.table.options.persistenceReaderFunc]?this.readFunc=this.readers[this.table.options.persistenceReaderFunc]:console.warn("Persistence Read Error - invalid reader set",this.table.options.persistenceReaderFunc):this.readers[this.mode]?this.readFunc=this.readers[this.mode]:console.warn("Persistence Read Error - invalid reader set",this.mode),this.table.options.persistenceWriterFunc?"function"==typeof this.table.options.persistenceWriterFunc?this.writeFunc=this.table.options.persistenceWriterFunc:this.readers[this.table.options.persistenceWriterFunc]?this.writeFunc=this.readers[this.table.options.persistenceWriterFunc]:console.warn("Persistence Write Error - invalid reader set",this.table.options.persistenceWriterFunc):this.writers[this.mode]?this.writeFunc=this.writers[this.mode]:console.warn("Persistence Write Error - invalid writer set",this.mode),this.id="tabulator-"+(i||this.table.element.getAttribute("id")||""),this.config={sort:!0===this.table.options.persistence||this.table.options.persistence.sort,filter:!0===this.table.options.persistence||this.table.options.persistence.filter,group:!0===this.table.options.persistence||this.table.options.persistence.group,page:!0===this.table.options.persistence||this.table.options.persistence.page,columns:!0===this.table.options.persistence?["title","width","visible"]:this.table.options.persistence.columns},this.config.page&&(e=this.retreiveData("page"))&&(void 0===e.paginationSize||!0!==this.config.page&&!this.config.page.size||(this.table.options.paginationSize=e.paginationSize),void 0===e.paginationInitialPage||!0!==this.config.page&&!this.config.page.page||(this.table.options.paginationInitialPage=e.paginationInitialPage)),this.config.group&&(e=this.retreiveData("group"))&&(void 0===e.groupBy||!0!==this.config.group&&!this.config.group.groupBy||(this.table.options.groupBy=e.groupBy),void 0===e.groupStartOpen||!0!==this.config.group&&!this.config.group.groupStartOpen||(this.table.options.groupStartOpen=e.groupStartOpen),void 0===e.groupHeader||!0!==this.config.group&&!this.config.group.groupHeader||(this.table.options.groupHeader=e.groupHeader))},Persistence.prototype.initializeColumn=function(e){var t,i,s=this;this.config.columns&&(this.defWatcherBlock=!0,t=e.getDefinition(),i=!0===this.config.columns?Object.keys(t):this.config.columns,i.forEach(function(e){var i=Object.getOwnPropertyDescriptor(t,e),o=t[e];i&&Object.defineProperty(t,e,{set:function(e){o=e,s.defWatcherBlock||s.save("columns"),i.set&&i.set(e)},get:function(){return i.get&&i.get(),o}})}),this.defWatcherBlock=!1)},Persistence.prototype.load=function(e,t){var i=this.retreiveData(e);return t&&(i=i?this.mergeDefinition(t,i):t),i},Persistence.prototype.retreiveData=function(e){return!!this.readFunc&&this.readFunc(this.id,e)},Persistence.prototype.mergeDefinition=function(e,t){var i=this,s=[];return t=t||[],t.forEach(function(t,o){var n,r=i._findColumn(e,t);r&&(!0===i.config.columns||void 0==i.config.columns?(n=Object.keys(r),n.push("width")):n=i.config.columns,n.forEach(function(e){void 0!==t[e]&&(r[e]=t[e])}),r.columns&&(r.columns=i.mergeDefinition(r.columns,t.columns)),s.push(r))}),e.forEach(function(e,o){i._findColumn(t,e)||(s.length>o?s.splice(o,0,e):s.push(e))}),s},Persistence.prototype._findColumn=function(e,t){var i=t.columns?"group":t.field?"field":"object";return e.find(function(e){switch(i){case"group":return e.title===t.title&&e.columns.length===t.columns.length;case"field":return e.field===t.field;case"object":return e===t}})},Persistence.prototype.save=function(e){var t={};switch(e){case"columns":t=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":t=this.table.modules.filter.getFilters();break;case"sort":t=this.validateSorters(this.table.modules.sort.getSort());break;case"group":t=this.getGroupConfig();break;case"page":t=this.getPageConfig()}this.writeFunc&&this.writeFunc(this.id,e,t)},Persistence.prototype.validateSorters=function(e){return e.forEach(function(e){e.column=e.field,delete e.field}),e},Persistence.prototype.getGroupConfig=function(){return this.config.group&&((!0===this.config.group||this.config.group.groupBy)&&(data.groupBy=this.table.options.groupBy),(!0===this.config.group||this.config.group.groupStartOpen)&&(data.groupStartOpen=this.table.options.groupStartOpen),(!0===this.config.group||this.config.group.groupHeader)&&(data.groupHeader=this.table.options.groupHeader)),data},Persistence.prototype.getPageConfig=function(){var e={};return this.config.page&&((!0===this.config.page||this.config.page.size)&&(e.paginationSize=this.table.modules.page.getPageSize()),(!0===this.config.page||this.config.page.page)&&(e.paginationInitialPage=this.table.modules.page.getPage())),e},Persistence.prototype.parseColumns=function(e){var t=this,i=[];return e.forEach(function(e){var s,o={},n=e.getDefinition();e.isGroup?(o.title=n.title,o.columns=t.parseColumns(e.getColumns())):(o.field=e.getField(),!0===t.config.columns||void 0==t.config.columns?(s=Object.keys(n),s.push("width")):s=t.config.columns,s.forEach(function(t){switch(t){case"width":o.width=e.getWidth();break;case"visible":o.visible=e.visible;break;default:o[t]=n[t]}})),i.push(o)}),i},Persistence.prototype.readers={local:function(e,t){var i=localStorage.getItem(e+"-"+t);return!!i&&JSON.parse(i)},cookie:function(e,t){var i,s,o=document.cookie,n=e+"-"+t,r=o.indexOf(n+"=");return r>-1&&(o=o.substr(r),i=o.indexOf(";"),i>-1&&(o=o.substr(0,i)),s=o.replace(n+"=","")),!!s&&JSON.parse(s)}},Persistence.prototype.writers={local:function(e,t,i){localStorage.setItem(e+"-"+t,JSON.stringify(i))},cookie:function(e,t,i){var s=new Date;s.setDate(s.getDate()+1e4),document.cookie=e+"-"+t+"="+JSON.stringify(i)+"; expires="+s.toUTCString()}},Tabulator.prototype.registerModule("persistence",Persistence); \ No newline at end of file diff --git a/website/js/vendor/tabulator/js/modules/print.js b/admin/js/vendors/tabulator/js/modules/print.js similarity index 96% rename from website/js/vendor/tabulator/js/modules/print.js rename to admin/js/vendors/tabulator/js/modules/print.js index 3ed4835..940f1a9 100644 --- a/website/js/vendor/tabulator/js/modules/print.js +++ b/admin/js/vendors/tabulator/js/modules/print.js @@ -1,4 +1,4 @@ -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var Print = function Print(table) { this.table = table; //hold Tabulator object diff --git a/website/js/vendor/tabulator/js/modules/print.min.js b/admin/js/vendors/tabulator/js/modules/print.min.js similarity index 95% rename from website/js/vendor/tabulator/js/modules/print.min.js rename to admin/js/vendors/tabulator/js/modules/print.min.js index ef6d8b1..b46279c 100644 --- a/website/js/vendor/tabulator/js/modules/print.min.js +++ b/admin/js/vendors/tabulator/js/modules/print.min.js @@ -1,2 +1,2 @@ -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var Print=function(t){this.table=t,this.element=!1,this.manualBlock=!1};Print.prototype.initialize=function(){window.addEventListener("beforeprint",this.replaceTable.bind(this)),window.addEventListener("afterprint",this.cleanup.bind(this))},Print.prototype.replaceTable=function(){this.manualBlock||(this.element=document.createElement("div"),this.element.classList.add("tabulator-print-table"),this.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig,this.table.options.printStyled,this.table.options.printRowRange,"print")),this.table.element.style.display="none",this.table.element.parentNode.insertBefore(this.element,this.table.element))},Print.prototype.cleanup=function(){document.body.classList.remove("tabulator-print-fullscreen-hide"),this.element&&this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.table.element.style.display="")},Print.prototype.printFullscreen=function(t,e,i){var n,l,o=window.scrollX,a=window.scrollY,s=document.createElement("div"),r=document.createElement("div"),p=this.table.modules.export.genereateTable(void 0!==i?i:this.table.options.printConfig,void 0!==e?e:this.table.options.printStyled,t,"print");this.manualBlock=!0,this.element=document.createElement("div"),this.element.classList.add("tabulator-print-fullscreen"),this.table.options.printHeader&&(s.classList.add("tabulator-print-header"),n="function"==typeof this.table.options.printHeader?this.table.options.printHeader.call(this.table):this.table.options.printHeader,"string"==typeof n?s.innerHTML=n:s.appendChild(n),this.element.appendChild(s)),this.element.appendChild(p),this.table.options.printFooter&&(r.classList.add("tabulator-print-footer"),l="function"==typeof this.table.options.printFooter?this.table.options.printFooter.call(this.table):this.table.options.printFooter,"string"==typeof l?r.innerHTML=l:r.appendChild(l),this.element.appendChild(r)),document.body.classList.add("tabulator-print-fullscreen-hide"),document.body.appendChild(this.element),this.table.options.printFormatter&&this.table.options.printFormatter(this.element,p),window.print(),this.cleanup(),window.scrollTo(o,a),this.manualBlock=!1},Tabulator.prototype.registerModule("print",Print); \ No newline at end of file diff --git a/website/js/vendor/tabulator/js/modules/reactive_data.js b/admin/js/vendors/tabulator/js/modules/reactive_data.js similarity index 73% rename from website/js/vendor/tabulator/js/modules/reactive_data.js rename to admin/js/vendors/tabulator/js/modules/reactive_data.js index def9edc..eb73971 100644 --- a/website/js/vendor/tabulator/js/modules/reactive_data.js +++ b/admin/js/vendors/tabulator/js/modules/reactive_data.js @@ -1,4 +1,4 @@ -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var ReactiveData = function ReactiveData(table) { this.table = table; //hold Tabulator object @@ -172,7 +172,8 @@ ReactiveData.prototype.unwatchData = function () { }; ReactiveData.prototype.watchRow = function (row) { - var data = row.getData(); + var self = this, + data = row.getData(); this.blocked = true; @@ -180,98 +181,9 @@ ReactiveData.prototype.watchRow = function (row) { this.watchKey(row, data, key); } - if (this.table.options.dataTree) { - this.watchTreeChildren(row); - } - this.blocked = false; }; -ReactiveData.prototype.watchTreeChildren = function (row) { - var self = this, - childField = row.getData()[this.table.options.dataTreeChildField], - origFuncs = {}; - - function rebuildTree() { - self.table.modules.dataTree.initializeRow(row); - self.table.modules.dataTree.layoutRow(row); - self.table.rowManager.refreshActiveData("tree", false, true); - } - - if (childField) { - - origFuncs.push = childField.push; - - Object.defineProperty(childField, "push", { - enumerable: false, - configurable: true, - value: function value() { - var result = origFuncs.push.apply(childField, arguments); - - rebuildTree(); - - return result; - } - }); - - origFuncs.unshift = childField.unshift; - - Object.defineProperty(childField, "unshift", { - enumerable: false, - configurable: true, - value: function value() { - var result = origFuncs.unshift.apply(childField, arguments); - - rebuildTree(); - - return result; - } - }); - - origFuncs.shift = childField.shift; - - Object.defineProperty(childField, "shift", { - enumerable: false, - configurable: true, - value: function value() { - var result = origFuncs.shift.call(childField); - - rebuildTree(); - - return result; - } - }); - - origFuncs.pop = childField.pop; - - Object.defineProperty(childField, "pop", { - enumerable: false, - configurable: true, - value: function value() { - var result = origFuncs.pop.call(childField); - - rebuildTree(); - - return result; - } - }); - - origFuncs.splice = childField.splice; - - Object.defineProperty(childField, "splice", { - enumerable: false, - configurable: true, - value: function value() { - var result = origFuncs.splice.apply(childField, arguments); - - rebuildTree(); - - return result; - } - }); - } -}; - ReactiveData.prototype.watchKey = function (row, data, key) { var self = this, props = Object.getOwnPropertyDescriptor(data, key), diff --git a/admin/js/vendors/tabulator/js/modules/reactive_data.min.js b/admin/js/vendors/tabulator/js/modules/reactive_data.min.js new file mode 100644 index 0000000..c5dc047 --- /dev/null +++ b/admin/js/vendors/tabulator/js/modules/reactive_data.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var ReactiveData=function(e){this.table=e,this.data=!1,this.blocked=!1,this.origFuncs={},this.currentVersion=0};ReactiveData.prototype.watchData=function(e){var t,a=this;this.currentVersion++,t=this.currentVersion,a.unwatchData(),a.data=e,a.origFuncs.push=e.push,Object.defineProperty(a.data,"push",{enumerable:!1,configurable:!0,value:function(){var r=Array.from(arguments);return a.blocked||t!==a.currentVersion||r.forEach(function(e){a.table.rowManager.addRowActual(e,!1)}),a.origFuncs.push.apply(e,arguments)}}),a.origFuncs.unshift=e.unshift,Object.defineProperty(a.data,"unshift",{enumerable:!1,configurable:!0,value:function(){var r=Array.from(arguments);return a.blocked||t!==a.currentVersion||r.forEach(function(e){a.table.rowManager.addRowActual(e,!0)}),a.origFuncs.unshift.apply(e,arguments)}}),a.origFuncs.shift=e.shift,Object.defineProperty(a.data,"shift",{enumerable:!1,configurable:!0,value:function(){var r;return a.blocked||t!==a.currentVersion||a.data.length&&(r=a.table.rowManager.getRowFromDataObject(a.data[0]))&&r.deleteActual(),a.origFuncs.shift.call(e)}}),a.origFuncs.pop=e.pop,Object.defineProperty(a.data,"pop",{enumerable:!1,configurable:!0,value:function(){var r;return a.blocked||t!==a.currentVersion||a.data.length&&(r=a.table.rowManager.getRowFromDataObject(a.data[a.data.length-1]))&&r.deleteActual(),a.origFuncs.pop.call(e)}}),a.origFuncs.splice=e.splice,Object.defineProperty(a.data,"splice",{enumerable:!1,configurable:!0,value:function(){var r,o=Array.from(arguments),n=o[0]<0?e.length+o[0]:o[0],c=o[1],i=!!o[2]&&o.slice(2);if(!a.blocked&&t===a.currentVersion){if(i&&(r=!!e[n]&&a.table.rowManager.getRowFromDataObject(e[n]),r?i.forEach(function(e){a.table.rowManager.addRowActual(e,!0,r,!0)}):(i=i.slice().reverse(),i.forEach(function(e){a.table.rowManager.addRowActual(e,!0,!1,!0)}))),0!==c){var u=e.slice(n,void 0===o[1]?o[1]:n+c);u.forEach(function(e,t){var r=a.table.rowManager.getRowFromDataObject(e);r&&r.deleteActual(t!==u.length-1)})}(i||0!==c)&&a.table.rowManager.reRenderInPosition()}return a.origFuncs.splice.apply(e,arguments)}})},ReactiveData.prototype.unwatchData=function(){if(!1!==this.data)for(var e in this.origFuncs)Object.defineProperty(this.data,e,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})},ReactiveData.prototype.watchRow=function(e){var t=e.getData();this.blocked=!0;for(var a in t)this.watchKey(e,t,a);this.blocked=!1},ReactiveData.prototype.watchKey=function(e,t,a){var r=this,o=Object.getOwnPropertyDescriptor(t,a),n=t[a],c=this.currentVersion;Object.defineProperty(t,a,{set:function(t){if(n=t,!r.blocked&&c===r.currentVersion){var i={};i[a]=t,e.updateData(i)}o.set&&o.set(t)},get:function(){return o.get&&o.get(),n}})},ReactiveData.prototype.unwatchRow=function(e){var t=e.getData();for(var a in t)Object.defineProperty(t,a,{value:t[a]})},ReactiveData.prototype.block=function(){this.blocked=!0},ReactiveData.prototype.unblock=function(){this.blocked=!1},Tabulator.prototype.registerModule("reactiveData",ReactiveData); \ No newline at end of file diff --git a/website/js/vendor/tabulator/js/modules/resize_columns.js b/admin/js/vendors/tabulator/js/modules/resize_columns.js similarity index 92% rename from website/js/vendor/tabulator/js/modules/resize_columns.js rename to admin/js/vendors/tabulator/js/modules/resize_columns.js index bf2b04a..753c02b 100644 --- a/website/js/vendor/tabulator/js/modules/resize_columns.js +++ b/admin/js/vendors/tabulator/js/modules/resize_columns.js @@ -1,4 +1,4 @@ -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var ResizeColumns = function ResizeColumns(table) { this.table = table; //hold Tabulator object @@ -111,15 +111,7 @@ ResizeColumns.prototype._mouseDown = function (e, column, handle) { function mouseMove(e) { // self.table.columnManager.tempScrollBlock(); - if (self.table.rtl) { - column.setWidth(self.startWidth - ((typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX) - self.startX)); - } else { - column.setWidth(self.startWidth + ((typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX) - self.startX)); - } - - if (self.table.options.virtualDomHoz) { - self.table.vdomHoz.reinitialize(true); - } + column.setWidth(self.startWidth + ((typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX) - self.startX)); if (!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight) { column.checkCellHeights(); diff --git a/admin/js/vendors/tabulator/js/modules/resize_columns.min.js b/admin/js/vendors/tabulator/js/modules/resize_columns.min.js new file mode 100644 index 0000000..7ae0e38 --- /dev/null +++ b/admin/js/vendors/tabulator/js/modules/resize_columns.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var ResizeColumns=function(e){this.table=e,this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.handle=null,this.prevHandle=null};ResizeColumns.prototype.initializeColumn=function(e,t,n){var o=this,i=!1,s=this.table.options.resizableColumns;if("header"===e&&(i="textarea"==t.definition.formatter||t.definition.variableHeight,t.modules.resize={variableHeight:i}),!0===s||s==e){var a=document.createElement("div");a.className="tabulator-col-resize-handle";var l=document.createElement("div");l.className="tabulator-col-resize-handle prev",a.addEventListener("click",function(e){e.stopPropagation()});var r=function(e){var n=t.getLastColumn();n&&o._checkResizability(n)&&(o.startColumn=t,o._mouseDown(e,n,a))};a.addEventListener("mousedown",r),a.addEventListener("touchstart",r,{passive:!0}),a.addEventListener("dblclick",function(e){var n=t.getLastColumn();n&&o._checkResizability(n)&&(e.stopPropagation(),n.reinitializeWidth(!0))}),l.addEventListener("click",function(e){e.stopPropagation()});var d=function(e){var n,i,s;(n=t.getFirstColumn())&&(i=o.table.columnManager.findColumnIndex(n),(s=i>0&&o.table.columnManager.getColumnByIndex(i-1))&&o._checkResizability(s)&&(o.startColumn=t,o._mouseDown(e,s,l)))};l.addEventListener("mousedown",d),l.addEventListener("touchstart",d,{passive:!0}),l.addEventListener("dblclick",function(e){var n,i,s;(n=t.getFirstColumn())&&(i=o.table.columnManager.findColumnIndex(n),(s=i>0&&o.table.columnManager.getColumnByIndex(i-1))&&o._checkResizability(s)&&(e.stopPropagation(),s.reinitializeWidth(!0)))}),n.appendChild(a),n.appendChild(l)}},ResizeColumns.prototype._checkResizability=function(e){return void 0!==e.definition.resizable?e.definition.resizable:this.table.options.resizableColumns},ResizeColumns.prototype._mouseDown=function(e,t,n){function o(e){t.setWidth(s.startWidth+((void 0===e.screenX?e.touches[0].screenX:e.screenX)-s.startX)),!s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights()}function i(e){s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!1),s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights(),document.body.removeEventListener("mouseup",i),document.body.removeEventListener("mousemove",o),n.removeEventListener("touchmove",o),n.removeEventListener("touchend",i),s.table.element.classList.remove("tabulator-block-select"),s.table.options.persistence&&s.table.modExists("persistence",!0)&&s.table.modules.persistence.config.columns&&s.table.modules.persistence.save("columns"),s.table.options.columnResized.call(s.table,t.getComponent())}var s=this;s.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!0),s.startX=void 0===e.screenX?e.touches[0].screenX:e.screenX,s.startWidth=t.getWidth(),document.body.addEventListener("mousemove",o),document.body.addEventListener("mouseup",i),n.addEventListener("touchmove",o,{passive:!0}),n.addEventListener("touchend",i)},Tabulator.prototype.registerModule("resizeColumns",ResizeColumns); \ No newline at end of file diff --git a/website/js/vendor/tabulator/js/modules/resize_rows.js b/admin/js/vendors/tabulator/js/modules/resize_rows.js similarity index 96% rename from website/js/vendor/tabulator/js/modules/resize_rows.js rename to admin/js/vendors/tabulator/js/modules/resize_rows.js index d00b54a..8d39fcd 100644 --- a/website/js/vendor/tabulator/js/modules/resize_rows.js +++ b/admin/js/vendors/tabulator/js/modules/resize_rows.js @@ -1,4 +1,4 @@ -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var ResizeRows = function ResizeRows(table) { this.table = table; //hold Tabulator object diff --git a/website/js/vendor/tabulator/js/modules/resize_rows.min.js b/admin/js/vendors/tabulator/js/modules/resize_rows.min.js similarity index 95% rename from website/js/vendor/tabulator/js/modules/resize_rows.min.js rename to admin/js/vendors/tabulator/js/modules/resize_rows.min.js index 9167a11..fb0db00 100644 --- a/website/js/vendor/tabulator/js/modules/resize_rows.min.js +++ b/admin/js/vendors/tabulator/js/modules/resize_rows.min.js @@ -1,2 +1,2 @@ -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var ResizeRows=function(e){this.table=e,this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null};ResizeRows.prototype.initializeRow=function(e){var t=this,o=e.getElement(),s=document.createElement("div");s.className="tabulator-row-resize-handle";var n=document.createElement("div");n.className="tabulator-row-resize-handle prev",s.addEventListener("click",function(e){e.stopPropagation()});var a=function(o){t.startRow=e,t._mouseDown(o,e,s)};s.addEventListener("mousedown",a),s.addEventListener("touchstart",a,{passive:!0}),n.addEventListener("click",function(e){e.stopPropagation()});var r=function(o){var s=t.table.rowManager.prevDisplayRow(e);s&&(t.startRow=s,t._mouseDown(o,s,n))};n.addEventListener("mousedown",r),n.addEventListener("touchstart",r,{passive:!0}),o.appendChild(s),o.appendChild(n)},ResizeRows.prototype._mouseDown=function(e,t,o){function s(e){t.setHeight(a.startHeight+((void 0===e.screenY?e.touches[0].screenY:e.screenY)-a.startY))}function n(e){document.body.removeEventListener("mouseup",s),document.body.removeEventListener("mousemove",s),o.removeEventListener("touchmove",s),o.removeEventListener("touchend",n),a.table.element.classList.remove("tabulator-block-select"),a.table.options.rowResized.call(this.table,t.getComponent())}var a=this;a.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),a.startY=void 0===e.screenY?e.touches[0].screenY:e.screenY,a.startHeight=t.getHeight(),document.body.addEventListener("mousemove",s),document.body.addEventListener("mouseup",n),o.addEventListener("touchmove",s,{passive:!0}),o.addEventListener("touchend",n)},Tabulator.prototype.registerModule("resizeRows",ResizeRows); \ No newline at end of file diff --git a/website/js/vendor/tabulator/js/modules/resize_table.js b/admin/js/vendors/tabulator/js/modules/resize_table.js similarity index 88% rename from website/js/vendor/tabulator/js/modules/resize_table.js rename to admin/js/vendors/tabulator/js/modules/resize_table.js index 9f796ca..1286641 100644 --- a/website/js/vendor/tabulator/js/modules/resize_table.js +++ b/admin/js/vendors/tabulator/js/modules/resize_table.js @@ -1,4 +1,4 @@ -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var ResizeTable = function ResizeTable(table) { this.table = table; //hold Tabulator object @@ -47,10 +47,6 @@ ResizeTable.prototype.initialize = function (row) { _this.containerWidth = table.element.parentNode.clientWidth; } - if (table.options.virtualDomHoz) { - table.vdomHoz.reinitialize(true); - } - table.redraw(); } } @@ -73,10 +69,8 @@ ResizeTable.prototype.initialize = function (row) { _this.containerWidth = nodeWidth; _this.tableHeight = table.element.clientHeight; _this.tableWidth = table.element.clientWidth; - } - if (table.options.virtualDomHoz) { - table.vdomHoz.reinitialize(true); + table.redraw(); } table.redraw(); @@ -88,10 +82,6 @@ ResizeTable.prototype.initialize = function (row) { } else { this.binding = function () { if (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) { - if (table.options.virtualDomHoz) { - table.vdomHoz.reinitialize(true); - } - table.redraw(); } }; diff --git a/admin/js/vendors/tabulator/js/modules/resize_table.min.js b/admin/js/vendors/tabulator/js/modules/resize_table.min.js new file mode 100644 index 0000000..e992d75 --- /dev/null +++ b/admin/js/vendors/tabulator/js/modules/resize_table.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var ResizeTable=function(e){this.table=e,this.binding=!1,this.observer=!1,this.containerObserver=!1,this.tableHeight=0,this.tableWidth=0,this.containerHeight=0,this.containerWidth=0,this.autoResize=!1};ResizeTable.prototype.initialize=function(e){var t,i=this,n=this.table;this.tableHeight=n.element.clientHeight,this.tableWidth=n.element.clientWidth,n.element.parentNode&&(this.containerHeight=n.element.parentNode.clientHeight,this.containerWidth=n.element.parentNode.clientWidth),"undefined"!=typeof ResizeObserver&&"virtual"===n.rowManager.getRenderMode()?(this.autoResize=!0,this.observer=new ResizeObserver(function(e){if(!n.browserMobile||n.browserMobile&&!n.modules.edit.currentCell){var t=Math.floor(e[0].contentRect.height),r=Math.floor(e[0].contentRect.width);i.tableHeight==t&&i.tableWidth==r||(i.tableHeight=t,i.tableWidth=r,n.element.parentNode&&(i.containerHeight=n.element.parentNode.clientHeight,i.containerWidth=n.element.parentNode.clientWidth),n.redraw())}}),this.observer.observe(n.element),t=window.getComputedStyle(n.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(t.getPropertyValue("max-height")||t.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver(function(e){if(!n.browserMobile||n.browserMobile&&!n.modules.edit.currentCell){var t=Math.floor(e[0].contentRect.height),r=Math.floor(e[0].contentRect.width);i.containerHeight==t&&i.containerWidth==r||(i.containerHeight=t,i.containerWidth=r,i.tableHeight=n.element.clientHeight,i.tableWidth=n.element.clientWidth,n.redraw()),n.redraw()}}),this.containerObserver.observe(this.table.element.parentNode))):(this.binding=function(){(!n.browserMobile||n.browserMobile&&!n.modules.edit.currentCell)&&n.redraw()},window.addEventListener("resize",this.binding))},ResizeTable.prototype.clearBindings=function(e){this.binding&&window.removeEventListener("resize",this.binding),this.observer&&this.observer.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)},Tabulator.prototype.registerModule("resizeTable",ResizeTable); \ No newline at end of file diff --git a/website/js/vendor/tabulator/js/modules/responsive_layout.js b/admin/js/vendors/tabulator/js/modules/responsive_layout.js similarity index 99% rename from website/js/vendor/tabulator/js/modules/responsive_layout.js rename to admin/js/vendors/tabulator/js/modules/responsive_layout.js index 67fa6a3..329f2a6 100644 --- a/website/js/vendor/tabulator/js/modules/responsive_layout.js +++ b/admin/js/vendors/tabulator/js/modules/responsive_layout.js @@ -1,4 +1,4 @@ -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var ResponsiveLayout = function ResponsiveLayout(table) { this.table = table; //hold Tabulator object diff --git a/website/js/vendor/tabulator/js/modules/responsive_layout.min.js b/admin/js/vendors/tabulator/js/modules/responsive_layout.min.js similarity index 98% rename from website/js/vendor/tabulator/js/modules/responsive_layout.min.js rename to admin/js/vendors/tabulator/js/modules/responsive_layout.min.js index 661f21a..4ef6538 100644 --- a/website/js/vendor/tabulator/js/modules/responsive_layout.min.js +++ b/admin/js/vendors/tabulator/js/modules/responsive_layout.min.js @@ -1,2 +1,2 @@ -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var ResponsiveLayout=function(e){this.table=e,this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0,this.collapseHandleColumn=!1};ResponsiveLayout.prototype.initialize=function(){var e=this,t=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.table.columnManager.columnsByIndex.forEach(function(o,n){o.modules.responsive&&o.modules.responsive.order&&o.modules.responsive.visible&&(o.modules.responsive.index=n,t.push(o),o.visible||"collapse"!==e.mode||e.hiddenColumns.push(o))}),t=t.reverse(),t=t.sort(function(e,t){return t.modules.responsive.order-e.modules.responsive.order||t.modules.responsive.index-e.modules.responsive.index}),this.columns=t,"collapse"===this.mode&&this.generateCollapsedContent();for(var o=this.table.columnManager.columnsByIndex,n=Array.isArray(o),s=0,o=n?o:o[Symbol.iterator]();;){var i;if(n){if(s>=o.length)break;i=o[s++]}else{if(s=o.next(),s.done)break;i=s.value}var l=i;if("responsiveCollapse"==l.definition.formatter){this.collapseHandleColumn=l;break}}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())},ResponsiveLayout.prototype.initializeColumn=function(e){var t=e.getDefinition();e.modules.responsive={order:void 0===t.responsive?1:t.responsive,visible:!1!==t.visible}},ResponsiveLayout.prototype.initializeRow=function(e){var t;"calc"!==e.type&&(t=document.createElement("div"),t.classList.add("tabulator-responsive-collapse"),e.modules.responsiveLayout={element:t,open:this.collapseStartOpen},this.collapseStartOpen||(t.style.display="none"))},ResponsiveLayout.prototype.layoutRow=function(e){var t=e.getElement();e.modules.responsiveLayout&&(t.appendChild(e.modules.responsiveLayout.element),this.generateCollapsedRowContent(e))},ResponsiveLayout.prototype.updateColumnVisibility=function(e,t){e.modules.responsive&&(e.modules.responsive.visible=t,this.initialize())},ResponsiveLayout.prototype.hideColumn=function(e){var t=this.hiddenColumns.length;e.hide(!1,!0),"collapse"===this.mode&&(this.hiddenColumns.unshift(e),this.generateCollapsedContent(),this.collapseHandleColumn&&!t&&this.collapseHandleColumn.show())},ResponsiveLayout.prototype.showColumn=function(e){var t;e.show(!1,!0),e.setWidth(e.getWidth()),"collapse"===this.mode&&(t=this.hiddenColumns.indexOf(e),t>-1&&this.hiddenColumns.splice(t,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())},ResponsiveLayout.prototype.update=function(){for(var e=this,t=!0;t;){var o="fitColumns"==e.table.modules.layout.getMode()?e.table.columnManager.getFlexBaseWidth():e.table.columnManager.getWidth(),n=(e.table.options.headerVisible?e.table.columnManager.element.clientWidth:e.table.element.clientWidth)-o;if(n<0){var s=e.columns[e.index];s?(e.hideColumn(s),e.index++):t=!1}else{var i=e.columns[e.index-1];i&&n>0&&n>=i.getWidth()?(e.showColumn(i),e.index--):t=!1}e.table.rowManager.activeRowsCount||e.table.rowManager.renderEmptyScroll()}},ResponsiveLayout.prototype.generateCollapsedContent=function(){var e=this;this.table.rowManager.getDisplayRows().forEach(function(t){e.generateCollapsedRowContent(t)})},ResponsiveLayout.prototype.generateCollapsedRowContent=function(e){var t,o;if(e.modules.responsiveLayout){for(t=e.modules.responsiveLayout.element;t.firstChild;)t.removeChild(t.firstChild);o=this.collapseFormatter(this.generateCollapsedRowData(e)),o&&t.appendChild(o)}},ResponsiveLayout.prototype.generateCollapsedRowData=function(e){var t,o=this,n=e.getData(),s=[];return this.hiddenColumns.forEach(function(i){var l=i.getFieldValue(n);i.definition.title&&i.field&&(i.modules.format&&o.table.options.responsiveLayoutCollapseUseFormatters?(t={value:!1,data:{},getValue:function(){return l},getData:function(){return n},getElement:function(){return document.createElement("div")},getRow:function(){return e.getComponent()},getColumn:function(){return i.getComponent()}},s.push({title:i.definition.title,value:i.modules.format.formatter.call(o.table.modules.format,t,i.modules.format.params)})):s.push({title:i.definition.title,value:l}))}),s},ResponsiveLayout.prototype.formatCollapsedData=function(e){var t=document.createElement("table"),o="";return e.forEach(function(e){var t=document.createElement("div");e.value instanceof Node&&(t.appendChild(e.value),e.value=t.innerHTML),o+=""+e.title+""+e.value+""}),t.innerHTML=o,Object.keys(e).length?t:""},Tabulator.prototype.registerModule("responsiveLayout",ResponsiveLayout); \ No newline at end of file diff --git a/website/js/vendor/tabulator/js/modules/select_row.js b/admin/js/vendors/tabulator/js/modules/select_row.js similarity index 99% rename from website/js/vendor/tabulator/js/modules/select_row.js rename to admin/js/vendors/tabulator/js/modules/select_row.js index 8ddf0b8..2869429 100644 --- a/website/js/vendor/tabulator/js/modules/select_row.js +++ b/admin/js/vendors/tabulator/js/modules/select_row.js @@ -1,6 +1,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var SelectRow = function SelectRow(table) { this.table = table; //hold Tabulator object diff --git a/website/js/vendor/tabulator/js/modules/select_row.min.js b/admin/js/vendors/tabulator/js/modules/select_row.min.js similarity index 98% rename from website/js/vendor/tabulator/js/modules/select_row.min.js rename to admin/js/vendors/tabulator/js/modules/select_row.min.js index 9964b56..488d7e6 100644 --- a/website/js/vendor/tabulator/js/modules/select_row.min.js +++ b/admin/js/vendors/tabulator/js/modules/select_row.min.js @@ -1,2 +1,2 @@ -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},SelectRow=function(e){this.table=e,this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],this.headerCheckboxElement=null};SelectRow.prototype.clearSelectionData=function(e){this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],e||this._rowSelectionChanged()},SelectRow.prototype.initializeRow=function(e){var t=this,o=e.getElement(),l=function e(){setTimeout(function(){t.selecting=!1},50),document.body.removeEventListener("mouseup",e)};e.modules.select={selected:!1},t.table.options.selectableCheck.call(this.table,e.getComponent())?(o.classList.add("tabulator-selectable"),o.classList.remove("tabulator-unselectable"),t.table.options.selectable&&"highlight"!=t.table.options.selectable&&("click"===t.table.options.selectableRangeMode?o.addEventListener("click",function(o){if(o.shiftKey){t.table._clearSelection(),t.lastClickedRow=t.lastClickedRow||e;var l=t.table.rowManager.getDisplayRowIndex(t.lastClickedRow),s=t.table.rowManager.getDisplayRowIndex(e),c=l<=s?l:s,i=l>=s?l:s,n=t.table.rowManager.getDisplayRows().slice(0),a=n.splice(c,i-c+1);o.ctrlKey||o.metaKey?(a.forEach(function(o){o!==t.lastClickedRow&&(!0===t.table.options.selectable||t.isRowSelected(e)?t.toggleRow(o):t.selectedRows.lengtht.table.options.selectable&&(a=a.slice(0,t.table.options.selectable)),t.selectRows(a)),t.table._clearSelection()}else o.ctrlKey||o.metaKey?(t.toggleRow(e),t.lastClickedRow=e):(t.deselectRows(void 0,!0),t.selectRows(e),t.lastClickedRow=e)}):(o.addEventListener("click",function(o){t.table.modExists("edit")&&t.table.modules.edit.getCurrentCell()||t.table._clearSelection(),t.selecting||t.toggleRow(e)}),o.addEventListener("mousedown",function(o){if(o.shiftKey)return t.table._clearSelection(),t.selecting=!0,t.selectPrev=[],document.body.addEventListener("mouseup",l),document.body.addEventListener("keyup",l),t.toggleRow(e),!1}),o.addEventListener("mouseenter",function(o){t.selecting&&(t.table._clearSelection(),t.toggleRow(e),t.selectPrev[1]==e&&t.toggleRow(t.selectPrev[0]))}),o.addEventListener("mouseout",function(o){t.selecting&&(t.table._clearSelection(),t.selectPrev.unshift(e))})))):(o.classList.add("tabulator-unselectable"),o.classList.remove("tabulator-selectable"))},SelectRow.prototype.toggleRow=function(e){this.table.options.selectableCheck.call(this.table,e.getComponent())&&(e.modules.select&&e.modules.select.selected?this._deselectRow(e):this._selectRow(e))},SelectRow.prototype.selectRows=function(e){var t,o=this;switch(void 0===e?"undefined":_typeof(e)){case"undefined":this.table.rowManager.rows.forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged();break;case"string":t=this.table.rowManager.findRow(e),t?this._selectRow(t,!0,!0):this.table.rowManager.getRows(e).forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged();break;default:Array.isArray(e)?(e.forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged()):this._selectRow(e,!1,!0)}},SelectRow.prototype._selectRow=function(e,t,o){if(!isNaN(this.table.options.selectable)&&!0!==this.table.options.selectable&&!o&&this.selectedRows.length>=this.table.options.selectable){if(!this.table.options.selectableRollingSelection)return!1;this._deselectRow(this.selectedRows[0])}var l=this.table.rowManager.findRow(e);l?-1==this.selectedRows.indexOf(l)&&(l.modules.select||(l.modules.select={}),l.modules.select.selected=!0,l.modules.select.checkboxEl&&(l.modules.select.checkboxEl.checked=!0),l.getElement().classList.add("tabulator-selected"),this.selectedRows.push(l),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(l,!0),t||this.table.options.rowSelected.call(this.table,l.getComponent()),this._rowSelectionChanged(t)):t||console.warn("Selection Error - No such row found, ignoring selection:"+e)},SelectRow.prototype.isRowSelected=function(e){return-1!==this.selectedRows.indexOf(e)},SelectRow.prototype.deselectRows=function(e,t){var o,l=this;if(void 0===e){o=l.selectedRows.length;for(var s=0;s-1&&(s.modules.select||(s.modules.select={}),s.modules.select.selected=!1,s.modules.select.checkboxEl&&(s.modules.select.checkboxEl.checked=!1),s.getElement().classList.remove("tabulator-selected"),l.selectedRows.splice(o,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(s,!1),t||l.table.options.rowDeselected.call(this.table,s.getComponent()),l._rowSelectionChanged(t)):t||console.warn("Deselection Error - No such row found, ignoring selection:"+e)},SelectRow.prototype.getSelectedData=function(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getData())}),e},SelectRow.prototype.getSelectedRows=function(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getComponent())}),e},SelectRow.prototype._rowSelectionChanged=function(e){this.headerCheckboxElement&&(0===this.selectedRows.length?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),e||this.table.options.rowSelectionChanged.call(this.table,this.getSelectedData(),this.getSelectedRows())},SelectRow.prototype.registerRowSelectCheckbox=function(e,t){e._row.modules.select||(e._row.modules.select={}),e._row.modules.select.checkboxEl=t},SelectRow.prototype.registerHeaderSelectCheckbox=function(e){this.headerCheckboxElement=e},SelectRow.prototype.childRowSelection=function(e,t){var o=this.table.modules.dataTree.getChildren(e);if(t)for(var l=o,s=Array.isArray(l),c=0,l=s?l:l[Symbol.iterator]();;){var i;if(s){if(c>=l.length)break;i=l[c++]}else{if(c=l.next(),c.done)break;i=c.value}var n=i;this._selectRow(n,!0)}else for(var a=o,r=Array.isArray(a),d=0,a=r?a:a[Symbol.iterator]();;){var h;if(r){if(d>=a.length)break;h=a[d++]}else{if(d=a.next(),d.done)break;h=d.value}var w=h;this._deselectRow(w,!0)}},Tabulator.prototype.registerModule("selectRow",SelectRow); \ No newline at end of file diff --git a/website/js/vendor/tabulator/js/modules/sort.js b/admin/js/vendors/tabulator/js/modules/sort.js similarity index 97% rename from website/js/vendor/tabulator/js/modules/sort.js rename to admin/js/vendors/tabulator/js/modules/sort.js index beba8fa..2422968 100644 --- a/website/js/vendor/tabulator/js/modules/sort.js +++ b/admin/js/vendors/tabulator/js/modules/sort.js @@ -1,6 +1,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var Sort = function Sort(table) { this.table = table; //hold Tabulator object @@ -43,19 +43,10 @@ Sort.prototype.initializeColumn = function (column, content) { colEl.classList.add("tabulator-sortable"); arrowEl = document.createElement("div"); - arrowEl.classList.add("tabulator-col-sorter"); - - if (_typeof(this.table.options.headerSortElement) == "object") { - arrowEl.appendChild(this.table.options.headerSortElement); - } else { - arrowEl.innerHTML = this.table.options.headerSortElement; - } - + arrowEl.classList.add("tabulator-arrow"); //create sorter arrow content.appendChild(arrowEl); - column.modules.sort.element = arrowEl; - //sort on click colEl.addEventListener("click", function (e) { var dir = "", diff --git a/admin/js/vendors/tabulator/js/modules/sort.min.js b/admin/js/vendors/tabulator/js/modules/sort.min.js new file mode 100644 index 0000000..d0b4cb0 --- /dev/null +++ b/admin/js/vendors/tabulator/js/modules/sort.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Sort=function(t){this.table=t,this.sortList=[],this.changed=!1};Sort.prototype.initializeColumn=function(t,e){var r,o,n=this,i=!1;switch(_typeof(t.definition.sorter)){case"string":n.sorters[t.definition.sorter]?i=n.sorters[t.definition.sorter]:console.warn("Sort Error - No such sorter found: ",t.definition.sorter);break;case"function":i=t.definition.sorter}t.modules.sort={sorter:i,dir:"none",params:t.definition.sorterParams||{},startingDir:t.definition.headerSortStartingDir||"asc",tristate:void 0!==t.definition.headerSortTristate?t.definition.headerSortTristate:this.table.options.headerSortTristate},(void 0===t.definition.headerSort?!1!==this.table.options.headerSort:!1!==t.definition.headerSort)&&(r=t.getElement(),r.classList.add("tabulator-sortable"),o=document.createElement("div"),o.classList.add("tabulator-arrow"),e.appendChild(o),r.addEventListener("click",function(e){var r="",o=[],i=!1;if(t.modules.sort){if(t.modules.sort.tristate)r="none"==t.modules.sort.dir?t.modules.sort.startingDir:t.modules.sort.dir==t.modules.sort.startingDir?"asc"==t.modules.sort.dir?"desc":"asc":"none";else switch(t.modules.sort.dir){case"asc":r="desc";break;case"desc":r="asc";break;default:r=t.modules.sort.startingDir}n.table.options.columnHeaderSortMulti&&(e.shiftKey||e.ctrlKey)?(o=n.getSort(),i=o.findIndex(function(e){return e.field===t.getField()}),i>-1?(o[i].dir=r,i!=o.length-1&&(i=o.splice(i,1)[0],"none"!=r&&o.push(i))):"none"!=r&&o.push({column:t,dir:r}),n.setSort(o)):"none"==r?n.clear():n.setSort(t,r),n.table.rowManager.sorterRefresh(!n.sortList.length)}}))},Sort.prototype.hasChanged=function(){var t=this.changed;return this.changed=!1,t},Sort.prototype.getSort=function(){var t=this,e=[];return t.sortList.forEach(function(t){t.column&&e.push({column:t.column.getComponent(),field:t.column.getField(),dir:t.dir})}),e},Sort.prototype.setSort=function(t,e){var r=this,o=[];Array.isArray(t)||(t=[{column:t,dir:e}]),t.forEach(function(t){var e;e=r.table.columnManager.findColumn(t.column),e?(t.column=e,o.push(t),r.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",t.column)}),r.sortList=o,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.sort&&this.table.modules.persistence.save("sort")},Sort.prototype.clear=function(){this.setSort([])},Sort.prototype.findSorter=function(t){var e,r=this.table.rowManager.activeRows[0],o="string";if(r&&(r=r.getData(),t.getField()))switch(e=t.getFieldValue(r),void 0===e?"undefined":_typeof(e)){case"undefined":o="string";break;case"boolean":o="boolean";break;default:isNaN(e)||""===e?e.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(o="alphanum"):o="number"}return this.sorters[o]},Sort.prototype.sort=function(t){var e=this,r=this.table.options.sortOrderReverse?e.sortList.slice().reverse():e.sortList,o=[],n=[];e.table.options.dataSorting&&e.table.options.dataSorting.call(e.table,e.getSort()),e.clearColumnHeaders(),e.table.options.ajaxSorting?r.forEach(function(t,r){e.setColumnHeader(t.column,t.dir)}):(r.forEach(function(t,r){var n=t.column.modules.sort;t.column&&n&&(n.sorter||(n.sorter=e.findSorter(t.column)),t.params="function"==typeof n.params?n.params(t.column.getComponent(),t.dir):n.params,o.push(t)),e.setColumnHeader(t.column,t.dir)}),o.length&&e._sortItems(t,o)),e.table.options.dataSorted&&(t.forEach(function(t){n.push(t.getComponent())}),e.table.options.dataSorted.call(e.table,e.getSort(),n))},Sort.prototype.clearColumnHeaders=function(){this.table.columnManager.getRealColumns().forEach(function(t){t.modules.sort&&(t.modules.sort.dir="none",t.getElement().setAttribute("aria-sort","none"))})},Sort.prototype.setColumnHeader=function(t,e){t.modules.sort.dir=e,t.getElement().setAttribute("aria-sort",e)},Sort.prototype._sortItems=function(t,e){var r=this,o=e.length-1;t.sort(function(t,n){for(var i,s=o;s>=0;s--){var a=e[s];if(0!==(i=r._sortRow(t,n,a.column,a.dir,a.params)))break}return i})},Sort.prototype._sortRow=function(t,e,r,o,n){var i,s,a="asc"==o?t:e,l="asc"==o?e:t;return t=r.getFieldValue(a.getData()),e=r.getFieldValue(l.getData()),t=void 0!==t?t:"",e=void 0!==e?e:"",i=a.getComponent(),s=l.getComponent(),r.modules.sort.sorter.call(this,t,e,i,s,r.getComponent(),o,n)},Sort.prototype.sorters={number:function(t,e,r,o,n,i,s){var a=s.alignEmptyValues,l=s.decimalSeparator||".",u=s.thousandSeparator||",",c=0;if(t=parseFloat(String(t).split(u).join("").split(l).join(".")),e=parseFloat(String(e).split(u).join("").split(l).join(".")),isNaN(t))c=isNaN(e)?0:-1;else{if(!isNaN(e))return t-e;c=1}return("top"===a&&"desc"===i||"bottom"===a&&"asc"===i)&&(c*=-1),c},string:function(t,e,r,o,n,i,s){var a,l=s.alignEmptyValues,u=0;if(t){if(e){switch(_typeof(s.locale)){case"boolean":s.locale&&(a=this.table.modules.localize.getLocale());break;case"string":a=s.locale}return String(t).toLowerCase().localeCompare(String(e).toLowerCase(),a)}u=1}else u=e?-1:0;return("top"===l&&"desc"===i||"bottom"===l&&"asc"===i)&&(u*=-1),u},date:function(t,e,r,o,n,i,s){return s.format||(s.format="DD/MM/YYYY"),this.sorters.datetime.call(this,t,e,r,o,n,i,s)},time:function(t,e,r,o,n,i,s){return s.format||(s.format="HH:mm"),this.sorters.datetime.call(this,t,e,r,o,n,i,s)},datetime:function(t,e,r,o,n,i,s){var a=s.format||"DD/MM/YYYY HH:mm:ss",l=s.alignEmptyValues,u=0;if("undefined"!=typeof moment){if(t=moment(t,a),e=moment(e,a),t.isValid()){if(e.isValid())return t-e;u=1}else u=e.isValid()?-1:0;return("top"===l&&"desc"===i||"bottom"===l&&"asc"===i)&&(u*=-1),u}console.error("Sort Error - 'datetime' sorter is dependant on moment.js")},boolean:function(t,e,r,o,n,i,s){return(!0===t||"true"===t||"True"===t||1===t?1:0)-(!0===e||"true"===e||"True"===e||1===e?1:0)},array:function(t,e,r,o,n,i,s){function a(t){switch(c){case"length":return t.length;case"sum":return t.reduce(function(t,e){return t+e});case"max":return Math.max.apply(null,t);case"min":return Math.min.apply(null,t);case"avg":return t.reduce(function(t,e){return t+e})/t.length}}var l=0,u=0,c=s.type||"length",d=s.alignEmptyValues,m=0;if(Array.isArray(t)){if(Array.isArray(e))return l=t?a(t):0,u=e?a(e):0,l-u;d=1}else d=Array.isArray(e)?-1:0;return("top"===d&&"desc"===i||"bottom"===d&&"asc"===i)&&(m*=-1),m},exists:function(t,e,r,o,n,i,s){return(void 0===t?0:1)-(void 0===e?0:1)},alphanum:function(t,e,r,o,n,i,s){var a,l,u,c,d,m=0,f=/(\d+)|(\D+)/g,p=/\d/,h=s.alignEmptyValues,g=0;if(t||0===t){if(e||0===e){if(isFinite(t)&&isFinite(e))return t-e;if(a=String(t).toLowerCase(),l=String(e).toLowerCase(),a===l)return 0;if(!p.test(a)||!p.test(l))return a>l?1:-1;for(a=a.match(f),l=l.match(f),d=a.length>l.length?l.length:a.length;mc?1:-1;return a.length>l.length}g=1}else g=e||0===e?-1:0;return("top"===h&&"desc"===i||"bottom"===h&&"asc"===i)&&(g*=-1),g}},Tabulator.prototype.registerModule("sort",Sort); \ No newline at end of file diff --git a/website/js/vendor/tabulator/js/modules/validate.js b/admin/js/vendors/tabulator/js/modules/validate.js similarity index 97% rename from website/js/vendor/tabulator/js/modules/validate.js rename to admin/js/vendors/tabulator/js/modules/validate.js index b5708a7..b5f6182 100644 --- a/website/js/vendor/tabulator/js/modules/validate.js +++ b/admin/js/vendors/tabulator/js/modules/validate.js @@ -1,6 +1,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ var Validate = function Validate(table) { this.table = table; @@ -137,7 +137,7 @@ Validate.prototype.clearValidation = function (cell) { if (cell.modules.validate && cell.modules.validate.invalid) { - cell.getElement().classList.remove("tabulator-validation-fail"); + cell.element.classList.remove("tabulator-validation-fail"); cell.modules.validate.invalid = false; invalidIndex = this.invalidCells.indexOf(cell); diff --git a/website/js/vendor/tabulator/js/modules/validate.min.js b/admin/js/vendors/tabulator/js/modules/validate.min.js similarity index 52% rename from website/js/vendor/tabulator/js/modules/validate.min.js rename to admin/js/vendors/tabulator/js/modules/validate.min.js index 917be7a..fc189c0 100644 --- a/website/js/vendor/tabulator/js/modules/validate.min.js +++ b/admin/js/vendors/tabulator/js/modules/validate.min.js @@ -1,2 +1,2 @@ -/* Tabulator v4.8.3 (c) Oliver Folkerd */ -var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Validate=function(t){this.table=t,this.invalidCells=[]};Validate.prototype.initializeColumn=function(t){var i,n=this,e=[];t.definition.validator&&(Array.isArray(t.definition.validator)?t.definition.validator.forEach(function(t){(i=n._extractValidator(t))&&e.push(i)}):(i=this._extractValidator(t.definition.validator))&&e.push(i),t.modules.validate=!!e.length&&e)},Validate.prototype._extractValidator=function(t){var i,n,e;switch(void 0===t?"undefined":_typeof(t)){case"string":return e=t.indexOf(":"),e>-1?(i=t.substring(0,e),n=t.substring(e+1)):i=t,this._buildValidator(i,n);case"function":return this._buildValidator(t);case"object":return this._buildValidator(t.type,t.parameters)}},Validate.prototype._buildValidator=function(t,i){var n="function"==typeof t?t:this.validators[t];return n?{type:"function"==typeof t?"function":t,func:n,params:i}:(console.warn("Validator Setup Error - No matching validator found:",t),!1)},Validate.prototype.validate=function(t,i,n){var e=this,a=[],o=this.invalidCells.indexOf(i);return t&&t.forEach(function(t){t.func.call(e,i.getComponent(),n,t.params)||a.push({type:t.type,parameters:t.params})}),a=!a.length||a,i.modules.validate||(i.modules.validate={}),!0===a?(i.modules.validate.invalid=!1,i.getElement().classList.remove("tabulator-validation-fail"),o>-1&&this.invalidCells.splice(o,1)):(i.modules.validate.invalid=!0,"manual"!==this.table.options.validationMode&&i.getElement().classList.add("tabulator-validation-fail"),-1==o&&this.invalidCells.push(i)),a},Validate.prototype.getInvalidCells=function(){var t=[];return this.invalidCells.forEach(function(i){t.push(i.getComponent())}),t},Validate.prototype.clearValidation=function(t){var i;t.modules.validate&&t.modules.validate.invalid&&(t.getElement().classList.remove("tabulator-validation-fail"),t.modules.validate.invalid=!1,(i=this.invalidCells.indexOf(t))>-1&&this.invalidCells.splice(i,1))},Validate.prototype.validators={integer:function(t,i,n){return""===i||null===i||void 0===i||"number"==typeof(i=Number(i))&&isFinite(i)&&Math.floor(i)===i},float:function(t,i,n){return""===i||null===i||void 0===i||"number"==typeof(i=Number(i))&&isFinite(i)&&i%1!=0},numeric:function(t,i,n){return""===i||null===i||void 0===i||!isNaN(i)},string:function(t,i,n){return""===i||null===i||void 0===i||isNaN(i)},max:function(t,i,n){return""===i||null===i||void 0===i||parseFloat(i)<=n},min:function(t,i,n){return""===i||null===i||void 0===i||parseFloat(i)>=n},starts:function(t,i,n){return""===i||null===i||void 0===i||String(i).toLowerCase().startsWith(String(n).toLowerCase())},ends:function(t,i,n){return""===i||null===i||void 0===i||String(i).toLowerCase().endsWith(String(n).toLowerCase())},minLength:function(t,i,n){return""===i||null===i||void 0===i||String(i).length>=n},maxLength:function(t,i,n){return""===i||null===i||void 0===i||String(i).length<=n},in:function(t,i,n){return""===i||null===i||void 0===i||("string"==typeof n&&(n=n.split("|")),""===i||n.indexOf(i)>-1)},regex:function(t,i,n){return""===i||null===i||void 0===i||new RegExp(n).test(i)},unique:function(t,i,n){if(""===i||null===i||void 0===i)return!0;var e=!0,a=t.getData(),o=t.getColumn()._getSelf();return this.table.rowManager.rows.forEach(function(t){var n=t.getData();n!==a&&i==o.getFieldValue(n)&&(e=!1)}),e},required:function(t,i,n){return""!==i&&null!==i&&void 0!==i}},Tabulator.prototype.registerModule("validate",Validate); \ No newline at end of file +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Validate=function(t){this.table=t,this.invalidCells=[]};Validate.prototype.initializeColumn=function(t){var i,n=this,e=[];t.definition.validator&&(Array.isArray(t.definition.validator)?t.definition.validator.forEach(function(t){(i=n._extractValidator(t))&&e.push(i)}):(i=this._extractValidator(t.definition.validator))&&e.push(i),t.modules.validate=!!e.length&&e)},Validate.prototype._extractValidator=function(t){var i,n,e;switch(void 0===t?"undefined":_typeof(t)){case"string":return e=t.indexOf(":"),e>-1?(i=t.substring(0,e),n=t.substring(e+1)):i=t,this._buildValidator(i,n);case"function":return this._buildValidator(t);case"object":return this._buildValidator(t.type,t.parameters)}},Validate.prototype._buildValidator=function(t,i){var n="function"==typeof t?t:this.validators[t];return n?{type:"function"==typeof t?"function":t,func:n,params:i}:(console.warn("Validator Setup Error - No matching validator found:",t),!1)},Validate.prototype.validate=function(t,i,n){var e=this,a=[],o=this.invalidCells.indexOf(i);return t&&t.forEach(function(t){t.func.call(e,i.getComponent(),n,t.params)||a.push({type:t.type,parameters:t.params})}),a=!a.length||a,i.modules.validate||(i.modules.validate={}),!0===a?(i.modules.validate.invalid=!1,i.getElement().classList.remove("tabulator-validation-fail"),o>-1&&this.invalidCells.splice(o,1)):(i.modules.validate.invalid=!0,"manual"!==this.table.options.validationMode&&i.getElement().classList.add("tabulator-validation-fail"),-1==o&&this.invalidCells.push(i)),a},Validate.prototype.getInvalidCells=function(){var t=[];return this.invalidCells.forEach(function(i){t.push(i.getComponent())}),t},Validate.prototype.clearValidation=function(t){var i;t.modules.validate&&t.modules.validate.invalid&&(t.element.classList.remove("tabulator-validation-fail"),t.modules.validate.invalid=!1,(i=this.invalidCells.indexOf(t))>-1&&this.invalidCells.splice(i,1))},Validate.prototype.validators={integer:function(t,i,n){return""===i||null===i||void 0===i||"number"==typeof(i=Number(i))&&isFinite(i)&&Math.floor(i)===i},float:function(t,i,n){return""===i||null===i||void 0===i||"number"==typeof(i=Number(i))&&isFinite(i)&&i%1!=0},numeric:function(t,i,n){return""===i||null===i||void 0===i||!isNaN(i)},string:function(t,i,n){return""===i||null===i||void 0===i||isNaN(i)},max:function(t,i,n){return""===i||null===i||void 0===i||parseFloat(i)<=n},min:function(t,i,n){return""===i||null===i||void 0===i||parseFloat(i)>=n},starts:function(t,i,n){return""===i||null===i||void 0===i||String(i).toLowerCase().startsWith(String(n).toLowerCase())},ends:function(t,i,n){return""===i||null===i||void 0===i||String(i).toLowerCase().endsWith(String(n).toLowerCase())},minLength:function(t,i,n){return""===i||null===i||void 0===i||String(i).length>=n},maxLength:function(t,i,n){return""===i||null===i||void 0===i||String(i).length<=n},in:function(t,i,n){return""===i||null===i||void 0===i||("string"==typeof n&&(n=n.split("|")),""===i||n.indexOf(i)>-1)},regex:function(t,i,n){return""===i||null===i||void 0===i||new RegExp(n).test(i)},unique:function(t,i,n){if(""===i||null===i||void 0===i)return!0;var e=!0,a=t.getData(),o=t.getColumn()._getSelf();return this.table.rowManager.rows.forEach(function(t){var n=t.getData();n!==a&&i==o.getFieldValue(n)&&(e=!1)}),e},required:function(t,i,n){return""!==i&&null!==i&&void 0!==i}},Tabulator.prototype.registerModule("validate",Validate); \ No newline at end of file diff --git a/website/js/vendor/tabulator/js/tabulator.js b/admin/js/vendors/tabulator/js/tabulator.js similarity index 90% rename from website/js/vendor/tabulator/js/tabulator.js rename to admin/js/vendors/tabulator/js/tabulator.js index 81f6fef..256e565 100644 --- a/website/js/vendor/tabulator/js/tabulator.js +++ b/admin/js/vendors/tabulator/js/tabulator.js @@ -1,6 +1,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ ;(function (global, factory) { if ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object' && typeof module !== 'undefined') { @@ -503,7 +503,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol ColumnManager.prototype.generateColumnsFromRowData = function (data) { var cols = [], - definitions = this.table.options.autoColumnsDefinitions, row, sorter; @@ -574,52 +573,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol cols.push(col); } - if (definitions) { - - switch (typeof definitions === 'undefined' ? 'undefined' : _typeof(definitions)) { - - case "function": - - this.table.options.columns = definitions.call(this.table, cols); - - break; - - case "object": - - if (Array.isArray(definitions)) { - - cols.forEach(function (col) { - - var match = definitions.find(function (def) { - - return def.field === col.field; - }); - - if (match) { - - Object.assign(col, match); - } - }); - } else { - - cols.forEach(function (col) { - - if (definitions[col.field]) { - - Object.assign(col, definitions[col.field]); - } - }); - } - - this.table.options.columns = cols; - - break; - - } - } else { - - this.table.options.columns = cols; - } + this.table.options.columns = cols; this.setColumns(this.table.options.columns); } @@ -657,11 +611,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol self.table.modules.responsiveLayout.initialize(); } - if (this.table.options.virtualDomHoz) { - - this.table.vdomHoz.reinitialize(false, true); - } - self.redraw(true); }; @@ -987,11 +936,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.table.modules.responsiveLayout.initialize(); } - if (this.table.options.virtualDomHoz) { - - this.table.vdomHoz.reinitialize(true); - } - if (this.table.options.columnMoved) { this.table.options.columnMoved.call(this.table, from.getComponent(), this.table.columnManager.getComponents()); @@ -1004,11 +948,9 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; ColumnManager.prototype._moveColumnInArray = function (columns, from, to, after, updateRows) { - var _this2 = this; var fromIndex = columns.indexOf(from), - toIndex, - rows = []; + toIndex; if (fromIndex > -1) { @@ -1031,17 +973,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol if (updateRows) { - if (this.table.options.dataTree && this.table.modExists("dataTree", true)) { - - this.table.rowManager.rows.forEach(function (row) { - - rows = rows.concat(_this2.table.modules.dataTree.getTreeChildren(row, false, true)); - }); - } - - rows = rows.concat(this.table.rowManager.rows); - - rows.forEach(function (row) { + this.table.rowManager.rows.forEach(function (row) { if (row.cells.length) { @@ -1055,7 +987,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; ColumnManager.prototype.scrollToColumn = function (column, position, ifVisible) { - var _this3 = this; + var _this2 = this; var left = 0, offset = 0, @@ -1066,12 +998,12 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol if (typeof position === "undefined") { - position = _this3.table.options.scrollToColumnPosition; + position = _this2.table.options.scrollToColumnPosition; } if (typeof ifVisible === "undefined") { - ifVisible = _this3.table.options.scrollToColumnIfVisible; + ifVisible = _this2.table.options.scrollToColumnIfVisible; } if (column.visible) { @@ -1085,13 +1017,13 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol case "center": - adjust = -_this3.element.clientWidth / 2; + adjust = -_this2.element.clientWidth / 2; break; case "right": - adjust = colEl.clientWidth - _this3.headersElement.clientWidth; + adjust = colEl.clientWidth - _this2.headersElement.clientWidth; break; @@ -1104,7 +1036,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol offset = colEl.offsetLeft; - if (offset > 0 && offset + colEl.offsetWidth < _this3.element.clientWidth) { + if (offset > 0 && offset + colEl.offsetWidth < _this2.element.clientWidth) { return false; } @@ -1113,13 +1045,13 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //calculate scroll position - left = colEl.offsetLeft + adjust; + left = colEl.offsetLeft + _this2.element.scrollLeft + adjust; - left = Math.max(Math.min(left, _this3.table.rowManager.element.scrollWidth - _this3.table.rowManager.element.clientWidth), 0); + left = Math.max(Math.min(left, _this2.table.rowManager.element.scrollWidth - _this2.table.rowManager.element.clientWidth), 0); - _this3.table.rowManager.scrollHorizontal(left); + _this2.table.rowManager.scrollHorizontal(left); - _this3.scrollHorizontal(left); + _this2.scrollHorizontal(left); resolve(); } else { @@ -1200,39 +1132,34 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; ColumnManager.prototype.addColumn = function (definition, before, nextToColumn) { - var _this4 = this; + var _this3 = this; return new Promise(function (resolve, reject) { - var column = _this4._addColumn(definition, before, nextToColumn); + var column = _this3._addColumn(definition, before, nextToColumn); - _this4._reIndexColumns(); + _this3._reIndexColumns(); - if (_this4.table.options.responsiveLayout && _this4.table.modExists("responsiveLayout", true)) { + if (_this3.table.options.responsiveLayout && _this3.table.modExists("responsiveLayout", true)) { - _this4.table.modules.responsiveLayout.initialize(); + _this3.table.modules.responsiveLayout.initialize(); } - if (_this4.table.modExists("columnCalcs")) { + if (_this3.table.modExists("columnCalcs")) { - _this4.table.modules.columnCalcs.recalc(_this4.table.rowManager.activeRows); + _this3.table.modules.columnCalcs.recalc(_this3.table.rowManager.activeRows); } - _this4.redraw(); + _this3.redraw(); - if (_this4.table.modules.layout.getMode() != "fitColumns") { + if (_this3.table.modules.layout.getMode() != "fitColumns") { column.reinitializeWidth(); } - _this4._verticalAlignHeaders(); + _this3._verticalAlignHeaders(); - _this4.table.rowManager.reinitialize(); - - if (_this4.table.options.virtualDomHoz) { - - _this4.table.vdomHoz.reinitialize(); - } + _this3.table.rowManager.reinitialize(); resolve(column); }); @@ -1279,8 +1206,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.table.modules.responsiveLayout.initialize(); } - this._verticalAlignHeaders(); - this.redraw(); }; @@ -1542,22 +1467,13 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol ColumnComponent.prototype.setWidth = function (width) { - var result; - if (width === true) { - result = this._column.reinitializeWidth(true); + return this._column.reinitializeWidth(true); } else { - result = this._column.setWidth(width); - } - - if (this._column.table.options.virtualDomHoz) { - - this._column.table.vdomHoz.reinitialize(true); + return this._column.setWidth(width); } - - return result; }; ColumnComponent.prototype.validate = function () { @@ -1585,8 +1501,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.contentElement = false; - this.titleHolderElement = false; - this.titleElement = false; this.groupElement = this.createGroupElement(); //column group holder element @@ -1718,13 +1632,13 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Column.prototype.checkDefinition = function () { - var _this5 = this; + var _this4 = this; Object.keys(this.definition).forEach(function (key) { - if (_this5.defaultOptionList.indexOf(key) === -1) { + if (_this4.defaultOptionList.indexOf(key) === -1) { - console.warn("Invalid column definition option in '" + (_this5.field || _this5.definition.title) + "' column:", key); + console.warn("Invalid column definition option in '" + (_this4.field || _this4.definition.title) + "' column:", key); } }); }; @@ -2115,66 +2029,66 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //build header element for header Column.prototype._buildColumnHeader = function () { - var _this6 = this; - var def = this.definition, - table = this.table, + var self = this, + def = self.definition, + table = self.table, sortable; //set column sorter if (table.modExists("sort")) { - table.modules.sort.initializeColumn(this, this.titleHolderElement); + table.modules.sort.initializeColumn(self, self.contentElement); } //set column header context menu - if ((def.headerContextMenu || def.headerClickMenu || def.headerMenu) && table.modExists("menu")) { + if ((def.headerContextMenu || def.headerMenu) && table.modExists("menu")) { - table.modules.menu.initializeColumnHeader(this); + table.modules.menu.initializeColumnHeader(self); } //set column formatter if (table.modExists("format")) { - table.modules.format.initializeColumn(this); + table.modules.format.initializeColumn(self); } //set column editor if (typeof def.editor != "undefined" && table.modExists("edit")) { - table.modules.edit.initializeColumn(this); + table.modules.edit.initializeColumn(self); } //set colum validator if (typeof def.validator != "undefined" && table.modExists("validate")) { - table.modules.validate.initializeColumn(this); + table.modules.validate.initializeColumn(self); } //set column mutator if (table.modExists("mutator")) { - table.modules.mutator.initializeColumn(this); + table.modules.mutator.initializeColumn(self); } //set column accessor if (table.modExists("accessor")) { - table.modules.accessor.initializeColumn(this); + table.modules.accessor.initializeColumn(self); } //set respoviveLayout if (_typeof(table.options.responsiveLayout) && table.modExists("responsiveLayout")) { - table.modules.responsiveLayout.initializeColumn(this); + table.modules.responsiveLayout.initializeColumn(self); } //set column visibility @@ -2183,10 +2097,10 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol if (def.visible) { - this.show(true); + self.show(true); } else { - this.hide(true); + self.hide(true); } } @@ -2198,7 +2112,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol classeNames.forEach(function (className) { - _this6.element.classList.add(className); + self.element.classList.add(className); }); } @@ -2209,21 +2123,19 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //set min width if present - this.setMinWidth(typeof def.minWidth == "undefined" ? this.table.options.columnMinWidth : parseInt(def.minWidth)); + self.setMinWidth(typeof def.minWidth == "undefined" ? self.table.options.columnMinWidth : parseInt(def.minWidth)); - this.reinitializeWidth(); + self.reinitializeWidth(); //set tooltip if present - this.tooltip = this.definition.tooltip || this.definition.tooltip === false ? this.definition.tooltip : this.table.options.tooltips; + self.tooltip = self.definition.tooltip || self.definition.tooltip === false ? self.definition.tooltip : self.table.options.tooltips; //set orizontal text alignment - this.hozAlign = typeof this.definition.hozAlign == "undefined" ? this.table.options.cellHozAlign : this.definition.hozAlign; + self.hozAlign = typeof self.definition.hozAlign == "undefined" ? self.table.options.cellHozAlign : self.definition.hozAlign; - this.vertAlign = typeof this.definition.vertAlign == "undefined" ? this.table.options.cellVertAlign : this.definition.vertAlign; - - this.titleElement.style.textAlign = this.definition.headerHozAlign || this.table.options.headerHozAlign; + self.vertAlign = typeof self.definition.vertAlign == "undefined" ? self.table.options.cellVertAlign : self.definition.vertAlign; }; Column.prototype._buildColumnHeaderContent = function () { @@ -2235,15 +2147,9 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol contentElement.classList.add("tabulator-col-content"); - this.titleHolderElement = document.createElement("div"); - - this.titleHolderElement.classList.add("tabulator-col-title-holder"); - - contentElement.appendChild(this.titleHolderElement); - this.titleElement = this._buildColumnHeaderTitle(); - this.titleHolderElement.appendChild(this.titleElement); + contentElement.appendChild(this.titleElement); return contentElement; }; @@ -2311,7 +2217,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Column.prototype._formatColumnHeaderTitle = function (el, title) { - var _this7 = this; + var _this5 = this; var formatter, contents, params, mockCell, onRendered; @@ -2321,7 +2227,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol onRendered = function onRendered(callback) { - _this7.titleFormatterRendered = callback; + _this5.titleFormatterRendered = callback; }; mockCell = { @@ -2382,7 +2288,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //build header element for column group Column.prototype._buildGroupHeader = function () { - var _this8 = this; + var _this6 = this; this.element.classList.add("tabulator-col-group"); @@ -2398,7 +2304,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol classeNames.forEach(function (className) { - _this8.element.classList.add(className); + _this6.element.classList.add(className); }); } @@ -2931,13 +2837,13 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Column.prototype.delete = function () { - var _this9 = this; + var _this7 = this; return new Promise(function (resolve, reject) { - if (_this9.isGroup) { + if (_this7.isGroup) { - _this9.columns.forEach(function (column) { + _this7.columns.forEach(function (column) { column.delete(); }); @@ -2945,40 +2851,24 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //cancel edit if column is currently being edited - if (_this9.table.modExists("edit")) { + if (_this7.table.modExists("edit")) { - if (_this9.table.modules.edit.currentCell.column === _this9) { + if (_this7.table.modules.edit.currentCell.column === _this7) { - _this9.table.modules.edit.cancelEdit(); + _this7.table.modules.edit.cancelEdit(); } } - var cellCount = _this9.cells.length; + var cellCount = _this7.cells.length; for (var _i3 = 0; _i3 < cellCount; _i3++) { - _this9.cells[0].delete(); - } - - if (_this9.element.parentNode) { - - _this9.element.parentNode.removeChild(_this9.element); + _this7.cells[0].delete(); } - _this9.element = false; - - _this9.contentElement = false; - - _this9.titleElement = false; + _this7.element.parentNode.removeChild(_this7.element); - _this9.groupElement = false; - - _this9.table.columnManager.deregisterColumn(_this9); - - if (_this9.table.options.virtualDomHoz) { - - _this9.table.vdomHoz.reinitialize(true); - } + _this7.table.columnManager.deregisterColumn(_this7); resolve(); }); @@ -3117,26 +3007,26 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Column.prototype.updateDefinition = function (updates) { - var _this10 = this; + var _this8 = this; return new Promise(function (resolve, reject) { var definition; - if (!_this10.isGroup) { + if (!_this8.isGroup) { - definition = Object.assign({}, _this10.getDefinition()); + definition = Object.assign({}, _this8.getDefinition()); definition = Object.assign(definition, updates); - _this10.table.columnManager.addColumn(definition, false, _this10).then(function (column) { + _this8.table.columnManager.addColumn(definition, false, _this8).then(function (column) { - if (definition.field == _this10.field) { + if (definition.field == _this8.field) { - _this10.field = false; //cleair field name to prevent deletion of duplicate column from arrays + _this8.field = false; //cleair field name to prevent deletion of duplicate column from arrays } - _this10.delete().then(function () { + _this8.delete().then(function () { resolve(column.getComponent()); }).catch(function (err) { @@ -3149,9 +3039,9 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }); } else { - console.warn("Column Update Error - The updateDefinition function is only available on columns, not column groups"); + console.warn("Column Update Error - The updateDefintion function is only available on columns, not column groups"); - reject("Column Update Error - The updateDefinition function is only available on columns, not column groups"); + reject("Column Update Error - The updateDefintion function is only available on columns, not column groups"); } }); }; @@ -3166,11 +3056,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol } }; - Column.prototype.defaultOptionList = ["title", "field", "columns", "visible", "align", "hozAlign", "vertAlign", "width", "minWidth", "widthGrow", "widthShrink", "resizable", "frozen", "responsive", "tooltip", "cssClass", "rowHandle", "hideInHtml", "print", "htmlOutput", "sorter", "sorterParams", "formatter", "formatterParams", "variableHeight", "editable", "editor", "editorParams", "validator", "mutator", "mutatorParams", "mutatorData", "mutatorDataParams", "mutatorEdit", "mutatorEditParams", "mutatorClipboard", "mutatorClipboardParams", "accessor", "accessorParams", "accessorData", "accessorDataParams", "accessorDownload", "accessorDownloadParams", "accessorClipboard", "accessorClipboardParams", "accessorPrint", "accessorPrintParams", "accessorHtmlOutput", "accessorHtmlOutputParams", "clipboard", "download", "downloadTitle", "topCalc", "topCalcParams", "topCalcFormatter", "topCalcFormatterParams", "bottomCalc", "bottomCalcParams", "bottomCalcFormatter", "bottomCalcFormatterParams", "cellClick", "cellDblClick", "cellContext", "cellTap", "cellDblTap", "cellTapHold", "cellMouseEnter", "cellMouseLeave", "cellMouseOver", "cellMouseOut", "cellMouseMove", "cellEditing", "cellEdited", "cellEditCancelled", "headerSort", "headerSortStartingDir", "headerSortTristate", "headerClick", "headerDblClick", "headerContext", "headerTap", "headerDblTap", "headerTapHold", "headerTooltip", "headerVertical", "headerHozAlign", "editableTitle", "titleFormatter", "titleFormatterParams", "headerFilter", "headerFilterPlaceholder", "headerFilterParams", "headerFilterEmptyCheck", "headerFilterFunc", "headerFilterFuncParams", "headerFilterLiveFilter", "print", "headerContextMenu", "headerMenu", "contextMenu", - - // "headerClickMenu", - - "clickMenu", "formatterPrint", "formatterPrintParams", "formatterClipboard", "formatterClipboardParams", "formatterHtmlOutput", "formatterHtmlOutputParams", "titlePrint", "titleClipboard", "titleHtmlOutput", "titleDownload"]; + Column.prototype.defaultOptionList = ["title", "field", "columns", "visible", "align", "hozAlign", "vertAlign", "width", "minWidth", "widthGrow", "widthShrink", "resizable", "frozen", "responsive", "tooltip", "cssClass", "rowHandle", "hideInHtml", "print", "htmlOutput", "sorter", "sorterParams", "formatter", "formatterParams", "variableHeight", "editable", "editor", "editorParams", "validator", "mutator", "mutatorParams", "mutatorData", "mutatorDataParams", "mutatorEdit", "mutatorEditParams", "mutatorClipboard", "mutatorClipboardParams", "accessor", "accessorParams", "accessorData", "accessorDataParams", "accessorDownload", "accessorDownloadParams", "accessorClipboard", "accessorClipboardParams", "accessorPrint", "accessorPrintParams", "accessorHtmlOutput", "accessorHtmlOutputParams", "clipboard", "download", "downloadTitle", "topCalc", "topCalcParams", "topCalcFormatter", "topCalcFormatterParams", "bottomCalc", "bottomCalcParams", "bottomCalcFormatter", "bottomCalcFormatterParams", "cellClick", "cellDblClick", "cellContext", "cellTap", "cellDblTap", "cellTapHold", "cellMouseEnter", "cellMouseLeave", "cellMouseOver", "cellMouseOut", "cellMouseMove", "cellEditing", "cellEdited", "cellEditCancelled", "headerSort", "headerSortStartingDir", "headerSortTristate", "headerClick", "headerDblClick", "headerContext", "headerTap", "headerDblTap", "headerTapHold", "headerTooltip", "headerVertical", "editableTitle", "titleFormatter", "titleFormatterParams", "headerFilter", "headerFilterPlaceholder", "headerFilterParams", "headerFilterEmptyCheck", "headerFilterFunc", "headerFilterFuncParams", "headerFilterLiveFilter", "print", "headerContextMenu", "headerMenu", "contextMenu", "formatterPrint", "formatterPrintParams", "formatterClipboard", "formatterClipboardParams", "formatterHtmlOutput", "formatterHtmlOutputParams", "titlePrint", "titleClipboard", "titleHtmlOutput", "titleDownload"]; //////////////// Event Bindings ///////////////// @@ -3471,7 +3357,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; RowManager.prototype.scrollToRow = function (row, position, ifVisible) { - var _this11 = this; + var _this9 = this; var rowIndex = this.getDisplayRows().indexOf(row), rowEl = row.getElement(), @@ -3484,29 +3370,29 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol if (typeof position === "undefined") { - position = _this11.table.options.scrollToRowPosition; + position = _this9.table.options.scrollToRowPosition; } if (typeof ifVisible === "undefined") { - ifVisible = _this11.table.options.scrollToRowIfVisible; + ifVisible = _this9.table.options.scrollToRowIfVisible; } if (position === "nearest") { - switch (_this11.renderMode) { + switch (_this9.renderMode) { case "classic": rowTop = Tabulator.prototype.helpers.elOffset(rowEl).top; - position = Math.abs(_this11.element.scrollTop - rowTop) > Math.abs(_this11.element.scrollTop + _this11.element.clientHeight - rowTop) ? "bottom" : "top"; + position = Math.abs(_this9.element.scrollTop - rowTop) > Math.abs(_this9.element.scrollTop + _this9.element.clientHeight - rowTop) ? "bottom" : "top"; break; case "virtual": - position = Math.abs(_this11.vDomTop - rowIndex) > Math.abs(_this11.vDomBottom - rowIndex) ? "bottom" : "top"; + position = Math.abs(_this9.vDomTop - rowIndex) > Math.abs(_this9.vDomBottom - rowIndex) ? "bottom" : "top"; break; @@ -3519,9 +3405,9 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol if (Tabulator.prototype.helpers.elVisible(rowEl)) { - offset = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this11.element).top; + offset = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this9.element).top; - if (offset > 0 && offset < _this11.element.clientHeight - rowEl.offsetHeight) { + if (offset > 0 && offset < _this9.element.clientHeight - rowEl.offsetHeight) { return false; } @@ -3530,17 +3416,17 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //scroll to row - switch (_this11.renderMode) { + switch (_this9.renderMode) { case "classic": - _this11.element.scrollTop = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this11.element).top + _this11.element.scrollTop; + _this9.element.scrollTop = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this9.element).top + _this9.element.scrollTop; break; case "virtual": - _this11._virtualRenderFill(rowIndex, true); + _this9._virtualRenderFill(rowIndex, true); break; @@ -3554,24 +3440,24 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol case "center": - if (_this11.element.scrollHeight - _this11.element.scrollTop == _this11.element.clientHeight) { + if (_this9.element.scrollHeight - _this9.element.scrollTop == _this9.element.clientHeight) { - _this11.element.scrollTop = _this11.element.scrollTop + (rowEl.offsetTop - _this11.element.scrollTop) - (_this11.element.scrollHeight - rowEl.offsetTop) / 2; + _this9.element.scrollTop = _this9.element.scrollTop + (rowEl.offsetTop - _this9.element.scrollTop) - (_this9.element.scrollHeight - rowEl.offsetTop) / 2; } else { - _this11.element.scrollTop = _this11.element.scrollTop - _this11.element.clientHeight / 2; + _this9.element.scrollTop = _this9.element.scrollTop - _this9.element.clientHeight / 2; } break; case "bottom": - if (_this11.element.scrollHeight - _this11.element.scrollTop == _this11.element.clientHeight) { + if (_this9.element.scrollHeight - _this9.element.scrollTop == _this9.element.clientHeight) { - _this11.element.scrollTop = _this11.element.scrollTop - (_this11.element.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight; + _this9.element.scrollTop = _this9.element.scrollTop - (_this9.element.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight; } else { - _this11.element.scrollTop = _this11.element.scrollTop - _this11.element.clientHeight + rowEl.offsetHeight; + _this9.element.scrollTop = _this9.element.scrollTop - _this9.element.clientHeight + rowEl.offsetHeight; } break; @@ -3592,34 +3478,34 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol RowManager.prototype.setData = function (data, renderInPosition, columnsChanged) { - var _this12 = this; + var _this10 = this; var self = this; return new Promise(function (resolve, reject) { - if (renderInPosition && _this12.getDisplayRows().length) { + if (renderInPosition && _this10.getDisplayRows().length) { if (self.table.options.pagination) { self._setDataActual(data, true); } else { - _this12.reRenderInPosition(function () { + _this10.reRenderInPosition(function () { self._setDataActual(data); }); } } else { - if (_this12.table.options.autoColumns && columnsChanged) { + if (_this10.table.options.autoColumns && columnsChanged) { - _this12.table.columnManager.generateColumnsFromRowData(data); + _this10.table.columnManager.generateColumnsFromRowData(data); } - _this12.resetScroll(); + _this10.resetScroll(); - _this12._setDataActual(data); + _this10._setDataActual(data); } resolve(); @@ -3664,9 +3550,9 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol } }); - self.refreshActiveData(false, false, renderInPosition); - self.table.options.dataLoaded.call(this.table, data); + + self.refreshActiveData(false, false, renderInPosition); } else { console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ", typeof data === 'undefined' ? 'undefined' : _typeof(data), "\nData: ", data); @@ -3686,16 +3572,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol } this.rows = []; - - this.activeRows = []; - - this.activeRowsCount = 0; - - this.displayRows = []; - - this.displayRowsCount = 0; - - this.adjustTableSize(); }; RowManager.prototype.deleteRow = function (row, blockRedraw) { @@ -3734,10 +3610,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.table.options.rowDeleted.call(this.table, row.getComponent()); - if (this.table.options.dataChanged) { - - this.table.options.dataChanged.call(this.table, this.getData()); - } + this.table.options.dataEdited.call(this.table, this.getData()); if (this.table.options.groupBy && this.table.modExists("groupRows")) { @@ -3769,7 +3642,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //add multiple rows RowManager.prototype.addRows = function (data, pos, index) { - var _this13 = this; + var _this11 = this; var self = this, length = 0, @@ -3777,7 +3650,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol return new Promise(function (resolve, reject) { - pos = _this13.findAddRowPos(pos); + pos = _this11.findAddRowPos(pos); if (!Array.isArray(data)) { @@ -3798,25 +3671,25 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol rows.push(row); }); - if (_this13.table.options.groupBy && _this13.table.modExists("groupRows")) { + if (_this11.table.options.groupBy && _this11.table.modExists("groupRows")) { - _this13.table.modules.groupRows.updateGroupRows(true); - } else if (_this13.table.options.pagination && _this13.table.modExists("page")) { + _this11.table.modules.groupRows.updateGroupRows(true); + } else if (_this11.table.options.pagination && _this11.table.modExists("page")) { - _this13.refreshActiveData(false, false, true); + _this11.refreshActiveData(false, false, true); } else { - _this13.reRenderInPosition(); + _this11.reRenderInPosition(); } //recalc column calculations if present - if (_this13.table.modExists("columnCalcs")) { + if (_this11.table.modExists("columnCalcs")) { - _this13.table.modules.columnCalcs.recalc(_this13.table.rowManager.activeRows); + _this11.table.modules.columnCalcs.recalc(_this11.table.rowManager.activeRows); } - _this13.regenerateRowNumbers(); + _this11.regenerateRowNumbers(); resolve(rows); }); @@ -3972,10 +3845,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.table.options.rowAdded.call(this.table, row.getComponent()); - if (this.table.options.dataChanged) { - - this.table.options.dataChanged.call(this.table, this.getData()); - } + this.table.options.dataEdited.call(this.table, this.getData()); if (!blockRedraw) { @@ -4000,7 +3870,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; RowManager.prototype.moveRowActual = function (from, to, after) { - var _this14 = this; + var _this12 = this; this._moveRowInArray(this.rows, from, to, after); @@ -4008,7 +3878,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.displayRowIterator(function (rows) { - _this14._moveRowInArray(rows, from, to, after); + _this12._moveRowInArray(rows, from, to, after); }); if (this.table.options.groupBy && this.table.modExists("groupRows")) { @@ -4194,7 +4064,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; RowManager.prototype._genRemoteRequest = function () { - var _this15 = this; + var _this13 = this; var table = this.table, options = table.options, @@ -4230,7 +4100,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol table.modules.ajax.sendRequest().then(function (data) { - _this15._setDataActual(data, true); + _this13._setDataActual(data, true); }).catch(function (e) {}); }; @@ -4527,11 +4397,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol self.reRenderInPosition(); } else { - if (stage === "all" && this.table.options.virtualDomHoz) { - - this.table.vdomHoz.dataChange(); - } - self.renderTable(); if (table.options.layoutColumnsOnNewData) { @@ -4551,13 +4416,13 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //regenerate row numbers for row number formatter if in use RowManager.prototype.regenerateRowNumbers = function () { - var _this16 = this; + var _this14 = this; if (this.rowNumColumn) { this.activeRows.forEach(function (row) { - var cell = row.getCell(_this16.rowNumColumn); + var cell = row.getCell(_this14.rowNumColumn); if (cell) { @@ -4733,12 +4598,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol break; - case "selected": - - rows = this.table.modules.selectRow.selectedRows; - - break; - default: rows = this.rows; @@ -4950,9 +4809,9 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.tableElement.style.minWidth = this.table.columnManager.getWidth() + "px"; - // this.tableElement.style.minHeight = "1px"; + this.tableElement.style.minHeight = "1px"; - // this.tableElement.style.visibility = "hidden"; + this.tableElement.style.visibility = "hidden"; } }; @@ -5073,27 +4932,16 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol element.appendChild(row.getElement()); - row.initialize(); - - if (!row.heightInitialized) { - - row.normalizeHeight(true); - } - - // if(!row.initialized){ - - // row.initialize(true); - - // }else{ + if (!row.initialized) { - // if(!row.heightInitialized){ - - // row.normalizeHeight(true); - - // } + row.initialize(true); + } else { - // } + if (!row.heightInitialized) { + row.normalizeHeight(true); + } + } rowHeight = row.getHeight(); @@ -5476,7 +5324,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol if (this.renderMode === "virtual") { - var otherHeight = Math.floor(this.columnManager.getElement().offsetHeight + (this.table.footerManager && !this.table.footerManager.external ? this.table.footerManager.getElement().offsetHeight : 0)); + var otherHeight = this.columnManager.getElement().offsetHeight + (this.table.footerManager && !this.table.footerManager.external ? this.table.footerManager.getElement().offsetHeight : 0); if (this.fixedHeight) { @@ -5489,7 +5337,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.element.style.height = ""; - this.element.style.height = Math.floor(this.table.element.clientHeight) - otherHeight + "px"; + this.element.style.height = this.table.element.clientHeight - otherHeight + "px"; this.element.scrollTop = this.scrollTop; } @@ -5500,7 +5348,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //check if the table has changed size when dealing with variable height tables - if (!this.fixedHeight && Math.floor(initialHeight) != Math.floor(this.element.clientHeight)) { + if (!this.fixedHeight && initialHeight != this.element.clientHeight) { modExists = this.table.modExists("resizeTable"); @@ -5518,7 +5366,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.rows.forEach(function (row) { - row.reinitialize(true); + row.reinitialize(); }); }; @@ -5614,747 +5462,162 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol } }; - var VDomHoz = function VDomHoz(table) { - - this.table = table; - - this.element = this.table.rowManager.tableElement; - - this.holderEl = this.table.rowManager.element; + //public row object - this.leftCol = 0; + var RowComponent = function RowComponent(row) { - this.rightCol = 0; + this._row = row; + }; - this.scrollLeft = 0; + RowComponent.prototype.getData = function (transform) { - this.vDomScrollPosLeft = 0; + return this._row.getData(transform); + }; - this.vDomScrollPosRight = 0; + RowComponent.prototype.getElement = function () { - this.vDomPadLeft = 0; + return this._row.getElement(); + }; - this.vDomPadRight = 0; + RowComponent.prototype.getCells = function () { - this.fitDataColAvg = 0; + var cells = []; - this.window = 200; //pixel margin to make column visible before it is shown on screen + this._row.getCells().forEach(function (cell) { + cells.push(cell.getComponent()); + }); - this.initialized = false; + return cells; + }; - this.columns = []; + RowComponent.prototype.getCell = function (column) { - if (this.compatabilityCheck()) { + var cell = this._row.getCell(column); - this.initialize(); - } + return cell ? cell.getComponent() : false; }; - VDomHoz.prototype.compatabilityCheck = function () { + RowComponent.prototype.getIndex = function () { - var options = this.table.options, - frozen = false, - ok = true; + return this._row.getData("data")[this._row.table.options.index]; + }; - if (options.layout == "fitDataTable") { + RowComponent.prototype.getPosition = function (active) { - console.warn("Horizontal Vitrual DOM is not compatible with fitDataTable layout mode"); + return this._row.table.rowManager.getRowPosition(this._row, active); + }; - ok = false; - } + RowComponent.prototype.delete = function () { - if (options.responsiveLayout) { + return this._row.delete(); + }; - console.warn("Horizontal Vitrual DOM is not compatible with responsive columns"); + RowComponent.prototype.scrollTo = function () { - ok = false; - } + return this._row.table.rowManager.scrollToRow(this._row); + }; - if (this.table.rtl) { + RowComponent.prototype.pageTo = function () { - console.warn("Horizontal Vitrual DOM is not currently compatible with RTL text direction"); + if (this._row.table.modExists("page", true)) { - ok = false; + return this._row.table.modules.page.setPageToRow(this._row); } + }; - // if(options.rowFormatter){ + RowComponent.prototype.move = function (to, after) { - // console.warn("Horizontal Vitrual DOM is not compatible with row formatters"); + this._row.moveToRow(to, after); + }; - // ok = false; + RowComponent.prototype.update = function (data) { - // } + return this._row.updateData(data); + }; + RowComponent.prototype.normalizeHeight = function () { - if (options.columns) { + this._row.normalizeHeight(true); + }; - frozen = options.columns.find(function (col) { + RowComponent.prototype.select = function () { - return col.frozen; - }); + this._row.table.modules.selectRow.selectRows(this._row); + }; - if (frozen) { + RowComponent.prototype.deselect = function () { - console.warn("Horizontal Vitrual DOM is not compatible with frozen columns"); + this._row.table.modules.selectRow.deselectRows(this._row); + }; - ok = false; - } - } + RowComponent.prototype.toggleSelect = function () { - if (!ok) { + this._row.table.modules.selectRow.toggleRow(this._row); + }; - options.virtualDomHoz = false; - } + RowComponent.prototype.isSelected = function () { - return ok; + return this._row.table.modules.selectRow.isRowSelected(this._row); }; - VDomHoz.prototype.initialize = function () { - var _this17 = this; + RowComponent.prototype._getSelf = function () { - this.holderEl.addEventListener("scroll", function () { + return this._row; + }; - var left = _this17.holderEl.scrollLeft; + RowComponent.prototype.validate = function () { - if (_this17.scrollLeft != left) { + return this._row.validate(); + }; - _this17.scrollLeft = left; + RowComponent.prototype.freeze = function () { - _this17.scroll(left - (_this17.vDomScrollPosLeft + _this17.window)); - } - }); + if (this._row.table.modExists("frozenRows", true)) { + + this._row.table.modules.frozenRows.freezeRow(this._row); + } }; - VDomHoz.prototype.deinitialize = function () { + RowComponent.prototype.unfreeze = function () { - this.initialized = false; + if (this._row.table.modExists("frozenRows", true)) { + + this._row.table.modules.frozenRows.unfreezeRow(this._row); + } }; - VDomHoz.prototype.clear = function () { + RowComponent.prototype.isFrozen = function () { - this.columns = []; + if (this._row.table.modExists("frozenRows", true)) { - this.leftCol = -1; + var index = this._row.table.modules.frozenRows.rows.indexOf(this._row); - this.rightCol = 0; + return index > -1; + } - this.vDomScrollPosLeft = 0; + return false; + }; - this.vDomScrollPosRight = 0; + RowComponent.prototype.treeCollapse = function () { - this.vDomPadLeft = 0; + if (this._row.table.modExists("dataTree", true)) { - this.vDomPadRight = 0; + this._row.table.modules.dataTree.collapseRow(this._row); + } }; - VDomHoz.prototype.dataChange = function () { + RowComponent.prototype.treeExpand = function () { - var change = false, - collsWidth = 0, - colEnd = 0, - group, - row, - rowEl; + if (this._row.table.modExists("dataTree", true)) { - if (this.table.options.layout === "fitData") { + this._row.table.modules.dataTree.expandRow(this._row); + } + }; - this.table.columnManager.columnsByIndex.forEach(function (column) { + RowComponent.prototype.treeToggle = function () { - if (!column.definition.width && column.visible) { - - change = true; - } - }); - - if (change) { - - if (change && this.table.rowManager.getDisplayRows().length) { - - // this.table.vdomHoz.deinitialize(); - - - this.vDomScrollPosRight = this.scrollLeft + this.holderEl.clientWidth + this.window; - - if (this.table.options.groupBy) { - - group = this.table.modules.groupRows.getGroups(false)[0]; - - row = group.getRows(false)[0]; - } else { - - row = this.table.rowManager.getDisplayRows()[0]; - } - - if (row) { - - rowEl = row.getElement(); - - row.generateCells(); - - this.element.appendChild(rowEl); - - for (var colEnd = 0; colEnd < row.cells.length; colEnd++) { - - var cell = row.cells[colEnd]; - - rowEl.appendChild(cell.getElement()); - - cell.column.reinitializeWidth(); - - collsWidth += cell.column.getWidth(); - - if (collsWidth > this.vDomScrollPosRight) { - - break; - } - } - - rowEl.parentNode.removeChild(rowEl); - - this.fitDataColAvg = Math.floor(collsWidth / (colEnd + 1)); - - for (colEnd; colEnd < this.table.columnManager.columnsByIndex.length; colEnd++) { - - this.table.columnManager.columnsByIndex[colEnd].setWidth(this.fitDataColAvg); - } - - this.reinitialize(false, true); - } - } - } - } else { - - if (this.table.options.layout === "fitColumns") { - - this.table.modules.layout.layout(); - - this.table.vdomHoz.reinitialize(false, true); - } - } - }; - - VDomHoz.prototype.fitDataLayoutOverride = function () { - - for (var _i5 = this.leftCol; _i5 <= this.rightCol; _i5++) { - - this.columns[_i5].reinitializeWidth(); - } - }; - - VDomHoz.prototype.reinitialize = function (update, blockRedraw) { - var _this18 = this; - - var old = { - - cols: this.columns, - - leftCol: this.leftCol, - - rightCol: this.rightCol - - }; - - if (update && !this.initialized) { - - return; - } - - this.clear(); - - this.scrollLeft = this.holderEl.scrollLeft; - - this.vDomScrollPosLeft = this.scrollLeft - this.window; - - this.vDomScrollPosRight = this.scrollLeft + this.holderEl.clientWidth + this.window; - - var colPos = 0; - - this.table.columnManager.columnsByIndex.forEach(function (column) { - - var config = {}; - - if (column.visible) { - - var width = column.getWidth(); - - config.leftPos = colPos; - - config.rightPos = colPos + width; - - if (colPos + width > _this18.vDomScrollPosLeft && colPos < _this18.vDomScrollPosRight) { - - //column is visible - - - if (_this18.leftCol == -1) { - - _this18.leftCol = _this18.columns.length; - - _this18.vDomPadLeft = colPos; - } - - _this18.rightCol = _this18.columns.length; - } else { - - // column is hidden - - if (_this18.leftCol !== -1) { - - _this18.vDomPadRight += width; - } - } - - _this18.columns.push(column); - - column.modules.vdomHoz = config; - - colPos += width; - } - }); - - this.element.style.paddingLeft = this.vDomPadLeft + "px"; - - this.element.style.paddingRight = this.vDomPadRight + "px"; - - this.initialized = true; - - if (!blockRedraw) { - - if (!update || this.reinitChanged(old)) { - - this.renitializeRows(); - } - } - - this.holderEl.scrollLeft = this.scrollLeft; - }; - - VDomHoz.prototype.reinitChanged = function (old) { - var _this19 = this; - - var match = true; - - if (old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol) { - - return true; - } - - old.cols.forEach(function (col, i) { - - if (col !== _this19.columns[i]) { - - match = false; - } - }); - - return !match; - }; - - VDomHoz.prototype.renitializeRows = function () { - var _this20 = this; - - var rows = this.table.rowManager.getVisibleRows(); - - rows.forEach(function (row) { - - _this20.reinitializeRow(row, true); - }); - }; - - VDomHoz.prototype.scroll = function (diff) { - - this.vDomScrollPosLeft += diff; - - this.vDomScrollPosRight += diff; - - if (diff > this.holderEl.clientWidth * .8) { - - this.reinitialize(); - } else { - - if (diff > 0) { - - //scroll right - - this.addColRight(); - - this.removeColLeft(); - } else { - - //scroll left - - this.addColLeft(); - - this.removeColRight(); - } - } - }; - - VDomHoz.prototype.colPositionAdjust = function (start, end, diff) { - - for (var _i6 = start; _i6 < end; _i6++) { - - var column = this.columns[_i6]; - - column.modules.vdomHoz.leftPos -= diff; - - column.modules.vdomHoz.rightPos -= diff; - } - }; - - VDomHoz.prototype.addColRight = function () { - - var column = this.columns[this.rightCol + 1], - rows, - oldWidth, - widthDiff; - - if (column && column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight) { - - rows = this.table.rowManager.getVisibleRows(); - - rows.forEach(function (row) { - - if (row.type !== "group") { - - var cell = row.getCell(column); - - row.getElement().appendChild(cell.getElement()); - - cell.cellRendered(); - } - }); - - if (this.fitDataColAvg) { - - oldWidth = column.getWidth(); - - if (oldWidth === this.fitDataColAvg) { - - column.reinitializeWidth(); - - widthDiff = oldWidth - column.getWidth(); - - if (widthDiff) { - - column.modules.vdomHoz.rightPos -= widthDiff; - - this.colPositionAdjust(this.rightCol + 1, this.columns.length, widthDiff); - } - } - } - - this.rightCol++; - - if (this.rightCol >= this.columns.length - 1) { - - this.vDomPadRight = 0; - } else { - - this.vDomPadRight -= column.getWidth(); - } - - this.element.style.paddingRight = this.vDomPadRight + "px"; - - this.addColRight(); - } - }; - - VDomHoz.prototype.addColLeft = function () { - - var column = this.columns[this.leftCol - 1], - rows; - - if (column && column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft) { - - var rows = this.table.rowManager.getVisibleRows(); - - rows.forEach(function (row) { - - if (row.type !== "group") { - - var cell = row.getCell(column); - - row.getElement().prepend(cell.getElement()); - - cell.cellRendered(); - } - }); - - if (!this.leftCol) { - - this.vDomPadLeft = 0; - } else { - - this.vDomPadLeft -= column.getWidth(); - } - - this.element.style.paddingLeft = this.vDomPadLeft + "px"; - - this.leftCol--; - - this.addColLeft(); - } - }; - - VDomHoz.prototype.removeColRight = function (column) { - - var column = this.columns[this.rightCol], - rows; - - if (column && column.modules.vdomHoz.leftPos > this.vDomScrollPosRight) { - - rows = this.table.rowManager.getVisibleRows(); - - column.modules.vdomHoz.visible = false; - - rows.forEach(function (row) { - - if (row.type !== "group") { - - var cell = row.getCell(column); - - row.getElement().removeChild(cell.getElement()); - } - }); - - this.vDomPadRight += column.getWidth(); - - this.element.style.paddingRight = this.vDomPadRight + "px"; - - this.rightCol--; - - this.removeColRight(); - } - }; - - VDomHoz.prototype.removeColLeft = function () { - - var column = this.columns[this.leftCol], - rows; - - if (column && column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft) { - - rows = this.table.rowManager.getVisibleRows(); - - rows.forEach(function (row) { - - if (row.type !== "group") { - - var cell = row.getCell(column); - - row.getElement().removeChild(cell.getElement()); - } - }); - - this.vDomPadLeft += column.getWidth(); - - this.element.style.paddingLeft = this.vDomPadLeft + "px"; - - this.leftCol++; - - this.removeColLeft(); - } - }; - - VDomHoz.prototype.initializeRow = function (row) { - - if (row.type !== "group") { - - row.modules.vdomHoz = { - - leftCol: this.leftCol, - - rightCol: this.rightCol - - }; - - for (var _i7 = this.leftCol; _i7 <= this.rightCol; _i7++) { - - var column = this.columns[_i7]; - - if (column.visible) { - - var cell = row.getCell(column); - - row.element.appendChild(cell.getElement()); - - cell.cellRendered(); - } - } - } - }; - - VDomHoz.prototype.reinitializeRow = function (row, force) { - - if (row.type !== "group") { - - if (force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol) { - - while (row.element.firstChild) { - row.element.removeChild(row.element.firstChild); - }this.initializeRow(row); - } - } - }; - - //public row object - - var RowComponent = function RowComponent(row) { - - this._row = row; - }; - - RowComponent.prototype.getData = function (transform) { - - return this._row.getData(transform); - }; - - RowComponent.prototype.getElement = function () { - - return this._row.getElement(); - }; - - RowComponent.prototype.getCells = function () { - - var cells = []; - - this._row.getCells().forEach(function (cell) { - - cells.push(cell.getComponent()); - }); - - return cells; - }; - - RowComponent.prototype.getCell = function (column) { - - var cell = this._row.getCell(column); - - return cell ? cell.getComponent() : false; - }; - - RowComponent.prototype.getIndex = function () { - - return this._row.getData("data")[this._row.table.options.index]; - }; - - RowComponent.prototype.getPosition = function (active) { - - return this._row.table.rowManager.getRowPosition(this._row, active); - }; - - RowComponent.prototype.delete = function () { - - return this._row.delete(); - }; - - RowComponent.prototype.scrollTo = function () { - - return this._row.table.rowManager.scrollToRow(this._row); - }; - - RowComponent.prototype.pageTo = function () { - - if (this._row.table.modExists("page", true)) { - - return this._row.table.modules.page.setPageToRow(this._row); - } - }; - - RowComponent.prototype.move = function (to, after) { - - this._row.moveToRow(to, after); - }; - - RowComponent.prototype.update = function (data) { - - return this._row.updateData(data); - }; - - RowComponent.prototype.normalizeHeight = function () { - - this._row.normalizeHeight(true); - }; - - RowComponent.prototype.select = function () { - - this._row.table.modules.selectRow.selectRows(this._row); - }; - - RowComponent.prototype.deselect = function () { - - this._row.table.modules.selectRow.deselectRows(this._row); - }; - - RowComponent.prototype.toggleSelect = function () { - - this._row.table.modules.selectRow.toggleRow(this._row); - }; - - RowComponent.prototype.isSelected = function () { - - return this._row.table.modules.selectRow.isRowSelected(this._row); - }; - - RowComponent.prototype._getSelf = function () { - - return this._row; - }; - - RowComponent.prototype.validate = function () { - - return this._row.validate(); - }; - - RowComponent.prototype.freeze = function () { - - if (this._row.table.modExists("frozenRows", true)) { - - this._row.table.modules.frozenRows.freezeRow(this._row); - } - }; - - RowComponent.prototype.unfreeze = function () { - - if (this._row.table.modExists("frozenRows", true)) { - - this._row.table.modules.frozenRows.unfreezeRow(this._row); - } - }; - - RowComponent.prototype.isFrozen = function () { - - if (this._row.table.modExists("frozenRows", true)) { - - var index = this._row.table.modules.frozenRows.rows.indexOf(this._row); - - return index > -1; - } - - return false; - }; - - RowComponent.prototype.treeCollapse = function () { - - if (this._row.table.modExists("dataTree", true)) { - - this._row.table.modules.dataTree.collapseRow(this._row); - } - }; - - RowComponent.prototype.treeExpand = function () { - - if (this._row.table.modExists("dataTree", true)) { - - this._row.table.modules.dataTree.expandRow(this._row); - } - }; - - RowComponent.prototype.treeToggle = function () { - - if (this._row.table.modExists("dataTree", true)) { + if (this._row.table.modExists("dataTree", true)) { this._row.table.modules.dataTree.toggleRow(this._row); } @@ -6374,7 +5637,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol if (this._row.table.modExists("dataTree", true)) { - return this._row.table.modules.dataTree.getTreeChildren(this._row, true); + return this._row.table.modules.dataTree.getTreeChildren(this._row); } return false; @@ -6518,7 +5781,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //set column menu - if ((self.table.options.rowContextMenu || self.table.options.rowClickMenu) && this.table.modExists("menu")) { + if (self.table.options.rowContextMenu && this.table.modExists("menu")) { self.table.modules.menu.initializeRow(this); } @@ -6673,14 +5936,15 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //functions to setup on first render Row.prototype.initialize = function (force) { - var _this21 = this; - if (!this.initialized || force) { + var self = this; - this.deleteCells(); + if (!self.initialized || force) { - while (this.element.firstChild) { - this.element.removeChild(this.element.firstChild); + self.deleteCells(); + + while (self.element.firstChild) { + self.element.removeChild(self.element.firstChild); } //handle frozen cells if (this.table.modExists("frozenColumns")) { @@ -6690,57 +5954,45 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.generateCells(); - if (this.table.options.virtualDomHoz && this.table.vdomHoz.initialized) { - - this.table.vdomHoz.initializeRow(this); - } else { - - this.cells.forEach(function (cell) { + self.cells.forEach(function (cell) { - _this21.element.appendChild(cell.getElement()); + self.element.appendChild(cell.getElement()); - cell.cellRendered(); - }); - } + cell.cellRendered(); + }); if (force) { - this.normalizeHeight(); + self.normalizeHeight(); } //setup movable rows - if (this.table.options.dataTree && this.table.modExists("dataTree")) { + if (self.table.options.dataTree && self.table.modExists("dataTree")) { - this.table.modules.dataTree.layoutRow(this); + self.table.modules.dataTree.layoutRow(this); } //setup column colapse container - if (this.table.options.responsiveLayout === "collapse" && this.table.modExists("responsiveLayout")) { + if (self.table.options.responsiveLayout === "collapse" && self.table.modExists("responsiveLayout")) { - this.table.modules.responsiveLayout.layoutRow(this); + self.table.modules.responsiveLayout.layoutRow(this); } - if (this.table.options.rowFormatter) { + if (self.table.options.rowFormatter) { - this.table.options.rowFormatter(this.getComponent()); + self.table.options.rowFormatter(self.getComponent()); } //set resizable handles - if (this.table.options.resizableRows && this.table.modExists("resizeRows")) { + if (self.table.options.resizableRows && self.table.modExists("resizeRows")) { - this.table.modules.resizeRows.initializeRow(this); + self.table.modules.resizeRows.initializeRow(self); } - this.initialized = true; - } else { - - if (this.table.options.virtualDomHoz) { - - this.table.vdomHoz.reinitializeRow(this); - } + self.initialized = true; } }; @@ -6754,7 +6006,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol } }; - Row.prototype.reinitialize = function (children) { + Row.prototype.reinitialize = function () { this.initialized = false; @@ -6771,14 +6023,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.initialize(true); } - - if (this.table.options.dataTree && this.table.modExists("dataTree", true)) { - - this.table.modules.dataTree.getTreeChildren(this, false, true).forEach(function (child) { - - child.reinitialize(true); - }); - } }; //get heights when doing bulk row style calcs in virtual DOM @@ -6923,7 +6167,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //update the rows data Row.prototype.updateData = function (updatedData) { - var _this22 = this; + var _this15 = this; var visible = Tabulator.prototype.helpers.elVisible(this.element), tempData = {}, @@ -6936,20 +6180,20 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol updatedData = JSON.parse(updatedData); } - if (_this22.table.options.reactiveData && _this22.table.modExists("reactiveData", true)) { + if (_this15.table.options.reactiveData && _this15.table.modExists("reactiveData", true)) { - _this22.table.modules.reactiveData.block(); + _this15.table.modules.reactiveData.block(); } //mutate incomming data if needed - if (_this22.table.modExists("mutator")) { + if (_this15.table.modExists("mutator")) { - tempData = Object.assign(tempData, _this22.data); + tempData = Object.assign(tempData, _this15.data); tempData = Object.assign(tempData, updatedData); - newRowData = _this22.table.modules.mutator.transformRow(tempData, "data", updatedData); + newRowData = _this15.table.modules.mutator.transformRow(tempData, "data", updatedData); } else { newRowData = updatedData; @@ -6959,23 +6203,23 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol for (var attrname in newRowData) { - _this22.data[attrname] = newRowData[attrname]; + _this15.data[attrname] = newRowData[attrname]; } - if (_this22.table.options.reactiveData && _this22.table.modExists("reactiveData", true)) { + if (_this15.table.options.reactiveData && _this15.table.modExists("reactiveData", true)) { - _this22.table.modules.reactiveData.unblock(); + _this15.table.modules.reactiveData.unblock(); } //update affected cells only for (var attrname in updatedData) { - var columns = _this22.table.columnManager.getColumnsByFieldRoot(attrname); + var columns = _this15.table.columnManager.getColumnsByFieldRoot(attrname); columns.forEach(function (column) { - var cell = _this22.getCell(column.getField()); + var cell = _this15.getCell(column.getField()); if (cell) { @@ -6994,51 +6238,38 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }); } - if (_this22.table.options.groupUpdateOnCellEdit && _this22.table.options.groupBy && _this22.table.modExists("groupRows")) { - - _this22.table.modules.groupRows.reassignRowToGroup(_this22.row); - } - //Partial reinitialization if visible if (visible) { - _this22.normalizeHeight(true); + _this15.normalizeHeight(true); - if (_this22.table.options.rowFormatter) { + if (_this15.table.options.rowFormatter) { - _this22.table.options.rowFormatter(_this22.getComponent()); + _this15.table.options.rowFormatter(_this15.getComponent()); } } else { - _this22.initialized = false; + _this15.initialized = false; - _this22.height = 0; + _this15.height = 0; - _this22.heightStyled = ""; + _this15.heightStyled = ""; } - if (_this22.table.options.dataTree !== false && _this22.table.modExists("dataTree") && _this22.table.modules.dataTree.redrawNeeded(updatedData)) { + if (_this15.table.options.dataTree !== false && _this15.table.modExists("dataTree") && _this15.table.modules.dataTree.redrawNeeded(updatedData)) { - _this22.table.modules.dataTree.initializeRow(_this22); + _this15.table.modules.dataTree.initializeRow(_this15); - if (visible) { + _this15.table.modules.dataTree.layoutRow(_this15); - _this22.table.modules.dataTree.layoutRow(_this22); - - _this22.table.rowManager.refreshActiveData("tree", false, true); - } + _this15.table.rowManager.refreshActiveData("tree", false, true); } //this.reinitialize(); - _this22.table.options.rowUpdated.call(_this22.table, _this22.getComponent()); - - if (_this22.table.options.dataChanged) { - - _this22.table.options.dataChanged.call(_this22.table, _this22.table.rowManager.getData()); - } + _this15.table.options.rowUpdated.call(_this15.table, _this15.getComponent()); resolve(); }); @@ -7046,15 +6277,18 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol Row.prototype.getData = function (transform) { + var self = this; + if (transform) { - if (this.table.modExists("accessor")) { + if (self.table.modExists("accessor")) { - return this.table.modules.accessor.transformRow(this, transform); + return self.table.modules.accessor.transformRow(self.data, transform); } - } + } else { - return this.data; + return this.data; + } }; Row.prototype.getCell = function (column) { @@ -7195,19 +6429,19 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol Row.prototype.delete = function () { - var _this23 = this; + var _this16 = this; return new Promise(function (resolve, reject) { var index, rows; - if (_this23.table.options.history && _this23.table.modExists("history")) { + if (_this16.table.options.history && _this16.table.modExists("history")) { - if (_this23.table.options.groupBy && _this23.table.modExists("groupRows")) { + if (_this16.table.options.groupBy && _this16.table.modExists("groupRows")) { - rows = _this23.getGroup().rows; + rows = _this16.getGroup().rows; - index = rows.indexOf(_this23); + index = rows.indexOf(_this16); if (index) { @@ -7215,18 +6449,18 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol } } else { - index = _this23.table.rowManager.getRowIndex(_this23); + index = _this16.table.rowManager.getRowIndex(_this16); if (index) { - index = _this23.table.rowManager.rows[index - 1]; + index = _this16.table.rowManager.rows[index - 1]; } } - _this23.table.modules.history.action("rowDelete", _this23, { data: _this23.getData(), pos: !index, index: index }); + _this16.table.modules.history.action("rowDelete", _this16, { data: _this16.getData(), pos: !index, index: index }); } - _this23.deleteActual(); + _this16.deleteActual(); resolve(); }); @@ -7236,7 +6470,22 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol var index = this.table.rowManager.getRowIndex(this); - this.detatchModules(); + //deselect row if it is selected + + if (this.table.modExists("selectRow")) { + + this.table.modules.selectRow._deselectRow(this, true); + } + + //cancel edit if row is currently being edited + + if (this.table.modExists("edit")) { + + if (this.table.modules.edit.currentCell.row === this) { + + this.table.modules.edit.cancelEdit(); + } + } // if(this.table.options.dataTree && this.table.modExists("dataTree")){ @@ -7266,8 +6515,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.heightInitialized = false; - this.element = false; - if (this.table.options.dataTree && this.table.modExists("dataTree", true)) { this.table.modules.dataTree.rowDelete(this); @@ -7280,35 +6527,10 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol if (this.table.options.groupBy && this.table.modExists("groupRows")) { this.table.modules.columnCalcs.recalcRowGroup(this); - } else { - - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } - } - }; - - Row.prototype.detatchModules = function () { - - //deselect row if it is selected - - if (this.table.modExists("selectRow")) { - - this.table.modules.selectRow._deselectRow(this, true); - } - - //cancel edit if row is currently being edited - - if (this.table.modExists("edit")) { - - if (this.table.modules.edit.currentCell.row === this) { - - this.table.modules.edit.cancelEdit(); - } - } - - if (this.table.modExists("frozenRows")) { + } else { - this.table.modules.frozenRows.detachRow(this); + this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); + } } }; @@ -7316,7 +6538,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol var cellCount = this.cells.length; - for (var _i8 = 0; _i8 < cellCount; _i8++) { + for (var _i5 = 0; _i5 < cellCount; _i5++) { this.cells[0].delete(); } @@ -7324,8 +6546,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol Row.prototype.wipe = function () { - this.detatchModules(); - this.deleteCells(); while (this.element.firstChild) { @@ -7374,11 +6594,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol return this._cell.getOldValue(); }; - CellComponent.prototype.getInitialValue = function () { - - return this._cell.initialValue; - }; - CellComponent.prototype.getElement = function () { return this._cell.getElement(); @@ -7419,11 +6634,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this._cell.setValueActual(this._cell.getOldValue()); }; - CellComponent.prototype.restoreInitialValue = function () { - - this._cell.setValueActual(this._cell.initialValue); - }; - CellComponent.prototype.edit = function (force) { return this._cell.edit(force); @@ -7459,7 +6669,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol CellComponent.prototype.clearValidation = function () { - if (this._cell.table.modExists("validate", true)) { + if (self.table.modExists("validate", true)) { this._cell.table.modules.validate.clearValidation(this._cell); } @@ -7497,8 +6707,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.value = null; - this.initialValue; - this.oldValue = null; this.modules = {}; @@ -7511,9 +6719,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.component = null; - this.loaded = false; //track if the cell has been added to the DOM yet - - this.build(); }; @@ -7531,8 +6736,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this._configureCell(); this.setValueActual(this.column.getFieldValue(this.row.data)); - - this.initialValue = this.value; }; Cell.prototype.generateElement = function () { @@ -8041,13 +7244,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol Cell.prototype.getElement = function () { - if (!this.loaded) { - - this.loaded = true; - - this.layoutElement(); - } - return this.element; }; @@ -8083,19 +7279,11 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.column.cellEvents.cellEdited.call(this.table, component); } - if (this.table.options.groupUpdateOnCellEdit && this.table.options.groupBy && this.table.modExists("groupRows")) { - - this.table.modules.groupRows.reassignRowToGroup(this.row); - } - this.cellRendered(); this.table.options.cellEdited.call(this.table, component); - if (this.table.options.dataChanged) { - - this.table.options.dataChanged.call(this.table, this.table.rowManager.getData()); - } + this.table.options.dataEdited.call(this.table, this.table.rowManager.getData()); } }; @@ -8161,26 +7349,20 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.table.modules.reactiveData.unblock(); } - if (this.loaded) { - - this.layoutElement(); - } - }; - - Cell.prototype.layoutElement = function () { - this._generateContents(); this._generateTooltip(); //set resizable handles - if (this.table.options.resizableColumns && this.table.modExists("resizeColumns") && this.row.type === "row") { + if (this.table.options.resizableColumns && this.table.modExists("resizeColumns")) { this.table.modules.resizeColumns.initializeColumn("cell", this.column, this.element); } - if ((this.column.definition.contextMenu || this.column.definition.clickMenu) && this.table.modExists("menu")) { + //set column menu + + if (this.column.definition.contextMenu && this.table.modExists("menu")) { this.table.modules.menu.initializeCell(this); } @@ -8247,7 +7429,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol Cell.prototype.show = function () { - this.element.style.display = this.column.vertAlign ? "inline-flex" : ""; + this.element.style.display = ""; }; Cell.prototype.hide = function () { @@ -8294,7 +7476,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol Cell.prototype.delete = function () { - if (!this.table.rowManager.redrawBlock && this.element.parentNode) { + if (!this.table.rowManager.redrawBlock) { this.element.parentNode.removeChild(this.element); } @@ -8309,11 +7491,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.table.modules.edit.clearEdited(this); } - if (this.table.options.history) { - - this.table.modules.history.clearComponentHistory(this); - } - this.element = false; this.column.deleteCell(this); @@ -8597,27 +7774,21 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.footerManager = null; //holder Footer Manager - this.vdomHoz = null; //holder horizontal virtual dom - - this.browser = ""; //hold current browser type this.browserSlow = false; //handle reduced functionality for slower browsers this.browserMobile = false; //check if running on moble, prevent resize cancelling edit on keyboard appearence - this.rtl = false; //check if the table is in RTL mode - this.modules = {}; //hold all modules bound to this table - if (this.initializeElement(element)) { + this.initializeElement(element); - this.initializeOptions(options || {}); + this.initializeOptions(options || {}); - this._create(); - } + this._create(); Tabulator.prototype.comms.register(this); //register table for inderdevice communication }; @@ -8657,9 +7828,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol cellHozAlign: "", //horizontal align columns - cellVertAlign: "", //vertical align columns - - headerHozAlign: "", //horizontal header alignment + cellVertAlign: "", //certical align columns data: [], //default starting data @@ -8667,7 +7836,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol autoColumns: false, //build columns from data row structure - autoColumnsDefinitions: false, reactiveData: false, //enable data reactivity @@ -8699,8 +7867,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol headerSortTristate: false, //set default tristate header sorting - headerSortElement: "
", //header sort element - footerElement: false, //hold footer element @@ -8708,8 +7874,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol index: "id", //filed for row index - textDirection: "auto", - keybindings: [], //array for keybindings @@ -8756,10 +7920,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol dataTree: false, //enable data tree - dataTreeFilter: true, //filter child rows - - dataTreeSort: true, //sort child rows - dataTreeElementColumn: false, dataTreeBranchElement: true, //show data tree branch element @@ -8837,8 +7997,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol virtualDomBuffer: 0, // set virtual DOM buffer size - virtualDomHoz: false, //enable horizontal DOM virtualization - persistentLayout: false, //DEPRICATED - REMOVE in 5.0 @@ -8920,8 +8078,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol groupValues: false, - groupUpdateOnCellEdit: false, - groupHeader: false, //header generation function groupHeaderPrint: null, @@ -9022,8 +8178,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol rowContextMenu: false, - rowClickMenu: false, - rowAdded: function rowAdded() {}, rowDeleted: function rowDeleted() {}, @@ -9094,9 +8248,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol dataLoaded: function dataLoaded() {}, - dataEdited: false, //DEPRECATED - - dataChanged: false, + dataEdited: function dataEdited() {}, //ajax callbacks @@ -9138,8 +8290,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol groupContextMenu: false, - groupClickMenu: false, - groupTap: false, groupDblTap: false, @@ -9202,10 +8352,10 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol if (Array.isArray(this.defaultOptions[key])) { - this.options[key] = Object.assign([], this.defaultOptions[key]); + this.options[key] = []; } else if (_typeof(this.defaultOptions[key]) === "object" && this.defaultOptions[key] !== null) { - this.options[key] = Object.assign({}, this.defaultOptions[key]); + this.options[key] = {}; } else { this.options[key] = this.defaultOptions[key]; @@ -9242,38 +8392,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol } }; - Tabulator.prototype.rtlCheck = function () { - - var style = window.getComputedStyle(this.element); - - switch (this.options.textDirection) { - - case "auto": - - if (style.direction !== "rtl") { - - break; - }; - - case "rtl": - - this.element.classList.add("tabulator-rtl"); - - this.rtl = true; - - break; - - case "ltr": - - this.element.classList.add("tabulator-ltr"); - - default: - - this.rtl = false; - - } - }; - //convert depricated functionality to new functions Tabulator.prototype._mapDepricatedFunctionality = function () { @@ -9288,13 +8406,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol } } - if (this.options.dataEdited) { - - console.warn("DEPRECATION WARNING - dataEdited option has been deprecated, please use the dataChanged option instead"); - - this.options.dataChanged = this.options.dataEdited; - } - if (this.options.downloadDataFormatter) { console.warn("DEPRECATION WARNING - downloadDataFormatter option has been deprecated"); @@ -9393,8 +8504,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.bindModules(); - this.rtlCheck(); - if (this.element.tagName === "TABLE") { if (this.modExists("htmlTableImport", true)) { @@ -9413,11 +8522,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.rowManager.setColumnManager(this.columnManager); - if (this.options.virtualDomHoz) { - - this.vdomHoz = new VDomHoz(this); - } - this._buildElement(); this._loadInitialData(); @@ -9438,7 +8542,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //build tabulator element Tabulator.prototype._buildElement = function () { - var _this24 = this; + var _this17 = this; var element = this.element, mod = this.modules, @@ -9494,9 +8598,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //set localization - - mod.localize.initialize(); - if (options.headerFilterPlaceholder !== false) { mod.localize.setHeaderFilterPlaceholder(options.headerFilterPlaceholder); @@ -9618,7 +8719,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol options.initialHeaderFilter.forEach(function (item) { - var column = _this24.columnManager.findColumn(item.field); + var column = _this17.columnManager.findColumn(item.field); if (column) { @@ -9834,7 +8935,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //local data from local file Tabulator.prototype.setDataFromLocalFile = function (extensions) { - var _this25 = this; + var _this18 = this; return new Promise(function (resolve, reject) { @@ -9866,7 +8967,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol return; } - _this25.setData(data).then(function (data) { + _this18._setData(data).then(function (data) { resolve(data); }).catch(function (err) { @@ -10076,7 +9177,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //update table data Tabulator.prototype.updateData = function (data) { - var _this26 = this; + var _this19 = this; var self = this; @@ -10084,9 +9185,9 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol return new Promise(function (resolve, reject) { - if (_this26.modExists("ajax")) { + if (_this19.modExists("ajax")) { - _this26.modules.ajax.blockActiveRequest(); + _this19.modules.ajax.blockActiveRequest(); } if (typeof data === "string") { @@ -10125,13 +9226,13 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Tabulator.prototype.addData = function (data, pos, index) { - var _this27 = this; + var _this20 = this; return new Promise(function (resolve, reject) { - if (_this27.modExists("ajax")) { + if (_this20.modExists("ajax")) { - _this27.modules.ajax.blockActiveRequest(); + _this20.modules.ajax.blockActiveRequest(); } if (typeof data === "string") { @@ -10141,7 +9242,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol if (data) { - _this27.rowManager.addRows(data, pos, index).then(function (rows) { + _this20.rowManager.addRows(data, pos, index).then(function (rows) { var output = []; @@ -10164,7 +9265,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //update table data Tabulator.prototype.updateOrAddData = function (data) { - var _this28 = this; + var _this21 = this; var self = this, rows = [], @@ -10172,9 +9273,9 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol return new Promise(function (resolve, reject) { - if (_this28.modExists("ajax")) { + if (_this21.modExists("ajax")) { - _this28.modules.ajax.blockActiveRequest(); + _this21.modules.ajax.blockActiveRequest(); } if (typeof data === "string") { @@ -10264,11 +9365,11 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //delete row from table Tabulator.prototype.deleteRow = function (index) { - var _this29 = this; + var _this22 = this; return new Promise(function (resolve, reject) { - var self = _this29, + var self = _this22, count = 0, successCount = 0, foundRows = []; @@ -10297,7 +9398,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol index.forEach(function (item) { - var row = _this29.rowManager.findRow(item, true); + var row = _this22.rowManager.findRow(item, true); if (row) { @@ -10316,7 +9417,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol foundRows.sort(function (a, b) { - return _this29.rowManager.rows.indexOf(a) > _this29.rowManager.rows.indexOf(b) ? 1 : -1; + return _this22.rowManager.rows.indexOf(a) > _this22.rowManager.rows.indexOf(b) ? 1 : -1; }); foundRows.forEach(function (row) { @@ -10339,7 +9440,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //add row to table Tabulator.prototype.addRow = function (data, pos, index) { - var _this30 = this; + var _this23 = this; return new Promise(function (resolve, reject) { @@ -10348,13 +9449,13 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol data = JSON.parse(data); } - _this30.rowManager.addRows(data, pos, index).then(function (rows) { + _this23.rowManager.addRows(data, pos, index).then(function (rows) { //recalc column calculations if present - if (_this30.modExists("columnCalcs")) { + if (_this23.modExists("columnCalcs")) { - _this30.modules.columnCalcs.recalc(_this30.rowManager.activeRows); + _this23.modules.columnCalcs.recalc(_this23.rowManager.activeRows); } resolve(rows[0].getComponent()); @@ -10365,11 +9466,11 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //update a row if it exitsts otherwise create it Tabulator.prototype.updateOrAddRow = function (index, data) { - var _this31 = this; + var _this24 = this; return new Promise(function (resolve, reject) { - var row = _this31.rowManager.findRow(index); + var row = _this24.rowManager.findRow(index); if (typeof data === "string") { @@ -10382,9 +9483,9 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //recalc column calculations if present - if (_this31.modExists("columnCalcs")) { + if (_this24.modExists("columnCalcs")) { - _this31.modules.columnCalcs.recalc(_this31.rowManager.activeRows); + _this24.modules.columnCalcs.recalc(_this24.rowManager.activeRows); } resolve(row.getComponent()); @@ -10394,13 +9495,13 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }); } else { - row = _this31.rowManager.addRows(data).then(function (rows) { + row = _this24.rowManager.addRows(data).then(function (rows) { //recalc column calculations if present - if (_this31.modExists("columnCalcs")) { + if (_this24.modExists("columnCalcs")) { - _this31.modules.columnCalcs.recalc(_this31.rowManager.activeRows); + _this24.modules.columnCalcs.recalc(_this24.rowManager.activeRows); } resolve(rows[0].getComponent()); @@ -10415,11 +9516,11 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //update row data Tabulator.prototype.updateRow = function (index, data) { - var _this32 = this; + var _this25 = this; return new Promise(function (resolve, reject) { - var row = _this32.rowManager.findRow(index); + var row = _this25.rowManager.findRow(index); if (typeof data === "string") { @@ -10447,15 +9548,15 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //scroll to row in DOM Tabulator.prototype.scrollToRow = function (index, position, ifVisible) { - var _this33 = this; + var _this26 = this; return new Promise(function (resolve, reject) { - var row = _this33.rowManager.findRow(index); + var row = _this26.rowManager.findRow(index); if (row) { - _this33.rowManager.scrollToRow(row, position, ifVisible).then(function () { + _this26.rowManager.scrollToRow(row, position, ifVisible).then(function () { resolve(); }).catch(function (err) { @@ -10638,13 +9739,13 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Tabulator.prototype.addColumn = function (definition, before, field) { - var _this34 = this; + var _this27 = this; return new Promise(function (resolve, reject) { - var column = _this34.columnManager.findColumn(field); + var column = _this27.columnManager.findColumn(field); - _this34.columnManager.addColumn(definition, before, column).then(function (column) { + _this27.columnManager.addColumn(definition, before, column).then(function (column) { resolve(column.getComponent()); }).catch(function (err) { @@ -10655,11 +9756,11 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Tabulator.prototype.deleteColumn = function (field) { - var _this35 = this; + var _this28 = this; return new Promise(function (resolve, reject) { - var column = _this35.columnManager.findColumn(field); + var column = _this28.columnManager.findColumn(field); if (column) { @@ -10680,11 +9781,11 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Tabulator.prototype.updateColumnDefinition = function (field, definition) { - var _this36 = this; + var _this29 = this; return new Promise(function (resolve, reject) { - var column = _this36.columnManager.findColumn(field); + var column = _this29.columnManager.findColumn(field); if (column) { @@ -10728,15 +9829,15 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //scroll to column in DOM Tabulator.prototype.scrollToColumn = function (field, position, ifVisible) { - var _this37 = this; + var _this30 = this; return new Promise(function (resolve, reject) { - var column = _this37.columnManager.findColumn(field); + var column = _this30.columnManager.findColumn(field); if (column) { - _this37.columnManager.scrollToColumn(column, position, ifVisible).then(function () { + _this30.columnManager.scrollToColumn(column, position, ifVisible).then(function () { resolve(); }).catch(function (err) { @@ -11024,7 +10125,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Tabulator.prototype.clearCellValidation = function (cells) { - var _this38 = this; + var _this31 = this; if (this.modExists("validate", true)) { @@ -11040,7 +10141,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol cells.forEach(function (cell) { - _this38.modules.validate.clearValidation(cell._getSelf()); + _this31.modules.validate.clearValidation(cell._getSelf()); }); } }; @@ -11092,17 +10193,17 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Tabulator.prototype.setPageToRow = function (row) { - var _this39 = this; + var _this32 = this; return new Promise(function (resolve, reject) { - if (_this39.options.pagination && _this39.modExists("page")) { + if (_this32.options.pagination && _this32.modExists("page")) { - row = _this39.rowManager.findRow(row); + row = _this32.rowManager.findRow(row); if (row) { - _this39.modules.page.setPageToRow(row).then(function () { + _this32.modules.page.setPageToRow(row).then(function () { resolve(); }).catch(function () { @@ -11208,26 +10309,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol } }; - Tabulator.prototype.setGroupValues = function (groupValues) { - - if (this.modExists("groupRows", true)) { - - this.options.groupValues = groupValues; - - this.modules.groupRows.initialize(); - - this.rowManager.refreshActiveData("display"); - - if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) { - - this.modules.persistence.save("group"); - } - } else { - - return false; - } - }; - Tabulator.prototype.setGroupStartOpen = function (values) { if (this.modExists("groupRows", true)) { @@ -11310,7 +10391,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Tabulator.prototype.clearCellEdited = function (cells) { - var _this40 = this; + var _this33 = this; if (this.modExists("edit", true)) { @@ -11326,7 +10407,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol cells.forEach(function (cell) { - _this40.modules.edit.clearEdited(cell._getSelf()); + _this33.modules.edit.clearEdited(cell._getSelf()); }); } }; @@ -11636,7 +10717,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol deepClone: function deepClone(obj) { - var clone = Object.assign(Array.isArray(obj) ? [] : {}, obj); + var clone = Array.isArray(obj) ? [] : {}; for (var i in obj) { @@ -11649,6 +10730,9 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol clone[i] = this.deepClone(obj[i]); } + } else { + + clone[i] = obj[i]; } } @@ -11788,16 +10872,10 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol "fitData": function fitData(columns) { - if (this.table.options.virtualDomHoz) { - - this.table.vdomHoz.fitDataLayoutOverride(); - } else { - - columns.forEach(function (column) { + columns.forEach(function (column) { - column.reinitializeWidth(); - }); - } + column.reinitializeWidth(); + }); if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { @@ -11841,7 +10919,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol "fitDataStretch": function fitDataStretch(columns) { - var _this41 = this; + var _this34 = this; var colsWidth = 0, tableWidth = this.table.rowManager.element.clientWidth, @@ -11855,7 +10933,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol column.reinitializeWidth(); } - if (_this41.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible) { + if (_this34.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible) { lastCol = column; } @@ -12147,27 +11225,20 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.lang = false; //current language this.bindings = {}; //update events to call when locale is changed - - this.langList = {}; - }; - - Localize.prototype.initialize = function () { - - this.langList = Tabulator.prototype.helpers.deepClone(this.langs); }; //set header placehoder Localize.prototype.setHeaderFilterPlaceholder = function (placeholder) { - this.langList.default.headerFilters.default = placeholder; + this.langs.default.headerFilters.default = placeholder; }; //set header filter placeholder by column Localize.prototype.setHeaderFilterColumnPlaceholder = function (column, placeholder) { - this.langList.default.headerFilters.columns[column] = placeholder; + this.langs.default.headerFilters.columns[column] = placeholder; if (this.lang && !this.lang.headerFilters.columns[column]) { @@ -12179,12 +11250,12 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol Localize.prototype.installLang = function (locale, lang) { - if (this.langList[locale]) { + if (this.langs[locale]) { - this._setLangProp(this.langList[locale], lang); + this._setLangProp(this.langs[locale], lang); } else { - this.langList[locale] = lang; + this.langs[locale] = lang; } }; @@ -12244,11 +11315,11 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //if locale is not set, check for matching top level locale else use default - if (!self.langList[desiredLocale]) { + if (!self.langs[desiredLocale]) { var prefix = desiredLocale.split("-")[0]; - if (self.langList[prefix]) { + if (self.langs[prefix]) { console.warn("Localization Error - Exact matching locale not found, using closest match: ", desiredLocale, prefix); @@ -12266,11 +11337,11 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //load default lang template - self.lang = Tabulator.prototype.helpers.deepClone(self.langList.default || {}); + self.lang = Tabulator.prototype.helpers.deepClone(self.langs.default || {}); if (desiredLocale != "default") { - traverseLang(self.langList[desiredLocale], self.lang); + traverseLang(self.langs[desiredLocale], self.lang); } self.table.options.localized.call(self.table, self.locale, self.lang); @@ -12289,7 +11360,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol Localize.prototype.getLang = function (locale) { - return locale ? this.langList[locale] : this.lang; + return locale ? this.langs[locale] : this.lang; }; //get text for current locale @@ -12545,15 +11616,15 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; //apply accessor to row - Accessor.prototype.transformRow = function (row, type) { - var key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)), - rowComponent = row.getComponent(); + Accessor.prototype.transformRow = function (dataIn, type) { + var self = this, + key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)); //clone data object with deep copy to isolate internal data from returned result - var data = Tabulator.prototype.helpers.deepClone(row.data || {}); + var data = Tabulator.prototype.helpers.deepClone(dataIn || {}); - this.table.columnManager.traverse(function (column) { - var value, accessor, params, colCompnent; + self.table.columnManager.traverse(function (column) { + var value, accessor, params, component; if (column.modules.accessor) { @@ -12563,9 +11634,9 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol value = column.getFieldValue(data); if (value != "undefined") { - colCompnent = column.getComponent(); - params = typeof accessor.params === "function" ? accessor.params(value, data, type, colCompnent, rowComponent) : accessor.params; - column.setFieldValue(data, accessor.accessor(value, data, type, params, colCompnent, rowComponent)); + component = column.getComponent(); + params = typeof accessor.params === "function" ? accessor.params(value, data, type, component) : accessor.params; + column.setFieldValue(data, accessor.accessor(value, data, type, params, component)); } } } @@ -12758,11 +11829,11 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Ajax.prototype._loadDataStandard = function (inPosition, columnsChanged) { - var _this42 = this; + var _this35 = this; return new Promise(function (resolve, reject) { - _this42.sendRequest(inPosition).then(function (data) { - _this42.table.rowManager.setData(data, inPosition, columnsChanged).then(function () { + _this35.sendRequest(inPosition).then(function (data) { + _this35.table.rowManager.setData(data, inPosition, columnsChanged).then(function () { resolve(); }).catch(function (e) { reject(e); @@ -12807,7 +11878,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //send ajax request Ajax.prototype.sendRequest = function (silent) { - var _this43 = this; + var _this36 = this; var self = this, url = self.url, @@ -12821,7 +11892,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol self._loadDefaultConfig(); return new Promise(function (resolve, reject) { - if (self.table.options.ajaxRequesting.call(_this43.table, self.url, self.params) !== false) { + if (self.table.options.ajaxRequesting.call(_this36.table, self.url, self.params) !== false) { self.loading = true; @@ -12829,7 +11900,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol self.showLoader(); } - _this43.loaderPromise(url, self.config, self.params).then(function (data) { + _this36.loaderPromise(url, self.config, self.params).then(function (data) { if (requestNo === self.requestOrder) { if (self.table.options.ajaxResponse) { data = self.table.options.ajaxResponse.call(self.table, self.url, self.params, data); @@ -13040,42 +12111,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol Tabulator.prototype.registerModule("ajax", Ajax); - //public calc object - var CalcComponent = function CalcComponent(row) { - this._row = row; - }; - - CalcComponent.prototype.getData = function (transform) { - return this._row.getData(transform); - }; - - CalcComponent.prototype.getElement = function () { - return this._row.getElement(); - }; - - CalcComponent.prototype.getTable = function () { - return this._row.table; - }; - - CalcComponent.prototype.getCells = function () { - var cells = []; - - this._row.getCells().forEach(function (cell) { - cells.push(cell.getComponent()); - }); - - return cells; - }; - - CalcComponent.prototype.getCell = function (column) { - var cell = this._row.getCell(column); - return cell ? cell.getComponent() : false; - }; - - CalcComponent.prototype._getSelf = function () { - return this._row; - }; - var ColumnCalcs = function ColumnCalcs(table) { this.table = table; //hold Tabulator object this.topCalcs = []; @@ -13206,7 +12241,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol var hozAdjust = 0, scrollWidth = this.table.columnManager.getElement().scrollWidth - this.table.element.clientWidth; - if (this.botInitialized && this.botRow) { + if (this.botInitialized) { this.botRow.getElement().style.marginLeft = -left + "px"; } }; @@ -13257,7 +12292,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; ColumnCalcs.prototype.recalcAll = function () { - var _this44 = this; + var _this37 = this; if (this.topCalcs.length || this.botCalcs.length) { if (this.table.options.columnCalcs !== "group") { @@ -13269,7 +12304,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol var groups = table.modules.groupRows.getChildGroups(); groups.forEach(function (group) { - _this44.recalcGroup(group); + _this37.recalcGroup(group); }); } } @@ -13309,16 +12344,16 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; ColumnCalcs.prototype.rowsToData = function (rows) { - var _this45 = this; + var _this38 = this; var data = []; rows.forEach(function (row) { data.push(row.getData()); - if (_this45.table.options.dataTree && _this45.table.options.dataTreeChildColumnCalcs) { + if (_this38.table.options.dataTree && _this38.table.options.dataTreeChildColumnCalcs) { if (row.modules.dataTree.open) { - var children = _this45.rowsToData(_this45.table.modules.dataTree.getFilteredTreeChildren(row)); + var children = _this38.rowsToData(_this38.table.modules.dataTree.getFilteredTreeChildren(row)); data = data.concat(children); } } @@ -13345,16 +12380,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol row.getElement().classList.add("tabulator-calcs", "tabulator-calcs-" + pos); - row.component = false; - - row.getComponent = function () { - if (!this.component) { - this.component = new CalcComponent(this); - } - - return this.component; - }; - row.generateCells = function () { var cells = []; @@ -13366,9 +12391,10 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol self.genColumn.hozAlign = column.hozAlign; if (column.definition[pos + "CalcFormatter"] && self.table.modExists("format")) { + self.genColumn.modules.format = { formatter: self.table.modules.format.getFormatter(column.definition[pos + "CalcFormatter"]), - params: column.definition[pos + "CalcFormatterParams"] || {} + params: column.definition[pos + "CalcFormatterParams"] }; } else { self.genColumn.modules.format = { @@ -13382,7 +12408,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //generate cell and assign to correct column var cell = new Cell(self.genColumn, row); - cell.getElement(); cell.column = column; cell.setWidth(); @@ -13495,7 +12520,8 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol if (values.length) { output = values.reduce(function (sum, value) { - return Number(sum) + Number(value); + value = Number(value); + return sum + value; }); output = output / values.length; @@ -13589,7 +12615,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Clipboard.prototype.initialize = function () { - var _this46 = this; + var _this39 = this; this.mode = this.table.options.clipboard; @@ -13599,25 +12625,25 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.table.element.addEventListener("copy", function (e) { var plain, html, list; - if (!_this46.blocked) { + if (!_this39.blocked) { e.preventDefault(); - if (_this46.customSelection) { - plain = _this46.customSelection; + if (_this39.customSelection) { + plain = _this39.customSelection; - if (_this46.table.options.clipboardCopyFormatter) { - plain = _this46.table.options.clipboardCopyFormatter("plain", plain); + if (_this39.table.options.clipboardCopyFormatter) { + plain = _this39.table.options.clipboardCopyFormatter("plain", plain); } } else { - var list = _this46.table.modules.export.generateExportList(_this46.table.options.clipboardCopyConfig, _this46.table.options.clipboardCopyStyled, _this46.rowRange, "clipboard"); + var list = _this39.table.modules.export.generateExportList(_this39.rowRange, _this39.table.options.clipboardCopyStyled, _this39.table.options.clipboardCopyConfig, "clipboard"); - html = _this46.table.modules.export.genereateHTMLTable(list); - plain = html ? _this46.generatePlainContent(list) : ""; + html = _this39.table.modules.export.genereateHTMLTable(list); + plain = html ? _this39.generatePlainContent(list) : ""; - if (_this46.table.options.clipboardCopyFormatter) { - plain = _this46.table.options.clipboardCopyFormatter("plain", plain); - html = _this46.table.options.clipboardCopyFormatter("html", html); + if (_this39.table.options.clipboardCopyFormatter) { + plain = _this39.table.options.clipboardCopyFormatter("plain", plain); + html = _this39.table.options.clipboardCopyFormatter("html", html); } } @@ -13635,16 +12661,16 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol } } - _this46.table.options.clipboardCopied.call(_this46.table, plain, html); + _this39.table.options.clipboardCopied.call(_this39.table, plain, html); - _this46.reset(); + _this39.reset(); } }); } if (this.mode === true || this.mode === "paste") { this.table.element.addEventListener("paste", function (e) { - _this46.paste(e); + _this39.paste(e); }); } @@ -13653,8 +12679,8 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Clipboard.prototype.reset = function () { - this.blocked = true; - this.customSelection = false; + this.blocked = false; + this.originalSelectionText = ""; }; Clipboard.prototype.generatePlainContent = function (list) { @@ -13672,21 +12698,18 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol col.value = col.component.getKey(); } - if (col.value === null) { - value = ""; - } else { - switch (_typeof(col.value)) { - case "object": - value = JSON.stringify(col.value); - break; + switch (_typeof(col.value)) { + case "object": + value = JSON.stringify(col.value); + break; - case "undefined": - value = ""; - break; + case "undefined": + case "null": + value = ""; + break; - default: - value = col.value; - } + default: + value = col.value; } } @@ -14062,25 +13085,15 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol if (this.branchEl) { config.branchEl = this.branchEl.cloneNode(true); el.insertBefore(config.branchEl, el.firstChild); - - if (this.table.rtl) { - config.branchEl.style.marginRight = (config.branchEl.offsetWidth + config.branchEl.style.marginLeft) * (config.index - 1) + config.index * this.indent + "px"; - } else { - config.branchEl.style.marginLeft = (config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1) + config.index * this.indent + "px"; - } + config.branchEl.style.marginLeft = (config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1) + config.index * this.indent + "px"; } else { - - if (this.table.rtl) { - el.style.paddingRight = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-right')) + config.index * this.indent + "px"; - } else { - el.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + config.index * this.indent + "px"; - } + el.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + config.index * this.indent + "px"; } } }; DataTree.prototype.generateControlElement = function (row, el) { - var _this47 = this; + var _this40 = this; var config = row.modules.dataTree, el = el || row.getCells()[0].getElement(), @@ -14092,13 +13105,13 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol config.controlEl = this.collapseEl.cloneNode(true); config.controlEl.addEventListener("click", function (e) { e.stopPropagation(); - _this47.collapseRow(row); + _this40.collapseRow(row); }); } else { config.controlEl = this.expandEl.cloneNode(true); config.controlEl.addEventListener("click", function (e) { e.stopPropagation(); - _this47.expandRow(row); + _this40.expandRow(row); }); } @@ -14123,7 +13136,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; DataTree.prototype.getRows = function (rows) { - var _this48 = this; + var _this41 = this; var output = []; @@ -14137,7 +13150,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol config = row.modules.dataTree.children; if (!config.index && config.children !== false) { - children = _this48.getChildren(row); + children = _this41.getChildren(row); children.forEach(function (child) { output.push(child); @@ -14150,7 +13163,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; DataTree.prototype.getChildren = function (row) { - var _this49 = this; + var _this42 = this; var config = row.modules.dataTree, children = [], @@ -14161,20 +13174,20 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol config.children = this.generateChildren(row); } - if (this.table.modExists("filter") && this.table.options.dataTreeFilter) { + if (this.table.modExists("filter")) { children = this.table.modules.filter.filter(config.children); } else { children = config.children; } - if (this.table.modExists("sort") && this.table.options.dataTreeSort) { + if (this.table.modExists("sort")) { this.table.modules.sort.sort(children); } children.forEach(function (child) { output.push(child); - var subChildren = _this49.getChildren(child); + var subChildren = _this42.getChildren(child); subChildren.forEach(function (sub) { output.push(sub); @@ -14186,7 +13199,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; DataTree.prototype.generateChildren = function (row) { - var _this50 = this; + var _this43 = this; var children = []; @@ -14197,11 +13210,11 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol } childArray.forEach(function (childData) { - var childRow = new Row(childData || {}, _this50.table.rowManager); + var childRow = new Row(childData || {}, _this43.table.rowManager); childRow.modules.dataTree.index = row.modules.dataTree.index + 1; childRow.modules.dataTree.parent = row; if (childRow.modules.dataTree.children) { - childRow.modules.dataTree.open = _this50.startOpen(childRow.getComponent(), childRow.modules.dataTree.index); + childRow.modules.dataTree.open = _this43.startOpen(childRow.getComponent(), childRow.modules.dataTree.index); } children.push(childRow); }); @@ -14264,7 +13277,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol config.children = this.generateChildren(row); } - if (this.table.modExists("filter") && this.table.options.dataTreeFilter) { + if (this.table.modExists("filter")) { children = this.table.modules.filter.filter(config.children); } else { children = config.children; @@ -14338,7 +13351,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; DataTree.prototype.findChildIndex = function (subject, parent) { - var _this51 = this; + var _this44 = this; var match = false; @@ -14366,7 +13379,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol } else { //subject should be treated as the index of the row match = parent.data[this.field].find(function (row) { - return row.data[_this51.table.options.index] == subject; + return row.data[_this44.table.options.index] == subject; }); } @@ -14386,9 +13399,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol return match; }; - DataTree.prototype.getTreeChildren = function (row, component, recurse) { - var _this52 = this; - + DataTree.prototype.getTreeChildren = function (row) { var config = row.modules.dataTree, output = []; @@ -14400,11 +13411,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol config.children.forEach(function (childRow) { if (childRow instanceof Row) { - output.push(component ? childRow.getComponent() : childRow); - - if (recurse) { - output = output.concat(_this52.getTreeChildren(childRow, component, recurse)); - } + output.push(childRow.getComponent()); } }); } @@ -14557,7 +13564,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol case "header": row.columns.forEach(function (col, i) { if (col && col.depth === 1) { - headers[i] = typeof col.value == "undefined" || col.value === null ? "" : '"' + String(col.value).split('"').join('""') + '"'; + headers[i] = typeof col.value == "undefined" || typeof col.value == "null" ? "" : col.value; } }); break; @@ -14588,7 +13595,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }); if (headers.length) { - fileContents.unshift(headers.join(delimiter)); + fileContents = [headers].concat(fileContents); } fileContents = fileContents.join("\n"); @@ -14815,7 +13822,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol workbook.SheetNames.push(sheet); - this.modules.comms.send(options.sheets[sheet], "download", "intercept", { + this.table.modules.comms.send(options.sheets[sheet], "download", "intercept", { type: "xlsx", options: { sheetOnly: true }, active: self.active, @@ -14963,10 +13970,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol cell.setValueActual(cell.getValue()); cell.cellRendered(); - if (cell.column.definition.editor == "textarea" || cell.column.definition.variableHeight) { - cell.row.normalizeHeight(true); - } - if (cell.column.cellEvents.cellEditCancelled) { cell.column.cellEvents.cellEditCancelled.call(this.table, component); } @@ -14989,11 +13992,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }); element.addEventListener("mousedown", function (e) { - if (e.button === 2) { - e.preventDefault(); - } else { - self.mouseClick = true; - } + self.mouseClick = true; }); element.addEventListener("focus", function (e) { @@ -15030,24 +14029,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.table.rowManager.element.scrollTop += rowEl.offsetTop + rowEl.offsetHeight - bottomEdge; } } - - var leftEdge = this.table.rowManager.element.scrollLeft, - rightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft, - cellEl = cell.getElement(), - offset = cellEl.offsetLeft; - - if (this.table.modExists("frozenColumns")) { - leftEdge += parseInt(this.table.modules.frozenColumns.leftMargin); - rightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin); - } - - if (cellEl.offsetLeft < leftEdge) { - this.table.rowManager.element.scrollLeft -= leftEdge - cellEl.offsetLeft; - } else { - if (cellEl.offsetLeft + cellEl.offsetWidth > rightEdge) { - this.table.rowManager.element.scrollLeft += cellEl.offsetLeft + cellEl.offsetWidth - rightEdge; - } - } } }; @@ -15079,6 +14060,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol if (valid === true || self.table.options.validationMode === "highlight") { self.clearEditor(); + cell.setValue(value, true); if (!cell.modules.edit) { cell.modules.edit = {}; @@ -15090,15 +14072,12 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol self.editedCells.push(cell); } - cell.setValue(value, true); - if (self.table.options.dataTree && self.table.modExists("dataTree")) { self.table.modules.dataTree.checkForRestyle(cell); } if (valid !== true) { element.classList.add("tabulator-validation-fail"); - self.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid); return false; } @@ -15316,17 +14295,13 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol var editIndex; if (cell.modules.edit && cell.modules.edit.edited) { - cell.modules.edit.edited = false; - - if (cell.modules.validate) { - cell.modules.validate.invalid = false; - } - } + cell.modules.validate.invalid = false; - editIndex = this.editedCells.indexOf(cell); + editIndex = this.editedCells.indexOf(cell); - if (editIndex > -1) { - this.editedCells.splice(editIndex, 1); + if (editIndex > -1) { + this.editedCells.splice(editIndex, 1); + } } }; @@ -15387,12 +14362,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol break; case 27: - cancel(); - break; - - case 35: - case 36: - e.stopPropagation(); + cancel(); break; } }); @@ -15439,10 +14409,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol onRendered(function () { input.focus({ preventScroll: true }); input.style.height = "100%"; - - input.scrollHeight; - input.style.height = input.scrollHeight + "px"; - cell.getRow().normalizeHeight(); }); function onChange(e) { @@ -15502,11 +14468,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol e.stopPropagation(); } break; - - case 35: - case 36: - e.stopPropagation(); - break; } }); @@ -15607,11 +14568,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol e.stopPropagation(); } break; - - case 35: - case 36: - e.stopPropagation(); - break; } }); @@ -15705,13 +14661,11 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //select select: function select(cell, onRendered, success, cancel, editorParams) { - var _this53 = this; - var self = this, cellEl = cell.getElement(), initialValue = cell.getValue(), vertNav = editorParams.verticalNavigation || "editor", - initialDisplayValue = typeof initialValue !== "undefined" || initialValue === null ? Array.isArray(initialValue) ? initialValue : [initialValue] : typeof editorParams.defaultValue !== "undefined" ? editorParams.defaultValue : [], + initialDisplayValue = typeof initialValue !== "undefined" || initialValue === null ? initialValue : typeof editorParams.defaultValue !== "undefined" ? editorParams.defaultValue : [], input = document.createElement("input"), listEl = document.createElement("div"), multiselect = editorParams.multiselect, @@ -15719,8 +14673,9 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol currentItem = {}, displayItems = [], currentItems = [], - blurable = true, - blockListShow = false; + blurable = true; + + this.table.rowManager.element.addEventListener("scroll", cancelItem); if (Array.isArray(editorParams) || !Array.isArray(editorParams) && (typeof editorParams === 'undefined' ? 'undefined' : _typeof(editorParams)) === "object" && !editorParams.values) { console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object"); @@ -15884,12 +14839,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol el.innerHTML = item.label === "" ? " " : item.label; el.addEventListener("click", function () { - blockListShow = true; - - setTimeout(function () { - blockListShow = false; - }, 10); - // setCurrentItem(item); // chooseItem(); if (multiselect) { @@ -15952,10 +14901,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol item.element.classList.add("active"); } } - - if (item && item.element && item.element.scrollIntoView) { - item.element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' }); - } } // function chooseItem(){ @@ -16019,17 +14964,12 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol } if (item) { - input.value = item.label; success(item.value); } - - initialDisplayValue = input.value; } - function chooseItems(silent) { - if (!silent) { - hideList(); - } + function chooseItems() { + hideList(); var output = []; @@ -16037,8 +14977,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol output.push(item.value); }); - initialDisplayValue = input.value; - success(output); } @@ -16050,19 +14988,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }); input.value = output.join(", "); - - if (self.currentCell === false) { - chooseItems(true); - } - } - - function unsetItems() { - - var len = currentItems.length; - - for (var _i9 = 0; _i9 < len; _i9++) { - unsetItem(0); - } } function cancelItem() { @@ -16071,9 +14996,8 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol } function showList() { - currentItems = []; - if (!listEl.parentNode) { + if (editorParams.values === true) { parseItems(getUniqueColumnValues(), initialDisplayValue); } else if (typeof editorParams.values === "string") { @@ -16143,13 +15067,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol // parseItems(editorParams.values || [], initialValue); // } - input.addEventListener("search", function (e) { - if (!input.value) { - unsetItems(); - chooseItems(); - } - }); - //allow key based navigation input.addEventListener("keydown", function (e) { var index; @@ -16213,15 +15130,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //escape cancelItem(); break; - - case 9: - //tab - break; - - default: - if (self.currentCell === false) { - e.preventDefault(); - } } }); @@ -16236,9 +15144,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }); input.addEventListener("focus", function (e) { - if (!blockListShow) { - showList(); - } + showList(); }); //style list element @@ -16250,17 +15156,11 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol input.focus({ preventScroll: true }); }); - setTimeout(function () { - _this53.table.rowManager.element.addEventListener("scroll", cancelItem); - }, 10); - return input; }, //autocomplete autocomplete: function autocomplete(cell, onRendered, success, cancel, editorParams) { - var _this54 = this; - var self = this, cellEl = cell.getElement(), initialValue = cell.getValue(), @@ -16275,6 +15175,8 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol blurable = true, uniqueColumnValues = false; + this.table.rowManager.element.addEventListener("scroll", cancelItem); + //style input input.setAttribute("type", "search"); @@ -16565,10 +15467,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol if (item && item.element) { item.element.classList.add("active"); } - - if (item && item.element && item.element.scrollIntoView) { - item.element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' }); - } } function hideList() { @@ -16702,14 +15600,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.table.modules.edit.maskInput(input, editorParams); } - setTimeout(function () { - _this54.table.rowManager.element.addEventListener("scroll", cancelItem); - }, 10); - - genUniqueColumnValues(); - input.value = initialDisplayValue; - filterList(initialDisplayValue, true); - return input; }, @@ -17032,10 +15922,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol input.checked = value === true || value === "true" || value === "True" || value === 1; - onRendered(function () { - input.focus(); - }); - function setValue(blur) { if (tristate) { if (!blur) { @@ -17125,13 +16011,13 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Export.prototype.rowLookup = function (range) { - var _this55 = this; + var _this45 = this; var rows = []; if (typeof range == "function") { range.call(this.table).forEach(function (row) { - row = _this55.table.rowManager.findRow(row); + row = _this45.table.rowManager.findRow(row); if (row) { rows.push(row); @@ -17154,11 +16040,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol case "active": default: - if (this.table.options.pagination) { - rows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2); - } else { - rows = this.table.rowManager.getDisplayRows(); - } + rows = this.table.rowManager.getDisplayRows(); } } @@ -17166,14 +16048,14 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Export.prototype.generateColumnGroupHeaders = function () { - var _this56 = this; + var _this46 = this; var output = []; var columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex; columns.forEach(function (column) { - var colData = _this56.processColumnGroup(column); + var colData = _this46.processColumnGroup(column); if (colData) { output.push(colData); @@ -17184,7 +16066,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Export.prototype.processColumnGroup = function (column) { - var _this57 = this; + var _this47 = this; var subGroups = column.columns, maxDepth = 0, @@ -17201,7 +16083,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol groupData.width = 0; subGroups.forEach(function (subGroup) { - var subGroupData = _this57.processColumnGroup(subGroup); + var subGroupData = _this47.processColumnGroup(subGroup); if (subGroupData) { groupData.width += subGroupData.width; @@ -17251,18 +16133,18 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol headers[level].push(column); if (column.height > 1) { - for (var _i10 = 1; _i10 < column.height; _i10++) { + for (var _i6 = 1; _i6 < column.height; _i6++) { - if (typeof headers[level + _i10] === "undefined") { - headers[level + _i10] = []; + if (typeof headers[level + _i6] === "undefined") { + headers[level + _i6] = []; } - headers[level + _i10].push(false); + headers[level + _i6].push(false); } } if (column.width > 1) { - for (var _i11 = 1; _i11 < column.width; _i11++) { + for (var _i7 = 1; _i7 < column.width; _i7++) { headers[level].push(false); } } @@ -17303,13 +16185,13 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Export.prototype.bodyToExportRows = function (rows) { - var _this58 = this; + var _this48 = this; var columns = []; var exportRows = []; this.table.columnManager.columnsByIndex.forEach(function (column) { - if (_this58.columnVisCheck(column)) { + if (_this48.columnVisCheck(column)) { columns.push(column.getComponent()); } }); @@ -17327,15 +16209,15 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol rows = rows.filter(function (row) { switch (row.type) { case "group": - return _this58.config.rowGroups !== false; + return _this48.config.rowGroups !== false; break; case "calc": - return _this58.config.columnCalcs !== false; + return _this48.config.columnCalcs !== false; break; case "row": - return !(_this58.table.options.dataTree && _this58.config.dataTree === false && row.modules.dataTree.parent); + return !(_this48.table.options.dataTree && _this48.config.dataTree === false && row.modules.dataTree.parent); break; } @@ -17343,7 +16225,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }); rows.forEach(function (row, i) { - var rowData = row.getData(_this58.colVisProp); + var rowData = row.getData(_this48.colVisProp); var exportCols = []; var indent = 0; @@ -17359,7 +16241,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol exportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1)); }); - if (_this58.table.options.dataTree && _this58.config.dataTree !== false) { + if (_this48.table.options.dataTree && _this48.config.dataTree !== false) { indent = row.modules.dataTree.index; } break; @@ -17372,7 +16254,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Export.prototype.genereateTableElement = function (list) { - var _this59 = this; + var _this49 = this; var table = document.createElement("table"), headerEl = document.createElement("thead"), @@ -17405,20 +16287,20 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol list.forEach(function (row, i) { switch (row.type) { case "header": - headerEl.appendChild(_this59.genereateHeaderElement(row, setup, styles)); + headerEl.appendChild(_this49.genereateHeaderElement(row, setup, styles)); break; case "group": - bodyEl.appendChild(_this59.genereateGroupElement(row, setup, styles)); + bodyEl.appendChild(_this49.genereateGroupElement(row, setup, styles)); break; case "calc": - bodyEl.appendChild(_this59.genereateCalcElement(row, setup, styles)); + bodyEl.appendChild(_this49.genereateCalcElement(row, setup, styles)); break; case "row": - var rowEl = _this59.genereateRowElement(row, setup, styles); - _this59.mapElementStyles(i % 2 && styles.evenRow ? styles.evenRow : styles.oddRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]); + var rowEl = _this49.genereateRowElement(row, setup, styles); + _this49.mapElementStyles(i % 2 && styles.evenRow ? styles.evenRow : styles.oddRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]); bodyEl.appendChild(rowEl); break; } @@ -17456,7 +16338,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Export.prototype.genereateHeaderElement = function (row, setup, styles) { - var _this60 = this; + var _this50 = this; var rowEl = document.createElement("tr"); @@ -17470,7 +16352,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol cellEl.innerHTML = column.value; - if (_this60.cloneTableStyle) { + if (_this50.cloneTableStyle) { cellEl.style.boxSizing = "border-box"; } @@ -17478,11 +16360,11 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol cellEl.classList.add(className); }); - _this60.mapElementStyles(column.component.getElement(), cellEl, ["text-align", "border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]); - _this60.mapElementStyles(column.component._column.contentElement, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom"]); + _this50.mapElementStyles(column.component.getElement(), cellEl, ["text-align", "border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]); + _this50.mapElementStyles(column.component._column.contentElement, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom"]); if (column.component._column.visible) { - _this60.mapElementStyles(column.component.getElement(), cellEl, ["width"]); + _this50.mapElementStyles(column.component.getElement(), cellEl, ["width"]); } else { if (column.component._column.definition.width) { cellEl.style.width = column.component._column.definition.width + "px"; @@ -17490,7 +16372,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol } if (column.component._column.parent) { - _this60.mapElementStyles(column.component._column.parent.groupElement, cellEl, ["border-top"]); + _this50.mapElementStyles(column.component._column.parent.groupElement, cellEl, ["border-top"]); } rowEl.appendChild(cellEl); @@ -17524,7 +16406,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol rowEl.classList.add("tabulator-print-table-group"); rowEl.classList.add("tabulator-group-level-" + row.indent); - if (group.component.isVisible()) { + if (group.component.getVisibility()) { rowEl.classList.add("tabulator-group-visible"); } @@ -17546,7 +16428,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Export.prototype.genereateRowElement = function (row, setup, styles) { - var _this61 = this; + var _this51 = this; var rowEl = document.createElement("tr"); @@ -17574,10 +16456,10 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol return column.getComponent(); }, getData: function getData() { - return row.component.getData(); + return rowData; }, getRow: function getRow() { - return row.component; + return row.getComponent(); }, getComponent: function getComponent() { return cellWrapper; @@ -17591,8 +16473,8 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol cellEl.classList.add(className); }); - if (_this61.table.modExists("format") && _this61.config.formatCells !== false) { - value = _this61.table.modules.format.formatExportValue(cellWrapper, _this61.colVisProp); + if (_this51.table.modExists("format") && _this51.config.formatCells !== false) { + value = _this51.table.modules.format.formatExportValue(cellWrapper, _this51.colVisProp); } else { switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) { case "object": @@ -17616,14 +16498,14 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol } if (styles.firstCell) { - _this61.mapElementStyles(styles.firstCell, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom", "border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size"]); + _this51.mapElementStyles(styles.firstCell, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom", "border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size"]); if (column.definition.align) { cellEl.style.textAlign = column.definition.align; } } - if (_this61.table.options.dataTree && _this61.config.dataTree !== false) { + if (_this51.table.options.dataTree && _this51.config.dataTree !== false) { if (setup.treeElementField && setup.treeElementField == column.field || !setup.treeElementField && i == 0) { if (row.component._row.modules.dataTree.controlEl) { cellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild); @@ -17640,8 +16522,14 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol cellWrapper.modules.format.renderedCallback(); } - if (setup.rowFormatter && _this61.config.formatCells !== false) { - setup.rowFormatter(row.component); + if (setup.rowFormatter && _this51.config.formatCells !== false) { + var rowComponent = row.getComponent(); + + rowComponent.getElement = function () { + return rowEl; + }; + + setup.rowFormatter(rowComponent); } } }); @@ -17813,7 +16701,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Filter.prototype.generateHeaderFilterElement = function (column, initialValue, reinitialize) { - var _this62 = this; + var _this52 = this; var self = this, success = column.modules.filter.success, @@ -17938,11 +16826,11 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }); editorElement.addEventListener("focus", function (e) { - var left = _this62.table.columnManager.element.scrollLeft; + var left = _this52.table.columnManager.element.scrollLeft; - if (left !== _this62.table.rowManager.element.scrollLeft) { - _this62.table.rowManager.scrollHorizontal(left); - _this62.table.columnManager.scrollHorizontal(left); + if (left !== _this52.table.rowManager.element.scrollLeft) { + _this52.table.rowManager.scrollHorizontal(left); + _this52.table.columnManager.scrollHorizontal(left); } }); @@ -18183,7 +17071,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //filter to Object Filter.prototype.filtersToArray = function (filterList, ajax) { - var _this63 = this; + var _this53 = this; var output = []; @@ -18191,7 +17079,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol var item; if (Array.isArray(filter)) { - output.push(_this63.filtersToArray(filter, ajax)); + output.push(_this53.filtersToArray(filter, ajax)); } else { item = { field: filter.field, type: filter.type, value: filter.value }; @@ -18490,7 +17378,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //in array "in": function _in(filterVal, rowVal, rowData, filterParams) { if (Array.isArray(filterVal)) { - return filterVal.length ? filterVal.indexOf(rowVal) > -1 : true; + return filterVal.indexOf(rowVal) > -1; } else { console.warn("Filter Error - filter value is not an array:", filterVal); return false; @@ -18560,9 +17448,8 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Format.prototype.cellRendered = function (cell) { - if (cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered) { + if (cell.modules.format && cell.modules.format.renderedCallback) { cell.modules.format.renderedCallback(); - cell.modules.format.rendered = true; } }; @@ -18577,7 +17464,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol } cell.modules.format.renderedCallback = callback; - cell.modules.format.rendered = false; } return cell.column.modules.format.formatter.call(this, component, params, onRendered); @@ -18594,7 +17480,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol } cell.modules.format.renderedCallback = callback; - cell.modules.format.rendered = false; }; params = typeof formatter.params === "function" ? formatter.params(component) : formatter.params; @@ -19185,8 +18070,8 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol return el; }, - rowSelection: function rowSelection(cell, formatterParams, onRendered) { - var _this64 = this; + rowSelection: function rowSelection(cell) { + var _this54 = this; var checkbox = document.createElement("input"); @@ -19201,23 +18086,18 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol if (typeof cell.getRow == 'function') { var row = cell.getRow(); - if (row instanceof RowComponent) { - - checkbox.addEventListener("change", function (e) { - row.toggleSelect(); - }); + checkbox.addEventListener("change", function (e) { + row.toggleSelect(); + }); - checkbox.checked = row.isSelected && row.isSelected(); - this.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox); - } else { - checkbox = ""; - } + checkbox.checked = row.isSelected(); + this.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox); } else { checkbox.addEventListener("change", function (e) { - if (_this64.table.modules.selectRow.selectedRows.length) { - _this64.table.deselectRow(); + if (_this54.table.modules.selectRow.selectedRows.length) { + _this54.table.deselectRow(); } else { - _this64.table.selectRow(formatterParams.rowRange); + _this54.table.selectRow(); } }); @@ -19299,7 +18179,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //quick layout to smooth horizontal scrolling FrozenColumns.prototype.scrollHorizontal = function () { - var _this65 = this; + var _this55 = this; var rows; @@ -19308,7 +18188,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //layout all rows after scroll is complete this.scrollEndTimer = setTimeout(function () { - _this65.layout(); + _this55.layout(); }, 100); rows = this.table.rowManager.getVisibleRows(); @@ -19321,7 +18201,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol rows.forEach(function (row) { if (row.type === "row") { - _this65.layoutRow(row); + _this55.layoutRow(row); } }); @@ -19355,23 +18235,23 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //calculate column positions and layout headers FrozenColumns.prototype.layoutColumnPosition = function (allCells) { - var _this66 = this; + var _this56 = this; var leftParents = []; this.leftColumns.forEach(function (column, i) { - column.modules.frozen.margin = _this66._calcSpace(_this66.leftColumns, i) + _this66.table.columnManager.scrollLeft + "px"; + column.modules.frozen.margin = _this56._calcSpace(_this56.leftColumns, i) + _this56.table.columnManager.scrollLeft + "px"; - if (i == _this66.leftColumns.length - 1) { + if (i == _this56.leftColumns.length - 1) { column.modules.frozen.edge = true; } else { column.modules.frozen.edge = false; } if (column.parent.isGroup) { - var parentEl = _this66.getColGroupParentElement(column); + var parentEl = _this56.getColGroupParentElement(column); if (!leftParents.includes(parentEl)) { - _this66.layoutElement(parentEl, column); + _this56.layoutElement(parentEl, column); leftParents.push(parentEl); } @@ -19379,34 +18259,34 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol parentEl.classList.add("tabulator-frozen-" + column.modules.frozen.position); } } else { - _this66.layoutElement(column.getElement(), column); + _this56.layoutElement(column.getElement(), column); } if (allCells) { column.cells.forEach(function (cell) { - _this66.layoutElement(cell.getElement(), column); + _this56.layoutElement(cell.getElement(), column); }); } }); this.rightColumns.forEach(function (column, i) { - column.modules.frozen.margin = _this66.rightPadding - _this66._calcSpace(_this66.rightColumns, i + 1) + "px"; + column.modules.frozen.margin = _this56.rightPadding - _this56._calcSpace(_this56.rightColumns, i + 1) + "px"; - if (i == _this66.rightColumns.length - 1) { + if (i == _this56.rightColumns.length - 1) { column.modules.frozen.edge = true; } else { column.modules.frozen.edge = false; } if (column.parent.isGroup) { - _this66.layoutElement(_this66.getColGroupParentElement(column), column); + _this56.layoutElement(_this56.getColGroupParentElement(column), column); } else { - _this66.layoutElement(column.getElement(), column); + _this56.layoutElement(column.getElement(), column); } if (allCells) { column.cells.forEach(function (cell) { - _this66.layoutElement(cell.getElement(), column); + _this56.layoutElement(cell.getElement(), column); }); } }); @@ -19452,7 +18332,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; FrozenColumns.prototype.layoutRow = function (row) { - var _this67 = this; + var _this57 = this; var rowEl = row.getElement(); @@ -19463,7 +18343,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol var cell = row.getCell(column); if (cell) { - _this67.layoutElement(cell.getElement(), column); + _this57.layoutElement(cell.getElement(), column); } }); @@ -19471,7 +18351,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol var cell = row.getCell(column); if (cell) { - _this67.layoutElement(cell.getElement(), column); + _this57.layoutElement(cell.getElement(), column); } }); }; @@ -19493,9 +18373,9 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol FrozenColumns.prototype._calcSpace = function (columns, index) { var width = 0; - for (var _i12 = 0; _i12 < index; _i12++) { - if (columns[_i12].visible) { - width += columns[_i12].getWidth(); + for (var _i8 = 0; _i8 < index; _i8++) { + if (columns[_i8].visible) { + width += columns[_i8].getWidth(); } } @@ -19573,10 +18453,13 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol row.modules.frozen = false; - this.detachRow(row); + var rowEl = row.getElement(); + rowEl.parentNode.removeChild(rowEl); this.table.rowManager.adjustTableSize(); + this.rows.splice(index, 1); + this.table.rowManager.refreshActiveData("display"); if (this.rows.length) { @@ -19587,17 +18470,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol } }; - FrozenRows.prototype.detachRow = function (row) { - var index = this.rows.indexOf(row); - - if (index > -1) { - var rowEl = row.getElement(); - rowEl.parentNode.removeChild(rowEl); - - this.rows.splice(index, 1); - } - }; - FrozenRows.prototype.styleRows = function (row) { var self = this; @@ -19738,12 +18610,12 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Group.prototype.createValueGroups = function () { - var _this68 = this; + var _this58 = this; var level = this.level + 1; if (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) { this.groupManager.allowedValues[level].forEach(function (value) { - _this68._createGroup(value, level); + _this58._createGroup(value, level); }); } }; @@ -19774,7 +18646,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }); } - if ((self.groupManager.table.options.groupContextMenu || self.groupManager.table.options.groupClickMenu) && self.groupManager.table.modExists("menu")) { + if (self.groupManager.table.options.groupContextMenu && self.groupManager.table.modExists("menu")) { self.groupManager.table.modules.menu.initializeGroup.call(self.groupManager.table.modules.menu, self); } @@ -20253,15 +19125,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.element.insertBefore(this.arrowElement, this.element.firstChild); }; - Group.prototype.getPath = function () { - var path = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - - path.unshift(this.key); - if (this.parent) { - this.parent.getPath(path); - } - return path; - }; ////////////// Standard Row Functions ////////////// Group.prototype.getElement = function () { @@ -20503,7 +19366,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; GroupRows.prototype.getChildGroups = function (group) { - var _this69 = this; + var _this59 = this; var groupComponents = []; @@ -20513,7 +19376,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol group.groupList.forEach(function (child) { if (child.groupList.length) { - groupComponents = groupComponents.concat(_this69.getChildGroups(child)); + groupComponents = groupComponents.concat(_this59.getChildGroups(child)); } else { groupComponents.push(child); } @@ -20654,32 +19517,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol return !newGroupNeeded; }; - GroupRows.prototype.reassignRowToGroup = function (row) { - var oldRowGroup = row.getGroup(), - oldGroupPath = oldRowGroup.getPath(), - newGroupPath = this.getExpectedPath(row), - samePath = true; - // figure out if new group path is the same as old group path - var samePath = oldGroupPath.length == newGroupPath.length && oldGroupPath.every(function (element, index) { - return element === newGroupPath[index]; - }); - // refresh if they new path and old path aren't the same (aka the row's groupings have changed) - if (!samePath) { - oldRowGroup.removeRow(row); - this.assignRowToGroup(row, self.groups); - this.table.rowManager.refreshActiveData("group", false, true); - } - }; - - GroupRows.prototype.getExpectedPath = function (row) { - var groupPath = [], - rowData = row.getData(); - this.groupIDLookups.forEach(function (groupId) { - groupPath.push(groupId.func(rowData)); - }); - return groupPath; - }; - GroupRows.prototype.updateGroupRows = function (force) { var self = this, output = [], @@ -20705,10 +19542,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; GroupRows.prototype.scrollHeaders = function (left) { - if (this.table.options.virtualDomHoz) { - left -= this.table.vdomHoz.vDomPadLeft; - } - left = left + "px"; this.groupList.forEach(function (group) { @@ -20765,21 +19598,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol return this.history.length - (this.index + 1); }; - History.prototype.clearComponentHistory = function (component) { - var index = this.history.findIndex(function (item) { - return item.component === component; - }); - - if (index > -1) { - this.history.splice(index, 1); - if (index <= this.index) { - this.index--; - } - - this.clearComponentHistory(component); - } - }; - History.prototype.undo = function () { if (this.index > -1) { @@ -21107,13 +19925,13 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Keybindings.prototype.mapBindings = function (bindings) { - var _this70 = this; + var _this60 = this; var self = this; var _loop2 = function _loop2(key) { - if (_this70.actions[key]) { + if (_this60.actions[key]) { if (bindings[key]) { @@ -21470,18 +20288,19 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Menu.prototype.initializeColumnHeader = function (column) { - var _this71 = this; + var _this61 = this; var headerMenuEl; if (column.definition.headerContextMenu) { - column.getElement().addEventListener("contextmenu", this.LoadMenuEvent.bind(this, column, column.definition.headerContextMenu)); - this.tapHold(column, column.definition.headerContextMenu); - } + column.getElement().addEventListener("contextmenu", function (e) { + var menu = typeof column.definition.headerContextMenu == "function" ? column.definition.headerContextMenu(column.getComponent()) : column.definition.headerContextMenu; - // if(column.definition.headerClickMenu){ - // column.getElement().addEventListener("click", this.LoadMenuEvent.bind(this, column, column.definition.headerClickMenu)); - // } + e.preventDefault(); + + _this61.loadMenu(e, column, menu); + }); + } if (column.definition.headerMenu) { @@ -21490,99 +20309,55 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol headerMenuEl.innerHTML = "⋮"; headerMenuEl.addEventListener("click", function (e) { - var menu = typeof column.definition.headerMenu == "function" ? column.definition.headerMenu(column.getComponent(), e) : column.definition.headerMenu; + var menu = typeof column.definition.headerMenu == "function" ? column.definition.headerMenu(column.getComponent()) : column.definition.headerMenu; e.stopPropagation(); e.preventDefault(); - _this71.loadMenu(e, column, menu); + _this61.loadMenu(e, column, menu); }); column.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild); } }; - Menu.prototype.LoadMenuEvent = function (component, menu, e) { - menu = typeof menu == "function" ? menu(component.getComponent(), e) : menu; - - // if(component instanceof Cell){ - // e.stopImmediatePropagation(); - // } - - this.loadMenu(e, component, menu); - }; - - Menu.prototype.tapHold = function (component, menu) { - var _this72 = this; - - var element = component.getElement(), - tapHold = null, - loaded = false; - - element.addEventListener("touchstart", function (e) { - clearTimeout(tapHold); - loaded = false; - - tapHold = setTimeout(function () { - clearTimeout(tapHold); - tapHold = null; - loaded = true; + Menu.prototype.initializeCell = function (cell) { + var _this62 = this; - _this72.LoadMenuEvent(component, menu, e); - }, 1000); - }, { passive: true }); + cell.getElement().addEventListener("contextmenu", function (e) { + var menu = typeof cell.column.definition.contextMenu == "function" ? cell.column.definition.contextMenu(cell.getComponent()) : cell.column.definition.contextMenu; - element.addEventListener("touchend", function (e) { - clearTimeout(tapHold); - tapHold = null; + e.stopImmediatePropagation(); - if (loaded) { - e.preventDefault(); - } + _this62.loadMenu(e, cell, menu); }); }; - Menu.prototype.initializeCell = function (cell) { - if (cell.column.definition.contextMenu) { - cell.getElement().addEventListener("contextmenu", this.LoadMenuEvent.bind(this, cell, cell.column.definition.contextMenu)); - this.tapHold(cell, cell.column.definition.contextMenu); - } - - if (cell.column.definition.clickMenu) { - cell.getElement().addEventListener("click", this.LoadMenuEvent.bind(this, cell, cell.column.definition.clickMenu)); - } - }; - Menu.prototype.initializeRow = function (row) { - if (this.table.options.rowContextMenu) { - row.getElement().addEventListener("contextmenu", this.LoadMenuEvent.bind(this, row, this.table.options.rowContextMenu)); - this.tapHold(row, this.table.options.rowContextMenu); - } + var _this63 = this; - if (this.table.options.rowClickMenu) { - row.getElement().addEventListener("click", this.LoadMenuEvent.bind(this, row, this.table.options.rowClickMenu)); - } + row.getElement().addEventListener("contextmenu", function (e) { + var menu = typeof _this63.table.options.rowContextMenu == "function" ? _this63.table.options.rowContextMenu(row.getComponent()) : _this63.table.options.rowContextMenu; + + _this63.loadMenu(e, row, menu); + }); }; Menu.prototype.initializeGroup = function (group) { - if (this.table.options.groupContextMenu) { - group.getElement().addEventListener("contextmenu", this.LoadMenuEvent.bind(this, group, this.table.options.groupContextMenu)); - this.tapHold(group, this.table.options.groupContextMenu); - } + var _this64 = this; - if (this.table.options.groupClickMenu) { - group.getElement().addEventListener("click", this.LoadMenuEvent.bind(this, group, this.table.options.groupClickMenu)); - } + group.getElement().addEventListener("contextmenu", function (e) { + var menu = typeof _this64.table.options.groupContextMenu == "function" ? _this64.table.options.groupContextMenu(group.getComponent()) : _this64.table.options.groupContextMenu; + + _this64.loadMenu(e, group, menu); + }); }; Menu.prototype.loadMenu = function (e, component, menu) { - var _this73 = this; + var _this65 = this; - var docHeight = Math.max(document.body.offsetHeight, window.innerHeight), - touch = !(e instanceof MouseEvent); + var docHeight = Math.max(document.body.offsetHeight, window.innerHeight); - if (!touch) { - e.preventDefault(); - } + e.preventDefault(); //abort if no menu set if (!menu || !menu.length) { @@ -21596,7 +20371,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol } } else { this.nestedMenuBlock = setTimeout(function () { - _this73.nestedMenuBlock = false; + _this65.nestedMenuBlock = false; }, 100); } @@ -21636,25 +20411,27 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }); } else { itemEl.addEventListener("click", function (e) { - _this73.hideMenu(); + _this65.hideMenu(); item.action(e, component.getComponent()); }); } } - _this73.menuEl.appendChild(itemEl); + _this65.menuEl.appendChild(itemEl); }); - this.menuEl.style.top = (touch ? e.touches[0].pageY : e.pageY) + "px"; - this.menuEl.style.left = (touch ? e.touches[0].pageX : e.pageX) + "px"; + this.menuEl.style.top = e.pageY + "px"; + this.menuEl.style.left = e.pageX + "px"; + + document.body.addEventListener("click", this.blurEvent); + this.table.rowManager.element.addEventListener("scroll", this.blurEvent); setTimeout(function () { - _this73.table.rowManager.element.addEventListener("scroll", _this73.blurEvent); - document.body.addEventListener("click", _this73.blurEvent); - document.body.addEventListener("contextmenu", _this73.blurEvent); - document.body.addEventListener("keydown", _this73.escEvent); + document.body.addEventListener("contextmenu", _this65.blurEvent); }, 100); + document.body.addEventListener("keydown", this.escEvent); + document.body.appendChild(this.menuEl); //move menu to start on right edge if it is too close to the edge of the screen @@ -22386,7 +21163,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //establish connection with other tables MoveRows.prototype.connectToTables = function (row) { - var _this74 = this; + var _this66 = this; var connectionTables; @@ -22410,15 +21187,15 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.connectionSelectorsElements.forEach(function (query) { if (typeof query === "string") { - _this74.connectionElements = _this74.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query))); + _this66.connectionElements = _this66.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query))); } else { - _this74.connectionElements.push(query); + _this66.connectionElements.push(query); } }); this.connectionElements.forEach(function (element) { var dropEvent = function dropEvent(e) { - _this74.elementRowDrop(e, element, _this74.moving); + _this66.elementRowDrop(e, element, _this66.moving); }; element.addEventListener("mouseup", dropEvent); @@ -22792,7 +21569,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Page.prototype.generatePageSizeSelectList = function () { - var _this75 = this; + var _this67 = this; var pageSizes = []; @@ -22810,8 +21587,8 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol if (this.pageSizes.indexOf(this.size) == -1) { pageSizes = []; - for (var _i13 = 1; _i13 < 5; _i13++) { - pageSizes.push(this.size * _i13); + for (var _i9 = 1; _i9 < 5; _i9++) { + pageSizes.push(this.size * _i9); } this.pageSizes = pageSizes; @@ -22827,14 +21604,14 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol itemEl.value = item; if (item === true) { - _this75.table.modules.localize.bind("pagination|all", function (value) { + _this67.table.modules.localize.bind("pagination|all", function (value) { itemEl.innerHTML = value; }); } else { itemEl.innerHTML = item; } - _this75.pageSizeSelect.appendChild(itemEl); + _this67.pageSizeSelect.appendChild(itemEl); }); this.pageSizeSelect.value = this.size; @@ -22896,11 +21673,11 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //click bindings self.firstBut.addEventListener("click", function () { - self.setPage(1).then(function () {}).catch(function () {}); + self.setPage(1); }); self.prevBut.addEventListener("click", function () { - self.previousPage().then(function () {}).catch(function () {}); + self.previousPage(); }); self.nextBut.addEventListener("click", function () { @@ -22908,7 +21685,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }); self.lastBut.addEventListener("click", function () { - self.setPage(self.max).then(function () {}).catch(function () {}); + self.setPage(self.max); }); if (self.table.options.paginationElement) { @@ -23028,7 +21805,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //set current page number Page.prototype.setPage = function (page) { - var _this76 = this; + var _this68 = this; var self = this; @@ -23054,9 +21831,9 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol page = parseInt(page); - if (page > 0 && page <= _this76.max) { - _this76.page = page; - _this76.trigger().then(function () { + if (page > 0 && page <= _this68.max) { + _this68.page = page; + _this68.trigger().then(function () { resolve(); }).catch(function () { reject(); @@ -23066,24 +21843,24 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol self.table.modules.persistence.save("page"); } } else { - console.warn("Pagination Error - Requested page is out of range of 1 - " + _this76.max + ":", page); + console.warn("Pagination Error - Requested page is out of range of 1 - " + _this68.max + ":", page); reject(); } }); }; Page.prototype.setPageToRow = function (row) { - var _this77 = this; + var _this69 = this; return new Promise(function (resolve, reject) { - var rows = _this77.table.rowManager.getDisplayRows(_this77.displayIndex - 1); + var rows = _this69.table.rowManager.getDisplayRows(_this69.displayIndex - 1); var index = rows.indexOf(row); if (index > -1) { - var page = _this77.size === true ? 1 : Math.ceil((index + 1) / _this77.size); + var page = _this69.size === true ? 1 : Math.ceil((index + 1) / _this69.size); - _this77.setPage(page).then(function () { + _this69.setPage(page).then(function () { resolve(); }).catch(function () { reject(); @@ -23141,9 +21918,9 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol self.nextBut.disabled = false; } - for (var _i14 = min; _i14 <= max; _i14++) { - if (_i14 > 0 && _i14 <= self.max) { - self.pagesElement.appendChild(self._generatePageButton(_i14)); + for (var _i10 = min; _i10 <= max; _i10++) { + if (_i10 > 0 && _i10 <= self.max) { + self.pagesElement.appendChild(self._generatePageButton(_i10)); } } @@ -23171,7 +21948,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol button.textContent = page; button.addEventListener("click", function (e) { - self.setPage(page).then(function () {}).catch(function () {}); + self.setPage(page); }); return button; @@ -23179,19 +21956,19 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //previous page Page.prototype.previousPage = function () { - var _this78 = this; + var _this70 = this; return new Promise(function (resolve, reject) { - if (_this78.page > 1) { - _this78.page--; - _this78.trigger().then(function () { + if (_this70.page > 1) { + _this70.page--; + _this70.trigger().then(function () { resolve(); }).catch(function () { reject(); }); - if (_this78.table.options.persistence && _this78.table.modExists("persistence", true) && _this78.table.modules.persistence.config.page) { - _this78.table.modules.persistence.save("page"); + if (_this70.table.options.persistence && _this70.table.modExists("persistence", true) && _this70.table.modules.persistence.config.page) { + _this70.table.modules.persistence.save("page"); } } else { console.warn("Pagination Error - Previous page would be less than page 1:", 0); @@ -23202,23 +21979,23 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //next page Page.prototype.nextPage = function () { - var _this79 = this; + var _this71 = this; return new Promise(function (resolve, reject) { - if (_this79.page < _this79.max) { - _this79.page++; - _this79.trigger().then(function () { + if (_this71.page < _this71.max) { + _this71.page++; + _this71.trigger().then(function () { resolve(); }).catch(function () { reject(); }); - if (_this79.table.options.persistence && _this79.table.modExists("persistence", true) && _this79.table.modules.persistence.config.page) { - _this79.table.modules.persistence.save("page"); + if (_this71.table.options.persistence && _this71.table.modExists("persistence", true) && _this71.table.modules.persistence.config.page) { + _this71.table.modules.persistence.save("page"); } } else { - if (!_this79.progressiveLoad) { - console.warn("Pagination Error - Next page would be greater than maximum page of " + _this79.max + ":", _this79.max + 1); + if (!_this71.progressiveLoad) { + console.warn("Pagination Error - Next page would be greater than maximum page of " + _this71.max + ":", _this71.max + 1); } reject(); } @@ -23252,7 +22029,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol if (this.size === true) { start = 0; - end = data.length; + end = data.length - 1; } else { start = this.size * (this.page - 1); end = start + parseInt(this.size); @@ -23260,9 +22037,9 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this._setPageButtons(); - for (var _i15 = start; _i15 < end; _i15++) { - if (data[_i15]) { - output.push(data[_i15]); + for (var _i11 = start; _i11 < end; _i11++) { + if (data[_i11]) { + output.push(data[_i11]); } } @@ -23276,28 +22053,28 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Page.prototype.trigger = function () { - var _this80 = this; + var _this72 = this; var left; return new Promise(function (resolve, reject) { - switch (_this80.mode) { + switch (_this72.mode) { case "local": - left = _this80.table.rowManager.scrollLeft; + left = _this72.table.rowManager.scrollLeft; - _this80.table.rowManager.refreshActiveData("page"); - _this80.table.rowManager.scrollHorizontal(left); + _this72.table.rowManager.refreshActiveData("page"); + _this72.table.rowManager.scrollHorizontal(left); - _this80.table.options.pageLoaded.call(_this80.table, _this80.getPage()); + _this72.table.options.pageLoaded.call(_this72.table, _this72.getPage()); resolve(); break; case "remote": case "progressive_load": case "progressive_scroll": - _this80.table.modules.ajax.blockActiveRequest(); - _this80._getRemotePage().then(function () { + _this72.table.modules.ajax.blockActiveRequest(); + _this72._getRemotePage().then(function () { resolve(); }).catch(function () { reject(); @@ -23305,14 +22082,14 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol break; default: - console.warn("Pagination Error - no such pagination mode:", _this80.mode); + console.warn("Pagination Error - no such pagination mode:", _this72.mode); reject(); } }); }; Page.prototype._getRemotePage = function () { - var _this81 = this; + var _this73 = this; var self = this, oldParams, @@ -23329,33 +22106,33 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol pageParams = self.table.modules.ajax.getParams(); //configure request params - pageParams[_this81.dataSentNames.page] = self.page; + pageParams[_this73.dataSentNames.page] = self.page; //set page size if defined - if (_this81.size) { - pageParams[_this81.dataSentNames.size] = _this81.size; + if (_this73.size) { + pageParams[_this73.dataSentNames.size] = _this73.size; } //set sort data if defined - if (_this81.table.options.ajaxSorting && _this81.table.modExists("sort")) { + if (_this73.table.options.ajaxSorting && _this73.table.modExists("sort")) { var sorters = self.table.modules.sort.getSort(); sorters.forEach(function (item) { delete item.column; }); - pageParams[_this81.dataSentNames.sorters] = sorters; + pageParams[_this73.dataSentNames.sorters] = sorters; } //set filter data if defined - if (_this81.table.options.ajaxFiltering && _this81.table.modExists("filter")) { + if (_this73.table.options.ajaxFiltering && _this73.table.modExists("filter")) { var filters = self.table.modules.filter.getFilters(true, true); - pageParams[_this81.dataSentNames.filters] = filters; + pageParams[_this73.dataSentNames.filters] = filters; } self.table.modules.ajax.setParams(pageParams); - self.table.modules.ajax.sendRequest(_this81.progressiveLoad).then(function (data) { + self.table.modules.ajax.sendRequest(_this73.progressiveLoad).then(function (data) { self._parseRemoteData(data); resolve(); }).catch(function (e) { @@ -23746,8 +22523,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; Persistence.prototype.getGroupConfig = function () { - var data = {}; - if (this.config.group) { if (this.config.group === true || this.config.group.groupBy) { data.groupBy = this.table.options.groupBy; @@ -23784,8 +22559,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //parse columns for data to store Persistence.prototype.parseColumns = function (columns) { var self = this, - definitions = [], - excludedKeys = ["headerContextMenu", "headerMenu", "contextMenu", "clickMenu"]; + definitions = []; columns.forEach(function (column) { var defStore = {}, @@ -23816,9 +22590,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol break; default: - if (typeof colDef[key] !== "function" && excludedKeys.indexOf(key) === -1) { - defStore[key] = colDef[key]; - } + defStore[key] = colDef[key]; } }); } @@ -24142,7 +22914,8 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; ReactiveData.prototype.watchRow = function (row) { - var data = row.getData(); + var self = this, + data = row.getData(); this.blocked = true; @@ -24150,98 +22923,9 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this.watchKey(row, data, key); } - if (this.table.options.dataTree) { - this.watchTreeChildren(row); - } - this.blocked = false; }; - ReactiveData.prototype.watchTreeChildren = function (row) { - var self = this, - childField = row.getData()[this.table.options.dataTreeChildField], - origFuncs = {}; - - function rebuildTree() { - self.table.modules.dataTree.initializeRow(row); - self.table.modules.dataTree.layoutRow(row); - self.table.rowManager.refreshActiveData("tree", false, true); - } - - if (childField) { - - origFuncs.push = childField.push; - - Object.defineProperty(childField, "push", { - enumerable: false, - configurable: true, - value: function value() { - var result = origFuncs.push.apply(childField, arguments); - - rebuildTree(); - - return result; - } - }); - - origFuncs.unshift = childField.unshift; - - Object.defineProperty(childField, "unshift", { - enumerable: false, - configurable: true, - value: function value() { - var result = origFuncs.unshift.apply(childField, arguments); - - rebuildTree(); - - return result; - } - }); - - origFuncs.shift = childField.shift; - - Object.defineProperty(childField, "shift", { - enumerable: false, - configurable: true, - value: function value() { - var result = origFuncs.shift.call(childField); - - rebuildTree(); - - return result; - } - }); - - origFuncs.pop = childField.pop; - - Object.defineProperty(childField, "pop", { - enumerable: false, - configurable: true, - value: function value() { - var result = origFuncs.pop.call(childField); - - rebuildTree(); - - return result; - } - }); - - origFuncs.splice = childField.splice; - - Object.defineProperty(childField, "splice", { - enumerable: false, - configurable: true, - value: function value() { - var result = origFuncs.splice.apply(childField, arguments); - - rebuildTree(); - - return result; - } - }); - } - }; - ReactiveData.prototype.watchKey = function (row, data, key) { var self = this, props = Object.getOwnPropertyDescriptor(data, key), @@ -24403,15 +23087,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol function mouseMove(e) { // self.table.columnManager.tempScrollBlock(); - if (self.table.rtl) { - column.setWidth(self.startWidth - ((typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX) - self.startX)); - } else { - column.setWidth(self.startWidth + ((typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX) - self.startX)); - } - - if (self.table.options.virtualDomHoz) { - self.table.vdomHoz.reinitialize(true); - } + column.setWidth(self.startWidth + ((typeof e.screenX === "undefined" ? e.touches[0].screenX : e.screenX) - self.startX)); if (!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight) { column.checkCellHeights(); @@ -24572,7 +23248,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol }; ResizeTable.prototype.initialize = function (row) { - var _this82 = this; + var _this74 = this; var table = this.table, tableStyle; @@ -24595,17 +23271,13 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol var nodeHeight = Math.floor(entry[0].contentRect.height); var nodeWidth = Math.floor(entry[0].contentRect.width); - if (_this82.tableHeight != nodeHeight || _this82.tableWidth != nodeWidth) { - _this82.tableHeight = nodeHeight; - _this82.tableWidth = nodeWidth; + if (_this74.tableHeight != nodeHeight || _this74.tableWidth != nodeWidth) { + _this74.tableHeight = nodeHeight; + _this74.tableWidth = nodeWidth; if (table.element.parentNode) { - _this82.containerHeight = table.element.parentNode.clientHeight; - _this82.containerWidth = table.element.parentNode.clientWidth; - } - - if (table.options.virtualDomHoz) { - table.vdomHoz.reinitialize(true); + _this74.containerHeight = table.element.parentNode.clientHeight; + _this74.containerWidth = table.element.parentNode.clientWidth; } table.redraw(); @@ -24625,15 +23297,13 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol var nodeHeight = Math.floor(entry[0].contentRect.height); var nodeWidth = Math.floor(entry[0].contentRect.width); - if (_this82.containerHeight != nodeHeight || _this82.containerWidth != nodeWidth) { - _this82.containerHeight = nodeHeight; - _this82.containerWidth = nodeWidth; - _this82.tableHeight = table.element.clientHeight; - _this82.tableWidth = table.element.clientWidth; - } + if (_this74.containerHeight != nodeHeight || _this74.containerWidth != nodeWidth) { + _this74.containerHeight = nodeHeight; + _this74.containerWidth = nodeWidth; + _this74.tableHeight = table.element.clientHeight; + _this74.tableWidth = table.element.clientWidth; - if (table.options.virtualDomHoz) { - table.vdomHoz.reinitialize(true); + table.redraw(); } table.redraw(); @@ -24645,10 +23315,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol } else { this.binding = function () { if (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) { - if (table.options.virtualDomHoz) { - table.vdomHoz.reinitialize(true); - } - table.redraw(); } }; @@ -24721,16 +23387,16 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol } //assign collapse column - for (var _iterator = this.table.columnManager.columnsByIndex, _isArray = Array.isArray(_iterator), _i16 = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { + for (var _iterator = this.table.columnManager.columnsByIndex, _isArray = Array.isArray(_iterator), _i12 = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { var _ref; if (_isArray) { - if (_i16 >= _iterator.length) break; - _ref = _iterator[_i16++]; + if (_i12 >= _iterator.length) break; + _ref = _iterator[_i12++]; } else { - _i16 = _iterator.next(); - if (_i16.done) break; - _ref = _i16.value; + _i12 = _iterator.next(); + if (_i12.done) break; + _ref = _i12.value; } var col = _ref; @@ -25130,14 +23796,14 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //select a number of rows SelectRow.prototype.selectRows = function (rows) { - var _this83 = this; + var _this75 = this; var rowMatch; switch (typeof rows === 'undefined' ? 'undefined' : _typeof(rows)) { case "undefined": this.table.rowManager.rows.forEach(function (row) { - _this83._selectRow(row, true, true); + _this75._selectRow(row, true, true); }); this._rowSelectionChanged(); @@ -25151,7 +23817,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this._selectRow(rowMatch, true, true); } else { this.table.rowManager.getRows(rows).forEach(function (row) { - _this83._selectRow(row, true, true); + _this75._selectRow(row, true, true); }); } @@ -25161,7 +23827,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol default: if (Array.isArray(rows)) { rows.forEach(function (row) { - _this83._selectRow(row, true, true); + _this75._selectRow(row, true, true); }); this._rowSelectionChanged(); @@ -25233,7 +23899,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol rowCount = self.selectedRows.length; - for (var _i17 = 0; _i17 < rowCount; _i17++) { + for (var _i13 = 0; _i13 < rowCount; _i13++) { self._deselectRow(self.selectedRows[0], true); } @@ -25348,16 +24014,16 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol var children = this.table.modules.dataTree.getChildren(row); if (select) { - for (var _iterator2 = children, _isArray2 = Array.isArray(_iterator2), _i18 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) { + for (var _iterator2 = children, _isArray2 = Array.isArray(_iterator2), _i14 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) { var _ref2; if (_isArray2) { - if (_i18 >= _iterator2.length) break; - _ref2 = _iterator2[_i18++]; + if (_i14 >= _iterator2.length) break; + _ref2 = _iterator2[_i14++]; } else { - _i18 = _iterator2.next(); - if (_i18.done) break; - _ref2 = _i18.value; + _i14 = _iterator2.next(); + if (_i14.done) break; + _ref2 = _i14.value; } var child = _ref2; @@ -25365,16 +24031,16 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol this._selectRow(child, true); } } else { - for (var _iterator3 = children, _isArray3 = Array.isArray(_iterator3), _i19 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) { + for (var _iterator3 = children, _isArray3 = Array.isArray(_iterator3), _i15 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) { var _ref3; if (_isArray3) { - if (_i19 >= _iterator3.length) break; - _ref3 = _iterator3[_i19++]; + if (_i15 >= _iterator3.length) break; + _ref3 = _iterator3[_i15++]; } else { - _i19 = _iterator3.next(); - if (_i19.done) break; - _ref3 = _i19.value; + _i15 = _iterator3.next(); + if (_i15.done) break; + _ref3 = _i15.value; } var _child = _ref3; @@ -25427,19 +24093,10 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol colEl.classList.add("tabulator-sortable"); arrowEl = document.createElement("div"); - arrowEl.classList.add("tabulator-col-sorter"); - - if (_typeof(this.table.options.headerSortElement) == "object") { - arrowEl.appendChild(this.table.options.headerSortElement); - } else { - arrowEl.innerHTML = this.table.options.headerSortElement; - } - + arrowEl.classList.add("tabulator-arrow"); //create sorter arrow content.appendChild(arrowEl); - column.modules.sort.element = arrowEl; - //sort on click colEl.addEventListener("click", function (e) { var dir = "", @@ -25679,7 +24336,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol //sort each item in sort list Sort.prototype._sortItems = function (data, sortList) { - var _this84 = this; + var _this76 = this; var sorterCount = sortList.length - 1; @@ -25689,7 +24346,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol for (var i = sorterCount; i >= 0; i--) { var sortItem = sortList[i]; - result = _this84._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params); + result = _this76._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params); if (result !== 0) { break; @@ -26098,7 +24755,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol if (cell.modules.validate && cell.modules.validate.invalid) { - cell.getElement().classList.remove("tabulator-validation-fail"); + cell.element.classList.remove("tabulator-validation-fail"); cell.modules.validate.invalid = false; invalidIndex = this.invalidCells.indexOf(cell); diff --git a/admin/js/vendors/tabulator/js/tabulator.min.js b/admin/js/vendors/tabulator/js/tabulator.min.js new file mode 100644 index 0000000..425389a --- /dev/null +++ b/admin/js/vendors/tabulator/js/tabulator.min.js @@ -0,0 +1 @@ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj};!function(global,factory){"object"===("undefined"==typeof exports?"undefined":_typeof(exports))&&"undefined"!=typeof module?module.exports=factory():"function"==typeof define&&define.amd?define(factory):global.Tabulator=factory()}(this,(function(){"use strict";Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function value(predicate){if(null==this)throw new TypeError('"this" is null or not defined');var o=Object(this),len=o.length>>>0;if("function"!=typeof predicate)throw new TypeError("predicate must be a function");for(var thisArg=arguments[1],k=0;k>>0;if("function"!=typeof predicate)throw new TypeError("predicate must be a function");for(var thisArg=arguments[1],k=0;k>>0;if(0===len)return!1;var n=0|fromIndex,k=Math.max(n>=0?n:len-Math.abs(n),0);function sameValueZero(x,y){return x===y||"number"==typeof x&&"number"==typeof y&&isNaN(x)&&isNaN(y)}for(;kscrollWidth?(hozAdjust=left-scrollWidth,this.element.style.marginLeft=-hozAdjust+"px"):this.element.style.marginLeft=0,this.scrollLeft=left,this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.scrollHorizontal()},ColumnManager.prototype.generateColumnsFromRowData=function(data){var cols=[],row,sorter;if(data&&data.length){for(var key in row=data[0]){var col={field:key,title:key},value=row[key];switch(void 0===value?"undefined":_typeof(value)){case"undefined":sorter="string";break;case"boolean":sorter="boolean";break;case"object":sorter=Array.isArray(value)?"array":"string";break;default:sorter=isNaN(value)||""===value?value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?"alphanum":"string":"number"}col.sorter=sorter,cols.push(col)}this.table.options.columns=cols,this.setColumns(this.table.options.columns)}},ColumnManager.prototype.setColumns=function(cols,row){for(var self=this;self.headersElement.firstChild;)self.headersElement.removeChild(self.headersElement.firstChild);self.columns=[],self.columnsByIndex=[],self.columnsByField={},self.table.modExists("frozenColumns")&&self.table.modules.frozenColumns.reset(),cols.forEach((function(def,i){self._addColumn(def)})),self._reIndexColumns(),self.table.options.responsiveLayout&&self.table.modExists("responsiveLayout",!0)&&self.table.modules.responsiveLayout.initialize(),self.redraw(!0)},ColumnManager.prototype._addColumn=function(definition,before,nextToColumn){var column=new Column(definition,this),colEl=column.getElement(),index=nextToColumn?this.findColumnIndex(nextToColumn):nextToColumn;if(nextToColumn&&index>-1){var parentIndex=this.columns.indexOf(nextToColumn.getTopColumn()),nextEl=nextToColumn.getElement();before?(this.columns.splice(parentIndex,0,column),nextEl.parentNode.insertBefore(colEl,nextEl)):(this.columns.splice(parentIndex+1,0,column),nextEl.parentNode.insertBefore(colEl,nextEl.nextSibling))}else before?(this.columns.unshift(column),this.headersElement.insertBefore(column.getElement(),this.headersElement.firstChild)):(this.columns.push(column),this.headersElement.appendChild(column.getElement())),column.columnRendered();return column},ColumnManager.prototype.registerColumnField=function(col){col.definition.field&&(this.columnsByField[col.definition.field]=col)},ColumnManager.prototype.registerColumnPosition=function(col){this.columnsByIndex.push(col)},ColumnManager.prototype._reIndexColumns=function(){this.columnsByIndex=[],this.columns.forEach((function(column){column.reRegisterPosition()}))},ColumnManager.prototype._verticalAlignHeaders=function(){var self=this,minHeight=0;self.columns.forEach((function(column){var height;column.clearVerticalAlign(),(height=column.getHeight())>minHeight&&(minHeight=height)})),self.columns.forEach((function(column){column.verticalAlign(self.table.options.columnHeaderVertAlign,minHeight)})),self.rowManager.adjustTableSize()},ColumnManager.prototype.findColumn=function(subject){var self=this,match;return"object"!=(void 0===subject?"undefined":_typeof(subject))?this.columnsByField[subject]||!1:subject instanceof Column?subject:subject instanceof ColumnComponent?subject._getSelf()||!1:"undefined"!=typeof HTMLElement&&subject instanceof HTMLElement&&this.columns.find((function(column){return column.element===subject}))||!1},ColumnManager.prototype.getColumnByField=function(field){return this.columnsByField[field]},ColumnManager.prototype.getColumnsByFieldRoot=function(root){var _this=this,matches=[];return Object.keys(this.columnsByField).forEach((function(field){var fieldRoot;field.split(".")[0]===root&&matches.push(_this.columnsByField[field])})),matches},ColumnManager.prototype.getColumnByIndex=function(index){return this.columnsByIndex[index]},ColumnManager.prototype.getFirstVisibileColumn=function(index){var index;return(index=this.columnsByIndex.findIndex((function(col){return col.visible})))>-1&&this.columnsByIndex[index]},ColumnManager.prototype.getColumns=function(){return this.columns},ColumnManager.prototype.findColumnIndex=function(column){return this.columnsByIndex.findIndex((function(col){return column===col}))},ColumnManager.prototype.getRealColumns=function(){return this.columnsByIndex},ColumnManager.prototype.traverse=function(callback){var self=this;this.columnsByIndex.forEach((function(column,i){callback(column,i)}))},ColumnManager.prototype.getDefinitions=function(active){var self=this,output=[];return this.columnsByIndex.forEach((function(column){(!active||active&&column.visible)&&output.push(column.getDefinition())})),output},ColumnManager.prototype.getDefinitionTree=function(){var self=this,output=[];return this.columns.forEach((function(column){output.push(column.getDefinition(!0))})),output},ColumnManager.prototype.getComponents=function(structured){var self=this,output=[],columns;return(structured?this.columns:this.columnsByIndex).forEach((function(column){output.push(column.getComponent())})),output},ColumnManager.prototype.getWidth=function(){var width=0;return this.columnsByIndex.forEach((function(column){column.visible&&(width+=column.getWidth())})),width},ColumnManager.prototype.moveColumn=function(from,to,after){this.moveColumnActual(from,to,after),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),to.element.parentNode.insertBefore(from.element,to.element),after&&to.element.parentNode.insertBefore(to.element,from.element),this._verticalAlignHeaders(),this.table.rowManager.reinitialize()},ColumnManager.prototype.moveColumnActual=function(from,to,after){from.parent.isGroup?this._moveColumnInArray(from.parent.columns,from,to,after):this._moveColumnInArray(this.columns,from,to,after),this._moveColumnInArray(this.columnsByIndex,from,to,after,!0),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.options.columnMoved&&this.table.options.columnMoved.call(this.table,from.getComponent(),this.table.columnManager.getComponents()),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns")},ColumnManager.prototype._moveColumnInArray=function(columns,from,to,after,updateRows){var fromIndex=columns.indexOf(from),toIndex;fromIndex>-1&&(columns.splice(fromIndex,1),(toIndex=columns.indexOf(to))>-1?after&&(toIndex+=1):toIndex=fromIndex,columns.splice(toIndex,0,from),updateRows&&this.table.rowManager.rows.forEach((function(row){if(row.cells.length){var cell=row.cells.splice(fromIndex,1)[0];row.cells.splice(toIndex,0,cell)}})))},ColumnManager.prototype.scrollToColumn=function(column,position,ifVisible){var _this2=this,left=0,offset=0,adjust=0,colEl=column.getElement();return new Promise((function(resolve,reject){if(void 0===position&&(position=_this2.table.options.scrollToColumnPosition),void 0===ifVisible&&(ifVisible=_this2.table.options.scrollToColumnIfVisible),column.visible){switch(position){case"middle":case"center":adjust=-_this2.element.clientWidth/2;break;case"right":adjust=colEl.clientWidth-_this2.headersElement.clientWidth}if(!ifVisible&&(offset=colEl.offsetLeft)>0&&offset+colEl.offsetWidth<_this2.element.clientWidth)return!1;left=colEl.offsetLeft+_this2.element.scrollLeft+adjust,left=Math.max(Math.min(left,_this2.table.rowManager.element.scrollWidth-_this2.table.rowManager.element.clientWidth),0),_this2.table.rowManager.scrollHorizontal(left),_this2.scrollHorizontal(left),resolve()}else console.warn("Scroll Error - Column not visible"),reject("Scroll Error - Column not visible")}))},ColumnManager.prototype.generateCells=function(row){var self=this,cells=[];return this.columnsByIndex.forEach((function(column){cells.push(column.generateCell(row))})),cells},ColumnManager.prototype.getFlexBaseWidth=function(){var self=this,totalWidth=self.table.element.clientWidth,fixedWidth=0;return self.rowManager.element.scrollHeight>self.rowManager.element.clientHeight&&(totalWidth-=self.rowManager.element.offsetWidth-self.rowManager.element.clientWidth),this.columnsByIndex.forEach((function(column){var width,minWidth,colWidth;column.visible&&(width=column.definition.width||0,minWidth=void 0===column.minWidth?self.table.options.columnMinWidth:parseInt(column.minWidth),colWidth="string"==typeof width?width.indexOf("%")>-1?totalWidth/100*parseInt(width):parseInt(width):width,fixedWidth+=colWidth>minWidth?colWidth:minWidth)})),fixedWidth},ColumnManager.prototype.addColumn=function(definition,before,nextToColumn){var _this3=this;return new Promise((function(resolve,reject){var column=_this3._addColumn(definition,before,nextToColumn);_this3._reIndexColumns(),_this3.table.options.responsiveLayout&&_this3.table.modExists("responsiveLayout",!0)&&_this3.table.modules.responsiveLayout.initialize(),_this3.table.modExists("columnCalcs")&&_this3.table.modules.columnCalcs.recalc(_this3.table.rowManager.activeRows),_this3.redraw(),"fitColumns"!=_this3.table.modules.layout.getMode()&&column.reinitializeWidth(),_this3._verticalAlignHeaders(),_this3.table.rowManager.reinitialize(),resolve(column)}))},ColumnManager.prototype.deregisterColumn=function(column){var field=column.getField(),index;field&&delete this.columnsByField[field],(index=this.columnsByIndex.indexOf(column))>-1&&this.columnsByIndex.splice(index,1),(index=this.columns.indexOf(column))>-1&&this.columns.splice(index,1),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.redraw()},ColumnManager.prototype.redraw=function(force){force&&(Tabulator.prototype.helpers.elVisible(this.element)&&this._verticalAlignHeaders(),this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),["fitColumns","fitDataStretch"].indexOf(this.table.modules.layout.getMode())>-1?this.table.modules.layout.layout():force?this.table.modules.layout.layout():this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),force&&(this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.redraw()),this.table.footerManager.redraw()};var ColumnComponent=function ColumnComponent(column){this._column=column,this.type="ColumnComponent"};ColumnComponent.prototype.getElement=function(){return this._column.getElement()},ColumnComponent.prototype.getDefinition=function(){return this._column.getDefinition()},ColumnComponent.prototype.getField=function(){return this._column.getField()},ColumnComponent.prototype.getCells=function(){var cells=[];return this._column.cells.forEach((function(cell){cells.push(cell.getComponent())})),cells},ColumnComponent.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._column.visible},ColumnComponent.prototype.isVisible=function(){return this._column.visible},ColumnComponent.prototype.show=function(){this._column.isGroup?this._column.columns.forEach((function(column){column.show()})):this._column.show()},ColumnComponent.prototype.hide=function(){this._column.isGroup?this._column.columns.forEach((function(column){column.hide()})):this._column.hide()},ColumnComponent.prototype.toggle=function(){this._column.visible?this.hide():this.show()},ColumnComponent.prototype.delete=function(){return this._column.delete()},ColumnComponent.prototype.getSubColumns=function(){var output=[];return this._column.columns.length&&this._column.columns.forEach((function(column){output.push(column.getComponent())})),output},ColumnComponent.prototype.getParentColumn=function(){return this._column.parent instanceof Column&&this._column.parent.getComponent()},ColumnComponent.prototype._getSelf=function(){return this._column},ColumnComponent.prototype.scrollTo=function(){return this._column.table.columnManager.scrollToColumn(this._column)},ColumnComponent.prototype.getTable=function(){return this._column.table},ColumnComponent.prototype.headerFilterFocus=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterFocus(this._column)},ColumnComponent.prototype.reloadHeaderFilter=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.reloadHeaderFilter(this._column)},ColumnComponent.prototype.getHeaderFilterValue=function(){if(this._column.table.modExists("filter",!0))return this._column.table.modules.filter.getHeaderFilterValue(this._column)},ColumnComponent.prototype.setHeaderFilterValue=function(value){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterValue(this._column,value)},ColumnComponent.prototype.move=function(to,after){var toColumn=this._column.table.columnManager.findColumn(to);toColumn?this._column.table.columnManager.moveColumn(this._column,toColumn,after):console.warn("Move Error - No matching column found:",toColumn)},ColumnComponent.prototype.getNextColumn=function(){var nextCol=this._column.nextColumn();return!!nextCol&&nextCol.getComponent()},ColumnComponent.prototype.getPrevColumn=function(){var prevCol=this._column.prevColumn();return!!prevCol&&prevCol.getComponent()},ColumnComponent.prototype.updateDefinition=function(updates){return this._column.updateDefinition(updates)},ColumnComponent.prototype.getWidth=function(){return this._column.getWidth()},ColumnComponent.prototype.setWidth=function(width){return!0===width?this._column.reinitializeWidth(!0):this._column.setWidth(width)},ColumnComponent.prototype.validate=function(){return this._column.validate()};var Column=function Column(def,parent){var self=this;this.table=parent.table,this.definition=def,this.parent=parent,this.type="column",this.columns=[],this.cells=[],this.element=this.createElement(),this.contentElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.isGroup=!1,this.tooltip=!1,this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleFormatterRendered=!1,this.setField(this.definition.field),this.table.options.invalidOptionWarnings&&this.checkDefinition(),this.modules={},this.cellEvents={cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1},this.width=null,this.widthStyled="",this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this._mapDepricatedFunctionality(),def.columns?(this.isGroup=!0,def.columns.forEach((function(def,i){var newCol=new Column(def,self);self.attachColumn(newCol)})),self.checkColumnVisibility()):parent.registerColumnField(this),def.rowHandle&&!1!==this.table.options.movableRows&&this.table.modExists("moveRow")&&this.table.modules.moveRow.setHandle(!0),this._buildHeader(),this.bindModuleColumns()};Column.prototype.createElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-col"),el.setAttribute("role","columnheader"),el.setAttribute("aria-sort","none"),el},Column.prototype.createGroupElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-col-group-cols"),el},Column.prototype.checkDefinition=function(){var _this4=this;Object.keys(this.definition).forEach((function(key){-1===_this4.defaultOptionList.indexOf(key)&&console.warn("Invalid column definition option in '"+(_this4.field||_this4.definition.title)+"' column:",key)}))},Column.prototype.setField=function(field){this.field=field,this.fieldStructure=field?this.table.options.nestedFieldSeparator?field.split(this.table.options.nestedFieldSeparator):[field]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData},Column.prototype.registerColumnPosition=function(column){this.parent.registerColumnPosition(column)},Column.prototype.registerColumnField=function(column){this.parent.registerColumnField(column)},Column.prototype.reRegisterPosition=function(){this.isGroup?this.columns.forEach((function(column){column.reRegisterPosition()})):this.registerColumnPosition(this)},Column.prototype._mapDepricatedFunctionality=function(){void 0!==this.definition.hideInHtml&&(this.definition.htmlOutput=!this.definition.hideInHtml,console.warn("hideInHtml column definition property is deprecated, you should now use htmlOutput")),void 0!==this.definition.align&&(this.definition.hozAlign=this.definition.align,console.warn("align column definition property is deprecated, you should now use hozAlign")),void 0!==this.definition.downloadTitle&&(this.definition.titleDownload=this.definition.downloadTitle,console.warn("downloadTitle definition property is deprecated, you should now use titleDownload"))},Column.prototype.setTooltip=function(){var self=this,def=self.definition,tooltip=def.headerTooltip||!1===def.tooltip?def.headerTooltip:self.table.options.tooltipsHeader;tooltip?!0===tooltip?def.field?self.table.modules.localize.bind("columns|"+def.field,(function(value){self.element.setAttribute("title",value||def.title)})):self.element.setAttribute("title",def.title):("function"==typeof tooltip&&!1===(tooltip=tooltip(self.getComponent()))&&(tooltip=""),self.element.setAttribute("title",tooltip)):self.element.setAttribute("title","")},Column.prototype._buildHeader=function(){for(var self=this,def=self.definition;self.element.firstChild;)self.element.removeChild(self.element.firstChild);def.headerVertical&&(self.element.classList.add("tabulator-col-vertical"),"flip"===def.headerVertical&&self.element.classList.add("tabulator-col-vertical-flip")),self.contentElement=self._bindEvents(),self.contentElement=self._buildColumnHeaderContent(),self.element.appendChild(self.contentElement),self.isGroup?self._buildGroupHeader():self._buildColumnHeader(),self.setTooltip(),self.table.options.resizableColumns&&self.table.modExists("resizeColumns")&&self.table.modules.resizeColumns.initializeColumn("header",self,self.element),def.headerFilter&&self.table.modExists("filter")&&self.table.modExists("edit")&&(void 0!==def.headerFilterPlaceholder&&def.field&&self.table.modules.localize.setHeaderFilterColumnPlaceholder(def.field,def.headerFilterPlaceholder),self.table.modules.filter.initializeColumn(self)),self.table.modExists("frozenColumns")&&self.table.modules.frozenColumns.initializeColumn(self),self.table.options.movableColumns&&!self.isGroup&&self.table.modExists("moveColumn")&&self.table.modules.moveColumn.initializeColumn(self),(def.topCalc||def.bottomCalc)&&self.table.modExists("columnCalcs")&&self.table.modules.columnCalcs.initializeColumn(self),self.table.modExists("persistence")&&self.table.modules.persistence.config.columns&&self.table.modules.persistence.initializeColumn(self),self.element.addEventListener("mouseenter",(function(e){self.setTooltip()}))},Column.prototype._bindEvents=function(){var self=this,def=self.definition,dblTap,tapHold,tap;"function"==typeof def.headerClick&&self.element.addEventListener("click",(function(e){def.headerClick(e,self.getComponent())})),"function"==typeof def.headerDblClick&&self.element.addEventListener("dblclick",(function(e){def.headerDblClick(e,self.getComponent())})),"function"==typeof def.headerContext&&self.element.addEventListener("contextmenu",(function(e){def.headerContext(e,self.getComponent())})),"function"==typeof def.headerTap&&(tap=!1,self.element.addEventListener("touchstart",(function(e){tap=!0}),{passive:!0}),self.element.addEventListener("touchend",(function(e){tap&&def.headerTap(e,self.getComponent()),tap=!1}))),"function"==typeof def.headerDblTap&&(dblTap=null,self.element.addEventListener("touchend",(function(e){dblTap?(clearTimeout(dblTap),dblTap=null,def.headerDblTap(e,self.getComponent())):dblTap=setTimeout((function(){clearTimeout(dblTap),dblTap=null}),300)}))),"function"==typeof def.headerTapHold&&(tapHold=null,self.element.addEventListener("touchstart",(function(e){clearTimeout(tapHold),tapHold=setTimeout((function(){clearTimeout(tapHold),tapHold=null,tap=!1,def.headerTapHold(e,self.getComponent())}),1e3)}),{passive:!0}),self.element.addEventListener("touchend",(function(e){clearTimeout(tapHold),tapHold=null}))),"function"==typeof def.cellClick&&(self.cellEvents.cellClick=def.cellClick),"function"==typeof def.cellDblClick&&(self.cellEvents.cellDblClick=def.cellDblClick),"function"==typeof def.cellContext&&(self.cellEvents.cellContext=def.cellContext),"function"==typeof def.cellMouseEnter&&(self.cellEvents.cellMouseEnter=def.cellMouseEnter),"function"==typeof def.cellMouseLeave&&(self.cellEvents.cellMouseLeave=def.cellMouseLeave),"function"==typeof def.cellMouseOver&&(self.cellEvents.cellMouseOver=def.cellMouseOver),"function"==typeof def.cellMouseOut&&(self.cellEvents.cellMouseOut=def.cellMouseOut),"function"==typeof def.cellMouseMove&&(self.cellEvents.cellMouseMove=def.cellMouseMove),"function"==typeof def.cellTap&&(self.cellEvents.cellTap=def.cellTap),"function"==typeof def.cellDblTap&&(self.cellEvents.cellDblTap=def.cellDblTap),"function"==typeof def.cellTapHold&&(self.cellEvents.cellTapHold=def.cellTapHold),"function"==typeof def.cellEdited&&(self.cellEvents.cellEdited=def.cellEdited),"function"==typeof def.cellEditing&&(self.cellEvents.cellEditing=def.cellEditing),"function"==typeof def.cellEditCancelled&&(self.cellEvents.cellEditCancelled=def.cellEditCancelled)},Column.prototype._buildColumnHeader=function(){var self=this,def=self.definition,table=self.table,sortable,classeNames;(table.modExists("sort")&&table.modules.sort.initializeColumn(self,self.contentElement),(def.headerContextMenu||def.headerMenu)&&table.modExists("menu")&&table.modules.menu.initializeColumnHeader(self),table.modExists("format")&&table.modules.format.initializeColumn(self),void 0!==def.editor&&table.modExists("edit")&&table.modules.edit.initializeColumn(self),void 0!==def.validator&&table.modExists("validate")&&table.modules.validate.initializeColumn(self),table.modExists("mutator")&&table.modules.mutator.initializeColumn(self),table.modExists("accessor")&&table.modules.accessor.initializeColumn(self),_typeof(table.options.responsiveLayout)&&table.modExists("responsiveLayout")&&table.modules.responsiveLayout.initializeColumn(self),void 0!==def.visible&&(def.visible?self.show(!0):self.hide(!0)),def.cssClass)&&def.cssClass.split(" ").forEach((function(className){self.element.classList.add(className)}));def.field&&this.element.setAttribute("tabulator-field",def.field),self.setMinWidth(void 0===def.minWidth?self.table.options.columnMinWidth:parseInt(def.minWidth)),self.reinitializeWidth(),self.tooltip=self.definition.tooltip||!1===self.definition.tooltip?self.definition.tooltip:self.table.options.tooltips,self.hozAlign=void 0===self.definition.hozAlign?self.table.options.cellHozAlign:self.definition.hozAlign,self.vertAlign=void 0===self.definition.vertAlign?self.table.options.cellVertAlign:self.definition.vertAlign},Column.prototype._buildColumnHeaderContent=function(){var def=this.definition,table=this.table,contentElement=document.createElement("div");return contentElement.classList.add("tabulator-col-content"),this.titleElement=this._buildColumnHeaderTitle(),contentElement.appendChild(this.titleElement),contentElement},Column.prototype._buildColumnHeaderTitle=function(){var self=this,def=self.definition,table=self.table,title,titleHolderElement=document.createElement("div");if(titleHolderElement.classList.add("tabulator-col-title"),def.editableTitle){var titleElement=document.createElement("input");titleElement.classList.add("tabulator-title-editor"),titleElement.addEventListener("click",(function(e){e.stopPropagation(),titleElement.focus()})),titleElement.addEventListener("change",(function(){def.title=titleElement.value,table.options.columnTitleChanged.call(self.table,self.getComponent())})),titleHolderElement.appendChild(titleElement),def.field?table.modules.localize.bind("columns|"+def.field,(function(text){titleElement.value=text||def.title||" "})):titleElement.value=def.title||" "}else def.field?table.modules.localize.bind("columns|"+def.field,(function(text){self._formatColumnHeaderTitle(titleHolderElement,text||def.title||" ")})):self._formatColumnHeaderTitle(titleHolderElement,def.title||" ");return titleHolderElement},Column.prototype._formatColumnHeaderTitle=function(el,title){var _this5=this,formatter,contents,params,mockCell,onRendered;if(this.definition.titleFormatter&&this.table.modExists("format"))switch(formatter=this.table.modules.format.getFormatter(this.definition.titleFormatter),onRendered=function onRendered(callback){_this5.titleFormatterRendered=callback},mockCell={getValue:function getValue(){return title},getElement:function getElement(){return el}},params="function"==typeof(params=this.definition.titleFormatterParams||{})?params():params,void 0===(contents=formatter.call(this.table.modules.format,mockCell,params,onRendered))?"undefined":_typeof(contents)){case"object":contents instanceof Node?el.appendChild(contents):(el.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",contents));break;case"undefined":case"null":el.innerHTML="";break;default:el.innerHTML=contents}else el.innerHTML=title},Column.prototype._buildGroupHeader=function(){var _this6=this,classeNames;(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass)&&this.definition.cssClass.split(" ").forEach((function(className){_this6.element.classList.add(className)}));(this.definition.headerContextMenu||this.definition.headerMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeColumnHeader(this),this.element.appendChild(this.groupElement)},Column.prototype._getFlatData=function(data){return data[this.field]},Column.prototype._getNestedData=function(data){for(var dataObj=data,structure=this.fieldStructure,length=structure.length,output,_i=0;_i-1&&this._nextVisibleColumn(index+1)},Column.prototype._nextVisibleColumn=function(index){var column=this.table.columnManager.getColumnByIndex(index);return!column||column.visible?column:this._nextVisibleColumn(index+1)},Column.prototype.prevColumn=function(){var index=this.table.columnManager.findColumnIndex(this);return index>-1&&this._prevVisibleColumn(index-1)},Column.prototype._prevVisibleColumn=function(index){var column=this.table.columnManager.getColumnByIndex(index);return!column||column.visible?column:this._prevVisibleColumn(index-1)},Column.prototype.reinitializeWidth=function(force){this.widthFixed=!1,void 0===this.definition.width||force||this.setWidth(this.definition.width),this.table.modExists("filter")&&this.table.modules.filter.hideHeaderFilterElements(),this.fitToData(),this.table.modExists("filter")&&this.table.modules.filter.showHeaderFilterElements()},Column.prototype.fitToData=function(){var self=this;this.widthFixed||(this.element.style.width="",this.cells.forEach((function(cell){cell.clearWidth()})));var maxWidth=this.element.offsetWidth;this.width&&this.widthFixed||(this.cells.forEach((function(cell){var width=cell.getWidth();width>maxWidth&&(maxWidth=width)})),maxWidth&&this.setWidthActual(maxWidth+1))},Column.prototype.updateDefinition=function(updates){var _this8=this;return new Promise((function(resolve,reject){var definition;_this8.isGroup?(console.warn("Column Update Error - The updateDefintion function is only available on columns, not column groups"),reject("Column Update Error - The updateDefintion function is only available on columns, not column groups")):(definition=Object.assign({},_this8.getDefinition()),definition=Object.assign(definition,updates),_this8.table.columnManager.addColumn(definition,!1,_this8).then((function(column){definition.field==_this8.field&&(_this8.field=!1),_this8.delete().then((function(){resolve(column.getComponent())})).catch((function(err){reject(err)}))})).catch((function(err){reject(err)})))}))},Column.prototype.deleteCell=function(cell){var index=this.cells.indexOf(cell);index>-1&&this.cells.splice(index,1)},Column.prototype.defaultOptionList=["title","field","columns","visible","align","hozAlign","vertAlign","width","minWidth","widthGrow","widthShrink","resizable","frozen","responsive","tooltip","cssClass","rowHandle","hideInHtml","print","htmlOutput","sorter","sorterParams","formatter","formatterParams","variableHeight","editable","editor","editorParams","validator","mutator","mutatorParams","mutatorData","mutatorDataParams","mutatorEdit","mutatorEditParams","mutatorClipboard","mutatorClipboardParams","accessor","accessorParams","accessorData","accessorDataParams","accessorDownload","accessorDownloadParams","accessorClipboard","accessorClipboardParams","accessorPrint","accessorPrintParams","accessorHtmlOutput","accessorHtmlOutputParams","clipboard","download","downloadTitle","topCalc","topCalcParams","topCalcFormatter","topCalcFormatterParams","bottomCalc","bottomCalcParams","bottomCalcFormatter","bottomCalcFormatterParams","cellClick","cellDblClick","cellContext","cellTap","cellDblTap","cellTapHold","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellEditing","cellEdited","cellEditCancelled","headerSort","headerSortStartingDir","headerSortTristate","headerClick","headerDblClick","headerContext","headerTap","headerDblTap","headerTapHold","headerTooltip","headerVertical","editableTitle","titleFormatter","titleFormatterParams","headerFilter","headerFilterPlaceholder","headerFilterParams","headerFilterEmptyCheck","headerFilterFunc","headerFilterFuncParams","headerFilterLiveFilter","print","headerContextMenu","headerMenu","contextMenu","formatterPrint","formatterPrintParams","formatterClipboard","formatterClipboardParams","formatterHtmlOutput","formatterHtmlOutputParams","titlePrint","titleClipboard","titleHtmlOutput","titleDownload"],Column.prototype.getComponent=function(){return this.component||(this.component=new ColumnComponent(this)),this.component};var RowManager=function RowManager(table){this.table=table,this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.heightFixer=this.createTableElement(),this.columnManager=null,this.height=0,this.firstRender=!1,this.renderMode="virtual",this.fixedHeight=!1,this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[],this.rowNumColumn=!1,this.redrawBlock=!1,this.redrawBlockRestoreConfig=!1,this.redrawBlockRederInPosition=!1};RowManager.prototype.createHolderElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-tableHolder"),el.setAttribute("tabindex",0),el},RowManager.prototype.createTableElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-table"),el},RowManager.prototype.getElement=function(){return this.element},RowManager.prototype.getTableElement=function(){return this.tableElement},RowManager.prototype.getRowPosition=function(row,active){return active?this.activeRows.indexOf(row):this.rows.indexOf(row)},RowManager.prototype.setColumnManager=function(manager){this.columnManager=manager},RowManager.prototype.initialize=function(){var self=this;self.setRenderMode(),self.element.appendChild(self.tableElement),self.firstRender=!0,self.element.addEventListener("scroll",(function(){var left=self.element.scrollLeft;self.scrollLeft!=left&&(self.columnManager.scrollHorizontal(left),self.table.options.groupBy&&self.table.modules.groupRows.scrollHeaders(left),self.table.modExists("columnCalcs")&&self.table.modules.columnCalcs.scrollHorizontal(left),self.table.options.scrollHorizontal(left)),self.scrollLeft=left})),"virtual"===this.renderMode&&self.element.addEventListener("scroll",(function(){var top=self.element.scrollTop,dir=self.scrollTop>top;self.scrollTop!=top?(self.scrollTop=top,self.scrollVertical(dir),"scroll"==self.table.options.ajaxProgressiveLoad&&self.table.modules.ajax.nextPage(self.element.scrollHeight-self.element.clientHeight-top),self.table.options.scrollVertical(top)):self.scrollTop=top}))},RowManager.prototype.findRow=function(subject){var self=this,_match,match;return"object"!=(void 0===subject?"undefined":_typeof(subject))?null!=subject&&(self.rows.find((function(row){return row.data[self.table.options.index]==subject}))||!1):subject instanceof Row?subject:subject instanceof RowComponent?subject._getSelf()||!1:"undefined"!=typeof HTMLElement&&subject instanceof HTMLElement&&self.rows.find((function(row){return row.element===subject}))||!1},RowManager.prototype.getRowFromDataObject=function(data){var match;return this.rows.find((function(row){return row.data===data}))||!1},RowManager.prototype.getRowFromPosition=function(position,active){return active?this.activeRows[position]:this.rows[position]},RowManager.prototype.scrollToRow=function(row,position,ifVisible){var _this9=this,rowIndex=this.getDisplayRows().indexOf(row),rowEl=row.getElement(),rowTop,offset=0;return new Promise((function(resolve,reject){if(rowIndex>-1){if(void 0===position&&(position=_this9.table.options.scrollToRowPosition),void 0===ifVisible&&(ifVisible=_this9.table.options.scrollToRowIfVisible),"nearest"===position)switch(_this9.renderMode){case"classic":rowTop=Tabulator.prototype.helpers.elOffset(rowEl).top,position=Math.abs(_this9.element.scrollTop-rowTop)>Math.abs(_this9.element.scrollTop+_this9.element.clientHeight-rowTop)?"bottom":"top";break;case"virtual":position=Math.abs(_this9.vDomTop-rowIndex)>Math.abs(_this9.vDomBottom-rowIndex)?"bottom":"top"}if(!ifVisible&&Tabulator.prototype.helpers.elVisible(rowEl)&&(offset=Tabulator.prototype.helpers.elOffset(rowEl).top-Tabulator.prototype.helpers.elOffset(_this9.element).top)>0&&offset<_this9.element.clientHeight-rowEl.offsetHeight)return!1;switch(_this9.renderMode){case"classic":_this9.element.scrollTop=Tabulator.prototype.helpers.elOffset(rowEl).top-Tabulator.prototype.helpers.elOffset(_this9.element).top+_this9.element.scrollTop;break;case"virtual":_this9._virtualRenderFill(rowIndex,!0)}switch(position){case"middle":case"center":_this9.element.scrollHeight-_this9.element.scrollTop==_this9.element.clientHeight?_this9.element.scrollTop=_this9.element.scrollTop+(rowEl.offsetTop-_this9.element.scrollTop)-(_this9.element.scrollHeight-rowEl.offsetTop)/2:_this9.element.scrollTop=_this9.element.scrollTop-_this9.element.clientHeight/2;break;case"bottom":_this9.element.scrollHeight-_this9.element.scrollTop==_this9.element.clientHeight?_this9.element.scrollTop=_this9.element.scrollTop-(_this9.element.scrollHeight-rowEl.offsetTop)+rowEl.offsetHeight:_this9.element.scrollTop=_this9.element.scrollTop-_this9.element.clientHeight+rowEl.offsetHeight}resolve()}else console.warn("Scroll Error - Row not visible"),reject("Scroll Error - Row not visible")}))},RowManager.prototype.setData=function(data,renderInPosition,columnsChanged){var _this10=this,self=this;return new Promise((function(resolve,reject){renderInPosition&&_this10.getDisplayRows().length?self.table.options.pagination?self._setDataActual(data,!0):_this10.reRenderInPosition((function(){self._setDataActual(data)})):(_this10.table.options.autoColumns&&columnsChanged&&_this10.table.columnManager.generateColumnsFromRowData(data),_this10.resetScroll(),_this10._setDataActual(data)),resolve()}))},RowManager.prototype._setDataActual=function(data,renderInPosition){var self=this;self.table.options.dataLoading.call(this.table,data),this._wipeElements(),this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.clear(),Array.isArray(data)?(this.table.modExists("selectRow")&&this.table.modules.selectRow.clearSelectionData(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchData(data),data.forEach((function(def,i){if(def&&"object"===(void 0===def?"undefined":_typeof(def))){var row=new Row(def,self);self.rows.push(row)}else console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:",def)})),self.table.options.dataLoaded.call(this.table,data),self.refreshActiveData(!1,!1,renderInPosition)):console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ",void 0===data?"undefined":_typeof(data),"\nData: ",data)},RowManager.prototype._wipeElements=function(){this.rows.forEach((function(row){row.wipe()})),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.wipe(),this.rows=[]},RowManager.prototype.deleteRow=function(row,blockRedraw){var allIndex=this.rows.indexOf(row),activeIndex=this.activeRows.indexOf(row);activeIndex>-1&&this.activeRows.splice(activeIndex,1),allIndex>-1&&this.rows.splice(allIndex,1),this.setActiveRows(this.activeRows),this.displayRowIterator((function(rows){var displayIndex=rows.indexOf(row);displayIndex>-1&&rows.splice(displayIndex,1)})),blockRedraw||this.reRenderInPosition(),this.regenerateRowNumbers(),this.table.options.rowDeleted.call(this.table,row.getComponent()),this.table.options.dataEdited.call(this.table,this.getData()),this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.updateGroupRows(!0):this.table.options.pagination&&this.table.modExists("page")?this.refreshActiveData(!1,!1,!0):this.table.options.pagination&&this.table.modExists("page")&&this.refreshActiveData("page")},RowManager.prototype.addRow=function(data,pos,index,blockRedraw){var row=this.addRowActual(data,pos,index,blockRedraw);return this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowAdd",row,{data:data,pos:pos,index:index}),row},RowManager.prototype.addRows=function(data,pos,index){var _this11=this,self=this,length=0,rows=[];return new Promise((function(resolve,reject){pos=_this11.findAddRowPos(pos),Array.isArray(data)||(data=[data]),length=data.length-1,(void 0===index&&pos||void 0!==index&&!pos)&&data.reverse(),data.forEach((function(item,i){var row=self.addRow(item,pos,index,!0);rows.push(row)})),_this11.table.options.groupBy&&_this11.table.modExists("groupRows")?_this11.table.modules.groupRows.updateGroupRows(!0):_this11.table.options.pagination&&_this11.table.modExists("page")?_this11.refreshActiveData(!1,!1,!0):_this11.reRenderInPosition(),_this11.table.modExists("columnCalcs")&&_this11.table.modules.columnCalcs.recalc(_this11.table.rowManager.activeRows),_this11.regenerateRowNumbers(),resolve(rows)}))},RowManager.prototype.findAddRowPos=function(pos){return void 0===pos&&(pos=this.table.options.addRowPos),"pos"===pos&&(pos=!0),"bottom"===pos&&(pos=!1),pos},RowManager.prototype.addRowActual=function(data,pos,index,blockRedraw){var row=data instanceof Row?data:new Row(data||{},this),top=this.findAddRowPos(pos),allIndex=-1,activeIndex,dispRows;if(!index&&this.table.options.pagination&&"page"==this.table.options.paginationAddRow&&(dispRows=this.getDisplayRows(),top?dispRows.length?index=dispRows[0]:this.activeRows.length&&(index=this.activeRows[this.activeRows.length-1],top=!1):dispRows.length&&(index=dispRows[dispRows.length-1],top=!(dispRows.length1&&(!index||index&&-1==groupRows.indexOf(index)?top?groupRows[0]!==row&&(index=groupRows[0],this._moveRowInArray(row.getGroup().rows,row,index,!top)):groupRows[groupRows.length-1]!==row&&(index=groupRows[groupRows.length-1],this._moveRowInArray(row.getGroup().rows,row,index,!top)):this._moveRowInArray(row.getGroup().rows,row,index,!top))}return index&&(allIndex=this.rows.indexOf(index)),index&&allIndex>-1?(activeIndex=this.activeRows.indexOf(index),this.displayRowIterator((function(rows){var displayIndex=rows.indexOf(index);displayIndex>-1&&rows.splice(top?displayIndex:displayIndex+1,0,row)})),activeIndex>-1&&this.activeRows.splice(top?activeIndex:activeIndex+1,0,row),this.rows.splice(top?allIndex:allIndex+1,0,row)):top?(this.displayRowIterator((function(rows){rows.unshift(row)})),this.activeRows.unshift(row),this.rows.unshift(row)):(this.displayRowIterator((function(rows){rows.push(row)})),this.activeRows.push(row),this.rows.push(row)),this.setActiveRows(this.activeRows),this.table.options.rowAdded.call(this.table,row.getComponent()),this.table.options.dataEdited.call(this.table,this.getData()),blockRedraw||this.reRenderInPosition(),row},RowManager.prototype.moveRow=function(from,to,after){this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowMove",from,{posFrom:this.getRowPosition(from),posTo:this.getRowPosition(to),to:to,after:after}),this.moveRowActual(from,to,after),this.regenerateRowNumbers(),this.table.options.rowMoved.call(this.table,from.getComponent())},RowManager.prototype.moveRowActual=function(from,to,after){var _this12=this;if(this._moveRowInArray(this.rows,from,to,after),this._moveRowInArray(this.activeRows,from,to,after),this.displayRowIterator((function(rows){_this12._moveRowInArray(rows,from,to,after)})),this.table.options.groupBy&&this.table.modExists("groupRows")){!after&&to instanceof Group&&(to=this.table.rowManager.prevDisplayRow(from)||to);var toGroup=to.getGroup(),fromGroup=from.getGroup();toGroup===fromGroup?this._moveRowInArray(toGroup.rows,from,to,after):(fromGroup&&fromGroup.removeRow(from),toGroup.insertRow(from,to,after))}},RowManager.prototype._moveRowInArray=function(rows,from,to,after){var fromIndex,toIndex,start,end;if(from!==to&&((fromIndex=rows.indexOf(from))>-1&&(rows.splice(fromIndex,1),(toIndex=rows.indexOf(to))>-1?after?rows.splice(toIndex+1,0,from):rows.splice(toIndex,0,from):rows.splice(fromIndex,0,from)),rows===this.getDisplayRows())){end=toIndex>fromIndex?toIndex:fromIndex+1;for(var _i4=start=fromIndex-1&&index},RowManager.prototype.nextDisplayRow=function(row,rowOnly){var index=this.getDisplayRowIndex(row),nextRow=!1;return!1!==index&&index-1)&&rowIndex},RowManager.prototype.getData=function(active,transform){var output=[],rows;return this.getRows(active).forEach((function(row){"row"==row.type&&output.push(row.getData(transform||"data"))})),output},RowManager.prototype.getComponents=function(active){var output=[],rows;return this.getRows(active).forEach((function(row){output.push(row.getComponent())})),output},RowManager.prototype.getDataCount=function(active){var rows;return this.getRows(active).length},RowManager.prototype._genRemoteRequest=function(){var _this13=this,table=this.table,options=table.options,params={};if(table.modExists("page")){if(options.ajaxSorting){var sorters=this.table.modules.sort.getSort();sorters.forEach((function(item){delete item.column})),params[this.table.modules.page.paginationDataSentNames.sorters]=sorters}if(options.ajaxFiltering){var filters=this.table.modules.filter.getFilters(!0,!0);params[this.table.modules.page.paginationDataSentNames.filters]=filters}this.table.modules.ajax.setParams(params,!0)}table.modules.ajax.sendRequest().then((function(data){_this13._setDataActual(data,!0)})).catch((function(e){}))},RowManager.prototype.filterRefresh=function(){var table=this.table,options=table.options,left=this.scrollLeft;options.ajaxFiltering?"remote"==options.pagination&&table.modExists("page")?(table.modules.page.reset(!0),table.modules.page.setPage(1).then((function(){})).catch((function(){}))):options.ajaxProgressiveLoad?table.modules.ajax.loadData().then((function(){})).catch((function(){})):this._genRemoteRequest():this.refreshActiveData("filter"),this.scrollHorizontal(left)},RowManager.prototype.sorterRefresh=function(loadOrignalData){var table=this.table,options=this.table.options,left=this.scrollLeft;options.ajaxSorting?("remote"==options.pagination||options.progressiveLoad)&&table.modExists("page")?(table.modules.page.reset(!0),table.modules.page.setPage(1).then((function(){})).catch((function(){}))):options.ajaxProgressiveLoad?table.modules.ajax.loadData().then((function(){})).catch((function(){})):this._genRemoteRequest():this.refreshActiveData(loadOrignalData?"filter":"sort"),this.scrollHorizontal(left)},RowManager.prototype.scrollHorizontal=function(left){this.scrollLeft=left,this.element.scrollLeft=left,this.table.options.groupBy&&this.table.modules.groupRows.scrollHeaders(left),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.scrollHorizontal(left)},RowManager.prototype.refreshActiveData=function(stage,skipStage,renderInPosition){var self=this,table=this.table,cascadeOrder=["all","filter","sort","display","freeze","group","tree","page"],displayIndex;if(this.redrawBlock)(!this.redrawBlockRestoreConfig||cascadeOrder.indexOf(stage)=0))break;bottomRow=i}else if(topEdge-rows[i].getElement().offsetTop>=0)topRow=i;else{if(topFound=!0,!(bottomEdge-rows[i].getElement().offsetTop>=0))break;bottomRow=i}}else topRow=this.vDomTop,bottomRow=this.vDomBottom;return rows.slice(topRow,bottomRow+1)},RowManager.prototype.displayRowIterator=function(callback){this.displayRows.forEach(callback),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length},RowManager.prototype.getRows=function(active){var rows;switch(active){case"active":rows=this.activeRows;break;case"display":rows=this.table.rowManager.getDisplayRows();break;case"visible":rows=this.getVisibleRows(!0);break;default:rows=this.rows}return rows},RowManager.prototype.reRenderInPosition=function(callback){if("virtual"==this.getRenderMode())if(this.redrawBlock)callback?callback():this.redrawBlockRederInPosition=!0;else{for(var scrollTop=this.element.scrollTop,topRow=!1,topOffset=!1,left=this.scrollLeft,rows=this.getDisplayRows(),i=this.vDomTop;i<=this.vDomBottom;i++)if(rows[i]){var diff=scrollTop-rows[i].getElement().offsetTop;if(!(!1===topOffset||Math.abs(diff)this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*rowHeight),"group"!==row.type&&(onlyGroupHeaders=!1),this.vDomBottom++,i++}position?(this.vDomTopPad=forceMove?this.vDomRowHeight*this.vDomTop+offset:this.scrollTop-topPadHeight,this.vDomBottomPad=this.vDomBottom==this.displayRowsCount-1?0:Math.max(this.vDomScrollHeight-this.vDomTopPad-rowsHeight-topPadHeight,0)):(this.vDomTopPad=0,this.vDomRowHeight=Math.floor((rowsHeight+topPadHeight)/i),this.vDomBottomPad=this.vDomRowHeight*(this.displayRowsCount-this.vDomBottom-1),this.vDomScrollHeight=topPadHeight+rowsHeight+this.vDomBottomPad-this.height),element.style.paddingTop=this.vDomTopPad+"px",element.style.paddingBottom=this.vDomBottomPad+"px",forceMove&&(this.scrollTop=this.vDomTopPad+topPadHeight+offset-(this.element.scrollWidth>this.element.clientWidth?this.element.offsetHeight-this.element.clientHeight:0)),this.scrollTop=Math.min(this.scrollTop,this.element.scrollHeight-this.height),this.element.scrollWidth>this.element.offsetWidth&&forceMove&&(this.scrollTop+=this.element.offsetHeight-this.element.clientHeight),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,holder.scrollTop=this.scrollTop,element.style.minWidth=onlyGroupHeaders?this.table.columnManager.getWidth()+"px":"",this.table.options.groupBy&&"fitDataFill"!=this.table.modules.layout.getMode()&&this.displayRowsCount==this.table.modules.groupRows.countGroups()&&(this.tableElement.style.minWidth=this.table.columnManager.getWidth())}else this.renderEmptyScroll();this.fixedHeight||this.adjustTableSize()},RowManager.prototype.scrollVertical=function(dir){var topDiff=this.scrollTop-this.vDomScrollPosTop,bottomDiff=this.scrollTop-this.vDomScrollPosBottom,margin=2*this.vDomWindowBuffer;if(-topDiff>margin||bottomDiff>margin){var left=this.scrollLeft;this._virtualRenderFill(Math.floor(this.element.scrollTop/this.element.scrollHeight*this.displayRowsCount)),this.scrollHorizontal(left)}else dir?(topDiff<0&&this._addTopRow(-topDiff),bottomDiff<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(-bottomDiff):this.vDomScrollPosBottom=this.scrollTop)):(topDiff>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(topDiff):this.vDomScrollPosTop=this.scrollTop),bottomDiff>=0&&this._addBottomRow(bottomDiff))},RowManager.prototype._addTopRow=function(topDiff){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,table=this.tableElement,rows=this.getDisplayRows();if(this.vDomTop){var index=this.vDomTop-1,topRow=rows[index],topRowHeight=topRow.getHeight()||this.vDomRowHeight;topDiff>=topRowHeight&&(this.styleRow(topRow,index),table.insertBefore(topRow.getElement(),table.firstChild),topRow.initialized&&topRow.heightInitialized||(this.vDomTopNewRows.push(topRow),topRow.heightInitialized||topRow.clearCellHeight()),topRow.initialize(),this.vDomTopPad-=topRowHeight,this.vDomTopPad<0&&(this.vDomTopPad=index*this.vDomRowHeight),index||(this.vDomTopPad=0),table.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=topRowHeight,this.vDomTop--),topDiff=-(this.scrollTop-this.vDomScrollPosTop),topRow.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*topRow.getHeight()),i=(rows[this.vDomTop-1].getHeight()||this.vDomRowHeight)?this._addTopRow(topDiff,i+1):this._quickNormalizeRowHeight(this.vDomTopNewRows)}},RowManager.prototype._removeTopRow=function(topDiff){var table=this.tableElement,topRow=this.getDisplayRows()[this.vDomTop],topRowHeight=topRow.getHeight()||this.vDomRowHeight;if(topDiff>=topRowHeight){var rowEl=topRow.getElement();rowEl.parentNode.removeChild(rowEl),this.vDomTopPad+=topRowHeight,table.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?topRowHeight:topRowHeight+this.vDomWindowBuffer,this.vDomTop++,topDiff=this.scrollTop-this.vDomScrollPosTop,this._removeTopRow(topDiff)}},RowManager.prototype._addBottomRow=function(bottomDiff){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,table=this.tableElement,rows=this.getDisplayRows();if(this.vDomBottom=bottomRowHeight&&(this.styleRow(bottomRow,index),table.appendChild(bottomRow.getElement()),bottomRow.initialized&&bottomRow.heightInitialized||(this.vDomBottomNewRows.push(bottomRow),bottomRow.heightInitialized||bottomRow.clearCellHeight()),bottomRow.initialize(),this.vDomBottomPad-=bottomRowHeight,(this.vDomBottomPad<0||index==this.displayRowsCount-1)&&(this.vDomBottomPad=0),table.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=bottomRowHeight,this.vDomBottom++),bottomDiff=this.scrollTop-this.vDomScrollPosBottom,bottomRow.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*bottomRow.getHeight()),i=(rows[this.vDomBottom+1].getHeight()||this.vDomRowHeight)?this._addBottomRow(bottomDiff,i+1):this._quickNormalizeRowHeight(this.vDomBottomNewRows)}},RowManager.prototype._removeBottomRow=function(bottomDiff){var table=this.tableElement,bottomRow=this.getDisplayRows()[this.vDomBottom],bottomRowHeight=bottomRow.getHeight()||this.vDomRowHeight;if(bottomDiff>=bottomRowHeight){var rowEl=bottomRow.getElement();rowEl.parentNode&&rowEl.parentNode.removeChild(rowEl),this.vDomBottomPad+=bottomRowHeight,this.vDomBottomPad<0&&(this.vDomBottomPad=0),table.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=bottomRowHeight,this.vDomBottom--,bottomDiff=-(this.scrollTop-this.vDomScrollPosBottom),this._removeBottomRow(bottomDiff)}},RowManager.prototype._quickNormalizeRowHeight=function(rows){rows.forEach((function(row){row.calcHeight()})),rows.forEach((function(row){row.setCellHeight()})),rows.length=0},RowManager.prototype.normalizeHeight=function(){this.activeRows.forEach((function(row){row.normalizeHeight()}))},RowManager.prototype.adjustTableSize=function(){var initialHeight=this.element.clientHeight,modExists;if("virtual"===this.renderMode){var otherHeight=this.columnManager.getElement().offsetHeight+(this.table.footerManager&&!this.table.footerManager.external?this.table.footerManager.getElement().offsetHeight:0);this.fixedHeight?(this.element.style.minHeight="calc(100% - "+otherHeight+"px)",this.element.style.height="calc(100% - "+otherHeight+"px)",this.element.style.maxHeight="calc(100% - "+otherHeight+"px)"):(this.element.style.height="",this.element.style.height=this.table.element.clientHeight-otherHeight+"px",this.element.scrollTop=this.scrollTop),this.height=this.element.clientHeight,this.vDomWindowBuffer=this.table.options.virtualDomBuffer||this.height,this.fixedHeight||initialHeight==this.element.clientHeight||((modExists=this.table.modExists("resizeTable"))&&!this.table.modules.resizeTable.autoResize||!modExists)&&this.redraw()}},RowManager.prototype.reinitialize=function(){this.rows.forEach((function(row){row.reinitialize()}))},RowManager.prototype.blockRedraw=function(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1},RowManager.prototype.restoreRedraw=function(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.stage,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),this.redrawBlockRestoreConfig=!1):this.redrawBlockRederInPosition&&this.reRenderInPosition(),this.redrawBlockRederInPosition=!1},RowManager.prototype.redraw=function(force){var pos=0,left=this.scrollLeft;this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,force?this.renderTable():("classic"==this.renderMode?this.table.options.groupBy?this.refreshActiveData("group",!1,!1):this._simpleRender():(this.reRenderInPosition(),this.scrollHorizontal(left)),this.displayRowsCount||this.table.options.placeholder&&this.getElement().appendChild(this.table.options.placeholder))},RowManager.prototype.resetScroll=function(){if(this.element.scrollLeft=0,this.element.scrollTop=0,"ie"===this.table.browser){var event=document.createEvent("Event");event.initEvent("scroll",!1,!0),this.element.dispatchEvent(event)}else this.element.dispatchEvent(new Event("scroll"))};var RowComponent=function RowComponent(row){this._row=row};RowComponent.prototype.getData=function(transform){return this._row.getData(transform)},RowComponent.prototype.getElement=function(){return this._row.getElement()},RowComponent.prototype.getCells=function(){var cells=[];return this._row.getCells().forEach((function(cell){cells.push(cell.getComponent())})),cells},RowComponent.prototype.getCell=function(column){var cell=this._row.getCell(column);return!!cell&&cell.getComponent()},RowComponent.prototype.getIndex=function(){return this._row.getData("data")[this._row.table.options.index]},RowComponent.prototype.getPosition=function(active){return this._row.table.rowManager.getRowPosition(this._row,active)},RowComponent.prototype.delete=function(){return this._row.delete()},RowComponent.prototype.scrollTo=function(){return this._row.table.rowManager.scrollToRow(this._row)},RowComponent.prototype.pageTo=function(){if(this._row.table.modExists("page",!0))return this._row.table.modules.page.setPageToRow(this._row)},RowComponent.prototype.move=function(to,after){this._row.moveToRow(to,after)},RowComponent.prototype.update=function(data){return this._row.updateData(data)},RowComponent.prototype.normalizeHeight=function(){this._row.normalizeHeight(!0)},RowComponent.prototype.select=function(){this._row.table.modules.selectRow.selectRows(this._row)},RowComponent.prototype.deselect=function(){this._row.table.modules.selectRow.deselectRows(this._row)},RowComponent.prototype.toggleSelect=function(){this._row.table.modules.selectRow.toggleRow(this._row)},RowComponent.prototype.isSelected=function(){return this._row.table.modules.selectRow.isRowSelected(this._row)},RowComponent.prototype._getSelf=function(){return this._row},RowComponent.prototype.validate=function(){return this._row.validate()},RowComponent.prototype.freeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.freezeRow(this._row)},RowComponent.prototype.unfreeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.unfreezeRow(this._row)},RowComponent.prototype.isFrozen=function(){var index;return!!this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.rows.indexOf(this._row)>-1},RowComponent.prototype.treeCollapse=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.collapseRow(this._row)},RowComponent.prototype.treeExpand=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.expandRow(this._row)},RowComponent.prototype.treeToggle=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.toggleRow(this._row)},RowComponent.prototype.getTreeParent=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeParent(this._row)},RowComponent.prototype.getTreeChildren=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeChildren(this._row)},RowComponent.prototype.addTreeChild=function(data,pos,index){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.addTreeChildRow(this._row,data,pos,index)},RowComponent.prototype.reformat=function(){return this._row.reinitialize()},RowComponent.prototype.getGroup=function(){return this._row.getGroup().getComponent()},RowComponent.prototype.getTable=function(){return this._row.table},RowComponent.prototype.getNextRow=function(){var row=this._row.nextRow();return row?row.getComponent():row},RowComponent.prototype.getPrevRow=function(){var row=this._row.prevRow();return row?row.getComponent():row};var Row=function Row(data,parent){var type=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"row";this.table=parent.table,this.parent=parent,this.data={},this.type=type,this.element=this.createElement(),this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.component=null,this.setData(data),this.generateElement()};Row.prototype.createElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-row"),el.setAttribute("role","row"),el},Row.prototype.getElement=function(){return this.element},Row.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},Row.prototype.generateElement=function(){var self=this,dblTap,tapHold,tap;!1!==self.table.options.selectable&&self.table.modExists("selectRow")&&self.table.modules.selectRow.initializeRow(this),!1!==self.table.options.movableRows&&self.table.modExists("moveRow")&&self.table.modules.moveRow.initializeRow(this),!1!==self.table.options.dataTree&&self.table.modExists("dataTree")&&self.table.modules.dataTree.initializeRow(this),"collapse"===self.table.options.responsiveLayout&&self.table.modExists("responsiveLayout")&&self.table.modules.responsiveLayout.initializeRow(this),self.table.options.rowContextMenu&&this.table.modExists("menu")&&self.table.modules.menu.initializeRow(this),self.table.options.rowClick&&self.element.addEventListener("click",(function(e){self.table.options.rowClick(e,self.getComponent())})),self.table.options.rowDblClick&&self.element.addEventListener("dblclick",(function(e){self.table.options.rowDblClick(e,self.getComponent())})),self.table.options.rowContext&&self.element.addEventListener("contextmenu",(function(e){self.table.options.rowContext(e,self.getComponent())})),self.table.options.rowMouseEnter&&self.element.addEventListener("mouseenter",(function(e){self.table.options.rowMouseEnter(e,self.getComponent())})),self.table.options.rowMouseLeave&&self.element.addEventListener("mouseleave",(function(e){self.table.options.rowMouseLeave(e,self.getComponent())})),self.table.options.rowMouseOver&&self.element.addEventListener("mouseover",(function(e){self.table.options.rowMouseOver(e,self.getComponent())})),self.table.options.rowMouseOut&&self.element.addEventListener("mouseout",(function(e){self.table.options.rowMouseOut(e,self.getComponent())})),self.table.options.rowMouseMove&&self.element.addEventListener("mousemove",(function(e){self.table.options.rowMouseMove(e,self.getComponent())})),self.table.options.rowTap&&(tap=!1,self.element.addEventListener("touchstart",(function(e){tap=!0}),{passive:!0}),self.element.addEventListener("touchend",(function(e){tap&&self.table.options.rowTap(e,self.getComponent()),tap=!1}))),self.table.options.rowDblTap&&(dblTap=null,self.element.addEventListener("touchend",(function(e){dblTap?(clearTimeout(dblTap),dblTap=null,self.table.options.rowDblTap(e,self.getComponent())):dblTap=setTimeout((function(){clearTimeout(dblTap),dblTap=null}),300)}))),self.table.options.rowTapHold&&(tapHold=null,self.element.addEventListener("touchstart",(function(e){clearTimeout(tapHold),tapHold=setTimeout((function(){clearTimeout(tapHold),tapHold=null,tap=!1,self.table.options.rowTapHold(e,self.getComponent())}),1e3)}),{passive:!0}),self.element.addEventListener("touchend",(function(e){clearTimeout(tapHold),tapHold=null})))},Row.prototype.generateCells=function(){this.cells=this.table.columnManager.generateCells(this)},Row.prototype.initialize=function(force){var self=this;if(!self.initialized||force){for(self.deleteCells();self.element.firstChild;)self.element.removeChild(self.element.firstChild);this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutRow(this),this.generateCells(),self.cells.forEach((function(cell){self.element.appendChild(cell.getElement()),cell.cellRendered()})),force&&self.normalizeHeight(),self.table.options.dataTree&&self.table.modExists("dataTree")&&self.table.modules.dataTree.layoutRow(this),"collapse"===self.table.options.responsiveLayout&&self.table.modExists("responsiveLayout")&&self.table.modules.responsiveLayout.layoutRow(this),self.table.options.rowFormatter&&self.table.options.rowFormatter(self.getComponent()),self.table.options.resizableRows&&self.table.modExists("resizeRows")&&self.table.modules.resizeRows.initializeRow(self),self.initialized=!0}},Row.prototype.reinitializeHeight=function(){this.heightInitialized=!1,null!==this.element.offsetParent&&this.normalizeHeight(!0)},Row.prototype.reinitialize=function(){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),null!==this.element.offsetParent&&this.initialize(!0)},Row.prototype.calcHeight=function(force){var maxHeight=0,minHeight=this.table.options.resizableRows?this.element.clientHeight:0;this.cells.forEach((function(cell){var height=cell.getHeight();height>maxHeight&&(maxHeight=height)})),this.height=force?Math.max(maxHeight,minHeight):this.manualHeight?this.height:Math.max(maxHeight,minHeight),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight},Row.prototype.setCellHeight=function(){this.cells.forEach((function(cell){cell.setHeight()})),this.heightInitialized=!0},Row.prototype.clearCellHeight=function(){this.cells.forEach((function(cell){cell.clearHeight()}))},Row.prototype.normalizeHeight=function(force){force&&this.clearCellHeight(),this.calcHeight(force),this.setCellHeight()},Row.prototype.setHeight=function(height,force){(this.height!=height||force)&&(this.manualHeight=!0,this.height=height,this.heightStyled=height?height+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight)},Row.prototype.getHeight=function(){return this.outerHeight},Row.prototype.getWidth=function(){return this.element.offsetWidth},Row.prototype.deleteCell=function(cell){var index=this.cells.indexOf(cell);index>-1&&this.cells.splice(index,1)},Row.prototype.setData=function(data){this.table.modExists("mutator")&&(data=this.table.modules.mutator.transformRow(data,"data")),this.data=data,this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchRow(this)},Row.prototype.updateData=function(updatedData){var _this15=this,visible=Tabulator.prototype.helpers.elVisible(this.element),tempData={},newRowData;return new Promise((function(resolve,reject){for(var attrname in"string"==typeof updatedData&&(updatedData=JSON.parse(updatedData)),_this15.table.options.reactiveData&&_this15.table.modExists("reactiveData",!0)&&_this15.table.modules.reactiveData.block(),_this15.table.modExists("mutator")?(tempData=Object.assign(tempData,_this15.data),tempData=Object.assign(tempData,updatedData),newRowData=_this15.table.modules.mutator.transformRow(tempData,"data",updatedData)):newRowData=updatedData,newRowData)_this15.data[attrname]=newRowData[attrname];for(var attrname in _this15.table.options.reactiveData&&_this15.table.modExists("reactiveData",!0)&&_this15.table.modules.reactiveData.unblock(),updatedData){var columns;_this15.table.columnManager.getColumnsByFieldRoot(attrname).forEach((function(column){var cell=_this15.getCell(column.getField());if(cell){var value=column.getFieldValue(newRowData);cell.getValue()!=value&&(cell.setValueProcessData(value),visible&&cell.cellRendered())}}))}visible?(_this15.normalizeHeight(!0),_this15.table.options.rowFormatter&&_this15.table.options.rowFormatter(_this15.getComponent())):(_this15.initialized=!1,_this15.height=0,_this15.heightStyled=""),!1!==_this15.table.options.dataTree&&_this15.table.modExists("dataTree")&&_this15.table.modules.dataTree.redrawNeeded(updatedData)&&(_this15.table.modules.dataTree.initializeRow(_this15),_this15.table.modules.dataTree.layoutRow(_this15),_this15.table.rowManager.refreshActiveData("tree",!1,!0)),_this15.table.options.rowUpdated.call(_this15.table,_this15.getComponent()),resolve()}))},Row.prototype.getData=function(transform){var self=this;return transform?this.table.modExists("accessor")?this.table.modules.accessor.transformRow(this.data,transform):void 0:this.data},Row.prototype.getCell=function(column){var match=!1;return column=this.table.columnManager.findColumn(column),match=this.cells.find((function(cell){return cell.column===column}))},Row.prototype.getCellIndex=function(findCell){return this.cells.findIndex((function(cell){return cell===findCell}))},Row.prototype.findNextEditableCell=function(index){var nextCell=!1;if(index0)for(var i=index-1;i>=0;i--){var cell=this.cells[i],allowEdit=!0;if(cell.column.modules.edit&&Tabulator.prototype.helpers.elVisible(cell.getElement())&&("function"==typeof cell.column.modules.edit.check&&(allowEdit=cell.column.modules.edit.check(cell.getComponent())),allowEdit)){prevCell=cell;break}}return prevCell},Row.prototype.getCells=function(){return this.cells},Row.prototype.nextRow=function(){var row;return this.table.rowManager.nextDisplayRow(this,!0)||!1},Row.prototype.prevRow=function(){var row;return this.table.rowManager.prevDisplayRow(this,!0)||!1},Row.prototype.moveToRow=function(to,before){var toRow=this.table.rowManager.findRow(to);toRow?(this.table.rowManager.moveRowActual(this,toRow,!before),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",to)},Row.prototype.validate=function(){var invalid=[];return this.cells.forEach((function(cell){cell.validate()||invalid.push(cell.getComponent())})),!invalid.length||invalid},Row.prototype.delete=function(){var _this16=this;return new Promise((function(resolve,reject){var index,rows;_this16.table.options.history&&_this16.table.modExists("history")&&(_this16.table.options.groupBy&&_this16.table.modExists("groupRows")?(index=(rows=_this16.getGroup().rows).indexOf(_this16))&&(index=rows[index-1]):(index=_this16.table.rowManager.getRowIndex(_this16))&&(index=_this16.table.rowManager.rows[index-1]),_this16.table.modules.history.action("rowDelete",_this16,{data:_this16.getData(),pos:!index,index:index})),_this16.deleteActual(),resolve()}))},Row.prototype.deleteActual=function(blockRedraw){var index=this.table.rowManager.getRowIndex(this);this.table.modExists("selectRow")&&this.table.modules.selectRow._deselectRow(this,!0),this.table.modExists("edit")&&this.table.modules.edit.currentCell.row===this&&this.table.modules.edit.cancelEdit(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0),this.modules.group&&this.modules.group.removeRow(this),this.table.rowManager.deleteRow(this,blockRedraw),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.rowDelete(this),this.table.modExists("columnCalcs")&&(this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.columnCalcs.recalcRowGroup(this):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows))},Row.prototype.deleteCells=function(){for(var cellCount=this.cells.length,_i5=0;_i5-1?(this.browser="ie",this.browserSlow=!0):ua.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):ua.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(ua.substr(0,4))},Tabulator.prototype.blockRedraw=function(){return this.rowManager.blockRedraw()},Tabulator.prototype.restoreRedraw=function(){return this.rowManager.restoreRedraw()},Tabulator.prototype.setDataFromLocalFile=function(extensions){var _this18=this;return new Promise((function(resolve,reject){var input=document.createElement("input");input.type="file",input.accept=extensions||".json,application/json",input.addEventListener("change",(function(e){var file=input.files[0],reader=new FileReader,data;reader.readAsText(file),reader.onload=function(e){try{data=JSON.parse(reader.result)}catch(e){return console.warn("File Load Error - File contents is invalid JSON",e),void reject(e)}_this18._setData(data).then((function(data){resolve(data)})).catch((function(err){resolve(err)}))},reader.onerror=function(e){console.warn("File Load Error - Unable to read file"),reject()}})),input.click()}))},Tabulator.prototype.setData=function(data,params,config){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(data,params,config,!1,!0)},Tabulator.prototype._setData=function(data,params,config,inPosition,columnsChanged){var self=this;return"string"!=typeof data?data?this.rowManager.setData(data,inPosition,columnsChanged):this.modExists("ajax")&&(this.modules.ajax.getUrl||this.options.ajaxURLGenerator)?"remote"==this.options.pagination&&this.modExists("page",!0)?(this.modules.page.reset(!0,!0),this.modules.page.setPage(1)):this.modules.ajax.loadData(inPosition,columnsChanged):this.rowManager.setData([],inPosition,columnsChanged):0==data.indexOf("{")||0==data.indexOf("[")?this.rowManager.setData(JSON.parse(data),inPosition,columnsChanged):this.modExists("ajax",!0)?(params&&this.modules.ajax.setParams(params),config&&this.modules.ajax.setConfig(config),this.modules.ajax.setUrl(data),"remote"==this.options.pagination&&this.modExists("page",!0)?(this.modules.page.reset(!0,!0),this.modules.page.setPage(1)):this.modules.ajax.loadData(inPosition,columnsChanged)):void 0},Tabulator.prototype.clearData=function(){this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this.rowManager.clearData()},Tabulator.prototype.getData=function(active){return!0===active&&(console.warn("passing a boolean to the getData function is deprecated, you should now pass the string 'active'"),active="active"),this.rowManager.getData(active)},Tabulator.prototype.getDataCount=function(active){return!0===active&&(console.warn("passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'"),active="active"),this.rowManager.getDataCount(active)},Tabulator.prototype.searchRows=function(field,type,value){if(this.modExists("filter",!0))return this.modules.filter.search("rows",field,type,value)},Tabulator.prototype.searchData=function(field,type,value){if(this.modExists("filter",!0))return this.modules.filter.search("data",field,type,value)},Tabulator.prototype.getHtml=function(visible,style,config){if(this.modExists("export",!0))return this.modules.export.getHtml(visible,style,config)},Tabulator.prototype.print=function(visible,style,config){if(this.modExists("print",!0))return this.modules.print.printFullscreen(visible,style,config)},Tabulator.prototype.getAjaxUrl=function(){if(this.modExists("ajax",!0))return this.modules.ajax.getUrl()},Tabulator.prototype.replaceData=function(data,params,config){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(data,params,config,!0)},Tabulator.prototype.updateData=function(data){var _this19=this,self=this,responses=0;return new Promise((function(resolve,reject){_this19.modExists("ajax")&&_this19.modules.ajax.blockActiveRequest(),"string"==typeof data&&(data=JSON.parse(data)),data?data.forEach((function(item){var row=self.rowManager.findRow(item[self.options.index]);row&&(responses++,row.updateData(item).then((function(){--responses||resolve()})))})):(console.warn("Update Error - No data provided"),reject("Update Error - No data provided"))}))},Tabulator.prototype.addData=function(data,pos,index){var _this20=this;return new Promise((function(resolve,reject){_this20.modExists("ajax")&&_this20.modules.ajax.blockActiveRequest(),"string"==typeof data&&(data=JSON.parse(data)),data?_this20.rowManager.addRows(data,pos,index).then((function(rows){var output=[];rows.forEach((function(row){output.push(row.getComponent())})),resolve(output)})):(console.warn("Update Error - No data provided"),reject("Update Error - No data provided"))}))},Tabulator.prototype.updateOrAddData=function(data){var _this21=this,self=this,rows=[],responses=0;return new Promise((function(resolve,reject){_this21.modExists("ajax")&&_this21.modules.ajax.blockActiveRequest(),"string"==typeof data&&(data=JSON.parse(data)),data?data.forEach((function(item){var row=self.rowManager.findRow(item[self.options.index]);responses++,row?row.updateData(item).then((function(){responses--,rows.push(row.getComponent()),responses||resolve(rows)})):self.rowManager.addRows(item).then((function(newRows){responses--,rows.push(newRows[0].getComponent()),responses||resolve(rows)}))})):(console.warn("Update Error - No data provided"),reject("Update Error - No data provided"))}))},Tabulator.prototype.getRow=function(index){var row=this.rowManager.findRow(index);return row?row.getComponent():(console.warn("Find Error - No matching row found:",index),!1)},Tabulator.prototype.getRowFromPosition=function(position,active){var row=this.rowManager.getRowFromPosition(position,active);return row?row.getComponent():(console.warn("Find Error - No matching row found:",position),!1)},Tabulator.prototype.deleteRow=function(index){var _this22=this;return new Promise((function(resolve,reject){var self=_this22,count=0,successCount=0,foundRows=[];function doneCheck(){++count==index.length&&successCount&&(self.rowManager.reRenderInPosition(),resolve())}Array.isArray(index)||(index=[index]),index.forEach((function(item){var row=_this22.rowManager.findRow(item,!0);row?foundRows.push(row):(console.warn("Delete Error - No matching row found:",item),reject("Delete Error - No matching row found"),doneCheck())})),foundRows.sort((function(a,b){return _this22.rowManager.rows.indexOf(a)>_this22.rowManager.rows.indexOf(b)?1:-1})),foundRows.forEach((function(row){row.delete().then((function(){successCount++,doneCheck()})).catch((function(err){doneCheck(),reject(err)}))}))}))},Tabulator.prototype.addRow=function(data,pos,index){var _this23=this;return new Promise((function(resolve,reject){"string"==typeof data&&(data=JSON.parse(data)),_this23.rowManager.addRows(data,pos,index).then((function(rows){_this23.modExists("columnCalcs")&&_this23.modules.columnCalcs.recalc(_this23.rowManager.activeRows),resolve(rows[0].getComponent())}))}))},Tabulator.prototype.updateOrAddRow=function(index,data){var _this24=this;return new Promise((function(resolve,reject){var row=_this24.rowManager.findRow(index);"string"==typeof data&&(data=JSON.parse(data)),row?row.updateData(data).then((function(){_this24.modExists("columnCalcs")&&_this24.modules.columnCalcs.recalc(_this24.rowManager.activeRows),resolve(row.getComponent())})).catch((function(err){reject(err)})):row=_this24.rowManager.addRows(data).then((function(rows){_this24.modExists("columnCalcs")&&_this24.modules.columnCalcs.recalc(_this24.rowManager.activeRows),resolve(rows[0].getComponent())})).catch((function(err){reject(err)}))}))},Tabulator.prototype.updateRow=function(index,data){var _this25=this;return new Promise((function(resolve,reject){var row=_this25.rowManager.findRow(index);"string"==typeof data&&(data=JSON.parse(data)),row?row.updateData(data).then((function(){resolve(row.getComponent())})).catch((function(err){reject(err)})):(console.warn("Update Error - No matching row found:",index),reject("Update Error - No matching row found"))}))},Tabulator.prototype.scrollToRow=function(index,position,ifVisible){var _this26=this;return new Promise((function(resolve,reject){var row=_this26.rowManager.findRow(index);row?_this26.rowManager.scrollToRow(row,position,ifVisible).then((function(){resolve()})).catch((function(err){reject(err)})):(console.warn("Scroll Error - No matching row found:",index),reject("Scroll Error - No matching row found"))}))},Tabulator.prototype.moveRow=function(from,to,after){var fromRow=this.rowManager.findRow(from);fromRow?fromRow.moveToRow(to,after):console.warn("Move Error - No matching row found:",from)},Tabulator.prototype.getRows=function(active){return!0===active&&(console.warn("passing a boolean to the getRows function is deprecated, you should now pass the string 'active'"),active="active"),this.rowManager.getComponents(active)},Tabulator.prototype.getRowPosition=function(index,active){var row=this.rowManager.findRow(index);return row?this.rowManager.getRowPosition(row,active):(console.warn("Position Error - No matching row found:",index),!1)},Tabulator.prototype.copyToClipboard=function(selector){this.modExists("clipboard",!0)&&this.modules.clipboard.copy(selector)},Tabulator.prototype.setColumns=function(definition){this.columnManager.setColumns(definition)},Tabulator.prototype.getColumns=function(structured){return this.columnManager.getComponents(structured)},Tabulator.prototype.getColumn=function(field){var col=this.columnManager.findColumn(field);return col?col.getComponent():(console.warn("Find Error - No matching column found:",field),!1)},Tabulator.prototype.getColumnDefinitions=function(){return this.columnManager.getDefinitionTree()},Tabulator.prototype.getColumnLayout=function(){if(this.modExists("persistence",!0))return this.modules.persistence.parseColumns(this.columnManager.getColumns())},Tabulator.prototype.setColumnLayout=function(layout){return!!this.modExists("persistence",!0)&&(this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns,layout)),!0)},Tabulator.prototype.showColumn=function(field){var column=this.columnManager.findColumn(field);if(!column)return console.warn("Column Show Error - No matching column found:",field),!1;column.show(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},Tabulator.prototype.hideColumn=function(field){var column=this.columnManager.findColumn(field);if(!column)return console.warn("Column Hide Error - No matching column found:",field),!1;column.hide(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},Tabulator.prototype.toggleColumn=function(field){var column=this.columnManager.findColumn(field);if(!column)return console.warn("Column Visibility Toggle Error - No matching column found:",field),!1;column.visible?column.hide():column.show()},Tabulator.prototype.addColumn=function(definition,before,field){var _this27=this;return new Promise((function(resolve,reject){var column=_this27.columnManager.findColumn(field);_this27.columnManager.addColumn(definition,before,column).then((function(column){resolve(column.getComponent())})).catch((function(err){reject(err)}))}))},Tabulator.prototype.deleteColumn=function(field){var _this28=this;return new Promise((function(resolve,reject){var column=_this28.columnManager.findColumn(field);column?column.delete().then((function(){resolve()})).catch((function(err){reject(err)})):(console.warn("Column Delete Error - No matching column found:",field),reject())}))},Tabulator.prototype.updateColumnDefinition=function(field,definition){var _this29=this;return new Promise((function(resolve,reject){var column=_this29.columnManager.findColumn(field);column?column.updateDefinition(definition).then((function(col){resolve(col)})).catch((function(err){reject(err)})):(console.warn("Column Update Error - No matching column found:",field),reject())}))},Tabulator.prototype.moveColumn=function(from,to,after){var fromColumn=this.columnManager.findColumn(from),toColumn=this.columnManager.findColumn(to);fromColumn?toColumn?this.columnManager.moveColumn(fromColumn,toColumn,after):console.warn("Move Error - No matching column found:",toColumn):console.warn("Move Error - No matching column found:",from)},Tabulator.prototype.scrollToColumn=function(field,position,ifVisible){var _this30=this;return new Promise((function(resolve,reject){var column=_this30.columnManager.findColumn(field);column?_this30.columnManager.scrollToColumn(column,position,ifVisible).then((function(){resolve()})).catch((function(err){reject(err)})):(console.warn("Scroll Error - No matching column found:",field),reject("Scroll Error - No matching column found"))}))},Tabulator.prototype.setLocale=function(locale){this.modules.localize.setLocale(locale)},Tabulator.prototype.getLocale=function(){return this.modules.localize.getLocale()},Tabulator.prototype.getLang=function(locale){return this.modules.localize.getLang(locale)},Tabulator.prototype.redraw=function(force){this.columnManager.redraw(force),this.rowManager.redraw(force)},Tabulator.prototype.setHeight=function(height){"classic"!==this.rowManager.renderMode?(this.options.height=isNaN(height)?height:height+"px",this.element.style.height=this.options.height,this.rowManager.setRenderMode(),this.rowManager.redraw()):console.warn("setHeight function is not available in classic render mode")},Tabulator.prototype.setSort=function(sortList,dir){this.modExists("sort",!0)&&(this.modules.sort.setSort(sortList,dir),this.rowManager.sorterRefresh())},Tabulator.prototype.getSorters=function(){if(this.modExists("sort",!0))return this.modules.sort.getSort()},Tabulator.prototype.clearSort=function(){this.modExists("sort",!0)&&(this.modules.sort.clear(),this.rowManager.sorterRefresh())},Tabulator.prototype.setFilter=function(field,type,value,params){this.modExists("filter",!0)&&(this.modules.filter.setFilter(field,type,value,params),this.rowManager.filterRefresh())},Tabulator.prototype.addFilter=function(field,type,value,params){this.modExists("filter",!0)&&(this.modules.filter.addFilter(field,type,value,params),this.rowManager.filterRefresh())},Tabulator.prototype.getFilters=function(all){if(this.modExists("filter",!0))return this.modules.filter.getFilters(all)},Tabulator.prototype.setHeaderFilterFocus=function(field){if(this.modExists("filter",!0)){var column=this.columnManager.findColumn(field);if(!column)return console.warn("Column Filter Focus Error - No matching column found:",field),!1;this.modules.filter.setHeaderFilterFocus(column)}},Tabulator.prototype.getHeaderFilterValue=function(field){if(this.modExists("filter",!0)){var column=this.columnManager.findColumn(field);if(column)return this.modules.filter.getHeaderFilterValue(column);console.warn("Column Filter Error - No matching column found:",field)}},Tabulator.prototype.setHeaderFilterValue=function(field,value){if(this.modExists("filter",!0)){var column=this.columnManager.findColumn(field);if(!column)return console.warn("Column Filter Error - No matching column found:",field),!1;this.modules.filter.setHeaderFilterValue(column,value)}},Tabulator.prototype.getHeaderFilters=function(){if(this.modExists("filter",!0))return this.modules.filter.getHeaderFilters()},Tabulator.prototype.removeFilter=function(field,type,value){this.modExists("filter",!0)&&(this.modules.filter.removeFilter(field,type,value),this.rowManager.filterRefresh())},Tabulator.prototype.clearFilter=function(all){this.modExists("filter",!0)&&(this.modules.filter.clearFilter(all),this.rowManager.filterRefresh())},Tabulator.prototype.clearHeaderFilter=function(){this.modExists("filter",!0)&&(this.modules.filter.clearHeaderFilter(),this.rowManager.filterRefresh())},Tabulator.prototype.selectRow=function(rows){this.modExists("selectRow",!0)&&(!0===rows&&(console.warn("passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'"),rows="active"),this.modules.selectRow.selectRows(rows))},Tabulator.prototype.deselectRow=function(rows){this.modExists("selectRow",!0)&&this.modules.selectRow.deselectRows(rows)},Tabulator.prototype.toggleSelectRow=function(row){this.modExists("selectRow",!0)&&this.modules.selectRow.toggleRow(row)},Tabulator.prototype.getSelectedRows=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedRows()},Tabulator.prototype.getSelectedData=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedData()},Tabulator.prototype.getInvalidCells=function(){if(this.modExists("validate",!0))return this.modules.validate.getInvalidCells()},Tabulator.prototype.clearCellValidation=function(cells){var _this31=this;this.modExists("validate",!0)&&(cells||(cells=this.modules.validate.getInvalidCells()),Array.isArray(cells)||(cells=[cells]),cells.forEach((function(cell){_this31.modules.validate.clearValidation(cell._getSelf())})))},Tabulator.prototype.validate=function(cells){var output=[];return this.rowManager.rows.forEach((function(row){var valid=row.validate();!0!==valid&&(output=output.concat(valid))})),!output.length||output},Tabulator.prototype.setMaxPage=function(max){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setMaxPage(max)},Tabulator.prototype.setPage=function(page){return this.options.pagination&&this.modExists("page")?this.modules.page.setPage(page):new Promise((function(resolve,reject){reject()}))},Tabulator.prototype.setPageToRow=function(row){var _this32=this;return new Promise((function(resolve,reject){_this32.options.pagination&&_this32.modExists("page")&&(row=_this32.rowManager.findRow(row))?_this32.modules.page.setPageToRow(row).then((function(){resolve()})).catch((function(){reject()})):reject()}))},Tabulator.prototype.setPageSize=function(size){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setPageSize(size),this.modules.page.setPage(1).then((function(){})).catch((function(){}))},Tabulator.prototype.getPageSize=function(){if(this.options.pagination&&this.modExists("page",!0))return this.modules.page.getPageSize()},Tabulator.prototype.previousPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.previousPage()},Tabulator.prototype.nextPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.nextPage()},Tabulator.prototype.getPage=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPage()},Tabulator.prototype.getPageMax=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPageMax()},Tabulator.prototype.setGroupBy=function(groups){if(!this.modExists("groupRows",!0))return!1;this.options.groupBy=groups,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")},Tabulator.prototype.setGroupStartOpen=function(values){if(!this.modExists("groupRows",!0))return!1;this.options.groupStartOpen=values,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},Tabulator.prototype.setGroupHeader=function(values){if(!this.modExists("groupRows",!0))return!1;this.options.groupHeader=values,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},Tabulator.prototype.getGroups=function(values){return!!this.modExists("groupRows",!0)&&this.modules.groupRows.getGroups(!0)},Tabulator.prototype.getGroupedData=function(){if(this.modExists("groupRows",!0))return this.options.groupBy?this.modules.groupRows.getGroupedData():this.getData()},Tabulator.prototype.getEditedCells=function(){if(this.modExists("edit",!0))return this.modules.edit.getEditedCells()},Tabulator.prototype.clearCellEdited=function(cells){var _this33=this;this.modExists("edit",!0)&&(cells||(cells=this.modules.edit.getEditedCells()),Array.isArray(cells)||(cells=[cells]),cells.forEach((function(cell){_this33.modules.edit.clearEdited(cell._getSelf())})))},Tabulator.prototype.getCalcResults=function(){return!!this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.getResults()},Tabulator.prototype.recalc=function(){this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.recalcAll(this.rowManager.activeRows)},Tabulator.prototype.navigatePrev=function(){var cell=!1;return!(!this.modExists("edit",!0)||!(cell=this.modules.edit.currentCell))&&cell.nav().prev()},Tabulator.prototype.navigateNext=function(){var cell=!1;return!(!this.modExists("edit",!0)||!(cell=this.modules.edit.currentCell))&&cell.nav().next()},Tabulator.prototype.navigateLeft=function(){var cell=!1;return!(!this.modExists("edit",!0)||!(cell=this.modules.edit.currentCell))&&(e.preventDefault(),cell.nav().left())},Tabulator.prototype.navigateRight=function(){var cell=!1;return!(!this.modExists("edit",!0)||!(cell=this.modules.edit.currentCell))&&(e.preventDefault(),cell.nav().right())},Tabulator.prototype.navigateUp=function(){var cell=!1;return!(!this.modExists("edit",!0)||!(cell=this.modules.edit.currentCell))&&(e.preventDefault(),cell.nav().up())},Tabulator.prototype.navigateDown=function(){var cell=!1;return!(!this.modExists("edit",!0)||!(cell=this.modules.edit.currentCell))&&(e.preventDefault(),cell.nav().down())},Tabulator.prototype.undo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.undo()},Tabulator.prototype.redo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.redo()},Tabulator.prototype.getHistoryUndoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryUndoSize()},Tabulator.prototype.getHistoryRedoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryRedoSize()},Tabulator.prototype.download=function(type,filename,options,active){this.modExists("download",!0)&&this.modules.download.download(type,filename,options,active)},Tabulator.prototype.downloadToTab=function(type,filename,options,active){this.modExists("download",!0)&&this.modules.download.download(type,filename,options,active,!0)},Tabulator.prototype.tableComms=function(table,module,action,data){this.modules.comms.receive(table,module,action,data)},Tabulator.prototype.moduleBindings={},Tabulator.prototype.extendModule=function(name,property,values){if(Tabulator.prototype.moduleBindings[name]){var source=Tabulator.prototype.moduleBindings[name].prototype[property];if(source)if("object"==(void 0===values?"undefined":_typeof(values)))for(var key in values)source[key]=values[key];else console.warn("Module Error - Invalid value type, it must be an object");else console.warn("Module Error - property does not exist:",property)}else console.warn("Module Error - module does not exist:",name)},Tabulator.prototype.registerModule=function(name,module){var self=this;Tabulator.prototype.moduleBindings[name]=module},Tabulator.prototype.bindModules=function(){for(var name in this.modules={},Tabulator.prototype.moduleBindings)this.modules[name]=new Tabulator.prototype.moduleBindings[name](this)},Tabulator.prototype.modExists=function(plugin,required){return!!this.modules[plugin]||(required&&console.error("Tabulator Module Not Installed: "+plugin),!1)},Tabulator.prototype.helpers={elVisible:function elVisible(el){return!(el.offsetWidth<=0&&el.offsetHeight<=0)},elOffset:function elOffset(el){var box=el.getBoundingClientRect();return{top:box.top+window.pageYOffset-document.documentElement.clientTop,left:box.left+window.pageXOffset-document.documentElement.clientLeft}},deepClone:function deepClone(obj){var clone=Array.isArray(obj)?[]:{};for(var i in obj)null!=obj[i]&&"object"===_typeof(obj[i])?obj[i]instanceof Date?clone[i]=new Date(obj[i]):clone[i]=this.deepClone(obj[i]):clone[i]=obj[i];return clone}},Tabulator.prototype.comms={tables:[],register:function register(table){Tabulator.prototype.comms.tables.push(table)},deregister:function deregister(table){var index=Tabulator.prototype.comms.tables.indexOf(table);index>-1&&Tabulator.prototype.comms.tables.splice(index,1)},lookupTable:function lookupTable(query,silent){var results=[],matches,match;if("string"==typeof query){if((matches=document.querySelectorAll(query)).length)for(var i=0;i0?lastCol.setWidth(gap):lastCol.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitColumns:function fitColumns(columns){var self=this,totalWidth=this.table.element.clientWidth,fixedWidth=0,flexWidth=0,flexGrowUnits=0,flexColWidth=0,flexColumns=[],fixedShrinkColumns=[],flexShrinkUnits=0,overflowWidth=0,gapFill=0;function calcWidth(width){var colWidth;return colWidth="string"==typeof width?width.indexOf("%")>-1?totalWidth/100*parseInt(width):parseInt(width):width}function scaleColumns(columns,freeSpace,colWidth,shrinkCols){var oversizeCols=[],oversizeSpace=0,remainingSpace=0,nextColWidth=0,gap=0,changeUnits=0,undersizeCols=[];function calcGrow(col){return colWidth*(col.column.definition.widthGrow||1)}function calcShrink(col){return calcWidth(col.width)-colWidth*(col.column.definition.widthShrink||0)}return columns.forEach((function(col,i){var width=shrinkCols?calcShrink(col):calcGrow(col);col.column.minWidth>=width?oversizeCols.push(col):(undersizeCols.push(col),changeUnits+=shrinkCols?col.column.definition.widthShrink||1:col.column.definition.widthGrow||1)})),oversizeCols.length?(oversizeCols.forEach((function(col){oversizeSpace+=shrinkCols?col.width-col.column.minWidth:col.column.minWidth,col.width=col.column.minWidth})),gap=(remainingSpace=freeSpace-oversizeSpace)-(nextColWidth=changeUnits?Math.floor(remainingSpace/changeUnits):remainingSpace)*changeUnits,gap+=scaleColumns(undersizeCols,remainingSpace,nextColWidth,shrinkCols)):(gap=changeUnits?freeSpace-Math.floor(freeSpace/changeUnits)*changeUnits:freeSpace,undersizeCols.forEach((function(column){column.width=shrinkCols?calcShrink(column):calcGrow(column)}))),gap}this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(totalWidth-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),columns.forEach((function(column){var width,minWidth,colWidth;column.visible&&(width=column.definition.width,minWidth=parseInt(column.minWidth),width?(colWidth=calcWidth(width),fixedWidth+=colWidth>minWidth?colWidth:minWidth,column.definition.widthShrink&&(fixedShrinkColumns.push({column:column,width:colWidth>minWidth?colWidth:minWidth}),flexShrinkUnits+=column.definition.widthShrink)):(flexColumns.push({column:column,width:0}),flexGrowUnits+=column.definition.widthGrow||1))})),flexWidth=totalWidth-fixedWidth,flexColWidth=Math.floor(flexWidth/flexGrowUnits);var gapFill=scaleColumns(flexColumns,flexWidth,flexColWidth,!1);flexColumns.length&&gapFill>0&&(flexColumns[flexColumns.length-1].width+=+gapFill),flexColumns.forEach((function(col){flexWidth-=col.width})),(overflowWidth=Math.abs(gapFill)+flexWidth)>0&&flexShrinkUnits&&(gapFill=scaleColumns(fixedShrinkColumns,overflowWidth,Math.floor(overflowWidth/flexShrinkUnits),!0)),fixedShrinkColumns.length&&(fixedShrinkColumns[fixedShrinkColumns.length-1].width-=gapFill),flexColumns.forEach((function(col){col.column.setWidth(col.width)})),fixedShrinkColumns.forEach((function(col){col.column.setWidth(col.width)}))}},Tabulator.prototype.registerModule("layout",Layout);var Localize=function Localize(table){this.table=table,this.locale="default",this.lang=!1,this.bindings={}};Localize.prototype.setHeaderFilterPlaceholder=function(placeholder){this.langs.default.headerFilters.default=placeholder},Localize.prototype.setHeaderFilterColumnPlaceholder=function(column,placeholder){this.langs.default.headerFilters.columns[column]=placeholder,this.lang&&!this.lang.headerFilters.columns[column]&&(this.lang.headerFilters.columns[column]=placeholder)},Localize.prototype.installLang=function(locale,lang){this.langs[locale]?this._setLangProp(this.langs[locale],lang):this.langs[locale]=lang},Localize.prototype._setLangProp=function(lang,values){for(var key in values)lang[key]&&"object"==_typeof(lang[key])?this._setLangProp(lang[key],values[key]):lang[key]=values[key]},Localize.prototype.setLocale=function(desiredLocale){var self=this;function traverseLang(trans,path){for(var prop in trans)"object"==_typeof(trans[prop])?(path[prop]||(path[prop]={}),traverseLang(trans[prop],path[prop])):path[prop]=trans[prop]}if(!0===(desiredLocale=desiredLocale||"default")&&navigator.language&&(desiredLocale=navigator.language.toLowerCase()),desiredLocale&&!this.langs[desiredLocale]){var prefix=desiredLocale.split("-")[0];this.langs[prefix]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",desiredLocale,prefix),desiredLocale=prefix):(console.warn("Localization Error - Matching locale not found, using default: ",desiredLocale),desiredLocale="default")}this.locale=desiredLocale,this.lang=Tabulator.prototype.helpers.deepClone(this.langs.default||{}),"default"!=desiredLocale&&traverseLang(this.langs[desiredLocale],this.lang),this.table.options.localized.call(this.table,this.locale,this.lang),this._executeBindings()},Localize.prototype.getLocale=function(locale){return self.locale},Localize.prototype.getLang=function(locale){return locale?this.langs[locale]:this.lang},Localize.prototype.getText=function(path,value){var path,pathArray=(path=value?path+"|"+value:path).split("|"),text;return this._getLangElement(pathArray,this.locale)||""},Localize.prototype._getLangElement=function(path,locale){var self=this,root=this.lang;return path.forEach((function(level){var rootPath;root&&(rootPath=root[level],root=void 0!==rootPath&&rootPath)})),root},Localize.prototype.bind=function(path,callback){this.bindings[path]||(this.bindings[path]=[]),this.bindings[path].push(callback),callback(this.getText(path),this.lang)},Localize.prototype._executeBindings=function(){var self=this,_loop=function _loop(path){self.bindings[path].forEach((function(binding){binding(self.getText(path),self.lang)}))};for(var path in self.bindings)_loop(path)},Localize.prototype.langs={default:{groups:{item:"item",items:"items"},columns:{},ajax:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All"},headerFilters:{default:"filter column...",columns:{}}}},Tabulator.prototype.registerModule("localize",Localize);var Comms=function Comms(table){this.table=table};Comms.prototype.getConnections=function(selectors){var self=this,connections=[],connection;return(connection=Tabulator.prototype.comms.lookupTable(selectors)).forEach((function(con){self.table!==con&&connections.push(con)})),connections},Comms.prototype.send=function(selectors,module,action,data){var self=this,connections=this.getConnections(selectors);connections.forEach((function(connection){connection.tableComms(self.table.element,module,action,data)})),!connections.length&&selectors&&console.warn("Table Connection Error - No tables matching selector found",selectors)},Comms.prototype.receive=function(table,module,action,data){if(this.table.modExists(module))return this.table.modules[module].commsReceived(table,action,data);console.warn("Inter-table Comms Error - no such module:",module)},Tabulator.prototype.registerModule("comms",Comms);var Accessor=function Accessor(table){this.table=table,this.allowedTypes=["","data","download","clipboard","print","htmlOutput"]};Accessor.prototype.initializeColumn=function(column){var self=this,match=!1,config={};this.allowedTypes.forEach((function(type){var key="accessor"+(type.charAt(0).toUpperCase()+type.slice(1)),accessor;column.definition[key]&&(accessor=self.lookupAccessor(column.definition[key]))&&(match=!0,config[key]={accessor:accessor,params:column.definition[key+"Params"]||{}})})),match&&(column.modules.accessor=config)},Accessor.prototype.lookupAccessor=function(value){var accessor=!1;switch(void 0===value?"undefined":_typeof(value)){case"string":this.accessors[value]?accessor=this.accessors[value]:console.warn("Accessor Error - No such accessor found, ignoring: ",value);break;case"function":accessor=value}return accessor},Accessor.prototype.transformRow=function(dataIn,type){var self=this,key="accessor"+(type.charAt(0).toUpperCase()+type.slice(1)),data=Tabulator.prototype.helpers.deepClone(dataIn||{});return this.table.columnManager.traverse((function(column){var value,accessor,params,component;column.modules.accessor&&(accessor=column.modules.accessor[key]||column.modules.accessor.accessor||!1)&&"undefined"!=(value=column.getFieldValue(data))&&(component=column.getComponent(),params="function"==typeof accessor.params?accessor.params(value,data,type,component):accessor.params,column.setFieldValue(data,accessor.accessor(value,data,type,params,component)))})),data},Accessor.prototype.accessors={},Tabulator.prototype.registerModule("accessor",Accessor);var Ajax=function Ajax(table){this.table=table,this.config=!1,this.url="",this.urlGenerator=!1,this.params=!1,this.loaderElement=this.createLoaderElement(),this.msgElement=this.createMsgElement(),this.loadingElement=!1,this.errorElement=!1,this.loaderPromise=!1,this.progressiveLoad=!1,this.loading=!1,this.requestOrder=0};Ajax.prototype.initialize=function(){var template;this.loaderElement.appendChild(this.msgElement),this.table.options.ajaxLoaderLoading&&("string"==typeof this.table.options.ajaxLoaderLoading?((template=document.createElement("template")).innerHTML=this.table.options.ajaxLoaderLoading.trim(),this.loadingElement=template.content.firstChild):this.loadingElement=this.table.options.ajaxLoaderLoading),this.loaderPromise=this.table.options.ajaxRequestFunc||this.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||this.defaultURLGenerator,this.table.options.ajaxLoaderError&&("string"==typeof this.table.options.ajaxLoaderError?((template=document.createElement("template")).innerHTML=this.table.options.ajaxLoaderError.trim(),this.errorElement=template.content.firstChild):this.errorElement=this.table.options.ajaxLoaderError),this.table.options.ajaxParams&&this.setParams(this.table.options.ajaxParams),this.table.options.ajaxConfig&&this.setConfig(this.table.options.ajaxConfig),this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.table.options.ajaxProgressiveLoad&&(this.table.options.pagination?(this.progressiveLoad=!1,console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time")):this.table.modExists("page")?(this.progressiveLoad=this.table.options.ajaxProgressiveLoad,this.table.modules.page.initializeProgressive(this.progressiveLoad)):console.error("Pagination plugin is required for progressive ajax loading"))},Ajax.prototype.createLoaderElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-loader"),el},Ajax.prototype.createMsgElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-loader-msg"),el.setAttribute("role","alert"),el},Ajax.prototype.setParams=function(params,update){if(update)for(var key in this.params=this.params||{},params)this.params[key]=params[key];else this.params=params},Ajax.prototype.getParams=function(){return this.params||{}},Ajax.prototype.setConfig=function(config){if(this._loadDefaultConfig(),"string"==typeof config)this.config.method=config;else for(var key in config)this.config[key]=config[key]},Ajax.prototype._loadDefaultConfig=function(force){var self=this;if(!this.config||force)for(var key in this.config={},this.defaultConfig)this.config[key]=this.defaultConfig[key]},Ajax.prototype.setUrl=function(url){this.url=url},Ajax.prototype.getUrl=function(){return this.url},Ajax.prototype.loadData=function(inPosition,columnsChanged){var self=this;return this.progressiveLoad?this._loadDataProgressive():this._loadDataStandard(inPosition,columnsChanged)},Ajax.prototype.nextPage=function(diff){var margin;this.loading||diff<(margin=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.getElement().clientHeight)&&this.table.modules.page.nextPage().then((function(){})).catch((function(){}))},Ajax.prototype.blockActiveRequest=function(){this.requestOrder++},Ajax.prototype._loadDataProgressive=function(){return this.table.rowManager.setData([]),this.table.modules.page.setPage(1)},Ajax.prototype._loadDataStandard=function(inPosition,columnsChanged){var _this35=this;return new Promise((function(resolve,reject){_this35.sendRequest(inPosition).then((function(data){_this35.table.rowManager.setData(data,inPosition,columnsChanged).then((function(){resolve()})).catch((function(e){reject(e)}))})).catch((function(e){reject(e)}))}))},Ajax.prototype.generateParamsList=function(data,prefix){var self=this,output=[];if(prefix=prefix||"",Array.isArray(data))data.forEach((function(item,i){output=output.concat(self.generateParamsList(item,prefix?prefix+"["+i+"]":i))}));else if("object"===(void 0===data?"undefined":_typeof(data)))for(var key in data)output=output.concat(self.generateParamsList(data[key],prefix?prefix+"["+key+"]":key));else output.push({key:prefix,value:data});return output},Ajax.prototype.serializeParams=function(params){var output=this.generateParamsList(params),encoded=[];return output.forEach((function(item){encoded.push(encodeURIComponent(item.key)+"="+encodeURIComponent(item.value))})),encoded.join("&")},Ajax.prototype.sendRequest=function(silent){var _this36=this,self=this,url=self.url,requestNo,esc,query;return self.requestOrder++,requestNo=self.requestOrder,self._loadDefaultConfig(),new Promise((function(resolve,reject){!1!==self.table.options.ajaxRequesting.call(_this36.table,self.url,self.params)?(self.loading=!0,silent||self.showLoader(),_this36.loaderPromise(url,self.config,self.params).then((function(data){requestNo===self.requestOrder?(self.table.options.ajaxResponse&&(data=self.table.options.ajaxResponse.call(self.table,self.url,self.params,data)),resolve(data),self.hideLoader(),self.loading=!1):console.warn("Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made")})).catch((function(error){console.error("Ajax Load Error: ",error),self.table.options.ajaxError.call(self.table,error),self.showError(),setTimeout((function(){self.hideLoader()}),3e3),self.loading=!1,reject()}))):reject()}))},Ajax.prototype.showLoader=function(){var shouldLoad;if("function"==typeof this.table.options.ajaxLoader?this.table.options.ajaxLoader():this.table.options.ajaxLoader){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-error"),this.msgElement.classList.add("tabulator-loading"),this.loadingElement?this.msgElement.appendChild(this.loadingElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|loading"),this.table.element.appendChild(this.loaderElement)}},Ajax.prototype.showError=function(){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-loading"),this.msgElement.classList.add("tabulator-error"),this.errorElement?this.msgElement.appendChild(this.errorElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|error"),this.table.element.appendChild(this.loaderElement)},Ajax.prototype.hideLoader=function(){this.loaderElement.parentNode&&this.loaderElement.parentNode.removeChild(this.loaderElement)},Ajax.prototype.defaultConfig={method:"GET"},Ajax.prototype.defaultURLGenerator=function(url,config,params){return url&¶ms&&Object.keys(params).length&&(config.method&&"get"!=config.method.toLowerCase()||(config.method="get",url+=(url.includes("?")?"&":"?")+this.serializeParams(params))),url},Ajax.prototype.defaultLoaderPromise=function(url,config,params){var self=this,contentType;return new Promise((function(resolve,reject){if(url=self.urlGenerator(url,config,params),"GET"!=config.method.toUpperCase())if(contentType="object"===_typeof(self.table.options.ajaxContentType)?self.table.options.ajaxContentType:self.contentTypeFormatters[self.table.options.ajaxContentType]){for(var key in contentType.headers)config.headers||(config.headers={}),void 0===config.headers[key]&&(config.headers[key]=contentType.headers[key]);config.body=contentType.body.call(self,url,config,params)}else console.warn("Ajax Error - Invalid ajaxContentType value:",self.table.options.ajaxContentType);url?(void 0===config.headers&&(config.headers={}),void 0===config.headers.Accept&&(config.headers.Accept="application/json"),void 0===config.headers["X-Requested-With"]&&(config.headers["X-Requested-With"]="XMLHttpRequest"),void 0===config.mode&&(config.mode="cors"),"cors"==config.mode?(void 0===config.headers["Access-Control-Allow-Origin"]&&(config.headers["Access-Control-Allow-Origin"]=window.location.origin),void 0===config.credentials&&(config.credentials="same-origin")):void 0===config.credentials&&(config.credentials="include"),fetch(url,config).then((function(response){response.ok?response.json().then((function(data){resolve(data)})).catch((function(error){reject(error),console.warn("Ajax Load Error - Invalid JSON returned",error)})):(console.error("Ajax Load Error - Connection Error: "+response.status,response.statusText),reject(response))})).catch((function(error){console.error("Ajax Load Error - Connection Error: ",error),reject(error)}))):(console.warn("Ajax Load Error - No URL Set"),resolve([]))}))},Ajax.prototype.contentTypeFormatters={json:{headers:{"Content-Type":"application/json"},body:function body(url,config,params){return JSON.stringify(params)}},form:{headers:{},body:function body(url,config,params){var output=this.generateParamsList(params),form=new FormData;return output.forEach((function(item){form.append(item.key,item.value)})),form}}},Tabulator.prototype.registerModule("ajax",Ajax);var ColumnCalcs=function ColumnCalcs(table){this.table=table,this.topCalcs=[],this.botCalcs=[],this.genColumn=!1,this.topElement=this.createElement(),this.botElement=this.createElement(),this.topRow=!1,this.botRow=!1,this.topInitialized=!1,this.botInitialized=!1,this.initialize()};ColumnCalcs.prototype.createElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-calcs-holder"),el},ColumnCalcs.prototype.initialize=function(){this.genColumn=new Column({field:"value"},this)},ColumnCalcs.prototype.registerColumnField=function(){},ColumnCalcs.prototype.initializeColumn=function(column){var def=column.definition,config={topCalcParams:def.topCalcParams||{},botCalcParams:def.bottomCalcParams||{}};if(def.topCalc){switch(_typeof(def.topCalc)){case"string":this.calculations[def.topCalc]?config.topCalc=this.calculations[def.topCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",def.topCalc);break;case"function":config.topCalc=def.topCalc}config.topCalc&&(column.modules.columnCalcs=config,this.topCalcs.push(column),"group"!=this.table.options.columnCalcs&&this.initializeTopRow())}if(def.bottomCalc){switch(_typeof(def.bottomCalc)){case"string":this.calculations[def.bottomCalc]?config.botCalc=this.calculations[def.bottomCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",def.bottomCalc);break;case"function":config.botCalc=def.bottomCalc}config.botCalc&&(column.modules.columnCalcs=config,this.botCalcs.push(column),"group"!=this.table.options.columnCalcs&&this.initializeBottomRow())}},ColumnCalcs.prototype.removeCalcs=function(){var changed=!1;this.topInitialized&&(this.topInitialized=!1,this.topElement.parentNode.removeChild(this.topElement),changed=!0),this.botInitialized&&(this.botInitialized=!1,this.table.footerManager.remove(this.botElement),changed=!0),changed&&this.table.rowManager.adjustTableSize()},ColumnCalcs.prototype.initializeTopRow=function(){this.topInitialized||(this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling),this.topInitialized=!0)},ColumnCalcs.prototype.initializeBottomRow=function(){this.botInitialized||(this.table.footerManager.prepend(this.botElement),this.botInitialized=!0)},ColumnCalcs.prototype.scrollHorizontal=function(left){var hozAdjust=0,scrollWidth=this.table.columnManager.getElement().scrollWidth-this.table.element.clientWidth;this.botInitialized&&(this.botRow.getElement().style.marginLeft=-left+"px")},ColumnCalcs.prototype.recalc=function(rows){var data,row;if(this.topInitialized||this.botInitialized){if(data=this.rowsToData(rows),this.topInitialized){for(this.topRow&&this.topRow.deleteCells(),row=this.generateRow("top",this.rowsToData(rows)),this.topRow=row;this.topElement.firstChild;)this.topElement.removeChild(this.topElement.firstChild);this.topElement.appendChild(row.getElement()),row.initialize(!0)}if(this.botInitialized){for(this.botRow&&this.botRow.deleteCells(),row=this.generateRow("bottom",this.rowsToData(rows)),this.botRow=row;this.botElement.firstChild;)this.botElement.removeChild(this.botElement.firstChild);this.botElement.appendChild(row.getElement()),row.initialize(!0)}this.table.rowManager.adjustTableSize(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()}},ColumnCalcs.prototype.recalcRowGroup=function(row){this.recalcGroup(this.table.modules.groupRows.getRowGroup(row))},ColumnCalcs.prototype.recalcAll=function(){var _this37=this,groups;(this.topCalcs.length||this.botCalcs.length)&&("group"!==this.table.options.columnCalcs&&this.recalc(this.table.rowManager.activeRows),this.table.options.groupBy&&"table"!==this.table.options.columnCalcs&&table.modules.groupRows.getChildGroups().forEach((function(group){_this37.recalcGroup(group)})))},ColumnCalcs.prototype.recalcGroup=function(group){var data,rowData;group&&group.calcs&&(group.calcs.bottom&&(data=this.rowsToData(group.rows),rowData=this.generateRowData("bottom",data),group.calcs.bottom.updateData(rowData),group.calcs.bottom.reinitialize()),group.calcs.top&&(data=this.rowsToData(group.rows),rowData=this.generateRowData("top",data),group.calcs.top.updateData(rowData),group.calcs.top.reinitialize()))},ColumnCalcs.prototype.generateTopRow=function(rows){return this.generateRow("top",this.rowsToData(rows))},ColumnCalcs.prototype.generateBottomRow=function(rows){return this.generateRow("bottom",this.rowsToData(rows))},ColumnCalcs.prototype.rowsToData=function(rows){var _this38=this,data=[];return rows.forEach((function(row){if(data.push(row.getData()),_this38.table.options.dataTree&&_this38.table.options.dataTreeChildColumnCalcs&&row.modules.dataTree.open){var children=_this38.rowsToData(_this38.table.modules.dataTree.getFilteredTreeChildren(row));data=data.concat(children)}})),data},ColumnCalcs.prototype.generateRow=function(pos,data){var self=this,rowData=this.generateRowData(pos,data),row;return self.table.modExists("mutator")&&self.table.modules.mutator.disable(),row=new Row(rowData,this,"calc"),self.table.modExists("mutator")&&self.table.modules.mutator.enable(),row.getElement().classList.add("tabulator-calcs","tabulator-calcs-"+pos),row.generateCells=function(){var cells=[];self.table.columnManager.columnsByIndex.forEach((function(column){self.genColumn.setField(column.getField()),self.genColumn.hozAlign=column.hozAlign,column.definition[pos+"CalcFormatter"]&&self.table.modExists("format")?self.genColumn.modules.format={formatter:self.table.modules.format.getFormatter(column.definition[pos+"CalcFormatter"]),params:column.definition[pos+"CalcFormatterParams"]}:self.genColumn.modules.format={formatter:self.table.modules.format.getFormatter("plaintext"),params:{}},self.genColumn.definition.cssClass=column.definition.cssClass;var cell=new Cell(self.genColumn,row);cell.column=column,cell.setWidth(),column.cells.push(cell),cells.push(cell),column.visible||cell.hide()})),this.cells=cells},row},ColumnCalcs.prototype.generateRowData=function(pos,data){var rowData={},calcs="top"==pos?this.topCalcs:this.botCalcs,type="top"==pos?"topCalc":"botCalc",params,paramKey;return calcs.forEach((function(column){var values=[];column.modules.columnCalcs&&column.modules.columnCalcs[type]&&(data.forEach((function(item){values.push(column.getFieldValue(item))})),paramKey=type+"Params",params="function"==typeof column.modules.columnCalcs[paramKey]?column.modules.columnCalcs[paramKey](values,data):column.modules.columnCalcs[paramKey],column.setFieldValue(rowData,column.modules.columnCalcs[type](values,data,params)))})),rowData},ColumnCalcs.prototype.hasTopCalcs=function(){return!!this.topCalcs.length},ColumnCalcs.prototype.hasBottomCalcs=function(){return!!this.botCalcs.length},ColumnCalcs.prototype.redraw=function(){this.topRow&&this.topRow.normalizeHeight(!0),this.botRow&&this.botRow.normalizeHeight(!0)},ColumnCalcs.prototype.getResults=function(){var self=this,results={},groups;return this.table.options.groupBy&&this.table.modExists("groupRows")?(groups=this.table.modules.groupRows.getGroups(!0)).forEach((function(group){results[group.getKey()]=self.getGroupResults(group)})):results={top:this.topRow?this.topRow.getData():{},bottom:this.botRow?this.botRow.getData():{}},results},ColumnCalcs.prototype.getGroupResults=function(group){var self=this,groupObj=group._getSelf(),subGroups=group.getSubGroups(),subGroupResults={},results={};return subGroups.forEach((function(subgroup){subGroupResults[subgroup.getKey()]=self.getGroupResults(subgroup)})),results={top:groupObj.calcs.top?groupObj.calcs.top.getData():{},bottom:groupObj.calcs.bottom?groupObj.calcs.bottom.getData():{},groups:subGroupResults}},ColumnCalcs.prototype.calculations={avg:function avg(values,data,calcParams){var output=0,precision=void 0!==calcParams.precision?calcParams.precision:2;return values.length&&(output=values.reduce((function(sum,value){return sum+(value=Number(value))})),output/=values.length,output=!1!==precision?output.toFixed(precision):output),parseFloat(output).toString()},max:function max(values,data,calcParams){var output=null,precision=void 0!==calcParams.precision&&calcParams.precision;return values.forEach((function(value){((value=Number(value))>output||null===output)&&(output=value)})),null!==output?!1!==precision?output.toFixed(precision):output:""},min:function min(values,data,calcParams){var output=null,precision=void 0!==calcParams.precision&&calcParams.precision;return values.forEach((function(value){((value=Number(value))"),options.dataTreeExpandElement?"string"==typeof options.dataTreeExpandElement?((dummyEl=document.createElement("div")).innerHTML=options.dataTreeExpandElement,this.expandEl=dummyEl.firstChild):this.expandEl=options.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="
"),_typeof(options.dataTreeStartExpanded)){case"boolean":this.startOpen=function(row,index){return options.dataTreeStartExpanded};break;case"function":this.startOpen=options.dataTreeStartExpanded;break;default:this.startOpen=function(row,index){return options.dataTreeStartExpanded[index]}}},DataTree.prototype.initializeRow=function(row){var childArray=row.getData()[this.field],isArray=Array.isArray(childArray),children=isArray||!isArray&&"object"===(void 0===childArray?"undefined":_typeof(childArray))&&null!==childArray;!children&&row.modules.dataTree&&row.modules.dataTree.branchEl&&row.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl),!children&&row.modules.dataTree&&row.modules.dataTree.controlEl&&row.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl),row.modules.dataTree={index:row.modules.dataTree?row.modules.dataTree.index:0,open:!!children&&(row.modules.dataTree?row.modules.dataTree.open:this.startOpen(row.getComponent(),0)),controlEl:!(!row.modules.dataTree||!children)&&row.modules.dataTree.controlEl,branchEl:!(!row.modules.dataTree||!children)&&row.modules.dataTree.branchEl,parent:!!row.modules.dataTree&&row.modules.dataTree.parent,children:children}},DataTree.prototype.layoutRow=function(row){var cell,el=(this.elementField?row.getCell(this.elementField):row.getCells()[0]).getElement(),config=row.modules.dataTree;config.branchEl&&(config.branchEl.parentNode&&config.branchEl.parentNode.removeChild(config.branchEl),config.branchEl=!1),config.controlEl&&(config.controlEl.parentNode&&config.controlEl.parentNode.removeChild(config.controlEl),config.controlEl=!1),this.generateControlElement(row,el),row.element.classList.add("tabulator-tree-level-"+config.index),config.index&&(this.branchEl?(config.branchEl=this.branchEl.cloneNode(!0),el.insertBefore(config.branchEl,el.firstChild),config.branchEl.style.marginLeft=(config.branchEl.offsetWidth+config.branchEl.style.marginRight)*(config.index-1)+config.index*this.indent+"px"):el.style.paddingLeft=parseInt(window.getComputedStyle(el,null).getPropertyValue("padding-left"))+config.index*this.indent+"px")},DataTree.prototype.generateControlElement=function(row,el){var _this40=this,config=row.modules.dataTree,el=el||row.getCells()[0].getElement(),oldControl=config.controlEl;!1!==config.children&&(config.open?(config.controlEl=this.collapseEl.cloneNode(!0),config.controlEl.addEventListener("click",(function(e){e.stopPropagation(),_this40.collapseRow(row)}))):(config.controlEl=this.expandEl.cloneNode(!0),config.controlEl.addEventListener("click",(function(e){e.stopPropagation(),_this40.expandRow(row)}))),config.controlEl.addEventListener("mousedown",(function(e){e.stopPropagation()})),oldControl&&oldControl.parentNode===el?oldControl.parentNode.replaceChild(config.controlEl,oldControl):el.insertBefore(config.controlEl,el.firstChild))},DataTree.prototype.setDisplayIndex=function(index){this.displayIndex=index},DataTree.prototype.getDisplayIndex=function(){return this.displayIndex},DataTree.prototype.getRows=function(rows){var _this41=this,output=[];return rows.forEach((function(row,i){var config,children;output.push(row),row instanceof Row&&((config=row.modules.dataTree.children).index||!1===config.children||(children=_this41.getChildren(row)).forEach((function(child){output.push(child)})))})),output},DataTree.prototype.getChildren=function(row){var _this42=this,config=row.modules.dataTree,children=[],output=[];return!1!==config.children&&config.open&&(Array.isArray(config.children)||(config.children=this.generateChildren(row)),children=this.table.modExists("filter")?this.table.modules.filter.filter(config.children):config.children,this.table.modExists("sort")&&this.table.modules.sort.sort(children),children.forEach((function(child){var subChildren;output.push(child),_this42.getChildren(child).forEach((function(sub){output.push(sub)}))}))),output},DataTree.prototype.generateChildren=function(row){var _this43=this,children=[],childArray=row.getData()[this.field];return Array.isArray(childArray)||(childArray=[childArray]),childArray.forEach((function(childData){var childRow=new Row(childData||{},_this43.table.rowManager);childRow.modules.dataTree.index=row.modules.dataTree.index+1,childRow.modules.dataTree.parent=row,childRow.modules.dataTree.children&&(childRow.modules.dataTree.open=_this43.startOpen(childRow.getComponent(),childRow.modules.dataTree.index)),children.push(childRow)})),children},DataTree.prototype.expandRow=function(row,silent){var config=row.modules.dataTree;!1!==config.children&&(config.open=!0,row.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowExpanded(row.getComponent(),row.modules.dataTree.index))},DataTree.prototype.collapseRow=function(row){var config=row.modules.dataTree;!1!==config.children&&(config.open=!1,row.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowCollapsed(row.getComponent(),row.modules.dataTree.index))},DataTree.prototype.toggleRow=function(row){var config=row.modules.dataTree;!1!==config.children&&(config.open?this.collapseRow(row):this.expandRow(row))},DataTree.prototype.getTreeParent=function(row){return!!row.modules.dataTree.parent&&row.modules.dataTree.parent.getComponent()},DataTree.prototype.getFilteredTreeChildren=function(row){var config=row.modules.dataTree,output=[],children;return config.children&&(Array.isArray(config.children)||(config.children=this.generateChildren(row)),(children=this.table.modExists("filter")?this.table.modules.filter.filter(config.children):config.children).forEach((function(childRow){childRow instanceof Row&&output.push(childRow)}))),output},DataTree.prototype.rowDelete=function(row){var parent=row.modules.dataTree.parent,childIndex;parent&&(!1!==(childIndex=this.findChildIndex(row,parent))&&parent.data[this.field].splice(childIndex,1),parent.data[this.field].length||delete parent.data[this.field],this.initializeRow(parent),this.layoutRow(parent)),this.table.rowManager.refreshActiveData("tree",!1,!0)},DataTree.prototype.addTreeChildRow=function(row,data,top,index){var childIndex=!1;"string"==typeof data&&(data=JSON.parse(data)),Array.isArray(row.data[this.field])||(row.data[this.field]=[],row.modules.dataTree.open=this.startOpen(row.getComponent(),row.modules.dataTree.index)),void 0!==index&&!1!==(childIndex=this.findChildIndex(index,row))&&row.data[this.field].splice(top?childIndex:childIndex+1,0,data),!1===childIndex&&(top?row.data[this.field].unshift(data):row.data[this.field].push(data)),this.initializeRow(row),this.layoutRow(row),this.table.rowManager.refreshActiveData("tree",!1,!0)},DataTree.prototype.findChildIndex=function(subject,parent){var _this44=this,match=!1;return"object"==(void 0===subject?"undefined":_typeof(subject))?subject instanceof Row?match=subject.data:subject instanceof RowComponent?match=subject._getSelf().data:"undefined"!=typeof HTMLElement&&subject instanceof HTMLElement&&parent.modules.dataTree&&(match=parent.modules.dataTree.children.find((function(childRow){return childRow instanceof Row&&childRow.element===subject})))&&(match=match.data):match=null!=subject&&parent.data[this.field].find((function(row){return row.data[_this44.table.options.index]==subject})),match&&(Array.isArray(parent.data[this.field])&&(match=parent.data[this.field].indexOf(match)),-1==match&&(match=!1)),match},DataTree.prototype.getTreeChildren=function(row){var config=row.modules.dataTree,output=[];return config.children&&(Array.isArray(config.children)||(config.children=this.generateChildren(row)),config.children.forEach((function(childRow){childRow instanceof Row&&output.push(childRow.getComponent())}))),output},DataTree.prototype.checkForRestyle=function(cell){cell.row.cells.indexOf(cell)||cell.row.reinitialize()},DataTree.prototype.getChildField=function(){return this.field},DataTree.prototype.redrawNeeded=function(data){return!!this.field&&void 0!==data[this.field]||!!this.elementField&&void 0!==data[this.elementField]},Tabulator.prototype.registerModule("dataTree",DataTree);var Download=function Download(table){this.table=table};Download.prototype.download=function(type,filename,options,range,interceptCallback){var self=this,downloadFunc=!1;function buildLink(data,mime){interceptCallback?!0===interceptCallback?self.triggerDownload(data,mime,type,filename,!0):interceptCallback(data):self.triggerDownload(data,mime,type,filename)}if("function"==typeof type?downloadFunc=type:self.downloaders[type]?downloadFunc=self.downloaders[type]:console.warn("Download Error - No such download type found: ",type),downloadFunc){var list=this.generateExportList(range);downloadFunc.call(this.table,list,options||{},buildLink)}},Download.prototype.generateExportList=function(range){var list=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,range||this.table.options.downloadRowRange,"download"),groupHeader=this.table.options.groupHeaderDownload;return groupHeader&&!Array.isArray(groupHeader)&&(groupHeader=[groupHeader]),list.forEach((function(row){var group;"group"===row.type&&(group=row.columns[0],groupHeader&&groupHeader[row.indent]&&(group.value=groupHeader[row.indent](group.value,row.component._group.getRowCount(),row.component._group.getData(),row.component)))})),list},Download.prototype.triggerDownload=function(data,mime,type,filename,newTab){var element=document.createElement("a"),blob=new Blob([data],{type:mime}),filename=filename||"Tabulator."+("function"==typeof type?"txt":type);(blob=this.table.options.downloadReady.call(this.table,data,blob))&&(newTab?window.open(window.URL.createObjectURL(blob)):navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(blob,filename):(element.setAttribute("href",window.URL.createObjectURL(blob)),element.setAttribute("download",filename),element.style.display="none",document.body.appendChild(element),element.click(),document.body.removeChild(element)),this.table.options.downloadComplete&&this.table.options.downloadComplete())},Download.prototype.commsReceived=function(table,action,data){switch(action){case"intercept":this.download(data.type,"",data.options,data.active,data.intercept)}},Download.prototype.downloaders={csv:function csv(list,options,setFileContents){var delimiter=options&&options.delimiter?options.delimiter:",",fileContents=[],headers=[];list.forEach((function(row){var item=[];switch(row.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":row.columns.forEach((function(col,i){col&&1===col.depth&&(headers[i]=void 0===col.value||"null"==typeof col.value?"":col.value)}));break;case"row":row.columns.forEach((function(col){if(col){switch(_typeof(col.value)){case"object":col.value=JSON.stringify(col.value);break;case"undefined":case"null":col.value=""}item.push('"'+String(col.value).split('"').join('""')+'"')}})),fileContents.push(item.join(delimiter))}})),headers.length&&(fileContents=[headers].concat(fileContents)),fileContents=fileContents.join("\n"),options.bom&&(fileContents="\ufeff"+fileContents),setFileContents(fileContents,"text/csv")},json:function json(list,options,setFileContents){var fileContents=[];list.forEach((function(row){var item={};switch(row.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":row.columns.forEach((function(col){col&&(item[col.component.getField()]=col.value)})),fileContents.push(item)}})),setFileContents(fileContents=JSON.stringify(fileContents,null,"\t"),"application/json")},pdf:function pdf(list,options,setFileContents){var header=[],body=[],autoTableParams={},rowGroupStyles=options.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},rowCalcStyles=options.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},jsPDFParams=options.jsPDF||{},title=options&&options.title?options.title:"";function parseRow(row,styles){var rowData=[];return row.columns.forEach((function(col){var cell;if(col){switch(_typeof(col.value)){case"object":col.value=JSON.stringify(col.value);break;case"undefined":case"null":col.value=""}cell={content:col.value,colSpan:col.width,rowSpan:col.height},styles&&(cell.styles=styles),rowData.push(cell)}else rowData.push("")})),rowData}jsPDFParams.orientation||(jsPDFParams.orientation=options.orientation||"landscape"),jsPDFParams.unit||(jsPDFParams.unit="pt"),list.forEach((function(row){switch(row.type){case"header":header.push(parseRow(row));break;case"group":body.push(parseRow(row,rowGroupStyles));break;case"calc":body.push(parseRow(row,rowCalcStyles));break;case"row":body.push(parseRow(row))}}));var doc=new jsPDF(jsPDFParams);options&&options.autoTable&&(autoTableParams="function"==typeof options.autoTable?options.autoTable(doc)||{}:options.autoTable),title&&(autoTableParams.addPageContent=function(data){doc.text(title,40,30)}),autoTableParams.head=header,autoTableParams.body=body,doc.autoTable(autoTableParams),options&&options.documentProcessing&&options.documentProcessing(doc),setFileContents(doc.output("arraybuffer"),"application/pdf")},xlsx:function xlsx(list,options,setFileContents){var self=this,sheetName=options.sheetName||"Sheet1",workbook=XLSX.utils.book_new(),output;function generateSheet(){var rows=[],merges=[],worksheet={},range={s:{c:0,r:0},e:{c:list[0]?list[0].columns.reduce((function(a,b){return a+(b&&b.width?b.width:1)}),0):0,r:list.length}};return list.forEach((function(row,i){var rowData=[];row.columns.forEach((function(col,j){col?(rowData.push(col.value instanceof Date||"object"!==_typeof(col.value)?col.value:JSON.stringify(col.value)),(col.width>1||col.height>-1)&&merges.push({s:{r:i,c:j},e:{r:i+col.height-1,c:j+col.width-1}})):rowData.push("")})),rows.push(rowData)})),XLSX.utils.sheet_add_aoa(worksheet,rows),worksheet["!ref"]=XLSX.utils.encode_range(range),merges.length&&(worksheet["!merges"]=merges),worksheet}if(workbook.SheetNames=[],workbook.Sheets={},options.sheetOnly)setFileContents(generateSheet());else{if(options.sheets)for(var sheet in options.sheets)!0===options.sheets[sheet]?(workbook.SheetNames.push(sheet),workbook.Sheets[sheet]=generateSheet()):(workbook.SheetNames.push(sheet),this.table.modules.comms.send(options.sheets[sheet],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:this.active,intercept:function intercept(data){workbook.Sheets[sheet]=data}}));else workbook.SheetNames.push(sheetName),workbook.Sheets[sheetName]=generateSheet();options.documentProcessing&&(workbook=options.documentProcessing(workbook)),setFileContents(s2ab(output=XLSX.write(workbook,{bookType:"xlsx",bookSST:!0,type:"binary"})),"application/octet-stream")}function s2ab(s){for(var buf=new ArrayBuffer(s.length),view=new Uint8Array(buf),i=0;i!=s.length;++i)view[i]=255&s.charCodeAt(i);return buf}},html:function html(list,options,setFileContents){this.modExists("export",!0)&&setFileContents(this.modules.export.genereateHTMLTable(list),"text/html")}},Tabulator.prototype.registerModule("download",Download);var Edit=function Edit(table){this.table=table,this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1,this.editedCells=[]};Edit.prototype.initializeColumn=function(column){var self=this,config={editor:!1,blocked:!1,check:column.definition.editable,params:column.definition.editorParams||{}};switch(_typeof(column.definition.editor)){case"string":"tick"===column.definition.editor&&(column.definition.editor="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),this.editors[column.definition.editor]?config.editor=this.editors[column.definition.editor]:console.warn("Editor Error - No such editor found: ",column.definition.editor);break;case"function":config.editor=column.definition.editor;break;case"boolean":!0===column.definition.editor&&("function"!=typeof column.definition.formatter?("tick"===column.definition.formatter&&(column.definition.formatter="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),this.editors[column.definition.formatter]?config.editor=this.editors[column.definition.formatter]:config.editor=this.editors.input):console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",column.definition.formatter))}config.editor&&(column.modules.edit=config)},Edit.prototype.getCurrentCell=function(){return!!this.currentCell&&this.currentCell.getComponent()},Edit.prototype.clearEditor=function(cancel){var cell=this.currentCell,cellEl;if(this.invalidEdit=!1,cell){for(this.currentCell=!1,cellEl=cell.getElement(),cancel?cell.validate():cellEl.classList.remove("tabulator-validation-fail"),cellEl.classList.remove("tabulator-editing");cellEl.firstChild;)cellEl.removeChild(cellEl.firstChild);cell.row.getElement().classList.remove("tabulator-row-editing")}},Edit.prototype.cancelEdit=function(){if(this.currentCell){var cell=this.currentCell,component=this.currentCell.getComponent();this.clearEditor(!0),cell.setValueActual(cell.getValue()),cell.cellRendered(),cell.column.cellEvents.cellEditCancelled&&cell.column.cellEvents.cellEditCancelled.call(this.table,component),this.table.options.cellEditCancelled.call(this.table,component)}},Edit.prototype.bindEditor=function(cell){var self=this,element=cell.getElement();element.setAttribute("tabindex",0),element.addEventListener("click",(function(e){element.classList.contains("tabulator-editing")||element.focus({preventScroll:!0})})),element.addEventListener("mousedown",(function(e){self.mouseClick=!0})),element.addEventListener("focus",(function(e){self.recursionBlock||self.edit(cell,e,!1)}))},Edit.prototype.focusCellNoEvent=function(cell,block){this.recursionBlock=!0,block&&"ie"===this.table.browser||cell.getElement().focus({preventScroll:!0}),this.recursionBlock=!1},Edit.prototype.editCell=function(cell,forceEdit){this.focusCellNoEvent(cell),this.edit(cell,!1,forceEdit)},Edit.prototype.focusScrollAdjust=function(cell){if("virtual"==this.table.rowManager.getRenderMode()){var topEdge=this.table.rowManager.element.scrollTop,bottomEdge=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,rowEl=cell.row.getElement(),offset=rowEl.offsetTop;rowEl.offsetTopbottomEdge&&(this.table.rowManager.element.scrollTop+=rowEl.offsetTop+rowEl.offsetHeight-bottomEdge)}},Edit.prototype.edit=function(cell,e,forceEdit){var self=this,allowEdit=!0,rendered=function rendered(){},element=cell.getElement(),cellEditor,component,params;if(!this.currentCell){if(cell.column.modules.edit.blocked)return this.mouseClick=!1,element.blur(),!1;switch(e&&e.stopPropagation(),_typeof(cell.column.modules.edit.check)){case"function":allowEdit=cell.column.modules.edit.check(cell.getComponent());break;case"boolean":allowEdit=cell.column.modules.edit.check}if(allowEdit||forceEdit){if(self.cancelEdit(),self.currentCell=cell,this.focusScrollAdjust(cell),component=cell.getComponent(),this.mouseClick&&(this.mouseClick=!1,cell.column.cellEvents.cellClick&&cell.column.cellEvents.cellClick.call(this.table,e,component)),cell.column.cellEvents.cellEditing&&cell.column.cellEvents.cellEditing.call(this.table,component),self.table.options.cellEditing.call(this.table,component),params="function"==typeof cell.column.modules.edit.params?cell.column.modules.edit.params(component):cell.column.modules.edit.params,!1===(cellEditor=cell.column.modules.edit.editor.call(self,component,onRendered,success,cancel,params)))return element.blur(),!1;if(!(cellEditor instanceof Node))return console.warn("Edit Error - Editor should return an instance of Node, the editor returned:",cellEditor),element.blur(),!1;for(element.classList.add("tabulator-editing"),cell.row.getElement().classList.add("tabulator-row-editing");element.firstChild;)element.removeChild(element.firstChild);element.appendChild(cellEditor),rendered();for(var children=element.children,i=0;i46){if(index>=mask.length)return e.preventDefault(),e.stopPropagation(),success=!1,!1;switch(mask[index]){case maskLetter:if(char.toUpperCase()==char.toLowerCase())return e.preventDefault(),e.stopPropagation(),success=!1,!1;break;case maskNumber:if(isNaN(char))return e.preventDefault(),e.stopPropagation(),success=!1,!1;break;case maskWildcard:break;default:if(char!==mask[index])return e.preventDefault(),e.stopPropagation(),success=!1,!1}success=!0}})),el.addEventListener("keyup",(function(e){e.keyCode>46&&options.maskAutoFill&&fillSymbols(el.value.length)})),el.placeholder||(el.placeholder=mask),options.maskAutoFill&&fillSymbols(el.value.length)},Edit.prototype.getEditedCells=function(){var output=[];return this.editedCells.forEach((function(cell){output.push(cell.getComponent())})),output},Edit.prototype.clearEdited=function(cell){var editIndex;cell.modules.edit&&cell.modules.edit.edited&&(cell.modules.validate.invalid=!1,(editIndex=this.editedCells.indexOf(cell))>-1&&this.editedCells.splice(editIndex,1))},Edit.prototype.editors={input:function input(cell,onRendered,success,cancel,editorParams){var cellValue=cell.getValue(),input=document.createElement("input");if(input.setAttribute("type",editorParams.search?"search":"text"),input.style.padding="4px",input.style.width="100%",input.style.boxSizing="border-box",editorParams.elementAttributes&&"object"==_typeof(editorParams.elementAttributes))for(var key in editorParams.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),input.setAttribute(key,input.getAttribute(key)+editorParams.elementAttributes["+"+key])):input.setAttribute(key,editorParams.elementAttributes[key]);function onChange(e){null==cellValue&&""!==input.value||input.value!==cellValue?success(input.value)&&(cellValue=input.value):cancel()}return input.value=void 0!==cellValue?cellValue:"",onRendered((function(){input.focus({preventScroll:!0}),input.style.height="100%"})),input.addEventListener("change",onChange),input.addEventListener("blur",onChange),input.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:onChange(e);break;case 27:cancel()}})),editorParams.mask&&this.table.modules.edit.maskInput(input,editorParams),input},textarea:function textarea(cell,onRendered,success,cancel,editorParams){var self=this,cellValue=cell.getValue(),vertNav=editorParams.verticalNavigation||"hybrid",value=String(null!=cellValue?cellValue:""),count=(value.match(/(?:\r\n|\r|\n)/g)||[]).length+1,input=document.createElement("textarea"),scrollHeight=0;if(input.style.display="block",input.style.padding="2px",input.style.height="100%",input.style.width="100%",input.style.boxSizing="border-box",input.style.whiteSpace="pre-wrap",input.style.resize="none",editorParams.elementAttributes&&"object"==_typeof(editorParams.elementAttributes))for(var key in editorParams.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),input.setAttribute(key,input.getAttribute(key)+editorParams.elementAttributes["+"+key])):input.setAttribute(key,editorParams.elementAttributes[key]);function onChange(e){null==cellValue&&""!==input.value||input.value!==cellValue?(success(input.value)&&(cellValue=input.value),setTimeout((function(){cell.getRow().normalizeHeight()}),300)):cancel()}return input.value=value,onRendered((function(){input.focus({preventScroll:!0}),input.style.height="100%"})),input.addEventListener("change",onChange),input.addEventListener("blur",onChange),input.addEventListener("keyup",(function(){input.style.height="";var heightNow=input.scrollHeight;input.style.height=heightNow+"px",heightNow!=scrollHeight&&(scrollHeight=heightNow,cell.getRow().normalizeHeight())})),input.addEventListener("keydown",(function(e){switch(e.keyCode){case 27:cancel();break;case 38:("editor"==vertNav||"hybrid"==vertNav&&input.selectionStart)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 40:("editor"==vertNav||"hybrid"==vertNav&&input.selectionStart!==input.value.length)&&(e.stopImmediatePropagation(),e.stopPropagation())}})),editorParams.mask&&this.table.modules.edit.maskInput(input,editorParams),input},number:function number(cell,onRendered,success,cancel,editorParams){var cellValue=cell.getValue(),vertNav=editorParams.verticalNavigation||"editor",input=document.createElement("input");if(input.setAttribute("type","number"),void 0!==editorParams.max&&input.setAttribute("max",editorParams.max),void 0!==editorParams.min&&input.setAttribute("min",editorParams.min),void 0!==editorParams.step&&input.setAttribute("step",editorParams.step),input.style.padding="4px",input.style.width="100%",input.style.boxSizing="border-box",editorParams.elementAttributes&&"object"==_typeof(editorParams.elementAttributes))for(var key in editorParams.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),input.setAttribute(key,input.getAttribute(key)+editorParams.elementAttributes["+"+key])):input.setAttribute(key,editorParams.elementAttributes[key]);input.value=cellValue;var blurFunc=function blurFunc(e){onChange()};function onChange(){var value=input.value;isNaN(value)||""===value||(value=Number(value)),value!==cellValue?success(value)&&(cellValue=value):cancel()}return onRendered((function(){input.removeEventListener("blur",blurFunc),input.focus({preventScroll:!0}),input.style.height="100%",input.addEventListener("blur",blurFunc)})),input.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:onChange();break;case 27:cancel();break;case 38:case 40:"editor"==vertNav&&(e.stopImmediatePropagation(),e.stopPropagation())}})),editorParams.mask&&this.table.modules.edit.maskInput(input,editorParams),input},range:function range(cell,onRendered,success,cancel,editorParams){var cellValue=cell.getValue(),input=document.createElement("input");if(input.setAttribute("type","range"),void 0!==editorParams.max&&input.setAttribute("max",editorParams.max),void 0!==editorParams.min&&input.setAttribute("min",editorParams.min),void 0!==editorParams.step&&input.setAttribute("step",editorParams.step),input.style.padding="4px",input.style.width="100%",input.style.boxSizing="border-box",editorParams.elementAttributes&&"object"==_typeof(editorParams.elementAttributes))for(var key in editorParams.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),input.setAttribute(key,input.getAttribute(key)+editorParams.elementAttributes["+"+key])):input.setAttribute(key,editorParams.elementAttributes[key]);function onChange(){var value=input.value;isNaN(value)||""===value||(value=Number(value)),value!=cellValue?success(value)&&(cellValue=value):cancel()}return input.value=cellValue,onRendered((function(){input.focus({preventScroll:!0}),input.style.height="100%"})),input.addEventListener("blur",(function(e){onChange()})),input.addEventListener("keydown",(function(e){switch(e.keyCode){case 13:onChange();break;case 27:cancel()}})),input},select:function select(cell,onRendered,success,cancel,editorParams){var self=this,cellEl=cell.getElement(),initialValue=cell.getValue(),vertNav=editorParams.verticalNavigation||"editor",initialDisplayValue=void 0!==initialValue||null===initialValue?initialValue:void 0!==editorParams.defaultValue?editorParams.defaultValue:[],input=document.createElement("input"),listEl=document.createElement("div"),multiselect=editorParams.multiselect,dataItems=[],currentItem={},displayItems=[],currentItems=[],blurable=!0;function getUniqueColumnValues(field){var output={},data=self.table.getData(),column;return(column=field?self.table.columnManager.getColumnByField(field):cell.getColumn()._getSelf())?(data.forEach((function(row){var val=column.getFieldValue(row);null!=val&&""!==val&&(output[val]=!0)})),output=editorParams.sortValuesList?"asc"==editorParams.sortValuesList?Object.keys(output).sort():Object.keys(output).sort().reverse():Object.keys(output)):console.warn("unable to find matching column to create select lookup list:",field),output}function parseItems(inputValues,curentValues){var dataList=[],displayList=[];function processComplexListItem(item){var item={label:item.label,value:item.value,itemParams:item.itemParams,elementAttributes:item.elementAttributes,element:!1};return curentValues.indexOf(item.value)>-1&&setItem(item),dataList.push(item),displayList.push(item),item}if("function"==typeof inputValues&&(inputValues=inputValues(cell)),Array.isArray(inputValues))inputValues.forEach((function(value){var item;"object"===(void 0===value?"undefined":_typeof(value))?value.options?(item={label:value.label,group:!0,itemParams:value.itemParams,elementAttributes:value.elementAttributes,element:!1},displayList.push(item),value.options.forEach((function(item){processComplexListItem(item)}))):processComplexListItem(value):(item={label:value,value:value,element:!1},curentValues.indexOf(item.value)>-1&&setItem(item),dataList.push(item),displayList.push(item))}));else for(var key in inputValues){var item={label:inputValues[key],value:key,element:!1};curentValues.indexOf(item.value)>-1&&setItem(item),dataList.push(item),displayList.push(item)}dataItems=dataList,displayItems=displayList,fillList()}function fillList(){for(;listEl.firstChild;)listEl.removeChild(listEl.firstChild);displayItems.forEach((function(item){var el=item.element;if(!el){if(el=document.createElement("div"),item.label=editorParams.listItemFormatter?editorParams.listItemFormatter(item.value,item.label,cell,el,item.itemParams):item.label,item.group?(el.classList.add("tabulator-edit-select-list-group"),el.tabIndex=0,el.innerHTML=""===item.label?" ":item.label):(el.classList.add("tabulator-edit-select-list-item"),el.tabIndex=0,el.innerHTML=""===item.label?" ":item.label,el.addEventListener("click",(function(){multiselect?(toggleItem(item),input.focus()):chooseItem(item)})),currentItems.indexOf(item)>-1&&el.classList.add("active")),item.elementAttributes&&"object"==_typeof(item.elementAttributes))for(var key in item.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),el.setAttribute(key,input.getAttribute(key)+item.elementAttributes["+"+key])):el.setAttribute(key,item.elementAttributes[key]);el.addEventListener("mousedown",(function(){blurable=!1,setTimeout((function(){blurable=!0}),10)})),item.element=el}listEl.appendChild(el)}))}function setCurrentItem(item,active){!multiselect&¤tItem&¤tItem.element&¤tItem.element.classList.remove("active"),currentItem&¤tItem.element&¤tItem.element.classList.remove("focused"),currentItem=item,item.element&&(item.element.classList.add("focused"),active&&item.element.classList.add("active"))}function setItem(item){var index;-1==currentItems.indexOf(item)&&(currentItems.push(item),setCurrentItem(item,!0)),fillInput()}function unsetItem(index){var item=currentItems[index];index>-1&&(currentItems.splice(index,1),item.element&&item.element.classList.remove("active"))}function toggleItem(item){item||(item=currentItem);var index=currentItems.indexOf(item);index>-1?unsetItem(index):(!0!==multiselect&¤tItems.length>=multiselect&&unsetItem(0),setItem(item)),fillInput()}function chooseItem(item){hideList(),item||(item=currentItem),item&&success(item.value)}function chooseItems(){hideList();var output=[];currentItems.forEach((function(item){output.push(item.value)})),success(output)}function fillInput(){var output=[];currentItems.forEach((function(item){output.push(item.label)})),input.value=output.join(", ")}function cancelItem(){hideList(),cancel()}function showList(){if(!listEl.parentNode){!0===editorParams.values?parseItems(getUniqueColumnValues(),initialDisplayValue):"string"==typeof editorParams.values?parseItems(getUniqueColumnValues(editorParams.values),initialDisplayValue):parseItems(editorParams.values||[],initialDisplayValue);var offset=Tabulator.prototype.helpers.elOffset(cellEl);listEl.style.minWidth=cellEl.offsetWidth+"px",listEl.style.top=offset.top+cellEl.offsetHeight+"px",listEl.style.left=offset.left+"px",listEl.addEventListener("mousedown",(function(e){blurable=!1,setTimeout((function(){blurable=!0}),10)})),document.body.appendChild(listEl)}}function hideList(){listEl.parentNode&&listEl.parentNode.removeChild(listEl),removeScrollListener()}function removeScrollListener(){self.table.rowManager.element.removeEventListener("scroll",cancelItem)}if(this.table.rowManager.element.addEventListener("scroll",cancelItem),(Array.isArray(editorParams)||!Array.isArray(editorParams)&&"object"===(void 0===editorParams?"undefined":_typeof(editorParams))&&!editorParams.values)&&(console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object"),editorParams={values:editorParams}),input.setAttribute("type","text"),input.style.padding="4px",input.style.width="100%",input.style.boxSizing="border-box",input.style.cursor="default",input.readOnly=0!=this.currentCell,editorParams.elementAttributes&&"object"==_typeof(editorParams.elementAttributes))for(var key in editorParams.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),input.setAttribute(key,input.getAttribute(key)+editorParams.elementAttributes["+"+key])):input.setAttribute(key,editorParams.elementAttributes[key]);return input.value=void 0!==initialValue||null===initialValue?initialValue:"",input.addEventListener("keydown",(function(e){var index;switch(e.keyCode){case 38:index=dataItems.indexOf(currentItem),("editor"==vertNav||"hybrid"==vertNav&&index)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),index>0&&setCurrentItem(dataItems[index-1],!multiselect));break;case 40:index=dataItems.indexOf(currentItem),("editor"==vertNav||"hybrid"==vertNav&&index-1||String(item.title).toLowerCase().indexOf(String(term).toLowerCase())>-1)&&matches.push(item)})),fillListIfNotEmpty(matches,intialLoad))}function addNotice(notice){var searchEl=document.createElement("div");clearList(),!1!==notice&&(searchEl.classList.add("tabulator-edit-select-list-notice"),searchEl.tabIndex=0,notice instanceof Node?searchEl.appendChild(notice):searchEl.innerHTML=notice,listEl.appendChild(searchEl))}function parseItems(inputValues){var itemList=[];if(Array.isArray(inputValues))inputValues.forEach((function(value){var item={};"object"===(void 0===value?"undefined":_typeof(value))?(item.title=editorParams.listItemFormatter?editorParams.listItemFormatter(value.value,value.label):value.label,item.value=value.value):(item.title=editorParams.listItemFormatter?editorParams.listItemFormatter(value,value):value,item.value=value),itemList.push(item)}));else for(var key in inputValues){var item={title:editorParams.listItemFormatter?editorParams.listItemFormatter(key,inputValues[key]):inputValues[key],value:key};itemList.push(item)}return itemList}function clearList(){for(;listEl.firstChild;)listEl.removeChild(listEl.firstChild)}function fillListIfNotEmpty(items,intialLoad){items.length?fillList(items,intialLoad):editorParams.emptyPlaceholder&&addNotice(editorParams.emptyPlaceholder)}function fillList(items,intialLoad){var current=!1;clearList(),(displayItems=items).forEach((function(item){var el=item.element;el||((el=document.createElement("div")).classList.add("tabulator-edit-select-list-item"),el.tabIndex=0,el.innerHTML=item.title,el.addEventListener("click",(function(e){setCurrentItem(item),chooseItem()})),el.addEventListener("mousedown",(function(e){blurable=!1,setTimeout((function(){blurable=!0}),10)})),item.element=el,intialLoad&&item.value==initialValue&&(input.value=item.title,item.element.classList.add("active"),current=!0),item===currentItem&&(item.element.classList.add("active"),current=!0)),listEl.appendChild(el)})),current||setCurrentItem(!1)}function chooseItem(){hideList(),currentItem?initialValue!==currentItem.value?(initialValue=currentItem.value,input.value=currentItem.title,success(currentItem.value)):cancel():editorParams.freetext?(initialValue=input.value,success(input.value)):editorParams.allowEmpty&&""===input.value?(initialValue=input.value,success(input.value)):cancel()}function showList(){if(!listEl.parentNode){for(;listEl.firstChild;)listEl.removeChild(listEl.firstChild);var offset=Tabulator.prototype.helpers.elOffset(cellEl);listEl.style.minWidth=cellEl.offsetWidth+"px",listEl.style.top=offset.top+cellEl.offsetHeight+"px",listEl.style.left=offset.left+"px",document.body.appendChild(listEl)}}function setCurrentItem(item,showInputValue){currentItem&¤tItem.element&¤tItem.element.classList.remove("active"),currentItem=item,item&&item.element&&item.element.classList.add("active")}function hideList(){listEl.parentNode&&listEl.parentNode.removeChild(listEl),removeScrollListener()}function cancelItem(){hideList(),cancel()}function removeScrollListener(){self.table.rowManager.element.removeEventListener("scroll",cancelItem)}return listEl.classList.add("tabulator-edit-select-list"),listEl.addEventListener("mousedown",(function(e){blurable=!1,setTimeout((function(){blurable=!0}),10)})),input.addEventListener("keydown",(function(e){var index;switch(e.keyCode){case 38:index=displayItems.indexOf(currentItem),("editor"==vertNav||"hybrid"==vertNav&&index)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),setCurrentItem(index>0&&displayItems[index-1]));break;case 40:index=displayItems.indexOf(currentItem),("editor"==vertNav||"hybrid"==vertNav&&index'):("ie"==self.table.browser?star.setAttribute("class","tabulator-star-inactive"):star.classList.replace("tabulator-star-active","tabulator-star-inactive"),star.innerHTML='')}))}function buildStar(i){var starHolder=document.createElement("span"),nextStar=star.cloneNode(!0);stars.push(nextStar),starHolder.addEventListener("mouseenter",(function(e){e.stopPropagation(),e.stopImmediatePropagation(),starChange(i)})),starHolder.addEventListener("mousemove",(function(e){e.stopPropagation(),e.stopImmediatePropagation()})),starHolder.addEventListener("click",(function(e){e.stopPropagation(),e.stopImmediatePropagation(),success(i),element.blur()})),starHolder.appendChild(nextStar),starsHolder.appendChild(starHolder)}function changeValue(val){value=val,starChange(val)}if(element.style.whiteSpace="nowrap",element.style.overflow="hidden",element.style.textOverflow="ellipsis",starsHolder.style.verticalAlign="middle",starsHolder.style.display="inline-block",starsHolder.style.padding="4px",star.setAttribute("width",size),star.setAttribute("height",size),star.setAttribute("viewBox","0 0 512 512"),star.setAttribute("xml:space","preserve"),star.style.padding="0 1px",editorParams.elementAttributes&&"object"==_typeof(editorParams.elementAttributes))for(var key in editorParams.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),starsHolder.setAttribute(key,starsHolder.getAttribute(key)+editorParams.elementAttributes["+"+key])):starsHolder.setAttribute(key,editorParams.elementAttributes[key]);for(var i=1;i<=maxStars;i++)buildStar(i);return starChange(value=Math.min(parseInt(value),maxStars)),starsHolder.addEventListener("mousemove",(function(e){starChange(0)})),starsHolder.addEventListener("click",(function(e){success(0)})),element.addEventListener("blur",(function(e){cancel()})),element.addEventListener("keydown",(function(e){switch(e.keyCode){case 39:changeValue(value+1);break;case 37:changeValue(value-1);break;case 13:success(value);break;case 27:cancel()}})),starsHolder},progress:function progress(cell,onRendered,success,cancel,editorParams){var element=cell.getElement(),max=void 0===editorParams.max?element.getElementsByTagName("div")[0].getAttribute("max")||100:editorParams.max,min=void 0===editorParams.min?element.getElementsByTagName("div")[0].getAttribute("min")||0:editorParams.min,percent=(max-min)/100,value=cell.getValue()||0,handle=document.createElement("div"),bar=document.createElement("div"),mouseDrag,mouseDragWidth;function updateValue(){var calcVal=percent*Math.round(bar.offsetWidth/(element.clientWidth/100))+min;success(calcVal),element.setAttribute("aria-valuenow",calcVal),element.setAttribute("aria-label",value)}if(handle.style.position="absolute",handle.style.right="0",handle.style.top="0",handle.style.bottom="0",handle.style.width="5px",handle.classList.add("tabulator-progress-handle"),bar.style.display="inline-block",bar.style.position="relative",bar.style.height="100%",bar.style.backgroundColor="#488CE9",bar.style.maxWidth="100%",bar.style.minWidth="0%",editorParams.elementAttributes&&"object"==_typeof(editorParams.elementAttributes))for(var key in editorParams.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),bar.setAttribute(key,bar.getAttribute(key)+editorParams.elementAttributes["+"+key])):bar.setAttribute(key,editorParams.elementAttributes[key]);return element.style.padding="4px 4px",value=Math.min(parseFloat(value),max),value=Math.max(parseFloat(value),min),value=Math.round((value-min)/percent),bar.style.width=value+"%",element.setAttribute("aria-valuemin",min),element.setAttribute("aria-valuemax",max),bar.appendChild(handle),handle.addEventListener("mousedown",(function(e){mouseDrag=e.screenX,mouseDragWidth=bar.offsetWidth})),handle.addEventListener("mouseover",(function(){handle.style.cursor="ew-resize"})),element.addEventListener("mousemove",(function(e){mouseDrag&&(bar.style.width=mouseDragWidth+e.screenX-mouseDrag+"px")})),element.addEventListener("mouseup",(function(e){mouseDrag&&(e.stopPropagation(),e.stopImmediatePropagation(),mouseDrag=!1,mouseDragWidth=!1,updateValue())})),element.addEventListener("keydown",(function(e){switch(e.keyCode){case 39:e.preventDefault(),bar.style.width=bar.clientWidth+element.clientWidth/100+"px";break;case 37:e.preventDefault(),bar.style.width=bar.clientWidth-element.clientWidth/100+"px";break;case 9:case 13:updateValue();break;case 27:cancel()}})),element.addEventListener("blur",(function(){cancel()})),bar},tickCross:function tickCross(cell,onRendered,success,cancel,editorParams){var value=cell.getValue(),input=document.createElement("input"),tristate=editorParams.tristate,indetermValue=void 0===editorParams.indeterminateValue?null:editorParams.indeterminateValue,indetermState=!1;if(input.setAttribute("type","checkbox"),input.style.marginTop="5px",input.style.boxSizing="border-box",editorParams.elementAttributes&&"object"==_typeof(editorParams.elementAttributes))for(var key in editorParams.elementAttributes)"+"==key.charAt(0)?(key=key.slice(1),input.setAttribute(key,input.getAttribute(key)+editorParams.elementAttributes["+"+key])):input.setAttribute(key,editorParams.elementAttributes[key]);function setValue(blur){return tristate?blur?indetermState?indetermValue:input.checked:input.checked&&!indetermState?(input.checked=!1,input.indeterminate=!0,indetermState=!0,indetermValue):(indetermState=!1,input.checked):input.checked}return input.value=value,!tristate||void 0!==value&&value!==indetermValue&&""!==value||(indetermState=!0,input.indeterminate=!0),"firefox"!=this.table.browser&&onRendered((function(){input.focus({preventScroll:!0})})),input.checked=!0===value||"true"===value||"True"===value||1===value,input.addEventListener("change",(function(e){success(setValue())})),input.addEventListener("blur",(function(e){success(setValue(!0))})),input.addEventListener("keydown",(function(e){13==e.keyCode&&success(setValue()),27==e.keyCode&&cancel()})),input}},Tabulator.prototype.registerModule("edit",Edit);var ExportRow=function ExportRow(type,columns,component,indent){this.type=type,this.columns=columns,this.component=component||!1,this.indent=indent||0},ExportColumn=function ExportColumn(value,component,width,height,depth){this.value=value,this.component=component||!1,this.width=width,this.height=height,this.depth=depth},Export=function Export(table){this.table=table,this.config={},this.cloneTableStyle=!0,this.colVisProp=""};Export.prototype.generateExportList=function(config,style,range,colVisProp){this.cloneTableStyle=style,this.config=config||{},this.colVisProp=colVisProp;var headers=!1!==this.config.columnHeaders?this.headersToExportRows(this.generateColumnGroupHeaders()):[],body=this.bodyToExportRows(this.rowLookup(range));return headers.concat(body)},Export.prototype.genereateTable=function(config,style,range,colVisProp){var list=this.generateExportList(config,style,range,colVisProp);return this.genereateTableElement(list)},Export.prototype.rowLookup=function(range){var _this45=this,rows=[];if("function"==typeof range)range.call(this.table).forEach((function(row){(row=_this45.table.rowManager.findRow(row))&&rows.push(row)}));else switch(range){case!0:case"visible":rows=this.table.rowManager.getVisibleRows(!0);break;case"all":rows=this.table.rowManager.rows;break;case"selected":rows=this.table.modules.selectRow.selectedRows;break;case"active":default:rows=this.table.rowManager.getDisplayRows()}return Object.assign([],rows)},Export.prototype.generateColumnGroupHeaders=function(){var _this46=this,output=[],columns;return(!1!==this.config.columnGroups?this.table.columnManager.columns:this.table.columnManager.columnsByIndex).forEach((function(column){var colData=_this46.processColumnGroup(column);colData&&output.push(colData)})),output},Export.prototype.processColumnGroup=function(column){var _this47=this,subGroups=column.columns,maxDepth=0,title,groupData={title:column.definition["title"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))]||column.definition.title,column:column,depth:1};if(subGroups.length){if(groupData.subGroups=[],groupData.width=0,subGroups.forEach((function(subGroup){var subGroupData=_this47.processColumnGroup(subGroup);subGroupData&&(groupData.width+=subGroupData.width,groupData.subGroups.push(subGroupData),subGroupData.depth>maxDepth&&(maxDepth=subGroupData.depth))})),groupData.depth+=maxDepth,!groupData.width)return!1}else{if(!this.columnVisCheck(column))return!1;groupData.width=1}return groupData},Export.prototype.columnVisCheck=function(column){return!1!==column.definition[this.colVisProp]&&(column.visible||!column.visible&&column.definition[this.colVisProp])},Export.prototype.headersToExportRows=function(columns){var headers=[],headerDepth=0,exportRows=[];function parseColumnGroup(column,level){var depth=headerDepth-level;if(void 0===headers[level]&&(headers[level]=[]),column.height=column.subGroups?1:depth-column.depth+1,headers[level].push(column),column.height>1)for(var _i6=1;_i61)for(var _i7=1;_i7headerDepth&&(headerDepth=column.depth)})),columns.forEach((function(column){parseColumnGroup(column,0)})),headers.forEach((function(header){var columns=[];header.forEach((function(col){col?columns.push(new ExportColumn(col.title,col.column.getComponent(),col.width,col.height,col.depth)):columns.push(null)})),exportRows.push(new ExportRow("header",columns))})),exportRows},Export.prototype.bodyToExportRows=function(rows){var _this48=this,columns=[],exportRows=[];return this.table.columnManager.columnsByIndex.forEach((function(column){_this48.columnVisCheck(column)&&columns.push(column.getComponent())})),!1!==this.config.columnCalcs&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&rows.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&rows.push(this.table.modules.columnCalcs.botRow)),(rows=rows.filter((function(row){switch(row.type){case"group":return!1!==_this48.config.rowGroups;case"calc":return!1!==_this48.config.columnCalcs;case"row":return!(_this48.table.options.dataTree&&!1===_this48.config.dataTree&&row.modules.dataTree.parent)}return!0}))).forEach((function(row,i){var rowData=row.getData(_this48.colVisProp),exportCols=[],indent=0;switch(row.type){case"group":indent=row.level,exportCols.push(new ExportColumn(row.key,row.getComponent(),columns.length,1));break;case"calc":case"row":columns.forEach((function(col){exportCols.push(new ExportColumn(col._column.getFieldValue(rowData),col,1,1))})),_this48.table.options.dataTree&&!1!==_this48.config.dataTree&&(indent=row.modules.dataTree.index)}exportRows.push(new ExportRow(row.type,exportCols,row.getComponent(),indent))})),exportRows},Export.prototype.genereateTableElement=function(list){var _this49=this,table=document.createElement("table"),headerEl=document.createElement("thead"),bodyEl=document.createElement("tbody"),styles=this.lookupTableStyles(),rowFormatter=this.table.options["rowFormatter"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],setup={};return setup.rowFormatter=null!==rowFormatter?rowFormatter:this.table.options.rowFormatter,this.table.options.dataTree&&!1!==this.config.dataTree&&this.table.modExists("columnCalcs")&&(setup.treeElementField=this.table.modules.dataTree.elementField),setup.groupHeader=this.table.options["groupHeader"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],setup.groupHeader&&!Array.isArray(setup.groupHeader)&&(setup.groupHeader=[setup.groupHeader]),table.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),headerEl,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),list.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),list.forEach((function(row,i){switch(row.type){case"header":headerEl.appendChild(_this49.genereateHeaderElement(row,setup,styles));break;case"group":bodyEl.appendChild(_this49.genereateGroupElement(row,setup,styles));break;case"calc":bodyEl.appendChild(_this49.genereateCalcElement(row,setup,styles));break;case"row":var rowEl=_this49.genereateRowElement(row,setup,styles);_this49.mapElementStyles(i%2&&styles.evenRow?styles.evenRow:styles.oddRow,rowEl,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),bodyEl.appendChild(rowEl)}})),headerEl.innerHTML&&table.appendChild(headerEl),table.appendChild(bodyEl),this.mapElementStyles(this.table.element,table,["border-top","border-left","border-right","border-bottom"]),table},Export.prototype.lookupTableStyles=function(){var styles={};return this.cloneTableStyle&&window.getComputedStyle&&(styles.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),styles.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),styles.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),styles.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),styles.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],styles.firstRow&&(styles.styleCells=styles.firstRow.getElementsByClassName("tabulator-cell"),styles.firstCell=styles.styleCells[0],styles.lastCell=styles.styleCells[styles.styleCells.length-1])),styles},Export.prototype.genereateHeaderElement=function(row,setup,styles){var _this50=this,rowEl=document.createElement("tr");return row.columns.forEach((function(column){if(column){var cellEl=document.createElement("th"),classNames=column.component._column.definition.cssClass?column.component._column.definition.cssClass.split(" "):[];cellEl.colSpan=column.width,cellEl.rowSpan=column.height,cellEl.innerHTML=column.value,_this50.cloneTableStyle&&(cellEl.style.boxSizing="border-box"),classNames.forEach((function(className){cellEl.classList.add(className)})),_this50.mapElementStyles(column.component.getElement(),cellEl,["text-align","border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),_this50.mapElementStyles(column.component._column.contentElement,cellEl,["padding-top","padding-left","padding-right","padding-bottom"]),column.component._column.visible?_this50.mapElementStyles(column.component.getElement(),cellEl,["width"]):column.component._column.definition.width&&(cellEl.style.width=column.component._column.definition.width+"px"),column.component._column.parent&&_this50.mapElementStyles(column.component._column.parent.groupElement,cellEl,["border-top"]),rowEl.appendChild(cellEl)}})),rowEl},Export.prototype.genereateGroupElement=function(row,setup,styles){var rowEl=document.createElement("tr"),cellEl=document.createElement("td"),group=row.columns[0];return rowEl.classList.add("tabulator-print-table-row"),setup.groupHeader&&setup.groupHeader[row.indent]?group.value=setup.groupHeader[row.indent](group.value,row.component._group.getRowCount(),row.component._group.getData(),row.component):!1===setup.groupHeader?group.value=group.value:group.value=row.component._group.generator(group.value,row.component._group.getRowCount(),row.component._group.getData(),row.component),cellEl.colSpan=group.width,cellEl.innerHTML=group.value,rowEl.classList.add("tabulator-print-table-group"),rowEl.classList.add("tabulator-group-level-"+row.indent),group.component.getVisibility()&&rowEl.classList.add("tabulator-group-visible"),this.mapElementStyles(styles.firstGroup,rowEl,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(styles.firstGroup,cellEl,["padding-top","padding-left","padding-right","padding-bottom"]),rowEl.appendChild(cellEl),rowEl},Export.prototype.genereateCalcElement=function(row,setup,styles){var rowEl=this.genereateRowElement(row,setup,styles);return rowEl.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(styles.calcRow,rowEl,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),rowEl},Export.prototype.genereateRowElement=function(row,setup,styles){var _this51=this,rowEl=document.createElement("tr");return rowEl.classList.add("tabulator-print-table-row"),row.columns.forEach((function(col){if(col){var cellEl=document.createElement("td"),column=col.component._column,value=col.value,cellWrapper={modules:{},getValue:function getValue(){return value},getField:function getField(){return column.definition.field},getElement:function getElement(){return cellEl},getColumn:function getColumn(){return column.getComponent()},getData:function getData(){return rowData},getRow:function getRow(){return row.getComponent()},getComponent:function getComponent(){return cellWrapper},column:column},classNames;if((column.definition.cssClass?column.definition.cssClass.split(" "):[]).forEach((function(className){cellEl.classList.add(className)})),_this51.table.modExists("format")&&!1!==_this51.config.formatCells)value=_this51.table.modules.format.formatExportValue(cellWrapper,_this51.colVisProp);else switch(void 0===value?"undefined":_typeof(value)){case"object":value=JSON.stringify(value);break;case"undefined":case"null":value="";break;default:value=value}if(value instanceof Node?cellEl.appendChild(value):cellEl.innerHTML=value,styles.firstCell&&(_this51.mapElementStyles(styles.firstCell,cellEl,["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size"]),column.definition.align&&(cellEl.style.textAlign=column.definition.align)),_this51.table.options.dataTree&&!1!==_this51.config.dataTree&&(setup.treeElementField&&setup.treeElementField==column.field||!setup.treeElementField&&0==i)&&(row.component._row.modules.dataTree.controlEl&&cellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(!0),cellEl.firstChild),row.component._row.modules.dataTree.branchEl&&cellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(!0),cellEl.firstChild)),rowEl.appendChild(cellEl),cellWrapper.modules.format&&cellWrapper.modules.format.renderedCallback&&cellWrapper.modules.format.renderedCallback(),setup.rowFormatter&&!1!==_this51.config.formatCells){var rowComponent=row.getComponent();rowComponent.getElement=function(){return rowEl},setup.rowFormatter(rowComponent)}}})),rowEl},Export.prototype.genereateHTMLTable=function(list){var holder=document.createElement("div");return holder.appendChild(this.genereateTableElement(list)),holder.innerHTML},Export.prototype.getHtml=function(visible,style,config,colVisProp){var list=this.generateExportList(config||this.table.options.htmlOutputConfig,style,visible,colVisProp||"htmlOutput");return this.genereateHTMLTable(list)},Export.prototype.mapElementStyles=function(from,to,props){if(this.cloneTableStyle&&from&&to){var lookup={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var fromStyle=window.getComputedStyle(from);props.forEach((function(prop){to.style[lookup[prop]]=fromStyle.getPropertyValue(prop)}))}}},Tabulator.prototype.registerModule("export",Export);var Filter=function Filter(table){this.table=table,this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1};Filter.prototype.initializeColumn=function(column,value){var self=this,field=column.getField(),params;function success(value){var filterType="input"==column.modules.filter.tagType&&"text"==column.modules.filter.attrType||"textarea"==column.modules.filter.tagType?"partial":"match",type="",filterChangeCheck="",filterFunc;if(void 0===column.modules.filter.prevSuccess||column.modules.filter.prevSuccess!==value){if(column.modules.filter.prevSuccess=value,column.modules.filter.emptyFunc(value))delete self.headerFilters[field];else{switch(column.modules.filter.value=value,_typeof(column.definition.headerFilterFunc)){case"string":self.filters[column.definition.headerFilterFunc]?(type=column.definition.headerFilterFunc,filterFunc=function filterFunc(data){var params=column.definition.headerFilterFuncParams||{},fieldVal=column.getFieldValue(data);return params="function"==typeof params?params(value,fieldVal,data):params,self.filters[column.definition.headerFilterFunc](value,fieldVal,data,params)}):console.warn("Header Filter Error - Matching filter function not found: ",column.definition.headerFilterFunc);break;case"function":type=filterFunc=function filterFunc(data){var params=column.definition.headerFilterFuncParams||{},fieldVal=column.getFieldValue(data);return params="function"==typeof params?params(value,fieldVal,data):params,column.definition.headerFilterFunc(value,fieldVal,data,params)}}if(!filterFunc)switch(filterType){case"partial":filterFunc=function filterFunc(data){var colVal=column.getFieldValue(data);return null!=colVal&&String(colVal).toLowerCase().indexOf(String(value).toLowerCase())>-1},type="like";break;default:filterFunc=function filterFunc(data){return column.getFieldValue(data)==value},type="="}self.headerFilters[field]={value:value,func:filterFunc,type:type,params:{}}}filterChangeCheck=JSON.stringify(self.headerFilters),self.prevHeaderFilterChangeCheck!==filterChangeCheck&&(self.prevHeaderFilterChangeCheck=filterChangeCheck,self.changed=!0,self.table.rowManager.filterRefresh())}return!0}column.modules.filter={success:success,attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(column)},Filter.prototype.generateHeaderFilterElement=function(column,initialValue,reinitialize){var _this52=this,self=this,success=column.modules.filter.success,field=column.getField(),filterElement,editor,editorElement,cellWrapper,typingTimer,searchTrigger,params;function cancel(){}if(column.modules.filter.headerElement&&column.modules.filter.headerElement.parentNode&&column.contentElement.removeChild(column.modules.filter.headerElement.parentNode),field){switch(column.modules.filter.emptyFunc=column.definition.headerFilterEmptyCheck||function(value){return!value&&"0"!==value},(filterElement=document.createElement("div")).classList.add("tabulator-header-filter"),_typeof(column.definition.headerFilter)){case"string":self.table.modules.edit.editors[column.definition.headerFilter]?(editor=self.table.modules.edit.editors[column.definition.headerFilter],"tick"!==column.definition.headerFilter&&"tickCross"!==column.definition.headerFilter||column.definition.headerFilterEmptyCheck||(column.modules.filter.emptyFunc=function(value){return!0!==value&&!1!==value})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",column.definition.editor);break;case"function":editor=column.definition.headerFilter;break;case"boolean":column.modules.edit&&column.modules.edit.editor?editor=column.modules.edit.editor:column.definition.formatter&&self.table.modules.edit.editors[column.definition.formatter]?(editor=self.table.modules.edit.editors[column.definition.formatter],"tick"!==column.definition.formatter&&"tickCross"!==column.definition.formatter||column.definition.headerFilterEmptyCheck||(column.modules.filter.emptyFunc=function(value){return!0!==value&&!1!==value})):editor=self.table.modules.edit.editors.input}if(editor){if(cellWrapper={getValue:function getValue(){return void 0!==initialValue?initialValue:""},getField:function getField(){return column.definition.field},getElement:function getElement(){return filterElement},getColumn:function getColumn(){return column.getComponent()},getRow:function getRow(){return{normalizeHeight:function normalizeHeight(){}}}},params="function"==typeof(params=column.definition.headerFilterParams||{})?params.call(self.table):params,!(editorElement=editor.call(this.table.modules.edit,cellWrapper,(function(){}),success,cancel,params)))return void console.warn("Filter Error - Cannot add filter to "+field+" column, editor returned a value of false");if(!(editorElement instanceof Node))return void console.warn("Filter Error - Cannot add filter to "+field+" column, editor should return an instance of Node, the editor returned:",editorElement);field?self.table.modules.localize.bind("headerFilters|columns|"+column.definition.field,(function(value){editorElement.setAttribute("placeholder",void 0!==value&&value?value:self.table.modules.localize.getText("headerFilters|default"))})):self.table.modules.localize.bind("headerFilters|default",(function(value){editorElement.setAttribute("placeholder",void 0!==self.column.definition.headerFilterPlaceholder&&self.column.definition.headerFilterPlaceholder?self.column.definition.headerFilterPlaceholder:value)})),editorElement.addEventListener("click",(function(e){e.stopPropagation(),editorElement.focus()})),editorElement.addEventListener("focus",(function(e){var left=_this52.table.columnManager.element.scrollLeft;left!==_this52.table.rowManager.element.scrollLeft&&(_this52.table.rowManager.scrollHorizontal(left),_this52.table.columnManager.scrollHorizontal(left))})),typingTimer=!1,searchTrigger=function searchTrigger(e){typingTimer&&clearTimeout(typingTimer),typingTimer=setTimeout((function(){success(editorElement.value)}),self.table.options.headerFilterLiveFilterDelay)},column.modules.filter.headerElement=editorElement,column.modules.filter.attrType=editorElement.hasAttribute("type")?editorElement.getAttribute("type").toLowerCase():"",column.modules.filter.tagType=editorElement.tagName.toLowerCase(),!1!==column.definition.headerFilterLiveFilter&&("autocomplete"!==column.definition.headerFilter&&"tickCross"!==column.definition.headerFilter&&("autocomplete"!==column.definition.editor&&"tickCross"!==column.definition.editor||!0!==column.definition.headerFilter)&&(editorElement.addEventListener("keyup",searchTrigger),editorElement.addEventListener("search",searchTrigger),"number"==column.modules.filter.attrType&&editorElement.addEventListener("change",(function(e){success(editorElement.value)})),"text"==column.modules.filter.attrType&&"ie"!==this.table.browser&&editorElement.setAttribute("type","search")),"input"!=column.modules.filter.tagType&&"select"!=column.modules.filter.tagType&&"textarea"!=column.modules.filter.tagType||editorElement.addEventListener("mousedown",(function(e){e.stopPropagation()}))),filterElement.appendChild(editorElement),column.contentElement.appendChild(filterElement),reinitialize||self.headerFilterColumns.push(column)}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",column.definition.title)},Filter.prototype.hideHeaderFilterElements=function(){this.headerFilterColumns.forEach((function(column){column.modules.filter&&column.modules.filter.headerElement&&(column.modules.filter.headerElement.style.display="none")}))},Filter.prototype.showHeaderFilterElements=function(){this.headerFilterColumns.forEach((function(column){column.modules.filter&&column.modules.filter.headerElement&&(column.modules.filter.headerElement.style.display="")}))},Filter.prototype.setHeaderFilterFocus=function(column){column.modules.filter&&column.modules.filter.headerElement?column.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",column.getField())},Filter.prototype.getHeaderFilterValue=function(column){if(column.modules.filter&&column.modules.filter.headerElement)return column.modules.filter.headerElement.value;console.warn("Column Filter Error - No header filter set on column:",column.getField())},Filter.prototype.setHeaderFilterValue=function(column,value){column&&(column.modules.filter&&column.modules.filter.headerElement?(this.generateHeaderFilterElement(column,value,!0),column.modules.filter.success(value)):console.warn("Column Filter Error - No header filter set on column:",column.getField()))},Filter.prototype.reloadHeaderFilter=function(column){column&&(column.modules.filter&&column.modules.filter.headerElement?this.generateHeaderFilterElement(column,column.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",column.getField()))},Filter.prototype.hasChanged=function(){var changed=this.changed;return this.changed=!1,changed},Filter.prototype.setFilter=function(field,type,value,params){var self=this;this.filterList=[],Array.isArray(field)||(field=[{field:field,type:type,value:value,params:params}]),this.addFilter(field)},Filter.prototype.addFilter=function(field,type,value,params){var self=this;Array.isArray(field)||(field=[{field:field,type:type,value:value,params:params}]),field.forEach((function(filter){(filter=self.findFilter(filter))&&(self.filterList.push(filter),self.changed=!0)})),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.findFilter=function(filter){var self=this,column;if(Array.isArray(filter))return this.findSubFilters(filter);var filterFunc=!1;return"function"==typeof filter.field?filterFunc=function filterFunc(data){return filter.field(data,filter.type||{})}:self.filters[filter.type]?filterFunc=(column=self.table.columnManager.getColumnByField(filter.field))?function filterFunc(data){return self.filters[filter.type](filter.value,column.getFieldValue(data),data,filter.params||{})}:function filterFunc(data){return self.filters[filter.type](filter.value,data[filter.field],data,filter.params||{})}:console.warn("Filter Error - No such filter type found, ignoring: ",filter.type),filter.func=filterFunc,!!filter.func&&filter},Filter.prototype.findSubFilters=function(filters){var self=this,output=[];return filters.forEach((function(filter){(filter=self.findFilter(filter))&&output.push(filter)})),!!output.length&&output},Filter.prototype.getFilters=function(all,ajax){var output=[];return all&&(output=this.getHeaderFilters()),ajax&&output.forEach((function(item){"function"==typeof item.type&&(item.type="function")})),output=output.concat(this.filtersToArray(this.filterList,ajax))},Filter.prototype.filtersToArray=function(filterList,ajax){var _this53=this,output=[];return filterList.forEach((function(filter){var item;Array.isArray(filter)?output.push(_this53.filtersToArray(filter,ajax)):(item={field:filter.field,type:filter.type,value:filter.value},ajax&&"function"==typeof item.type&&(item.type="function"),output.push(item))})),output},Filter.prototype.getHeaderFilters=function(){var self=this,output=[];for(var key in this.headerFilters)output.push({field:key,type:this.headerFilters[key].type,value:this.headerFilters[key].value});return output},Filter.prototype.removeFilter=function(field,type,value){var self=this;Array.isArray(field)||(field=[{field:field,type:type,value:value}]),field.forEach((function(filter){var index=-1;(index="object"==_typeof(filter.field)?self.filterList.findIndex((function(element){return filter===element})):self.filterList.findIndex((function(element){return filter.field===element.field&&filter.type===element.type&&filter.value===element.value})))>-1?(self.filterList.splice(index,1),self.changed=!0):console.warn("Filter Error - No matching filter type found, ignoring: ",filter.type)})),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.clearFilter=function(all){this.filterList=[],all&&this.clearHeaderFilter(),this.changed=!0,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.clearHeaderFilter=function(){var self=this;this.headerFilters={},self.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach((function(column){column.modules.filter.value=null,column.modules.filter.prevSuccess=void 0,self.reloadHeaderFilter(column)})),this.changed=!0},Filter.prototype.search=function(searchType,field,type,value){var self=this,activeRows=[],filterList=[];return Array.isArray(field)||(field=[{field:field,type:type,value:value}]),field.forEach((function(filter){(filter=self.findFilter(filter))&&filterList.push(filter)})),this.table.rowManager.rows.forEach((function(row){var match=!0;filterList.forEach((function(filter){self.filterRecurse(filter,row.getData())||(match=!1)})),match&&activeRows.push("data"===searchType?row.getData("data"):row.getComponent())})),activeRows},Filter.prototype.filter=function(rowList,filters){var self=this,activeRows=[],activeRowComponents=[];return self.table.options.dataFiltering&&self.table.options.dataFiltering.call(self.table,self.getFilters()),self.table.options.ajaxFiltering||!self.filterList.length&&!Object.keys(self.headerFilters).length?activeRows=rowList.slice(0):rowList.forEach((function(row){self.filterRow(row)&&activeRows.push(row)})),self.table.options.dataFiltered&&(activeRows.forEach((function(row){activeRowComponents.push(row.getComponent())})),self.table.options.dataFiltered.call(self.table,self.getFilters(),activeRowComponents)),activeRows},Filter.prototype.filterRow=function(row,filters){var self=this,match=!0,data=row.getData();for(var field in self.filterList.forEach((function(filter){self.filterRecurse(filter,data)||(match=!1)})),self.headerFilters)self.headerFilters[field].func(data)||(match=!1);return match},Filter.prototype.filterRecurse=function(filter,data){var self=this,match=!1;return Array.isArray(filter)?filter.forEach((function(subFilter){self.filterRecurse(subFilter,data)&&(match=!0)})):match=filter.func(data),match},Filter.prototype.filters={"=":function _(filterVal,rowVal,rowData,filterParams){return rowVal==filterVal},"<":function _(filterVal,rowVal,rowData,filterParams){return rowVal":function _(filterVal,rowVal,rowData,filterParams){return rowVal>filterVal},">=":function _(filterVal,rowVal,rowData,filterParams){return rowVal>=filterVal},"!=":function _(filterVal,rowVal,rowData,filterParams){return rowVal!=filterVal},regex:function regex(filterVal,rowVal,rowData,filterParams){return"string"==typeof filterVal&&(filterVal=new RegExp(filterVal)),filterVal.test(rowVal)},like:function like(filterVal,rowVal,rowData,filterParams){return null==filterVal?rowVal===filterVal:null!=rowVal&&String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase())>-1},keywords:function keywords(filterVal,rowVal,rowData,filterParams){var keywords=filterVal.toLowerCase().split(void 0===filterParams.separator?" ":filterParams.separator),value=String(null==rowVal?"":rowVal).toLowerCase(),matches=[];return keywords.forEach((function(keyword){value.includes(keyword)&&matches.push(!0)})),filterParams.matchAll?matches.length===keywords.length:!!matches.length},starts:function starts(filterVal,rowVal,rowData,filterParams){return null==filterVal?rowVal===filterVal:null!=rowVal&&String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase())},ends:function ends(filterVal,rowVal,rowData,filterParams){return null==filterVal?rowVal===filterVal:null!=rowVal&&String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase())},in:function _in(filterVal,rowVal,rowData,filterParams){return Array.isArray(filterVal)?filterVal.indexOf(rowVal)>-1:(console.warn("Filter Error - filter value is not an array:",filterVal),!1)}},Tabulator.prototype.registerModule("filter",Filter);var Format=function Format(table){this.table=table};Format.prototype.initializeColumn=function(column){column.modules.format=this.lookupFormatter(column,""),void 0!==column.definition.formatterPrint&&(column.modules.format.print=this.lookupFormatter(column,"Print")),void 0!==column.definition.formatterClipboard&&(column.modules.format.clipboard=this.lookupFormatter(column,"Clipboard")),void 0!==column.definition.formatterHtmlOutput&&(column.modules.format.htmlOutput=this.lookupFormatter(column,"HtmlOutput"))},Format.prototype.lookupFormatter=function(column,type){var config={params:column.definition["formatter"+type+"Params"]||{}},formatter=column.definition["formatter"+type];switch(void 0===formatter?"undefined":_typeof(formatter)){case"string":"tick"===formatter&&(formatter="tickCross",void 0===config.params.crossElement&&(config.params.crossElement=!1),console.warn("DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false")),this.formatters[formatter]?config.formatter=this.formatters[formatter]:(console.warn("Formatter Error - No such formatter found: ",formatter),config.formatter=this.formatters.plaintext);break;case"function":config.formatter=formatter;break;default:config.formatter=this.formatters.plaintext}return config},Format.prototype.cellRendered=function(cell){cell.modules.format&&cell.modules.format.renderedCallback&&cell.modules.format.renderedCallback()},Format.prototype.formatValue=function(cell){var component=cell.getComponent(),params="function"==typeof cell.column.modules.format.params?cell.column.modules.format.params(component):cell.column.modules.format.params;function onRendered(callback){cell.modules.format||(cell.modules.format={}),cell.modules.format.renderedCallback=callback}return cell.column.modules.format.formatter.call(this,component,params,onRendered)},Format.prototype.formatExportValue=function(cell,type){var formatter=cell.column.modules.format[type],params;if(formatter){var onRendered=function onRendered(callback){cell.modules.format||(cell.modules.format={}),cell.modules.format.renderedCallback=callback};return params="function"==typeof formatter.params?formatter.params(component):formatter.params,formatter.formatter.call(this,cell.getComponent(),params,onRendered)}return this.formatValue(cell)},Format.prototype.sanitizeHTML=function(value){if(value){var entityMap={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};return String(value).replace(/[&<>"'`=\/]/g,(function(s){return entityMap[s]}))}return value},Format.prototype.emptyToSpace=function(value){return null==value||""===value?" ":value},Format.prototype.getFormatter=function(formatter){var formatter;switch(void 0===formatter?"undefined":_typeof(formatter)){case"string":this.formatters[formatter]?formatter=this.formatters[formatter]:(console.warn("Formatter Error - No such formatter found: ",formatter),formatter=this.formatters.plaintext);break;case"function":formatter=formatter;break;default:formatter=this.formatters.plaintext}return formatter},Format.prototype.formatters={plaintext:function plaintext(cell,formatterParams,onRendered){return this.emptyToSpace(this.sanitizeHTML(cell.getValue()))},html:function html(cell,formatterParams,onRendered){return cell.getValue()},textarea:function textarea(cell,formatterParams,onRendered){return cell.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(cell.getValue()))},money:function money(cell,formatterParams,onRendered){var floatVal=parseFloat(cell.getValue()),number,integer,decimal,rgx,decimalSym=formatterParams.decimal||".",thousandSym=formatterParams.thousand||",",symbol=formatterParams.symbol||"",after=!!formatterParams.symbolAfter,precision=void 0!==formatterParams.precision?formatterParams.precision:2;if(isNaN(floatVal))return this.emptyToSpace(this.sanitizeHTML(cell.getValue()));for(number=!1!==precision?floatVal.toFixed(precision):floatVal,integer=(number=String(number).split("."))[0],decimal=number.length>1?decimalSym+number[1]:"",rgx=/(\d+)(\d{3})/;rgx.test(integer);)integer=integer.replace(rgx,"$1"+thousandSym+"$2");return after?integer+decimal+symbol:symbol+integer+decimal},link:function link(cell,formatterParams,onRendered){var value=cell.getValue(),urlPrefix=formatterParams.urlPrefix||"",download=formatterParams.download,label=value,el=document.createElement("a"),data;if(formatterParams.labelField&&(label=(data=cell.getData())[formatterParams.labelField]),formatterParams.label)switch(_typeof(formatterParams.label)){case"string":label=formatterParams.label;break;case"function":label=formatterParams.label(cell)}if(label){if(formatterParams.urlField&&(value=(data=cell.getData())[formatterParams.urlField]),formatterParams.url)switch(_typeof(formatterParams.url)){case"string":value=formatterParams.url;break;case"function":value=formatterParams.url(cell)}return el.setAttribute("href",urlPrefix+value),formatterParams.target&&el.setAttribute("target",formatterParams.target),formatterParams.download&&(download="function"==typeof download?download(cell):!0===download?"":download,el.setAttribute("download",download)),el.innerHTML=this.emptyToSpace(this.sanitizeHTML(label)),el}return" "},image:function image(cell,formatterParams,onRendered){var el=document.createElement("img");switch(el.setAttribute("src",cell.getValue()),_typeof(formatterParams.height)){case"number":el.style.height=formatterParams.height+"px";break;case"string":el.style.height=formatterParams.height}switch(_typeof(formatterParams.width)){case"number":el.style.width=formatterParams.width+"px";break;case"string":el.style.width=formatterParams.width}return el.addEventListener("load",(function(){cell.getRow().normalizeHeight()})),el},tickCross:function tickCross(cell,formatterParams,onRendered){var value=cell.getValue(),element=cell.getElement(),empty=formatterParams.allowEmpty,truthy=formatterParams.allowTruthy,tick=void 0!==formatterParams.tickElement?formatterParams.tickElement:'',cross=void 0!==formatterParams.crossElement?formatterParams.crossElement:'';return truthy&&value||!0===value||"true"===value||"True"===value||1===value||"1"===value?(element.setAttribute("aria-checked",!0),tick||""):!empty||"null"!==value&&""!==value&&null!=value?(element.setAttribute("aria-checked",!1),cross||""):(element.setAttribute("aria-checked","mixed"),"")},datetime:function datetime(cell,formatterParams,onRendered){var inputFormat=formatterParams.inputFormat||"YYYY-MM-DD hh:mm:ss",outputFormat=formatterParams.outputFormat||"DD/MM/YYYY hh:mm:ss",invalid=void 0!==formatterParams.invalidPlaceholder?formatterParams.invalidPlaceholder:"",value=cell.getValue(),newDatetime=moment(value,inputFormat);return newDatetime.isValid()?formatterParams.timezone?newDatetime.tz(formatterParams.timezone).format(outputFormat):newDatetime.format(outputFormat):!0===invalid?value:"function"==typeof invalid?invalid(value):invalid},datetimediff:function datetime(cell,formatterParams,onRendered){var inputFormat=formatterParams.inputFormat||"YYYY-MM-DD hh:mm:ss",invalid=void 0!==formatterParams.invalidPlaceholder?formatterParams.invalidPlaceholder:"",suffix=void 0!==formatterParams.suffix&&formatterParams.suffix,unit=void 0!==formatterParams.unit?formatterParams.unit:void 0,humanize=void 0!==formatterParams.humanize&&formatterParams.humanize,date=void 0!==formatterParams.date?formatterParams.date:moment(),value=cell.getValue(),newDatetime=moment(value,inputFormat);return newDatetime.isValid()?humanize?moment.duration(newDatetime.diff(date)).humanize(suffix):newDatetime.diff(date,unit)+(suffix?" "+suffix:""):!0===invalid?value:"function"==typeof invalid?invalid(value):invalid},lookup:function lookup(cell,formatterParams,onRendered){var value=cell.getValue();return void 0===formatterParams[value]?(console.warn("Missing display value for "+value),value):formatterParams[value]},star:function star(cell,formatterParams,onRendered){var value=cell.getValue(),element=cell.getElement(),maxStars=formatterParams&&formatterParams.stars?formatterParams.stars:5,stars=document.createElement("span"),star=document.createElementNS("http://www.w3.org/2000/svg","svg"),starActive='',starInactive='';stars.style.verticalAlign="middle",star.setAttribute("width","14"),star.setAttribute("height","14"),star.setAttribute("viewBox","0 0 512 512"),star.setAttribute("xml:space","preserve"),star.style.padding="0 1px",value=value&&!isNaN(value)?parseInt(value):0,value=Math.max(0,Math.min(value,maxStars));for(var i=1;i<=maxStars;i++){var nextStar=star.cloneNode(!0);nextStar.innerHTML=i<=value?starActive:starInactive,stars.appendChild(nextStar)}return element.style.whiteSpace="nowrap",element.style.overflow="hidden",element.style.textOverflow="ellipsis",element.setAttribute("aria-label",value),stars},traffic:function traffic(cell,formatterParams,onRendered){var value=this.sanitizeHTML(cell.getValue())||0,el=document.createElement("span"),max=formatterParams&&formatterParams.max?formatterParams.max:100,min=formatterParams&&formatterParams.min?formatterParams.min:0,colors=formatterParams&&void 0!==formatterParams.color?formatterParams.color:["red","orange","green"],color="#666666",percent,percentValue;if(!isNaN(value)&&void 0!==cell.getValue()){switch(el.classList.add("tabulator-traffic-light"),percentValue=parseFloat(value)<=max?parseFloat(value):max,percentValue=parseFloat(percentValue)>=min?parseFloat(percentValue):min,percent=(max-min)/100,percentValue=Math.round((percentValue-min)/percent),void 0===colors?"undefined":_typeof(colors)){case"string":color=colors;break;case"function":color=colors(value);break;case"object":if(Array.isArray(colors)){var unit=100/colors.length,index=Math.floor(percentValue/unit);index=Math.min(index,colors.length-1),color=colors[index=Math.max(index,0)];break}}return el.style.backgroundColor=color,el}},progress:function progress(cell,formatterParams,onRendered){var value=this.sanitizeHTML(cell.getValue())||0,element=cell.getElement(),max=formatterParams&&formatterParams.max?formatterParams.max:100,min=formatterParams&&formatterParams.min?formatterParams.min:0,legendAlign=formatterParams&&formatterParams.legendAlign?formatterParams.legendAlign:"center",percent,percentValue,color,legend,legendColor,top,left,right,bottom;switch(percentValue=parseFloat(value)<=max?parseFloat(value):max,percentValue=parseFloat(percentValue)>=min?parseFloat(percentValue):min,percent=(max-min)/100,percentValue=Math.round((percentValue-min)/percent),_typeof(formatterParams.color)){case"string":color=formatterParams.color;break;case"function":color=formatterParams.color(value);break;case"object":if(Array.isArray(formatterParams.color)){var unit=100/formatterParams.color.length,index=Math.floor(percentValue/unit);index=Math.min(index,formatterParams.color.length-1),index=Math.max(index,0),color=formatterParams.color[index];break}default:color="#2DC214"}switch(_typeof(formatterParams.legend)){case"string":legend=formatterParams.legend;break;case"function":legend=formatterParams.legend(value);break;case"boolean":legend=value;break;default:legend=!1}switch(_typeof(formatterParams.legendColor)){case"string":legendColor=formatterParams.legendColor;break;case"function":legendColor=formatterParams.legendColor(value);break;case"object":if(Array.isArray(formatterParams.legendColor)){var unit=100/formatterParams.legendColor.length,index=Math.floor(percentValue/unit);index=Math.min(index,formatterParams.legendColor.length-1),index=Math.max(index,0),legendColor=formatterParams.legendColor[index]}break;default:legendColor="#000"}element.style.minWidth="30px",element.style.position="relative",element.setAttribute("aria-label",percentValue);var barEl=document.createElement("div");if(barEl.style.display="inline-block",barEl.style.position="relative",barEl.style.width=percentValue+"%",barEl.style.backgroundColor=color,barEl.style.height="100%",barEl.setAttribute("data-max",max),barEl.setAttribute("data-min",min),legend){var legendEl=document.createElement("div");legendEl.style.position="absolute",legendEl.style.top="4px",legendEl.style.left=0,legendEl.style.textAlign=legendAlign,legendEl.style.width="100%",legendEl.style.color=legendColor,legendEl.innerHTML=legend}return onRendered((function(){if(!(cell instanceof CellComponent)){var holderEl=document.createElement("div");holderEl.style.position="absolute",holderEl.style.top="4px",holderEl.style.bottom="4px",holderEl.style.left="4px",holderEl.style.right="4px",element.appendChild(holderEl),element=holderEl}element.appendChild(barEl),legend&&element.appendChild(legendEl)})),""},color:function color(cell,formatterParams,onRendered){return cell.getElement().style.backgroundColor=this.sanitizeHTML(cell.getValue()),""},buttonTick:function buttonTick(cell,formatterParams,onRendered){return''},buttonCross:function buttonCross(cell,formatterParams,onRendered){return''},rownum:function rownum(cell,formatterParams,onRendered){return this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf())+1},handle:function handle(cell,formatterParams,onRendered){return cell.getElement().classList.add("tabulator-row-handle"),"
"},responsiveCollapse:function responsiveCollapse(cell,formatterParams,onRendered){var self=this,open=!1,el=document.createElement("div"),config=cell.getRow()._row.modules.responsiveLayout;function toggleList(isOpen){var collapseEl=config.element;config.open=isOpen,collapseEl&&(config.open?(el.classList.add("open"),collapseEl.style.display=""):(el.classList.remove("open"),collapseEl.style.display="none"))}return el.classList.add("tabulator-responsive-collapse-toggle"),el.innerHTML="+-",cell.getElement().classList.add("tabulator-row-handle"),el.addEventListener("click",(function(e){e.stopImmediatePropagation(),toggleList(!config.open)})),toggleList(config.open),el},rowSelection:function rowSelection(cell){var _this54=this,checkbox=document.createElement("input");if(checkbox.type="checkbox",this.table.modExists("selectRow",!0))if(checkbox.addEventListener("click",(function(e){e.stopPropagation()})),"function"==typeof cell.getRow){var row=cell.getRow();checkbox.addEventListener("change",(function(e){row.toggleSelect()})),checkbox.checked=row.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(row,checkbox)}else checkbox.addEventListener("change",(function(e){_this54.table.modules.selectRow.selectedRows.length?_this54.table.deselectRow():_this54.table.selectRow()})),this.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);return checkbox}},Tabulator.prototype.registerModule("format",Format);var FrozenColumns=function FrozenColumns(table){this.table=table,this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightPadding=0,this.initializationMode="left",this.active=!1,this.scrollEndTimer=!1};FrozenColumns.prototype.reset=function(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightMargin=0,this.active=!1,this.table.columnManager.headersElement.style.marginLeft=0,this.table.columnManager.element.style.paddingRight=0},FrozenColumns.prototype.initializeColumn=function(column){var config={margin:0,edge:!1};column.isGroup||(this.frozenCheck(column)?(config.position=this.initializationMode,"left"==this.initializationMode?this.leftColumns.push(column):this.rightColumns.unshift(column),this.active=!0,column.modules.frozen=config):this.initializationMode="right")},FrozenColumns.prototype.frozenCheck=function(column){var frozen=!1;return column.parent.isGroup&&column.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),column.parent.isGroup?this.frozenCheck(column.parent):column.definition.frozen},FrozenColumns.prototype.scrollHorizontal=function(){var _this55=this,rows;this.active&&(clearTimeout(this.scrollEndTimer),this.scrollEndTimer=setTimeout((function(){_this55.layout()}),100),rows=this.table.rowManager.getVisibleRows(),this.calcMargins(),this.layoutColumnPosition(),this.layoutCalcRows(),rows.forEach((function(row){"row"===row.type&&_this55.layoutRow(row)})),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},FrozenColumns.prototype.calcMargins=function(){this.leftMargin=this._calcSpace(this.leftColumns,this.leftColumns.length)+"px",this.table.columnManager.headersElement.style.marginLeft=this.leftMargin,this.rightMargin=this._calcSpace(this.rightColumns,this.rightColumns.length)+"px",this.table.columnManager.element.style.paddingRight=this.rightMargin,this.rightPadding=this.table.rowManager.element.clientWidth+this.table.columnManager.scrollLeft},FrozenColumns.prototype.layoutCalcRows=function(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow))},FrozenColumns.prototype.layoutColumnPosition=function(allCells){var _this56=this,leftParents=[];this.leftColumns.forEach((function(column,i){if(column.modules.frozen.margin=_this56._calcSpace(_this56.leftColumns,i)+_this56.table.columnManager.scrollLeft+"px",i==_this56.leftColumns.length-1?column.modules.frozen.edge=!0:column.modules.frozen.edge=!1,column.parent.isGroup){var parentEl=_this56.getColGroupParentElement(column);leftParents.includes(parentEl)||(_this56.layoutElement(parentEl,column),leftParents.push(parentEl)),column.modules.frozen.edge&&parentEl.classList.add("tabulator-frozen-"+column.modules.frozen.position)}else _this56.layoutElement(column.getElement(),column);allCells&&column.cells.forEach((function(cell){_this56.layoutElement(cell.getElement(),column)}))})),this.rightColumns.forEach((function(column,i){column.modules.frozen.margin=_this56.rightPadding-_this56._calcSpace(_this56.rightColumns,i+1)+"px",i==_this56.rightColumns.length-1?column.modules.frozen.edge=!0:column.modules.frozen.edge=!1,column.parent.isGroup?_this56.layoutElement(_this56.getColGroupParentElement(column),column):_this56.layoutElement(column.getElement(),column),allCells&&column.cells.forEach((function(cell){_this56.layoutElement(cell.getElement(),column)}))}))},FrozenColumns.prototype.getColGroupParentElement=function(column){return column.parent.isGroup?this.getColGroupParentElement(column.parent):column.getElement()},FrozenColumns.prototype.layout=function(){var self=this,rightMargin=0;self.active&&(this.calcMargins(),self.table.rowManager.getDisplayRows().forEach((function(row){"row"===row.type&&self.layoutRow(row)})),this.layoutCalcRows(),this.layoutColumnPosition(!0),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},FrozenColumns.prototype.layoutRow=function(row){var _this57=this,rowEl;row.getElement().style.paddingLeft=this.leftMargin,this.leftColumns.forEach((function(column){var cell=row.getCell(column);cell&&_this57.layoutElement(cell.getElement(),column)})),this.rightColumns.forEach((function(column){var cell=row.getCell(column);cell&&_this57.layoutElement(cell.getElement(),column)}))},FrozenColumns.prototype.layoutElement=function(element,column){column.modules.frozen&&(element.style.position="absolute",element.style.left=column.modules.frozen.margin,element.classList.add("tabulator-frozen"),column.modules.frozen.edge&&element.classList.add("tabulator-frozen-"+column.modules.frozen.position))},FrozenColumns.prototype._calcSpace=function(columns,index){for(var width=0,_i8=0;_i8-1&&output.splice(index,1)})),output},FrozenRows.prototype.freezeRow=function(row){row.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(row.modules.frozen=!0,this.topElement.appendChild(row.getElement()),row.initialize(),row.normalizeHeight(),this.table.rowManager.adjustTableSize(),this.rows.push(row),this.table.rowManager.refreshActiveData("display"),this.styleRows())},FrozenRows.prototype.unfreezeRow=function(row){var index=this.rows.indexOf(row);if(row.modules.frozen){row.modules.frozen=!1;var rowEl=row.getElement();rowEl.parentNode.removeChild(rowEl),this.table.rowManager.adjustTableSize(),this.rows.splice(index,1),this.table.rowManager.refreshActiveData("display"),this.rows.length&&this.styleRows()}else console.warn("Freeze Error - Row is already unfrozen")},FrozenRows.prototype.styleRows=function(row){var self=this;this.rows.forEach((function(row,i){self.table.rowManager.styleRow(row,i)}))},Tabulator.prototype.registerModule("frozenRows",FrozenRows);var GroupComponent=function GroupComponent(group){this._group=group,this.type="GroupComponent"};GroupComponent.prototype.getKey=function(){return this._group.key},GroupComponent.prototype.getField=function(){return this._group.field},GroupComponent.prototype.getElement=function(){return this._group.element},GroupComponent.prototype.getRows=function(){return this._group.getRows(!0)},GroupComponent.prototype.getSubGroups=function(){return this._group.getSubGroups(!0)},GroupComponent.prototype.getParentGroup=function(){return!!this._group.parent&&this._group.parent.getComponent()},GroupComponent.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._group.visible},GroupComponent.prototype.isVisible=function(){return this._group.visible},GroupComponent.prototype.show=function(){this._group.show()},GroupComponent.prototype.hide=function(){this._group.hide()},GroupComponent.prototype.toggle=function(){this._group.toggleVisibility()},GroupComponent.prototype._getSelf=function(){return this._group},GroupComponent.prototype.getTable=function(){return this._group.groupManager.table};var Group=function Group(groupManager,parent,level,key,field,generator,oldGroup){this.groupManager=groupManager,this.parent=parent,this.key=key,this.level=level,this.field=field,this.hasSubGroups=level-1?after?this.rows.splice(toIndex+1,0,row):this.rows.splice(toIndex,0,row):after?this.rows.push(row):this.rows.unshift(row),row.modules.group=this,this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)},Group.prototype.scrollHeader=function(left){this.arrowElement.style.marginLeft=left,this.groupList.forEach((function(child){child.scrollHeader(left)}))},Group.prototype.getRowIndex=function(row){},Group.prototype.conformRowData=function(data){return this.field?data[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(data=this.parent.conformRowData(data)),data},Group.prototype.removeRow=function(row){var index=this.rows.indexOf(row),el=row.getElement();index>-1&&this.rows.splice(index,1),this.groupManager.table.options.groupValues||this.rows.length?(el.parentNode&&el.parentNode.removeChild(el),this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)):(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0))},Group.prototype.removeGroup=function(group){var groupKey=group.level+"_"+group.key,index;this.groups[groupKey]&&(delete this.groups[groupKey],(index=this.groupList.indexOf(group))>-1&&this.groupList.splice(index,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))},Group.prototype.getHeadersAndRows=function(noCalc){var output=[];return output.push(this),this._visSet(),this.visible?this.groupList.length?this.groupList.forEach((function(group){output=output.concat(group.getHeadersAndRows(noCalc))})):(!noCalc&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),output.push(this.calcs.top)),output=output.concat(this.rows),!noCalc&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),output.push(this.calcs.bottom))):this.groupList.length||"table"==this.groupManager.table.options.columnCalcs||this.groupManager.table.modExists("columnCalcs")&&(!noCalc&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),output.push(this.calcs.top))),!noCalc&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),output.push(this.calcs.bottom)))),output},Group.prototype.getData=function(visible,transform){var self=this,output=[];return this._visSet(),(!visible||visible&&this.visible)&&this.rows.forEach((function(row){output.push(row.getData(transform||"data"))})),output},Group.prototype.getRowCount=function(){var count=0;return this.groupList.length?this.groupList.forEach((function(group){count+=group.getRowCount()})):count=this.rows.length,count},Group.prototype.toggleVisibility=function(){this.visible?this.hide():this.show()},Group.prototype.hide=function(){this.visible=!1,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination?this.groupManager.updateGroupRows(!0):(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach((function(group){var rows;group.getHeadersAndRows().forEach((function(row){row.detachElement()}))})):this.rows.forEach((function(row){var rowEl=row.getElement();rowEl.parentNode.removeChild(rowEl)})),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()),this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!1)},Group.prototype.show=function(){var self=this;if(this.visible=!0,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination)this.groupManager.updateGroupRows(!0);else{this.element.classList.add("tabulator-group-visible");var prev=this.getElement();this.groupList.length?this.groupList.forEach((function(group){var rows;group.getHeadersAndRows().forEach((function(row){var rowEl=row.getElement();prev.parentNode.insertBefore(rowEl,prev.nextSibling),row.initialize(),prev=rowEl}))})):this.rows.forEach((function(row){var rowEl=row.getElement();prev.parentNode.insertBefore(rowEl,prev.nextSibling),row.initialize(),prev=rowEl})),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()}this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!0)},Group.prototype._visSet=function(){var data=[];"function"==typeof this.visible&&(this.rows.forEach((function(row){data.push(row.getData())})),this.visible=this.visible(this.key,this.getRowCount(),data,this.getComponent()))},Group.prototype.getRowGroup=function(row){var match=!1;return this.groupList.length?this.groupList.forEach((function(group){var result=group.getRowGroup(row);result&&(match=result)})):this.rows.find((function(item){return item===row}))&&(match=this),match},Group.prototype.getSubGroups=function(component){var output=[];return this.groupList.forEach((function(child){output.push(component?child.getComponent():child)})),output},Group.prototype.getRows=function(compoment){var output=[];return this.rows.forEach((function(row){output.push(compoment?row.getComponent():row)})),output},Group.prototype.generateGroupHeaderContents=function(){var data=[];for(this.rows.forEach((function(row){data.push(row.getData())})),this.elementContents=this.generator(this.key,this.getRowCount(),data,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);"string"==typeof this.elementContents?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)},Group.prototype.getElement=function(){this.addBindingsd=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var i=0;igroupHeader.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),self.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],self.table.modules.localize.bind("groups|item",(function(langValue,lang){self.headerGenerator[0]=function(value,count,data){return(void 0===value?"":value)+"("+count+" "+(1===count?langValue:lang.groups.items)+")"}})),this.groupIDLookups=[],Array.isArray(groupBy)||groupBy)?this.table.modExists("columnCalcs")&&"table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.removeCalcs():this.table.modExists("columnCalcs")&&"group"!=this.table.options.columnCalcs&&this.table.columnManager.getRealColumns().forEach((function(col){col.definition.topCalc&&self.table.modules.columnCalcs.initializeTopRow(),col.definition.bottomCalc&&self.table.modules.columnCalcs.initializeBottomRow()}));Array.isArray(groupBy)||(groupBy=[groupBy]),groupBy.forEach((function(group,i){var lookupFunc,column;lookupFunc="function"==typeof group?group:(column=self.table.columnManager.getColumnByField(group))?function lookupFunc(data){return column.getFieldValue(data)}:function lookupFunc(data){return data[group]},self.groupIDLookups.push({field:"function"!=typeof group&&group,func:lookupFunc,values:!!self.allowedValues&&self.allowedValues[i]})})),startOpen&&(Array.isArray(startOpen)||(startOpen=[startOpen]),startOpen.forEach((function(level){level="function"==typeof level?level:function(){return!0}})),self.startOpen=startOpen),groupHeader&&(self.headerGenerator=Array.isArray(groupHeader)?groupHeader:[groupHeader]),this.initialized=!0},GroupRows.prototype.setDisplayIndex=function(index){this.displayIndex=index},GroupRows.prototype.getDisplayIndex=function(){return this.displayIndex},GroupRows.prototype.getRows=function(rows){return this.groupIDLookups.length?(this.table.options.dataGrouping.call(this.table),this.generateGroups(rows),this.table.options.dataGrouped&&this.table.options.dataGrouped.call(this.table,this.getGroups(!0)),this.updateGroupRows()):rows.slice(0)},GroupRows.prototype.getGroups=function(compoment){var groupComponents=[];return this.groupList.forEach((function(group){groupComponents.push(compoment?group.getComponent():group)})),groupComponents},GroupRows.prototype.getChildGroups=function(group){var _this59=this,groupComponents=[];return group||(group=this),group.groupList.forEach((function(child){child.groupList.length?groupComponents=groupComponents.concat(_this59.getChildGroups(child)):groupComponents.push(child)})),groupComponents},GroupRows.prototype.wipe=function(){this.groupList.forEach((function(group){group.wipe()}))},GroupRows.prototype.pullGroupListData=function(groupList){var self=this,groupListData=[];return groupList.forEach((function(group){var groupHeader={level:0,rowCount:0,headerContent:""},childData=[];group.hasSubGroups?(childData=self.pullGroupListData(group.groupList),groupHeader.level=group.level,groupHeader.rowCount=childData.length-group.groupList.length,groupHeader.headerContent=group.generator(group.key,groupHeader.rowCount,group.rows,group),groupListData.push(groupHeader),groupListData=groupListData.concat(childData)):(groupHeader.level=group.level,groupHeader.headerContent=group.generator(group.key,group.rows.length,group.rows,group),groupHeader.rowCount=group.getRows().length,groupListData.push(groupHeader),group.getRows().forEach((function(row){groupListData.push(row.getData("data"))})))})),groupListData},GroupRows.prototype.getGroupedData=function(){return this.pullGroupListData(this.groupList)},GroupRows.prototype.getRowGroup=function(row){var match=!1;return this.groupList.forEach((function(group){var result=group.getRowGroup(row);result&&(match=result)})),match},GroupRows.prototype.countGroups=function(){return this.groupList.length},GroupRows.prototype.generateGroups=function(rows){var self=this,oldGroups=self.groups;self.groups={},self.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach((function(value){self.createGroup(value,0,oldGroups)})),rows.forEach((function(row){self.assignRowToExistingGroup(row,oldGroups)}))):rows.forEach((function(row){self.assignRowToGroup(row,oldGroups)}))},GroupRows.prototype.createGroup=function(groupID,level,oldGroups){var groupKey=level+"_"+groupID,group;oldGroups=oldGroups||[],group=new Group(this,!1,level,groupID,this.groupIDLookups[0].field,this.headerGenerator[0],oldGroups[groupKey]),this.groups[groupKey]=group,this.groupList.push(group)},GroupRows.prototype.assignRowToExistingGroup=function(row,oldGroups){var groupID,groupKey="0_"+this.groupIDLookups[0].func(row.getData());this.groups[groupKey]&&this.groups[groupKey].addRow(row)},GroupRows.prototype.assignRowToGroup=function(row,oldGroups){var groupID=this.groupIDLookups[0].func(row.getData()),newGroupNeeded=!this.groups["0_"+groupID];return newGroupNeeded&&this.createGroup(groupID,0,oldGroups),this.groups["0_"+groupID].addRow(row),!newGroupNeeded},GroupRows.prototype.updateGroupRows=function(force){var self=this,output=[],oldRowCount;if(this.groupList.forEach((function(group){output=output.concat(group.getHeadersAndRows())})),force){var displayIndex=this.table.rowManager.setDisplayRows(output,this.getDisplayIndex());!0!==displayIndex&&this.setDisplayIndex(displayIndex),this.table.rowManager.refreshActiveData("group",!0,!0)}return output},GroupRows.prototype.scrollHeaders=function(left){left+="px",this.groupList.forEach((function(group){group.scrollHeader(left)}))},GroupRows.prototype.removeGroup=function(group){var groupKey=group.level+"_"+group.key,index;this.groups[groupKey]&&(delete this.groups[groupKey],(index=this.groupList.indexOf(group))>-1&&this.groupList.splice(index,1))},Tabulator.prototype.registerModule("groupRows",GroupRows);var History=function History(table){this.table=table,this.history=[],this.index=-1};History.prototype.clear=function(){this.history=[],this.index=-1},History.prototype.action=function(type,component,data){this.history=this.history.slice(0,this.index+1),this.history.push({type:type,component:component,data:data}),this.index++},History.prototype.getHistoryUndoSize=function(){return this.index+1},History.prototype.getHistoryRedoSize=function(){return this.history.length-(this.index+1)},History.prototype.undo=function(){if(this.index>-1){var action=this.history[this.index];return this.undoers[action.type].call(this,action),this.index--,this.table.options.historyUndo.call(this.table,action.type,action.component.getComponent(),action.data),!0}return console.warn("History Undo Error - No more history to undo"),!1},History.prototype.redo=function(){if(this.history.length-1>this.index){this.index++;var action=this.history[this.index];return this.redoers[action.type].call(this,action),this.table.options.historyRedo.call(this.table,action.type,action.component.getComponent(),action.data),!0}return console.warn("History Redo Error - No more history to redo"),!1},History.prototype.undoers={cellEdit:function cellEdit(action){action.component.setValueProcessData(action.data.oldValue)},rowAdd:function rowAdd(action){action.component.deleteActual()},rowDelete:function rowDelete(action){var newRow=this.table.rowManager.addRowActual(action.data.data,action.data.pos,action.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(action.component,newRow)},rowMove:function rowMove(action){this.table.rowManager.moveRowActual(action.component,this.table.rowManager.rows[action.data.posFrom],!action.data.after),this.table.rowManager.redraw()}},History.prototype.redoers={cellEdit:function cellEdit(action){action.component.setValueProcessData(action.data.newValue)},rowAdd:function rowAdd(action){var newRow=this.table.rowManager.addRowActual(action.data.data,action.data.pos,action.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(action.component,newRow)},rowDelete:function rowDelete(action){action.component.deleteActual()},rowMove:function rowMove(action){this.table.rowManager.moveRowActual(action.component,this.table.rowManager.rows[action.data.posTo],action.data.after),this.table.rowManager.redraw()}},History.prototype._rebindRow=function(oldRow,newRow){this.history.forEach((function(action){if(action.component instanceof Row)action.component===oldRow&&(action.component=newRow);else if(action.component instanceof Cell&&action.component.row===oldRow){var field=action.component.column.getField();field&&(action.component=newRow.getCell(field))}}))},Tabulator.prototype.registerModule("history",History);var HtmlTableImport=function HtmlTableImport(table){this.table=table,this.fieldIndex=[],this.hasIndex=!1};HtmlTableImport.prototype.parseTable=function(){var self=this,element=this.table.element,options=this.table.options,columns=options.columns,headers=element.getElementsByTagName("th"),rows=element.getElementsByTagName("tbody")[0],data=[],newTable;this.hasIndex=!1,this.table.options.htmlImporting.call(this.table),rows=rows?rows.getElementsByTagName("tr"):[],this._extractOptions(element,options),headers.length?this._extractHeaders(headers,rows):this._generateBlankHeaders(headers,rows);for(var index=0;index-1&&self.pressedKeys.splice(index,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)},Keybindings.prototype.clearBindings=function(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)},Keybindings.prototype.checkBinding=function(e,binding){var self=this,match=!0;return e.ctrlKey==binding.ctrl&&e.shiftKey==binding.shift&&e.metaKey==binding.meta&&(binding.keys.forEach((function(key){var index;-1==self.pressedKeys.indexOf(key)&&(match=!1)})),match&&binding.action.call(self,e),!0)},Keybindings.prototype.bindings={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35,undo:"ctrl + 90",redo:"ctrl + 89",copyToClipboard:"ctrl + 67"},Keybindings.prototype.actions={keyBlock:function keyBlock(e){e.stopPropagation(),e.preventDefault()},scrollPageUp:function scrollPageUp(e){var rowManager=this.table.rowManager,newPos=rowManager.scrollTop-rowManager.height,scrollMax=rowManager.element.scrollHeight;e.preventDefault(),rowManager.displayRowsCount&&(newPos>=0?rowManager.element.scrollTop=newPos:rowManager.scrollToRow(rowManager.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function scrollPageDown(e){var rowManager=this.table.rowManager,newPos=rowManager.scrollTop+rowManager.height,scrollMax=rowManager.element.scrollHeight;e.preventDefault(),rowManager.displayRowsCount&&(newPos<=scrollMax?rowManager.element.scrollTop=newPos:rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function scrollToStart(e){var rowManager=this.table.rowManager;e.preventDefault(),rowManager.displayRowsCount&&rowManager.scrollToRow(rowManager.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function scrollToEnd(e){var rowManager=this.table.rowManager;e.preventDefault(),rowManager.displayRowsCount&&rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount-1]),this.table.element.focus()},navPrev:function navPrev(e){var cell=!1;this.table.modExists("edit")&&(cell=this.table.modules.edit.currentCell)&&(e.preventDefault(),cell.nav().prev())},navNext:function navNext(e){var cell=!1,newRow=this.table.options.tabEndNewRow,nav;this.table.modExists("edit")&&(cell=this.table.modules.edit.currentCell)&&(e.preventDefault(),(nav=cell.nav()).next()||newRow&&(cell.getElement().firstChild.blur(),(newRow=!0===newRow?this.table.addRow({}):"function"==typeof newRow?this.table.addRow(newRow(cell.row.getComponent())):this.table.addRow(Object.assign({},newRow))).then((function(){setTimeout((function(){nav.next()}))}))))},navLeft:function navLeft(e){var cell=!1;this.table.modExists("edit")&&(cell=this.table.modules.edit.currentCell)&&(e.preventDefault(),cell.nav().left())},navRight:function navRight(e){var cell=!1;this.table.modExists("edit")&&(cell=this.table.modules.edit.currentCell)&&(e.preventDefault(),cell.nav().right())},navUp:function navUp(e){var cell=!1;this.table.modExists("edit")&&(cell=this.table.modules.edit.currentCell)&&(e.preventDefault(),cell.nav().up())},navDown:function navDown(e){var cell=!1;this.table.modExists("edit")&&(cell=this.table.modules.edit.currentCell)&&(e.preventDefault(),cell.nav().down())},undo:function undo(e){var cell=!1;this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&((cell=this.table.modules.edit.currentCell)||(e.preventDefault(),this.table.modules.history.undo()))},redo:function redo(e){var cell=!1;this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&((cell=this.table.modules.edit.currentCell)||(e.preventDefault(),this.table.modules.history.redo()))},copyToClipboard:function copyToClipboard(e){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(!1,!0)}},Tabulator.prototype.registerModule("keybindings",Keybindings);var Menu=function Menu(table){this.table=table,this.menuEl=!1,this.blurEvent=this.hideMenu.bind(this),this.escEvent=this.escMenu.bind(this),this.nestedMenuBlock=!1};Menu.prototype.initializeColumnHeader=function(column){var _this61=this,headerMenuEl;column.definition.headerContextMenu&&column.getElement().addEventListener("contextmenu",(function(e){var menu="function"==typeof column.definition.headerContextMenu?column.definition.headerContextMenu(column.getComponent()):column.definition.headerContextMenu;e.preventDefault(),_this61.loadMenu(e,column,menu)})),column.definition.headerMenu&&((headerMenuEl=document.createElement("span")).classList.add("tabulator-header-menu-button"),headerMenuEl.innerHTML="⋮",headerMenuEl.addEventListener("click",(function(e){var menu="function"==typeof column.definition.headerMenu?column.definition.headerMenu(column.getComponent()):column.definition.headerMenu;e.stopPropagation(),e.preventDefault(),_this61.loadMenu(e,column,menu)})),column.titleElement.insertBefore(headerMenuEl,column.titleElement.firstChild))},Menu.prototype.initializeCell=function(cell){var _this62=this;cell.getElement().addEventListener("contextmenu",(function(e){var menu="function"==typeof cell.column.definition.contextMenu?cell.column.definition.contextMenu(cell.getComponent()):cell.column.definition.contextMenu;e.stopImmediatePropagation(),_this62.loadMenu(e,cell,menu)}))},Menu.prototype.initializeRow=function(row){var _this63=this;row.getElement().addEventListener("contextmenu",(function(e){var menu="function"==typeof _this63.table.options.rowContextMenu?_this63.table.options.rowContextMenu(row.getComponent()):_this63.table.options.rowContextMenu;_this63.loadMenu(e,row,menu)}))},Menu.prototype.initializeGroup=function(group){var _this64=this;group.getElement().addEventListener("contextmenu",(function(e){var menu="function"==typeof _this64.table.options.groupContextMenu?_this64.table.options.groupContextMenu(group.getComponent()):_this64.table.options.groupContextMenu;_this64.loadMenu(e,group,menu)}))},Menu.prototype.loadMenu=function(e,component,menu){var _this65=this,docHeight=Math.max(document.body.offsetHeight,window.innerHeight);if(e.preventDefault(),menu&&menu.length){if(this.nestedMenuBlock){if(this.isOpen())return}else this.nestedMenuBlock=setTimeout((function(){_this65.nestedMenuBlock=!1}),100);this.hideMenu(),this.menuEl=document.createElement("div"),this.menuEl.classList.add("tabulator-menu"),menu.forEach((function(item){var itemEl=document.createElement("div"),label=item.label,disabled=item.disabled;item.separator?itemEl.classList.add("tabulator-menu-separator"):(itemEl.classList.add("tabulator-menu-item"),"function"==typeof label&&(label=label(component.getComponent())),label instanceof Node?itemEl.appendChild(label):itemEl.innerHTML=label,"function"==typeof disabled&&(disabled=disabled(component.getComponent())),disabled?(itemEl.classList.add("tabulator-menu-item-disabled"),itemEl.addEventListener("click",(function(e){e.stopPropagation()}))):itemEl.addEventListener("click",(function(e){_this65.hideMenu(),item.action(e,component.getComponent())}))),_this65.menuEl.appendChild(itemEl)})),this.menuEl.style.top=e.pageY+"px",this.menuEl.style.left=e.pageX+"px",document.body.addEventListener("click",this.blurEvent),this.table.rowManager.element.addEventListener("scroll",this.blurEvent),setTimeout((function(){document.body.addEventListener("contextmenu",_this65.blurEvent)}),100),document.body.addEventListener("keydown",this.escEvent),document.body.appendChild(this.menuEl),e.pageX+this.menuEl.offsetWidth>=document.body.offsetWidth&&(this.menuEl.style.left="",this.menuEl.style.right=document.body.offsetWidth-e.pageX+"px"),e.pageY+this.menuEl.offsetHeight>=docHeight&&(this.menuEl.style.top="",this.menuEl.style.bottom=docHeight-e.pageY+"px")}},Menu.prototype.isOpen=function(){return!!this.menuEl.parentNode},Menu.prototype.escMenu=function(e){27==e.keyCode&&this.hideMenu()},Menu.prototype.hideMenu=function(){this.menuEl.parentNode&&this.menuEl.parentNode.removeChild(this.menuEl),this.escEvent&&document.body.removeEventListener("keydown",this.escEvent),this.blurEvent&&(document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent))},Menu.prototype.menus={},Tabulator.prototype.registerModule("menu",Menu);var MoveColumns=function MoveColumns(table){this.table=table,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.touchMove=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this)};MoveColumns.prototype.createPlaceholderElement=function(){var el=document.createElement("div");return el.classList.add("tabulator-col"),el.classList.add("tabulator-col-placeholder"),el},MoveColumns.prototype.initializeColumn=function(column){var self=this,config={},colEl;column.modules.frozen||(colEl=column.getElement(),config.mousemove=function(e){column.parent===self.moving.parent&&((self.touchMove?e.touches[0].pageX:e.pageX)-Tabulator.prototype.helpers.elOffset(colEl).left+self.table.columnManager.element.scrollLeft>column.getWidth()/2?self.toCol===column&&self.toColAfter||(colEl.parentNode.insertBefore(self.placeholderElement,colEl.nextSibling),self.moveColumn(column,!0)):(self.toCol!==column||self.toColAfter)&&(colEl.parentNode.insertBefore(self.placeholderElement,colEl),self.moveColumn(column,!1)))}.bind(self),colEl.addEventListener("mousedown",(function(e){self.touchMove=!1,1===e.which&&(self.checkTimeout=setTimeout((function(){self.startMove(e,column)}),self.checkPeriod))})),colEl.addEventListener("mouseup",(function(e){1===e.which&&self.checkTimeout&&clearTimeout(self.checkTimeout)})),self.bindTouchEvents(column)),column.modules.moveColumn=config},MoveColumns.prototype.bindTouchEvents=function(column){var self=this,colEl=column.getElement(),startXMove=!1,dir=!1,currentCol,nextCol,prevCol,nextColWidth,prevColWidth,nextColWidthLast,prevColWidthLast;colEl.addEventListener("touchstart",(function(e){self.checkTimeout=setTimeout((function(){self.touchMove=!0,currentCol=column,nextCol=column.nextColumn(),nextColWidth=nextCol?nextCol.getWidth()/2:0,prevCol=column.prevColumn(),prevColWidth=prevCol?prevCol.getWidth()/2:0,nextColWidthLast=0,prevColWidthLast=0,startXMove=!1,self.startMove(e,column)}),self.checkPeriod)}),{passive:!0}),colEl.addEventListener("touchmove",(function(e){var halfCol,diff,moveToCol;self.moving&&(self.moveHover(e),startXMove||(startXMove=e.touches[0].pageX),(diff=e.touches[0].pageX-startXMove)>0?nextCol&&diff-nextColWidthLast>nextColWidth&&(moveToCol=nextCol)!==column&&(startXMove=e.touches[0].pageX,moveToCol.getElement().parentNode.insertBefore(self.placeholderElement,moveToCol.getElement().nextSibling),self.moveColumn(moveToCol,!0)):prevCol&&-diff-prevColWidthLast>prevColWidth&&(moveToCol=prevCol)!==column&&(startXMove=e.touches[0].pageX,moveToCol.getElement().parentNode.insertBefore(self.placeholderElement,moveToCol.getElement()),self.moveColumn(moveToCol,!1)),moveToCol&&(currentCol=moveToCol,nextCol=moveToCol.nextColumn(),nextColWidthLast=nextColWidth,nextColWidth=nextCol?nextCol.getWidth()/2:0,prevCol=moveToCol.prevColumn(),prevColWidthLast=prevColWidth,prevColWidth=prevCol?prevCol.getWidth()/2:0))}),{passive:!0}),colEl.addEventListener("touchend",(function(e){self.checkTimeout&&clearTimeout(self.checkTimeout),self.moving&&self.endMove(e)}))},MoveColumns.prototype.startMove=function(e,column){var element=column.getElement();this.moving=column,this.startX=(this.touchMove?e.touches[0].pageX:e.pageX)-Tabulator.prototype.helpers.elOffset(element).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=column.getWidth()+"px",this.placeholderElement.style.height=column.getHeight()+"px",element.parentNode.insertBefore(this.placeholderElement,element),element.parentNode.removeChild(element),this.hoverElement=element.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.table.columnManager.getElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom="0",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(e)},MoveColumns.prototype._bindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach((function(column){column.modules.moveColumn.mousemove&&column.getElement().addEventListener("mousemove",column.modules.moveColumn.mousemove)}))},MoveColumns.prototype._unbindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach((function(column){column.modules.moveColumn.mousemove&&column.getElement().removeEventListener("mousemove",column.modules.moveColumn.mousemove)}))},MoveColumns.prototype.moveColumn=function(column,after){var movingCells=this.moving.getCells();this.toCol=column,this.toColAfter=after,after?column.getCells().forEach((function(cell,i){var cellEl=cell.getElement();cellEl.parentNode.insertBefore(movingCells[i].getElement(),cellEl.nextSibling)})):column.getCells().forEach((function(cell,i){var cellEl=cell.getElement();cellEl.parentNode.insertBefore(movingCells[i].getElement(),cellEl)}))},MoveColumns.prototype.endMove=function(e){(1===e.which||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))},MoveColumns.prototype.moveHover=function(e){var self=this,columnHolder=self.table.columnManager.getElement(),scrollLeft=columnHolder.scrollLeft,xPos=(self.touchMove?e.touches[0].pageX:e.pageX)-Tabulator.prototype.helpers.elOffset(columnHolder).left+scrollLeft,scrollPos;self.hoverElement.style.left=xPos-self.startX+"px",xPos-scrollLeftgroup.getHeight()/2?self.toRow===group&&self.toRowAfter||((rowEl=group.getElement()).parentNode.insertBefore(self.placeholderElement,rowEl.nextSibling),self.moveRow(group,!0)):(self.toRow!==group||self.toRowAfter)&&(rowEl=group.getElement()).previousSibling&&(rowEl.parentNode.insertBefore(self.placeholderElement,rowEl),self.moveRow(group,!1))}.bind(self),group.modules.moveRow=config},MoveRows.prototype.initializeRow=function(row){var self=this,config={},rowEl;config.mouseup=function(e){self.tableRowDrop(e,row)}.bind(self),config.mousemove=function(e){var rowEl,rowEl;e.pageY-Tabulator.prototype.helpers.elOffset(row.element).top+self.table.rowManager.element.scrollTop>row.getHeight()/2?self.toRow===row&&self.toRowAfter||((rowEl=row.getElement()).parentNode.insertBefore(self.placeholderElement,rowEl.nextSibling),self.moveRow(row,!0)):(self.toRow!==row||self.toRowAfter)&&((rowEl=row.getElement()).parentNode.insertBefore(self.placeholderElement,rowEl),self.moveRow(row,!1))}.bind(self),this.hasHandle||((rowEl=row.getElement()).addEventListener("mousedown",(function(e){1===e.which&&(self.checkTimeout=setTimeout((function(){self.startMove(e,row)}),self.checkPeriod))})),rowEl.addEventListener("mouseup",(function(e){1===e.which&&self.checkTimeout&&clearTimeout(self.checkTimeout)})),this.bindTouchEvents(row,row.getElement())),row.modules.moveRow=config},MoveRows.prototype.initializeCell=function(cell){var self=this,cellEl=cell.getElement();cellEl.addEventListener("mousedown",(function(e){1===e.which&&(self.checkTimeout=setTimeout((function(){self.startMove(e,cell.row)}),self.checkPeriod))})),cellEl.addEventListener("mouseup",(function(e){1===e.which&&self.checkTimeout&&clearTimeout(self.checkTimeout)})),this.bindTouchEvents(cell.row,cell.getElement())},MoveRows.prototype.bindTouchEvents=function(row,element){var self=this,startYMove=!1,dir=!1,currentRow,nextRow,prevRow,nextRowHeight,prevRowHeight,nextRowHeightLast,prevRowHeightLast;element.addEventListener("touchstart",(function(e){self.checkTimeout=setTimeout((function(){self.touchMove=!0,currentRow=row,nextRow=row.nextRow(),nextRowHeight=nextRow?nextRow.getHeight()/2:0,prevRow=row.prevRow(),prevRowHeight=prevRow?prevRow.getHeight()/2:0,nextRowHeightLast=0,prevRowHeightLast=0,startYMove=!1,self.startMove(e,row)}),self.checkPeriod)}),{passive:!0}),this.moving,this.toRow,this.toRowAfter,element.addEventListener("touchmove",(function(e){var halfCol,diff,moveToRow;self.moving&&(e.preventDefault(),self.moveHover(e),startYMove||(startYMove=e.touches[0].pageY),(diff=e.touches[0].pageY-startYMove)>0?nextRow&&diff-nextRowHeightLast>nextRowHeight&&(moveToRow=nextRow)!==row&&(startYMove=e.touches[0].pageY,moveToRow.getElement().parentNode.insertBefore(self.placeholderElement,moveToRow.getElement().nextSibling),self.moveRow(moveToRow,!0)):prevRow&&-diff-prevRowHeightLast>prevRowHeight&&(moveToRow=prevRow)!==row&&(startYMove=e.touches[0].pageY,moveToRow.getElement().parentNode.insertBefore(self.placeholderElement,moveToRow.getElement()),self.moveRow(moveToRow,!1)),moveToRow&&(currentRow=moveToRow,nextRow=moveToRow.nextRow(),nextRowHeightLast=nextRowHeight,nextRowHeight=nextRow?nextRow.getHeight()/2:0,prevRow=moveToRow.prevRow(),prevRowHeightLast=prevRowHeight,prevRowHeight=prevRow?prevRow.getHeight()/2:0))})),element.addEventListener("touchend",(function(e){self.checkTimeout&&clearTimeout(self.checkTimeout),self.moving&&(self.endMove(e),self.touchMove=!1)}))},MoveRows.prototype._bindMouseMove=function(){var self=this;this.table.rowManager.getDisplayRows().forEach((function(row){"row"!==row.type&&"group"!==row.type||!row.modules.moveRow.mousemove||row.getElement().addEventListener("mousemove",row.modules.moveRow.mousemove)}))},MoveRows.prototype._unbindMouseMove=function(){var self=this;this.table.rowManager.getDisplayRows().forEach((function(row){"row"!==row.type&&"group"!==row.type||!row.modules.moveRow.mousemove||row.getElement().removeEventListener("mousemove",row.modules.moveRow.mousemove)}))},MoveRows.prototype.startMove=function(e,row){var element=row.getElement();this.setStartPosition(e,row),this.moving=row,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=row.getWidth()+"px",this.placeholderElement.style.height=row.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(row)):(element.parentNode.insertBefore(this.placeholderElement,element),element.parentNode.removeChild(element)),this.hoverElement=element.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.moveHover(e)},MoveRows.prototype.setStartPosition=function(e,row){var pageX=this.touchMove?e.touches[0].pageX:e.pageX,pageY=this.touchMove?e.touches[0].pageY:e.pageY,element,position;element=row.getElement(),this.connection?(position=element.getBoundingClientRect(),this.startX=position.left-pageX+window.pageXOffset,this.startY=position.top-pageY+window.pageYOffset):this.startY=pageY-element.getBoundingClientRect().top},MoveRows.prototype.endMove=function(e){e&&1!==e.which&&!this.touchMove||(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow&&this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))},MoveRows.prototype.moveRow=function(row,after){this.toRow=row,this.toRowAfter=after},MoveRows.prototype.moveHover=function(e){this.connection?this.moveHoverConnections.call(this,e):this.moveHoverTable.call(this,e)},MoveRows.prototype.moveHoverTable=function(e){var rowHolder=this.table.rowManager.getElement(),scrollTop=rowHolder.scrollTop,yPos=(this.touchMove?e.touches[0].pageY:e.pageY)-rowHolder.getBoundingClientRect().top+scrollTop,scrollPos;this.hoverElement.style.top=yPos-this.startY+"px"},MoveRows.prototype.moveHoverConnections=function(e){this.hoverElement.style.left=this.startX+(this.touchMove?e.touches[0].pageX:e.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?e.touches[0].pageY:e.pageY)+"px"},MoveRows.prototype.elementRowDrop=function(e,element,row){this.table.options.movableRowsElementDrop&&this.table.options.movableRowsElementDrop(e,element,!!row&&row.getComponent())},MoveRows.prototype.connectToTables=function(row){var _this66=this,connectionTables;this.connectionSelectorsTables&&(connectionTables=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStart.call(this.table,connectionTables),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","connect",{row:row})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach((function(query){"string"==typeof query?_this66.connectionElements=_this66.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query))):_this66.connectionElements.push(query)})),this.connectionElements.forEach((function(element){var dropEvent=function dropEvent(e){_this66.elementRowDrop(e,element,_this66.moving)};element.addEventListener("mouseup",dropEvent),element.tabulatorElementDropEvent=dropEvent,element.classList.add("tabulator-movingrow-receiving")})))},MoveRows.prototype.disconnectFromTables=function(){var connectionTables;this.connectionSelectorsTables&&(connectionTables=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStop.call(this.table,connectionTables),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach((function(element){element.classList.remove("tabulator-movingrow-receiving"),element.removeEventListener("mouseup",element.tabulatorElementDropEvent),delete element.tabulatorElementDropEvent}))},MoveRows.prototype.connect=function(table,row){var self=this;return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=table,this.connectedRow=row,this.table.element.classList.add("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach((function(row){"row"===row.type&&row.modules.moveRow&&row.modules.moveRow.mouseup&&row.getElement().addEventListener("mouseup",row.modules.moveRow.mouseup)})),this.tableRowDropEvent=this.tableRowDrop.bind(this),this.table.element.addEventListener("mouseup",this.tableRowDropEvent),this.table.options.movableRowsReceivingStart.call(this.table,row,table),!0)},MoveRows.prototype.disconnect=function(table){var self=this;table===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach((function(row){"row"===row.type&&row.modules.moveRow&&row.modules.moveRow.mouseup&&row.getElement().removeEventListener("mouseup",row.modules.moveRow.mouseup)})),this.table.element.removeEventListener("mouseup",this.tableRowDropEvent),this.table.options.movableRowsReceivingStop.call(this.table,table)):console.warn("Move Row Error - trying to disconnect from non connected table")},MoveRows.prototype.dropComplete=function(table,row,success){var sender=!1;if(success){switch(_typeof(this.table.options.movableRowsSender)){case"string":sender=this.senders[this.table.options.movableRowsSender];break;case"function":sender=this.table.options.movableRowsSender}sender?sender.call(this,this.moving.getComponent(),row?row.getComponent():void 0,table):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.table.options.movableRowsSent.call(this.table,this.moving.getComponent(),row?row.getComponent():void 0,table)}else this.table.options.movableRowsSentFailed.call(this.table,this.moving.getComponent(),row?row.getComponent():void 0,table);this.endMove()},MoveRows.prototype.tableRowDrop=function(e,row){var receiver=!1,success=!1;switch(console.trace("drop"),e.stopImmediatePropagation(),_typeof(this.table.options.movableRowsReceiver)){case"string":receiver=this.receivers[this.table.options.movableRowsReceiver];break;case"function":receiver=this.table.options.movableRowsReceiver}receiver?success=receiver.call(this,this.connectedRow.getComponent(),row?row.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),success?this.table.options.movableRowsReceived.call(this.table,this.connectedRow.getComponent(),row?row.getComponent():void 0,this.connectedTable):this.table.options.movableRowsReceivedFailed.call(this.table,this.connectedRow.getComponent(),row?row.getComponent():void 0,this.connectedTable),this.table.modules.comms.send(this.connectedTable,"moveRow","dropcomplete",{row:row,success:success})},MoveRows.prototype.receivers={insert:function insert(fromRow,toRow,fromTable){return this.table.addRow(fromRow.getData(),void 0,toRow),!0},add:function add(fromRow,toRow,fromTable){return this.table.addRow(fromRow.getData()),!0},update:function update(fromRow,toRow,fromTable){return!!toRow&&(toRow.update(fromRow.getData()),!0)},replace:function replace(fromRow,toRow,fromTable){return!!toRow&&(this.table.addRow(fromRow.getData(),void 0,toRow),toRow.delete(),!0)}},MoveRows.prototype.senders={delete:function _delete(fromRow,toRow,toTable){fromRow.delete()}},MoveRows.prototype.commsReceived=function(table,action,data){switch(action){case"connect":return this.connect(table,data.row);case"disconnect":return this.disconnect(table);case"dropcomplete":return this.dropComplete(table,data.row,data.success)}},Tabulator.prototype.registerModule("moveRow",MoveRows);var Mutator=function Mutator(table){this.table=table,this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0};Mutator.prototype.initializeColumn=function(column){var self=this,match=!1,config={};this.allowedTypes.forEach((function(type){var key="mutator"+(type.charAt(0).toUpperCase()+type.slice(1)),mutator;column.definition[key]&&(mutator=self.lookupMutator(column.definition[key]))&&(match=!0,config[key]={mutator:mutator,params:column.definition[key+"Params"]||{}})})),match&&(column.modules.mutate=config)},Mutator.prototype.lookupMutator=function(value){var mutator=!1;switch(void 0===value?"undefined":_typeof(value)){case"string":this.mutators[value]?mutator=this.mutators[value]:console.warn("Mutator Error - No such mutator found, ignoring: ",value);break;case"function":mutator=value}return mutator},Mutator.prototype.transformRow=function(data,type,updatedData){var self=this,key="mutator"+(type.charAt(0).toUpperCase()+type.slice(1)),value;return this.enabled&&this.table.columnManager.traverse((function(column){var mutator,params,component;column.modules.mutate&&(mutator=column.modules.mutate[key]||column.modules.mutate.mutator||!1)&&(value=column.getFieldValue(void 0!==updatedData?updatedData:data),"data"!=type&&void 0===value||(component=column.getComponent(),params="function"==typeof mutator.params?mutator.params(value,data,type,component):mutator.params,column.setFieldValue(data,mutator.mutator(value,data,type,params,component))))})),data},Mutator.prototype.transformCell=function(cell,value){var mutator=cell.column.modules.mutate.mutatorEdit||cell.column.modules.mutate.mutator||!1,tempData={};return mutator?(tempData=Object.assign(tempData,cell.row.getData()),cell.column.setFieldValue(tempData,value),mutator.mutator(value,tempData,"edit",mutator.params,cell.getComponent())):value},Mutator.prototype.enable=function(){this.enabled=!0},Mutator.prototype.disable=function(){this.enabled=!1},Mutator.prototype.mutators={},Tabulator.prototype.registerModule("mutator",Mutator);var Page=function Page(table){this.table=table,this.mode="local",this.progressiveLoad=!1,this.size=0,this.page=1,this.count=5,this.max=1,this.displayIndex=0,this.initialLoad=!0,this.pageSizes=[],this.dataReceivedNames={},this.dataSentNames={},this.createElements()};Page.prototype.createElements=function(){var button;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),(button=document.createElement("button")).classList.add("tabulator-page"),button.setAttribute("type","button"),button.setAttribute("role","button"),button.setAttribute("aria-label",""),button.setAttribute("title",""),this.firstBut=button.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=button.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=button.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=button.cloneNode(!0),this.lastBut.setAttribute("data-page","last"),this.table.options.paginationSizeSelector&&(this.pageSizeSelect=document.createElement("select"),this.pageSizeSelect.classList.add("tabulator-page-size"))},Page.prototype.generatePageSizeSelectList=function(){var _this67=this,pageSizes=[];if(this.pageSizeSelect){if(Array.isArray(this.table.options.paginationSizeSelector))pageSizes=this.table.options.paginationSizeSelector,this.pageSizes=pageSizes,-1==this.pageSizes.indexOf(this.size)&&pageSizes.unshift(this.size);else if(-1==this.pageSizes.indexOf(this.size)){pageSizes=[];for(var _i9=1;_i9<5;_i9++)pageSizes.push(this.size*_i9);this.pageSizes=pageSizes}else pageSizes=this.pageSizes;for(;this.pageSizeSelect.firstChild;)this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);pageSizes.forEach((function(item){var itemEl=document.createElement("option");itemEl.value=item,!0===item?_this67.table.modules.localize.bind("pagination|all",(function(value){itemEl.innerHTML=value})):itemEl.innerHTML=item,_this67.pageSizeSelect.appendChild(itemEl)})),this.pageSizeSelect.value=this.size}},Page.prototype.initialize=function(hidden){var self=this,pageSelectLabel,testElRow,testElCell;this.dataSentNames=Object.assign({},this.paginationDataSentNames),this.dataSentNames=Object.assign(this.dataSentNames,this.table.options.paginationDataSent),this.dataReceivedNames=Object.assign({},this.paginationDataReceivedNames),this.dataReceivedNames=Object.assign(this.dataReceivedNames,this.table.options.paginationDataReceived),self.table.modules.localize.bind("pagination|first",(function(value){self.firstBut.innerHTML=value})),self.table.modules.localize.bind("pagination|first_title",(function(value){self.firstBut.setAttribute("aria-label",value),self.firstBut.setAttribute("title",value)})),self.table.modules.localize.bind("pagination|prev",(function(value){self.prevBut.innerHTML=value})),self.table.modules.localize.bind("pagination|prev_title",(function(value){self.prevBut.setAttribute("aria-label",value),self.prevBut.setAttribute("title",value)})),self.table.modules.localize.bind("pagination|next",(function(value){self.nextBut.innerHTML=value})),self.table.modules.localize.bind("pagination|next_title",(function(value){self.nextBut.setAttribute("aria-label",value),self.nextBut.setAttribute("title",value)})),self.table.modules.localize.bind("pagination|last",(function(value){self.lastBut.innerHTML=value})),self.table.modules.localize.bind("pagination|last_title",(function(value){self.lastBut.setAttribute("aria-label",value),self.lastBut.setAttribute("title",value)})),self.firstBut.addEventListener("click",(function(){self.setPage(1)})),self.prevBut.addEventListener("click",(function(){self.previousPage()})),self.nextBut.addEventListener("click",(function(){self.nextPage().then((function(){})).catch((function(){}))})),self.lastBut.addEventListener("click",(function(){self.setPage(self.max)})),self.table.options.paginationElement&&(self.element=self.table.options.paginationElement),this.pageSizeSelect&&(pageSelectLabel=document.createElement("label"),self.table.modules.localize.bind("pagination|page_size",(function(value){self.pageSizeSelect.setAttribute("aria-label",value),self.pageSizeSelect.setAttribute("title",value),pageSelectLabel.innerHTML=value})),self.element.appendChild(pageSelectLabel),self.element.appendChild(self.pageSizeSelect),self.pageSizeSelect.addEventListener("change",(function(e){self.setPageSize("true"==self.pageSizeSelect.value||self.pageSizeSelect.value),self.setPage(1).then((function(){})).catch((function(){}))}))),self.element.appendChild(self.firstBut),self.element.appendChild(self.prevBut),self.element.appendChild(self.pagesElement),self.element.appendChild(self.nextBut),self.element.appendChild(self.lastBut),self.table.options.paginationElement||hidden||self.table.footerManager.append(self.element,self),self.mode=self.table.options.pagination,self.table.options.paginationSize?self.size=self.table.options.paginationSize:((testElRow=document.createElement("div")).classList.add("tabulator-row"),testElRow.style.visibility=hidden,(testElCell=document.createElement("div")).classList.add("tabulator-cell"),testElCell.innerHTML="Page Row Test",testElRow.appendChild(testElCell),self.table.rowManager.getTableElement().appendChild(testElRow),self.size=Math.floor(self.table.rowManager.getElement().clientHeight/testElRow.offsetHeight),self.table.rowManager.getTableElement().removeChild(testElRow)),self.count=self.table.options.paginationButtonCount,self.generatePageSizeSelectList()},Page.prototype.initializeProgressive=function(mode){this.initialize(!0),this.mode="progressive_"+mode,this.progressiveLoad=!0},Page.prototype.setDisplayIndex=function(index){this.displayIndex=index},Page.prototype.getDisplayIndex=function(){return this.displayIndex},Page.prototype.setMaxRows=function(rowCount){this.max=rowCount?!0===this.size?1:Math.ceil(rowCount/this.size):1,this.page>this.max&&(this.page=this.max)},Page.prototype.reset=function(force,columnsChanged){return("local"==this.mode||force)&&(this.page=1),columnsChanged&&(this.initialLoad=!0),!0},Page.prototype.setMaxPage=function(max){max=parseInt(max),this.max=max||1,this.page>this.max&&(this.page=this.max,this.trigger())},Page.prototype.setPage=function(page){var _this68=this,self=this;switch(page){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return new Promise((function(resolve,reject){(page=parseInt(page))>0&&page<=_this68.max?(_this68.page=page,_this68.trigger().then((function(){resolve()})).catch((function(){reject()})),self.table.options.persistence&&self.table.modExists("persistence",!0)&&self.table.modules.persistence.config.page&&self.table.modules.persistence.save("page")):(console.warn("Pagination Error - Requested page is out of range of 1 - "+_this68.max+":",page),reject())}))},Page.prototype.setPageToRow=function(row){var _this69=this;return new Promise((function(resolve,reject){var rows,index=_this69.table.rowManager.getDisplayRows(_this69.displayIndex-1).indexOf(row);if(index>-1){var page=!0===_this69.size?1:Math.ceil((index+1)/_this69.size);_this69.setPage(page).then((function(){resolve()})).catch((function(){reject()}))}else console.warn("Pagination Error - Requested row is not visible"),reject()}))},Page.prototype.setPageSize=function(size){!0!==size&&(size=parseInt(size)),size>0&&(this.size=size),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.page&&this.table.modules.persistence.save("page")},Page.prototype._setPageButtons=function(){for(var self=this,leftSize=Math.floor((this.count-1)/2),rightSize=Math.ceil((this.count-1)/2),min=this.max-this.page+leftSize+10&&_i10<=this.max&&this.pagesElement.appendChild(this._generatePageButton(_i10));this.footerRedraw()},Page.prototype._generatePageButton=function(page){var self=this,button=document.createElement("button");return button.classList.add("tabulator-page"),page==self.page&&button.classList.add("active"),button.setAttribute("type","button"),button.setAttribute("role","button"),self.table.modules.localize.bind("pagination|page_title",(function(value){button.setAttribute("aria-label",value+" "+page),button.setAttribute("title",value+" "+page)})),button.setAttribute("data-page",page),button.textContent=page,button.addEventListener("click",(function(e){self.setPage(page)})),button},Page.prototype.previousPage=function(){var _this70=this;return new Promise((function(resolve,reject){_this70.page>1?(_this70.page--,_this70.trigger().then((function(){resolve()})).catch((function(){reject()})),_this70.table.options.persistence&&_this70.table.modExists("persistence",!0)&&_this70.table.modules.persistence.config.page&&_this70.table.modules.persistence.save("page")):(console.warn("Pagination Error - Previous page would be less than page 1:",0),reject())}))},Page.prototype.nextPage=function(){var _this71=this;return new Promise((function(resolve,reject){_this71.page<_this71.max?(_this71.page++,_this71.trigger().then((function(){resolve()})).catch((function(){reject()})),_this71.table.options.persistence&&_this71.table.modExists("persistence",!0)&&_this71.table.modules.persistence.config.page&&_this71.table.modules.persistence.save("page")):(_this71.progressiveLoad||console.warn("Pagination Error - Next page would be greater than maximum page of "+_this71.max+":",_this71.max+1),reject())}))},Page.prototype.getPage=function(){return this.page},Page.prototype.getPageMax=function(){return this.max},Page.prototype.getPageSize=function(size){return this.size},Page.prototype.getMode=function(){return this.mode},Page.prototype.getRows=function(data){var output,start,end;if("local"==this.mode){output=[],!0===this.size?(start=0,end=data.length-1):end=(start=this.size*(this.page-1))+parseInt(this.size),this._setPageButtons();for(var _i11=start;_i11i?output.splice(i,0,column):output.push(column))})),output},Persistence.prototype._findColumn=function(columns,subject){var type=subject.columns?"group":subject.field?"field":"object";return columns.find((function(col){switch(type){case"group":return col.title===subject.title&&col.columns.length===subject.columns.length;case"field":return col.field===subject.field;case"object":return col===subject}}))},Persistence.prototype.save=function(type){var data={};switch(type){case"columns":data=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":data=this.table.modules.filter.getFilters();break;case"sort":data=this.validateSorters(this.table.modules.sort.getSort());break;case"group":data=this.getGroupConfig();break;case"page":data=this.getPageConfig()}this.writeFunc&&this.writeFunc(this.id,type,data)},Persistence.prototype.validateSorters=function(data){return data.forEach((function(item){item.column=item.field,delete item.field})),data},Persistence.prototype.getGroupConfig=function(){return this.config.group&&((!0===this.config.group||this.config.group.groupBy)&&(data.groupBy=this.table.options.groupBy),(!0===this.config.group||this.config.group.groupStartOpen)&&(data.groupStartOpen=this.table.options.groupStartOpen),(!0===this.config.group||this.config.group.groupHeader)&&(data.groupHeader=this.table.options.groupHeader)),data},Persistence.prototype.getPageConfig=function(){var data={};return this.config.page&&((!0===this.config.page||this.config.page.size)&&(data.paginationSize=this.table.modules.page.getPageSize()),(!0===this.config.page||this.config.page.page)&&(data.paginationInitialPage=this.table.modules.page.getPage())),data},Persistence.prototype.parseColumns=function(columns){var self=this,definitions=[];return columns.forEach((function(column){var defStore={},colDef=column.getDefinition(),keys;column.isGroup?(defStore.title=colDef.title,defStore.columns=self.parseColumns(column.getColumns())):(defStore.field=column.getField(),!0===self.config.columns||null==self.config.columns?(keys=Object.keys(colDef)).push("width"):keys=self.config.columns,keys.forEach((function(key){switch(key){case"width":defStore.width=column.getWidth();break;case"visible":defStore.visible=column.visible;break;default:defStore[key]=colDef[key]}}))),definitions.push(defStore)})),definitions},Persistence.prototype.readers={local:function local(id,type){var data=localStorage.getItem(id+"-"+type);return!!data&&JSON.parse(data)},cookie:function cookie(id,type){var cookie=document.cookie,key=id+"-"+type,cookiePos=cookie.indexOf(key+"="),end,data;return cookiePos>-1&&(cookie=cookie.substr(cookiePos),(end=cookie.indexOf(";"))>-1&&(cookie=cookie.substr(0,end)),data=cookie.replace(key+"=","")),!!data&&JSON.parse(data)}},Persistence.prototype.writers={local:function local(id,type,data){localStorage.setItem(id+"-"+type,JSON.stringify(data))},cookie:function cookie(id,type,data){var expireDate=new Date;expireDate.setDate(expireDate.getDate()+1e4),document.cookie=id+"-"+type+"="+JSON.stringify(data)+"; expires="+expireDate.toUTCString()}},Tabulator.prototype.registerModule("persistence",Persistence);var Print=function Print(table){this.table=table,this.element=!1,this.manualBlock=!1};Print.prototype.initialize=function(){window.addEventListener("beforeprint",this.replaceTable.bind(this)),window.addEventListener("afterprint",this.cleanup.bind(this))},Print.prototype.replaceTable=function(){this.manualBlock||(this.element=document.createElement("div"),this.element.classList.add("tabulator-print-table"),this.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig,this.table.options.printStyled,this.table.options.printRowRange,"print")),this.table.element.style.display="none",this.table.element.parentNode.insertBefore(this.element,this.table.element))},Print.prototype.cleanup=function(){document.body.classList.remove("tabulator-print-fullscreen-hide"),this.element&&this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.table.element.style.display="")},Print.prototype.printFullscreen=function(visible,style,config){var scrollX=window.scrollX,scrollY=window.scrollY,headerEl=document.createElement("div"),footerEl=document.createElement("div"),tableEl=this.table.modules.export.genereateTable(void 0!==config?config:this.table.options.printConfig,void 0!==style?style:this.table.options.printStyled,visible,"print"),headerContent,footerContent;this.manualBlock=!0,this.element=document.createElement("div"),this.element.classList.add("tabulator-print-fullscreen"),this.table.options.printHeader&&(headerEl.classList.add("tabulator-print-header"),"string"==typeof(headerContent="function"==typeof this.table.options.printHeader?this.table.options.printHeader.call(this.table):this.table.options.printHeader)?headerEl.innerHTML=headerContent:headerEl.appendChild(headerContent),this.element.appendChild(headerEl)),this.element.appendChild(tableEl),this.table.options.printFooter&&(footerEl.classList.add("tabulator-print-footer"),"string"==typeof(footerContent="function"==typeof this.table.options.printFooter?this.table.options.printFooter.call(this.table):this.table.options.printFooter)?footerEl.innerHTML=footerContent:footerEl.appendChild(footerContent),this.element.appendChild(footerEl)),document.body.classList.add("tabulator-print-fullscreen-hide"),document.body.appendChild(this.element),this.table.options.printFormatter&&this.table.options.printFormatter(this.element,tableEl),window.print(),this.cleanup(),window.scrollTo(scrollX,scrollY),this.manualBlock=!1},Tabulator.prototype.registerModule("print",Print);var ReactiveData=function ReactiveData(table){this.table=table,this.data=!1,this.blocked=!1,this.origFuncs={},this.currentVersion=0};ReactiveData.prototype.watchData=function(data){var self=this,pushFunc,version;this.currentVersion++,version=this.currentVersion,self.unwatchData(),self.data=data,self.origFuncs.push=data.push,Object.defineProperty(self.data,"push",{enumerable:!1,configurable:!0,value:function value(){var args=Array.from(arguments);return self.blocked||version!==self.currentVersion||args.forEach((function(arg){self.table.rowManager.addRowActual(arg,!1)})),self.origFuncs.push.apply(data,arguments)}}),self.origFuncs.unshift=data.unshift,Object.defineProperty(self.data,"unshift",{enumerable:!1,configurable:!0,value:function value(){var args=Array.from(arguments);return self.blocked||version!==self.currentVersion||args.forEach((function(arg){self.table.rowManager.addRowActual(arg,!0)})),self.origFuncs.unshift.apply(data,arguments)}}),self.origFuncs.shift=data.shift,Object.defineProperty(self.data,"shift",{enumerable:!1,configurable:!0,value:function value(){var row;return self.blocked||version!==self.currentVersion||self.data.length&&(row=self.table.rowManager.getRowFromDataObject(self.data[0]))&&row.deleteActual(),self.origFuncs.shift.call(data)}}),self.origFuncs.pop=data.pop,Object.defineProperty(self.data,"pop",{enumerable:!1,configurable:!0,value:function value(){var row;return self.blocked||version!==self.currentVersion||self.data.length&&(row=self.table.rowManager.getRowFromDataObject(self.data[self.data.length-1]))&&row.deleteActual(),self.origFuncs.pop.call(data)}}),self.origFuncs.splice=data.splice,Object.defineProperty(self.data,"splice",{enumerable:!1,configurable:!0,value:function value(){var args=Array.from(arguments),start=args[0]<0?data.length+args[0]:args[0],end=args[1],newRows=!!args[2]&&args.slice(2),startRow;if(!self.blocked&&version===self.currentVersion){if(newRows&&((startRow=!!data[start]&&self.table.rowManager.getRowFromDataObject(data[start]))?newRows.forEach((function(rowData){self.table.rowManager.addRowActual(rowData,!0,startRow,!0)})):(newRows=newRows.slice().reverse()).forEach((function(rowData){self.table.rowManager.addRowActual(rowData,!0,!1,!0)}))),0!==end){var oldRows=data.slice(start,void 0===args[1]?args[1]:start+end);oldRows.forEach((function(rowData,i){var row=self.table.rowManager.getRowFromDataObject(rowData);row&&row.deleteActual(i!==oldRows.length-1)}))}(newRows||0!==end)&&self.table.rowManager.reRenderInPosition()}return self.origFuncs.splice.apply(data,arguments)}})},ReactiveData.prototype.unwatchData=function(){if(!1!==this.data)for(var key in this.origFuncs)Object.defineProperty(this.data,key,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})},ReactiveData.prototype.watchRow=function(row){var self=this,data=row.getData();for(var key in this.blocked=!0,data)this.watchKey(row,data,key);this.blocked=!1},ReactiveData.prototype.watchKey=function(row,data,key){var self=this,props=Object.getOwnPropertyDescriptor(data,key),value=data[key],version=this.currentVersion;Object.defineProperty(data,key,{set:function set(newValue){if(value=newValue,!self.blocked&&version===self.currentVersion){var update={};update[key]=newValue,row.updateData(update)}props.set&&props.set(newValue)},get:function get(){return props.get&&props.get(),value}})},ReactiveData.prototype.unwatchRow=function(row){var data=row.getData();for(var key in data)Object.defineProperty(data,key,{value:data[key]})},ReactiveData.prototype.block=function(){this.blocked=!0},ReactiveData.prototype.unblock=function(){this.blocked=!1},Tabulator.prototype.registerModule("reactiveData",ReactiveData);var ResizeColumns=function ResizeColumns(table){this.table=table,this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.handle=null,this.prevHandle=null};ResizeColumns.prototype.initializeColumn=function(type,column,element){var self=this,variableHeight=!1,mode=this.table.options.resizableColumns;if("header"===type&&(variableHeight="textarea"==column.definition.formatter||column.definition.variableHeight,column.modules.resize={variableHeight:variableHeight}),!0===mode||mode==type){var handle=document.createElement("div");handle.className="tabulator-col-resize-handle";var prevHandle=document.createElement("div");prevHandle.className="tabulator-col-resize-handle prev",handle.addEventListener("click",(function(e){e.stopPropagation()}));var handleDown=function handleDown(e){var nearestColumn=column.getLastColumn();nearestColumn&&self._checkResizability(nearestColumn)&&(self.startColumn=column,self._mouseDown(e,nearestColumn,handle))};handle.addEventListener("mousedown",handleDown),handle.addEventListener("touchstart",handleDown,{passive:!0}),handle.addEventListener("dblclick",(function(e){var col=column.getLastColumn();col&&self._checkResizability(col)&&(e.stopPropagation(),col.reinitializeWidth(!0))})),prevHandle.addEventListener("click",(function(e){e.stopPropagation()}));var prevHandleDown=function prevHandleDown(e){var nearestColumn,colIndex,prevColumn;(nearestColumn=column.getFirstColumn())&&(prevColumn=(colIndex=self.table.columnManager.findColumnIndex(nearestColumn))>0&&self.table.columnManager.getColumnByIndex(colIndex-1))&&self._checkResizability(prevColumn)&&(self.startColumn=column,self._mouseDown(e,prevColumn,prevHandle))};prevHandle.addEventListener("mousedown",prevHandleDown),prevHandle.addEventListener("touchstart",prevHandleDown,{passive:!0}),prevHandle.addEventListener("dblclick",(function(e){var nearestColumn,colIndex,prevColumn;(nearestColumn=column.getFirstColumn())&&(prevColumn=(colIndex=self.table.columnManager.findColumnIndex(nearestColumn))>0&&self.table.columnManager.getColumnByIndex(colIndex-1))&&self._checkResizability(prevColumn)&&(e.stopPropagation(),prevColumn.reinitializeWidth(!0))})),element.appendChild(handle),element.appendChild(prevHandle)}},ResizeColumns.prototype._checkResizability=function(column){return void 0!==column.definition.resizable?column.definition.resizable:this.table.options.resizableColumns},ResizeColumns.prototype._mouseDown=function(e,column,handle){var self=this;function mouseMove(e){column.setWidth(self.startWidth+((void 0===e.screenX?e.touches[0].screenX:e.screenX)-self.startX)),!self.table.browserSlow&&column.modules.resize&&column.modules.resize.variableHeight&&column.checkCellHeights()}function mouseUp(e){self.startColumn.modules.edit&&(self.startColumn.modules.edit.blocked=!1),self.table.browserSlow&&column.modules.resize&&column.modules.resize.variableHeight&&column.checkCellHeights(),document.body.removeEventListener("mouseup",mouseUp),document.body.removeEventListener("mousemove",mouseMove),handle.removeEventListener("touchmove",mouseMove),handle.removeEventListener("touchend",mouseUp),self.table.element.classList.remove("tabulator-block-select"),self.table.options.persistence&&self.table.modExists("persistence",!0)&&self.table.modules.persistence.config.columns&&self.table.modules.persistence.save("columns"),self.table.options.columnResized.call(self.table,column.getComponent())}self.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),self.startColumn.modules.edit&&(self.startColumn.modules.edit.blocked=!0),self.startX=void 0===e.screenX?e.touches[0].screenX:e.screenX,self.startWidth=column.getWidth(),document.body.addEventListener("mousemove",mouseMove),document.body.addEventListener("mouseup",mouseUp),handle.addEventListener("touchmove",mouseMove,{passive:!0}),handle.addEventListener("touchend",mouseUp)},Tabulator.prototype.registerModule("resizeColumns",ResizeColumns);var ResizeRows=function ResizeRows(table){this.table=table,this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null};ResizeRows.prototype.initializeRow=function(row){var self=this,rowEl=row.getElement(),handle=document.createElement("div");handle.className="tabulator-row-resize-handle";var prevHandle=document.createElement("div");prevHandle.className="tabulator-row-resize-handle prev",handle.addEventListener("click",(function(e){e.stopPropagation()}));var handleDown=function handleDown(e){self.startRow=row,self._mouseDown(e,row,handle)};handle.addEventListener("mousedown",handleDown),handle.addEventListener("touchstart",handleDown,{passive:!0}),prevHandle.addEventListener("click",(function(e){e.stopPropagation()}));var prevHandleDown=function prevHandleDown(e){var prevRow=self.table.rowManager.prevDisplayRow(row);prevRow&&(self.startRow=prevRow,self._mouseDown(e,prevRow,prevHandle))};prevHandle.addEventListener("mousedown",prevHandleDown),prevHandle.addEventListener("touchstart",prevHandleDown,{passive:!0}),rowEl.appendChild(handle),rowEl.appendChild(prevHandle)},ResizeRows.prototype._mouseDown=function(e,row,handle){var self=this;function mouseMove(e){row.setHeight(self.startHeight+((void 0===e.screenY?e.touches[0].screenY:e.screenY)-self.startY))}function mouseUp(e){document.body.removeEventListener("mouseup",mouseMove),document.body.removeEventListener("mousemove",mouseMove),handle.removeEventListener("touchmove",mouseMove),handle.removeEventListener("touchend",mouseUp),self.table.element.classList.remove("tabulator-block-select"),self.table.options.rowResized.call(this.table,row.getComponent())}self.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),self.startY=void 0===e.screenY?e.touches[0].screenY:e.screenY,self.startHeight=row.getHeight(),document.body.addEventListener("mousemove",mouseMove),document.body.addEventListener("mouseup",mouseUp),handle.addEventListener("touchmove",mouseMove,{passive:!0}),handle.addEventListener("touchend",mouseUp)},Tabulator.prototype.registerModule("resizeRows",ResizeRows);var ResizeTable=function ResizeTable(table){this.table=table,this.binding=!1,this.observer=!1,this.containerObserver=!1,this.tableHeight=0,this.tableWidth=0,this.containerHeight=0,this.containerWidth=0,this.autoResize=!1};ResizeTable.prototype.initialize=function(row){var _this74=this,table=this.table,tableStyle;this.tableHeight=table.element.clientHeight,this.tableWidth=table.element.clientWidth,table.element.parentNode&&(this.containerHeight=table.element.parentNode.clientHeight,this.containerWidth=table.element.parentNode.clientWidth),"undefined"!=typeof ResizeObserver&&"virtual"===table.rowManager.getRenderMode()?(this.autoResize=!0,this.observer=new ResizeObserver((function(entry){if(!table.browserMobile||table.browserMobile&&!table.modules.edit.currentCell){var nodeHeight=Math.floor(entry[0].contentRect.height),nodeWidth=Math.floor(entry[0].contentRect.width);_this74.tableHeight==nodeHeight&&_this74.tableWidth==nodeWidth||(_this74.tableHeight=nodeHeight,_this74.tableWidth=nodeWidth,table.element.parentNode&&(_this74.containerHeight=table.element.parentNode.clientHeight,_this74.containerWidth=table.element.parentNode.clientWidth),table.redraw())}})),this.observer.observe(table.element),tableStyle=window.getComputedStyle(table.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(tableStyle.getPropertyValue("max-height")||tableStyle.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver((function(entry){if(!table.browserMobile||table.browserMobile&&!table.modules.edit.currentCell){var nodeHeight=Math.floor(entry[0].contentRect.height),nodeWidth=Math.floor(entry[0].contentRect.width);_this74.containerHeight==nodeHeight&&_this74.containerWidth==nodeWidth||(_this74.containerHeight=nodeHeight,_this74.containerWidth=nodeWidth,_this74.tableHeight=table.element.clientHeight,_this74.tableWidth=table.element.clientWidth,table.redraw()),table.redraw()}})),this.containerObserver.observe(this.table.element.parentNode))):(this.binding=function(){(!table.browserMobile||table.browserMobile&&!table.modules.edit.currentCell)&&table.redraw()},window.addEventListener("resize",this.binding))},ResizeTable.prototype.clearBindings=function(row){this.binding&&window.removeEventListener("resize",this.binding),this.observer&&this.observer.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)},Tabulator.prototype.registerModule("resizeTable",ResizeTable);var ResponsiveLayout=function ResponsiveLayout(table){this.table=table,this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0,this.collapseHandleColumn=!1};ResponsiveLayout.prototype.initialize=function(){var self=this,columns=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.table.columnManager.columnsByIndex.forEach((function(column,i){column.modules.responsive&&column.modules.responsive.order&&column.modules.responsive.visible&&(column.modules.responsive.index=i,columns.push(column),column.visible||"collapse"!==self.mode||self.hiddenColumns.push(column))})),columns=(columns=columns.reverse()).sort((function(a,b){var diff;return b.modules.responsive.order-a.modules.responsive.order||b.modules.responsive.index-a.modules.responsive.index})),this.columns=columns,"collapse"===this.mode&&this.generateCollapsedContent();for(var _iterator=this.table.columnManager.columnsByIndex,_isArray=Array.isArray(_iterator),_i12=0,_iterator=_isArray?_iterator:_iterator[Symbol.iterator]();;){var _ref;if(_isArray){if(_i12>=_iterator.length)break;_ref=_iterator[_i12++]}else{if((_i12=_iterator.next()).done)break;_ref=_i12.value}var col=_ref;if("responsiveCollapse"==col.definition.formatter){this.collapseHandleColumn=col;break}}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())},ResponsiveLayout.prototype.initializeColumn=function(column){var def=column.getDefinition();column.modules.responsive={order:void 0===def.responsive?1:def.responsive,visible:!1!==def.visible}},ResponsiveLayout.prototype.initializeRow=function(row){var el;"calc"!==row.type&&((el=document.createElement("div")).classList.add("tabulator-responsive-collapse"),row.modules.responsiveLayout={element:el,open:this.collapseStartOpen},this.collapseStartOpen||(el.style.display="none"))},ResponsiveLayout.prototype.layoutRow=function(row){var rowEl=row.getElement();row.modules.responsiveLayout&&(rowEl.appendChild(row.modules.responsiveLayout.element),this.generateCollapsedRowContent(row))},ResponsiveLayout.prototype.updateColumnVisibility=function(column,visible){var index;column.modules.responsive&&(column.modules.responsive.visible=visible,this.initialize())},ResponsiveLayout.prototype.hideColumn=function(column){var colCount=this.hiddenColumns.length;column.hide(!1,!0),"collapse"===this.mode&&(this.hiddenColumns.unshift(column),this.generateCollapsedContent(),this.collapseHandleColumn&&!colCount&&this.collapseHandleColumn.show())},ResponsiveLayout.prototype.showColumn=function(column){var index;column.show(!1,!0),column.setWidth(column.getWidth()),"collapse"===this.mode&&((index=this.hiddenColumns.indexOf(column))>-1&&this.hiddenColumns.splice(index,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())},ResponsiveLayout.prototype.update=function(){for(var self=this,working=!0;working;){var width="fitColumns"==this.table.modules.layout.getMode()?this.table.columnManager.getFlexBaseWidth():this.table.columnManager.getWidth(),diff=(this.table.options.headerVisible?this.table.columnManager.element.clientWidth:this.table.element.clientWidth)-width;if(diff<0){var column=this.columns[this.index];column?(this.hideColumn(column),this.index++):working=!1}else{var _column=this.columns[this.index-1];_column&&diff>0&&diff>=_column.getWidth()?(this.showColumn(_column),this.index--):working=!1}this.table.rowManager.activeRowsCount||this.table.rowManager.renderEmptyScroll()}},ResponsiveLayout.prototype.generateCollapsedContent=function(){var self=this,rows;this.table.rowManager.getDisplayRows().forEach((function(row){self.generateCollapsedRowContent(row)}))},ResponsiveLayout.prototype.generateCollapsedRowContent=function(row){var el,contents;if(row.modules.responsiveLayout){for(el=row.modules.responsiveLayout.element;el.firstChild;)el.removeChild(el.firstChild);(contents=this.collapseFormatter(this.generateCollapsedRowData(row)))&&el.appendChild(contents)}},ResponsiveLayout.prototype.generateCollapsedRowData=function(row){var self=this,data=row.getData(),output=[],mockCellComponent;return this.hiddenColumns.forEach((function(column){var value=column.getFieldValue(data);column.definition.title&&column.field&&(column.modules.format&&self.table.options.responsiveLayoutCollapseUseFormatters?(mockCellComponent={value:!1,data:{},getValue:function getValue(){return value},getData:function getData(){return data},getElement:function getElement(){return document.createElement("div")},getRow:function getRow(){return row.getComponent()},getColumn:function getColumn(){return column.getComponent()}},output.push({title:column.definition.title,value:column.modules.format.formatter.call(self.table.modules.format,mockCellComponent,column.modules.format.params)})):output.push({title:column.definition.title,value:value}))})),output},ResponsiveLayout.prototype.formatCollapsedData=function(data){var list=document.createElement("table"),listContents="";return data.forEach((function(item){var div=document.createElement("div");item.value instanceof Node&&(div.appendChild(item.value),item.value=div.innerHTML),listContents+=""+item.title+""+item.value+""})),list.innerHTML=listContents,Object.keys(data).length?list:""},Tabulator.prototype.registerModule("responsiveLayout",ResponsiveLayout);var SelectRow=function SelectRow(table){this.table=table,this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],this.headerCheckboxElement=null};SelectRow.prototype.clearSelectionData=function(silent){this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],silent||this._rowSelectionChanged()},SelectRow.prototype.initializeRow=function(row){var self=this,element=row.getElement(),endSelect=function endSelect(){setTimeout((function(){self.selecting=!1}),50),document.body.removeEventListener("mouseup",endSelect)};row.modules.select={selected:!1},self.table.options.selectableCheck.call(this.table,row.getComponent())?(element.classList.add("tabulator-selectable"),element.classList.remove("tabulator-unselectable"),self.table.options.selectable&&"highlight"!=self.table.options.selectable&&("click"===self.table.options.selectableRangeMode?element.addEventListener("click",(function(e){if(e.shiftKey){self.table._clearSelection(),self.lastClickedRow=self.lastClickedRow||row;var lastClickedRowIdx=self.table.rowManager.getDisplayRowIndex(self.lastClickedRow),rowIdx=self.table.rowManager.getDisplayRowIndex(row),fromRowIdx=lastClickedRowIdx<=rowIdx?lastClickedRowIdx:rowIdx,toRowIdx=lastClickedRowIdx>=rowIdx?lastClickedRowIdx:rowIdx,rows,toggledRows=self.table.rowManager.getDisplayRows().slice(0).splice(fromRowIdx,toRowIdx-fromRowIdx+1);e.ctrlKey||e.metaKey?(toggledRows.forEach((function(toggledRow){toggledRow!==self.lastClickedRow&&(!0===self.table.options.selectable||self.isRowSelected(row)?self.toggleRow(toggledRow):self.selectedRows.lengthself.table.options.selectable&&(toggledRows=toggledRows.slice(0,self.table.options.selectable)),self.selectRows(toggledRows)),self.table._clearSelection()}else e.ctrlKey||e.metaKey?(self.toggleRow(row),self.lastClickedRow=row):(self.deselectRows(void 0,!0),self.selectRows(row),self.lastClickedRow=row)})):(element.addEventListener("click",(function(e){self.table.modExists("edit")&&self.table.modules.edit.getCurrentCell()||self.table._clearSelection(),self.selecting||self.toggleRow(row)})),element.addEventListener("mousedown",(function(e){if(e.shiftKey)return self.table._clearSelection(),self.selecting=!0,self.selectPrev=[],document.body.addEventListener("mouseup",endSelect),document.body.addEventListener("keyup",endSelect),self.toggleRow(row),!1})),element.addEventListener("mouseenter",(function(e){self.selecting&&(self.table._clearSelection(),self.toggleRow(row),self.selectPrev[1]==row&&self.toggleRow(self.selectPrev[0]))})),element.addEventListener("mouseout",(function(e){self.selecting&&(self.table._clearSelection(),self.selectPrev.unshift(row))}))))):(element.classList.add("tabulator-unselectable"),element.classList.remove("tabulator-selectable"))},SelectRow.prototype.toggleRow=function(row){this.table.options.selectableCheck.call(this.table,row.getComponent())&&(row.modules.select&&row.modules.select.selected?this._deselectRow(row):this._selectRow(row))},SelectRow.prototype.selectRows=function(rows){var _this75=this,rowMatch;switch(void 0===rows?"undefined":_typeof(rows)){case"undefined":this.table.rowManager.rows.forEach((function(row){_this75._selectRow(row,!0,!0)})),this._rowSelectionChanged();break;case"string":(rowMatch=this.table.rowManager.findRow(rows))?this._selectRow(rowMatch,!0,!0):this.table.rowManager.getRows(rows).forEach((function(row){_this75._selectRow(row,!0,!0)})),this._rowSelectionChanged();break;default:Array.isArray(rows)?(rows.forEach((function(row){_this75._selectRow(row,!0,!0)})),this._rowSelectionChanged()):this._selectRow(rows,!1,!0)}},SelectRow.prototype._selectRow=function(rowInfo,silent,force){var index;if(!isNaN(this.table.options.selectable)&&!0!==this.table.options.selectable&&!force&&this.selectedRows.length>=this.table.options.selectable){if(!this.table.options.selectableRollingSelection)return!1;this._deselectRow(this.selectedRows[0])}var row=this.table.rowManager.findRow(rowInfo);row?-1==this.selectedRows.indexOf(row)&&(row.modules.select||(row.modules.select={}),row.modules.select.selected=!0,row.modules.select.checkboxEl&&(row.modules.select.checkboxEl.checked=!0),row.getElement().classList.add("tabulator-selected"),this.selectedRows.push(row),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(row,!0),silent||this.table.options.rowSelected.call(this.table,row.getComponent()),this._rowSelectionChanged(silent)):silent||console.warn("Selection Error - No such row found, ignoring selection:"+rowInfo)},SelectRow.prototype.isRowSelected=function(row){return-1!==this.selectedRows.indexOf(row)},SelectRow.prototype.deselectRows=function(rows,silent){var self=this,rowCount;if(void 0===rows){rowCount=self.selectedRows.length;for(var _i13=0;_i13-1&&(row.modules.select||(row.modules.select={}),row.modules.select.selected=!1,row.modules.select.checkboxEl&&(row.modules.select.checkboxEl.checked=!1),row.getElement().classList.remove("tabulator-selected"),this.selectedRows.splice(index,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(row,!1),silent||this.table.options.rowDeselected.call(this.table,row.getComponent()),this._rowSelectionChanged(silent)):silent||console.warn("Deselection Error - No such row found, ignoring selection:"+rowInfo)},SelectRow.prototype.getSelectedData=function(){var data=[];return this.selectedRows.forEach((function(row){data.push(row.getData())})),data},SelectRow.prototype.getSelectedRows=function(){var rows=[];return this.selectedRows.forEach((function(row){rows.push(row.getComponent())})),rows},SelectRow.prototype._rowSelectionChanged=function(silent){this.headerCheckboxElement&&(0===this.selectedRows.length?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),silent||this.table.options.rowSelectionChanged.call(this.table,this.getSelectedData(),this.getSelectedRows())},SelectRow.prototype.registerRowSelectCheckbox=function(row,element){row._row.modules.select||(row._row.modules.select={}),row._row.modules.select.checkboxEl=element},SelectRow.prototype.registerHeaderSelectCheckbox=function(element){this.headerCheckboxElement=element},SelectRow.prototype.childRowSelection=function(row,select){var children=this.table.modules.dataTree.getChildren(row);if(select)for(var _iterator2=children,_isArray2=Array.isArray(_iterator2),_i14=0,_iterator2=_isArray2?_iterator2:_iterator2[Symbol.iterator]();;){var _ref2;if(_isArray2){if(_i14>=_iterator2.length)break;_ref2=_iterator2[_i14++]}else{if((_i14=_iterator2.next()).done)break;_ref2=_i14.value}var child=_ref2;this._selectRow(child,!0)}else for(var _iterator3=children,_isArray3=Array.isArray(_iterator3),_i15=0,_iterator3=_isArray3?_iterator3:_iterator3[Symbol.iterator]();;){var _ref3;if(_isArray3){if(_i15>=_iterator3.length)break;_ref3=_iterator3[_i15++]}else{if((_i15=_iterator3.next()).done)break;_ref3=_i15.value}var _child=_ref3;this._deselectRow(_child,!0)}},Tabulator.prototype.registerModule("selectRow",SelectRow);var Sort=function Sort(table){this.table=table,this.sortList=[],this.changed=!1};Sort.prototype.initializeColumn=function(column,content){var self=this,sorter=!1,colEl,arrowEl;switch(_typeof(column.definition.sorter)){case"string":self.sorters[column.definition.sorter]?sorter=self.sorters[column.definition.sorter]:console.warn("Sort Error - No such sorter found: ",column.definition.sorter);break;case"function":sorter=column.definition.sorter}column.modules.sort={sorter:sorter,dir:"none",params:column.definition.sorterParams||{},startingDir:column.definition.headerSortStartingDir||"asc",tristate:void 0!==column.definition.headerSortTristate?column.definition.headerSortTristate:this.table.options.headerSortTristate},(void 0===column.definition.headerSort?!1!==this.table.options.headerSort:!1!==column.definition.headerSort)&&((colEl=column.getElement()).classList.add("tabulator-sortable"),(arrowEl=document.createElement("div")).classList.add("tabulator-arrow"),content.appendChild(arrowEl),colEl.addEventListener("click",(function(e){var dir="",sorters=[],match=!1;if(column.modules.sort){if(column.modules.sort.tristate)dir="none"==column.modules.sort.dir?column.modules.sort.startingDir:column.modules.sort.dir==column.modules.sort.startingDir?"asc"==column.modules.sort.dir?"desc":"asc":"none";else switch(column.modules.sort.dir){case"asc":dir="desc";break;case"desc":dir="asc";break;default:dir=column.modules.sort.startingDir}self.table.options.columnHeaderSortMulti&&(e.shiftKey||e.ctrlKey)?((match=(sorters=self.getSort()).findIndex((function(sorter){return sorter.field===column.getField()})))>-1?(sorters[match].dir=dir,match!=sorters.length-1&&(match=sorters.splice(match,1)[0],"none"!=dir&&sorters.push(match))):"none"!=dir&&sorters.push({column:column,dir:dir}),self.setSort(sorters)):"none"==dir?self.clear():self.setSort(column,dir),self.table.rowManager.sorterRefresh(!self.sortList.length)}})))},Sort.prototype.hasChanged=function(){var changed=this.changed;return this.changed=!1,changed},Sort.prototype.getSort=function(){var self=this,sorters=[];return this.sortList.forEach((function(item){item.column&&sorters.push({column:item.column.getComponent(),field:item.column.getField(),dir:item.dir})})),sorters},Sort.prototype.setSort=function(sortList,dir){var self=this,newSortList=[];Array.isArray(sortList)||(sortList=[{column:sortList,dir:dir}]),sortList.forEach((function(item){var column;(column=self.table.columnManager.findColumn(item.column))?(item.column=column,newSortList.push(item),self.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",item.column)})),self.sortList=newSortList,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.sort&&this.table.modules.persistence.save("sort")},Sort.prototype.clear=function(){this.setSort([])},Sort.prototype.findSorter=function(column){var row=this.table.rowManager.activeRows[0],sorter="string",field,value;if(row&&(row=row.getData(),field=column.getField()))switch(void 0===(value=column.getFieldValue(row))?"undefined":_typeof(value)){case"undefined":sorter="string";break;case"boolean":sorter="boolean";break;default:isNaN(value)||""===value?value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(sorter="alphanum"):sorter="number"}return this.sorters[sorter]},Sort.prototype.sort=function(data){var self=this,sortList=this.table.options.sortOrderReverse?self.sortList.slice().reverse():self.sortList,sortListActual=[],rowComponents=[],lastSort;self.table.options.dataSorting&&self.table.options.dataSorting.call(self.table,self.getSort()),self.clearColumnHeaders(),self.table.options.ajaxSorting?sortList.forEach((function(item,i){self.setColumnHeader(item.column,item.dir)})):(sortList.forEach((function(item,i){var sortObj=item.column.modules.sort;item.column&&sortObj&&(sortObj.sorter||(sortObj.sorter=self.findSorter(item.column)),item.params="function"==typeof sortObj.params?sortObj.params(item.column.getComponent(),item.dir):sortObj.params,sortListActual.push(item)),self.setColumnHeader(item.column,item.dir)})),sortListActual.length&&self._sortItems(data,sortListActual)),self.table.options.dataSorted&&(data.forEach((function(row){rowComponents.push(row.getComponent())})),self.table.options.dataSorted.call(self.table,self.getSort(),rowComponents))},Sort.prototype.clearColumnHeaders=function(){this.table.columnManager.getRealColumns().forEach((function(column){column.modules.sort&&(column.modules.sort.dir="none",column.getElement().setAttribute("aria-sort","none"))}))},Sort.prototype.setColumnHeader=function(column,dir){column.modules.sort.dir=dir,column.getElement().setAttribute("aria-sort",dir)},Sort.prototype._sortItems=function(data,sortList){var _this76=this,sorterCount=sortList.length-1;data.sort((function(a,b){for(var result,i=sorterCount;i>=0;i--){var sortItem=sortList[i];if(0!==(result=_this76._sortRow(a,b,sortItem.column,sortItem.dir,sortItem.params)))break}return result}))},Sort.prototype._sortRow=function(a,b,column,dir,params){var el1Comp,el2Comp,colComp,el1="asc"==dir?a:b,el2="asc"==dir?b:a;return a=void 0!==(a=column.getFieldValue(el1.getData()))?a:"",b=void 0!==(b=column.getFieldValue(el2.getData()))?b:"",el1Comp=el1.getComponent(),el2Comp=el2.getComponent(),column.modules.sort.sorter.call(this,a,b,el1Comp,el2Comp,column.getComponent(),dir,params)},Sort.prototype.sorters={number:function number(a,b,aRow,bRow,column,dir,params){var alignEmptyValues=params.alignEmptyValues,decimal=params.decimalSeparator||".",thousand=params.thousandSeparator||",",emptyAlign=0;if(a=parseFloat(String(a).split(thousand).join("").split(decimal).join(".")),b=parseFloat(String(b).split(thousand).join("").split(decimal).join(".")),isNaN(a))emptyAlign=isNaN(b)?0:-1;else{if(!isNaN(b))return a-b;emptyAlign=1}return("top"===alignEmptyValues&&"desc"===dir||"bottom"===alignEmptyValues&&"asc"===dir)&&(emptyAlign*=-1),emptyAlign},string:function string(a,b,aRow,bRow,column,dir,params){var alignEmptyValues=params.alignEmptyValues,emptyAlign=0,locale;if(a){if(b){switch(_typeof(params.locale)){case"boolean":params.locale&&(locale=this.table.modules.localize.getLocale());break;case"string":locale=params.locale}return String(a).toLowerCase().localeCompare(String(b).toLowerCase(),locale)}emptyAlign=1}else emptyAlign=b?-1:0;return("top"===alignEmptyValues&&"desc"===dir||"bottom"===alignEmptyValues&&"asc"===dir)&&(emptyAlign*=-1),emptyAlign},date:function date(a,b,aRow,bRow,column,dir,params){return params.format||(params.format="DD/MM/YYYY"),this.sorters.datetime.call(this,a,b,aRow,bRow,column,dir,params)},time:function time(a,b,aRow,bRow,column,dir,params){return params.format||(params.format="HH:mm"),this.sorters.datetime.call(this,a,b,aRow,bRow,column,dir,params)},datetime:function datetime(a,b,aRow,bRow,column,dir,params){var format=params.format||"DD/MM/YYYY HH:mm:ss",alignEmptyValues=params.alignEmptyValues,emptyAlign=0;if("undefined"!=typeof moment){if(a=moment(a,format),b=moment(b,format),a.isValid()){if(b.isValid())return a-b;emptyAlign=1}else emptyAlign=b.isValid()?-1:0;return("top"===alignEmptyValues&&"desc"===dir||"bottom"===alignEmptyValues&&"asc"===dir)&&(emptyAlign*=-1),emptyAlign}console.error("Sort Error - 'datetime' sorter is dependant on moment.js")},boolean:function boolean(a,b,aRow,bRow,column,dir,params){var el1,el2;return(!0===a||"true"===a||"True"===a||1===a?1:0)-(!0===b||"true"===b||"True"===b||1===b?1:0)},array:function array(a,b,aRow,bRow,column,dir,params){var el1=0,el2=0,type=params.type||"length",alignEmptyValues=params.alignEmptyValues,emptyAlign=0;function calc(value){switch(type){case"length":return value.length;case"sum":return value.reduce((function(c,d){return c+d}));case"max":return Math.max.apply(null,value);case"min":return Math.min.apply(null,value);case"avg":return value.reduce((function(c,d){return c+d}))/value.length}}if(Array.isArray(a)){if(Array.isArray(b))return(el1=a?calc(a):0)-(el2=b?calc(b):0);alignEmptyValues=1}else alignEmptyValues=Array.isArray(b)?-1:0;return("top"===alignEmptyValues&&"desc"===dir||"bottom"===alignEmptyValues&&"asc"===dir)&&(emptyAlign*=-1),emptyAlign},exists:function exists(a,b,aRow,bRow,column,dir,params){var el1,el2;return(void 0===a?0:1)-(void 0===b?0:1)},alphanum:function alphanum(as,bs,aRow,bRow,column,dir,params){var a,b,a1,b1,i=0,L,rx=/(\d+)|(\D+)/g,rd=/\d/,alignEmptyValues=params.alignEmptyValues,emptyAlign=0;if(as||0===as){if(bs||0===bs){if(isFinite(as)&&isFinite(bs))return as-bs;if((a=String(as).toLowerCase())===(b=String(bs).toLowerCase()))return 0;if(!rd.test(a)||!rd.test(b))return a>b?1:-1;for(a=a.match(rx),b=b.match(rx),L=a.length>b.length?b.length:a.length;ib1?1:-1;return a.length>b.length}emptyAlign=1}else emptyAlign=bs||0===bs?-1:0;return("top"===alignEmptyValues&&"desc"===dir||"bottom"===alignEmptyValues&&"asc"===dir)&&(emptyAlign*=-1),emptyAlign}},Tabulator.prototype.registerModule("sort",Sort);var Validate=function Validate(table){this.table=table,this.invalidCells=[]};return Validate.prototype.initializeColumn=function(column){var self=this,config=[],validator;column.definition.validator&&(Array.isArray(column.definition.validator)?column.definition.validator.forEach((function(item){(validator=self._extractValidator(item))&&config.push(validator)})):(validator=this._extractValidator(column.definition.validator))&&config.push(validator),column.modules.validate=!!config.length&&config)},Validate.prototype._extractValidator=function(value){var type,params,pos;switch(void 0===value?"undefined":_typeof(value)){case"string":return(pos=value.indexOf(":"))>-1?(type=value.substring(0,pos),params=value.substring(pos+1)):type=value,this._buildValidator(type,params);case"function":return this._buildValidator(value);case"object":return this._buildValidator(value.type,value.parameters)}},Validate.prototype._buildValidator=function(type,params){var func="function"==typeof type?type:this.validators[type];return func?{type:"function"==typeof type?"function":type,func:func,params:params}:(console.warn("Validator Setup Error - No matching validator found:",type),!1)},Validate.prototype.validate=function(validators,cell,value){var self=this,valid=[],invalidIndex=this.invalidCells.indexOf(cell);return validators&&validators.forEach((function(item){item.func.call(self,cell.getComponent(),value,item.params)||valid.push({type:item.type,parameters:item.params})})),valid=!valid.length||valid,cell.modules.validate||(cell.modules.validate={}),!0===valid?(cell.modules.validate.invalid=!1,cell.getElement().classList.remove("tabulator-validation-fail"),invalidIndex>-1&&this.invalidCells.splice(invalidIndex,1)):(cell.modules.validate.invalid=!0,"manual"!==this.table.options.validationMode&&cell.getElement().classList.add("tabulator-validation-fail"),-1==invalidIndex&&this.invalidCells.push(cell)),valid},Validate.prototype.getInvalidCells=function(){var output=[];return this.invalidCells.forEach((function(cell){output.push(cell.getComponent())})),output},Validate.prototype.clearValidation=function(cell){var invalidIndex;cell.modules.validate&&cell.modules.validate.invalid&&(cell.element.classList.remove("tabulator-validation-fail"),cell.modules.validate.invalid=!1,(invalidIndex=this.invalidCells.indexOf(cell))>-1&&this.invalidCells.splice(invalidIndex,1))},Validate.prototype.validators={integer:function integer(cell,value,parameters){return""===value||null==value||"number"==typeof(value=Number(value))&&isFinite(value)&&Math.floor(value)===value},float:function float(cell,value,parameters){return""===value||null==value||"number"==typeof(value=Number(value))&&isFinite(value)&&value%1!=0},numeric:function numeric(cell,value,parameters){return""===value||null==value||!isNaN(value)},string:function string(cell,value,parameters){return""===value||null==value||isNaN(value)},max:function max(cell,value,parameters){return""===value||null==value||parseFloat(value)<=parameters},min:function min(cell,value,parameters){return""===value||null==value||parseFloat(value)>=parameters},starts:function starts(cell,value,parameters){return""===value||null==value||String(value).toLowerCase().startsWith(String(parameters).toLowerCase())},ends:function ends(cell,value,parameters){return""===value||null==value||String(value).toLowerCase().endsWith(String(parameters).toLowerCase())},minLength:function minLength(cell,value,parameters){return""===value||null==value||String(value).length>=parameters},maxLength:function maxLength(cell,value,parameters){return""===value||null==value||String(value).length<=parameters},in:function _in(cell,value,parameters){return""===value||null==value||("string"==typeof parameters&&(parameters=parameters.split("|")),""===value||parameters.indexOf(value)>-1)},regex:function regex(cell,value,parameters){return""===value||null==value||new RegExp(parameters).test(value);var reg},unique:function unique(cell,value,parameters){if(""===value||null==value)return!0;var unique=!0,cellData=cell.getData(),column=cell.getColumn()._getSelf();return this.table.rowManager.rows.forEach((function(row){var data=row.getData();data!==cellData&&value==column.getFieldValue(data)&&(unique=!1)})),unique},required:function required(cell,value,parameters){return""!==value&&null!=value}},Tabulator.prototype.registerModule("validate",Validate),Tabulator})); \ No newline at end of file diff --git a/admin/js/vendors/tabulator/js/tabulator.min.orig.js b/admin/js/vendors/tabulator/js/tabulator.min.orig.js new file mode 100644 index 0000000..74f4780 --- /dev/null +++ b/admin/js/vendors/tabulator/js/tabulator.min.orig.js @@ -0,0 +1,12 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(e,t){"object"===("undefined"==typeof exports?"undefined":_typeof(exports))&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Tabulator=t()}(this,function(){"use strict";Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function(e){if(null==this)throw new TypeError('"this" is null or not defined');var t=Object(this),o=t.length>>>0;if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n>>0;if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n>>0;if(0===i)return!1;for(var n=0|t,s=Math.max(n>=0?n:i-Math.abs(n),0);so?(t=e-o,this.element.style.marginLeft=-t+"px"):this.element.style.marginLeft=0,this.scrollLeft=e,this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.scrollHorizontal()},t.prototype.generateColumnsFromRowData=function(e){var t,o,i=[];if(e&&e.length){t=e[0];for(var n in t){var s={field:n,title:n},r=t[n];switch(void 0===r?"undefined":_typeof(r)){case"undefined":o="string";break;case"boolean":o="boolean";break;case"object":o=Array.isArray(r)?"array":"string";break;default:o=isNaN(r)||""===r?r.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?"alphanum":"string":"number"}s.sorter=o,i.push(s)}this.table.options.columns=i,this.setColumns(this.table.options.columns)}},t.prototype.setColumns=function(e,t){for(var o=this;o.headersElement.firstChild;)o.headersElement.removeChild(o.headersElement.firstChild);o.columns=[],o.columnsByIndex=[],o.columnsByField={},o.table.modExists("frozenColumns")&&o.table.modules.frozenColumns.reset(),e.forEach(function(e,t){o._addColumn(e)}),o._reIndexColumns(),o.table.options.responsiveLayout&&o.table.modExists("responsiveLayout",!0)&&o.table.modules.responsiveLayout.initialize(),o.redraw(!0)},t.prototype._addColumn=function(e,t,o){var i=new n(e,this),s=i.getElement(),r=o?this.findColumnIndex(o):o;if(o&&r>-1){var a=this.columns.indexOf(o.getTopColumn()),l=o.getElement();t?(this.columns.splice(a,0,i),l.parentNode.insertBefore(s,l)):(this.columns.splice(a+1,0,i),l.parentNode.insertBefore(s,l.nextSibling))}else t?(this.columns.unshift(i),this.headersElement.insertBefore(i.getElement(),this.headersElement.firstChild)):(this.columns.push(i),this.headersElement.appendChild(i.getElement())),i.columnRendered();return i},t.prototype.registerColumnField=function(e){e.definition.field&&(this.columnsByField[e.definition.field]=e)},t.prototype.registerColumnPosition=function(e){this.columnsByIndex.push(e)},t.prototype._reIndexColumns=function(){this.columnsByIndex=[],this.columns.forEach(function(e){e.reRegisterPosition()})},t.prototype._verticalAlignHeaders=function(){var e=this,t=0;e.columns.forEach(function(e){var o;e.clearVerticalAlign(),(o=e.getHeight())>t&&(t=o)}),e.columns.forEach(function(o){o.verticalAlign(e.table.options.columnHeaderVertAlign,t)}),e.rowManager.adjustTableSize()},t.prototype.findColumn=function(e){var t=this;if("object"!=(void 0===e?"undefined":_typeof(e)))return this.columnsByField[e]||!1;if(e instanceof n)return e;if(e instanceof o)return e._getSelf()||!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement){return t.columns.find(function(t){return t.element===e})||!1}return!1},t.prototype.getColumnByField=function(e){return this.columnsByField[e]},t.prototype.getColumnsByFieldRoot=function(e){var t=this,o=[];return Object.keys(this.columnsByField).forEach(function(i){i.split(".")[0]===e&&o.push(t.columnsByField[i])}),o},t.prototype.getColumnByIndex=function(e){return this.columnsByIndex[e]},t.prototype.getFirstVisibileColumn=function(e){var e=this.columnsByIndex.findIndex(function(e){return e.visible});return e>-1&&this.columnsByIndex[e]},t.prototype.getColumns=function(){return this.columns},t.prototype.findColumnIndex=function(e){return this.columnsByIndex.findIndex(function(t){return e===t})},t.prototype.getRealColumns=function(){return this.columnsByIndex},t.prototype.traverse=function(e){this.columnsByIndex.forEach(function(t,o){e(t,o)})},t.prototype.getDefinitions=function(e){var t=this,o=[];return t.columnsByIndex.forEach(function(t){(!e||e&&t.visible)&&o.push(t.getDefinition())}),o},t.prototype.getDefinitionTree=function(){var e=this,t=[];return e.columns.forEach(function(e){t.push(e.getDefinition(!0))}),t},t.prototype.getComponents=function(e){var t=this,o=[];return(e?t.columns:t.columnsByIndex).forEach(function(e){o.push(e.getComponent())}),o},t.prototype.getWidth=function(){var e=0;return this.columnsByIndex.forEach(function(t){t.visible&&(e+=t.getWidth())}),e},t.prototype.moveColumn=function(e,t,o){this.moveColumnActual(e,t,o),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),t.element.parentNode.insertBefore(e.element,t.element),o&&t.element.parentNode.insertBefore(t.element,e.element),this._verticalAlignHeaders(),this.table.rowManager.reinitialize()},t.prototype.moveColumnActual=function(e,t,o){e.parent.isGroup?this._moveColumnInArray(e.parent.columns,e,t,o):this._moveColumnInArray(this.columns,e,t,o),this._moveColumnInArray(this.columnsByIndex,e,t,o,!0),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.options.columnMoved&&this.table.options.columnMoved.call(this.table,e.getComponent(),this.table.columnManager.getComponents()),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns")},t.prototype._moveColumnInArray=function(e,t,o,i,n){var s,r=e.indexOf(t);r>-1&&(e.splice(r,1),s=e.indexOf(o),s>-1?i&&(s+=1):s=r,e.splice(s,0,t),n&&this.table.rowManager.rows.forEach(function(e){if(e.cells.length){var t=e.cells.splice(r,1)[0];e.cells.splice(s,0,t)}}))},t.prototype.scrollToColumn=function(e,t,o){var i=this,n=0,s=0,r=0,a=e.getElement();return new Promise(function(l,c){if(void 0===t&&(t=i.table.options.scrollToColumnPosition),void 0===o&&(o=i.table.options.scrollToColumnIfVisible),e.visible){switch(t){case"middle":case"center":r=-i.element.clientWidth/2;break;case"right":r=a.clientWidth-i.headersElement.clientWidth}if(!o&&(s=a.offsetLeft)>0&&s+a.offsetWidthe.rowManager.element.clientHeight&&(t-=e.rowManager.element.offsetWidth-e.rowManager.element.clientWidth),this.columnsByIndex.forEach(function(i){var n,s,r;i.visible&&(n=i.definition.width||0,s=void 0===i.minWidth?e.table.options.columnMinWidth:parseInt(i.minWidth),r="string"==typeof n?n.indexOf("%")>-1?t/100*parseInt(n):parseInt(n):n,o+=r>s?r:s)}),o},t.prototype.addColumn=function(e,t,o){var i=this;return new Promise(function(n,s){var r=i._addColumn(e,t,o);i._reIndexColumns(),i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout",!0)&&i.table.modules.responsiveLayout.initialize(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.redraw(),"fitColumns"!=i.table.modules.layout.getMode()&&r.reinitializeWidth(),i._verticalAlignHeaders(),i.table.rowManager.reinitialize(),n(r)})},t.prototype.deregisterColumn=function(e){var t,o=e.getField();o&&delete this.columnsByField[o],t=this.columnsByIndex.indexOf(e),t>-1&&this.columnsByIndex.splice(t,1),t=this.columns.indexOf(e),t>-1&&this.columns.splice(t,1),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.redraw()},t.prototype.redraw=function(e){e&&(d.prototype.helpers.elVisible(this.element)&&this._verticalAlignHeaders(),this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),["fitColumns","fitDataStretch"].indexOf(this.table.modules.layout.getMode())>-1?this.table.modules.layout.layout():e?this.table.modules.layout.layout():this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),e&&(this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.redraw()),this.table.footerManager.redraw()};var o=function(e){this._column=e,this.type="ColumnComponent"};o.prototype.getElement=function(){return this._column.getElement()},o.prototype.getDefinition=function(){return this._column.getDefinition()},o.prototype.getField=function(){return this._column.getField()},o.prototype.getCells=function(){var e=[];return this._column.cells.forEach(function(t){e.push(t.getComponent())}),e},o.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._column.visible},o.prototype.isVisible=function(){return this._column.visible},o.prototype.show=function(){this._column.isGroup?this._column.columns.forEach(function(e){e.show()}):this._column.show()},o.prototype.hide=function(){this._column.isGroup?this._column.columns.forEach(function(e){e.hide()}):this._column.hide()},o.prototype.toggle=function(){this._column.visible?this.hide():this.show()},o.prototype.delete=function(){return this._column.delete()},o.prototype.getSubColumns=function(){var e=[];return this._column.columns.length&&this._column.columns.forEach(function(t){e.push(t.getComponent())}),e},o.prototype.getParentColumn=function(){return this._column.parent instanceof n&&this._column.parent.getComponent()},o.prototype._getSelf=function(){return this._column},o.prototype.scrollTo=function(){return this._column.table.columnManager.scrollToColumn(this._column)},o.prototype.getTable=function(){return this._column.table},o.prototype.headerFilterFocus=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterFocus(this._column)},o.prototype.reloadHeaderFilter=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.reloadHeaderFilter(this._column)},o.prototype.getHeaderFilterValue=function(){if(this._column.table.modExists("filter",!0))return this._column.table.modules.filter.getHeaderFilterValue(this._column)},o.prototype.setHeaderFilterValue=function(e){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterValue(this._column,e)},o.prototype.move=function(e,t){var o=this._column.table.columnManager.findColumn(e);o?this._column.table.columnManager.moveColumn(this._column,o,t):console.warn("Move Error - No matching column found:",o)},o.prototype.getNextColumn=function(){var e=this._column.nextColumn();return!!e&&e.getComponent()},o.prototype.getPrevColumn=function(){var e=this._column.prevColumn();return!!e&&e.getComponent()},o.prototype.updateDefinition=function(e){return this._column.updateDefinition(e)},o.prototype.getWidth=function(){return this._column.getWidth()},o.prototype.setWidth=function(e){return!0===e?this._column.reinitializeWidth(!0):this._column.setWidth(e)},o.prototype.validate=function(){return this._column.validate()};var n=function e(t,o){var i=this;this.table=o.table,this.definition=t,this.parent=o,this.type="column",this.columns=[],this.cells=[],this.element=this.createElement(),this.contentElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.isGroup=!1,this.tooltip=!1,this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleFormatterRendered=!1,this.setField(this.definition.field),this.table.options.invalidOptionWarnings&&this.checkDefinition(),this.modules={},this.cellEvents={cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1},this.width=null,this.widthStyled="",this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this._mapDepricatedFunctionality(),t.columns?(this.isGroup=!0,t.columns.forEach(function(t,o){var n=new e(t,i);i.attachColumn(n)}),i.checkColumnVisibility()):o.registerColumnField(this),t.rowHandle&&!1!==this.table.options.movableRows&&this.table.modExists("moveRow")&&this.table.modules.moveRow.setHandle(!0),this._buildHeader(),this.bindModuleColumns()};n.prototype.createElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.setAttribute("role","columnheader"),e.setAttribute("aria-sort","none"),e},n.prototype.createGroupElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-col-group-cols"),e},n.prototype.checkDefinition=function(){var e=this;Object.keys(this.definition).forEach(function(t){-1===e.defaultOptionList.indexOf(t)&&console.warn("Invalid column definition option in '"+(e.field||e.definition.title)+"' column:",t)})},n.prototype.setField=function(e){this.field=e,this.fieldStructure=e?this.table.options.nestedFieldSeparator?e.split(this.table.options.nestedFieldSeparator):[e]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData},n.prototype.registerColumnPosition=function(e){this.parent.registerColumnPosition(e)},n.prototype.registerColumnField=function(e){this.parent.registerColumnField(e)},n.prototype.reRegisterPosition=function(){this.isGroup?this.columns.forEach(function(e){e.reRegisterPosition()}):this.registerColumnPosition(this)},n.prototype._mapDepricatedFunctionality=function(){void 0!==this.definition.hideInHtml&&(this.definition.htmlOutput=!this.definition.hideInHtml,console.warn("hideInHtml column definition property is deprecated, you should now use htmlOutput")),void 0!==this.definition.align&&(this.definition.hozAlign=this.definition.align,console.warn("align column definition property is deprecated, you should now use hozAlign")),void 0!==this.definition.downloadTitle&&(this.definition.titleDownload=this.definition.downloadTitle,console.warn("downloadTitle definition property is deprecated, you should now use titleDownload"))},n.prototype.setTooltip=function(){var e=this,t=e.definition,o=t.headerTooltip||!1===t.tooltip?t.headerTooltip:e.table.options.tooltipsHeader;o?!0===o?t.field?e.table.modules.localize.bind("columns|"+t.field,function(o){e.element.setAttribute("title",o||t.title)}):e.element.setAttribute("title",t.title):("function"==typeof o&&!1===(o=o(e.getComponent()))&&(o=""),e.element.setAttribute("title",o)):e.element.setAttribute("title","")},n.prototype._buildHeader=function(){for(var e=this,t=e.definition;e.element.firstChild;)e.element.removeChild(e.element.firstChild);t.headerVertical&&(e.element.classList.add("tabulator-col-vertical"),"flip"===t.headerVertical&&e.element.classList.add("tabulator-col-vertical-flip")),e.contentElement=e._bindEvents(),e.contentElement=e._buildColumnHeaderContent(),e.element.appendChild(e.contentElement),e.isGroup?e._buildGroupHeader():e._buildColumnHeader(),e.setTooltip(),e.table.options.resizableColumns&&e.table.modExists("resizeColumns")&&e.table.modules.resizeColumns.initializeColumn("header",e,e.element),t.headerFilter&&e.table.modExists("filter")&&e.table.modExists("edit")&&(void 0!==t.headerFilterPlaceholder&&t.field&&e.table.modules.localize.setHeaderFilterColumnPlaceholder(t.field,t.headerFilterPlaceholder),e.table.modules.filter.initializeColumn(e)),e.table.modExists("frozenColumns")&&e.table.modules.frozenColumns.initializeColumn(e),e.table.options.movableColumns&&!e.isGroup&&e.table.modExists("moveColumn")&&e.table.modules.moveColumn.initializeColumn(e),(t.topCalc||t.bottomCalc)&&e.table.modExists("columnCalcs")&&e.table.modules.columnCalcs.initializeColumn(e),e.table.modExists("persistence")&&e.table.modules.persistence.config.columns&&e.table.modules.persistence.initializeColumn(e),e.element.addEventListener("mouseenter",function(t){e.setTooltip()})},n.prototype._bindEvents=function(){var e,t,o,i=this,n=i.definition;"function"==typeof n.headerClick&&i.element.addEventListener("click",function(e){n.headerClick(e,i.getComponent())}),"function"==typeof n.headerDblClick&&i.element.addEventListener("dblclick",function(e){n.headerDblClick(e,i.getComponent())}),"function"==typeof n.headerContext&&i.element.addEventListener("contextmenu",function(e){n.headerContext(e,i.getComponent())}),"function"==typeof n.headerTap&&(o=!1,i.element.addEventListener("touchstart",function(e){o=!0},{passive:!0}),i.element.addEventListener("touchend",function(e){o&&n.headerTap(e,i.getComponent()),o=!1})),"function"==typeof n.headerDblTap&&(e=null,i.element.addEventListener("touchend",function(t){e?(clearTimeout(e),e=null,n.headerDblTap(t,i.getComponent())):e=setTimeout(function(){clearTimeout(e),e=null},300)})),"function"==typeof n.headerTapHold&&(t=null,i.element.addEventListener("touchstart",function(e){clearTimeout(t),t=setTimeout(function(){clearTimeout(t),t=null,o=!1,n.headerTapHold(e,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(e){clearTimeout(t),t=null})),"function"==typeof n.cellClick&&(i.cellEvents.cellClick=n.cellClick),"function"==typeof n.cellDblClick&&(i.cellEvents.cellDblClick=n.cellDblClick),"function"==typeof n.cellContext&&(i.cellEvents.cellContext=n.cellContext),"function"==typeof n.cellMouseEnter&&(i.cellEvents.cellMouseEnter=n.cellMouseEnter),"function"==typeof n.cellMouseLeave&&(i.cellEvents.cellMouseLeave=n.cellMouseLeave),"function"==typeof n.cellMouseOver&&(i.cellEvents.cellMouseOver=n.cellMouseOver),"function"==typeof n.cellMouseOut&&(i.cellEvents.cellMouseOut=n.cellMouseOut),"function"==typeof n.cellMouseMove&&(i.cellEvents.cellMouseMove=n.cellMouseMove),"function"==typeof n.cellTap&&(i.cellEvents.cellTap=n.cellTap),"function"==typeof n.cellDblTap&&(i.cellEvents.cellDblTap=n.cellDblTap),"function"==typeof n.cellTapHold&&(i.cellEvents.cellTapHold=n.cellTapHold),"function"==typeof n.cellEdited&&(i.cellEvents.cellEdited=n.cellEdited),"function"==typeof n.cellEditing&&(i.cellEvents.cellEditing=n.cellEditing),"function"==typeof n.cellEditCancelled&&(i.cellEvents.cellEditCancelled=n.cellEditCancelled)},n.prototype._buildColumnHeader=function(){var e=this,t=e.definition,o=e.table;if(o.modExists("sort")&&o.modules.sort.initializeColumn(e,e.contentElement),(t.headerContextMenu||t.headerMenu)&&o.modExists("menu")&&o.modules.menu.initializeColumnHeader(e),o.modExists("format")&&o.modules.format.initializeColumn(e),void 0!==t.editor&&o.modExists("edit")&&o.modules.edit.initializeColumn(e),void 0!==t.validator&&o.modExists("validate")&&o.modules.validate.initializeColumn(e),o.modExists("mutator")&&o.modules.mutator.initializeColumn(e),o.modExists("accessor")&&o.modules.accessor.initializeColumn(e),_typeof(o.options.responsiveLayout)&&o.modExists("responsiveLayout")&&o.modules.responsiveLayout.initializeColumn(e),void 0!==t.visible&&(t.visible?e.show(!0):e.hide(!0)),t.cssClass){t.cssClass.split(" ").forEach(function(t){e.element.classList.add(t)})}t.field&&this.element.setAttribute("tabulator-field",t.field),e.setMinWidth(void 0===t.minWidth?e.table.options.columnMinWidth:parseInt(t.minWidth)),e.reinitializeWidth(),e.tooltip=e.definition.tooltip||!1===e.definition.tooltip?e.definition.tooltip:e.table.options.tooltips,e.hozAlign=void 0===e.definition.hozAlign?e.table.options.cellHozAlign:e.definition.hozAlign,e.vertAlign=void 0===e.definition.vertAlign?e.table.options.cellVertAlign:e.definition.vertAlign},n.prototype._buildColumnHeaderContent=function(){var e=(this.definition,this.table,document.createElement("div"));return e.classList.add("tabulator-col-content"),this.titleElement=this._buildColumnHeaderTitle(),e.appendChild(this.titleElement),e},n.prototype._buildColumnHeaderTitle=function(){var e=this,t=e.definition,o=e.table,i=document.createElement("div");if(i.classList.add("tabulator-col-title"),t.editableTitle){var n=document.createElement("input");n.classList.add("tabulator-title-editor"),n.addEventListener("click",function(e){e.stopPropagation(),n.focus()}),n.addEventListener("change",function(){t.title=n.value,o.options.columnTitleChanged.call(e.table,e.getComponent())}),i.appendChild(n),t.field?o.modules.localize.bind("columns|"+t.field,function(e){n.value=e||t.title||" "}):n.value=t.title||" "}else t.field?o.modules.localize.bind("columns|"+t.field,function(o){e._formatColumnHeaderTitle(i,o||t.title||" ")}):e._formatColumnHeaderTitle(i,t.title||" ");return i},n.prototype._formatColumnHeaderTitle=function(e,t){var o,i,n,s,r,a=this;if(this.definition.titleFormatter&&this.table.modExists("format"))switch(o=this.table.modules.format.getFormatter(this.definition.titleFormatter),r=function(e){a.titleFormatterRendered=e},s={getValue:function(){return t},getElement:function(){return e}},n=this.definition.titleFormatterParams||{},n="function"==typeof n?n():n,i=o.call(this.table.modules.format,s,n,r),void 0===i?"undefined":_typeof(i)){case"object":i instanceof Node?e.appendChild(i):(e.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",i));break;case"undefined":case"null":e.innerHTML="";break;default:e.innerHTML=i}else e.innerHTML=t},n.prototype._buildGroupHeader=function(){var e=this;if(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass){this.definition.cssClass.split(" ").forEach(function(t){e.element.classList.add(t)})}(this.definition.headerContextMenu||this.definition.headerMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeColumnHeader(this),this.element.appendChild(this.groupElement)},n.prototype._getFlatData=function(e){return e[this.field]},n.prototype._getNestedData=function(e){for(var t,o=e,i=this.fieldStructure,n=i.length,s=0;s-1&&this._nextVisibleColumn(e+1)},n.prototype._nextVisibleColumn=function(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._nextVisibleColumn(e+1)},n.prototype.prevColumn=function(){var e=this.table.columnManager.findColumnIndex(this);return e>-1&&this._prevVisibleColumn(e-1)},n.prototype._prevVisibleColumn=function(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._prevVisibleColumn(e-1)},n.prototype.reinitializeWidth=function(e){this.widthFixed=!1, +void 0===this.definition.width||e||this.setWidth(this.definition.width),this.table.modExists("filter")&&this.table.modules.filter.hideHeaderFilterElements(),this.fitToData(),this.table.modExists("filter")&&this.table.modules.filter.showHeaderFilterElements()},n.prototype.fitToData=function(){var e=this;this.widthFixed||(this.element.style.width="",e.cells.forEach(function(e){e.clearWidth()}));var t=this.element.offsetWidth;e.width&&this.widthFixed||(e.cells.forEach(function(e){var o=e.getWidth();o>t&&(t=o)}),t&&e.setWidthActual(t+1))},n.prototype.updateDefinition=function(e){var t=this;return new Promise(function(o,i){var n;t.isGroup?(console.warn("Column Update Error - The updateDefintion function is only available on columns, not column groups"),i("Column Update Error - The updateDefintion function is only available on columns, not column groups")):(n=Object.assign({},t.getDefinition()),n=Object.assign(n,e),t.table.columnManager.addColumn(n,!1,t).then(function(e){n.field==t.field&&(t.field=!1),t.delete().then(function(){o(e.getComponent())}).catch(function(e){i(e)})}).catch(function(e){i(e)}))})},n.prototype.deleteCell=function(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)},n.prototype.defaultOptionList=["title","field","columns","visible","align","hozAlign","vertAlign","width","minWidth","widthGrow","widthShrink","resizable","frozen","responsive","tooltip","cssClass","rowHandle","hideInHtml","print","htmlOutput","sorter","sorterParams","formatter","formatterParams","variableHeight","editable","editor","editorParams","validator","mutator","mutatorParams","mutatorData","mutatorDataParams","mutatorEdit","mutatorEditParams","mutatorClipboard","mutatorClipboardParams","accessor","accessorParams","accessorData","accessorDataParams","accessorDownload","accessorDownloadParams","accessorClipboard","accessorClipboardParams","accessorPrint","accessorPrintParams","accessorHtmlOutput","accessorHtmlOutputParams","clipboard","download","downloadTitle","topCalc","topCalcParams","topCalcFormatter","topCalcFormatterParams","bottomCalc","bottomCalcParams","bottomCalcFormatter","bottomCalcFormatterParams","cellClick","cellDblClick","cellContext","cellTap","cellDblTap","cellTapHold","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellEditing","cellEdited","cellEditCancelled","headerSort","headerSortStartingDir","headerSortTristate","headerClick","headerDblClick","headerContext","headerTap","headerDblTap","headerTapHold","headerTooltip","headerVertical","editableTitle","titleFormatter","titleFormatterParams","headerFilter","headerFilterPlaceholder","headerFilterParams","headerFilterEmptyCheck","headerFilterFunc","headerFilterFuncParams","headerFilterLiveFilter","print","headerContextMenu","headerMenu","contextMenu","formatterPrint","formatterPrintParams","formatterClipboard","formatterClipboardParams","formatterHtmlOutput","formatterHtmlOutputParams","titlePrint","titleClipboard","titleHtmlOutput","titleDownload"],n.prototype.getComponent=function(){return this.component||(this.component=new o(this)),this.component};var s=function(e){this.table=e,this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.heightFixer=this.createTableElement(),this.columnManager=null,this.height=0,this.firstRender=!1,this.renderMode="virtual",this.fixedHeight=!1,this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[],this.rowNumColumn=!1,this.redrawBlock=!1,this.redrawBlockRestoreConfig=!1,this.redrawBlockRederInPosition=!1};s.prototype.createHolderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-tableHolder"),e.setAttribute("tabindex",0),e},s.prototype.createTableElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-table"),e},s.prototype.getElement=function(){return this.element},s.prototype.getTableElement=function(){return this.tableElement},s.prototype.getRowPosition=function(e,t){return t?this.activeRows.indexOf(e):this.rows.indexOf(e)},s.prototype.setColumnManager=function(e){this.columnManager=e},s.prototype.initialize=function(){var e=this;e.setRenderMode(),e.element.appendChild(e.tableElement),e.firstRender=!0,e.element.addEventListener("scroll",function(){var t=e.element.scrollLeft;e.scrollLeft!=t&&(e.columnManager.scrollHorizontal(t),e.table.options.groupBy&&e.table.modules.groupRows.scrollHeaders(t),e.table.modExists("columnCalcs")&&e.table.modules.columnCalcs.scrollHorizontal(t),e.table.options.scrollHorizontal(t)),e.scrollLeft=t}),"virtual"===this.renderMode&&e.element.addEventListener("scroll",function(){var t=e.element.scrollTop,o=e.scrollTop>t;e.scrollTop!=t?(e.scrollTop=t,e.scrollVertical(o),"scroll"==e.table.options.ajaxProgressiveLoad&&e.table.modules.ajax.nextPage(e.element.scrollHeight-e.element.clientHeight-t),e.table.options.scrollVertical(t)):e.scrollTop=t})},s.prototype.findRow=function(e){var t=this;if("object"!=(void 0===e?"undefined":_typeof(e))){if(void 0===e||null===e)return!1;return t.rows.find(function(o){return o.data[t.table.options.index]==e})||!1}if(e instanceof a)return e;if(e instanceof r)return e._getSelf()||!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement){return t.rows.find(function(t){return t.element===e})||!1}return!1},s.prototype.getRowFromDataObject=function(e){return this.rows.find(function(t){return t.data===e})||!1},s.prototype.getRowFromPosition=function(e,t){return t?this.activeRows[e]:this.rows[e]},s.prototype.scrollToRow=function(e,t,o){var i,n=this,s=this.getDisplayRows().indexOf(e),r=e.getElement(),a=0;return new Promise(function(e,l){if(s>-1){if(void 0===t&&(t=n.table.options.scrollToRowPosition),void 0===o&&(o=n.table.options.scrollToRowIfVisible),"nearest"===t)switch(n.renderMode){case"classic":i=d.prototype.helpers.elOffset(r).top,t=Math.abs(n.element.scrollTop-i)>Math.abs(n.element.scrollTop+n.element.clientHeight-i)?"bottom":"top";break;case"virtual":t=Math.abs(n.vDomTop-s)>Math.abs(n.vDomBottom-s)?"bottom":"top"}if(!o&&d.prototype.helpers.elVisible(r)&&(a=d.prototype.helpers.elOffset(r).top-d.prototype.helpers.elOffset(n.element).top)>0&&a-1&&this.activeRows.splice(i,1),o>-1&&this.rows.splice(o,1),this.setActiveRows(this.activeRows),this.displayRowIterator(function(t){var o=t.indexOf(e);o>-1&&t.splice(o,1)}),t||this.reRenderInPosition(),this.regenerateRowNumbers(),this.table.options.rowDeleted.call(this.table,e.getComponent()),this.table.options.dataEdited.call(this.table,this.getData()),this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.updateGroupRows(!0):this.table.options.pagination&&this.table.modExists("page")?this.refreshActiveData(!1,!1,!0):this.table.options.pagination&&this.table.modExists("page")&&this.refreshActiveData("page")},s.prototype.addRow=function(e,t,o,i){var n=this.addRowActual(e,t,o,i);return this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowAdd",n,{data:e,pos:t,index:o}),n},s.prototype.addRows=function(e,t,o){var i=this,n=this,s=0,r=[];return new Promise(function(a,l){t=i.findAddRowPos(t),Array.isArray(e)||(e=[e]),s=e.length-1,(void 0===o&&t||void 0!==o&&!t)&&e.reverse(),e.forEach(function(e,i){var s=n.addRow(e,t,o,!0);r.push(s)}),i.table.options.groupBy&&i.table.modExists("groupRows")?i.table.modules.groupRows.updateGroupRows(!0):i.table.options.pagination&&i.table.modExists("page")?i.refreshActiveData(!1,!1,!0):i.reRenderInPosition(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.regenerateRowNumbers(),a(r)})},s.prototype.findAddRowPos=function(e){return void 0===e&&(e=this.table.options.addRowPos),"pos"===e&&(e=!0),"bottom"===e&&(e=!1),e},s.prototype.addRowActual=function(e,t,o,i){var n,s,r=e instanceof a?e:new a(e||{},this),l=this.findAddRowPos(t),c=-1;if(!o&&this.table.options.pagination&&"page"==this.table.options.paginationAddRow&&(s=this.getDisplayRows(),l?s.length?o=s[0]:this.activeRows.length&&(o=this.activeRows[this.activeRows.length-1],l=!1):s.length&&(o=s[s.length-1],l=!(s.length1&&(!o||o&&-1==u.indexOf(o)?l?u[0]!==r&&(o=u[0],this._moveRowInArray(r.getGroup().rows,r,o,!l)):u[u.length-1]!==r&&(o=u[u.length-1],this._moveRowInArray(r.getGroup().rows,r,o,!l)):this._moveRowInArray(r.getGroup().rows,r,o,!l))}return o&&(c=this.rows.indexOf(o)),o&&c>-1?(n=this.activeRows.indexOf(o),this.displayRowIterator(function(e){var t=e.indexOf(o);t>-1&&e.splice(l?t:t+1,0,r)}),n>-1&&this.activeRows.splice(l?n:n+1,0,r),this.rows.splice(l?c:c+1,0,r)):l?(this.displayRowIterator(function(e){e.unshift(r)}),this.activeRows.unshift(r),this.rows.unshift(r)):(this.displayRowIterator(function(e){e.push(r)}),this.activeRows.push(r),this.rows.push(r)),this.setActiveRows(this.activeRows),this.table.options.rowAdded.call(this.table,r.getComponent()),this.table.options.dataEdited.call(this.table,this.getData()),i||this.reRenderInPosition(),r},s.prototype.moveRow=function(e,t,o){this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowMove",e,{posFrom:this.getRowPosition(e),posTo:this.getRowPosition(t),to:t,after:o}),this.moveRowActual(e,t,o),this.regenerateRowNumbers(),this.table.options.rowMoved.call(this.table,e.getComponent())},s.prototype.moveRowActual=function(e,t,o){var i=this;if(this._moveRowInArray(this.rows,e,t,o),this._moveRowInArray(this.activeRows,e,t,o),this.displayRowIterator(function(n){i._moveRowInArray(n,e,t,o)}),this.table.options.groupBy&&this.table.modExists("groupRows")){!o&&t instanceof S&&(t=this.table.rowManager.prevDisplayRow(e)||t);var n=t.getGroup(),s=e.getGroup();n===s?this._moveRowInArray(n.rows,e,t,o):(s&&s.removeRow(e),n.insertRow(e,t,o))}},s.prototype._moveRowInArray=function(e,t,o,i){var n,s,r,a;if(t!==o&&(n=e.indexOf(t),n>-1&&(e.splice(n,1),s=e.indexOf(o),s>-1?i?e.splice(s+1,0,t):e.splice(s,0,t):e.splice(n,0,t)),e===this.getDisplayRows())){r=nn?s:n+1;for(var l=r;l<=a;l++)e[l]&&this.styleRow(e[l],l)}},s.prototype.clearData=function(){this.setData([])},s.prototype.getRowIndex=function(e){return this.findRowIndex(e,this.rows)},s.prototype.getDisplayRowIndex=function(e){var t=this.getDisplayRows().indexOf(e);return t>-1&&t},s.prototype.nextDisplayRow=function(e,t){var o=this.getDisplayRowIndex(e),i=!1;return!1!==o&&o-1)&&o},s.prototype.getData=function(e,t){var o=[];return this.getRows(e).forEach(function(e){"row"==e.type&&o.push(e.getData(t||"data"))}),o},s.prototype.getComponents=function(e){var t=[];return this.getRows(e).forEach(function(e){t.push(e.getComponent())}),t},s.prototype.getDataCount=function(e){return this.getRows(e).length},s.prototype._genRemoteRequest=function(){var e=this,t=this.table,o=t.options,i={};if(t.modExists("page")){if(o.ajaxSorting){var n=this.table.modules.sort.getSort();n.forEach(function(e){delete e.column}),i[this.table.modules.page.paginationDataSentNames.sorters]=n}if(o.ajaxFiltering){var s=this.table.modules.filter.getFilters(!0,!0);i[this.table.modules.page.paginationDataSentNames.filters]=s}this.table.modules.ajax.setParams(i,!0)}t.modules.ajax.sendRequest().then(function(t){e._setDataActual(t,!0)}).catch(function(e){})},s.prototype.filterRefresh=function(){var e=this.table,t=e.options,o=this.scrollLeft;t.ajaxFiltering?"remote"==t.pagination&&e.modExists("page")?(e.modules.page.reset(!0),e.modules.page.setPage(1).then(function(){}).catch(function(){})):t.ajaxProgressiveLoad?e.modules.ajax.loadData().then(function(){}).catch(function(){}):this._genRemoteRequest():this.refreshActiveData("filter"),this.scrollHorizontal(o)},s.prototype.sorterRefresh=function(e){var t=this.table,o=this.table.options,i=this.scrollLeft;o.ajaxSorting?("remote"==o.pagination||o.progressiveLoad)&&t.modExists("page")?(t.modules.page.reset(!0),t.modules.page.setPage(1).then(function(){}).catch(function(){})):o.ajaxProgressiveLoad?t.modules.ajax.loadData().then(function(){}).catch(function(){}):this._genRemoteRequest():this.refreshActiveData(e?"filter":"sort"),this.scrollHorizontal(i)},s.prototype.scrollHorizontal=function(e){this.scrollLeft=e,this.element.scrollLeft=e,this.table.options.groupBy&&this.table.modules.groupRows.scrollHeaders(e),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.scrollHorizontal(e)},s.prototype.refreshActiveData=function(e,t,o){var i,n=this,s=this.table,r=["all","filter","sort","display","freeze","group","tree","page"];if(this.redrawBlock)return void((!this.redrawBlockRestoreConfig||r.indexOf(e)=0))break;s=a}else if(t-r[a].getElement().offsetTop>=0)n=a;else{if(i=!0,!(o-r[a].getElement().offsetTop>=0))break;s=a}}else n=this.vDomTop,s=this.vDomBottom;return r.slice(n,s+1)},s.prototype.displayRowIterator=function(e){this.displayRows.forEach(e),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length},s.prototype.getRows=function(e){var t;switch(e){case"active":t=this.activeRows;break;case"display":t=this.table.rowManager.getDisplayRows();break;case"visible":t=this.getVisibleRows(!0);break;default:t=this.rows}return t},s.prototype.reRenderInPosition=function(e){if("virtual"==this.getRenderMode())if(this.redrawBlock)e?e():this.redrawBlockRederInPosition=!0;else{for(var t=this.element.scrollTop,o=!1,i=!1,n=this.scrollLeft,s=this.getDisplayRows(),r=this.vDomTop;r<=this.vDomBottom;r++)if(s[r]){var a=t-s[r].getElement().offsetTop;if(!(!1===i||Math.abs(a)this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*g),"group"!==f.type&&(u=!1),i.vDomBottom++,c++}e?(i.vDomTopPad=t?i.vDomRowHeight*this.vDomTop+o:i.scrollTop-l,i.vDomBottomPad=i.vDomBottom==i.displayRowsCount-1?0:Math.max(i.vDomScrollHeight-i.vDomTopPad-a-l,0)):(this.vDomTopPad=0,i.vDomRowHeight=Math.floor((a+l)/c),i.vDomBottomPad=i.vDomRowHeight*(i.displayRowsCount-i.vDomBottom-1),i.vDomScrollHeight=l+a+i.vDomBottomPad-i.height),n.style.paddingTop=i.vDomTopPad+"px",n.style.paddingBottom=i.vDomBottomPad+"px",t&&(this.scrollTop=i.vDomTopPad+l+o-(this.element.scrollWidth>this.element.clientWidth?this.element.offsetHeight-this.element.clientHeight:0)),this.scrollTop=Math.min(this.scrollTop,this.element.scrollHeight-this.height),this.element.scrollWidth>this.element.offsetWidth&&t&&(this.scrollTop+=this.element.offsetHeight-this.element.clientHeight),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,s.scrollTop=this.scrollTop,n.style.minWidth=u?i.table.columnManager.getWidth()+"px":"",i.table.options.groupBy&&"fitDataFill"!=i.table.modules.layout.getMode()&&i.displayRowsCount==i.table.modules.groupRows.countGroups()&&(i.tableElement.style.minWidth=i.table.columnManager.getWidth())}else this.renderEmptyScroll();this.fixedHeight||this.adjustTableSize()},s.prototype.scrollVertical=function(e){var t=this.scrollTop-this.vDomScrollPosTop,o=this.scrollTop-this.vDomScrollPosBottom,i=2*this.vDomWindowBuffer;if(-t>i||o>i){var n=this.scrollLeft;this._virtualRenderFill(Math.floor(this.element.scrollTop/this.element.scrollHeight*this.displayRowsCount)),this.scrollHorizontal(n)}else e?(t<0&&this._addTopRow(-t),o<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(-o):this.vDomScrollPosBottom=this.scrollTop)):(t>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(t):this.vDomScrollPosTop=this.scrollTop),o>=0&&this._addBottomRow(o))},s.prototype._addTopRow=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomTop){var n=this.vDomTop-1,s=i[n],r=s.getHeight()||this.vDomRowHeight;e>=r&&(this.styleRow(s,n),o.insertBefore(s.getElement(),o.firstChild),s.initialized&&s.heightInitialized||(this.vDomTopNewRows.push(s),s.heightInitialized||s.clearCellHeight()),s.initialize(),this.vDomTopPad-=r,this.vDomTopPad<0&&(this.vDomTopPad=n*this.vDomRowHeight),n||(this.vDomTopPad=0),o.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=r,this.vDomTop--),e=-(this.scrollTop-this.vDomScrollPosTop),s.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*s.getHeight()),t=(i[this.vDomTop-1].getHeight()||this.vDomRowHeight)?this._addTopRow(e,t+1):this._quickNormalizeRowHeight(this.vDomTopNewRows)}},s.prototype._removeTopRow=function(e){var t=this.tableElement,o=this.getDisplayRows()[this.vDomTop],i=o.getHeight()||this.vDomRowHeight;if(e>=i){var n=o.getElement();n.parentNode.removeChild(n),this.vDomTopPad+=i,t.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?i:i+this.vDomWindowBuffer,this.vDomTop++,e=this.scrollTop-this.vDomScrollPosTop,this._removeTopRow(e)}},s.prototype._addBottomRow=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomBottom=r&&(this.styleRow(s,n),o.appendChild(s.getElement()),s.initialized&&s.heightInitialized||(this.vDomBottomNewRows.push(s),s.heightInitialized||s.clearCellHeight()),s.initialize(),this.vDomBottomPad-=r,(this.vDomBottomPad<0||n==this.displayRowsCount-1)&&(this.vDomBottomPad=0),o.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=r,this.vDomBottom++),e=this.scrollTop-this.vDomScrollPosBottom,s.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*s.getHeight()),t=(i[this.vDomBottom+1].getHeight()||this.vDomRowHeight)?this._addBottomRow(e,t+1):this._quickNormalizeRowHeight(this.vDomBottomNewRows)}},s.prototype._removeBottomRow=function(e){var t=this.tableElement,o=this.getDisplayRows()[this.vDomBottom],i=o.getHeight()||this.vDomRowHeight;if(e>=i){var n=o.getElement();n.parentNode&&n.parentNode.removeChild(n),this.vDomBottomPad+=i,this.vDomBottomPad<0&&(this.vDomBottomPad=0),t.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=i,this.vDomBottom--,e=-(this.scrollTop-this.vDomScrollPosBottom),this._removeBottomRow(e)}},s.prototype._quickNormalizeRowHeight=function(e){e.forEach(function(e){e.calcHeight()}),e.forEach(function(e){e.setCellHeight()}),e.length=0},s.prototype.normalizeHeight=function(){this.activeRows.forEach(function(e){e.normalizeHeight()})},s.prototype.adjustTableSize=function(){var e,t=this.element.clientHeight;if("virtual"===this.renderMode){var o=this.columnManager.getElement().offsetHeight+(this.table.footerManager&&!this.table.footerManager.external?this.table.footerManager.getElement().offsetHeight:0);this.fixedHeight?(this.element.style.minHeight="calc(100% - "+o+"px)",this.element.style.height="calc(100% - "+o+"px)",this.element.style.maxHeight="calc(100% - "+o+"px)"):(this.element.style.height="",this.element.style.height=this.table.element.clientHeight-o+"px",this.element.scrollTop=this.scrollTop),this.height=this.element.clientHeight,this.vDomWindowBuffer=this.table.options.virtualDomBuffer||this.height,this.fixedHeight||t==this.element.clientHeight||((e=this.table.modExists("resizeTable"))&&!this.table.modules.resizeTable.autoResize||!e)&&this.redraw()}},s.prototype.reinitialize=function(){this.rows.forEach(function(e){e.reinitialize()})},s.prototype.blockRedraw=function(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1},s.prototype.restoreRedraw=function(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.stage,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),this.redrawBlockRestoreConfig=!1):this.redrawBlockRederInPosition&&this.reRenderInPosition(),this.redrawBlockRederInPosition=!1},s.prototype.redraw=function(e){var t=this.scrollLeft;this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,e?this.renderTable():("classic"==this.renderMode?this.table.options.groupBy?this.refreshActiveData("group",!1,!1):this._simpleRender():(this.reRenderInPosition(),this.scrollHorizontal(t)),this.displayRowsCount||this.table.options.placeholder&&this.getElement().appendChild(this.table.options.placeholder))},s.prototype.resetScroll=function(){if(this.element.scrollLeft=0,this.element.scrollTop=0,"ie"===this.table.browser){var e=document.createEvent("Event");e.initEvent("scroll",!1,!0),this.element.dispatchEvent(e)}else this.element.dispatchEvent(new Event("scroll"))};var r=function(e){this._row=e};r.prototype.getData=function(e){return this._row.getData(e)},r.prototype.getElement=function(){return this._row.getElement()},r.prototype.getCells=function(){var e=[];return this._row.getCells().forEach(function(t){e.push(t.getComponent())}),e},r.prototype.getCell=function(e){var t=this._row.getCell(e);return!!t&&t.getComponent()},r.prototype.getIndex=function(){return this._row.getData("data")[this._row.table.options.index]},r.prototype.getPosition=function(e){return this._row.table.rowManager.getRowPosition(this._row,e)},r.prototype.delete=function(){return this._row.delete()},r.prototype.scrollTo=function(){return this._row.table.rowManager.scrollToRow(this._row)},r.prototype.pageTo=function(){if(this._row.table.modExists("page",!0))return this._row.table.modules.page.setPageToRow(this._row)},r.prototype.move=function(e,t){this._row.moveToRow(e,t)},r.prototype.update=function(e){return this._row.updateData(e)}, +r.prototype.normalizeHeight=function(){this._row.normalizeHeight(!0)},r.prototype.select=function(){this._row.table.modules.selectRow.selectRows(this._row)},r.prototype.deselect=function(){this._row.table.modules.selectRow.deselectRows(this._row)},r.prototype.toggleSelect=function(){this._row.table.modules.selectRow.toggleRow(this._row)},r.prototype.isSelected=function(){return this._row.table.modules.selectRow.isRowSelected(this._row)},r.prototype._getSelf=function(){return this._row},r.prototype.validate=function(){return this._row.validate()},r.prototype.freeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.freezeRow(this._row)},r.prototype.unfreeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.unfreezeRow(this._row)},r.prototype.isFrozen=function(){if(this._row.table.modExists("frozenRows",!0)){return this._row.table.modules.frozenRows.rows.indexOf(this._row)>-1}return!1},r.prototype.treeCollapse=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.collapseRow(this._row)},r.prototype.treeExpand=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.expandRow(this._row)},r.prototype.treeToggle=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.toggleRow(this._row)},r.prototype.getTreeParent=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeParent(this._row)},r.prototype.getTreeChildren=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeChildren(this._row)},r.prototype.addTreeChild=function(e,t,o){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.addTreeChildRow(this._row,e,t,o)},r.prototype.reformat=function(){return this._row.reinitialize()},r.prototype.getGroup=function(){return this._row.getGroup().getComponent()},r.prototype.getTable=function(){return this._row.table},r.prototype.getNextRow=function(){var e=this._row.nextRow();return e?e.getComponent():e},r.prototype.getPrevRow=function(){var e=this._row.prevRow();return e?e.getComponent():e};var a=function(e,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"row";this.table=t.table,this.parent=t,this.data={},this.type=o,this.element=this.createElement(),this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.component=null,this.setData(e),this.generateElement()};a.prototype.createElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-row"),e.setAttribute("role","row"),e},a.prototype.getElement=function(){return this.element},a.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},a.prototype.generateElement=function(){var e,t,o,i=this;!1!==i.table.options.selectable&&i.table.modExists("selectRow")&&i.table.modules.selectRow.initializeRow(this),!1!==i.table.options.movableRows&&i.table.modExists("moveRow")&&i.table.modules.moveRow.initializeRow(this),!1!==i.table.options.dataTree&&i.table.modExists("dataTree")&&i.table.modules.dataTree.initializeRow(this),"collapse"===i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout")&&i.table.modules.responsiveLayout.initializeRow(this),i.table.options.rowContextMenu&&this.table.modExists("menu")&&i.table.modules.menu.initializeRow(this),i.table.options.rowClick&&i.element.addEventListener("click",function(e){i.table.options.rowClick(e,i.getComponent())}),i.table.options.rowDblClick&&i.element.addEventListener("dblclick",function(e){i.table.options.rowDblClick(e,i.getComponent())}),i.table.options.rowContext&&i.element.addEventListener("contextmenu",function(e){i.table.options.rowContext(e,i.getComponent())}),i.table.options.rowMouseEnter&&i.element.addEventListener("mouseenter",function(e){i.table.options.rowMouseEnter(e,i.getComponent())}),i.table.options.rowMouseLeave&&i.element.addEventListener("mouseleave",function(e){i.table.options.rowMouseLeave(e,i.getComponent())}),i.table.options.rowMouseOver&&i.element.addEventListener("mouseover",function(e){i.table.options.rowMouseOver(e,i.getComponent())}),i.table.options.rowMouseOut&&i.element.addEventListener("mouseout",function(e){i.table.options.rowMouseOut(e,i.getComponent())}),i.table.options.rowMouseMove&&i.element.addEventListener("mousemove",function(e){i.table.options.rowMouseMove(e,i.getComponent())}),i.table.options.rowTap&&(o=!1,i.element.addEventListener("touchstart",function(e){o=!0},{passive:!0}),i.element.addEventListener("touchend",function(e){o&&i.table.options.rowTap(e,i.getComponent()),o=!1})),i.table.options.rowDblTap&&(e=null,i.element.addEventListener("touchend",function(t){e?(clearTimeout(e),e=null,i.table.options.rowDblTap(t,i.getComponent())):e=setTimeout(function(){clearTimeout(e),e=null},300)})),i.table.options.rowTapHold&&(t=null,i.element.addEventListener("touchstart",function(e){clearTimeout(t),t=setTimeout(function(){clearTimeout(t),t=null,o=!1,i.table.options.rowTapHold(e,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(e){clearTimeout(t),t=null}))},a.prototype.generateCells=function(){this.cells=this.table.columnManager.generateCells(this)},a.prototype.initialize=function(e){var t=this;if(!t.initialized||e){for(t.deleteCells();t.element.firstChild;)t.element.removeChild(t.element.firstChild);this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutRow(this),this.generateCells(),t.cells.forEach(function(e){t.element.appendChild(e.getElement()),e.cellRendered()}),e&&t.normalizeHeight(),t.table.options.dataTree&&t.table.modExists("dataTree")&&t.table.modules.dataTree.layoutRow(this),"collapse"===t.table.options.responsiveLayout&&t.table.modExists("responsiveLayout")&&t.table.modules.responsiveLayout.layoutRow(this),t.table.options.rowFormatter&&t.table.options.rowFormatter(t.getComponent()),t.table.options.resizableRows&&t.table.modExists("resizeRows")&&t.table.modules.resizeRows.initializeRow(t),t.initialized=!0}},a.prototype.reinitializeHeight=function(){this.heightInitialized=!1,null!==this.element.offsetParent&&this.normalizeHeight(!0)},a.prototype.reinitialize=function(){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),null!==this.element.offsetParent&&this.initialize(!0)},a.prototype.calcHeight=function(e){var t=0,o=this.table.options.resizableRows?this.element.clientHeight:0;this.cells.forEach(function(e){var o=e.getHeight();o>t&&(t=o)}),this.height=e?Math.max(t,o):this.manualHeight?this.height:Math.max(t,o),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight},a.prototype.setCellHeight=function(){this.cells.forEach(function(e){e.setHeight()}),this.heightInitialized=!0},a.prototype.clearCellHeight=function(){this.cells.forEach(function(e){e.clearHeight()})},a.prototype.normalizeHeight=function(e){e&&this.clearCellHeight(),this.calcHeight(e),this.setCellHeight()},a.prototype.setHeight=function(e,t){(this.height!=e||t)&&(this.manualHeight=!0,this.height=e,this.heightStyled=e?e+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight)},a.prototype.getHeight=function(){return this.outerHeight},a.prototype.getWidth=function(){return this.element.offsetWidth},a.prototype.deleteCell=function(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)},a.prototype.setData=function(e){this.table.modExists("mutator")&&(e=this.table.modules.mutator.transformRow(e,"data")),this.data=e,this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchRow(this)},a.prototype.updateData=function(e){var t,o=this,i=d.prototype.helpers.elVisible(this.element),n={};return new Promise(function(s,r){"string"==typeof e&&(e=JSON.parse(e)),o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.block(),o.table.modExists("mutator")?(n=Object.assign(n,o.data),n=Object.assign(n,e),t=o.table.modules.mutator.transformRow(n,"data",e)):t=e;for(var a in t)o.data[a]=t[a];o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.unblock();for(var a in e){o.table.columnManager.getColumnsByFieldRoot(a).forEach(function(e){var n=o.getCell(e.getField());if(n){var s=e.getFieldValue(t);n.getValue()!=s&&(n.setValueProcessData(s),i&&n.cellRendered())}})}i?(o.normalizeHeight(!0),o.table.options.rowFormatter&&o.table.options.rowFormatter(o.getComponent())):(o.initialized=!1,o.height=0,o.heightStyled=""),!1!==o.table.options.dataTree&&o.table.modExists("dataTree")&&o.table.modules.dataTree.redrawNeeded(e)&&(o.table.modules.dataTree.initializeRow(o),o.table.modules.dataTree.layoutRow(o),o.table.rowManager.refreshActiveData("tree",!1,!0)),o.table.options.rowUpdated.call(o.table,o.getComponent()),s()})},a.prototype.getData=function(e){var t=this;return e?t.table.modExists("accessor")?t.table.modules.accessor.transformRow(t.data,e):void 0:this.data},a.prototype.getCell=function(e){return e=this.table.columnManager.findColumn(e),this.cells.find(function(t){return t.column===e})},a.prototype.getCellIndex=function(e){return this.cells.findIndex(function(t){return t===e})},a.prototype.findNextEditableCell=function(e){var t=!1;if(e0)for(var o=e-1;o>=0;o--){var i=this.cells[o],n=!0;if(i.column.modules.edit&&d.prototype.helpers.elVisible(i.getElement())&&("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n)){t=i;break}}return t},a.prototype.getCells=function(){return this.cells},a.prototype.nextRow=function(){return this.table.rowManager.nextDisplayRow(this,!0)||!1},a.prototype.prevRow=function(){return this.table.rowManager.prevDisplayRow(this,!0)||!1},a.prototype.moveToRow=function(e,t){var o=this.table.rowManager.findRow(e);o?(this.table.rowManager.moveRowActual(this,o,!t),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",e)},a.prototype.validate=function(){var e=[];return this.cells.forEach(function(t){t.validate()||e.push(t.getComponent())}),!e.length||e},a.prototype.delete=function(){var e=this;return new Promise(function(t,o){var i,n;e.table.options.history&&e.table.modExists("history")&&(e.table.options.groupBy&&e.table.modExists("groupRows")?(n=e.getGroup().rows,(i=n.indexOf(e))&&(i=n[i-1])):(i=e.table.rowManager.getRowIndex(e))&&(i=e.table.rowManager.rows[i-1]),e.table.modules.history.action("rowDelete",e,{data:e.getData(),pos:!i,index:i})),e.deleteActual(),t()})},a.prototype.deleteActual=function(e){this.table.rowManager.getRowIndex(this);this.table.modExists("selectRow")&&this.table.modules.selectRow._deselectRow(this,!0),this.table.modExists("edit")&&this.table.modules.edit.currentCell.row===this&&this.table.modules.edit.cancelEdit(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0),this.modules.group&&this.modules.group.removeRow(this),this.table.rowManager.deleteRow(this,e),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.rowDelete(this),this.table.modExists("columnCalcs")&&(this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.columnCalcs.recalcRowGroup(this):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows))},a.prototype.deleteCells=function(){for(var e=this.cells.length,t=0;t-1?(this.browser="ie",this.browserSlow=!0):e.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):e.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0,4))},d.prototype.blockRedraw=function(){return this.rowManager.blockRedraw()},d.prototype.restoreRedraw=function(){return this.rowManager.restoreRedraw()},d.prototype.setDataFromLocalFile=function(e){var t=this;return new Promise(function(o,i){var n=document.createElement("input");n.type="file",n.accept=e||".json,application/json",n.addEventListener("change",function(e){var s,r=n.files[0],a=new FileReader;a.readAsText(r),a.onload=function(e){try{s=JSON.parse(a.result)}catch(e){return console.warn("File Load Error - File contents is invalid JSON",e),void i(e)}t._setData(s).then(function(e){o(e)}).catch(function(e){o(e)})},a.onerror=function(e){console.warn("File Load Error - Unable to read file"),i()}}),n.click()})},d.prototype.setData=function(e,t,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(e,t,o,!1,!0)},d.prototype._setData=function(e,t,o,i,n){var s=this;return"string"!=typeof e?e?s.rowManager.setData(e,i,n):s.modExists("ajax")&&(s.modules.ajax.getUrl||s.options.ajaxURLGenerator)?"remote"==s.options.pagination&&s.modExists("page",!0)?(s.modules.page.reset(!0,!0),s.modules.page.setPage(1)):s.modules.ajax.loadData(i,n):s.rowManager.setData([],i,n):0==e.indexOf("{")||0==e.indexOf("[")?s.rowManager.setData(JSON.parse(e),i,n):s.modExists("ajax",!0)?(t&&s.modules.ajax.setParams(t),o&&s.modules.ajax.setConfig(o),s.modules.ajax.setUrl(e),"remote"==s.options.pagination&&s.modExists("page",!0)?(s.modules.page.reset(!0,!0),s.modules.page.setPage(1)):s.modules.ajax.loadData(i,n)):void 0},d.prototype.clearData=function(){this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this.rowManager.clearData()},d.prototype.getData=function(e){return!0===e&&(console.warn("passing a boolean to the getData function is deprecated, you should now pass the string 'active'"),e="active"),this.rowManager.getData(e)},d.prototype.getDataCount=function(e){return!0===e&&(console.warn("passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'"),e="active"),this.rowManager.getDataCount(e)},d.prototype.searchRows=function(e,t,o){if(this.modExists("filter",!0))return this.modules.filter.search("rows",e,t,o)},d.prototype.searchData=function(e,t,o){if(this.modExists("filter",!0))return this.modules.filter.search("data",e,t,o)},d.prototype.getHtml=function(e,t,o){if(this.modExists("export",!0))return this.modules.export.getHtml(e,t,o)},d.prototype.print=function(e,t,o){if(this.modExists("print",!0))return this.modules.print.printFullscreen(e,t,o)},d.prototype.getAjaxUrl=function(){if(this.modExists("ajax",!0))return this.modules.ajax.getUrl()},d.prototype.replaceData=function(e,t,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(e,t,o,!0)},d.prototype.updateData=function(e){var t=this,o=this,i=0;return new Promise(function(n,s){t.modExists("ajax")&&t.modules.ajax.blockActiveRequest(),"string"==typeof e&&(e=JSON.parse(e)),e?e.forEach(function(e){var t=o.rowManager.findRow(e[o.options.index]);t&&(i++,t.updateData(e).then(function(){--i||n()}))}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})},d.prototype.addData=function(e,t,o){var i=this;return new Promise(function(n,s){i.modExists("ajax")&&i.modules.ajax.blockActiveRequest(),"string"==typeof e&&(e=JSON.parse(e)),e?i.rowManager.addRows(e,t,o).then(function(e){var t=[];e.forEach(function(e){t.push(e.getComponent())}),n(t)}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})},d.prototype.updateOrAddData=function(e){var t=this,o=this,i=[],n=0;return new Promise(function(s,r){t.modExists("ajax")&&t.modules.ajax.blockActiveRequest(),"string"==typeof e&&(e=JSON.parse(e)),e?e.forEach(function(e){var t=o.rowManager.findRow(e[o.options.index]);n++,t?t.updateData(e).then(function(){n--,i.push(t.getComponent()),n||s(i)}):o.rowManager.addRows(e).then(function(e){n--,i.push(e[0].getComponent()),n||s(i)})}):(console.warn("Update Error - No data provided"),r("Update Error - No data provided"))})},d.prototype.getRow=function(e){var t=this.rowManager.findRow(e);return t?t.getComponent():(console.warn("Find Error - No matching row found:",e),!1)},d.prototype.getRowFromPosition=function(e,t){var o=this.rowManager.getRowFromPosition(e,t);return o?o.getComponent():(console.warn("Find Error - No matching row found:",e),!1)},d.prototype.deleteRow=function(e){var t=this;return new Promise(function(o,i){function n(){++r==e.length&&a&&(s.rowManager.reRenderInPosition(),o())}var s=t,r=0,a=0,l=[];Array.isArray(e)||(e=[e]),e.forEach(function(e){var o=t.rowManager.findRow(e,!0);o?l.push(o):(console.warn("Delete Error - No matching row found:",e),i("Delete Error - No matching row found"),n())}),l.sort(function(e,o){return t.rowManager.rows.indexOf(e)>t.rowManager.rows.indexOf(o)?1:-1}),l.forEach(function(e){e.delete().then(function(){a++,n()}).catch(function(e){n(),i(e)})})})},d.prototype.addRow=function(e,t,o){var i=this;return new Promise(function(n,s){"string"==typeof e&&(e=JSON.parse(e)),i.rowManager.addRows(e,t,o).then(function(e){i.modExists("columnCalcs")&&i.modules.columnCalcs.recalc(i.rowManager.activeRows),n(e[0].getComponent())})})},d.prototype.updateOrAddRow=function(e,t){var o=this;return new Promise(function(i,n){var s=o.rowManager.findRow(e);"string"==typeof t&&(t=JSON.parse(t)),s?s.updateData(t).then(function(){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(s.getComponent())}).catch(function(e){n(e)}):s=o.rowManager.addRows(t).then(function(e){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(e[0].getComponent())}).catch(function(e){n(e)})})},d.prototype.updateRow=function(e,t){var o=this;return new Promise(function(i,n){var s=o.rowManager.findRow(e);"string"==typeof t&&(t=JSON.parse(t)),s?s.updateData(t).then(function(){i(s.getComponent())}).catch(function(e){n(e)}):(console.warn("Update Error - No matching row found:",e),n("Update Error - No matching row found"))})},d.prototype.scrollToRow=function(e,t,o){var i=this;return new Promise(function(n,s){var r=i.rowManager.findRow(e);r?i.rowManager.scrollToRow(r,t,o).then(function(){n()}).catch(function(e){s(e)}):(console.warn("Scroll Error - No matching row found:",e),s("Scroll Error - No matching row found"))})},d.prototype.moveRow=function(e,t,o){var i=this.rowManager.findRow(e);i?i.moveToRow(t,o):console.warn("Move Error - No matching row found:",e)},d.prototype.getRows=function(e){return!0===e&&(console.warn("passing a boolean to the getRows function is deprecated, you should now pass the string 'active'"),e="active"),this.rowManager.getComponents(e)},d.prototype.getRowPosition=function(e,t){var o=this.rowManager.findRow(e);return o?this.rowManager.getRowPosition(o,t):(console.warn("Position Error - No matching row found:",e),!1)},d.prototype.copyToClipboard=function(e){this.modExists("clipboard",!0)&&this.modules.clipboard.copy(e)},d.prototype.setColumns=function(e){this.columnManager.setColumns(e)},d.prototype.getColumns=function(e){return this.columnManager.getComponents(e)},d.prototype.getColumn=function(e){var t=this.columnManager.findColumn(e);return t?t.getComponent():(console.warn("Find Error - No matching column found:",e),!1)},d.prototype.getColumnDefinitions=function(){return this.columnManager.getDefinitionTree()},d.prototype.getColumnLayout=function(){if(this.modExists("persistence",!0))return this.modules.persistence.parseColumns(this.columnManager.getColumns())},d.prototype.setColumnLayout=function(e){return!!this.modExists("persistence",!0)&&(this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns,e)),!0)},d.prototype.showColumn=function(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Show Error - No matching column found:",e),!1;t.show(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},d.prototype.hideColumn=function(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Hide Error - No matching column found:",e),!1;t.hide(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},d.prototype.toggleColumn=function(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Visibility Toggle Error - No matching column found:",e),!1;t.visible?t.hide():t.show()},d.prototype.addColumn=function(e,t,o){var i=this;return new Promise(function(n,s){var r=i.columnManager.findColumn(o);i.columnManager.addColumn(e,t,r).then(function(e){n(e.getComponent())}).catch(function(e){s(e)})})},d.prototype.deleteColumn=function(e){var t=this;return new Promise(function(o,i){var n=t.columnManager.findColumn(e);n?n.delete().then(function(){o()}).catch(function(e){i(e)}):(console.warn("Column Delete Error - No matching column found:",e),i())})},d.prototype.updateColumnDefinition=function(e,t){var o=this;return new Promise(function(i,n){var s=o.columnManager.findColumn(e);s?s.updateDefinition(t).then(function(e){i(e)}).catch(function(e){n(e)}):(console.warn("Column Update Error - No matching column found:",e),n())})},d.prototype.moveColumn=function(e,t,o){var i=this.columnManager.findColumn(e),n=this.columnManager.findColumn(t);i?n?this.columnManager.moveColumn(i,n,o):console.warn("Move Error - No matching column found:",n):console.warn("Move Error - No matching column found:",e)},d.prototype.scrollToColumn=function(e,t,o){var i=this;return new Promise(function(n,s){var r=i.columnManager.findColumn(e);r?i.columnManager.scrollToColumn(r,t,o).then(function(){n()}).catch(function(e){s(e)}):(console.warn("Scroll Error - No matching column found:",e),s("Scroll Error - No matching column found"))})},d.prototype.setLocale=function(e){this.modules.localize.setLocale(e)},d.prototype.getLocale=function(){return this.modules.localize.getLocale()},d.prototype.getLang=function(e){return this.modules.localize.getLang(e)},d.prototype.redraw=function(e){this.columnManager.redraw(e),this.rowManager.redraw(e)},d.prototype.setHeight=function(e){"classic"!==this.rowManager.renderMode?(this.options.height=isNaN(e)?e:e+"px",this.element.style.height=this.options.height,this.rowManager.setRenderMode(),this.rowManager.redraw()):console.warn("setHeight function is not available in classic render mode")},d.prototype.setSort=function(e,t){this.modExists("sort",!0)&&(this.modules.sort.setSort(e,t),this.rowManager.sorterRefresh())},d.prototype.getSorters=function(){if(this.modExists("sort",!0))return this.modules.sort.getSort()},d.prototype.clearSort=function(){this.modExists("sort",!0)&&(this.modules.sort.clear(),this.rowManager.sorterRefresh())},d.prototype.setFilter=function(e,t,o,i){this.modExists("filter",!0)&&(this.modules.filter.setFilter(e,t,o,i),this.rowManager.filterRefresh())},d.prototype.addFilter=function(e,t,o,i){this.modExists("filter",!0)&&(this.modules.filter.addFilter(e,t,o,i),this.rowManager.filterRefresh())},d.prototype.getFilters=function(e){if(this.modExists("filter",!0))return this.modules.filter.getFilters(e)},d.prototype.setHeaderFilterFocus=function(e){if(this.modExists("filter",!0)){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Filter Focus Error - No matching column found:",e),!1;this.modules.filter.setHeaderFilterFocus(t)}},d.prototype.getHeaderFilterValue=function(e){if(this.modExists("filter",!0)){var t=this.columnManager.findColumn(e);if(t)return this.modules.filter.getHeaderFilterValue(t);console.warn("Column Filter Error - No matching column found:",e)}},d.prototype.setHeaderFilterValue=function(e,t){if(this.modExists("filter",!0)){var o=this.columnManager.findColumn(e);if(!o)return console.warn("Column Filter Error - No matching column found:",e),!1;this.modules.filter.setHeaderFilterValue(o,t)}},d.prototype.getHeaderFilters=function(){if(this.modExists("filter",!0))return this.modules.filter.getHeaderFilters()},d.prototype.removeFilter=function(e,t,o){this.modExists("filter",!0)&&(this.modules.filter.removeFilter(e,t,o),this.rowManager.filterRefresh())},d.prototype.clearFilter=function(e){this.modExists("filter",!0)&&(this.modules.filter.clearFilter(e),this.rowManager.filterRefresh())},d.prototype.clearHeaderFilter=function(){this.modExists("filter",!0)&&(this.modules.filter.clearHeaderFilter(),this.rowManager.filterRefresh())},d.prototype.selectRow=function(e){this.modExists("selectRow",!0)&&(!0===e&&(console.warn("passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'"),e="active"),this.modules.selectRow.selectRows(e))},d.prototype.deselectRow=function(e){this.modExists("selectRow",!0)&&this.modules.selectRow.deselectRows(e)},d.prototype.toggleSelectRow=function(e){this.modExists("selectRow",!0)&&this.modules.selectRow.toggleRow(e)},d.prototype.getSelectedRows=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedRows()},d.prototype.getSelectedData=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedData()},d.prototype.getInvalidCells=function(){if(this.modExists("validate",!0))return this.modules.validate.getInvalidCells()},d.prototype.clearCellValidation=function(e){var t=this;this.modExists("validate",!0)&&(e||(e=this.modules.validate.getInvalidCells()),Array.isArray(e)||(e=[e]),e.forEach(function(e){t.modules.validate.clearValidation(e._getSelf())}))},d.prototype.validate=function(e){var t=[];return this.rowManager.rows.forEach(function(e){var o=e.validate();!0!==o&&(t=t.concat(o))}),!t.length||t},d.prototype.setMaxPage=function(e){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setMaxPage(e)},d.prototype.setPage=function(e){return this.options.pagination&&this.modExists("page")?this.modules.page.setPage(e):new Promise(function(e,t){t()})},d.prototype.setPageToRow=function(e){var t=this;return new Promise(function(o,i){t.options.pagination&&t.modExists("page")?(e=t.rowManager.findRow(e),e?t.modules.page.setPageToRow(e).then(function(){o()}).catch(function(){i()}):i()):i()})},d.prototype.setPageSize=function(e){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setPageSize(e),this.modules.page.setPage(1).then(function(){}).catch(function(){})},d.prototype.getPageSize=function(){if(this.options.pagination&&this.modExists("page",!0))return this.modules.page.getPageSize()},d.prototype.previousPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.previousPage()},d.prototype.nextPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.nextPage()},d.prototype.getPage=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPage()},d.prototype.getPageMax=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPageMax()},d.prototype.setGroupBy=function(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupBy=e,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")},d.prototype.setGroupStartOpen=function(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupStartOpen=e,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},d.prototype.setGroupHeader=function(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupHeader=e,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},d.prototype.getGroups=function(e){return!!this.modExists("groupRows",!0)&&this.modules.groupRows.getGroups(!0)},d.prototype.getGroupedData=function(){if(this.modExists("groupRows",!0))return this.options.groupBy?this.modules.groupRows.getGroupedData():this.getData()},d.prototype.getEditedCells=function(){if(this.modExists("edit",!0))return this.modules.edit.getEditedCells()},d.prototype.clearCellEdited=function(e){var t=this;this.modExists("edit",!0)&&(e||(e=this.modules.edit.getEditedCells()),Array.isArray(e)||(e=[e]),e.forEach(function(e){t.modules.edit.clearEdited(e._getSelf())}))},d.prototype.getCalcResults=function(){return!!this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.getResults()},d.prototype.recalc=function(){this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.recalcAll(this.rowManager.activeRows)},d.prototype.navigatePrev=function(){var e=!1;return!(!this.modExists("edit",!0)||!(e=this.modules.edit.currentCell))&&e.nav().prev()},d.prototype.navigateNext=function(){var e=!1;return!(!this.modExists("edit",!0)||!(e=this.modules.edit.currentCell))&&e.nav().next()},d.prototype.navigateLeft=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().left())},d.prototype.navigateRight=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().right())},d.prototype.navigateUp=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().up())},d.prototype.navigateDown=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().down())},d.prototype.undo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.undo()},d.prototype.redo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.redo()},d.prototype.getHistoryUndoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryUndoSize()},d.prototype.getHistoryRedoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryRedoSize()},d.prototype.download=function(e,t,o,i){this.modExists("download",!0)&&this.modules.download.download(e,t,o,i)},d.prototype.downloadToTab=function(e,t,o,i){this.modExists("download",!0)&&this.modules.download.download(e,t,o,i,!0)},d.prototype.tableComms=function(e,t,o,i){this.modules.comms.receive(e,t,o,i)},d.prototype.moduleBindings={},d.prototype.extendModule=function(e,t,o){if(d.prototype.moduleBindings[e]){var i=d.prototype.moduleBindings[e].prototype[t];if(i)if("object"==(void 0===o?"undefined":_typeof(o)))for(var n in o)i[n]=o[n];else console.warn("Module Error - Invalid value type, it must be an object");else console.warn("Module Error - property does not exist:",t)}else console.warn("Module Error - module does not exist:",e)},d.prototype.registerModule=function(e,t){d.prototype.moduleBindings[e]=t},d.prototype.bindModules=function(){this.modules={};for(var e in d.prototype.moduleBindings)this.modules[e]=new d.prototype.moduleBindings[e](this)},d.prototype.modExists=function(e,t){return!!this.modules[e]||(t&&console.error("Tabulator Module Not Installed: "+e),!1)},d.prototype.helpers={elVisible:function(e){return!(e.offsetWidth<=0&&e.offsetHeight<=0)},elOffset:function(e){var t=e.getBoundingClientRect();return{top:t.top+window.pageYOffset-document.documentElement.clientTop,left:t.left+window.pageXOffset-document.documentElement.clientLeft}},deepClone:function(e){var t=Array.isArray(e)?[]:{};for(var o in e)null!=e[o]&&"object"===_typeof(e[o])?e[o]instanceof Date?t[o]=new Date(e[o]):t[o]=this.deepClone(e[o]):t[o]=e[o];return t}},d.prototype.comms={tables:[],register:function(e){d.prototype.comms.tables.push(e)},deregister:function(e){var t=d.prototype.comms.tables.indexOf(e);t>-1&&d.prototype.comms.tables.splice(t,1)},lookupTable:function(e,t){var o,i,n=[];if("string"==typeof e){if(o=document.querySelectorAll(e),o.length)for(var s=0;s0?s.setWidth(n):s.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitColumns:function(e){function t(e){return"string"==typeof e?e.indexOf("%")>-1?n/100*parseInt(e):parseInt(e):e}function o(e,i,n,s){function r(e){return n*(e.column.definition.widthGrow||1)}function a(e){return t(e.width)-n*(e.column.definition.widthShrink||0)}var l=[],c=0,u=0,d=0,h=0,p=0,m=[];return e.forEach(function(e,t){var o=s?a(e):r(e);e.column.minWidth>=o?l.push(e):(m.push(e),p+=s?e.column.definition.widthShrink||1:e.column.definition.widthGrow||1)}),l.length?(l.forEach(function(e){c+=s?e.width-e.column.minWidth:e.column.minWidth,e.width=e.column.minWidth}),u=i-c,d=p?Math.floor(u/p):u,h=u-d*p,h+=o(m,u,d,s)):(h=p?i-Math.floor(i/p)*p:i,m.forEach(function(e){e.width=s?a(e):r(e)})),h}var i=this,n=i.table.element.clientWidth,s=0,r=0,a=0,l=0,c=[],u=[],d=0,h=0,p=0;this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(n-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),e.forEach(function(e){var o,i,n;e.visible&&(o=e.definition.width,i=parseInt(e.minWidth),o?(n=t(o),s+=n>i?n:i,e.definition.widthShrink&&(u.push({column:e,width:n>i?n:i}),d+=e.definition.widthShrink)):(c.push({column:e,width:0}),a+=e.definition.widthGrow||1))}),r=n-s,l=Math.floor(r/a);var p=o(c,r,l,!1);c.length&&p>0&&(c[c.length-1].width+=+p),c.forEach(function(e){r-=e.width}),h=Math.abs(p)+r,h>0&&d&&(p=o(u,h,Math.floor(h/d),!0)),u.length&&(u[u.length-1].width-=p),c.forEach(function(e){e.column.setWidth(e.width)}),u.forEach(function(e){e.column.setWidth(e.width)})}},d.prototype.registerModule("layout",h);var p=function(e){this.table=e,this.locale="default",this.lang=!1,this.bindings={}};p.prototype.setHeaderFilterPlaceholder=function(e){this.langs.default.headerFilters.default=e},p.prototype.setHeaderFilterColumnPlaceholder=function(e,t){this.langs.default.headerFilters.columns[e]=t,this.lang&&!this.lang.headerFilters.columns[e]&&(this.lang.headerFilters.columns[e]=t)},p.prototype.installLang=function(e,t){this.langs[e]?this._setLangProp(this.langs[e],t):this.langs[e]=t},p.prototype._setLangProp=function(e,t){for(var o in t)e[o]&&"object"==_typeof(e[o])?this._setLangProp(e[o],t[o]):e[o]=t[o]},p.prototype.setLocale=function(e){function t(e,o){for(var i in e)"object"==_typeof(e[i])?(o[i]||(o[i]={}),t(e[i],o[i])):o[i]=e[i]}var o=this;if(e=e||"default",!0===e&&navigator.language&&(e=navigator.language.toLowerCase()),e&&!o.langs[e]){var i=e.split("-")[0];o.langs[i]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",e,i),e=i):(console.warn("Localization Error - Matching locale not found, using default: ",e),e="default")}o.locale=e,o.lang=d.prototype.helpers.deepClone(o.langs.default||{}),"default"!=e&&t(o.langs[e],o.lang),o.table.options.localized.call(o.table,o.locale,o.lang),o._executeBindings()},p.prototype.getLocale=function(e){return self.locale},p.prototype.getLang=function(e){return e?this.langs[e]:this.lang},p.prototype.getText=function(e,t){var e=t?e+"|"+t:e,o=e.split("|");return this._getLangElement(o,this.locale)||""},p.prototype._getLangElement=function(e,t){var o=this,i=o.lang;return e.forEach(function(e){var t;i&&(t=i[e],i=void 0!==t&&t)}),i},p.prototype.bind=function(e,t){this.bindings[e]||(this.bindings[e]=[]),this.bindings[e].push(t),t(this.getText(e),this.lang)},p.prototype._executeBindings=function(){var e=this;for(var t in e.bindings)!function(t){e.bindings[t].forEach(function(o){o(e.getText(t),e.lang)})}(t)},p.prototype.langs={default:{groups:{item:"item",items:"items"},columns:{},ajax:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All"},headerFilters:{default:"filter column...",columns:{}}}},d.prototype.registerModule("localize",p);var m=function(e){this.table=e};m.prototype.getConnections=function(e){var t,o=this,i=[];return t=d.prototype.comms.lookupTable(e),t.forEach(function(e){o.table!==e&&i.push(e)}),i},m.prototype.send=function(e,t,o,i){var n=this,s=this.getConnections(e);s.forEach(function(e){e.tableComms(n.table.element,t,o,i)}),!s.length&&e&&console.warn("Table Connection Error - No tables matching selector found",e)},m.prototype.receive=function(e,t,o,i){if(this.table.modExists(t))return this.table.modules[t].commsReceived(e,o,i);console.warn("Inter-table Comms Error - no such module:",t)},d.prototype.registerModule("comms",m);var f=function(e){this.table=e,this.allowedTypes=["","data","download","clipboard","print","htmlOutput"]};f.prototype.initializeColumn=function(e){var t=this,o=!1,i={};this.allowedTypes.forEach(function(n){var s,r="accessor"+(n.charAt(0).toUpperCase()+n.slice(1));e.definition[r]&&(s=t.lookupAccessor(e.definition[r]))&&(o=!0,i[r]={accessor:s,params:e.definition[r+"Params"]||{}})}),o&&(e.modules.accessor=i)},f.prototype.lookupAccessor=function(e){var t=!1;switch(void 0===e?"undefined":_typeof(e)){case"string":this.accessors[e]?t=this.accessors[e]:console.warn("Accessor Error - No such accessor found, ignoring: ",e);break;case"function":t=e}return t},f.prototype.transformRow=function(e,t){var o=this,i="accessor"+(t.charAt(0).toUpperCase()+t.slice(1)),n=d.prototype.helpers.deepClone(e||{});return o.table.columnManager.traverse(function(e){var o,s,r,a;e.modules.accessor&&(s=e.modules.accessor[i]||e.modules.accessor.accessor||!1)&&"undefined"!=(o=e.getFieldValue(n))&&(a=e.getComponent(),r="function"==typeof s.params?s.params(o,n,t,a):s.params,e.setFieldValue(n,s.accessor(o,n,t,r,a)))}),n},f.prototype.accessors={},d.prototype.registerModule("accessor",f);var g=function(e){this.table=e,this.config=!1,this.url="",this.urlGenerator=!1,this.params=!1,this.loaderElement=this.createLoaderElement(),this.msgElement=this.createMsgElement(),this.loadingElement=!1,this.errorElement=!1,this.loaderPromise=!1,this.progressiveLoad=!1,this.loading=!1,this.requestOrder=0};g.prototype.initialize=function(){var e;this.loaderElement.appendChild(this.msgElement),this.table.options.ajaxLoaderLoading&&("string"==typeof this.table.options.ajaxLoaderLoading?(e=document.createElement("template"),e.innerHTML=this.table.options.ajaxLoaderLoading.trim(),this.loadingElement=e.content.firstChild):this.loadingElement=this.table.options.ajaxLoaderLoading),this.loaderPromise=this.table.options.ajaxRequestFunc||this.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||this.defaultURLGenerator,this.table.options.ajaxLoaderError&&("string"==typeof this.table.options.ajaxLoaderError?(e=document.createElement("template"),e.innerHTML=this.table.options.ajaxLoaderError.trim(),this.errorElement=e.content.firstChild):this.errorElement=this.table.options.ajaxLoaderError),this.table.options.ajaxParams&&this.setParams(this.table.options.ajaxParams),this.table.options.ajaxConfig&&this.setConfig(this.table.options.ajaxConfig),this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.table.options.ajaxProgressiveLoad&&(this.table.options.pagination?(this.progressiveLoad=!1,console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time")):this.table.modExists("page")?(this.progressiveLoad=this.table.options.ajaxProgressiveLoad,this.table.modules.page.initializeProgressive(this.progressiveLoad)):console.error("Pagination plugin is required for progressive ajax loading"))},g.prototype.createLoaderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-loader"),e},g.prototype.createMsgElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-loader-msg"),e.setAttribute("role","alert"),e},g.prototype.setParams=function(e,t){if(t){this.params=this.params||{};for(var o in e)this.params[o]=e[o]}else this.params=e},g.prototype.getParams=function(){return this.params||{}},g.prototype.setConfig=function(e){if(this._loadDefaultConfig(),"string"==typeof e)this.config.method=e;else for(var t in e)this.config[t]=e[t]},g.prototype._loadDefaultConfig=function(e){var t=this;if(!t.config||e){t.config={};for(var o in t.defaultConfig)t.config[o]=t.defaultConfig[o]}},g.prototype.setUrl=function(e){this.url=e},g.prototype.getUrl=function(){return this.url},g.prototype.loadData=function(e,t){return this.progressiveLoad?this._loadDataProgressive():this._loadDataStandard(e,t)},g.prototype.nextPage=function(e){var t;this.loading||(t=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.getElement().clientHeight,ei||null===i)&&(i=e)}),null!==i?!1!==n?i.toFixed(n):i:""},min:function(e,t,o){var i=null,n=void 0!==o.precision&&o.precision;return e.forEach(function(e){((e=Number(e))"),o.dataTreeExpandElement?"string"==typeof o.dataTreeExpandElement?(e=document.createElement("div"),e.innerHTML=o.dataTreeExpandElement,this.expandEl=e.firstChild):this.expandEl=o.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="
"),_typeof(o.dataTreeStartExpanded)){case"boolean":this.startOpen=function(e,t){return o.dataTreeStartExpanded};break;case"function":this.startOpen=o.dataTreeStartExpanded;break;default:this.startOpen=function(e,t){return o.dataTreeStartExpanded[t]}}},y.prototype.initializeRow=function(e){var t=e.getData()[this.field],o=Array.isArray(t),i=o||!o&&"object"===(void 0===t?"undefined":_typeof(t))&&null!==t;!i&&e.modules.dataTree&&e.modules.dataTree.branchEl&&e.modules.dataTree.branchEl.parentNode.removeChild(e.modules.dataTree.branchEl),!i&&e.modules.dataTree&&e.modules.dataTree.controlEl&&e.modules.dataTree.controlEl.parentNode.removeChild(e.modules.dataTree.controlEl),e.modules.dataTree={index:e.modules.dataTree?e.modules.dataTree.index:0,open:!!i&&(e.modules.dataTree?e.modules.dataTree.open:this.startOpen(e.getComponent(),0)),controlEl:!(!e.modules.dataTree||!i)&&e.modules.dataTree.controlEl,branchEl:!(!e.modules.dataTree||!i)&&e.modules.dataTree.branchEl,parent:!!e.modules.dataTree&&e.modules.dataTree.parent,children:i}},y.prototype.layoutRow=function(e){var t=this.elementField?e.getCell(this.elementField):e.getCells()[0],o=t.getElement(),i=e.modules.dataTree;i.branchEl&&(i.branchEl.parentNode&&i.branchEl.parentNode.removeChild(i.branchEl),i.branchEl=!1),i.controlEl&&(i.controlEl.parentNode&&i.controlEl.parentNode.removeChild(i.controlEl),i.controlEl=!1),this.generateControlElement(e,o),e.element.classList.add("tabulator-tree-level-"+i.index),i.index&&(this.branchEl?(i.branchEl=this.branchEl.cloneNode(!0),o.insertBefore(i.branchEl,o.firstChild),i.branchEl.style.marginLeft=(i.branchEl.offsetWidth+i.branchEl.style.marginRight)*(i.index-1)+i.index*this.indent+"px"):o.style.paddingLeft=parseInt(window.getComputedStyle(o,null).getPropertyValue("padding-left"))+i.index*this.indent+"px")},y.prototype.generateControlElement=function(e,t){var o=this,i=e.modules.dataTree,t=t||e.getCells()[0].getElement(),n=i.controlEl;!1!==i.children&&(i.open?(i.controlEl=this.collapseEl.cloneNode(!0),i.controlEl.addEventListener("click",function(t){t.stopPropagation(),o.collapseRow(e)})):(i.controlEl=this.expandEl.cloneNode(!0),i.controlEl.addEventListener("click",function(t){t.stopPropagation(),o.expandRow(e)})),i.controlEl.addEventListener("mousedown",function(e){e.stopPropagation()}),n&&n.parentNode===t?n.parentNode.replaceChild(i.controlEl,n):t.insertBefore(i.controlEl,t.firstChild))},y.prototype.setDisplayIndex=function(e){this.displayIndex=e},y.prototype.getDisplayIndex=function(){return this.displayIndex},y.prototype.getRows=function(e){var t=this,o=[];return e.forEach(function(e,i){var n,s;o.push(e),e instanceof a&&(n=e.modules.dataTree.children,n.index||!1===n.children||(s=t.getChildren(e),s.forEach(function(e){o.push(e)})))}),o},y.prototype.getChildren=function(e){var t=this,o=e.modules.dataTree,i=[],n=[];return!1!==o.children&&o.open&&(Array.isArray(o.children)||(o.children=this.generateChildren(e)),i=this.table.modExists("filter")?this.table.modules.filter.filter(o.children):o.children,this.table.modExists("sort")&&this.table.modules.sort.sort(i),i.forEach(function(e){n.push(e),t.getChildren(e).forEach(function(e){n.push(e)})})),n}, +y.prototype.generateChildren=function(e){var t=this,o=[],i=e.getData()[this.field];return Array.isArray(i)||(i=[i]),i.forEach(function(i){var n=new a(i||{},t.table.rowManager);n.modules.dataTree.index=e.modules.dataTree.index+1,n.modules.dataTree.parent=e,n.modules.dataTree.children&&(n.modules.dataTree.open=t.startOpen(n.getComponent(),n.modules.dataTree.index)),o.push(n)}),o},y.prototype.expandRow=function(e,t){var o=e.modules.dataTree;!1!==o.children&&(o.open=!0,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowExpanded(e.getComponent(),e.modules.dataTree.index))},y.prototype.collapseRow=function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open=!1,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowCollapsed(e.getComponent(),e.modules.dataTree.index))},y.prototype.toggleRow=function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open?this.collapseRow(e):this.expandRow(e))},y.prototype.getTreeParent=function(e){return!!e.modules.dataTree.parent&&e.modules.dataTree.parent.getComponent()},y.prototype.getFilteredTreeChildren=function(e){var t,o=e.modules.dataTree,i=[];return o.children&&(Array.isArray(o.children)||(o.children=this.generateChildren(e)),t=this.table.modExists("filter")?this.table.modules.filter.filter(o.children):o.children,t.forEach(function(e){e instanceof a&&i.push(e)})),i},y.prototype.rowDelete=function(e){var t,o=e.modules.dataTree.parent;o&&(t=this.findChildIndex(e,o),!1!==t&&o.data[this.field].splice(t,1),o.data[this.field].length||delete o.data[this.field],this.initializeRow(o),this.layoutRow(o)),this.table.rowManager.refreshActiveData("tree",!1,!0)},y.prototype.addTreeChildRow=function(e,t,o,i){var n=!1;"string"==typeof t&&(t=JSON.parse(t)),Array.isArray(e.data[this.field])||(e.data[this.field]=[],e.modules.dataTree.open=this.startOpen(e.getComponent(),e.modules.dataTree.index)),void 0!==i&&!1!==(n=this.findChildIndex(i,e))&&e.data[this.field].splice(o?n:n+1,0,t),!1===n&&(o?e.data[this.field].unshift(t):e.data[this.field].push(t)),this.initializeRow(e),this.layoutRow(e),this.table.rowManager.refreshActiveData("tree",!1,!0)},y.prototype.findChildIndex=function(e,t){var o=this,i=!1;return"object"==(void 0===e?"undefined":_typeof(e))?e instanceof a?i=e.data:e instanceof r?i=e._getSelf().data:"undefined"!=typeof HTMLElement&&e instanceof HTMLElement&&t.modules.dataTree&&(i=t.modules.dataTree.children.find(function(t){return t instanceof a&&t.element===e}))&&(i=i.data):i=void 0!==e&&null!==e&&t.data[this.field].find(function(t){return t.data[o.table.options.index]==e}),i&&(Array.isArray(t.data[this.field])&&(i=t.data[this.field].indexOf(i)),-1==i&&(i=!1)),i},y.prototype.getTreeChildren=function(e){var t=e.modules.dataTree,o=[];return t.children&&(Array.isArray(t.children)||(t.children=this.generateChildren(e)),t.children.forEach(function(e){e instanceof a&&o.push(e.getComponent())})),o},y.prototype.checkForRestyle=function(e){e.row.cells.indexOf(e)||e.row.reinitialize()},y.prototype.getChildField=function(){return this.field},y.prototype.redrawNeeded=function(e){return!!this.field&&void 0!==e[this.field]||!!this.elementField&&void 0!==e[this.elementField]},d.prototype.registerModule("dataTree",y);var w=function(e){this.table=e};w.prototype.download=function(e,t,o,i,n){function s(o,i){n?!0===n?r.triggerDownload(o,i,e,t,!0):n(o):r.triggerDownload(o,i,e,t)}var r=this,a=!1;if("function"==typeof e?a=e:r.downloaders[e]?a=r.downloaders[e]:console.warn("Download Error - No such download type found: ",e),a){var l=this.generateExportList(i);a.call(this.table,l,o||{},s)}},w.prototype.generateExportList=function(e){var t=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,e||this.table.options.downloadRowRange,"download"),o=this.table.options.groupHeaderDownload;return o&&!Array.isArray(o)&&(o=[o]),t.forEach(function(e){var t;"group"===e.type&&(t=e.columns[0],o&&o[e.indent]&&(t.value=o[e.indent](t.value,e.component._group.getRowCount(),e.component._group.getData(),e.component)))}),t},w.prototype.triggerDownload=function(e,t,o,i,n){var s=document.createElement("a"),r=new Blob([e],{type:t}),i=i||"Tabulator."+("function"==typeof o?"txt":o);(r=this.table.options.downloadReady.call(this.table,e,r))&&(n?window.open(window.URL.createObjectURL(r)):navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(r,i):(s.setAttribute("href",window.URL.createObjectURL(r)),s.setAttribute("download",i),s.style.display="none",document.body.appendChild(s),s.click(),document.body.removeChild(s)),this.table.options.downloadComplete&&this.table.options.downloadComplete())},w.prototype.commsReceived=function(e,t,o){switch(t){case"intercept":this.download(o.type,"",o.options,o.active,o.intercept)}},w.prototype.downloaders={csv:function(e,t,o){var i=t&&t.delimiter?t.delimiter:",",n=[],s=[];e.forEach(function(e){var t=[];switch(e.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":e.columns.forEach(function(e,t){e&&1===e.depth&&(s[t]=void 0===e.value||"null"==typeof e.value?"":e.value)});break;case"row":e.columns.forEach(function(e){if(e){switch(_typeof(e.value)){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}t.push('"'+String(e.value).split('"').join('""')+'"')}}),n.push(t.join(i))}}),s.length&&(n=[s].concat(n)),n=n.join("\n"),t.bom&&(n="\ufeff"+n),o(n,"text/csv")},json:function(e,t,o){var i=[];e.forEach(function(e){var t={};switch(e.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":e.columns.forEach(function(e){e&&(t[e.component.getField()]=e.value)}),i.push(t)}}),i=JSON.stringify(i,null,"\t"),o(i,"application/json")},pdf:function(e,t,o){function i(e,t){var o=[];return e.columns.forEach(function(e){var i;if(e){switch(_typeof(e.value)){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}i={content:e.value,colSpan:e.width,rowSpan:e.height},t&&(i.styles=t),o.push(i)}else o.push("")}),o}var n=[],s=[],r={},a=t.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},l=t.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},c=t.jsPDF||{},u=t&&t.title?t.title:"";c.orientation||(c.orientation=t.orientation||"landscape"),c.unit||(c.unit="pt"),e.forEach(function(e){switch(e.type){case"header":n.push(i(e));break;case"group":s.push(i(e,a));break;case"calc":s.push(i(e,l));break;case"row":s.push(i(e))}});var d=new jsPDF(c);t&&t.autoTable&&(r="function"==typeof t.autoTable?t.autoTable(d)||{}:t.autoTable),u&&(r.addPageContent=function(e){d.text(u,40,30)}),r.head=n,r.body=s,d.autoTable(r),t&&t.documentProcessing&&t.documentProcessing(d),o(d.output("arraybuffer"),"application/pdf")},xlsx:function(e,t,o){function i(){var t=[],o=[],i={},n={s:{c:0,r:0},e:{c:e[0]?e[0].columns.reduce(function(e,t){return e+(t&&t.width?t.width:1)},0):0,r:e.length}};return e.forEach(function(e,i){var n=[];e.columns.forEach(function(e,t){e?(n.push(e.value instanceof Date||"object"!==_typeof(e.value)?e.value:JSON.stringify(e.value)),(e.width>1||e.height>-1)&&o.push({s:{r:i,c:t},e:{r:i+e.height-1,c:t+e.width-1}})):n.push("")}),t.push(n)}),XLSX.utils.sheet_add_aoa(i,t),i["!ref"]=XLSX.utils.encode_range(n),o.length&&(i["!merges"]=o),i}var n,s=this,r=t.sheetName||"Sheet1",a=XLSX.utils.book_new();if(a.SheetNames=[],a.Sheets={},t.sheetOnly)return void o(i());if(t.sheets)for(var l in t.sheets)!0===t.sheets[l]?(a.SheetNames.push(l),a.Sheets[l]=i()):(a.SheetNames.push(l),this.table.modules.comms.send(t.sheets[l],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:s.active,intercept:function(e){a.Sheets[l]=e}}));else a.SheetNames.push(r),a.Sheets[r]=i();t.documentProcessing&&(a=t.documentProcessing(a)),n=XLSX.write(a,{bookType:"xlsx",bookSST:!0,type:"binary"}),o(function(e){for(var t=new ArrayBuffer(e.length),o=new Uint8Array(t),i=0;i!=e.length;++i)o[i]=255&e.charCodeAt(i);return t}(n),"application/octet-stream")},html:function(e,t,o){this.modExists("export",!0)&&o(this.modules.export.genereateHTMLTable(e),"text/html")}},d.prototype.registerModule("download",w);var E=function(e){this.table=e,this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1,this.editedCells=[]};E.prototype.initializeColumn=function(e){var t=this,o={editor:!1,blocked:!1,check:e.definition.editable,params:e.definition.editorParams||{}};switch(_typeof(e.definition.editor)){case"string":"tick"===e.definition.editor&&(e.definition.editor="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),t.editors[e.definition.editor]?o.editor=t.editors[e.definition.editor]:console.warn("Editor Error - No such editor found: ",e.definition.editor);break;case"function":o.editor=e.definition.editor;break;case"boolean":!0===e.definition.editor&&("function"!=typeof e.definition.formatter?("tick"===e.definition.formatter&&(e.definition.formatter="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),t.editors[e.definition.formatter]?o.editor=t.editors[e.definition.formatter]:o.editor=t.editors.input):console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",e.definition.formatter))}o.editor&&(e.modules.edit=o)},E.prototype.getCurrentCell=function(){return!!this.currentCell&&this.currentCell.getComponent()},E.prototype.clearEditor=function(e){var t,o=this.currentCell;if(this.invalidEdit=!1,o){for(this.currentCell=!1,t=o.getElement(),e?o.validate():t.classList.remove("tabulator-validation-fail"),t.classList.remove("tabulator-editing");t.firstChild;)t.removeChild(t.firstChild);o.row.getElement().classList.remove("tabulator-row-editing")}},E.prototype.cancelEdit=function(){if(this.currentCell){var e=this.currentCell,t=this.currentCell.getComponent();this.clearEditor(!0),e.setValueActual(e.getValue()),e.cellRendered(),e.column.cellEvents.cellEditCancelled&&e.column.cellEvents.cellEditCancelled.call(this.table,t),this.table.options.cellEditCancelled.call(this.table,t)}},E.prototype.bindEditor=function(e){var t=this,o=e.getElement();o.setAttribute("tabindex",0),o.addEventListener("click",function(e){o.classList.contains("tabulator-editing")||o.focus({preventScroll:!0})}),o.addEventListener("mousedown",function(e){t.mouseClick=!0}),o.addEventListener("focus",function(o){t.recursionBlock||t.edit(e,o,!1)})},E.prototype.focusCellNoEvent=function(e,t){this.recursionBlock=!0,t&&"ie"===this.table.browser||e.getElement().focus({preventScroll:!0}),this.recursionBlock=!1},E.prototype.editCell=function(e,t){this.focusCellNoEvent(e),this.edit(e,!1,t)},E.prototype.focusScrollAdjust=function(e){if("virtual"==this.table.rowManager.getRenderMode()){var t=this.table.rowManager.element.scrollTop,o=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,i=e.row.getElement();i.offsetTop;i.offsetTopo&&(this.table.rowManager.element.scrollTop+=i.offsetTop+i.offsetHeight-o)}},E.prototype.edit=function(e,t,o){function i(t){if(c.currentCell===e){var o=!0;return e.column.modules.validate&&c.table.modExists("validate")&&"manual"!=c.table.options.validationMode&&(o=c.table.modules.validate.validate(e.column.modules.validate,e,t)),!0===o||"highlight"===c.table.options.validationMode?(c.clearEditor(),e.setValue(t,!0),e.modules.edit||(e.modules.edit={}),e.modules.edit.edited=!0,-1==c.editedCells.indexOf(e)&&c.editedCells.push(e),c.table.options.dataTree&&c.table.modExists("dataTree")&&c.table.modules.dataTree.checkForRestyle(e),!0===o||(h.classList.add("tabulator-validation-fail"),!1)):(c.invalidEdit=!0,h.classList.add("tabulator-validation-fail"),c.focusCellNoEvent(e,!0),d(),c.table.options.validationFailed.call(c.table,e.getComponent(),t,o),!1)}}function n(){c.currentCell===e&&(c.cancelEdit(),c.table.options.dataTree&&c.table.modExists("dataTree")&&c.table.modules.dataTree.checkForRestyle(e))}function s(e){d=e}var r,a,l,c=this,u=!0,d=function(){},h=e.getElement();if(this.currentCell)return void(this.invalidEdit||this.cancelEdit());if(e.column.modules.edit.blocked)return this.mouseClick=!1,h.blur(),!1;switch(t&&t.stopPropagation(),_typeof(e.column.modules.edit.check)){case"function":u=e.column.modules.edit.check(e.getComponent());break;case"boolean":u=e.column.modules.edit.check}if(u||o){if(c.cancelEdit(),c.currentCell=e,this.focusScrollAdjust(e),a=e.getComponent(),this.mouseClick&&(this.mouseClick=!1,e.column.cellEvents.cellClick&&e.column.cellEvents.cellClick.call(this.table,t,a)),e.column.cellEvents.cellEditing&&e.column.cellEvents.cellEditing.call(this.table,a),c.table.options.cellEditing.call(this.table,a),l="function"==typeof e.column.modules.edit.params?e.column.modules.edit.params(a):e.column.modules.edit.params,!1===(r=e.column.modules.edit.editor.call(c,a,s,i,n,l)))return h.blur(),!1;if(!(r instanceof Node))return console.warn("Edit Error - Editor should return an instance of Node, the editor returned:",r),h.blur(),!1;for(h.classList.add("tabulator-editing"),e.row.getElement().classList.add("tabulator-row-editing");h.firstChild;)h.removeChild(h.firstChild);h.appendChild(r),d();for(var p=h.children,m=0;m46){if(o>=i.length)return t.preventDefault(),t.stopPropagation(),a=!1,!1;switch(i[o]){case n:if(l.toUpperCase()==l.toLowerCase())return t.preventDefault(),t.stopPropagation(),a=!1,!1;break;case s:if(isNaN(l))return t.preventDefault(),t.stopPropagation(),a=!1,!1;break;case r:break;default:if(l!==i[o])return t.preventDefault(),t.stopPropagation(),a=!1,!1}a=!0}}),e.addEventListener("keyup",function(i){i.keyCode>46&&t.maskAutoFill&&o(e.value.length)}),e.placeholder||(e.placeholder=i),t.maskAutoFill&&o(e.value.length)},E.prototype.getEditedCells=function(){var e=[];return this.editedCells.forEach(function(t){e.push(t.getComponent())}),e},E.prototype.clearEdited=function(e){var t;e.modules.edit&&e.modules.edit.edited&&(e.modules.validate.invalid=!1,(t=this.editedCells.indexOf(e))>-1&&this.editedCells.splice(t,1))},E.prototype.editors={input:function(e,t,o,i,n){function s(e){(null===r||void 0===r)&&""!==a.value||a.value!==r?o(a.value)&&(r=a.value):i()}var r=e.getValue(),a=document.createElement("input");if(a.setAttribute("type",n.search?"search":"text"),a.style.padding="4px",a.style.width="100%",a.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var l in n.elementAttributes)"+"==l.charAt(0)?(l=l.slice(1),a.setAttribute(l,a.getAttribute(l)+n.elementAttributes["+"+l])):a.setAttribute(l,n.elementAttributes[l]);return a.value=void 0!==r?r:"",t(function(){a.focus({preventScroll:!0}),a.style.height="100%"}),a.addEventListener("change",s),a.addEventListener("blur",s),a.addEventListener("keydown",function(e){switch(e.keyCode){case 13:s(e);break;case 27:i()}}),n.mask&&this.table.modules.edit.maskInput(a,n),a},textarea:function(e,t,o,i,n){function s(t){(null===r||void 0===r)&&""!==c.value||c.value!==r?(o(c.value)&&(r=c.value),setTimeout(function(){e.getRow().normalizeHeight()},300)):i()}var r=e.getValue(),a=n.verticalNavigation||"hybrid",l=String(null!==r&&void 0!==r?r:""),c=(l.match(/(?:\r\n|\r|\n)/g),document.createElement("textarea")),u=0;if(c.style.display="block",c.style.padding="2px",c.style.height="100%",c.style.width="100%",c.style.boxSizing="border-box",c.style.whiteSpace="pre-wrap",c.style.resize="none",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var d in n.elementAttributes)"+"==d.charAt(0)?(d=d.slice(1),c.setAttribute(d,c.getAttribute(d)+n.elementAttributes["+"+d])):c.setAttribute(d,n.elementAttributes[d]);return c.value=l,t(function(){c.focus({preventScroll:!0}),c.style.height="100%"}),c.addEventListener("change",s),c.addEventListener("blur",s),c.addEventListener("keyup",function(){c.style.height="";var t=c.scrollHeight;c.style.height=t+"px",t!=u&&(u=t,e.getRow().normalizeHeight())}),c.addEventListener("keydown",function(e){switch(e.keyCode){case 27:i();break;case 38:("editor"==a||"hybrid"==a&&c.selectionStart)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 40:("editor"==a||"hybrid"==a&&c.selectionStart!==c.value.length)&&(e.stopImmediatePropagation(),e.stopPropagation())}}),n.mask&&this.table.modules.edit.maskInput(c,n),c},number:function(e,t,o,i,n){function s(){var e=l.value;isNaN(e)||""===e||(e=Number(e)),e!==r?o(e)&&(r=e):i()}var r=e.getValue(),a=n.verticalNavigation||"editor",l=document.createElement("input");if(l.setAttribute("type","number"),void 0!==n.max&&l.setAttribute("max",n.max),void 0!==n.min&&l.setAttribute("min",n.min),void 0!==n.step&&l.setAttribute("step",n.step),l.style.padding="4px",l.style.width="100%",l.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var c in n.elementAttributes)"+"==c.charAt(0)?(c=c.slice(1),l.setAttribute(c,l.getAttribute(c)+n.elementAttributes["+"+c])):l.setAttribute(c,n.elementAttributes[c]);l.value=r;var u=function(e){s()};return t(function(){l.removeEventListener("blur",u),l.focus({preventScroll:!0}),l.style.height="100%",l.addEventListener("blur",u)}),l.addEventListener("keydown",function(e){switch(e.keyCode){case 13:s();break;case 27:i();break;case 38:case 40:"editor"==a&&(e.stopImmediatePropagation(),e.stopPropagation())}}),n.mask&&this.table.modules.edit.maskInput(l,n),l},range:function(e,t,o,i,n){function s(){var e=a.value;isNaN(e)||""===e||(e=Number(e)),e!=r?o(e)&&(r=e):i()}var r=e.getValue(),a=document.createElement("input");if(a.setAttribute("type","range"),void 0!==n.max&&a.setAttribute("max",n.max),void 0!==n.min&&a.setAttribute("min",n.min),void 0!==n.step&&a.setAttribute("step",n.step),a.style.padding="4px",a.style.width="100%",a.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var l in n.elementAttributes)"+"==l.charAt(0)?(l=l.slice(1),a.setAttribute(l,a.getAttribute(l)+n.elementAttributes["+"+l])):a.setAttribute(l,n.elementAttributes[l]);return a.value=r,t(function(){a.focus({preventScroll:!0}),a.style.height="100%"}),a.addEventListener("blur",function(e){s()}),a.addEventListener("keydown",function(e){switch(e.keyCode){case 13:s();break;case 27:i()}}),a},select:function(e,t,o,i,n){function s(t){var o,i={},s=w.table.getData();return o=t?w.table.columnManager.getColumnByField(t):e.getColumn()._getSelf(),o?(s.forEach(function(e){var t=o.getFieldValue(e);null!==t&&void 0!==t&&""!==t&&(i[t]=!0)}),i=n.sortValuesList?"asc"==n.sortValuesList?Object.keys(i).sort():Object.keys(i).sort().reverse():Object.keys(i)):console.warn("unable to find matching column to create select lookup list:",t),i}function r(t,o){function i(e){var e={label:e.label,value:e.value,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1};return o.indexOf(e.value)>-1&&c(e),n.push(e),s.push(e),e}var n=[],s=[];if("function"==typeof t&&(t=t(e)),Array.isArray(t))t.forEach(function(e){var t;"object"===(void 0===e?"undefined":_typeof(e))?e.options?(t={label:e.label,group:!0,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1},s.push(t),e.options.forEach(function(e){i(e)})):i(e):(t={label:e,value:e,element:!1},o.indexOf(t.value)>-1&&c(t),n.push(t),s.push(t))});else for(var r in t){var l={label:t[r],value:r,element:!1};o.indexOf(l.value)>-1&&c(l),n.push(l),s.push(l)}D=n,S=s,a()}function a(){for(;L.firstChild;)L.removeChild(L.firstChild);S.forEach(function(t){var o=t.element;if(!o){if(o=document.createElement("div"),t.label=n.listItemFormatter?n.listItemFormatter(t.value,t.label,e,o,t.itemParams):t.label,t.group?(o.classList.add("tabulator-edit-select-list-group"),o.tabIndex=0,o.innerHTML=""===t.label?" ":t.label):(o.classList.add("tabulator-edit-select-list-item"),o.tabIndex=0,o.innerHTML=""===t.label?" ":t.label,o.addEventListener("click",function(){T?(h(t),M.focus()):p(t)}),H.indexOf(t)>-1&&o.classList.add("active")),t.elementAttributes&&"object"==_typeof(t.elementAttributes))for(var i in t.elementAttributes)"+"==i.charAt(0)?(i=i.slice(1),o.setAttribute(i,M.getAttribute(i)+t.elementAttributes["+"+i])):o.setAttribute(i,t.elementAttributes[i]);o.addEventListener("mousedown",function(){z=!1,setTimeout(function(){z=!0},10)}),t.element=o}L.appendChild(o)})}function l(e,t){!T&&k&&k.element&&k.element.classList.remove("active"),k&&k.element&&k.element.classList.remove("focused"),k=e,e.element&&(e.element.classList.add("focused"),t&&e.element.classList.add("active"))}function c(e){-1==H.indexOf(e)&&(H.push(e),l(e,!0)),f()}function u(e){var t=H[e];e>-1&&(H.splice(e,1),t.element&&t.element.classList.remove("active"))}function h(e){e||(e=k);var t=H.indexOf(e);t>-1?u(t):(!0!==T&&H.length>=T&&u(0),c(e)),f()}function p(e){v(),e||(e=k),e&&o(e.value)}function m(){v();var e=[];H.forEach(function(t){e.push(t.value)}),o(e)}function f(){var e=[];H.forEach(function(t){e.push(t.label)}),M.value=e.join(", ")}function g(){v(),i()}function b(){if(!L.parentNode){!0===n.values?r(s(),R):"string"==typeof n.values?r(s(n.values),R):r(n.values||[],R);var e=d.prototype.helpers.elOffset(E);L.style.minWidth=E.offsetWidth+"px",L.style.top=e.top+E.offsetHeight+"px",L.style.left=e.left+"px",L.addEventListener("mousedown",function(e){z=!1,setTimeout(function(){z=!0},10)}),document.body.appendChild(L)}}function v(){L.parentNode&&L.parentNode.removeChild(L),y()}function y(){w.table.rowManager.element.removeEventListener("scroll",g)}var w=this,E=e.getElement(),C=e.getValue(),x=n.verticalNavigation||"editor",R=void 0!==C||null===C?C:void 0!==n.defaultValue?n.defaultValue:[],M=document.createElement("input"),L=document.createElement("div"),T=n.multiselect,D=[],k={},S=[],H=[],z=!0;if(this.table.rowManager.element.addEventListener("scroll",g),(Array.isArray(n)||!Array.isArray(n)&&"object"===(void 0===n?"undefined":_typeof(n))&&!n.values)&&(console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object"),n={values:n}),M.setAttribute("type","text"),M.style.padding="4px",M.style.width="100%",M.style.boxSizing="border-box",M.style.cursor="default",M.readOnly=0!=this.currentCell,n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var A in n.elementAttributes)"+"==A.charAt(0)?(A=A.slice(1),M.setAttribute(A,M.getAttribute(A)+n.elementAttributes["+"+A])):M.setAttribute(A,n.elementAttributes[A]);return M.value=void 0!==C||null===C?C:"",M.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=D.indexOf(k),("editor"==x||"hybrid"==x&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t>0&&l(D[t-1],!T));break;case 40:t=D.indexOf(k),("editor"==x||"hybrid"==x&&t-1||String(t.title).toLowerCase().indexOf(String(e).toLowerCase())>-1)&&s.push(t)}),h(s,t))}function l(e){var t=document.createElement("div");u(),!1!==e&&(t.classList.add("tabulator-edit-select-list-notice"),t.tabIndex=0,e instanceof Node?t.appendChild(e):t.innerHTML=e,L.appendChild(t))}function c(e){var t=[];if(Array.isArray(e))e.forEach(function(e){var o={};"object"===(void 0===e?"undefined":_typeof(e))?(o.title=n.listItemFormatter?n.listItemFormatter(e.value,e.label):e.label,o.value=e.value):(o.title=n.listItemFormatter?n.listItemFormatter(e,e):e,o.value=e),t.push(o)});else for(var o in e){var i={title:n.listItemFormatter?n.listItemFormatter(o,e[o]):e[o],value:o};t.push(i)}return t}function u(){for(;L.firstChild;)L.removeChild(L.firstChild)}function h(e,t){e.length?p(e,t):n.emptyPlaceholder&&l(n.emptyPlaceholder)}function p(e,t){var o=!1;u(),T=e,T.forEach(function(e){var i=e.element;i||(i=document.createElement("div"),i.classList.add("tabulator-edit-select-list-item"),i.tabIndex=0,i.innerHTML=e.title,i.addEventListener("click",function(t){g(e),m()}),i.addEventListener("mousedown",function(e){k=!1,setTimeout(function(){k=!0},10)}),e.element=i,t&&e.value==C&&(M.value=e.title,e.element.classList.add("active"),o=!0),e===D&&(e.element.classList.add("active"),o=!0)),L.appendChild(i)}),o||g(!1)}function m(){b(),D?C!==D.value?(C=D.value,M.value=D.title,o(D.value)):i():n.freetext?(C=M.value,o(M.value)):n.allowEmpty&&""===M.value?(C=M.value,o(M.value)):i()}function f(){if(!L.parentNode){for(;L.firstChild;)L.removeChild(L.firstChild);var e=d.prototype.helpers.elOffset(E);L.style.minWidth=E.offsetWidth+"px",L.style.top=e.top+E.offsetHeight+"px",L.style.left=e.left+"px",document.body.appendChild(L)}}function g(e,t){D&&D.element&&D.element.classList.remove("active"),D=e,e&&e.element&&e.element.classList.add("active")}function b(){L.parentNode&&L.parentNode.removeChild(L),y()}function v(){b(),i()}function y(){w.table.rowManager.element.removeEventListener("scroll",v)}var w=this,E=e.getElement(),C=e.getValue(),x=n.verticalNavigation||"editor",R=void 0!==C||null===C?C:void 0!==n.defaultValue?n.defaultValue:"",M=document.createElement("input"),L=document.createElement("div"),T=[],D=!1,k=!0,S=!1;if(this.table.rowManager.element.addEventListener("scroll",v),M.setAttribute("type","search"),M.style.padding="4px",M.style.width="100%",M.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var H in n.elementAttributes)"+"==H.charAt(0)?(H=H.slice(1),M.setAttribute(H,M.getAttribute(H)+n.elementAttributes["+"+H])):M.setAttribute(H,n.elementAttributes[H]);return L.classList.add("tabulator-edit-select-list"),L.addEventListener("mousedown",function(e){k=!1,setTimeout(function(){k=!0},10)}),M.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=T.indexOf(D),("editor"==x||"hybrid"==x&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),g(t>0?T[t-1]:!1));break;case 40:t=T.indexOf(D),("editor"==x||"hybrid"==x&&t'):("ie"==a.table.browser?t.setAttribute("class","tabulator-star-inactive"):t.classList.replace("tabulator-star-active","tabulator-star-inactive"),t.innerHTML='')})}function r(e){c=e,s(e)}var a=this,l=e.getElement(),c=e.getValue(),u=l.getElementsByTagName("svg").length||5,d=l.getElementsByTagName("svg")[0]?l.getElementsByTagName("svg")[0].getAttribute("width"):14,h=[],p=document.createElement("div"),m=document.createElementNS("http://www.w3.org/2000/svg","svg");if(l.style.whiteSpace="nowrap",l.style.overflow="hidden",l.style.textOverflow="ellipsis",p.style.verticalAlign="middle",p.style.display="inline-block",p.style.padding="4px",m.setAttribute("width",d),m.setAttribute("height",d),m.setAttribute("viewBox","0 0 512 512"),m.setAttribute("xml:space","preserve"),m.style.padding="0 1px",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var f in n.elementAttributes)"+"==f.charAt(0)?(f=f.slice(1),p.setAttribute(f,p.getAttribute(f)+n.elementAttributes["+"+f])):p.setAttribute(f,n.elementAttributes[f]);for(var g=1;g<=u;g++)!function(e){var t=document.createElement("span"),i=m.cloneNode(!0);h.push(i),t.addEventListener("mouseenter",function(t){t.stopPropagation(),t.stopImmediatePropagation(),s(e)}),t.addEventListener("mousemove",function(e){e.stopPropagation(),e.stopImmediatePropagation()}),t.addEventListener("click",function(t){t.stopPropagation(),t.stopImmediatePropagation(),o(e),l.blur()}),t.appendChild(i),p.appendChild(t)}(g);return c=Math.min(parseInt(c),u),s(c),p.addEventListener("mousemove",function(e){s(0)}),p.addEventListener("click",function(e){o(0)}),l.addEventListener("blur",function(e){i()}),l.addEventListener("keydown",function(e){switch(e.keyCode){case 39:r(c+1);break;case 37:r(c-1);break;case 13:o(c);break;case 27:i()}}),p},progress:function(e,t,o,i,n){function s(){var e=d*Math.round(m.offsetWidth/(l.clientWidth/100))+u;o(e),l.setAttribute("aria-valuenow",e),l.setAttribute("aria-label",h)}var r,a,l=e.getElement(),c=void 0===n.max?l.getElementsByTagName("div")[0].getAttribute("max")||100:n.max,u=void 0===n.min?l.getElementsByTagName("div")[0].getAttribute("min")||0:n.min,d=(c-u)/100,h=e.getValue()||0,p=document.createElement("div"),m=document.createElement("div");if(p.style.position="absolute",p.style.right="0",p.style.top="0",p.style.bottom="0",p.style.width="5px",p.classList.add("tabulator-progress-handle"),m.style.display="inline-block", +m.style.position="relative",m.style.height="100%",m.style.backgroundColor="#488CE9",m.style.maxWidth="100%",m.style.minWidth="0%",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var f in n.elementAttributes)"+"==f.charAt(0)?(f=f.slice(1),m.setAttribute(f,m.getAttribute(f)+n.elementAttributes["+"+f])):m.setAttribute(f,n.elementAttributes[f]);return l.style.padding="4px 4px",h=Math.min(parseFloat(h),c),h=Math.max(parseFloat(h),u),h=Math.round((h-u)/d),m.style.width=h+"%",l.setAttribute("aria-valuemin",u),l.setAttribute("aria-valuemax",c),m.appendChild(p),p.addEventListener("mousedown",function(e){r=e.screenX,a=m.offsetWidth}),p.addEventListener("mouseover",function(){p.style.cursor="ew-resize"}),l.addEventListener("mousemove",function(e){r&&(m.style.width=a+e.screenX-r+"px")}),l.addEventListener("mouseup",function(e){r&&(e.stopPropagation(),e.stopImmediatePropagation(),r=!1,a=!1,s())}),l.addEventListener("keydown",function(e){switch(e.keyCode){case 39:e.preventDefault(),m.style.width=m.clientWidth+l.clientWidth/100+"px";break;case 37:e.preventDefault(),m.style.width=m.clientWidth-l.clientWidth/100+"px";break;case 9:case 13:s();break;case 27:i()}}),l.addEventListener("blur",function(){i()}),m},tickCross:function(e,t,o,i,n){function s(e){return l?e?u?c:a.checked:a.checked&&!u?(a.checked=!1,a.indeterminate=!0,u=!0,c):(u=!1,a.checked):a.checked}var r=e.getValue(),a=document.createElement("input"),l=n.tristate,c=void 0===n.indeterminateValue?null:n.indeterminateValue,u=!1;if(a.setAttribute("type","checkbox"),a.style.marginTop="5px",a.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var d in n.elementAttributes)"+"==d.charAt(0)?(d=d.slice(1),a.setAttribute(d,a.getAttribute(d)+n.elementAttributes["+"+d])):a.setAttribute(d,n.elementAttributes[d]);return a.value=r,!l||void 0!==r&&r!==c&&""!==r||(u=!0,a.indeterminate=!0),"firefox"!=this.table.browser&&t(function(){a.focus({preventScroll:!0})}),a.checked=!0===r||"true"===r||"True"===r||1===r,a.addEventListener("change",function(e){o(s())}),a.addEventListener("blur",function(e){o(s(!0))}),a.addEventListener("keydown",function(e){13==e.keyCode&&o(s()),27==e.keyCode&&i()}),a}},d.prototype.registerModule("edit",E);var C=function(e,t,o,i){this.type=e,this.columns=t,this.component=o||!1,this.indent=i||0},x=function(e,t,o,i,n){this.value=e,this.component=t||!1,this.width=o,this.height=i,this.depth=n},R=function(e){this.table=e,this.config={},this.cloneTableStyle=!0,this.colVisProp=""};R.prototype.generateExportList=function(e,t,o,i){this.cloneTableStyle=t,this.config=e||{},this.colVisProp=i;var n=!1!==this.config.columnHeaders?this.headersToExportRows(this.generateColumnGroupHeaders()):[],s=this.bodyToExportRows(this.rowLookup(o));return n.concat(s)},R.prototype.genereateTable=function(e,t,o,i){var n=this.generateExportList(e,t,o,i);return this.genereateTableElement(n)},R.prototype.rowLookup=function(e){var t=this,o=[];if("function"==typeof e)e.call(this.table).forEach(function(e){(e=t.table.rowManager.findRow(e))&&o.push(e)});else switch(e){case!0:case"visible":o=this.table.rowManager.getVisibleRows(!0);break;case"all":o=this.table.rowManager.rows;break;case"selected":o=this.table.modules.selectRow.selectedRows;break;case"active":default:o=this.table.rowManager.getDisplayRows()}return Object.assign([],o)},R.prototype.generateColumnGroupHeaders=function(){var e=this,t=[];return(!1!==this.config.columnGroups?this.table.columnManager.columns:this.table.columnManager.columnsByIndex).forEach(function(o){var i=e.processColumnGroup(o);i&&t.push(i)}),t},R.prototype.processColumnGroup=function(e){var t=this,o=e.columns,i=0,n=e.definition["title"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))]||e.definition.title,s={title:n,column:e,depth:1};if(o.length){if(s.subGroups=[],s.width=0,o.forEach(function(e){var o=t.processColumnGroup(e);o&&(s.width+=o.width,s.subGroups.push(o),o.depth>i&&(i=o.depth))}),s.depth+=i,!s.width)return!1}else{if(!this.columnVisCheck(e))return!1;s.width=1}return s},R.prototype.columnVisCheck=function(e){return!1!==e.definition[this.colVisProp]&&(e.visible||!e.visible&&e.definition[this.colVisProp])},R.prototype.headersToExportRows=function(e){function t(e,n){var s=i-n;if(void 0===o[n]&&(o[n]=[]),e.height=e.subGroups?1:s-e.depth+1,o[n].push(e),e.height>1)for(var r=1;r1)for(var a=1;ai&&(i=e.depth)}),e.forEach(function(e){t(e,0)}),o.forEach(function(e){var t=[];e.forEach(function(e){e?t.push(new x(e.title,e.column.getComponent(),e.width,e.height,e.depth)):t.push(null)}),n.push(new C("header",t))}),n},R.prototype.bodyToExportRows=function(e){var t=this,o=[],i=[];return this.table.columnManager.columnsByIndex.forEach(function(e){t.columnVisCheck(e)&&o.push(e.getComponent())}),!1!==this.config.columnCalcs&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&e.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&e.push(this.table.modules.columnCalcs.botRow)),e=e.filter(function(e){switch(e.type){case"group":return!1!==t.config.rowGroups;case"calc":return!1!==t.config.columnCalcs;case"row":return!(t.table.options.dataTree&&!1===t.config.dataTree&&e.modules.dataTree.parent)}return!0}),e.forEach(function(e,n){var s=e.getData(t.colVisProp),r=[],a=0;switch(e.type){case"group":a=e.level,r.push(new x(e.key,e.getComponent(),o.length,1));break;case"calc":case"row":o.forEach(function(e){r.push(new x(e._column.getFieldValue(s),e,1,1))}),t.table.options.dataTree&&!1!==t.config.dataTree&&(a=e.modules.dataTree.index)}i.push(new C(e.type,r,e.getComponent(),a))}),i},R.prototype.genereateTableElement=function(e){var t=this,o=document.createElement("table"),i=document.createElement("thead"),n=document.createElement("tbody"),s=this.lookupTableStyles(),r=this.table.options["rowFormatter"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],a={};return a.rowFormatter=null!==r?r:this.table.options.rowFormatter,this.table.options.dataTree&&!1!==this.config.dataTree&&this.table.modExists("columnCalcs")&&(a.treeElementField=this.table.modules.dataTree.elementField),a.groupHeader=this.table.options["groupHeader"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],a.groupHeader&&!Array.isArray(a.groupHeader)&&(a.groupHeader=[a.groupHeader]),o.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),i,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),e.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),e.forEach(function(e,o){switch(e.type){case"header":i.appendChild(t.genereateHeaderElement(e,a,s));break;case"group":n.appendChild(t.genereateGroupElement(e,a,s));break;case"calc":n.appendChild(t.genereateCalcElement(e,a,s));break;case"row":var r=t.genereateRowElement(e,a,s);t.mapElementStyles(o%2&&s.evenRow?s.evenRow:s.oddRow,r,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),n.appendChild(r)}}),i.innerHTML&&o.appendChild(i),o.appendChild(n),this.mapElementStyles(this.table.element,o,["border-top","border-left","border-right","border-bottom"]),o},R.prototype.lookupTableStyles=function(){var e={};return this.cloneTableStyle&&window.getComputedStyle&&(e.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),e.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),e.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),e.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),e.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],e.firstRow&&(e.styleCells=e.firstRow.getElementsByClassName("tabulator-cell"),e.firstCell=e.styleCells[0],e.lastCell=e.styleCells[e.styleCells.length-1])),e},R.prototype.genereateHeaderElement=function(e,t,o){var i=this,n=document.createElement("tr");return e.columns.forEach(function(e){if(e){var t=document.createElement("th"),o=e.component._column.definition.cssClass?e.component._column.definition.cssClass.split(" "):[];t.colSpan=e.width,t.rowSpan=e.height,t.innerHTML=e.value,i.cloneTableStyle&&(t.style.boxSizing="border-box"),o.forEach(function(e){t.classList.add(e)}),i.mapElementStyles(e.component.getElement(),t,["text-align","border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),i.mapElementStyles(e.component._column.contentElement,t,["padding-top","padding-left","padding-right","padding-bottom"]),e.component._column.visible?i.mapElementStyles(e.component.getElement(),t,["width"]):e.component._column.definition.width&&(t.style.width=e.component._column.definition.width+"px"),e.component._column.parent&&i.mapElementStyles(e.component._column.parent.groupElement,t,["border-top"]),n.appendChild(t)}}),n},R.prototype.genereateGroupElement=function(e,t,o){var i=document.createElement("tr"),n=document.createElement("td"),s=e.columns[0];return i.classList.add("tabulator-print-table-row"),t.groupHeader&&t.groupHeader[e.indent]?s.value=t.groupHeader[e.indent](s.value,e.component._group.getRowCount(),e.component._group.getData(),e.component):!1===t.groupHeader?s.value=s.value:s.value=e.component._group.generator(s.value,e.component._group.getRowCount(),e.component._group.getData(),e.component),n.colSpan=s.width,n.innerHTML=s.value,i.classList.add("tabulator-print-table-group"),i.classList.add("tabulator-group-level-"+e.indent),s.component.getVisibility()&&i.classList.add("tabulator-group-visible"),this.mapElementStyles(o.firstGroup,i,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(o.firstGroup,n,["padding-top","padding-left","padding-right","padding-bottom"]),i.appendChild(n),i},R.prototype.genereateCalcElement=function(e,t,o){var i=this.genereateRowElement(e,t,o);return i.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(o.calcRow,i,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),i},R.prototype.genereateRowElement=function(e,t,o){var n=this,s=document.createElement("tr");return s.classList.add("tabulator-print-table-row"),e.columns.forEach(function(r){if(r){var a=document.createElement("td"),l=r.component._column,c=r.value,u={modules:{},getValue:function(){return c},getField:function(){return l.definition.field},getElement:function(){return a},getColumn:function(){return l.getComponent()},getData:function(){return rowData},getRow:function(){return e.getComponent()},getComponent:function(){return u},column:l};if((l.definition.cssClass?l.definition.cssClass.split(" "):[]).forEach(function(e){a.classList.add(e)}),n.table.modExists("format")&&!1!==n.config.formatCells)c=n.table.modules.format.formatExportValue(u,n.colVisProp);else switch(void 0===c?"undefined":_typeof(c)){case"object":c=JSON.stringify(c);break;case"undefined":case"null":c="";break;default:c=c}if(c instanceof Node?a.appendChild(c):a.innerHTML=c,o.firstCell&&(n.mapElementStyles(o.firstCell,a,["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size"]),l.definition.align&&(a.style.textAlign=l.definition.align)),n.table.options.dataTree&&!1!==n.config.dataTree&&(t.treeElementField&&t.treeElementField==l.field||!t.treeElementField&&0==i)&&(e.component._row.modules.dataTree.controlEl&&a.insertBefore(e.component._row.modules.dataTree.controlEl.cloneNode(!0),a.firstChild),e.component._row.modules.dataTree.branchEl&&a.insertBefore(e.component._row.modules.dataTree.branchEl.cloneNode(!0),a.firstChild)),s.appendChild(a),u.modules.format&&u.modules.format.renderedCallback&&u.modules.format.renderedCallback(),t.rowFormatter&&!1!==n.config.formatCells){var d=e.getComponent();d.getElement=function(){return s},t.rowFormatter(d)}}}),s},R.prototype.genereateHTMLTable=function(e){var t=document.createElement("div");return t.appendChild(this.genereateTableElement(e)),t.innerHTML},R.prototype.getHtml=function(e,t,o,i){var n=this.generateExportList(o||this.table.options.htmlOutputConfig,t,e,i||"htmlOutput");return this.genereateHTMLTable(n)},R.prototype.mapElementStyles=function(e,t,o){if(this.cloneTableStyle&&e&&t){var i={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var n=window.getComputedStyle(e);o.forEach(function(e){t.style[i[e]]=n.getPropertyValue(e)})}}},d.prototype.registerModule("export",R);var M=function(e){this.table=e,this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1};M.prototype.initializeColumn=function(e,t){function o(t){var o,r="input"==e.modules.filter.tagType&&"text"==e.modules.filter.attrType||"textarea"==e.modules.filter.tagType?"partial":"match",a="",l="";if(void 0===e.modules.filter.prevSuccess||e.modules.filter.prevSuccess!==t){if(e.modules.filter.prevSuccess=t,e.modules.filter.emptyFunc(t))delete n.headerFilters[s];else{switch(e.modules.filter.value=t,_typeof(e.definition.headerFilterFunc)){case"string":n.filters[e.definition.headerFilterFunc]?(a=e.definition.headerFilterFunc,o=function(o){var i=e.definition.headerFilterFuncParams||{},s=e.getFieldValue(o);return i="function"==typeof i?i(t,s,o):i,n.filters[e.definition.headerFilterFunc](t,s,o,i)}):console.warn("Header Filter Error - Matching filter function not found: ",e.definition.headerFilterFunc);break;case"function":o=function(o){var i=e.definition.headerFilterFuncParams||{},n=e.getFieldValue(o);return i="function"==typeof i?i(t,n,o):i,e.definition.headerFilterFunc(t,n,o,i)},a=o}if(!o)switch(r){case"partial":o=function(o){var i=e.getFieldValue(o);return void 0!==i&&null!==i&&String(i).toLowerCase().indexOf(String(t).toLowerCase())>-1},a="like";break;default:o=function(o){return e.getFieldValue(o)==t},a="="}n.headerFilters[s]={value:t,func:o,type:a,params:i||{}}}l=JSON.stringify(n.headerFilters),n.prevHeaderFilterChangeCheck!==l&&(n.prevHeaderFilterChangeCheck=l,n.changed=!0,n.table.rowManager.filterRefresh())}return!0}var i,n=this,s=e.getField();e.modules.filter={success:o,attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(e)},M.prototype.generateHeaderFilterElement=function(e,t,o){function i(){}var n,s,r,a,l,c,u,d=this,h=this,p=e.modules.filter.success,m=e.getField();if(e.modules.filter.headerElement&&e.modules.filter.headerElement.parentNode&&e.contentElement.removeChild(e.modules.filter.headerElement.parentNode),m){switch(e.modules.filter.emptyFunc=e.definition.headerFilterEmptyCheck||function(e){return!e&&"0"!==e},n=document.createElement("div"),n.classList.add("tabulator-header-filter"),_typeof(e.definition.headerFilter)){case"string":h.table.modules.edit.editors[e.definition.headerFilter]?(s=h.table.modules.edit.editors[e.definition.headerFilter],"tick"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",e.definition.editor);break;case"function":s=e.definition.headerFilter;break;case"boolean":e.modules.edit&&e.modules.edit.editor?s=e.modules.edit.editor:e.definition.formatter&&h.table.modules.edit.editors[e.definition.formatter]?(s=h.table.modules.edit.editors[e.definition.formatter],"tick"!==e.definition.formatter&&"tickCross"!==e.definition.formatter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):s=h.table.modules.edit.editors.input}if(s){if(a={getValue:function(){return void 0!==t?t:""},getField:function(){return e.definition.field},getElement:function(){return n},getColumn:function(){return e.getComponent()},getRow:function(){return{normalizeHeight:function(){}}}},u=e.definition.headerFilterParams||{},u="function"==typeof u?u.call(h.table):u,!(r=s.call(this.table.modules.edit,a,function(){},p,i,u)))return void console.warn("Filter Error - Cannot add filter to "+m+" column, editor returned a value of false");if(!(r instanceof Node))return void console.warn("Filter Error - Cannot add filter to "+m+" column, editor should return an instance of Node, the editor returned:",r);m?h.table.modules.localize.bind("headerFilters|columns|"+e.definition.field,function(e){r.setAttribute("placeholder",void 0!==e&&e?e:h.table.modules.localize.getText("headerFilters|default"))}):h.table.modules.localize.bind("headerFilters|default",function(e){r.setAttribute("placeholder",void 0!==h.column.definition.headerFilterPlaceholder&&h.column.definition.headerFilterPlaceholder?h.column.definition.headerFilterPlaceholder:e)}),r.addEventListener("click",function(e){e.stopPropagation(),r.focus()}),r.addEventListener("focus",function(e){var t=d.table.columnManager.element.scrollLeft;t!==d.table.rowManager.element.scrollLeft&&(d.table.rowManager.scrollHorizontal(t),d.table.columnManager.scrollHorizontal(t))}),l=!1,c=function(e){l&&clearTimeout(l),l=setTimeout(function(){p(r.value)},h.table.options.headerFilterLiveFilterDelay)},e.modules.filter.headerElement=r,e.modules.filter.attrType=r.hasAttribute("type")?r.getAttribute("type").toLowerCase():"",e.modules.filter.tagType=r.tagName.toLowerCase(),!1!==e.definition.headerFilterLiveFilter&&("autocomplete"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter&&("autocomplete"!==e.definition.editor&&"tickCross"!==e.definition.editor||!0!==e.definition.headerFilter)&&(r.addEventListener("keyup",c),r.addEventListener("search",c),"number"==e.modules.filter.attrType&&r.addEventListener("change",function(e){p(r.value)}),"text"==e.modules.filter.attrType&&"ie"!==this.table.browser&&r.setAttribute("type","search")),"input"!=e.modules.filter.tagType&&"select"!=e.modules.filter.tagType&&"textarea"!=e.modules.filter.tagType||r.addEventListener("mousedown",function(e){e.stopPropagation()})),n.appendChild(r),e.contentElement.appendChild(n),o||h.headerFilterColumns.push(e)}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",e.definition.title)},M.prototype.hideHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="none")})},M.prototype.showHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="")})},M.prototype.setHeaderFilterFocus=function(e){e.modules.filter&&e.modules.filter.headerElement?e.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",e.getField())},M.prototype.getHeaderFilterValue=function(e){if(e.modules.filter&&e.modules.filter.headerElement)return e.modules.filter.headerElement.value;console.warn("Column Filter Error - No header filter set on column:",e.getField())},M.prototype.setHeaderFilterValue=function(e,t){e&&(e.modules.filter&&e.modules.filter.headerElement?(this.generateHeaderFilterElement(e,t,!0),e.modules.filter.success(t)):console.warn("Column Filter Error - No header filter set on column:",e.getField()))},M.prototype.reloadHeaderFilter=function(e){e&&(e.modules.filter&&e.modules.filter.headerElement?this.generateHeaderFilterElement(e,e.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",e.getField()))},M.prototype.hasChanged=function(){var e=this.changed;return this.changed=!1,e},M.prototype.setFilter=function(e,t,o,i){var n=this;n.filterList=[],Array.isArray(e)||(e=[{field:e,type:t,value:o,params:i}]),n.addFilter(e)},M.prototype.addFilter=function(e,t,o,i){var n=this;Array.isArray(e)||(e=[{field:e,type:t,value:o,params:i}]),e.forEach(function(e){(e=n.findFilter(e))&&(n.filterList.push(e),n.changed=!0)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},M.prototype.findFilter=function(e){var t,o=this;if(Array.isArray(e))return this.findSubFilters(e);var i=!1;return"function"==typeof e.field?i=function(t){return e.field(t,e.type||{})}:o.filters[e.type]?(t=o.table.columnManager.getColumnByField(e.field),i=t?function(i){return o.filters[e.type](e.value,t.getFieldValue(i),i,e.params||{})}:function(t){return o.filters[e.type](e.value,t[e.field],t,e.params||{})}):console.warn("Filter Error - No such filter type found, ignoring: ",e.type),e.func=i,!!e.func&&e},M.prototype.findSubFilters=function(e){var t=this,o=[];return e.forEach(function(e){(e=t.findFilter(e))&&o.push(e)}),!!o.length&&o},M.prototype.getFilters=function(e,t){var o=[];return e&&(o=this.getHeaderFilters()),t&&o.forEach(function(e){"function"==typeof e.type&&(e.type="function")}),o=o.concat(this.filtersToArray(this.filterList,t))},M.prototype.filtersToArray=function(e,t){var o=this,i=[];return e.forEach(function(e){var n;Array.isArray(e)?i.push(o.filtersToArray(e,t)):(n={field:e.field,type:e.type,value:e.value},t&&"function"==typeof n.type&&(n.type="function"),i.push(n))}),i},M.prototype.getHeaderFilters=function(){var e=[];for(var t in this.headerFilters)e.push({field:t,type:this.headerFilters[t].type,value:this.headerFilters[t].value});return e},M.prototype.removeFilter=function(e,t,o){var i=this;Array.isArray(e)||(e=[{field:e,type:t,value:o}]),e.forEach(function(e){var t=-1;t="object"==_typeof(e.field)?i.filterList.findIndex(function(t){return e===t}):i.filterList.findIndex(function(t){return e.field===t.field&&e.type===t.type&&e.value===t.value}),t>-1?(i.filterList.splice(t,1),i.changed=!0):console.warn("Filter Error - No matching filter type found, ignoring: ",e.type)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},M.prototype.clearFilter=function(e){this.filterList=[],e&&this.clearHeaderFilter(),this.changed=!0,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},M.prototype.clearHeaderFilter=function(){var e=this;this.headerFilters={},e.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach(function(t){t.modules.filter.value=null,t.modules.filter.prevSuccess=void 0,e.reloadHeaderFilter(t)}),this.changed=!0},M.prototype.search=function(e,t,o,i){var n=this,s=[],r=[];return Array.isArray(t)||(t=[{field:t,type:o,value:i}]),t.forEach(function(e){(e=n.findFilter(e))&&r.push(e)}),this.table.rowManager.rows.forEach(function(t){var o=!0;r.forEach(function(e){n.filterRecurse(e,t.getData())||(o=!1)}),o&&s.push("data"===e?t.getData("data"):t.getComponent())}),s},M.prototype.filter=function(e,t){var o=this,i=[],n=[];return o.table.options.dataFiltering&&o.table.options.dataFiltering.call(o.table,o.getFilters()),o.table.options.ajaxFiltering||!o.filterList.length&&!Object.keys(o.headerFilters).length?i=e.slice(0):e.forEach(function(e){o.filterRow(e)&&i.push(e)}),o.table.options.dataFiltered&&(i.forEach(function(e){n.push(e.getComponent())}),o.table.options.dataFiltered.call(o.table,o.getFilters(),n)),i},M.prototype.filterRow=function(e,t){var o=this,i=!0,n=e.getData();o.filterList.forEach(function(e){o.filterRecurse(e,n)||(i=!1)});for(var s in o.headerFilters)o.headerFilters[s].func(n)||(i=!1);return i},M.prototype.filterRecurse=function(e,t){var o=this,i=!1;return Array.isArray(e)?e.forEach(function(e){o.filterRecurse(e,t)&&(i=!0)}):i=e.func(t),i},M.prototype.filters={"=":function(e,t,o,i){return t==e},"<":function(e,t,o,i){return t":function(e,t,o,i){return t>e},">=":function(e,t,o,i){return t>=e},"!=":function(e,t,o,i){return t!=e},regex:function(e,t,o,i){return"string"==typeof e&&(e=new RegExp(e)),e.test(t)},like:function(e,t,o,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().indexOf(e.toLowerCase())>-1},keywords:function(e,t,o,i){var n=e.toLowerCase().split(void 0===i.separator?" ":i.separator),s=String(null===t||void 0===t?"":t).toLowerCase(),r=[];return n.forEach(function(e){s.includes(e)&&r.push(!0)}),i.matchAll?r.length===n.length:!!r.length},starts:function(e,t,o,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().startsWith(e.toLowerCase())},ends:function(e,t,o,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().endsWith(e.toLowerCase())},in:function(e,t,o,i){return Array.isArray(e)?e.indexOf(t)>-1:(console.warn("Filter Error - filter value is not an array:",e),!1)}},d.prototype.registerModule("filter",M);var L=function(e){this.table=e};L.prototype.initializeColumn=function(e){e.modules.format=this.lookupFormatter(e,""),void 0!==e.definition.formatterPrint&&(e.modules.format.print=this.lookupFormatter(e,"Print")),void 0!==e.definition.formatterClipboard&&(e.modules.format.clipboard=this.lookupFormatter(e,"Clipboard")),void 0!==e.definition.formatterHtmlOutput&&(e.modules.format.htmlOutput=this.lookupFormatter(e,"HtmlOutput"))},L.prototype.lookupFormatter=function(e,t){var o={params:e.definition["formatter"+t+"Params"]||{}},i=e.definition["formatter"+t];switch(void 0===i?"undefined":_typeof(i)){case"string":"tick"===i&&(i="tickCross",void 0===o.params.crossElement&&(o.params.crossElement=!1),console.warn("DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false")),this.formatters[i]?o.formatter=this.formatters[i]:(console.warn("Formatter Error - No such formatter found: ",i),o.formatter=this.formatters.plaintext);break;case"function":o.formatter=i;break;default:o.formatter=this.formatters.plaintext}return o},L.prototype.cellRendered=function(e){e.modules.format&&e.modules.format.renderedCallback&&e.modules.format.renderedCallback()},L.prototype.formatValue=function(e){function t(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t}var o=e.getComponent(),i="function"==typeof e.column.modules.format.params?e.column.modules.format.params(o):e.column.modules.format.params;return e.column.modules.format.formatter.call(this,o,i,t)},L.prototype.formatExportValue=function(e,t){var o,i=e.column.modules.format[t];if(i){var n=function(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t};return o="function"==typeof i.params?i.params(component):i.params,i.formatter.call(this,e.getComponent(),o,n)}return this.formatValue(e)},L.prototype.sanitizeHTML=function(e){if(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};return String(e).replace(/[&<>"'`=\/]/g,function(e){return t[e]})}return e},L.prototype.emptyToSpace=function(e){return null===e||void 0===e||""===e?" ":e},L.prototype.getFormatter=function(e){var e;switch(void 0===e?"undefined":_typeof(e)){case"string":this.formatters[e]?e=this.formatters[e]:(console.warn("Formatter Error - No such formatter found: ",e),e=this.formatters.plaintext);break;case"function":e=e;break;default:e=this.formatters.plaintext}return e},L.prototype.formatters={plaintext:function(e,t,o){return this.emptyToSpace(this.sanitizeHTML(e.getValue()))},html:function(e,t,o){return e.getValue()},textarea:function(e,t,o){return e.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(e.getValue()))},money:function(e,t,o){var i,n,s,r,a=parseFloat(e.getValue()),l=t.decimal||".",c=t.thousand||",",u=t.symbol||"",d=!!t.symbolAfter,h=void 0!==t.precision?t.precision:2;if(isNaN(a))return this.emptyToSpace(this.sanitizeHTML(e.getValue()));for(i=!1!==h?a.toFixed(h):a,i=String(i).split("."),n=i[0],s=i.length>1?l+i[1]:"",r=/(\d+)(\d{3})/;r.test(n);)n=n.replace(r,"$1"+c+"$2");return d?n+s+u:u+n+s},link:function(e,t,o){var i,n=e.getValue(),s=t.urlPrefix||"",r=t.download,a=n,l=document.createElement("a");if(t.labelField&&(i=e.getData(),a=i[t.labelField]),t.label)switch(_typeof(t.label)){case"string":a=t.label;break;case"function":a=t.label(e)}if(a){if(t.urlField&&(i=e.getData(),n=i[t.urlField]),t.url)switch(_typeof(t.url)){case"string":n=t.url;break;case"function":n=t.url(e)}return l.setAttribute("href",s+n),t.target&&l.setAttribute("target",t.target),t.download&&(r="function"==typeof r?r(e):!0===r?"":r,l.setAttribute("download",r)),l.innerHTML=this.emptyToSpace(this.sanitizeHTML(a)),l}return" "},image:function(e,t,o){var i=document.createElement("img");switch(i.setAttribute("src",e.getValue()),_typeof(t.height)){case"number":i.style.height=t.height+"px";break;case"string":i.style.height=t.height}switch(_typeof(t.width)){case"number":i.style.width=t.width+"px";break;case"string":i.style.width=t.width}return i.addEventListener("load",function(){e.getRow().normalizeHeight()}),i},tickCross:function(e,t,o){var i=e.getValue(),n=e.getElement(),s=t.allowEmpty,r=t.allowTruthy,a=void 0!==t.tickElement?t.tickElement:'',l=void 0!==t.crossElement?t.crossElement:'';return r&&i||!0===i||"true"===i||"True"===i||1===i||"1"===i?(n.setAttribute("aria-checked",!0),a||""):!s||"null"!==i&&""!==i&&null!==i&&void 0!==i?(n.setAttribute("aria-checked",!1),l||""):(n.setAttribute("aria-checked","mixed"),"")},datetime:function(e,t,o){var i=t.inputFormat||"YYYY-MM-DD hh:mm:ss",n=t.outputFormat||"DD/MM/YYYY hh:mm:ss",s=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",r=e.getValue(),a=moment(r,i);return a.isValid()?t.timezone?a.tz(t.timezone).format(n):a.format(n):!0===s?r:"function"==typeof s?s(r):s},datetimediff:function(e,t,o){ +var i=t.inputFormat||"YYYY-MM-DD hh:mm:ss",n=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",s=void 0!==t.suffix&&t.suffix,r=void 0!==t.unit?t.unit:void 0,a=void 0!==t.humanize&&t.humanize,l=void 0!==t.date?t.date:moment(),c=e.getValue(),u=moment(c,i);return u.isValid()?a?moment.duration(u.diff(l)).humanize(s):u.diff(l,r)+(s?" "+s:""):!0===n?c:"function"==typeof n?n(c):n},lookup:function(e,t,o){var i=e.getValue();return void 0===t[i]?(console.warn("Missing display value for "+i),i):t[i]},star:function(e,t,o){var i=e.getValue(),n=e.getElement(),s=t&&t.stars?t.stars:5,r=document.createElement("span"),a=document.createElementNS("http://www.w3.org/2000/svg","svg");r.style.verticalAlign="middle",a.setAttribute("width","14"),a.setAttribute("height","14"),a.setAttribute("viewBox","0 0 512 512"),a.setAttribute("xml:space","preserve"),a.style.padding="0 1px",i=i&&!isNaN(i)?parseInt(i):0,i=Math.max(0,Math.min(i,s));for(var l=1;l<=s;l++){var c=a.cloneNode(!0);c.innerHTML=l<=i?'':'',r.appendChild(c)}return n.style.whiteSpace="nowrap",n.style.overflow="hidden",n.style.textOverflow="ellipsis",n.setAttribute("aria-label",i),r},traffic:function(e,t,o){var i,n,s=this.sanitizeHTML(e.getValue())||0,r=document.createElement("span"),a=t&&t.max?t.max:100,l=t&&t.min?t.min:0,c=t&&void 0!==t.color?t.color:["red","orange","green"],u="#666666";if(!isNaN(s)&&void 0!==e.getValue()){switch(r.classList.add("tabulator-traffic-light"),n=parseFloat(s)<=a?parseFloat(s):a,n=parseFloat(n)>=l?parseFloat(n):l,i=(a-l)/100,n=Math.round((n-l)/i),void 0===c?"undefined":_typeof(c)){case"string":u=c;break;case"function":u=c(s);break;case"object":if(Array.isArray(c)){var d=100/c.length,h=Math.floor(n/d);h=Math.min(h,c.length-1),h=Math.max(h,0),u=c[h];break}}return r.style.backgroundColor=u,r}},progress:function(e,t,o){var i,n,s,r,a,c=this.sanitizeHTML(e.getValue())||0,u=e.getElement(),d=t&&t.max?t.max:100,h=t&&t.min?t.min:0,p=t&&t.legendAlign?t.legendAlign:"center";switch(n=parseFloat(c)<=d?parseFloat(c):d,n=parseFloat(n)>=h?parseFloat(n):h,i=(d-h)/100,n=Math.round((n-h)/i),_typeof(t.color)){case"string":s=t.color;break;case"function":s=t.color(c);break;case"object":if(Array.isArray(t.color)){var m=100/t.color.length,f=Math.floor(n/m);f=Math.min(f,t.color.length-1),f=Math.max(f,0),s=t.color[f];break}default:s="#2DC214"}switch(_typeof(t.legend)){case"string":r=t.legend;break;case"function":r=t.legend(c);break;case"boolean":r=c;break;default:r=!1}switch(_typeof(t.legendColor)){case"string":a=t.legendColor;break;case"function":a=t.legendColor(c);break;case"object":if(Array.isArray(t.legendColor)){var m=100/t.legendColor.length,f=Math.floor(n/m);f=Math.min(f,t.legendColor.length-1),f=Math.max(f,0),a=t.legendColor[f]}break;default:a="#000"}u.style.minWidth="30px",u.style.position="relative",u.setAttribute("aria-label",n);var g=document.createElement("div");if(g.style.display="inline-block",g.style.position="relative",g.style.width=n+"%",g.style.backgroundColor=s,g.style.height="100%",g.setAttribute("data-max",d),g.setAttribute("data-min",h),r){var b=document.createElement("div");b.style.position="absolute",b.style.top="4px",b.style.left=0,b.style.textAlign=p,b.style.width="100%",b.style.color=a,b.innerHTML=r}return o(function(){if(!(e instanceof l)){var t=document.createElement("div");t.style.position="absolute",t.style.top="4px",t.style.bottom="4px",t.style.left="4px",t.style.right="4px",u.appendChild(t),u=t}u.appendChild(g),r&&u.appendChild(b)}),""},color:function(e,t,o){return e.getElement().style.backgroundColor=this.sanitizeHTML(e.getValue()),""},buttonTick:function(e,t,o){return''},buttonCross:function(e,t,o){return''},rownum:function(e,t,o){return this.table.rowManager.activeRows.indexOf(e.getRow()._getSelf())+1},handle:function(e,t,o){return e.getElement().classList.add("tabulator-row-handle"),"
"},responsiveCollapse:function(e,t,o){function i(e){var t=s.element;s.open=e,t&&(s.open?(n.classList.add("open"),t.style.display=""):(n.classList.remove("open"),t.style.display="none"))}var n=document.createElement("div"),s=e.getRow()._row.modules.responsiveLayout;return n.classList.add("tabulator-responsive-collapse-toggle"),n.innerHTML="+-",e.getElement().classList.add("tabulator-row-handle"),n.addEventListener("click",function(e){e.stopImmediatePropagation(),i(!s.open)}),i(s.open),n},rowSelection:function(e){var t=this,o=document.createElement("input");if(o.type="checkbox",this.table.modExists("selectRow",!0))if(o.addEventListener("click",function(e){e.stopPropagation()}),"function"==typeof e.getRow){var i=e.getRow();o.addEventListener("change",function(e){i.toggleSelect()}),o.checked=i.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(i,o)}else o.addEventListener("change",function(e){t.table.modules.selectRow.selectedRows.length?t.table.deselectRow():t.table.selectRow()}),this.table.modules.selectRow.registerHeaderSelectCheckbox(o);return o}},d.prototype.registerModule("format",L);var T=function(e){this.table=e,this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightPadding=0,this.initializationMode="left",this.active=!1,this.scrollEndTimer=!1};T.prototype.reset=function(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightMargin=0,this.active=!1,this.table.columnManager.headersElement.style.marginLeft=0,this.table.columnManager.element.style.paddingRight=0},T.prototype.initializeColumn=function(e){var t={margin:0,edge:!1};e.isGroup||(this.frozenCheck(e)?(t.position=this.initializationMode,"left"==this.initializationMode?this.leftColumns.push(e):this.rightColumns.unshift(e),this.active=!0,e.modules.frozen=t):this.initializationMode="right")},T.prototype.frozenCheck=function(e){return e.parent.isGroup&&e.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),e.parent.isGroup?this.frozenCheck(e.parent):e.definition.frozen},T.prototype.scrollHorizontal=function(){var e,t=this;this.active&&(clearTimeout(this.scrollEndTimer),this.scrollEndTimer=setTimeout(function(){t.layout()},100),e=this.table.rowManager.getVisibleRows(),this.calcMargins(),this.layoutColumnPosition(),this.layoutCalcRows(),e.forEach(function(e){"row"===e.type&&t.layoutRow(e)}),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},T.prototype.calcMargins=function(){this.leftMargin=this._calcSpace(this.leftColumns,this.leftColumns.length)+"px",this.table.columnManager.headersElement.style.marginLeft=this.leftMargin,this.rightMargin=this._calcSpace(this.rightColumns,this.rightColumns.length)+"px",this.table.columnManager.element.style.paddingRight=this.rightMargin,this.rightPadding=this.table.rowManager.element.clientWidth+this.table.columnManager.scrollLeft},T.prototype.layoutCalcRows=function(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow))},T.prototype.layoutColumnPosition=function(e){var t=this,o=[];this.leftColumns.forEach(function(i,n){if(i.modules.frozen.margin=t._calcSpace(t.leftColumns,n)+t.table.columnManager.scrollLeft+"px",n==t.leftColumns.length-1?i.modules.frozen.edge=!0:i.modules.frozen.edge=!1,i.parent.isGroup){var s=t.getColGroupParentElement(i);o.includes(s)||(t.layoutElement(s,i),o.push(s)),i.modules.frozen.edge&&s.classList.add("tabulator-frozen-"+i.modules.frozen.position)}else t.layoutElement(i.getElement(),i);e&&i.cells.forEach(function(e){t.layoutElement(e.getElement(),i)})}),this.rightColumns.forEach(function(o,i){o.modules.frozen.margin=t.rightPadding-t._calcSpace(t.rightColumns,i+1)+"px",i==t.rightColumns.length-1?o.modules.frozen.edge=!0:o.modules.frozen.edge=!1,o.parent.isGroup?t.layoutElement(t.getColGroupParentElement(o),o):t.layoutElement(o.getElement(),o),e&&o.cells.forEach(function(e){t.layoutElement(e.getElement(),o)})})},T.prototype.getColGroupParentElement=function(e){return e.parent.isGroup?this.getColGroupParentElement(e.parent):e.getElement()},T.prototype.layout=function(){var e=this;e.active&&(this.calcMargins(),e.table.rowManager.getDisplayRows().forEach(function(t){"row"===t.type&&e.layoutRow(t)}),this.layoutCalcRows(),this.layoutColumnPosition(!0),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},T.prototype.layoutRow=function(e){var t=this;e.getElement().style.paddingLeft=this.leftMargin,this.leftColumns.forEach(function(o){var i=e.getCell(o);i&&t.layoutElement(i.getElement(),o)}),this.rightColumns.forEach(function(o){var i=e.getCell(o);i&&t.layoutElement(i.getElement(),o)})},T.prototype.layoutElement=function(e,t){t.modules.frozen&&(e.style.position="absolute",e.style.left=t.modules.frozen.margin,e.classList.add("tabulator-frozen"),t.modules.frozen.edge&&e.classList.add("tabulator-frozen-"+t.modules.frozen.position))},T.prototype._calcSpace=function(e,t){for(var o=0,i=0;i-1&&t.splice(o,1)}),t},D.prototype.freezeRow=function(e){e.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(e.modules.frozen=!0,this.topElement.appendChild(e.getElement()),e.initialize(),e.normalizeHeight(),this.table.rowManager.adjustTableSize(),this.rows.push(e),this.table.rowManager.refreshActiveData("display"),this.styleRows())},D.prototype.unfreezeRow=function(e){var t=this.rows.indexOf(e);if(e.modules.frozen){e.modules.frozen=!1;var o=e.getElement();o.parentNode.removeChild(o),this.table.rowManager.adjustTableSize(),this.rows.splice(t,1),this.table.rowManager.refreshActiveData("display"),this.rows.length&&this.styleRows()}else console.warn("Freeze Error - Row is already unfrozen")},D.prototype.styleRows=function(e){var t=this;this.rows.forEach(function(e,o){t.table.rowManager.styleRow(e,o)})},d.prototype.registerModule("frozenRows",D);var k=function(e){this._group=e,this.type="GroupComponent"};k.prototype.getKey=function(){return this._group.key},k.prototype.getField=function(){return this._group.field},k.prototype.getElement=function(){return this._group.element},k.prototype.getRows=function(){return this._group.getRows(!0)},k.prototype.getSubGroups=function(){return this._group.getSubGroups(!0)},k.prototype.getParentGroup=function(){return!!this._group.parent&&this._group.parent.getComponent()},k.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._group.visible},k.prototype.isVisible=function(){return this._group.visible},k.prototype.show=function(){this._group.show()},k.prototype.hide=function(){this._group.hide()},k.prototype.toggle=function(){this._group.toggleVisibility()},k.prototype._getSelf=function(){return this._group},k.prototype.getTable=function(){return this._group.groupManager.table};var S=function(e,t,o,i,n,s,r){this.groupManager=e,this.parent=t,this.key=i,this.level=o,this.field=n,this.hasSubGroups=o-1?o?this.rows.splice(n+1,0,e):this.rows.splice(n,0,e):o?this.rows.push(e):this.rows.unshift(e),e.modules.group=this,this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)},S.prototype.scrollHeader=function(e){this.arrowElement.style.marginLeft=e,this.groupList.forEach(function(t){t.scrollHeader(e)})},S.prototype.getRowIndex=function(e){},S.prototype.conformRowData=function(e){return this.field?e[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(e=this.parent.conformRowData(e)),e},S.prototype.removeRow=function(e){var t=this.rows.indexOf(e),o=e.getElement();t>-1&&this.rows.splice(t,1),this.groupManager.table.options.groupValues||this.rows.length?(o.parentNode&&o.parentNode.removeChild(o),this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)):(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0))},S.prototype.removeGroup=function(e){var t,o=e.level+"_"+e.key;this.groups[o]&&(delete this.groups[o],t=this.groupList.indexOf(e),t>-1&&this.groupList.splice(t,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))},S.prototype.getHeadersAndRows=function(e){var t=[];return t.push(this),this._visSet(),this.visible?this.groupList.length?this.groupList.forEach(function(o){t=t.concat(o.getHeadersAndRows(e))}):(!e&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),t.push(this.calcs.top)),t=t.concat(this.rows),!e&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),t.push(this.calcs.bottom))):this.groupList.length||"table"==this.groupManager.table.options.columnCalcs||this.groupManager.table.modExists("columnCalcs")&&(!e&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),t.push(this.calcs.top))),!e&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),t.push(this.calcs.bottom)))),t},S.prototype.getData=function(e,t){var o=[];return this._visSet(),(!e||e&&this.visible)&&this.rows.forEach(function(e){o.push(e.getData(t||"data"))}),o},S.prototype.getRowCount=function(){var e=0;return this.groupList.length?this.groupList.forEach(function(t){e+=t.getRowCount()}):e=this.rows.length,e},S.prototype.toggleVisibility=function(){this.visible?this.hide():this.show()},S.prototype.hide=function(){this.visible=!1,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination?this.groupManager.updateGroupRows(!0):(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach(function(e){e.getHeadersAndRows().forEach(function(e){e.detachElement()})}):this.rows.forEach(function(e){var t=e.getElement();t.parentNode.removeChild(t)}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()),this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!1)},S.prototype.show=function(){var e=this;if(e.visible=!0,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination)this.groupManager.updateGroupRows(!0);else{this.element.classList.add("tabulator-group-visible");var t=e.getElement();this.groupList.length?this.groupList.forEach(function(e){e.getHeadersAndRows().forEach(function(e){var o=e.getElement();t.parentNode.insertBefore(o,t.nextSibling),e.initialize(),t=o})}):e.rows.forEach(function(e){var o=e.getElement();t.parentNode.insertBefore(o,t.nextSibling),e.initialize(),t=o}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()}this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!0)},S.prototype._visSet=function(){var e=[];"function"==typeof this.visible&&(this.rows.forEach(function(t){e.push(t.getData())}),this.visible=this.visible(this.key,this.getRowCount(),e,this.getComponent()))},S.prototype.getRowGroup=function(e){var t=!1;return this.groupList.length?this.groupList.forEach(function(o){var i=o.getRowGroup(e);i&&(t=i)}):this.rows.find(function(t){return t===e})&&(t=this),t},S.prototype.getSubGroups=function(e){var t=[];return this.groupList.forEach(function(o){t.push(e?o.getComponent():o)}),t},S.prototype.getRows=function(e){var t=[];return this.rows.forEach(function(o){t.push(e?o.getComponent():o)}),t},S.prototype.generateGroupHeaderContents=function(){var e=[];for(this.rows.forEach(function(t){e.push(t.getData())}),this.elementContents=this.generator(this.key,this.getRowCount(),e,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);"string"==typeof this.elementContents?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)},S.prototype.getElement=function(){this.addBindingsd=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var e=0;ei.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),e.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],e.table.modules.localize.bind("groups|item",function(t,o){e.headerGenerator[0]=function(e,i,n){return(void 0===e?"":e)+"("+i+" "+(1===i?t:o.groups.items)+")"}}),this.groupIDLookups=[],Array.isArray(t)||t)this.table.modExists("columnCalcs")&&"table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.removeCalcs();else if(this.table.modExists("columnCalcs")&&"group"!=this.table.options.columnCalcs){var n=this.table.columnManager.getRealColumns();n.forEach(function(t){t.definition.topCalc&&e.table.modules.columnCalcs.initializeTopRow(),t.definition.bottomCalc&&e.table.modules.columnCalcs.initializeBottomRow()})}Array.isArray(t)||(t=[t]),t.forEach(function(t,o){var i,n;"function"==typeof t?i=t:(n=e.table.columnManager.getColumnByField(t),i=n?function(e){return n.getFieldValue(e)}:function(e){return e[t]}),e.groupIDLookups.push({field:"function"!=typeof t&&t,func:i,values:!!e.allowedValues&&e.allowedValues[o]})}),o&&(Array.isArray(o)||(o=[o]),o.forEach(function(e){e="function"==typeof e?e:function(){return!0}}),e.startOpen=o),i&&(e.headerGenerator=Array.isArray(i)?i:[i]),this.initialized=!0},H.prototype.setDisplayIndex=function(e){this.displayIndex=e},H.prototype.getDisplayIndex=function(){return this.displayIndex},H.prototype.getRows=function(e){return this.groupIDLookups.length?(this.table.options.dataGrouping.call(this.table),this.generateGroups(e),this.table.options.dataGrouped&&this.table.options.dataGrouped.call(this.table,this.getGroups(!0)),this.updateGroupRows()):e.slice(0)},H.prototype.getGroups=function(e){var t=[];return this.groupList.forEach(function(o){t.push(e?o.getComponent():o)}),t},H.prototype.getChildGroups=function(e){var t=this,o=[];return e||(e=this),e.groupList.forEach(function(e){e.groupList.length?o=o.concat(t.getChildGroups(e)):o.push(e)}),o},H.prototype.wipe=function(){this.groupList.forEach(function(e){e.wipe()})},H.prototype.pullGroupListData=function(e){var t=this,o=[];return e.forEach(function(e){var i={};i.level=0,i.rowCount=0,i.headerContent="";var n=[];e.hasSubGroups?(n=t.pullGroupListData(e.groupList),i.level=e.level,i.rowCount=n.length-e.groupList.length,i.headerContent=e.generator(e.key,i.rowCount,e.rows,e),o.push(i),o=o.concat(n)):(i.level=e.level,i.headerContent=e.generator(e.key,e.rows.length,e.rows,e),i.rowCount=e.getRows().length,o.push(i),e.getRows().forEach(function(e){o.push(e.getData("data"))}))}),o},H.prototype.getGroupedData=function(){return this.pullGroupListData(this.groupList)},H.prototype.getRowGroup=function(e){var t=!1;return this.groupList.forEach(function(o){var i=o.getRowGroup(e);i&&(t=i)}),t},H.prototype.countGroups=function(){return this.groupList.length},H.prototype.generateGroups=function(e){var t=this,o=t.groups;t.groups={},t.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach(function(e){t.createGroup(e,0,o)}),e.forEach(function(e){t.assignRowToExistingGroup(e,o)})):e.forEach(function(e){t.assignRowToGroup(e,o)})},H.prototype.createGroup=function(e,t,o){var i,n=t+"_"+e;o=o||[],i=new S(this,!1,t,e,this.groupIDLookups[0].field,this.headerGenerator[0],o[n]),this.groups[n]=i,this.groupList.push(i)},H.prototype.assignRowToExistingGroup=function(e,t){var o=this.groupIDLookups[0].func(e.getData()),i="0_"+o;this.groups[i]&&this.groups[i].addRow(e)},H.prototype.assignRowToGroup=function(e,t){var o=this.groupIDLookups[0].func(e.getData()),i=!this.groups["0_"+o];return i&&this.createGroup(o,0,t),this.groups["0_"+o].addRow(e),!i},H.prototype.updateGroupRows=function(e){var t=this,o=[];if(t.groupList.forEach(function(e){o=o.concat(e.getHeadersAndRows())}),e){var i=t.table.rowManager.setDisplayRows(o,this.getDisplayIndex());!0!==i&&this.setDisplayIndex(i),t.table.rowManager.refreshActiveData("group",!0,!0)}return o},H.prototype.scrollHeaders=function(e){e+="px",this.groupList.forEach(function(t){t.scrollHeader(e)})},H.prototype.removeGroup=function(e){var t,o=e.level+"_"+e.key;this.groups[o]&&(delete this.groups[o],(t=this.groupList.indexOf(e))>-1&&this.groupList.splice(t,1))},d.prototype.registerModule("groupRows",H);var z=function(e){this.table=e,this.history=[],this.index=-1};z.prototype.clear=function(){this.history=[],this.index=-1},z.prototype.action=function(e,t,o){this.history=this.history.slice(0,this.index+1),this.history.push({type:e,component:t,data:o}),this.index++},z.prototype.getHistoryUndoSize=function(){return this.index+1},z.prototype.getHistoryRedoSize=function(){return this.history.length-(this.index+1)},z.prototype.undo=function(){if(this.index>-1){var e=this.history[this.index];return this.undoers[e.type].call(this,e),this.index--,this.table.options.historyUndo.call(this.table,e.type,e.component.getComponent(),e.data),!0}return console.warn("History Undo Error - No more history to undo"),!1},z.prototype.redo=function(){if(this.history.length-1>this.index){this.index++;var e=this.history[this.index];return this.redoers[e.type].call(this,e),this.table.options.historyRedo.call(this.table,e.type,e.component.getComponent(),e.data),!0}return console.warn("History Redo Error - No more history to redo"),!1},z.prototype.undoers={cellEdit:function(e){e.component.setValueProcessData(e.data.oldValue)},rowAdd:function(e){e.component.deleteActual()},rowDelete:function(e){var t=this.table.rowManager.addRowActual(e.data.data,e.data.pos,e.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(e.component,t)},rowMove:function(e){ +this.table.rowManager.moveRowActual(e.component,this.table.rowManager.rows[e.data.posFrom],!e.data.after),this.table.rowManager.redraw()}},z.prototype.redoers={cellEdit:function(e){e.component.setValueProcessData(e.data.newValue)},rowAdd:function(e){var t=this.table.rowManager.addRowActual(e.data.data,e.data.pos,e.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(e.component,t)},rowDelete:function(e){e.component.deleteActual()},rowMove:function(e){this.table.rowManager.moveRowActual(e.component,this.table.rowManager.rows[e.data.posTo],e.data.after),this.table.rowManager.redraw()}},z.prototype._rebindRow=function(e,t){this.history.forEach(function(o){if(o.component instanceof a)o.component===e&&(o.component=t);else if(o.component instanceof c&&o.component.row===e){var i=o.component.column.getField();i&&(o.component=t.getCell(i))}})},d.prototype.registerModule("history",z);var A=function(e){this.table=e,this.fieldIndex=[],this.hasIndex=!1};A.prototype.parseTable=function(){var e=this,t=e.table.element,o=e.table.options,i=(o.columns,t.getElementsByTagName("th")),n=t.getElementsByTagName("tbody")[0],s=[];e.hasIndex=!1,e.table.options.htmlImporting.call(this.table),n=n?n.getElementsByTagName("tr"):[],e._extractOptions(t,o),i.length?e._extractHeaders(i,n):e._generateBlankHeaders(i,n);for(var r=0;r-1&&e.pressedKeys.splice(i,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)},_.prototype.clearBindings=function(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)},_.prototype.checkBinding=function(e,t){var o=this,i=!0;return e.ctrlKey==t.ctrl&&e.shiftKey==t.shift&&e.metaKey==t.meta&&(t.keys.forEach(function(e){-1==o.pressedKeys.indexOf(e)&&(i=!1)}),i&&t.action.call(o,e),!0)},_.prototype.bindings={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35,undo:"ctrl + 90",redo:"ctrl + 89",copyToClipboard:"ctrl + 67"},_.prototype.actions={keyBlock:function(e){e.stopPropagation(),e.preventDefault()},scrollPageUp:function(e){var t=this.table.rowManager,o=t.scrollTop-t.height;t.element.scrollHeight;e.preventDefault(),t.displayRowsCount&&(o>=0?t.element.scrollTop=o:t.scrollToRow(t.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function(e){var t=this.table.rowManager,o=t.scrollTop+t.height,i=t.element.scrollHeight;e.preventDefault(),t.displayRowsCount&&(o<=i?t.element.scrollTop=o:t.scrollToRow(t.getDisplayRows()[t.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function(e){var t=this.table.rowManager;e.preventDefault(),t.displayRowsCount&&t.scrollToRow(t.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function(e){var t=this.table.rowManager;e.preventDefault(),t.displayRowsCount&&t.scrollToRow(t.getDisplayRows()[t.displayRowsCount-1]),this.table.element.focus()},navPrev:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().prev())},navNext:function(e){var t,o=!1,i=this.table.options.tabEndNewRow;this.table.modExists("edit")&&(o=this.table.modules.edit.currentCell)&&(e.preventDefault(),t=o.nav(),t.next()||i&&(o.getElement().firstChild.blur(),i=!0===i?this.table.addRow({}):"function"==typeof i?this.table.addRow(i(o.row.getComponent())):this.table.addRow(Object.assign({},i)),i.then(function(){setTimeout(function(){t.next()})})))},navLeft:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().left())},navRight:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().right())},navUp:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().up())},navDown:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().down())},undo:function(e){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(e.preventDefault(),this.table.modules.history.undo()))},redo:function(e){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(e.preventDefault(),this.table.modules.history.redo()))},copyToClipboard:function(e){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(!1,!0)}},d.prototype.registerModule("keybindings",_);var P=function(e){this.table=e,this.menuEl=!1,this.blurEvent=this.hideMenu.bind(this),this.escEvent=this.escMenu.bind(this),this.nestedMenuBlock=!1};P.prototype.initializeColumnHeader=function(e){var t,o=this;e.definition.headerContextMenu&&e.getElement().addEventListener("contextmenu",function(t){var i="function"==typeof e.definition.headerContextMenu?e.definition.headerContextMenu(e.getComponent()):e.definition.headerContextMenu;t.preventDefault(),o.loadMenu(t,e,i)}),e.definition.headerMenu&&(t=document.createElement("span"),t.classList.add("tabulator-header-menu-button"),t.innerHTML="⋮",t.addEventListener("click",function(t){var i="function"==typeof e.definition.headerMenu?e.definition.headerMenu(e.getComponent()):e.definition.headerMenu;t.stopPropagation(),t.preventDefault(),o.loadMenu(t,e,i)}),e.titleElement.insertBefore(t,e.titleElement.firstChild))},P.prototype.initializeCell=function(e){var t=this;e.getElement().addEventListener("contextmenu",function(o){var i="function"==typeof e.column.definition.contextMenu?e.column.definition.contextMenu(e.getComponent()):e.column.definition.contextMenu;o.stopImmediatePropagation(),t.loadMenu(o,e,i)})},P.prototype.initializeRow=function(e){var t=this;e.getElement().addEventListener("contextmenu",function(o){var i="function"==typeof t.table.options.rowContextMenu?t.table.options.rowContextMenu(e.getComponent()):t.table.options.rowContextMenu;t.loadMenu(o,e,i)})},P.prototype.initializeGroup=function(e){var t=this;e.getElement().addEventListener("contextmenu",function(o){var i="function"==typeof t.table.options.groupContextMenu?t.table.options.groupContextMenu(e.getComponent()):t.table.options.groupContextMenu;t.loadMenu(o,e,i)})},P.prototype.loadMenu=function(e,t,o){var i=this,n=Math.max(document.body.offsetHeight,window.innerHeight);if(e.preventDefault(),o&&o.length){if(this.nestedMenuBlock){if(this.isOpen())return}else this.nestedMenuBlock=setTimeout(function(){i.nestedMenuBlock=!1},100);this.hideMenu(),this.menuEl=document.createElement("div"),this.menuEl.classList.add("tabulator-menu"),o.forEach(function(e){var o=document.createElement("div"),n=e.label,s=e.disabled;e.separator?o.classList.add("tabulator-menu-separator"):(o.classList.add("tabulator-menu-item"),"function"==typeof n&&(n=n(t.getComponent())),n instanceof Node?o.appendChild(n):o.innerHTML=n,"function"==typeof s&&(s=s(t.getComponent())),s?(o.classList.add("tabulator-menu-item-disabled"),o.addEventListener("click",function(e){e.stopPropagation()})):o.addEventListener("click",function(o){i.hideMenu(),e.action(o,t.getComponent())})),i.menuEl.appendChild(o)}),this.menuEl.style.top=e.pageY+"px",this.menuEl.style.left=e.pageX+"px",document.body.addEventListener("click",this.blurEvent),this.table.rowManager.element.addEventListener("scroll",this.blurEvent),setTimeout(function(){document.body.addEventListener("contextmenu",i.blurEvent)},100),document.body.addEventListener("keydown",this.escEvent),document.body.appendChild(this.menuEl),e.pageX+this.menuEl.offsetWidth>=document.body.offsetWidth&&(this.menuEl.style.left="",this.menuEl.style.right=document.body.offsetWidth-e.pageX+"px"),e.pageY+this.menuEl.offsetHeight>=n&&(this.menuEl.style.top="",this.menuEl.style.bottom=n-e.pageY+"px")}},P.prototype.isOpen=function(){return!!this.menuEl.parentNode},P.prototype.escMenu=function(e){27==e.keyCode&&this.hideMenu()},P.prototype.hideMenu=function(){this.menuEl.parentNode&&this.menuEl.parentNode.removeChild(this.menuEl),this.escEvent&&document.body.removeEventListener("keydown",this.escEvent),this.blurEvent&&(document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent))},P.prototype.menus={},d.prototype.registerModule("menu",P);var F=function(e){this.table=e,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.touchMove=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this)};F.prototype.createPlaceholderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.classList.add("tabulator-col-placeholder"),e},F.prototype.initializeColumn=function(e){var t,o=this,i={};e.modules.frozen||(t=e.getElement(),i.mousemove=function(i){e.parent===o.moving.parent&&((o.touchMove?i.touches[0].pageX:i.pageX)-d.prototype.helpers.elOffset(t).left+o.table.columnManager.element.scrollLeft>e.getWidth()/2?o.toCol===e&&o.toColAfter||(t.parentNode.insertBefore(o.placeholderElement,t.nextSibling),o.moveColumn(e,!0)):(o.toCol!==e||o.toColAfter)&&(t.parentNode.insertBefore(o.placeholderElement,t),o.moveColumn(e,!1)))}.bind(o),t.addEventListener("mousedown",function(t){o.touchMove=!1,1===t.which&&(o.checkTimeout=setTimeout(function(){o.startMove(t,e)},o.checkPeriod))}),t.addEventListener("mouseup",function(e){1===e.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)}),o.bindTouchEvents(e)),e.modules.moveColumn=i},F.prototype.bindTouchEvents=function(e){var t,o,i,n,s,r,a,l=this,c=e.getElement(),u=!1;c.addEventListener("touchstart",function(c){l.checkTimeout=setTimeout(function(){l.touchMove=!0,t=e,o=e.nextColumn(),n=o?o.getWidth()/2:0,i=e.prevColumn(),s=i?i.getWidth()/2:0,r=0,a=0,u=!1,l.startMove(c,e)},l.checkPeriod)},{passive:!0}),c.addEventListener("touchmove",function(c){var d,h;l.moving&&(l.moveHover(c),u||(u=c.touches[0].pageX),d=c.touches[0].pageX-u,d>0?o&&d-r>n&&(h=o)!==e&&(u=c.touches[0].pageX,h.getElement().parentNode.insertBefore(l.placeholderElement,h.getElement().nextSibling),l.moveColumn(h,!0)):i&&-d-a>s&&(h=i)!==e&&(u=c.touches[0].pageX,h.getElement().parentNode.insertBefore(l.placeholderElement,h.getElement()),l.moveColumn(h,!1)),h&&(t=h,o=h.nextColumn(),r=n,n=o?o.getWidth()/2:0,i=h.prevColumn(),a=s,s=i?i.getWidth()/2:0))},{passive:!0}),c.addEventListener("touchend",function(e){l.checkTimeout&&clearTimeout(l.checkTimeout),l.moving&&l.endMove(e)})},F.prototype.startMove=function(e,t){var o=t.getElement();this.moving=t,this.startX=(this.touchMove?e.touches[0].pageX:e.pageX)-d.prototype.helpers.elOffset(o).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.table.columnManager.getElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom="0",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(e)},F.prototype._bindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveColumn.mousemove)})},F.prototype._unbindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveColumn.mousemove)})},F.prototype.moveColumn=function(e,t){var o=this.moving.getCells();this.toCol=e,this.toColAfter=t,t?e.getCells().forEach(function(e,t){var i=e.getElement();i.parentNode.insertBefore(o[t].getElement(),i.nextSibling)}):e.getCells().forEach(function(e,t){var i=e.getElement();i.parentNode.insertBefore(o[t].getElement(),i)})},F.prototype.endMove=function(e){(1===e.which||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))},F.prototype.moveHover=function(e){var t,o=this,i=o.table.columnManager.getElement(),n=i.scrollLeft,s=(o.touchMove?e.touches[0].pageX:e.pageX)-d.prototype.helpers.elOffset(i).left+n;o.hoverElement.style.left=s-o.startX+"px",s-ne.getHeight()/2){if(t.toRow!==e||!t.toRowAfter){var i=e.getElement();i.parentNode.insertBefore(t.placeholderElement,i.nextSibling),t.moveRow(e,!0)}}else if(t.toRow!==e||t.toRowAfter){var i=e.getElement();i.previousSibling&&(i.parentNode.insertBefore(t.placeholderElement,i),t.moveRow(e,!1))}}.bind(t),e.modules.moveRow=o},N.prototype.initializeRow=function(e){var t,o=this,i={};i.mouseup=function(t){o.tableRowDrop(t,e)}.bind(o),i.mousemove=function(t){if(t.pageY-d.prototype.helpers.elOffset(e.element).top+o.table.rowManager.element.scrollTop>e.getHeight()/2){if(o.toRow!==e||!o.toRowAfter){var i=e.getElement();i.parentNode.insertBefore(o.placeholderElement,i.nextSibling),o.moveRow(e,!0)}}else if(o.toRow!==e||o.toRowAfter){var i=e.getElement();i.parentNode.insertBefore(o.placeholderElement,i),o.moveRow(e,!1)}}.bind(o),this.hasHandle||(t=e.getElement(),t.addEventListener("mousedown",function(t){1===t.which&&(o.checkTimeout=setTimeout(function(){o.startMove(t,e)},o.checkPeriod))}),t.addEventListener("mouseup",function(e){1===e.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)}),this.bindTouchEvents(e,e.getElement())),e.modules.moveRow=i},N.prototype.initializeCell=function(e){var t=this,o=e.getElement();o.addEventListener("mousedown",function(o){1===o.which&&(t.checkTimeout=setTimeout(function(){t.startMove(o,e.row)},t.checkPeriod))}),o.addEventListener("mouseup",function(e){1===e.which&&t.checkTimeout&&clearTimeout(t.checkTimeout)}),this.bindTouchEvents(e.row,e.getElement())},N.prototype.bindTouchEvents=function(e,t){var o,i,n,s,r,a,l,c=this,u=!1;t.addEventListener("touchstart",function(t){c.checkTimeout=setTimeout(function(){c.touchMove=!0,o=e,i=e.nextRow(),s=i?i.getHeight()/2:0,n=e.prevRow(),r=n?n.getHeight()/2:0,a=0,l=0,u=!1,c.startMove(t,e)},c.checkPeriod)},{passive:!0}),this.moving,this.toRow,this.toRowAfter,t.addEventListener("touchmove",function(t){var d,h;c.moving&&(t.preventDefault(),c.moveHover(t),u||(u=t.touches[0].pageY),d=t.touches[0].pageY-u,d>0?i&&d-a>s&&(h=i)!==e&&(u=t.touches[0].pageY,h.getElement().parentNode.insertBefore(c.placeholderElement,h.getElement().nextSibling),c.moveRow(h,!0)):n&&-d-l>r&&(h=n)!==e&&(u=t.touches[0].pageY,h.getElement().parentNode.insertBefore(c.placeholderElement,h.getElement()),c.moveRow(h,!1)),h&&(o=h,i=h.nextRow(),a=s,s=i?i.getHeight()/2:0,n=h.prevRow(),l=r,r=n?n.getHeight()/2:0))}),t.addEventListener("touchend",function(e){c.checkTimeout&&clearTimeout(c.checkTimeout),c.moving&&(c.endMove(e),c.touchMove=!1)})},N.prototype._bindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(e){"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().addEventListener("mousemove",e.modules.moveRow.mousemove)})},N.prototype._unbindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(e){"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().removeEventListener("mousemove",e.modules.moveRow.mousemove)})},N.prototype.startMove=function(e,t){var o=t.getElement();this.setStartPosition(e,t),this.moving=t,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(t)):(o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o)),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.moveHover(e)},N.prototype.setStartPosition=function(e,t){var o,i,n=this.touchMove?e.touches[0].pageX:e.pageX,s=this.touchMove?e.touches[0].pageY:e.pageY;o=t.getElement(),this.connection?(i=o.getBoundingClientRect(),this.startX=i.left-n+window.pageXOffset,this.startY=i.top-s+window.pageYOffset):this.startY=s-o.getBoundingClientRect().top},N.prototype.endMove=function(e){e&&1!==e.which&&!this.touchMove||(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow&&this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))},N.prototype.moveRow=function(e,t){this.toRow=e,this.toRowAfter=t},N.prototype.moveHover=function(e){this.connection?this.moveHoverConnections.call(this,e):this.moveHoverTable.call(this,e)},N.prototype.moveHoverTable=function(e){var t=this.table.rowManager.getElement(),o=t.scrollTop,i=(this.touchMove?e.touches[0].pageY:e.pageY)-t.getBoundingClientRect().top+o;this.hoverElement.style.top=i-this.startY+"px"},N.prototype.moveHoverConnections=function(e){this.hoverElement.style.left=this.startX+(this.touchMove?e.touches[0].pageX:e.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?e.touches[0].pageY:e.pageY)+"px"},N.prototype.elementRowDrop=function(e,t,o){this.table.options.movableRowsElementDrop&&this.table.options.movableRowsElementDrop(e,t,!!o&&o.getComponent())},N.prototype.connectToTables=function(e){var t,o=this;this.connectionSelectorsTables&&(t=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStart.call(this.table,t),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","connect",{row:e})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach(function(e){"string"==typeof e?o.connectionElements=o.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(e))):o.connectionElements.push(e)}),this.connectionElements.forEach(function(e){var t=function(t){o.elementRowDrop(t,e,o.moving)};e.addEventListener("mouseup",t),e.tabulatorElementDropEvent=t,e.classList.add("tabulator-movingrow-receiving")}))},N.prototype.disconnectFromTables=function(){var e;this.connectionSelectorsTables&&(e=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStop.call(this.table,e),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach(function(e){e.classList.remove("tabulator-movingrow-receiving"),e.removeEventListener("mouseup",e.tabulatorElementDropEvent),delete e.tabulatorElementDropEvent})},N.prototype.connect=function(e,t){var o=this;return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=e,this.connectedRow=t,this.table.element.classList.add("tabulator-movingrow-receiving"),o.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().addEventListener("mouseup",e.modules.moveRow.mouseup)}),o.tableRowDropEvent=o.tableRowDrop.bind(o),o.table.element.addEventListener("mouseup",o.tableRowDropEvent),this.table.options.movableRowsReceivingStart.call(this.table,t,e),!0)},N.prototype.disconnect=function(e){var t=this;e===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),t.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().removeEventListener("mouseup",e.modules.moveRow.mouseup)}),t.table.element.removeEventListener("mouseup",t.tableRowDropEvent),this.table.options.movableRowsReceivingStop.call(this.table,e)):console.warn("Move Row Error - trying to disconnect from non connected table")},N.prototype.dropComplete=function(e,t,o){var i=!1;if(o){switch(_typeof(this.table.options.movableRowsSender)){case"string":i=this.senders[this.table.options.movableRowsSender];break;case"function":i=this.table.options.movableRowsSender}i?i.call(this,this.moving.getComponent(),t?t.getComponent():void 0,e):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.table.options.movableRowsSent.call(this.table,this.moving.getComponent(),t?t.getComponent():void 0,e)}else this.table.options.movableRowsSentFailed.call(this.table,this.moving.getComponent(),t?t.getComponent():void 0,e);this.endMove()},N.prototype.tableRowDrop=function(e,t){var o=!1,i=!1;switch(console.trace("drop"),e.stopImmediatePropagation(),_typeof(this.table.options.movableRowsReceiver)){case"string":o=this.receivers[this.table.options.movableRowsReceiver];break;case"function":o=this.table.options.movableRowsReceiver}o?i=o.call(this,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),i?this.table.options.movableRowsReceived.call(this.table,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):this.table.options.movableRowsReceivedFailed.call(this.table,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable),this.table.modules.comms.send(this.connectedTable,"moveRow","dropcomplete",{row:t,success:i})},N.prototype.receivers={insert:function(e,t,o){return this.table.addRow(e.getData(),void 0,t),!0},add:function(e,t,o){return this.table.addRow(e.getData()),!0},update:function(e,t,o){return!!t&&(t.update(e.getData()),!0)},replace:function(e,t,o){return!!t&&(this.table.addRow(e.getData(),void 0,t),t.delete(),!0)}},N.prototype.senders={delete:function(e,t,o){e.delete()}},N.prototype.commsReceived=function(e,t,o){switch(t){case"connect":return this.connect(e,o.row);case"disconnect":return this.disconnect(e);case"dropcomplete":return this.dropComplete(e,o.row,o.success)}},d.prototype.registerModule("moveRow",N);var B=function(e){this.table=e,this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0};B.prototype.initializeColumn=function(e){var t=this,o=!1,i={};this.allowedTypes.forEach(function(n){var s,r="mutator"+(n.charAt(0).toUpperCase()+n.slice(1));e.definition[r]&&(s=t.lookupMutator(e.definition[r]))&&(o=!0,i[r]={mutator:s,params:e.definition[r+"Params"]||{}})}),o&&(e.modules.mutate=i)},B.prototype.lookupMutator=function(e){var t=!1;switch(void 0===e?"undefined":_typeof(e)){case"string":this.mutators[e]?t=this.mutators[e]:console.warn("Mutator Error - No such mutator found, ignoring: ",e);break;case"function":t=e}return t},B.prototype.transformRow=function(e,t,o){var i,n=this,s="mutator"+(t.charAt(0).toUpperCase()+t.slice(1));return this.enabled&&n.table.columnManager.traverse(function(n){var r,a,l;n.modules.mutate&&(r=n.modules.mutate[s]||n.modules.mutate.mutator||!1)&&(i=n.getFieldValue(void 0!==o?o:e),"data"!=t&&void 0===i||(l=n.getComponent(),a="function"==typeof r.params?r.params(i,e,t,l):r.params,n.setFieldValue(e,r.mutator(i,e,t,a,l))))}),e},B.prototype.transformCell=function(e,t){var o=e.column.modules.mutate.mutatorEdit||e.column.modules.mutate.mutator||!1,i={};return o?(i=Object.assign(i,e.row.getData()),e.column.setFieldValue(i,t),o.mutator(t,i,"edit",o.params,e.getComponent())):t},B.prototype.enable=function(){this.enabled=!0},B.prototype.disable=function(){this.enabled=!1},B.prototype.mutators={},d.prototype.registerModule("mutator",B);var O=function(e){this.table=e,this.mode="local",this.progressiveLoad=!1,this.size=0,this.page=1,this.count=5,this.max=1,this.displayIndex=0,this.initialLoad=!0,this.pageSizes=[],this.dataReceivedNames={},this.dataSentNames={},this.createElements()};O.prototype.createElements=function(){var e;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),e=document.createElement("button"),e.classList.add("tabulator-page"),e.setAttribute("type","button"),e.setAttribute("role","button"),e.setAttribute("aria-label",""),e.setAttribute("title",""),this.firstBut=e.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=e.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=e.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=e.cloneNode(!0),this.lastBut.setAttribute("data-page","last"),this.table.options.paginationSizeSelector&&(this.pageSizeSelect=document.createElement("select"),this.pageSizeSelect.classList.add("tabulator-page-size"))},O.prototype.generatePageSizeSelectList=function(){var e=this,t=[];if(this.pageSizeSelect){if(Array.isArray(this.table.options.paginationSizeSelector))t=this.table.options.paginationSizeSelector,this.pageSizes=t,-1==this.pageSizes.indexOf(this.size)&&t.unshift(this.size);else if(-1==this.pageSizes.indexOf(this.size)){t=[];for(var o=1;o<5;o++)t.push(this.size*o);this.pageSizes=t}else t=this.pageSizes +;for(;this.pageSizeSelect.firstChild;)this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);t.forEach(function(t){var o=document.createElement("option");o.value=t,!0===t?e.table.modules.localize.bind("pagination|all",function(e){o.innerHTML=e}):o.innerHTML=t,e.pageSizeSelect.appendChild(o)}),this.pageSizeSelect.value=this.size}},O.prototype.initialize=function(e){var t,o,i,n=this;this.dataSentNames=Object.assign({},this.paginationDataSentNames),this.dataSentNames=Object.assign(this.dataSentNames,this.table.options.paginationDataSent),this.dataReceivedNames=Object.assign({},this.paginationDataReceivedNames),this.dataReceivedNames=Object.assign(this.dataReceivedNames,this.table.options.paginationDataReceived),n.table.modules.localize.bind("pagination|first",function(e){n.firstBut.innerHTML=e}),n.table.modules.localize.bind("pagination|first_title",function(e){n.firstBut.setAttribute("aria-label",e),n.firstBut.setAttribute("title",e)}),n.table.modules.localize.bind("pagination|prev",function(e){n.prevBut.innerHTML=e}),n.table.modules.localize.bind("pagination|prev_title",function(e){n.prevBut.setAttribute("aria-label",e),n.prevBut.setAttribute("title",e)}),n.table.modules.localize.bind("pagination|next",function(e){n.nextBut.innerHTML=e}),n.table.modules.localize.bind("pagination|next_title",function(e){n.nextBut.setAttribute("aria-label",e),n.nextBut.setAttribute("title",e)}),n.table.modules.localize.bind("pagination|last",function(e){n.lastBut.innerHTML=e}),n.table.modules.localize.bind("pagination|last_title",function(e){n.lastBut.setAttribute("aria-label",e),n.lastBut.setAttribute("title",e)}),n.firstBut.addEventListener("click",function(){n.setPage(1)}),n.prevBut.addEventListener("click",function(){n.previousPage()}),n.nextBut.addEventListener("click",function(){n.nextPage().then(function(){}).catch(function(){})}),n.lastBut.addEventListener("click",function(){n.setPage(n.max)}),n.table.options.paginationElement&&(n.element=n.table.options.paginationElement),this.pageSizeSelect&&(t=document.createElement("label"),n.table.modules.localize.bind("pagination|page_size",function(e){n.pageSizeSelect.setAttribute("aria-label",e),n.pageSizeSelect.setAttribute("title",e),t.innerHTML=e}),n.element.appendChild(t),n.element.appendChild(n.pageSizeSelect),n.pageSizeSelect.addEventListener("change",function(e){n.setPageSize("true"==n.pageSizeSelect.value||n.pageSizeSelect.value),n.setPage(1).then(function(){}).catch(function(){})})),n.element.appendChild(n.firstBut),n.element.appendChild(n.prevBut),n.element.appendChild(n.pagesElement),n.element.appendChild(n.nextBut),n.element.appendChild(n.lastBut),n.table.options.paginationElement||e||n.table.footerManager.append(n.element,n),n.mode=n.table.options.pagination,n.table.options.paginationSize?n.size=n.table.options.paginationSize:(o=document.createElement("div"),o.classList.add("tabulator-row"),o.style.visibility=e,i=document.createElement("div"),i.classList.add("tabulator-cell"),i.innerHTML="Page Row Test",o.appendChild(i),n.table.rowManager.getTableElement().appendChild(o),n.size=Math.floor(n.table.rowManager.getElement().clientHeight/o.offsetHeight),n.table.rowManager.getTableElement().removeChild(o)),n.count=n.table.options.paginationButtonCount,n.generatePageSizeSelectList()},O.prototype.initializeProgressive=function(e){this.initialize(!0),this.mode="progressive_"+e,this.progressiveLoad=!0},O.prototype.setDisplayIndex=function(e){this.displayIndex=e},O.prototype.getDisplayIndex=function(){return this.displayIndex},O.prototype.setMaxRows=function(e){this.max=e?!0===this.size?1:Math.ceil(e/this.size):1,this.page>this.max&&(this.page=this.max)},O.prototype.reset=function(e,t){return("local"==this.mode||e)&&(this.page=1),t&&(this.initialLoad=!0),!0},O.prototype.setMaxPage=function(e){e=parseInt(e),this.max=e||1,this.page>this.max&&(this.page=this.max,this.trigger())},O.prototype.setPage=function(e){var t=this,o=this;switch(e){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return new Promise(function(i,n){e=parseInt(e),e>0&&e<=t.max?(t.page=e,t.trigger().then(function(){i()}).catch(function(){n()}),o.table.options.persistence&&o.table.modExists("persistence",!0)&&o.table.modules.persistence.config.page&&o.table.modules.persistence.save("page")):(console.warn("Pagination Error - Requested page is out of range of 1 - "+t.max+":",e),n())})},O.prototype.setPageToRow=function(e){var t=this;return new Promise(function(o,i){var n=t.table.rowManager.getDisplayRows(t.displayIndex-1),s=n.indexOf(e);if(s>-1){var r=!0===t.size?1:Math.ceil((s+1)/t.size);t.setPage(r).then(function(){o()}).catch(function(){i()})}else console.warn("Pagination Error - Requested row is not visible"),i()})},O.prototype.setPageSize=function(e){!0!==e&&(e=parseInt(e)),e>0&&(this.size=e),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.page&&this.table.modules.persistence.save("page")},O.prototype._setPageButtons=function(){for(var e=this,t=Math.floor((this.count-1)/2),o=Math.ceil((this.count-1)/2),i=this.max-this.page+t+10&&s<=e.max&&e.pagesElement.appendChild(e._generatePageButton(s));this.footerRedraw()},O.prototype._generatePageButton=function(e){var t=this,o=document.createElement("button");return o.classList.add("tabulator-page"),e==t.page&&o.classList.add("active"),o.setAttribute("type","button"),o.setAttribute("role","button"),t.table.modules.localize.bind("pagination|page_title",function(t){o.setAttribute("aria-label",t+" "+e),o.setAttribute("title",t+" "+e)}),o.setAttribute("data-page",e),o.textContent=e,o.addEventListener("click",function(o){t.setPage(e)}),o},O.prototype.previousPage=function(){var e=this;return new Promise(function(t,o){e.page>1?(e.page--,e.trigger().then(function(){t()}).catch(function(){o()}),e.table.options.persistence&&e.table.modExists("persistence",!0)&&e.table.modules.persistence.config.page&&e.table.modules.persistence.save("page")):(console.warn("Pagination Error - Previous page would be less than page 1:",0),o())})},O.prototype.nextPage=function(){var e=this;return new Promise(function(t,o){e.pagen?i.splice(n,0,e):i.push(e))}),i},I.prototype._findColumn=function(e,t){var o=t.columns?"group":t.field?"field":"object";return e.find(function(e){switch(o){case"group":return e.title===t.title&&e.columns.length===t.columns.length;case"field":return e.field===t.field;case"object":return e===t}})},I.prototype.save=function(e){var t={};switch(e){case"columns":t=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":t=this.table.modules.filter.getFilters();break;case"sort":t=this.validateSorters(this.table.modules.sort.getSort());break;case"group":t=this.getGroupConfig();break;case"page":t=this.getPageConfig()}this.writeFunc&&this.writeFunc(this.id,e,t)},I.prototype.validateSorters=function(e){return e.forEach(function(e){e.column=e.field,delete e.field}),e},I.prototype.getGroupConfig=function(){return this.config.group&&((!0===this.config.group||this.config.group.groupBy)&&(data.groupBy=this.table.options.groupBy),(!0===this.config.group||this.config.group.groupStartOpen)&&(data.groupStartOpen=this.table.options.groupStartOpen),(!0===this.config.group||this.config.group.groupHeader)&&(data.groupHeader=this.table.options.groupHeader)),data},I.prototype.getPageConfig=function(){var e={};return this.config.page&&((!0===this.config.page||this.config.page.size)&&(e.paginationSize=this.table.modules.page.getPageSize()),(!0===this.config.page||this.config.page.page)&&(e.paginationInitialPage=this.table.modules.page.getPage())),e},I.prototype.parseColumns=function(e){var t=this,o=[];return e.forEach(function(e){var i,n={},s=e.getDefinition();e.isGroup?(n.title=s.title,n.columns=t.parseColumns(e.getColumns())):(n.field=e.getField(),!0===t.config.columns||void 0==t.config.columns?(i=Object.keys(s),i.push("width")):i=t.config.columns,i.forEach(function(t){switch(t){case"width":n.width=e.getWidth();break;case"visible":n.visible=e.visible;break;default:n[t]=s[t]}})),o.push(n)}),o},I.prototype.readers={local:function(e,t){var o=localStorage.getItem(e+"-"+t);return!!o&&JSON.parse(o)},cookie:function(e,t){var o,i,n=document.cookie,s=e+"-"+t,r=n.indexOf(s+"=");return r>-1&&(n=n.substr(r),o=n.indexOf(";"),o>-1&&(n=n.substr(0,o)),i=n.replace(s+"=","")),!!i&&JSON.parse(i)}},I.prototype.writers={local:function(e,t,o){localStorage.setItem(e+"-"+t,JSON.stringify(o))},cookie:function(e,t,o){var i=new Date;i.setDate(i.getDate()+1e4),document.cookie=e+"-"+t+"="+JSON.stringify(o)+"; expires="+i.toUTCString()}},d.prototype.registerModule("persistence",I);var j=function(e){this.table=e,this.element=!1,this.manualBlock=!1};j.prototype.initialize=function(){window.addEventListener("beforeprint",this.replaceTable.bind(this)),window.addEventListener("afterprint",this.cleanup.bind(this))},j.prototype.replaceTable=function(){this.manualBlock||(this.element=document.createElement("div"),this.element.classList.add("tabulator-print-table"),this.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig,this.table.options.printStyled,this.table.options.printRowRange,"print")),this.table.element.style.display="none",this.table.element.parentNode.insertBefore(this.element,this.table.element))},j.prototype.cleanup=function(){document.body.classList.remove("tabulator-print-fullscreen-hide"),this.element&&this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.table.element.style.display="")},j.prototype.printFullscreen=function(e,t,o){var i,n,s=window.scrollX,r=window.scrollY,a=document.createElement("div"),l=document.createElement("div"),c=this.table.modules.export.genereateTable(void 0!==o?o:this.table.options.printConfig,void 0!==t?t:this.table.options.printStyled,e,"print");this.manualBlock=!0,this.element=document.createElement("div"),this.element.classList.add("tabulator-print-fullscreen"),this.table.options.printHeader&&(a.classList.add("tabulator-print-header"),i="function"==typeof this.table.options.printHeader?this.table.options.printHeader.call(this.table):this.table.options.printHeader,"string"==typeof i?a.innerHTML=i:a.appendChild(i),this.element.appendChild(a)),this.element.appendChild(c),this.table.options.printFooter&&(l.classList.add("tabulator-print-footer"),n="function"==typeof this.table.options.printFooter?this.table.options.printFooter.call(this.table):this.table.options.printFooter,"string"==typeof n?l.innerHTML=n:l.appendChild(n),this.element.appendChild(l)),document.body.classList.add("tabulator-print-fullscreen-hide"),document.body.appendChild(this.element),this.table.options.printFormatter&&this.table.options.printFormatter(this.element,c),window.print(),this.cleanup(),window.scrollTo(s,r),this.manualBlock=!1},d.prototype.registerModule("print",j);var V=function(e){this.table=e,this.data=!1,this.blocked=!1,this.origFuncs={},this.currentVersion=0};V.prototype.watchData=function(e){var t,o=this;this.currentVersion++,t=this.currentVersion,o.unwatchData(),o.data=e,o.origFuncs.push=e.push,Object.defineProperty(o.data,"push",{enumerable:!1,configurable:!0,value:function(){var i=Array.from(arguments);return o.blocked||t!==o.currentVersion||i.forEach(function(e){o.table.rowManager.addRowActual(e,!1)}),o.origFuncs.push.apply(e,arguments)}}),o.origFuncs.unshift=e.unshift,Object.defineProperty(o.data,"unshift",{enumerable:!1,configurable:!0,value:function(){var i=Array.from(arguments);return o.blocked||t!==o.currentVersion||i.forEach(function(e){o.table.rowManager.addRowActual(e,!0)}),o.origFuncs.unshift.apply(e,arguments)}}),o.origFuncs.shift=e.shift,Object.defineProperty(o.data,"shift",{enumerable:!1,configurable:!0,value:function(){var i;return o.blocked||t!==o.currentVersion||o.data.length&&(i=o.table.rowManager.getRowFromDataObject(o.data[0]))&&i.deleteActual(),o.origFuncs.shift.call(e)}}),o.origFuncs.pop=e.pop,Object.defineProperty(o.data,"pop",{enumerable:!1,configurable:!0,value:function(){var i;return o.blocked||t!==o.currentVersion||o.data.length&&(i=o.table.rowManager.getRowFromDataObject(o.data[o.data.length-1]))&&i.deleteActual(),o.origFuncs.pop.call(e)}}),o.origFuncs.splice=e.splice,Object.defineProperty(o.data,"splice",{enumerable:!1,configurable:!0,value:function(){var i,n=Array.from(arguments),s=n[0]<0?e.length+n[0]:n[0],r=n[1],a=!!n[2]&&n.slice(2);if(!o.blocked&&t===o.currentVersion){if(a&&(i=!!e[s]&&o.table.rowManager.getRowFromDataObject(e[s]),i?a.forEach(function(e){o.table.rowManager.addRowActual(e,!0,i,!0)}):(a=a.slice().reverse(),a.forEach(function(e){o.table.rowManager.addRowActual(e,!0,!1,!0)}))),0!==r){var l=e.slice(s,void 0===n[1]?n[1]:s+r);l.forEach(function(e,t){var i=o.table.rowManager.getRowFromDataObject(e);i&&i.deleteActual(t!==l.length-1)})}(a||0!==r)&&o.table.rowManager.reRenderInPosition()}return o.origFuncs.splice.apply(e,arguments)}})},V.prototype.unwatchData=function(){if(!1!==this.data)for(var e in this.origFuncs)Object.defineProperty(this.data,e,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})},V.prototype.watchRow=function(e){var t=e.getData();this.blocked=!0;for(var o in t)this.watchKey(e,t,o);this.blocked=!1},V.prototype.watchKey=function(e,t,o){var i=this,n=Object.getOwnPropertyDescriptor(t,o),s=t[o],r=this.currentVersion;Object.defineProperty(t,o,{set:function(t){if(s=t,!i.blocked&&r===i.currentVersion){var a={};a[o]=t,e.updateData(a)}n.set&&n.set(t)},get:function(){return n.get&&n.get(),s}})},V.prototype.unwatchRow=function(e){var t=e.getData();for(var o in t)Object.defineProperty(t,o,{value:t[o]})},V.prototype.block=function(){this.blocked=!0},V.prototype.unblock=function(){this.blocked=!1},d.prototype.registerModule("reactiveData",V);var W=function(e){this.table=e,this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.handle=null,this.prevHandle=null};W.prototype.initializeColumn=function(e,t,o){var i=this,n=!1,s=this.table.options.resizableColumns;if("header"===e&&(n="textarea"==t.definition.formatter||t.definition.variableHeight,t.modules.resize={variableHeight:n}),!0===s||s==e){var r=document.createElement("div");r.className="tabulator-col-resize-handle";var a=document.createElement("div");a.className="tabulator-col-resize-handle prev",r.addEventListener("click",function(e){e.stopPropagation()});var l=function(e){var o=t.getLastColumn();o&&i._checkResizability(o)&&(i.startColumn=t,i._mouseDown(e,o,r))};r.addEventListener("mousedown",l),r.addEventListener("touchstart",l,{passive:!0}),r.addEventListener("dblclick",function(e){var o=t.getLastColumn();o&&i._checkResizability(o)&&(e.stopPropagation(),o.reinitializeWidth(!0))}),a.addEventListener("click",function(e){e.stopPropagation()});var c=function(e){var o,n,s;(o=t.getFirstColumn())&&(n=i.table.columnManager.findColumnIndex(o),(s=n>0&&i.table.columnManager.getColumnByIndex(n-1))&&i._checkResizability(s)&&(i.startColumn=t,i._mouseDown(e,s,a)))};a.addEventListener("mousedown",c),a.addEventListener("touchstart",c,{passive:!0}),a.addEventListener("dblclick",function(e){var o,n,s;(o=t.getFirstColumn())&&(n=i.table.columnManager.findColumnIndex(o),(s=n>0&&i.table.columnManager.getColumnByIndex(n-1))&&i._checkResizability(s)&&(e.stopPropagation(),s.reinitializeWidth(!0)))}),o.appendChild(r),o.appendChild(a)}},W.prototype._checkResizability=function(e){return void 0!==e.definition.resizable?e.definition.resizable:this.table.options.resizableColumns},W.prototype._mouseDown=function(e,t,o){function i(e){t.setWidth(s.startWidth+((void 0===e.screenX?e.touches[0].screenX:e.screenX)-s.startX)),!s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights()}function n(e){s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!1),s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights(),document.body.removeEventListener("mouseup",n),document.body.removeEventListener("mousemove",i),o.removeEventListener("touchmove",i),o.removeEventListener("touchend",n),s.table.element.classList.remove("tabulator-block-select"),s.table.options.persistence&&s.table.modExists("persistence",!0)&&s.table.modules.persistence.config.columns&&s.table.modules.persistence.save("columns"),s.table.options.columnResized.call(s.table,t.getComponent())}var s=this;s.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!0),s.startX=void 0===e.screenX?e.touches[0].screenX:e.screenX,s.startWidth=t.getWidth(),document.body.addEventListener("mousemove",i),document.body.addEventListener("mouseup",n),o.addEventListener("touchmove",i,{passive:!0}),o.addEventListener("touchend",n)},d.prototype.registerModule("resizeColumns",W);var G=function(e){this.table=e,this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null};G.prototype.initializeRow=function(e){var t=this,o=e.getElement(),i=document.createElement("div");i.className="tabulator-row-resize-handle";var n=document.createElement("div");n.className="tabulator-row-resize-handle prev",i.addEventListener("click",function(e){e.stopPropagation()});var s=function(o){t.startRow=e,t._mouseDown(o,e,i)};i.addEventListener("mousedown",s),i.addEventListener("touchstart",s,{passive:!0}),n.addEventListener("click",function(e){e.stopPropagation()});var r=function(o){var i=t.table.rowManager.prevDisplayRow(e);i&&(t.startRow=i,t._mouseDown(o,i,n))};n.addEventListener("mousedown",r),n.addEventListener("touchstart",r,{passive:!0}),o.appendChild(i),o.appendChild(n)},G.prototype._mouseDown=function(e,t,o){function i(e){t.setHeight(s.startHeight+((void 0===e.screenY?e.touches[0].screenY:e.screenY)-s.startY))}function n(e){document.body.removeEventListener("mouseup",i),document.body.removeEventListener("mousemove",i),o.removeEventListener("touchmove",i),o.removeEventListener("touchend",n),s.table.element.classList.remove("tabulator-block-select"),s.table.options.rowResized.call(this.table,t.getComponent())}var s=this;s.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),s.startY=void 0===e.screenY?e.touches[0].screenY:e.screenY,s.startHeight=t.getHeight(),document.body.addEventListener("mousemove",i),document.body.addEventListener("mouseup",n),o.addEventListener("touchmove",i,{passive:!0}),o.addEventListener("touchend",n)},d.prototype.registerModule("resizeRows",G);var U=function(e){this.table=e,this.binding=!1,this.observer=!1,this.containerObserver=!1,this.tableHeight=0,this.tableWidth=0,this.containerHeight=0,this.containerWidth=0,this.autoResize=!1};U.prototype.initialize=function(e){var t,o=this,i=this.table;this.tableHeight=i.element.clientHeight,this.tableWidth=i.element.clientWidth,i.element.parentNode&&(this.containerHeight=i.element.parentNode.clientHeight,this.containerWidth=i.element.parentNode.clientWidth),"undefined"!=typeof ResizeObserver&&"virtual"===i.rowManager.getRenderMode()?(this.autoResize=!0,this.observer=new ResizeObserver(function(e){if(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell){var t=Math.floor(e[0].contentRect.height),n=Math.floor(e[0].contentRect.width);o.tableHeight==t&&o.tableWidth==n||(o.tableHeight=t,o.tableWidth=n,i.element.parentNode&&(o.containerHeight=i.element.parentNode.clientHeight,o.containerWidth=i.element.parentNode.clientWidth),i.redraw())}}),this.observer.observe(i.element),t=window.getComputedStyle(i.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(t.getPropertyValue("max-height")||t.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver(function(e){if(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell){var t=Math.floor(e[0].contentRect.height),n=Math.floor(e[0].contentRect.width);o.containerHeight==t&&o.containerWidth==n||(o.containerHeight=t,o.containerWidth=n,o.tableHeight=i.element.clientHeight,o.tableWidth=i.element.clientWidth,i.redraw()),i.redraw()}}),this.containerObserver.observe(this.table.element.parentNode))):(this.binding=function(){(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell)&&i.redraw()},window.addEventListener("resize",this.binding))},U.prototype.clearBindings=function(e){this.binding&&window.removeEventListener("resize",this.binding),this.observer&&this.observer.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)},d.prototype.registerModule("resizeTable",U);var Y=function(e){this.table=e,this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0,this.collapseHandleColumn=!1};Y.prototype.initialize=function(){var e=this,t=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.table.columnManager.columnsByIndex.forEach(function(o,i){o.modules.responsive&&o.modules.responsive.order&&o.modules.responsive.visible&&(o.modules.responsive.index=i,t.push(o),o.visible||"collapse"!==e.mode||e.hiddenColumns.push(o))}),t=t.reverse(),t=t.sort(function(e,t){return t.modules.responsive.order-e.modules.responsive.order||t.modules.responsive.index-e.modules.responsive.index}),this.columns=t,"collapse"===this.mode&&this.generateCollapsedContent();for(var o=this.table.columnManager.columnsByIndex,i=Array.isArray(o),n=0,o=i?o:o[Symbol.iterator]();;){var s;if(i){if(n>=o.length)break;s=o[n++]}else{if(n=o.next(),n.done)break;s=n.value}var r=s;if("responsiveCollapse"==r.definition.formatter){this.collapseHandleColumn=r;break}}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())},Y.prototype.initializeColumn=function(e){var t=e.getDefinition();e.modules.responsive={order:void 0===t.responsive?1:t.responsive,visible:!1!==t.visible}},Y.prototype.initializeRow=function(e){var t;"calc"!==e.type&&(t=document.createElement("div"),t.classList.add("tabulator-responsive-collapse"),e.modules.responsiveLayout={element:t,open:this.collapseStartOpen},this.collapseStartOpen||(t.style.display="none"))},Y.prototype.layoutRow=function(e){var t=e.getElement();e.modules.responsiveLayout&&(t.appendChild(e.modules.responsiveLayout.element),this.generateCollapsedRowContent(e))},Y.prototype.updateColumnVisibility=function(e,t){e.modules.responsive&&(e.modules.responsive.visible=t,this.initialize())},Y.prototype.hideColumn=function(e){var t=this.hiddenColumns.length;e.hide(!1,!0),"collapse"===this.mode&&(this.hiddenColumns.unshift(e),this.generateCollapsedContent(),this.collapseHandleColumn&&!t&&this.collapseHandleColumn.show())},Y.prototype.showColumn=function(e){var t;e.show(!1,!0),e.setWidth(e.getWidth()),"collapse"===this.mode&&(t=this.hiddenColumns.indexOf(e),t>-1&&this.hiddenColumns.splice(t,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())},Y.prototype.update=function(){for(var e=this,t=!0;t;){var o="fitColumns"==e.table.modules.layout.getMode()?e.table.columnManager.getFlexBaseWidth():e.table.columnManager.getWidth(),i=(e.table.options.headerVisible?e.table.columnManager.element.clientWidth:e.table.element.clientWidth)-o;if(i<0){var n=e.columns[e.index];n?(e.hideColumn(n),e.index++):t=!1}else{var s=e.columns[e.index-1] +;s&&i>0&&i>=s.getWidth()?(e.showColumn(s),e.index--):t=!1}e.table.rowManager.activeRowsCount||e.table.rowManager.renderEmptyScroll()}},Y.prototype.generateCollapsedContent=function(){var e=this;this.table.rowManager.getDisplayRows().forEach(function(t){e.generateCollapsedRowContent(t)})},Y.prototype.generateCollapsedRowContent=function(e){var t,o;if(e.modules.responsiveLayout){for(t=e.modules.responsiveLayout.element;t.firstChild;)t.removeChild(t.firstChild);o=this.collapseFormatter(this.generateCollapsedRowData(e)),o&&t.appendChild(o)}},Y.prototype.generateCollapsedRowData=function(e){var t,o=this,i=e.getData(),n=[];return this.hiddenColumns.forEach(function(s){var r=s.getFieldValue(i);s.definition.title&&s.field&&(s.modules.format&&o.table.options.responsiveLayoutCollapseUseFormatters?(t={value:!1,data:{},getValue:function(){return r},getData:function(){return i},getElement:function(){return document.createElement("div")},getRow:function(){return e.getComponent()},getColumn:function(){return s.getComponent()}},n.push({title:s.definition.title,value:s.modules.format.formatter.call(o.table.modules.format,t,s.modules.format.params)})):n.push({title:s.definition.title,value:r}))}),n},Y.prototype.formatCollapsedData=function(e){var t=document.createElement("table"),o="";return e.forEach(function(e){var t=document.createElement("div");e.value instanceof Node&&(t.appendChild(e.value),e.value=t.innerHTML),o+=""+e.title+""+e.value+""}),t.innerHTML=o,Object.keys(e).length?t:""},d.prototype.registerModule("responsiveLayout",Y);var q=function(e){this.table=e,this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],this.headerCheckboxElement=null};q.prototype.clearSelectionData=function(e){this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],e||this._rowSelectionChanged()},q.prototype.initializeRow=function(e){var t=this,o=e.getElement(),i=function e(){setTimeout(function(){t.selecting=!1},50),document.body.removeEventListener("mouseup",e)};e.modules.select={selected:!1},t.table.options.selectableCheck.call(this.table,e.getComponent())?(o.classList.add("tabulator-selectable"),o.classList.remove("tabulator-unselectable"),t.table.options.selectable&&"highlight"!=t.table.options.selectable&&("click"===t.table.options.selectableRangeMode?o.addEventListener("click",function(o){if(o.shiftKey){t.table._clearSelection(),t.lastClickedRow=t.lastClickedRow||e;var i=t.table.rowManager.getDisplayRowIndex(t.lastClickedRow),n=t.table.rowManager.getDisplayRowIndex(e),s=i<=n?i:n,r=i>=n?i:n,a=t.table.rowManager.getDisplayRows().slice(0),l=a.splice(s,r-s+1);o.ctrlKey||o.metaKey?(l.forEach(function(o){o!==t.lastClickedRow&&(!0===t.table.options.selectable||t.isRowSelected(e)?t.toggleRow(o):t.selectedRows.lengtht.table.options.selectable&&(l=l.slice(0,t.table.options.selectable)),t.selectRows(l)),t.table._clearSelection()}else o.ctrlKey||o.metaKey?(t.toggleRow(e),t.lastClickedRow=e):(t.deselectRows(void 0,!0),t.selectRows(e),t.lastClickedRow=e)}):(o.addEventListener("click",function(o){t.table.modExists("edit")&&t.table.modules.edit.getCurrentCell()||t.table._clearSelection(),t.selecting||t.toggleRow(e)}),o.addEventListener("mousedown",function(o){if(o.shiftKey)return t.table._clearSelection(),t.selecting=!0,t.selectPrev=[],document.body.addEventListener("mouseup",i),document.body.addEventListener("keyup",i),t.toggleRow(e),!1}),o.addEventListener("mouseenter",function(o){t.selecting&&(t.table._clearSelection(),t.toggleRow(e),t.selectPrev[1]==e&&t.toggleRow(t.selectPrev[0]))}),o.addEventListener("mouseout",function(o){t.selecting&&(t.table._clearSelection(),t.selectPrev.unshift(e))})))):(o.classList.add("tabulator-unselectable"),o.classList.remove("tabulator-selectable"))},q.prototype.toggleRow=function(e){this.table.options.selectableCheck.call(this.table,e.getComponent())&&(e.modules.select&&e.modules.select.selected?this._deselectRow(e):this._selectRow(e))},q.prototype.selectRows=function(e){var t,o=this;switch(void 0===e?"undefined":_typeof(e)){case"undefined":this.table.rowManager.rows.forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged();break;case"string":t=this.table.rowManager.findRow(e),t?this._selectRow(t,!0,!0):this.table.rowManager.getRows(e).forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged();break;default:Array.isArray(e)?(e.forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged()):this._selectRow(e,!1,!0)}},q.prototype._selectRow=function(e,t,o){if(!isNaN(this.table.options.selectable)&&!0!==this.table.options.selectable&&!o&&this.selectedRows.length>=this.table.options.selectable){if(!this.table.options.selectableRollingSelection)return!1;this._deselectRow(this.selectedRows[0])}var i=this.table.rowManager.findRow(e);i?-1==this.selectedRows.indexOf(i)&&(i.modules.select||(i.modules.select={}),i.modules.select.selected=!0,i.modules.select.checkboxEl&&(i.modules.select.checkboxEl.checked=!0),i.getElement().classList.add("tabulator-selected"),this.selectedRows.push(i),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(i,!0),t||this.table.options.rowSelected.call(this.table,i.getComponent()),this._rowSelectionChanged(t)):t||console.warn("Selection Error - No such row found, ignoring selection:"+e)},q.prototype.isRowSelected=function(e){return-1!==this.selectedRows.indexOf(e)},q.prototype.deselectRows=function(e,t){var o,i=this;if(void 0===e){o=i.selectedRows.length;for(var n=0;n-1&&(n.modules.select||(n.modules.select={}),n.modules.select.selected=!1,n.modules.select.checkboxEl&&(n.modules.select.checkboxEl.checked=!1),n.getElement().classList.remove("tabulator-selected"),i.selectedRows.splice(o,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(n,!1),t||i.table.options.rowDeselected.call(this.table,n.getComponent()),i._rowSelectionChanged(t)):t||console.warn("Deselection Error - No such row found, ignoring selection:"+e)},q.prototype.getSelectedData=function(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getData())}),e},q.prototype.getSelectedRows=function(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getComponent())}),e},q.prototype._rowSelectionChanged=function(e){this.headerCheckboxElement&&(0===this.selectedRows.length?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),e||this.table.options.rowSelectionChanged.call(this.table,this.getSelectedData(),this.getSelectedRows())},q.prototype.registerRowSelectCheckbox=function(e,t){e._row.modules.select||(e._row.modules.select={}),e._row.modules.select.checkboxEl=t},q.prototype.registerHeaderSelectCheckbox=function(e){this.headerCheckboxElement=e},q.prototype.childRowSelection=function(e,t){var o=this.table.modules.dataTree.getChildren(e);if(t)for(var i=o,n=Array.isArray(i),s=0,i=n?i:i[Symbol.iterator]();;){var r;if(n){if(s>=i.length)break;r=i[s++]}else{if(s=i.next(),s.done)break;r=s.value}var a=r;this._selectRow(a,!0)}else for(var l=o,c=Array.isArray(l),u=0,l=c?l:l[Symbol.iterator]();;){var d;if(c){if(u>=l.length)break;d=l[u++]}else{if(u=l.next(),u.done)break;d=u.value}var h=d;this._deselectRow(h,!0)}},d.prototype.registerModule("selectRow",q);var X=function(e){this.table=e,this.sortList=[],this.changed=!1};X.prototype.initializeColumn=function(e,t){var o,i,n=this,s=!1;switch(_typeof(e.definition.sorter)){case"string":n.sorters[e.definition.sorter]?s=n.sorters[e.definition.sorter]:console.warn("Sort Error - No such sorter found: ",e.definition.sorter);break;case"function":s=e.definition.sorter}e.modules.sort={sorter:s,dir:"none",params:e.definition.sorterParams||{},startingDir:e.definition.headerSortStartingDir||"asc",tristate:void 0!==e.definition.headerSortTristate?e.definition.headerSortTristate:this.table.options.headerSortTristate},(void 0===e.definition.headerSort?!1!==this.table.options.headerSort:!1!==e.definition.headerSort)&&(o=e.getElement(),o.classList.add("tabulator-sortable"),i=document.createElement("div"),i.classList.add("tabulator-arrow"),t.appendChild(i),o.addEventListener("click",function(t){var o="",i=[],s=!1;if(e.modules.sort){if(e.modules.sort.tristate)o="none"==e.modules.sort.dir?e.modules.sort.startingDir:e.modules.sort.dir==e.modules.sort.startingDir?"asc"==e.modules.sort.dir?"desc":"asc":"none";else switch(e.modules.sort.dir){case"asc":o="desc";break;case"desc":o="asc";break;default:o=e.modules.sort.startingDir}n.table.options.columnHeaderSortMulti&&(t.shiftKey||t.ctrlKey)?(i=n.getSort(),s=i.findIndex(function(t){return t.field===e.getField()}),s>-1?(i[s].dir=o,s!=i.length-1&&(s=i.splice(s,1)[0],"none"!=o&&i.push(s))):"none"!=o&&i.push({column:e,dir:o}),n.setSort(i)):"none"==o?n.clear():n.setSort(e,o),n.table.rowManager.sorterRefresh(!n.sortList.length)}}))},X.prototype.hasChanged=function(){var e=this.changed;return this.changed=!1,e},X.prototype.getSort=function(){var e=this,t=[];return e.sortList.forEach(function(e){e.column&&t.push({column:e.column.getComponent(),field:e.column.getField(),dir:e.dir})}),t},X.prototype.setSort=function(e,t){var o=this,i=[];Array.isArray(e)||(e=[{column:e,dir:t}]),e.forEach(function(e){var t;t=o.table.columnManager.findColumn(e.column),t?(e.column=t,i.push(e),o.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",e.column)}),o.sortList=i,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.sort&&this.table.modules.persistence.save("sort")},X.prototype.clear=function(){this.setSort([])},X.prototype.findSorter=function(e){var t,o=this.table.rowManager.activeRows[0],i="string";if(o&&(o=o.getData(),e.getField()))switch(t=e.getFieldValue(o),void 0===t?"undefined":_typeof(t)){case"undefined":i="string";break;case"boolean":i="boolean";break;default:isNaN(t)||""===t?t.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(i="alphanum"):i="number"}return this.sorters[i]},X.prototype.sort=function(e){var t=this,o=this.table.options.sortOrderReverse?t.sortList.slice().reverse():t.sortList,i=[],n=[];t.table.options.dataSorting&&t.table.options.dataSorting.call(t.table,t.getSort()),t.clearColumnHeaders(),t.table.options.ajaxSorting?o.forEach(function(e,o){t.setColumnHeader(e.column,e.dir)}):(o.forEach(function(e,o){var n=e.column.modules.sort;e.column&&n&&(n.sorter||(n.sorter=t.findSorter(e.column)),e.params="function"==typeof n.params?n.params(e.column.getComponent(),e.dir):n.params,i.push(e)),t.setColumnHeader(e.column,e.dir)}),i.length&&t._sortItems(e,i)),t.table.options.dataSorted&&(e.forEach(function(e){n.push(e.getComponent())}),t.table.options.dataSorted.call(t.table,t.getSort(),n))},X.prototype.clearColumnHeaders=function(){this.table.columnManager.getRealColumns().forEach(function(e){e.modules.sort&&(e.modules.sort.dir="none",e.getElement().setAttribute("aria-sort","none"))})},X.prototype.setColumnHeader=function(e,t){e.modules.sort.dir=t,e.getElement().setAttribute("aria-sort",t)},X.prototype._sortItems=function(e,t){var o=this,i=t.length-1;e.sort(function(e,n){for(var s,r=i;r>=0;r--){var a=t[r];if(0!==(s=o._sortRow(e,n,a.column,a.dir,a.params)))break}return s})},X.prototype._sortRow=function(e,t,o,i,n){var s,r,a="asc"==i?e:t,l="asc"==i?t:e;return e=o.getFieldValue(a.getData()),t=o.getFieldValue(l.getData()),e=void 0!==e?e:"",t=void 0!==t?t:"",s=a.getComponent(),r=l.getComponent(),o.modules.sort.sorter.call(this,e,t,s,r,o.getComponent(),i,n)},X.prototype.sorters={number:function(e,t,o,i,n,s,r){var a=r.alignEmptyValues,l=r.decimalSeparator||".",c=r.thousandSeparator||",",u=0;if(e=parseFloat(String(e).split(c).join("").split(l).join(".")),t=parseFloat(String(t).split(c).join("").split(l).join(".")),isNaN(e))u=isNaN(t)?0:-1;else{if(!isNaN(t))return e-t;u=1}return("top"===a&&"desc"===s||"bottom"===a&&"asc"===s)&&(u*=-1),u},string:function(e,t,o,i,n,s,r){var a,l=r.alignEmptyValues,c=0;if(e){if(t){switch(_typeof(r.locale)){case"boolean":r.locale&&(a=this.table.modules.localize.getLocale());break;case"string":a=r.locale}return String(e).toLowerCase().localeCompare(String(t).toLowerCase(),a)}c=1}else c=t?-1:0;return("top"===l&&"desc"===s||"bottom"===l&&"asc"===s)&&(c*=-1),c},date:function(e,t,o,i,n,s,r){return r.format||(r.format="DD/MM/YYYY"),this.sorters.datetime.call(this,e,t,o,i,n,s,r)},time:function(e,t,o,i,n,s,r){return r.format||(r.format="HH:mm"),this.sorters.datetime.call(this,e,t,o,i,n,s,r)},datetime:function(e,t,o,i,n,s,r){var a=r.format||"DD/MM/YYYY HH:mm:ss",l=r.alignEmptyValues,c=0;if("undefined"!=typeof moment){if(e=moment(e,a),t=moment(t,a),e.isValid()){if(t.isValid())return e-t;c=1}else c=t.isValid()?-1:0;return("top"===l&&"desc"===s||"bottom"===l&&"asc"===s)&&(c*=-1),c}console.error("Sort Error - 'datetime' sorter is dependant on moment.js")},boolean:function(e,t,o,i,n,s,r){return(!0===e||"true"===e||"True"===e||1===e?1:0)-(!0===t||"true"===t||"True"===t||1===t?1:0)},array:function(e,t,o,i,n,s,r){function a(e){switch(u){case"length":return e.length;case"sum":return e.reduce(function(e,t){return e+t});case"max":return Math.max.apply(null,e);case"min":return Math.min.apply(null,e);case"avg":return e.reduce(function(e,t){return e+t})/e.length}}var l=0,c=0,u=r.type||"length",d=r.alignEmptyValues,h=0;if(Array.isArray(e)){if(Array.isArray(t))return l=e?a(e):0,c=t?a(t):0,l-c;d=1}else d=Array.isArray(t)?-1:0;return("top"===d&&"desc"===s||"bottom"===d&&"asc"===s)&&(h*=-1),h},exists:function(e,t,o,i,n,s,r){return(void 0===e?0:1)-(void 0===t?0:1)},alphanum:function(e,t,o,i,n,s,r){var a,l,c,u,d,h=0,p=/(\d+)|(\D+)/g,m=/\d/,f=r.alignEmptyValues,g=0;if(e||0===e){if(t||0===t){if(isFinite(e)&&isFinite(t))return e-t;if(a=String(e).toLowerCase(),l=String(t).toLowerCase(),a===l)return 0;if(!m.test(a)||!m.test(l))return a>l?1:-1;for(a=a.match(p),l=l.match(p),d=a.length>l.length?l.length:a.length;hu?1:-1;return a.length>l.length}g=1}else g=t||0===t?-1:0;return("top"===f&&"desc"===s||"bottom"===f&&"asc"===s)&&(g*=-1),g}},d.prototype.registerModule("sort",X);var K=function(e){this.table=e,this.invalidCells=[]};return K.prototype.initializeColumn=function(e){var t,o=this,i=[];e.definition.validator&&(Array.isArray(e.definition.validator)?e.definition.validator.forEach(function(e){(t=o._extractValidator(e))&&i.push(t)}):(t=this._extractValidator(e.definition.validator))&&i.push(t),e.modules.validate=!!i.length&&i)},K.prototype._extractValidator=function(e){var t,o,i;switch(void 0===e?"undefined":_typeof(e)){case"string":return i=e.indexOf(":"),i>-1?(t=e.substring(0,i),o=e.substring(i+1)):t=e,this._buildValidator(t,o);case"function":return this._buildValidator(e);case"object":return this._buildValidator(e.type,e.parameters)}},K.prototype._buildValidator=function(e,t){var o="function"==typeof e?e:this.validators[e];return o?{type:"function"==typeof e?"function":e,func:o,params:t}:(console.warn("Validator Setup Error - No matching validator found:",e),!1)},K.prototype.validate=function(e,t,o){var i=this,n=[],s=this.invalidCells.indexOf(t);return e&&e.forEach(function(e){e.func.call(i,t.getComponent(),o,e.params)||n.push({type:e.type,parameters:e.params})}),n=!n.length||n,t.modules.validate||(t.modules.validate={}),!0===n?(t.modules.validate.invalid=!1,t.getElement().classList.remove("tabulator-validation-fail"),s>-1&&this.invalidCells.splice(s,1)):(t.modules.validate.invalid=!0,"manual"!==this.table.options.validationMode&&t.getElement().classList.add("tabulator-validation-fail"),-1==s&&this.invalidCells.push(t)),n},K.prototype.getInvalidCells=function(){var e=[];return this.invalidCells.forEach(function(t){e.push(t.getComponent())}),e},K.prototype.clearValidation=function(e){var t;e.modules.validate&&e.modules.validate.invalid&&(e.element.classList.remove("tabulator-validation-fail"),e.modules.validate.invalid=!1,(t=this.invalidCells.indexOf(e))>-1&&this.invalidCells.splice(t,1))},K.prototype.validators={integer:function(e,t,o){return""===t||null===t||void 0===t||"number"==typeof(t=Number(t))&&isFinite(t)&&Math.floor(t)===t},float:function(e,t,o){return""===t||null===t||void 0===t||"number"==typeof(t=Number(t))&&isFinite(t)&&t%1!=0},numeric:function(e,t,o){return""===t||null===t||void 0===t||!isNaN(t)},string:function(e,t,o){return""===t||null===t||void 0===t||isNaN(t)},max:function(e,t,o){return""===t||null===t||void 0===t||parseFloat(t)<=o},min:function(e,t,o){return""===t||null===t||void 0===t||parseFloat(t)>=o},starts:function(e,t,o){return""===t||null===t||void 0===t||String(t).toLowerCase().startsWith(String(o).toLowerCase())},ends:function(e,t,o){return""===t||null===t||void 0===t||String(t).toLowerCase().endsWith(String(o).toLowerCase())},minLength:function(e,t,o){return""===t||null===t||void 0===t||String(t).length>=o},maxLength:function(e,t,o){return""===t||null===t||void 0===t||String(t).length<=o},in:function(e,t,o){return""===t||null===t||void 0===t||("string"==typeof o&&(o=o.split("|")),""===t||o.indexOf(t)>-1)},regex:function(e,t,o){return""===t||null===t||void 0===t||new RegExp(o).test(t)},unique:function(e,t,o){if(""===t||null===t||void 0===t)return!0;var i=!0,n=e.getData(),s=e.getColumn()._getSelf();return this.table.rowManager.rows.forEach(function(e){var o=e.getData();o!==n&&t==s.getFieldValue(o)&&(i=!1)}),i},required:function(e,t,o){return""!==t&&null!==t&&void 0!==t}},d.prototype.registerModule("validate",K),d}); \ No newline at end of file diff --git a/website/js/vendor/tabulator/js/tabulator_core.js b/admin/js/vendors/tabulator/js/tabulator_core.js similarity index 87% rename from website/js/vendor/tabulator/js/tabulator_core.js rename to admin/js/vendors/tabulator/js/tabulator_core.js index 63ce7bc..1c4797a 100644 --- a/website/js/vendor/tabulator/js/tabulator_core.js +++ b/admin/js/vendors/tabulator/js/tabulator_core.js @@ -1,4 +1,4 @@ -/* Tabulator v4.8.3 (c) Oliver Folkerd */ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ 'use strict'; @@ -424,7 +424,6 @@ ColumnManager.prototype.scrollHorizontal = function (left) { ColumnManager.prototype.generateColumnsFromRowData = function (data) { var cols = [], - definitions = this.table.options.autoColumnsDefinitions, row, sorter; @@ -495,52 +494,7 @@ ColumnManager.prototype.generateColumnsFromRowData = function (data) { cols.push(col); } - if (definitions) { - - switch (typeof definitions === 'undefined' ? 'undefined' : _typeof(definitions)) { - - case "function": - - this.table.options.columns = definitions.call(this.table, cols); - - break; - - case "object": - - if (Array.isArray(definitions)) { - - cols.forEach(function (col) { - - var match = definitions.find(function (def) { - - return def.field === col.field; - }); - - if (match) { - - Object.assign(col, match); - } - }); - } else { - - cols.forEach(function (col) { - - if (definitions[col.field]) { - - Object.assign(col, definitions[col.field]); - } - }); - } - - this.table.options.columns = cols; - - break; - - } - } else { - - this.table.options.columns = cols; - } + this.table.options.columns = cols; this.setColumns(this.table.options.columns); } @@ -577,11 +531,6 @@ ColumnManager.prototype.setColumns = function (cols, row) { self.table.modules.responsiveLayout.initialize(); } - if (this.table.options.virtualDomHoz) { - - this.table.vdomHoz.reinitialize(false, true); - } - self.redraw(true); }; @@ -898,11 +847,6 @@ ColumnManager.prototype.moveColumnActual = function (from, to, after) { this.table.modules.responsiveLayout.initialize(); } - if (this.table.options.virtualDomHoz) { - - this.table.vdomHoz.reinitialize(true); - } - if (this.table.options.columnMoved) { this.table.options.columnMoved.call(this.table, from.getComponent(), this.table.columnManager.getComponents()); @@ -915,11 +859,9 @@ ColumnManager.prototype.moveColumnActual = function (from, to, after) { }; ColumnManager.prototype._moveColumnInArray = function (columns, from, to, after, updateRows) { - var _this2 = this; var fromIndex = columns.indexOf(from), - toIndex, - rows = []; + toIndex; if (fromIndex > -1) { @@ -942,17 +884,7 @@ ColumnManager.prototype._moveColumnInArray = function (columns, from, to, after, if (updateRows) { - if (this.table.options.dataTree && this.table.modExists("dataTree", true)) { - - this.table.rowManager.rows.forEach(function (row) { - - rows = rows.concat(_this2.table.modules.dataTree.getTreeChildren(row, false, true)); - }); - } - - rows = rows.concat(this.table.rowManager.rows); - - rows.forEach(function (row) { + this.table.rowManager.rows.forEach(function (row) { if (row.cells.length) { @@ -966,7 +898,7 @@ ColumnManager.prototype._moveColumnInArray = function (columns, from, to, after, }; ColumnManager.prototype.scrollToColumn = function (column, position, ifVisible) { - var _this3 = this; + var _this2 = this; var left = 0, offset = 0, @@ -977,12 +909,12 @@ ColumnManager.prototype.scrollToColumn = function (column, position, ifVisible) if (typeof position === "undefined") { - position = _this3.table.options.scrollToColumnPosition; + position = _this2.table.options.scrollToColumnPosition; } if (typeof ifVisible === "undefined") { - ifVisible = _this3.table.options.scrollToColumnIfVisible; + ifVisible = _this2.table.options.scrollToColumnIfVisible; } if (column.visible) { @@ -995,13 +927,13 @@ ColumnManager.prototype.scrollToColumn = function (column, position, ifVisible) case "center": - adjust = -_this3.element.clientWidth / 2; + adjust = -_this2.element.clientWidth / 2; break; case "right": - adjust = colEl.clientWidth - _this3.headersElement.clientWidth; + adjust = colEl.clientWidth - _this2.headersElement.clientWidth; break; @@ -1013,7 +945,7 @@ ColumnManager.prototype.scrollToColumn = function (column, position, ifVisible) offset = colEl.offsetLeft; - if (offset > 0 && offset + colEl.offsetWidth < _this3.element.clientWidth) { + if (offset > 0 && offset + colEl.offsetWidth < _this2.element.clientWidth) { return false; } @@ -1021,13 +953,13 @@ ColumnManager.prototype.scrollToColumn = function (column, position, ifVisible) //calculate scroll position - left = colEl.offsetLeft + adjust; + left = colEl.offsetLeft + _this2.element.scrollLeft + adjust; - left = Math.max(Math.min(left, _this3.table.rowManager.element.scrollWidth - _this3.table.rowManager.element.clientWidth), 0); + left = Math.max(Math.min(left, _this2.table.rowManager.element.scrollWidth - _this2.table.rowManager.element.clientWidth), 0); - _this3.table.rowManager.scrollHorizontal(left); + _this2.table.rowManager.scrollHorizontal(left); - _this3.scrollHorizontal(left); + _this2.scrollHorizontal(left); resolve(); } else { @@ -1106,39 +1038,34 @@ ColumnManager.prototype.getFlexBaseWidth = function () { }; ColumnManager.prototype.addColumn = function (definition, before, nextToColumn) { - var _this4 = this; + var _this3 = this; return new Promise(function (resolve, reject) { - var column = _this4._addColumn(definition, before, nextToColumn); + var column = _this3._addColumn(definition, before, nextToColumn); - _this4._reIndexColumns(); + _this3._reIndexColumns(); - if (_this4.table.options.responsiveLayout && _this4.table.modExists("responsiveLayout", true)) { + if (_this3.table.options.responsiveLayout && _this3.table.modExists("responsiveLayout", true)) { - _this4.table.modules.responsiveLayout.initialize(); + _this3.table.modules.responsiveLayout.initialize(); } - if (_this4.table.modExists("columnCalcs")) { + if (_this3.table.modExists("columnCalcs")) { - _this4.table.modules.columnCalcs.recalc(_this4.table.rowManager.activeRows); + _this3.table.modules.columnCalcs.recalc(_this3.table.rowManager.activeRows); } - _this4.redraw(); + _this3.redraw(); - if (_this4.table.modules.layout.getMode() != "fitColumns") { + if (_this3.table.modules.layout.getMode() != "fitColumns") { column.reinitializeWidth(); } - _this4._verticalAlignHeaders(); - - _this4.table.rowManager.reinitialize(); - - if (_this4.table.options.virtualDomHoz) { + _this3._verticalAlignHeaders(); - _this4.table.vdomHoz.reinitialize(); - } + _this3.table.rowManager.reinitialize(); resolve(column); }); @@ -1181,8 +1108,6 @@ ColumnManager.prototype.deregisterColumn = function (column) { this.table.modules.responsiveLayout.initialize(); } - this._verticalAlignHeaders(); - this.redraw(); }; @@ -1397,19 +1322,11 @@ ColumnComponent.prototype.getWidth = function () { }; ColumnComponent.prototype.setWidth = function (width) { - var result; - if (width === true) { - result = this._column.reinitializeWidth(true); + return this._column.reinitializeWidth(true); } else { - result = this._column.setWidth(width); + return this._column.setWidth(width); } - - if (this._column.table.options.virtualDomHoz) { - this._column.table.vdomHoz.reinitialize(true); - } - - return result; }; ColumnComponent.prototype.validate = function () { @@ -1427,7 +1344,6 @@ var Column = function Column(def, parent) { this.cells = []; //cells bound to this column this.element = this.createElement(); //column header element this.contentElement = false; - this.titleHolderElement = false; this.titleElement = false; this.groupElement = this.createGroupElement(); //column group holder element this.isGroup = false; @@ -1520,11 +1436,11 @@ Column.prototype.createGroupElement = function () { }; Column.prototype.checkDefinition = function () { - var _this5 = this; + var _this4 = this; Object.keys(this.definition).forEach(function (key) { - if (_this5.defaultOptionList.indexOf(key) === -1) { - console.warn("Invalid column definition option in '" + (_this5.field || _this5.definition.title) + "' column:", key); + if (_this4.defaultOptionList.indexOf(key) === -1) { + console.warn("Invalid column definition option in '" + (_this4.field || _this4.definition.title) + "' column:", key); } }); }; @@ -1822,58 +1738,57 @@ Column.prototype._bindEvents = function () { //build header element for header Column.prototype._buildColumnHeader = function () { - var _this6 = this; - - var def = this.definition, - table = this.table, + var self = this, + def = self.definition, + table = self.table, sortable; //set column sorter if (table.modExists("sort")) { - table.modules.sort.initializeColumn(this, this.titleHolderElement); + table.modules.sort.initializeColumn(self, self.contentElement); } //set column header context menu - if ((def.headerContextMenu || def.headerClickMenu || def.headerMenu) && table.modExists("menu")) { - table.modules.menu.initializeColumnHeader(this); + if ((def.headerContextMenu || def.headerMenu) && table.modExists("menu")) { + table.modules.menu.initializeColumnHeader(self); } //set column formatter if (table.modExists("format")) { - table.modules.format.initializeColumn(this); + table.modules.format.initializeColumn(self); } //set column editor if (typeof def.editor != "undefined" && table.modExists("edit")) { - table.modules.edit.initializeColumn(this); + table.modules.edit.initializeColumn(self); } //set colum validator if (typeof def.validator != "undefined" && table.modExists("validate")) { - table.modules.validate.initializeColumn(this); + table.modules.validate.initializeColumn(self); } //set column mutator if (table.modExists("mutator")) { - table.modules.mutator.initializeColumn(this); + table.modules.mutator.initializeColumn(self); } //set column accessor if (table.modExists("accessor")) { - table.modules.accessor.initializeColumn(this); + table.modules.accessor.initializeColumn(self); } //set respoviveLayout if (_typeof(table.options.responsiveLayout) && table.modExists("responsiveLayout")) { - table.modules.responsiveLayout.initializeColumn(this); + table.modules.responsiveLayout.initializeColumn(self); } //set column visibility if (typeof def.visible != "undefined") { if (def.visible) { - this.show(true); + self.show(true); } else { - this.hide(true); + self.hide(true); } } @@ -1881,7 +1796,7 @@ Column.prototype._buildColumnHeader = function () { if (def.cssClass) { var classeNames = def.cssClass.split(" "); classeNames.forEach(function (className) { - _this6.element.classList.add(className); + self.element.classList.add(className); }); } @@ -1890,18 +1805,16 @@ Column.prototype._buildColumnHeader = function () { } //set min width if present - this.setMinWidth(typeof def.minWidth == "undefined" ? this.table.options.columnMinWidth : parseInt(def.minWidth)); + self.setMinWidth(typeof def.minWidth == "undefined" ? self.table.options.columnMinWidth : parseInt(def.minWidth)); - this.reinitializeWidth(); + self.reinitializeWidth(); //set tooltip if present - this.tooltip = this.definition.tooltip || this.definition.tooltip === false ? this.definition.tooltip : this.table.options.tooltips; + self.tooltip = self.definition.tooltip || self.definition.tooltip === false ? self.definition.tooltip : self.table.options.tooltips; //set orizontal text alignment - this.hozAlign = typeof this.definition.hozAlign == "undefined" ? this.table.options.cellHozAlign : this.definition.hozAlign; - this.vertAlign = typeof this.definition.vertAlign == "undefined" ? this.table.options.cellVertAlign : this.definition.vertAlign; - - this.titleElement.style.textAlign = this.definition.headerHozAlign || this.table.options.headerHozAlign; + self.hozAlign = typeof self.definition.hozAlign == "undefined" ? self.table.options.cellHozAlign : self.definition.hozAlign; + self.vertAlign = typeof self.definition.vertAlign == "undefined" ? self.table.options.cellVertAlign : self.definition.vertAlign; }; Column.prototype._buildColumnHeaderContent = function () { @@ -1911,14 +1824,9 @@ Column.prototype._buildColumnHeaderContent = function () { var contentElement = document.createElement("div"); contentElement.classList.add("tabulator-col-content"); - this.titleHolderElement = document.createElement("div"); - this.titleHolderElement.classList.add("tabulator-col-title-holder"); - - contentElement.appendChild(this.titleHolderElement); - this.titleElement = this._buildColumnHeaderTitle(); - this.titleHolderElement.appendChild(this.titleElement); + contentElement.appendChild(this.titleElement); return contentElement; }; @@ -1970,7 +1878,7 @@ Column.prototype._buildColumnHeaderTitle = function () { }; Column.prototype._formatColumnHeaderTitle = function (el, title) { - var _this7 = this; + var _this5 = this; var formatter, contents, params, mockCell, onRendered; @@ -1979,7 +1887,7 @@ Column.prototype._formatColumnHeaderTitle = function (el, title) { formatter = this.table.modules.format.getFormatter(this.definition.titleFormatter); onRendered = function onRendered(callback) { - _this7.titleFormatterRendered = callback; + _this5.titleFormatterRendered = callback; }; mockCell = { @@ -2020,7 +1928,7 @@ Column.prototype._formatColumnHeaderTitle = function (el, title) { //build header element for column group Column.prototype._buildGroupHeader = function () { - var _this8 = this; + var _this6 = this; this.element.classList.add("tabulator-col-group"); this.element.setAttribute("role", "columngroup"); @@ -2030,7 +1938,7 @@ Column.prototype._buildGroupHeader = function () { if (this.definition.cssClass) { var classeNames = this.definition.cssClass.split(" "); classeNames.forEach(function (className) { - _this8.element.classList.add(className); + _this6.element.classList.add(className); }); } @@ -2433,43 +2341,32 @@ Column.prototype.setMinWidth = function (minWidth) { }; Column.prototype.delete = function () { - var _this9 = this; + var _this7 = this; return new Promise(function (resolve, reject) { - if (_this9.isGroup) { - _this9.columns.forEach(function (column) { + if (_this7.isGroup) { + _this7.columns.forEach(function (column) { column.delete(); }); } //cancel edit if column is currently being edited - if (_this9.table.modExists("edit")) { - if (_this9.table.modules.edit.currentCell.column === _this9) { - _this9.table.modules.edit.cancelEdit(); + if (_this7.table.modExists("edit")) { + if (_this7.table.modules.edit.currentCell.column === _this7) { + _this7.table.modules.edit.cancelEdit(); } } - var cellCount = _this9.cells.length; + var cellCount = _this7.cells.length; for (var i = 0; i < cellCount; i++) { - _this9.cells[0].delete(); + _this7.cells[0].delete(); } - if (_this9.element.parentNode) { - _this9.element.parentNode.removeChild(_this9.element); - } - - _this9.element = false; - _this9.contentElement = false; - _this9.titleElement = false; - _this9.groupElement = false; + _this7.element.parentNode.removeChild(_this7.element); - _this9.table.columnManager.deregisterColumn(_this9); - - if (_this9.table.options.virtualDomHoz) { - _this9.table.vdomHoz.reinitialize(true); - } + _this7.table.columnManager.deregisterColumn(_this7); resolve(); }); @@ -2577,22 +2474,22 @@ Column.prototype.fitToData = function () { }; Column.prototype.updateDefinition = function (updates) { - var _this10 = this; + var _this8 = this; return new Promise(function (resolve, reject) { var definition; - if (!_this10.isGroup) { - definition = Object.assign({}, _this10.getDefinition()); + if (!_this8.isGroup) { + definition = Object.assign({}, _this8.getDefinition()); definition = Object.assign(definition, updates); - _this10.table.columnManager.addColumn(definition, false, _this10).then(function (column) { + _this8.table.columnManager.addColumn(definition, false, _this8).then(function (column) { - if (definition.field == _this10.field) { - _this10.field = false; //cleair field name to prevent deletion of duplicate column from arrays + if (definition.field == _this8.field) { + _this8.field = false; //cleair field name to prevent deletion of duplicate column from arrays } - _this10.delete().then(function () { + _this8.delete().then(function () { resolve(column.getComponent()); }).catch(function (err) { reject(err); @@ -2601,8 +2498,8 @@ Column.prototype.updateDefinition = function (updates) { reject(err); }); } else { - console.warn("Column Update Error - The updateDefinition function is only available on columns, not column groups"); - reject("Column Update Error - The updateDefinition function is only available on columns, not column groups"); + console.warn("Column Update Error - The updateDefintion function is only available on columns, not column groups"); + reject("Column Update Error - The updateDefintion function is only available on columns, not column groups"); } }); }; @@ -2615,9 +2512,7 @@ Column.prototype.deleteCell = function (cell) { } }; -Column.prototype.defaultOptionList = ["title", "field", "columns", "visible", "align", "hozAlign", "vertAlign", "width", "minWidth", "widthGrow", "widthShrink", "resizable", "frozen", "responsive", "tooltip", "cssClass", "rowHandle", "hideInHtml", "print", "htmlOutput", "sorter", "sorterParams", "formatter", "formatterParams", "variableHeight", "editable", "editor", "editorParams", "validator", "mutator", "mutatorParams", "mutatorData", "mutatorDataParams", "mutatorEdit", "mutatorEditParams", "mutatorClipboard", "mutatorClipboardParams", "accessor", "accessorParams", "accessorData", "accessorDataParams", "accessorDownload", "accessorDownloadParams", "accessorClipboard", "accessorClipboardParams", "accessorPrint", "accessorPrintParams", "accessorHtmlOutput", "accessorHtmlOutputParams", "clipboard", "download", "downloadTitle", "topCalc", "topCalcParams", "topCalcFormatter", "topCalcFormatterParams", "bottomCalc", "bottomCalcParams", "bottomCalcFormatter", "bottomCalcFormatterParams", "cellClick", "cellDblClick", "cellContext", "cellTap", "cellDblTap", "cellTapHold", "cellMouseEnter", "cellMouseLeave", "cellMouseOver", "cellMouseOut", "cellMouseMove", "cellEditing", "cellEdited", "cellEditCancelled", "headerSort", "headerSortStartingDir", "headerSortTristate", "headerClick", "headerDblClick", "headerContext", "headerTap", "headerDblTap", "headerTapHold", "headerTooltip", "headerVertical", "headerHozAlign", "editableTitle", "titleFormatter", "titleFormatterParams", "headerFilter", "headerFilterPlaceholder", "headerFilterParams", "headerFilterEmptyCheck", "headerFilterFunc", "headerFilterFuncParams", "headerFilterLiveFilter", "print", "headerContextMenu", "headerMenu", "contextMenu", -// "headerClickMenu", -"clickMenu", "formatterPrint", "formatterPrintParams", "formatterClipboard", "formatterClipboardParams", "formatterHtmlOutput", "formatterHtmlOutputParams", "titlePrint", "titleClipboard", "titleHtmlOutput", "titleDownload"]; +Column.prototype.defaultOptionList = ["title", "field", "columns", "visible", "align", "hozAlign", "vertAlign", "width", "minWidth", "widthGrow", "widthShrink", "resizable", "frozen", "responsive", "tooltip", "cssClass", "rowHandle", "hideInHtml", "print", "htmlOutput", "sorter", "sorterParams", "formatter", "formatterParams", "variableHeight", "editable", "editor", "editorParams", "validator", "mutator", "mutatorParams", "mutatorData", "mutatorDataParams", "mutatorEdit", "mutatorEditParams", "mutatorClipboard", "mutatorClipboardParams", "accessor", "accessorParams", "accessorData", "accessorDataParams", "accessorDownload", "accessorDownloadParams", "accessorClipboard", "accessorClipboardParams", "accessorPrint", "accessorPrintParams", "accessorHtmlOutput", "accessorHtmlOutputParams", "clipboard", "download", "downloadTitle", "topCalc", "topCalcParams", "topCalcFormatter", "topCalcFormatterParams", "bottomCalc", "bottomCalcParams", "bottomCalcFormatter", "bottomCalcFormatterParams", "cellClick", "cellDblClick", "cellContext", "cellTap", "cellDblTap", "cellTapHold", "cellMouseEnter", "cellMouseLeave", "cellMouseOver", "cellMouseOut", "cellMouseMove", "cellEditing", "cellEdited", "cellEditCancelled", "headerSort", "headerSortStartingDir", "headerSortTristate", "headerClick", "headerDblClick", "headerContext", "headerTap", "headerDblTap", "headerTapHold", "headerTooltip", "headerVertical", "editableTitle", "titleFormatter", "titleFormatterParams", "headerFilter", "headerFilterPlaceholder", "headerFilterParams", "headerFilterEmptyCheck", "headerFilterFunc", "headerFilterFuncParams", "headerFilterLiveFilter", "print", "headerContextMenu", "headerMenu", "contextMenu", "formatterPrint", "formatterPrintParams", "formatterClipboard", "formatterClipboardParams", "formatterHtmlOutput", "formatterHtmlOutputParams", "titlePrint", "titleClipboard", "titleHtmlOutput", "titleDownload"]; //////////////// Event Bindings ///////////////// @@ -2834,7 +2729,7 @@ RowManager.prototype.getRowFromPosition = function (position, active) { }; RowManager.prototype.scrollToRow = function (row, position, ifVisible) { - var _this11 = this; + var _this9 = this; var rowIndex = this.getDisplayRows().indexOf(row), rowEl = row.getElement(), @@ -2845,21 +2740,21 @@ RowManager.prototype.scrollToRow = function (row, position, ifVisible) { if (rowIndex > -1) { if (typeof position === "undefined") { - position = _this11.table.options.scrollToRowPosition; + position = _this9.table.options.scrollToRowPosition; } if (typeof ifVisible === "undefined") { - ifVisible = _this11.table.options.scrollToRowIfVisible; + ifVisible = _this9.table.options.scrollToRowIfVisible; } if (position === "nearest") { - switch (_this11.renderMode) { + switch (_this9.renderMode) { case "classic": rowTop = Tabulator.prototype.helpers.elOffset(rowEl).top; - position = Math.abs(_this11.element.scrollTop - rowTop) > Math.abs(_this11.element.scrollTop + _this11.element.clientHeight - rowTop) ? "bottom" : "top"; + position = Math.abs(_this9.element.scrollTop - rowTop) > Math.abs(_this9.element.scrollTop + _this9.element.clientHeight - rowTop) ? "bottom" : "top"; break; case "virtual": - position = Math.abs(_this11.vDomTop - rowIndex) > Math.abs(_this11.vDomBottom - rowIndex) ? "bottom" : "top"; + position = Math.abs(_this9.vDomTop - rowIndex) > Math.abs(_this9.vDomBottom - rowIndex) ? "bottom" : "top"; break; } } @@ -2867,21 +2762,21 @@ RowManager.prototype.scrollToRow = function (row, position, ifVisible) { //check row visibility if (!ifVisible) { if (Tabulator.prototype.helpers.elVisible(rowEl)) { - offset = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this11.element).top; + offset = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this9.element).top; - if (offset > 0 && offset < _this11.element.clientHeight - rowEl.offsetHeight) { + if (offset > 0 && offset < _this9.element.clientHeight - rowEl.offsetHeight) { return false; } } } //scroll to row - switch (_this11.renderMode) { + switch (_this9.renderMode) { case "classic": - _this11.element.scrollTop = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this11.element).top + _this11.element.scrollTop; + _this9.element.scrollTop = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this9.element).top + _this9.element.scrollTop; break; case "virtual": - _this11._virtualRenderFill(rowIndex, true); + _this9._virtualRenderFill(rowIndex, true); break; } @@ -2890,20 +2785,20 @@ RowManager.prototype.scrollToRow = function (row, position, ifVisible) { case "middle": case "center": - if (_this11.element.scrollHeight - _this11.element.scrollTop == _this11.element.clientHeight) { - _this11.element.scrollTop = _this11.element.scrollTop + (rowEl.offsetTop - _this11.element.scrollTop) - (_this11.element.scrollHeight - rowEl.offsetTop) / 2; + if (_this9.element.scrollHeight - _this9.element.scrollTop == _this9.element.clientHeight) { + _this9.element.scrollTop = _this9.element.scrollTop + (rowEl.offsetTop - _this9.element.scrollTop) - (_this9.element.scrollHeight - rowEl.offsetTop) / 2; } else { - _this11.element.scrollTop = _this11.element.scrollTop - _this11.element.clientHeight / 2; + _this9.element.scrollTop = _this9.element.scrollTop - _this9.element.clientHeight / 2; } break; case "bottom": - if (_this11.element.scrollHeight - _this11.element.scrollTop == _this11.element.clientHeight) { - _this11.element.scrollTop = _this11.element.scrollTop - (_this11.element.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight; + if (_this9.element.scrollHeight - _this9.element.scrollTop == _this9.element.clientHeight) { + _this9.element.scrollTop = _this9.element.scrollTop - (_this9.element.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight; } else { - _this11.element.scrollTop = _this11.element.scrollTop - _this11.element.clientHeight + rowEl.offsetHeight; + _this9.element.scrollTop = _this9.element.scrollTop - _this9.element.clientHeight + rowEl.offsetHeight; } break; @@ -2920,26 +2815,25 @@ RowManager.prototype.scrollToRow = function (row, position, ifVisible) { ////////////////// Data Handling ////////////////// RowManager.prototype.setData = function (data, renderInPosition, columnsChanged) { - var _this12 = this; + var _this10 = this; var self = this; return new Promise(function (resolve, reject) { - if (renderInPosition && _this12.getDisplayRows().length) { + if (renderInPosition && _this10.getDisplayRows().length) { if (self.table.options.pagination) { self._setDataActual(data, true); } else { - _this12.reRenderInPosition(function () { + _this10.reRenderInPosition(function () { self._setDataActual(data); }); } } else { - if (_this12.table.options.autoColumns && columnsChanged) { - _this12.table.columnManager.generateColumnsFromRowData(data); + if (_this10.table.options.autoColumns && columnsChanged) { + _this10.table.columnManager.generateColumnsFromRowData(data); } - _this12.resetScroll(); - - _this12._setDataActual(data); + _this10.resetScroll(); + _this10._setDataActual(data); } resolve(); @@ -2976,9 +2870,9 @@ RowManager.prototype._setDataActual = function (data, renderInPosition) { } }); - self.refreshActiveData(false, false, renderInPosition); - self.table.options.dataLoaded.call(this.table, data); + + self.refreshActiveData(false, false, renderInPosition); } else { console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ", typeof data === 'undefined' ? 'undefined' : _typeof(data), "\nData: ", data); } @@ -2994,12 +2888,6 @@ RowManager.prototype._wipeElements = function () { } this.rows = []; - this.activeRows = []; - this.activeRowsCount = 0; - this.displayRows = []; - this.displayRowsCount = 0; - - this.adjustTableSize(); }; RowManager.prototype.deleteRow = function (row, blockRedraw) { @@ -3032,9 +2920,7 @@ RowManager.prototype.deleteRow = function (row, blockRedraw) { this.table.options.rowDeleted.call(this.table, row.getComponent()); - if (this.table.options.dataChanged) { - this.table.options.dataChanged.call(this.table, this.getData()); - } + this.table.options.dataEdited.call(this.table, this.getData()); if (this.table.options.groupBy && this.table.modExists("groupRows")) { this.table.modules.groupRows.updateGroupRows(true); @@ -3060,14 +2946,14 @@ RowManager.prototype.addRow = function (data, pos, index, blockRedraw) { //add multiple rows RowManager.prototype.addRows = function (data, pos, index) { - var _this13 = this; + var _this11 = this; var self = this, length = 0, rows = []; return new Promise(function (resolve, reject) { - pos = _this13.findAddRowPos(pos); + pos = _this11.findAddRowPos(pos); if (!Array.isArray(data)) { data = [data]; @@ -3084,20 +2970,20 @@ RowManager.prototype.addRows = function (data, pos, index) { rows.push(row); }); - if (_this13.table.options.groupBy && _this13.table.modExists("groupRows")) { - _this13.table.modules.groupRows.updateGroupRows(true); - } else if (_this13.table.options.pagination && _this13.table.modExists("page")) { - _this13.refreshActiveData(false, false, true); + if (_this11.table.options.groupBy && _this11.table.modExists("groupRows")) { + _this11.table.modules.groupRows.updateGroupRows(true); + } else if (_this11.table.options.pagination && _this11.table.modExists("page")) { + _this11.refreshActiveData(false, false, true); } else { - _this13.reRenderInPosition(); + _this11.reRenderInPosition(); } //recalc column calculations if present - if (_this13.table.modExists("columnCalcs")) { - _this13.table.modules.columnCalcs.recalc(_this13.table.rowManager.activeRows); + if (_this11.table.modExists("columnCalcs")) { + _this11.table.modules.columnCalcs.recalc(_this11.table.rowManager.activeRows); } - _this13.regenerateRowNumbers(); + _this11.regenerateRowNumbers(); resolve(rows); }); }; @@ -3218,9 +3104,7 @@ RowManager.prototype.addRowActual = function (data, pos, index, blockRedraw) { this.table.options.rowAdded.call(this.table, row.getComponent()); - if (this.table.options.dataChanged) { - this.table.options.dataChanged.call(this.table, this.getData()); - } + this.table.options.dataEdited.call(this.table, this.getData()); if (!blockRedraw) { this.reRenderInPosition(); @@ -3242,13 +3126,13 @@ RowManager.prototype.moveRow = function (from, to, after) { }; RowManager.prototype.moveRowActual = function (from, to, after) { - var _this14 = this; + var _this12 = this; this._moveRowInArray(this.rows, from, to, after); this._moveRowInArray(this.activeRows, from, to, after); this.displayRowIterator(function (rows) { - _this14._moveRowInArray(rows, from, to, after); + _this12._moveRowInArray(rows, from, to, after); }); if (this.table.options.groupBy && this.table.modExists("groupRows")) { @@ -3402,7 +3286,7 @@ RowManager.prototype.getDataCount = function (active) { }; RowManager.prototype._genRemoteRequest = function () { - var _this15 = this; + var _this13 = this; var table = this.table, options = table.options, @@ -3431,7 +3315,7 @@ RowManager.prototype._genRemoteRequest = function () { } table.modules.ajax.sendRequest().then(function (data) { - _this15._setDataActual(data, true); + _this13._setDataActual(data, true); }).catch(function (e) {}); }; @@ -3653,13 +3537,7 @@ RowManager.prototype.refreshActiveData = function (stage, skipStage, renderInPos if (renderInPosition) { self.reRenderInPosition(); } else { - - if (stage === "all" && this.table.options.virtualDomHoz) { - this.table.vdomHoz.dataChange(); - } - self.renderTable(); - if (table.options.layoutColumnsOnNewData) { self.table.columnManager.redraw(true); } @@ -3674,11 +3552,11 @@ RowManager.prototype.refreshActiveData = function (stage, skipStage, renderInPos //regenerate row numbers for row number formatter if in use RowManager.prototype.regenerateRowNumbers = function () { - var _this16 = this; + var _this14 = this; if (this.rowNumColumn) { this.activeRows.forEach(function (row) { - var cell = row.getCell(_this16.rowNumColumn); + var cell = row.getCell(_this14.rowNumColumn); if (cell) { cell._generateContents(); @@ -3811,10 +3689,6 @@ RowManager.prototype.getRows = function (active) { rows = this.getVisibleRows(true); break; - case "selected": - rows = this.table.modules.selectRow.selectedRows; - break; - default: rows = this.rows; } @@ -3975,8 +3849,8 @@ RowManager.prototype.renderEmptyScroll = function () { this.tableElement.style.display = "none"; } else { this.tableElement.style.minWidth = this.table.columnManager.getWidth() + "px"; - // this.tableElement.style.minHeight = "1px"; - // this.tableElement.style.visibility = "hidden"; + this.tableElement.style.minHeight = "1px"; + this.tableElement.style.visibility = "hidden"; } }; @@ -4068,21 +3942,14 @@ RowManager.prototype._virtualRenderFill = function (position, forceMove, offset) self.styleRow(row, index); element.appendChild(row.getElement()); - - row.initialize(); - - if (!row.heightInitialized) { - row.normalizeHeight(true); + if (!row.initialized) { + row.initialize(true); + } else { + if (!row.heightInitialized) { + row.normalizeHeight(true); + } } - // if(!row.initialized){ - // row.initialize(true); - // }else{ - // if(!row.heightInitialized){ - // row.normalizeHeight(true); - // } - // } - rowHeight = row.getHeight(); if (i < topPad) { @@ -4379,7 +4246,7 @@ RowManager.prototype.adjustTableSize = function () { modExists; if (this.renderMode === "virtual") { - var otherHeight = Math.floor(this.columnManager.getElement().offsetHeight + (this.table.footerManager && !this.table.footerManager.external ? this.table.footerManager.getElement().offsetHeight : 0)); + var otherHeight = this.columnManager.getElement().offsetHeight + (this.table.footerManager && !this.table.footerManager.external ? this.table.footerManager.getElement().offsetHeight : 0); if (this.fixedHeight) { this.element.style.minHeight = "calc(100% - " + otherHeight + "px)"; @@ -4387,7 +4254,7 @@ RowManager.prototype.adjustTableSize = function () { this.element.style.maxHeight = "calc(100% - " + otherHeight + "px)"; } else { this.element.style.height = ""; - this.element.style.height = Math.floor(this.table.element.clientHeight) - otherHeight + "px"; + this.element.style.height = this.table.element.clientHeight - otherHeight + "px"; this.element.scrollTop = this.scrollTop; } @@ -4395,7 +4262,7 @@ RowManager.prototype.adjustTableSize = function () { this.vDomWindowBuffer = this.table.options.virtualDomBuffer || this.height; //check if the table has changed size when dealing with variable height tables - if (!this.fixedHeight && Math.floor(initialHeight) != Math.floor(this.element.clientHeight)) { + if (!this.fixedHeight && initialHeight != this.element.clientHeight) { modExists = this.table.modExists("resizeTable"); if (modExists && !this.table.modules.resizeTable.autoResize || !modExists) { @@ -4408,7 +4275,7 @@ RowManager.prototype.adjustTableSize = function () { //renitialize all rows RowManager.prototype.reinitialize = function () { this.rows.forEach(function (row) { - row.reinitialize(true); + row.reinitialize(); }); }; @@ -4480,462 +4347,6 @@ RowManager.prototype.resetScroll = function () { } }; -var VDomHoz = function VDomHoz(table) { - this.table = table; - - this.element = this.table.rowManager.tableElement; - this.holderEl = this.table.rowManager.element; - - this.leftCol = 0; - this.rightCol = 0; - this.scrollLeft = 0; - - this.vDomScrollPosLeft = 0; - this.vDomScrollPosRight = 0; - - this.vDomPadLeft = 0; - this.vDomPadRight = 0; - - this.fitDataColAvg = 0; - - this.window = 200; //pixel margin to make column visible before it is shown on screen - - this.initialized = false; - - this.columns = []; - - if (this.compatabilityCheck()) { - this.initialize(); - } -}; - -VDomHoz.prototype.compatabilityCheck = function () { - var options = this.table.options, - frozen = false, - ok = true; - - if (options.layout == "fitDataTable") { - console.warn("Horizontal Vitrual DOM is not compatible with fitDataTable layout mode"); - ok = false; - } - - if (options.responsiveLayout) { - console.warn("Horizontal Vitrual DOM is not compatible with responsive columns"); - ok = false; - } - - if (this.table.rtl) { - console.warn("Horizontal Vitrual DOM is not currently compatible with RTL text direction"); - ok = false; - } - - // if(options.rowFormatter){ - // console.warn("Horizontal Vitrual DOM is not compatible with row formatters"); - // ok = false; - // } - - if (options.columns) { - frozen = options.columns.find(function (col) { - return col.frozen; - }); - - if (frozen) { - console.warn("Horizontal Vitrual DOM is not compatible with frozen columns"); - ok = false; - } - } - - if (!ok) { - options.virtualDomHoz = false; - } - - return ok; -}; - -VDomHoz.prototype.initialize = function () { - var _this17 = this; - - this.holderEl.addEventListener("scroll", function () { - var left = _this17.holderEl.scrollLeft; - - if (_this17.scrollLeft != left) { - _this17.scrollLeft = left; - _this17.scroll(left - (_this17.vDomScrollPosLeft + _this17.window)); - } - }); -}; - -VDomHoz.prototype.deinitialize = function () { - this.initialized = false; -}; - -VDomHoz.prototype.clear = function () { - this.columns = []; - - this.leftCol = -1; - this.rightCol = 0; - - this.vDomScrollPosLeft = 0; - this.vDomScrollPosRight = 0; - this.vDomPadLeft = 0; - this.vDomPadRight = 0; -}; - -VDomHoz.prototype.dataChange = function () { - var change = false, - collsWidth = 0, - colEnd = 0, - group, - row, - rowEl; - - if (this.table.options.layout === "fitData") { - this.table.columnManager.columnsByIndex.forEach(function (column) { - if (!column.definition.width && column.visible) { - change = true; - } - }); - - if (change) { - if (change && this.table.rowManager.getDisplayRows().length) { - // this.table.vdomHoz.deinitialize(); - - this.vDomScrollPosRight = this.scrollLeft + this.holderEl.clientWidth + this.window; - - if (this.table.options.groupBy) { - group = this.table.modules.groupRows.getGroups(false)[0]; - - row = group.getRows(false)[0]; - } else { - row = this.table.rowManager.getDisplayRows()[0]; - } - - if (row) { - - rowEl = row.getElement(); - - row.generateCells(); - - this.element.appendChild(rowEl); - - for (var colEnd = 0; colEnd < row.cells.length; colEnd++) { - var cell = row.cells[colEnd]; - rowEl.appendChild(cell.getElement()); - - cell.column.reinitializeWidth(); - - collsWidth += cell.column.getWidth(); - - if (collsWidth > this.vDomScrollPosRight) { - break; - } - } - - rowEl.parentNode.removeChild(rowEl); - - this.fitDataColAvg = Math.floor(collsWidth / (colEnd + 1)); - - for (colEnd; colEnd < this.table.columnManager.columnsByIndex.length; colEnd++) { - this.table.columnManager.columnsByIndex[colEnd].setWidth(this.fitDataColAvg); - } - - this.reinitialize(false, true); - } - } - } - } else { - if (this.table.options.layout === "fitColumns") { - this.table.modules.layout.layout(); - this.table.vdomHoz.reinitialize(false, true); - } - } -}; - -VDomHoz.prototype.fitDataLayoutOverride = function () { - for (var i = this.leftCol; i <= this.rightCol; i++) { - this.columns[i].reinitializeWidth(); - } -}; - -VDomHoz.prototype.reinitialize = function (update, blockRedraw) { - var _this18 = this; - - var old = { - cols: this.columns, - leftCol: this.leftCol, - rightCol: this.rightCol - }; - - if (update && !this.initialized) { - return; - } - - this.clear(); - - this.scrollLeft = this.holderEl.scrollLeft; - - this.vDomScrollPosLeft = this.scrollLeft - this.window; - this.vDomScrollPosRight = this.scrollLeft + this.holderEl.clientWidth + this.window; - - var colPos = 0; - - this.table.columnManager.columnsByIndex.forEach(function (column) { - var config = {}; - - if (column.visible) { - var width = column.getWidth(); - - config.leftPos = colPos; - config.rightPos = colPos + width; - - if (colPos + width > _this18.vDomScrollPosLeft && colPos < _this18.vDomScrollPosRight) { - //column is visible - - if (_this18.leftCol == -1) { - _this18.leftCol = _this18.columns.length; - _this18.vDomPadLeft = colPos; - } - - _this18.rightCol = _this18.columns.length; - } else { - // column is hidden - if (_this18.leftCol !== -1) { - _this18.vDomPadRight += width; - } - } - - _this18.columns.push(column); - - column.modules.vdomHoz = config; - - colPos += width; - } - }); - - this.element.style.paddingLeft = this.vDomPadLeft + "px"; - this.element.style.paddingRight = this.vDomPadRight + "px"; - - this.initialized = true; - - if (!blockRedraw) { - if (!update || this.reinitChanged(old)) { - this.renitializeRows(); - } - } - - this.holderEl.scrollLeft = this.scrollLeft; -}; - -VDomHoz.prototype.reinitChanged = function (old) { - var _this19 = this; - - var match = true; - - if (old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol) { - return true; - } - - old.cols.forEach(function (col, i) { - if (col !== _this19.columns[i]) { - match = false; - } - }); - - return !match; -}; - -VDomHoz.prototype.renitializeRows = function () { - var _this20 = this; - - var rows = this.table.rowManager.getVisibleRows(); - rows.forEach(function (row) { - _this20.reinitializeRow(row, true); - }); -}; - -VDomHoz.prototype.scroll = function (diff) { - this.vDomScrollPosLeft += diff; - this.vDomScrollPosRight += diff; - - if (diff > this.holderEl.clientWidth * .8) { - this.reinitialize(); - } else { - if (diff > 0) { - //scroll right - this.addColRight(); - this.removeColLeft(); - } else { - //scroll left - this.addColLeft(); - this.removeColRight(); - } - } -}; - -VDomHoz.prototype.colPositionAdjust = function (start, end, diff) { - for (var i = start; i < end; i++) { - var column = this.columns[i]; - - column.modules.vdomHoz.leftPos -= diff; - column.modules.vdomHoz.rightPos -= diff; - } -}; - -VDomHoz.prototype.addColRight = function () { - var column = this.columns[this.rightCol + 1], - rows, - oldWidth, - widthDiff; - - if (column && column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight) { - - rows = this.table.rowManager.getVisibleRows(); - - rows.forEach(function (row) { - if (row.type !== "group") { - var cell = row.getCell(column); - row.getElement().appendChild(cell.getElement()); - cell.cellRendered(); - } - }); - - if (this.fitDataColAvg) { - - oldWidth = column.getWidth(); - - if (oldWidth === this.fitDataColAvg) { - column.reinitializeWidth(); - - widthDiff = oldWidth - column.getWidth(); - - if (widthDiff) { - column.modules.vdomHoz.rightPos -= widthDiff; - this.colPositionAdjust(this.rightCol + 1, this.columns.length, widthDiff); - } - } - } - - this.rightCol++; - - if (this.rightCol >= this.columns.length - 1) { - this.vDomPadRight = 0; - } else { - this.vDomPadRight -= column.getWidth(); - } - - this.element.style.paddingRight = this.vDomPadRight + "px"; - - this.addColRight(); - } -}; - -VDomHoz.prototype.addColLeft = function () { - var column = this.columns[this.leftCol - 1], - rows; - - if (column && column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft) { - var rows = this.table.rowManager.getVisibleRows(); - - rows.forEach(function (row) { - if (row.type !== "group") { - var cell = row.getCell(column); - row.getElement().prepend(cell.getElement()); - cell.cellRendered(); - } - }); - - if (!this.leftCol) { - this.vDomPadLeft = 0; - } else { - this.vDomPadLeft -= column.getWidth(); - } - - this.element.style.paddingLeft = this.vDomPadLeft + "px"; - - this.leftCol--; - - this.addColLeft(); - } -}; - -VDomHoz.prototype.removeColRight = function (column) { - var column = this.columns[this.rightCol], - rows; - - if (column && column.modules.vdomHoz.leftPos > this.vDomScrollPosRight) { - rows = this.table.rowManager.getVisibleRows(); - - column.modules.vdomHoz.visible = false; - - rows.forEach(function (row) { - if (row.type !== "group") { - var cell = row.getCell(column); - row.getElement().removeChild(cell.getElement()); - } - }); - - this.vDomPadRight += column.getWidth(); - this.element.style.paddingRight = this.vDomPadRight + "px"; - - this.rightCol--; - - this.removeColRight(); - } -}; - -VDomHoz.prototype.removeColLeft = function () { - var column = this.columns[this.leftCol], - rows; - - if (column && column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft) { - - rows = this.table.rowManager.getVisibleRows(); - - rows.forEach(function (row) { - if (row.type !== "group") { - var cell = row.getCell(column); - row.getElement().removeChild(cell.getElement()); - } - }); - - this.vDomPadLeft += column.getWidth(); - this.element.style.paddingLeft = this.vDomPadLeft + "px"; - - this.leftCol++; - - this.removeColLeft(); - } -}; - -VDomHoz.prototype.initializeRow = function (row) { - if (row.type !== "group") { - row.modules.vdomHoz = { - leftCol: this.leftCol, - rightCol: this.rightCol - }; - - for (var i = this.leftCol; i <= this.rightCol; i++) { - var column = this.columns[i]; - - if (column.visible) { - var cell = row.getCell(column); - - row.element.appendChild(cell.getElement()); - cell.cellRendered(); - } - } - } -}; - -VDomHoz.prototype.reinitializeRow = function (row, force) { - if (row.type !== "group") { - if (force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol) { - while (row.element.firstChild) { - row.element.removeChild(row.element.firstChild); - }this.initializeRow(row); - } - } -}; //public row object var RowComponent = function RowComponent(row) { this._row = row; @@ -5071,7 +4482,7 @@ RowComponent.prototype.getTreeParent = function () { RowComponent.prototype.getTreeChildren = function () { if (this._row.table.modExists("dataTree", true)) { - return this._row.table.modules.dataTree.getTreeChildren(this._row, true); + return this._row.table.modules.dataTree.getTreeChildren(this._row); } return false; @@ -5176,7 +4587,7 @@ Row.prototype.generateElement = function () { } //set column menu - if ((self.table.options.rowContextMenu || self.table.options.rowClickMenu) && this.table.modExists("menu")) { + if (self.table.options.rowContextMenu && this.table.modExists("menu")) { self.table.modules.menu.initializeRow(this); } @@ -5296,14 +4707,14 @@ Row.prototype.generateCells = function () { //functions to setup on first render Row.prototype.initialize = function (force) { - var _this21 = this; + var self = this; - if (!this.initialized || force) { + if (!self.initialized || force) { - this.deleteCells(); + self.deleteCells(); - while (this.element.firstChild) { - this.element.removeChild(this.element.firstChild); + while (self.element.firstChild) { + self.element.removeChild(self.element.firstChild); } //handle frozen cells if (this.table.modExists("frozenColumns")) { this.table.modules.frozenColumns.layoutRow(this); @@ -5311,43 +4722,35 @@ Row.prototype.initialize = function (force) { this.generateCells(); - if (this.table.options.virtualDomHoz && this.table.vdomHoz.initialized) { - this.table.vdomHoz.initializeRow(this); - } else { - this.cells.forEach(function (cell) { - _this21.element.appendChild(cell.getElement()); - cell.cellRendered(); - }); - } + self.cells.forEach(function (cell) { + self.element.appendChild(cell.getElement()); + cell.cellRendered(); + }); if (force) { - this.normalizeHeight(); + self.normalizeHeight(); } //setup movable rows - if (this.table.options.dataTree && this.table.modExists("dataTree")) { - this.table.modules.dataTree.layoutRow(this); + if (self.table.options.dataTree && self.table.modExists("dataTree")) { + self.table.modules.dataTree.layoutRow(this); } //setup column colapse container - if (this.table.options.responsiveLayout === "collapse" && this.table.modExists("responsiveLayout")) { - this.table.modules.responsiveLayout.layoutRow(this); + if (self.table.options.responsiveLayout === "collapse" && self.table.modExists("responsiveLayout")) { + self.table.modules.responsiveLayout.layoutRow(this); } - if (this.table.options.rowFormatter) { - this.table.options.rowFormatter(this.getComponent()); + if (self.table.options.rowFormatter) { + self.table.options.rowFormatter(self.getComponent()); } //set resizable handles - if (this.table.options.resizableRows && this.table.modExists("resizeRows")) { - this.table.modules.resizeRows.initializeRow(this); + if (self.table.options.resizableRows && self.table.modExists("resizeRows")) { + self.table.modules.resizeRows.initializeRow(self); } - this.initialized = true; - } else { - if (this.table.options.virtualDomHoz) { - this.table.vdomHoz.reinitializeRow(this); - } + self.initialized = true; } }; @@ -5359,7 +4762,7 @@ Row.prototype.reinitializeHeight = function () { } }; -Row.prototype.reinitialize = function (children) { +Row.prototype.reinitialize = function () { this.initialized = false; this.heightInitialized = false; @@ -5371,12 +4774,6 @@ Row.prototype.reinitialize = function (children) { if (this.element.offsetParent !== null) { this.initialize(true); } - - if (this.table.options.dataTree && this.table.modExists("dataTree", true)) { - this.table.modules.dataTree.getTreeChildren(this, false, true).forEach(function (child) { - child.reinitialize(true); - }); - } }; //get heights when doing bulk row style calcs in virtual DOM @@ -5487,7 +4884,7 @@ Row.prototype.setData = function (data) { //update the rows data Row.prototype.updateData = function (updatedData) { - var _this22 = this; + var _this15 = this; var visible = Tabulator.prototype.helpers.elVisible(this.element), tempData = {}, @@ -5499,37 +4896,37 @@ Row.prototype.updateData = function (updatedData) { updatedData = JSON.parse(updatedData); } - if (_this22.table.options.reactiveData && _this22.table.modExists("reactiveData", true)) { - _this22.table.modules.reactiveData.block(); + if (_this15.table.options.reactiveData && _this15.table.modExists("reactiveData", true)) { + _this15.table.modules.reactiveData.block(); } //mutate incomming data if needed - if (_this22.table.modExists("mutator")) { + if (_this15.table.modExists("mutator")) { - tempData = Object.assign(tempData, _this22.data); + tempData = Object.assign(tempData, _this15.data); tempData = Object.assign(tempData, updatedData); - newRowData = _this22.table.modules.mutator.transformRow(tempData, "data", updatedData); + newRowData = _this15.table.modules.mutator.transformRow(tempData, "data", updatedData); } else { newRowData = updatedData; } //set data for (var attrname in newRowData) { - _this22.data[attrname] = newRowData[attrname]; + _this15.data[attrname] = newRowData[attrname]; } - if (_this22.table.options.reactiveData && _this22.table.modExists("reactiveData", true)) { - _this22.table.modules.reactiveData.unblock(); + if (_this15.table.options.reactiveData && _this15.table.modExists("reactiveData", true)) { + _this15.table.modules.reactiveData.unblock(); } //update affected cells only for (var attrname in updatedData) { - var columns = _this22.table.columnManager.getColumnsByFieldRoot(attrname); + var columns = _this15.table.columnManager.getColumnsByFieldRoot(attrname); columns.forEach(function (column) { - var cell = _this22.getCell(column.getField()); + var cell = _this15.getCell(column.getField()); if (cell) { var value = column.getFieldValue(newRowData); @@ -5544,52 +4941,43 @@ Row.prototype.updateData = function (updatedData) { }); } - if (_this22.table.options.groupUpdateOnCellEdit && _this22.table.options.groupBy && _this22.table.modExists("groupRows")) { - _this22.table.modules.groupRows.reassignRowToGroup(_this22.row); - } - //Partial reinitialization if visible if (visible) { - _this22.normalizeHeight(true); + _this15.normalizeHeight(true); - if (_this22.table.options.rowFormatter) { - _this22.table.options.rowFormatter(_this22.getComponent()); + if (_this15.table.options.rowFormatter) { + _this15.table.options.rowFormatter(_this15.getComponent()); } } else { - _this22.initialized = false; - _this22.height = 0; - _this22.heightStyled = ""; + _this15.initialized = false; + _this15.height = 0; + _this15.heightStyled = ""; } - if (_this22.table.options.dataTree !== false && _this22.table.modExists("dataTree") && _this22.table.modules.dataTree.redrawNeeded(updatedData)) { - _this22.table.modules.dataTree.initializeRow(_this22); - - if (visible) { - _this22.table.modules.dataTree.layoutRow(_this22); - _this22.table.rowManager.refreshActiveData("tree", false, true); - } + if (_this15.table.options.dataTree !== false && _this15.table.modExists("dataTree") && _this15.table.modules.dataTree.redrawNeeded(updatedData)) { + _this15.table.modules.dataTree.initializeRow(_this15); + _this15.table.modules.dataTree.layoutRow(_this15); + _this15.table.rowManager.refreshActiveData("tree", false, true); } //this.reinitialize(); - _this22.table.options.rowUpdated.call(_this22.table, _this22.getComponent()); - - if (_this22.table.options.dataChanged) { - _this22.table.options.dataChanged.call(_this22.table, _this22.table.rowManager.getData()); - } + _this15.table.options.rowUpdated.call(_this15.table, _this15.getComponent()); resolve(); }); }; Row.prototype.getData = function (transform) { + var self = this; + if (transform) { - if (this.table.modExists("accessor")) { - return this.table.modules.accessor.transformRow(this, transform); + if (self.table.modExists("accessor")) { + return self.table.modules.accessor.transformRow(self.data, transform); } + } else { + return this.data; } - - return this.data; }; Row.prototype.getCell = function (column) { @@ -5699,32 +5087,32 @@ Row.prototype.validate = function () { ///////////////////// Actions ///////////////////// Row.prototype.delete = function () { - var _this23 = this; + var _this16 = this; return new Promise(function (resolve, reject) { var index, rows; - if (_this23.table.options.history && _this23.table.modExists("history")) { + if (_this16.table.options.history && _this16.table.modExists("history")) { - if (_this23.table.options.groupBy && _this23.table.modExists("groupRows")) { - rows = _this23.getGroup().rows; - index = rows.indexOf(_this23); + if (_this16.table.options.groupBy && _this16.table.modExists("groupRows")) { + rows = _this16.getGroup().rows; + index = rows.indexOf(_this16); if (index) { index = rows[index - 1]; } } else { - index = _this23.table.rowManager.getRowIndex(_this23); + index = _this16.table.rowManager.getRowIndex(_this16); if (index) { - index = _this23.table.rowManager.rows[index - 1]; + index = _this16.table.rowManager.rows[index - 1]; } } - _this23.table.modules.history.action("rowDelete", _this23, { data: _this23.getData(), pos: !index, index: index }); + _this16.table.modules.history.action("rowDelete", _this16, { data: _this16.getData(), pos: !index, index: index }); } - _this23.deleteActual(); + _this16.deleteActual(); resolve(); }); @@ -5733,7 +5121,17 @@ Row.prototype.delete = function () { Row.prototype.deleteActual = function (blockRedraw) { var index = this.table.rowManager.getRowIndex(this); - this.detatchModules(); + //deselect row if it is selected + if (this.table.modExists("selectRow")) { + this.table.modules.selectRow._deselectRow(this, true); + } + + //cancel edit if row is currently being edited + if (this.table.modExists("edit")) { + if (this.table.modules.edit.currentCell.row === this) { + this.table.modules.edit.cancelEdit(); + } + } // if(this.table.options.dataTree && this.table.modExists("dataTree")){ // this.table.modules.dataTree.collapseRow(this, true); @@ -5755,7 +5153,6 @@ Row.prototype.deleteActual = function (blockRedraw) { this.initialized = false; this.heightInitialized = false; - this.element = false; if (this.table.options.dataTree && this.table.modExists("dataTree", true)) { this.table.modules.dataTree.rowDelete(this); @@ -5771,24 +5168,6 @@ Row.prototype.deleteActual = function (blockRedraw) { } }; -Row.prototype.detatchModules = function () { - //deselect row if it is selected - if (this.table.modExists("selectRow")) { - this.table.modules.selectRow._deselectRow(this, true); - } - - //cancel edit if row is currently being edited - if (this.table.modExists("edit")) { - if (this.table.modules.edit.currentCell.row === this) { - this.table.modules.edit.cancelEdit(); - } - } - - if (this.table.modExists("frozenRows")) { - this.table.modules.frozenRows.detachRow(this); - } -}; - Row.prototype.deleteCells = function () { var cellCount = this.cells.length; @@ -5798,7 +5177,6 @@ Row.prototype.deleteCells = function () { }; Row.prototype.wipe = function () { - this.detatchModules(); this.deleteCells(); while (this.element.firstChild) { @@ -5837,10 +5215,6 @@ CellComponent.prototype.getOldValue = function () { return this._cell.getOldValue(); }; -CellComponent.prototype.getInitialValue = function () { - return this._cell.initialValue; -}; - CellComponent.prototype.getElement = function () { return this._cell.getElement(); }; @@ -5873,10 +5247,6 @@ CellComponent.prototype.restoreOldValue = function () { this._cell.setValueActual(this._cell.getOldValue()); }; -CellComponent.prototype.restoreInitialValue = function () { - this._cell.setValueActual(this._cell.initialValue); -}; - CellComponent.prototype.edit = function (force) { return this._cell.edit(force); }; @@ -5904,7 +5274,7 @@ CellComponent.prototype.validate = function () { }; CellComponent.prototype.clearValidation = function () { - if (this._cell.table.modExists("validate", true)) { + if (self.table.modExists("validate", true)) { this._cell.table.modules.validate.clearValidation(this._cell); } }; @@ -5932,7 +5302,6 @@ var Cell = function Cell(column, row) { this.row = row; this.element = null; this.value = null; - this.initialValue; this.oldValue = null; this.modules = {}; @@ -5942,8 +5311,6 @@ var Cell = function Cell(column, row) { this.component = null; - this.loaded = false; //track if the cell has been added to the DOM yet - this.build(); }; @@ -5958,8 +5325,6 @@ Cell.prototype.build = function () { this._configureCell(); this.setValueActual(this.column.getFieldValue(this.row.data)); - - this.initialValue = this.value; }; Cell.prototype.generateElement = function () { @@ -6341,11 +5706,6 @@ Cell.prototype._generateTooltip = function () { //////////////////// Getters //////////////////// Cell.prototype.getElement = function () { - if (!this.loaded) { - this.loaded = true; - this.layoutElement(); - } - return this.element; }; @@ -6375,17 +5735,11 @@ Cell.prototype.setValue = function (value, mutate) { this.column.cellEvents.cellEdited.call(this.table, component); } - if (this.table.options.groupUpdateOnCellEdit && this.table.options.groupBy && this.table.modExists("groupRows")) { - this.table.modules.groupRows.reassignRowToGroup(this.row); - } - this.cellRendered(); this.table.options.cellEdited.call(this.table, component); - if (this.table.options.dataChanged) { - this.table.options.dataChanged.call(this.table, this.table.rowManager.getData()); - } + this.table.options.dataEdited.call(this.table, this.table.rowManager.getData()); } }; @@ -6440,21 +5794,16 @@ Cell.prototype.setValueActual = function (value) { this.table.modules.reactiveData.unblock(); } - if (this.loaded) { - this.layoutElement(); - } -}; - -Cell.prototype.layoutElement = function () { this._generateContents(); this._generateTooltip(); //set resizable handles - if (this.table.options.resizableColumns && this.table.modExists("resizeColumns") && this.row.type === "row") { + if (this.table.options.resizableColumns && this.table.modExists("resizeColumns")) { this.table.modules.resizeColumns.initializeColumn("cell", this.column, this.element); } - if ((this.column.definition.contextMenu || this.column.definition.clickMenu) && this.table.modExists("menu")) { + //set column menu + if (this.column.definition.contextMenu && this.table.modExists("menu")) { this.table.modules.menu.initializeCell(this); } @@ -6503,7 +5852,7 @@ Cell.prototype.getHeight = function () { }; Cell.prototype.show = function () { - this.element.style.display = this.column.vertAlign ? "inline-flex" : ""; + this.element.style.display = ""; }; Cell.prototype.hide = function () { @@ -6539,7 +5888,7 @@ Cell.prototype.validate = function () { }; Cell.prototype.delete = function () { - if (!this.table.rowManager.redrawBlock && this.element.parentNode) { + if (!this.table.rowManager.redrawBlock) { this.element.parentNode.removeChild(this.element); } @@ -6551,10 +5900,6 @@ Cell.prototype.delete = function () { this.table.modules.edit.clearEdited(this); } - if (this.table.options.history) { - this.table.modules.history.clearComponentHistory(this); - } - this.element = false; this.column.deleteCell(this); this.row.deleteCell(this); @@ -6763,20 +6108,15 @@ var Tabulator = function Tabulator(element, options) { this.columnManager = null; // hold Column Manager this.rowManager = null; //hold Row Manager this.footerManager = null; //holder Footer Manager - this.vdomHoz = null; //holder horizontal virtual dom - - this.browser = ""; //hold current browser type this.browserSlow = false; //handle reduced functionality for slower browsers this.browserMobile = false; //check if running on moble, prevent resize cancelling edit on keyboard appearence - this.rtl = false; //check if the table is in RTL mode this.modules = {}; //hold all modules bound to this table - if (this.initializeElement(element)) { - this.initializeOptions(options || {}); - this._create(); - } + this.initializeElement(element); + this.initializeOptions(options || {}); + this._create(); Tabulator.prototype.comms.register(this); //register table for inderdevice communication }; @@ -6802,14 +6142,12 @@ Tabulator.prototype.defaultOptions = { columns: [], //store for colum header info cellHozAlign: "", //horizontal align columns - cellVertAlign: "", //vertical align columns - headerHozAlign: "", //horizontal header alignment + cellVertAlign: "", //certical align columns data: [], //default starting data autoColumns: false, //build columns from data row structure - autoColumnsDefinitions: false, reactiveData: false, //enable data reactivity @@ -6829,14 +6167,11 @@ Tabulator.prototype.defaultOptions = { headerSort: true, //set default global header sort headerSortTristate: false, //set default tristate header sorting - headerSortElement: "
", //header sort element footerElement: false, //hold footer element index: "id", //filed for row index - textDirection: "auto", - keybindings: [], //array for keybindings tabEndNewRow: false, //create new row when tab to end of table @@ -6864,8 +6199,6 @@ Tabulator.prototype.defaultOptions = { downloadRowRange: "active", //restrict download to active rows only dataTree: false, //enable data tree - dataTreeFilter: true, //filter child rows - dataTreeSort: true, //sort child rows dataTreeElementColumn: false, dataTreeBranchElement: true, //show data tree branch element dataTreeChildIndent: 9, //data tree child indent in px @@ -6910,7 +6243,6 @@ Tabulator.prototype.defaultOptions = { virtualDom: true, //enable DOM virtualization virtualDomBuffer: 0, // set virtual DOM buffer size - virtualDomHoz: false, //enable horizontal DOM virtualization persistentLayout: false, //DEPRICATED - REMOVE in 5.0 persistentSort: false, //DEPRICATED - REMOVE in 5.0 @@ -6955,7 +6287,6 @@ Tabulator.prototype.defaultOptions = { groupBy: false, //enable table grouping and set field to group by groupStartOpen: true, //starting state of group groupValues: false, - groupUpdateOnCellEdit: false, groupHeader: false, //header generation function groupHeaderPrint: null, @@ -7016,7 +6347,6 @@ Tabulator.prototype.defaultOptions = { rowMouseOut: false, rowMouseMove: false, rowContextMenu: false, - rowClickMenu: false, rowAdded: function rowAdded() {}, rowDeleted: function rowDeleted() {}, rowMoved: function rowMoved() {}, @@ -7056,8 +6386,7 @@ Tabulator.prototype.defaultOptions = { //data callbacks dataLoading: function dataLoading() {}, dataLoaded: function dataLoaded() {}, - dataEdited: false, //DEPRECATED - dataChanged: false, + dataEdited: function dataEdited() {}, //ajax callbacks ajaxRequesting: function ajaxRequesting() {}, @@ -7082,7 +6411,6 @@ Tabulator.prototype.defaultOptions = { groupDblClick: false, groupContext: false, groupContextMenu: false, - groupClickMenu: false, groupTap: false, groupDblTap: false, groupTapHold: false, @@ -7125,9 +6453,9 @@ Tabulator.prototype.initializeOptions = function (options) { this.options[key] = options[key]; } else { if (Array.isArray(this.defaultOptions[key])) { - this.options[key] = Object.assign([], this.defaultOptions[key]); + this.options[key] = []; } else if (_typeof(this.defaultOptions[key]) === "object" && this.defaultOptions[key] !== null) { - this.options[key] = Object.assign({}, this.defaultOptions[key]); + this.options[key] = {}; } else { this.options[key] = this.defaultOptions[key]; } @@ -7155,28 +6483,6 @@ Tabulator.prototype.initializeElement = function (element) { } }; -Tabulator.prototype.rtlCheck = function () { - var style = window.getComputedStyle(this.element); - - switch (this.options.textDirection) { - case "auto": - if (style.direction !== "rtl") { - break; - }; - - case "rtl": - this.element.classList.add("tabulator-rtl"); - this.rtl = true; - break; - - case "ltr": - this.element.classList.add("tabulator-ltr"); - - default: - this.rtl = false; - } -}; - //convert depricated functionality to new functions Tabulator.prototype._mapDepricatedFunctionality = function () { @@ -7187,11 +6493,6 @@ Tabulator.prototype._mapDepricatedFunctionality = function () { } } - if (this.options.dataEdited) { - console.warn("DEPRECATION WARNING - dataEdited option has been deprecated, please use the dataChanged option instead"); - this.options.dataChanged = this.options.dataEdited; - } - if (this.options.downloadDataFormatter) { console.warn("DEPRECATION WARNING - downloadDataFormatter option has been deprecated"); } @@ -7272,8 +6573,6 @@ Tabulator.prototype._create = function () { this.bindModules(); - this.rtlCheck(); - if (this.element.tagName === "TABLE") { if (this.modExists("htmlTableImport", true)) { this.modules.htmlTableImport.parseTable(); @@ -7287,10 +6586,6 @@ Tabulator.prototype._create = function () { this.columnManager.setRowManager(this.rowManager); this.rowManager.setColumnManager(this.columnManager); - if (this.options.virtualDomHoz) { - this.vdomHoz = new VDomHoz(this); - } - this._buildElement(); this._loadInitialData(); @@ -7307,7 +6602,7 @@ Tabulator.prototype._clearObjectPointers = function () { //build tabulator element Tabulator.prototype._buildElement = function () { - var _this24 = this; + var _this17 = this; var element = this.element, mod = this.modules, @@ -7349,9 +6644,6 @@ Tabulator.prototype._buildElement = function () { } //set localization - - mod.localize.initialize(); - if (options.headerFilterPlaceholder !== false) { mod.localize.setHeaderFilterPlaceholder(options.headerFilterPlaceholder); } @@ -7449,7 +6741,7 @@ Tabulator.prototype._buildElement = function () { if (options.initialHeaderFilter && this.modExists("filter", true)) { options.initialHeaderFilter.forEach(function (item) { - var column = _this24.columnManager.findColumn(item.field); + var column = _this17.columnManager.findColumn(item.field); if (column) { mod.filter.setHeaderFilterValue(column, item.value); @@ -7609,7 +6901,7 @@ Tabulator.prototype.restoreRedraw = function () { //local data from local file Tabulator.prototype.setDataFromLocalFile = function (extensions) { - var _this25 = this; + var _this18 = this; return new Promise(function (resolve, reject) { var input = document.createElement("input"); @@ -7633,7 +6925,7 @@ Tabulator.prototype.setDataFromLocalFile = function (extensions) { return; } - _this25.setData(data).then(function (data) { + _this18._setData(data).then(function (data) { resolve(data); }).catch(function (err) { resolve(err); @@ -7788,14 +7080,14 @@ Tabulator.prototype.replaceData = function (data, params, config) { //update table data Tabulator.prototype.updateData = function (data) { - var _this26 = this; + var _this19 = this; var self = this; var responses = 0; return new Promise(function (resolve, reject) { - if (_this26.modExists("ajax")) { - _this26.modules.ajax.blockActiveRequest(); + if (_this19.modExists("ajax")) { + _this19.modules.ajax.blockActiveRequest(); } if (typeof data === "string") { @@ -7826,11 +7118,11 @@ Tabulator.prototype.updateData = function (data) { }; Tabulator.prototype.addData = function (data, pos, index) { - var _this27 = this; + var _this20 = this; return new Promise(function (resolve, reject) { - if (_this27.modExists("ajax")) { - _this27.modules.ajax.blockActiveRequest(); + if (_this20.modExists("ajax")) { + _this20.modules.ajax.blockActiveRequest(); } if (typeof data === "string") { @@ -7838,7 +7130,7 @@ Tabulator.prototype.addData = function (data, pos, index) { } if (data) { - _this27.rowManager.addRows(data, pos, index).then(function (rows) { + _this20.rowManager.addRows(data, pos, index).then(function (rows) { var output = []; rows.forEach(function (row) { @@ -7856,15 +7148,15 @@ Tabulator.prototype.addData = function (data, pos, index) { //update table data Tabulator.prototype.updateOrAddData = function (data) { - var _this28 = this; + var _this21 = this; var self = this, rows = [], responses = 0; return new Promise(function (resolve, reject) { - if (_this28.modExists("ajax")) { - _this28.modules.ajax.blockActiveRequest(); + if (_this21.modExists("ajax")) { + _this21.modules.ajax.blockActiveRequest(); } if (typeof data === "string") { @@ -7930,10 +7222,10 @@ Tabulator.prototype.getRowFromPosition = function (position, active) { //delete row from table Tabulator.prototype.deleteRow = function (index) { - var _this29 = this; + var _this22 = this; return new Promise(function (resolve, reject) { - var self = _this29, + var self = _this22, count = 0, successCount = 0, foundRows = []; @@ -7955,7 +7247,7 @@ Tabulator.prototype.deleteRow = function (index) { //find matching rows index.forEach(function (item) { - var row = _this29.rowManager.findRow(item, true); + var row = _this22.rowManager.findRow(item, true); if (row) { foundRows.push(row); @@ -7968,7 +7260,7 @@ Tabulator.prototype.deleteRow = function (index) { //sort rows into correct order to ensure smooth delete from table foundRows.sort(function (a, b) { - return _this29.rowManager.rows.indexOf(a) > _this29.rowManager.rows.indexOf(b) ? 1 : -1; + return _this22.rowManager.rows.indexOf(a) > _this22.rowManager.rows.indexOf(b) ? 1 : -1; }); foundRows.forEach(function (row) { @@ -7985,17 +7277,17 @@ Tabulator.prototype.deleteRow = function (index) { //add row to table Tabulator.prototype.addRow = function (data, pos, index) { - var _this30 = this; + var _this23 = this; return new Promise(function (resolve, reject) { if (typeof data === "string") { data = JSON.parse(data); } - _this30.rowManager.addRows(data, pos, index).then(function (rows) { + _this23.rowManager.addRows(data, pos, index).then(function (rows) { //recalc column calculations if present - if (_this30.modExists("columnCalcs")) { - _this30.modules.columnCalcs.recalc(_this30.rowManager.activeRows); + if (_this23.modExists("columnCalcs")) { + _this23.modules.columnCalcs.recalc(_this23.rowManager.activeRows); } resolve(rows[0].getComponent()); @@ -8005,10 +7297,10 @@ Tabulator.prototype.addRow = function (data, pos, index) { //update a row if it exitsts otherwise create it Tabulator.prototype.updateOrAddRow = function (index, data) { - var _this31 = this; + var _this24 = this; return new Promise(function (resolve, reject) { - var row = _this31.rowManager.findRow(index); + var row = _this24.rowManager.findRow(index); if (typeof data === "string") { data = JSON.parse(data); @@ -8017,8 +7309,8 @@ Tabulator.prototype.updateOrAddRow = function (index, data) { if (row) { row.updateData(data).then(function () { //recalc column calculations if present - if (_this31.modExists("columnCalcs")) { - _this31.modules.columnCalcs.recalc(_this31.rowManager.activeRows); + if (_this24.modExists("columnCalcs")) { + _this24.modules.columnCalcs.recalc(_this24.rowManager.activeRows); } resolve(row.getComponent()); @@ -8026,10 +7318,10 @@ Tabulator.prototype.updateOrAddRow = function (index, data) { reject(err); }); } else { - row = _this31.rowManager.addRows(data).then(function (rows) { + row = _this24.rowManager.addRows(data).then(function (rows) { //recalc column calculations if present - if (_this31.modExists("columnCalcs")) { - _this31.modules.columnCalcs.recalc(_this31.rowManager.activeRows); + if (_this24.modExists("columnCalcs")) { + _this24.modules.columnCalcs.recalc(_this24.rowManager.activeRows); } resolve(rows[0].getComponent()); @@ -8042,10 +7334,10 @@ Tabulator.prototype.updateOrAddRow = function (index, data) { //update row data Tabulator.prototype.updateRow = function (index, data) { - var _this32 = this; + var _this25 = this; return new Promise(function (resolve, reject) { - var row = _this32.rowManager.findRow(index); + var row = _this25.rowManager.findRow(index); if (typeof data === "string") { data = JSON.parse(data); @@ -8066,13 +7358,13 @@ Tabulator.prototype.updateRow = function (index, data) { //scroll to row in DOM Tabulator.prototype.scrollToRow = function (index, position, ifVisible) { - var _this33 = this; + var _this26 = this; return new Promise(function (resolve, reject) { - var row = _this33.rowManager.findRow(index); + var row = _this26.rowManager.findRow(index); if (row) { - _this33.rowManager.scrollToRow(row, position, ifVisible).then(function () { + _this26.rowManager.scrollToRow(row, position, ifVisible).then(function () { resolve(); }).catch(function (err) { reject(err); @@ -8208,12 +7500,12 @@ Tabulator.prototype.toggleColumn = function (field) { }; Tabulator.prototype.addColumn = function (definition, before, field) { - var _this34 = this; + var _this27 = this; return new Promise(function (resolve, reject) { - var column = _this34.columnManager.findColumn(field); + var column = _this27.columnManager.findColumn(field); - _this34.columnManager.addColumn(definition, before, column).then(function (column) { + _this27.columnManager.addColumn(definition, before, column).then(function (column) { resolve(column.getComponent()); }).catch(function (err) { reject(err); @@ -8222,10 +7514,10 @@ Tabulator.prototype.addColumn = function (definition, before, field) { }; Tabulator.prototype.deleteColumn = function (field) { - var _this35 = this; + var _this28 = this; return new Promise(function (resolve, reject) { - var column = _this35.columnManager.findColumn(field); + var column = _this28.columnManager.findColumn(field); if (column) { column.delete().then(function () { @@ -8241,10 +7533,10 @@ Tabulator.prototype.deleteColumn = function (field) { }; Tabulator.prototype.updateColumnDefinition = function (field, definition) { - var _this36 = this; + var _this29 = this; return new Promise(function (resolve, reject) { - var column = _this36.columnManager.findColumn(field); + var column = _this29.columnManager.findColumn(field); if (column) { column.updateDefinition(definition).then(function (col) { @@ -8276,13 +7568,13 @@ Tabulator.prototype.moveColumn = function (from, to, after) { //scroll to column in DOM Tabulator.prototype.scrollToColumn = function (field, position, ifVisible) { - var _this37 = this; + var _this30 = this; return new Promise(function (resolve, reject) { - var column = _this37.columnManager.findColumn(field); + var column = _this30.columnManager.findColumn(field); if (column) { - _this37.columnManager.scrollToColumn(column, position, ifVisible).then(function () { + _this30.columnManager.scrollToColumn(column, position, ifVisible).then(function () { resolve(); }).catch(function (err) { reject(err); @@ -8486,7 +7778,7 @@ Tabulator.prototype.getInvalidCells = function () { }; Tabulator.prototype.clearCellValidation = function (cells) { - var _this38 = this; + var _this31 = this; if (this.modExists("validate", true)) { @@ -8499,7 +7791,7 @@ Tabulator.prototype.clearCellValidation = function (cells) { } cells.forEach(function (cell) { - _this38.modules.validate.clearValidation(cell._getSelf()); + _this31.modules.validate.clearValidation(cell._getSelf()); }); } }; @@ -8540,14 +7832,14 @@ Tabulator.prototype.setPage = function (page) { }; Tabulator.prototype.setPageToRow = function (row) { - var _this39 = this; + var _this32 = this; return new Promise(function (resolve, reject) { - if (_this39.options.pagination && _this39.modExists("page")) { - row = _this39.rowManager.findRow(row); + if (_this32.options.pagination && _this32.modExists("page")) { + row = _this32.rowManager.findRow(row); if (row) { - _this39.modules.page.setPageToRow(row).then(function () { + _this32.modules.page.setPageToRow(row).then(function () { resolve(); }).catch(function () { reject(); @@ -8624,20 +7916,6 @@ Tabulator.prototype.setGroupBy = function (groups) { } }; -Tabulator.prototype.setGroupValues = function (groupValues) { - if (this.modExists("groupRows", true)) { - this.options.groupValues = groupValues; - this.modules.groupRows.initialize(); - this.rowManager.refreshActiveData("display"); - - if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) { - this.modules.persistence.save("group"); - } - } else { - return false; - } -}; - Tabulator.prototype.setGroupStartOpen = function (values) { if (this.modExists("groupRows", true)) { this.options.groupStartOpen = values; @@ -8696,7 +7974,7 @@ Tabulator.prototype.getEditedCells = function () { }; Tabulator.prototype.clearCellEdited = function (cells) { - var _this40 = this; + var _this33 = this; if (this.modExists("edit", true)) { @@ -8709,7 +7987,7 @@ Tabulator.prototype.clearCellEdited = function (cells) { } cells.forEach(function (cell) { - _this40.modules.edit.clearEdited(cell._getSelf()); + _this33.modules.edit.clearEdited(cell._getSelf()); }); } }; @@ -8942,7 +8220,7 @@ Tabulator.prototype.helpers = { }, deepClone: function deepClone(obj) { - var clone = Object.assign(Array.isArray(obj) ? [] : {}, obj); + var clone = Array.isArray(obj) ? [] : {}; for (var i in obj) { if (obj[i] != null && _typeof(obj[i]) === "object") { @@ -8951,6 +8229,8 @@ Tabulator.prototype.helpers = { } else { clone[i] = this.deepClone(obj[i]); } + } else { + clone[i] = obj[i]; } } return clone; @@ -9060,16 +8340,10 @@ Layout.prototype.modes = { "fitData": function fitData(columns) { - if (this.table.options.virtualDomHoz) { - - this.table.vdomHoz.fitDataLayoutOverride(); - } else { - - columns.forEach(function (column) { + columns.forEach(function (column) { - column.reinitializeWidth(); - }); - } + column.reinitializeWidth(); + }); if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { @@ -9110,7 +8384,7 @@ Layout.prototype.modes = { //resize columns to fit data the contain and stretch last column to fill table "fitDataStretch": function fitDataStretch(columns) { - var _this41 = this; + var _this34 = this; var colsWidth = 0, tableWidth = this.table.rowManager.element.clientWidth, @@ -9124,7 +8398,7 @@ Layout.prototype.modes = { column.reinitializeWidth(); } - if (_this41.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible) { + if (_this34.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible) { lastCol = column; } @@ -9392,21 +8666,16 @@ var Localize = function Localize(table) { this.locale = "default"; //current locale this.lang = false; //current language this.bindings = {}; //update events to call when locale is changed - this.langList = {}; -}; - -Localize.prototype.initialize = function () { - this.langList = Tabulator.prototype.helpers.deepClone(this.langs); }; //set header placehoder Localize.prototype.setHeaderFilterPlaceholder = function (placeholder) { - this.langList.default.headerFilters.default = placeholder; + this.langs.default.headerFilters.default = placeholder; }; //set header filter placeholder by column Localize.prototype.setHeaderFilterColumnPlaceholder = function (column, placeholder) { - this.langList.default.headerFilters.columns[column] = placeholder; + this.langs.default.headerFilters.columns[column] = placeholder; if (this.lang && !this.lang.headerFilters.columns[column]) { this.lang.headerFilters.columns[column] = placeholder; @@ -9415,10 +8684,10 @@ Localize.prototype.setHeaderFilterColumnPlaceholder = function (column, placehol //setup a lang description object Localize.prototype.installLang = function (locale, lang) { - if (this.langList[locale]) { - this._setLangProp(this.langList[locale], lang); + if (this.langs[locale]) { + this._setLangProp(this.langs[locale], lang); } else { - this.langList[locale] = lang; + this.langs[locale] = lang; } }; @@ -9441,6 +8710,7 @@ Localize.prototype.setLocale = function (desiredLocale) { //fill in any matching languge values function traverseLang(trans, path) { for (var prop in trans) { + if (_typeof(trans[prop]) == "object") { if (!path[prop]) { path[prop] = {}; @@ -9461,10 +8731,10 @@ Localize.prototype.setLocale = function (desiredLocale) { if (desiredLocale) { //if locale is not set, check for matching top level locale else use default - if (!self.langList[desiredLocale]) { + if (!self.langs[desiredLocale]) { var prefix = desiredLocale.split("-")[0]; - if (self.langList[prefix]) { + if (self.langs[prefix]) { console.warn("Localization Error - Exact matching locale not found, using closest match: ", desiredLocale, prefix); desiredLocale = prefix; } else { @@ -9477,10 +8747,10 @@ Localize.prototype.setLocale = function (desiredLocale) { self.locale = desiredLocale; //load default lang template - self.lang = Tabulator.prototype.helpers.deepClone(self.langList.default || {}); + self.lang = Tabulator.prototype.helpers.deepClone(self.langs.default || {}); if (desiredLocale != "default") { - traverseLang(self.langList[desiredLocale], self.lang); + traverseLang(self.langs[desiredLocale], self.lang); } self.table.options.localized.call(self.table, self.locale, self.lang); @@ -9495,7 +8765,7 @@ Localize.prototype.getLocale = function (locale) { //get lang object for given local or current if none provided Localize.prototype.getLang = function (locale) { - return locale ? this.langList[locale] : this.lang; + return locale ? this.langs[locale] : this.lang; }; //get text for current locale diff --git a/admin/js/vendors/tabulator/js/tabulator_core.min.js b/admin/js/vendors/tabulator/js/tabulator_core.min.js new file mode 100644 index 0000000..92522ab --- /dev/null +++ b/admin/js/vendors/tabulator/js/tabulator_core.min.js @@ -0,0 +1,6 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +"use strict";var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function(t){if(null==this)throw new TypeError('"this" is null or not defined');var e=Object(this),o=e.length>>>0;if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n>>0;if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n>>0;if(0===i)return!1;for(var n=0|e,l=Math.max(n>=0?n:i-Math.abs(n),0);lo?(e=t-o,this.element.style.marginLeft=-e+"px"):this.element.style.marginLeft=0,this.scrollLeft=t,this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.scrollHorizontal()},ColumnManager.prototype.generateColumnsFromRowData=function(t){var e,o,i=[];if(t&&t.length){e=t[0];for(var n in e){var l={field:n,title:n},s=e[n];switch(void 0===s?"undefined":_typeof(s)){case"undefined":o="string";break;case"boolean":o="boolean";break;case"object":o=Array.isArray(s)?"array":"string";break;default:o=isNaN(s)||""===s?s.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?"alphanum":"string":"number"}l.sorter=o,i.push(l)}this.table.options.columns=i,this.setColumns(this.table.options.columns)}},ColumnManager.prototype.setColumns=function(t,e){for(var o=this;o.headersElement.firstChild;)o.headersElement.removeChild(o.headersElement.firstChild);o.columns=[],o.columnsByIndex=[],o.columnsByField={},o.table.modExists("frozenColumns")&&o.table.modules.frozenColumns.reset(),t.forEach(function(t,e){o._addColumn(t)}),o._reIndexColumns(),o.table.options.responsiveLayout&&o.table.modExists("responsiveLayout",!0)&&o.table.modules.responsiveLayout.initialize(),o.redraw(!0)},ColumnManager.prototype._addColumn=function(t,e,o){var i=new Column(t,this),n=i.getElement(),l=o?this.findColumnIndex(o):o;if(o&&l>-1){var s=this.columns.indexOf(o.getTopColumn()),a=o.getElement();e?(this.columns.splice(s,0,i),a.parentNode.insertBefore(n,a)):(this.columns.splice(s+1,0,i),a.parentNode.insertBefore(n,a.nextSibling))}else e?(this.columns.unshift(i),this.headersElement.insertBefore(i.getElement(),this.headersElement.firstChild)):(this.columns.push(i),this.headersElement.appendChild(i.getElement())),i.columnRendered();return i},ColumnManager.prototype.registerColumnField=function(t){t.definition.field&&(this.columnsByField[t.definition.field]=t)},ColumnManager.prototype.registerColumnPosition=function(t){this.columnsByIndex.push(t)},ColumnManager.prototype._reIndexColumns=function(){this.columnsByIndex=[],this.columns.forEach(function(t){t.reRegisterPosition()})},ColumnManager.prototype._verticalAlignHeaders=function(){var t=this,e=0;t.columns.forEach(function(t){var o;t.clearVerticalAlign(),(o=t.getHeight())>e&&(e=o)}),t.columns.forEach(function(o){o.verticalAlign(t.table.options.columnHeaderVertAlign,e)}),t.rowManager.adjustTableSize()},ColumnManager.prototype.findColumn=function(t){var e=this;if("object"!=(void 0===t?"undefined":_typeof(t)))return this.columnsByField[t]||!1;if(t instanceof Column)return t;if(t instanceof ColumnComponent)return t._getSelf()||!1;if("undefined"!=typeof HTMLElement&&t instanceof HTMLElement){return e.columns.find(function(e){return e.element===t})||!1}return!1},ColumnManager.prototype.getColumnByField=function(t){return this.columnsByField[t]},ColumnManager.prototype.getColumnsByFieldRoot=function(t){var e=this,o=[];return Object.keys(this.columnsByField).forEach(function(i){i.split(".")[0]===t&&o.push(e.columnsByField[i])}),o},ColumnManager.prototype.getColumnByIndex=function(t){return this.columnsByIndex[t]},ColumnManager.prototype.getFirstVisibileColumn=function(t){var t=this.columnsByIndex.findIndex(function(t){return t.visible});return t>-1&&this.columnsByIndex[t]},ColumnManager.prototype.getColumns=function(){return this.columns},ColumnManager.prototype.findColumnIndex=function(t){return this.columnsByIndex.findIndex(function(e){return t===e})},ColumnManager.prototype.getRealColumns=function(){return this.columnsByIndex},ColumnManager.prototype.traverse=function(t){this.columnsByIndex.forEach(function(e,o){t(e,o)})},ColumnManager.prototype.getDefinitions=function(t){var e=this,o=[];return e.columnsByIndex.forEach(function(e){(!t||t&&e.visible)&&o.push(e.getDefinition())}),o},ColumnManager.prototype.getDefinitionTree=function(){var t=this,e=[];return t.columns.forEach(function(t){e.push(t.getDefinition(!0))}),e},ColumnManager.prototype.getComponents=function(t){var e=this,o=[];return(t?e.columns:e.columnsByIndex).forEach(function(t){o.push(t.getComponent())}),o},ColumnManager.prototype.getWidth=function(){var t=0;return this.columnsByIndex.forEach(function(e){e.visible&&(t+=e.getWidth())}),t},ColumnManager.prototype.moveColumn=function(t,e,o){this.moveColumnActual(t,e,o),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),e.element.parentNode.insertBefore(t.element,e.element),o&&e.element.parentNode.insertBefore(e.element,t.element),this._verticalAlignHeaders(),this.table.rowManager.reinitialize()},ColumnManager.prototype.moveColumnActual=function(t,e,o){t.parent.isGroup?this._moveColumnInArray(t.parent.columns,t,e,o):this._moveColumnInArray(this.columns,t,e,o),this._moveColumnInArray(this.columnsByIndex,t,e,o,!0),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.options.columnMoved&&this.table.options.columnMoved.call(this.table,t.getComponent(),this.table.columnManager.getComponents()),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns")},ColumnManager.prototype._moveColumnInArray=function(t,e,o,i,n){var l,s=t.indexOf(e);s>-1&&(t.splice(s,1),l=t.indexOf(o),l>-1?i&&(l+=1):l=s,t.splice(l,0,e),n&&this.table.rowManager.rows.forEach(function(t){if(t.cells.length){var e=t.cells.splice(s,1)[0];t.cells.splice(l,0,e)}}))},ColumnManager.prototype.scrollToColumn=function(t,e,o){var i=this,n=0,l=0,s=0,a=t.getElement();return new Promise(function(r,u){if(void 0===e&&(e=i.table.options.scrollToColumnPosition),void 0===o&&(o=i.table.options.scrollToColumnIfVisible),t.visible){switch(e){case"middle":case"center":s=-i.element.clientWidth/2;break;case"right":s=a.clientWidth-i.headersElement.clientWidth}if(!o&&(l=a.offsetLeft)>0&&l+a.offsetWidtht.rowManager.element.clientHeight&&(e-=t.rowManager.element.offsetWidth-t.rowManager.element.clientWidth),this.columnsByIndex.forEach(function(i){var n,l,s;i.visible&&(n=i.definition.width||0,l=void 0===i.minWidth?t.table.options.columnMinWidth:parseInt(i.minWidth),s="string"==typeof n?n.indexOf("%")>-1?e/100*parseInt(n):parseInt(n):n,o+=s>l?s:l)}),o},ColumnManager.prototype.addColumn=function(t,e,o){var i=this;return new Promise(function(n,l){var s=i._addColumn(t,e,o);i._reIndexColumns(),i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout",!0)&&i.table.modules.responsiveLayout.initialize(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.redraw(),"fitColumns"!=i.table.modules.layout.getMode()&&s.reinitializeWidth(),i._verticalAlignHeaders(),i.table.rowManager.reinitialize(),n(s)})},ColumnManager.prototype.deregisterColumn=function(t){var e,o=t.getField();o&&delete this.columnsByField[o],e=this.columnsByIndex.indexOf(t),e>-1&&this.columnsByIndex.splice(e,1),e=this.columns.indexOf(t),e>-1&&this.columns.splice(e,1),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.redraw()},ColumnManager.prototype.redraw=function(t){t&&(Tabulator.prototype.helpers.elVisible(this.element)&&this._verticalAlignHeaders(),this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),["fitColumns","fitDataStretch"].indexOf(this.table.modules.layout.getMode())>-1?this.table.modules.layout.layout():t?this.table.modules.layout.layout():this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),t&&(this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.redraw()),this.table.footerManager.redraw()};var ColumnComponent=function(t){this._column=t,this.type="ColumnComponent"};ColumnComponent.prototype.getElement=function(){return this._column.getElement()},ColumnComponent.prototype.getDefinition=function(){return this._column.getDefinition()},ColumnComponent.prototype.getField=function(){return this._column.getField()},ColumnComponent.prototype.getCells=function(){var t=[];return this._column.cells.forEach(function(e){t.push(e.getComponent())}),t},ColumnComponent.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._column.visible},ColumnComponent.prototype.isVisible=function(){return this._column.visible},ColumnComponent.prototype.show=function(){this._column.isGroup?this._column.columns.forEach(function(t){t.show()}):this._column.show()},ColumnComponent.prototype.hide=function(){this._column.isGroup?this._column.columns.forEach(function(t){t.hide()}):this._column.hide()},ColumnComponent.prototype.toggle=function(){this._column.visible?this.hide():this.show()},ColumnComponent.prototype.delete=function(){return this._column.delete()},ColumnComponent.prototype.getSubColumns=function(){var t=[];return this._column.columns.length&&this._column.columns.forEach(function(e){t.push(e.getComponent())}),t},ColumnComponent.prototype.getParentColumn=function(){return this._column.parent instanceof Column&&this._column.parent.getComponent()},ColumnComponent.prototype._getSelf=function(){return this._column},ColumnComponent.prototype.scrollTo=function(){return this._column.table.columnManager.scrollToColumn(this._column)},ColumnComponent.prototype.getTable=function(){return this._column.table},ColumnComponent.prototype.headerFilterFocus=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterFocus(this._column)},ColumnComponent.prototype.reloadHeaderFilter=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.reloadHeaderFilter(this._column)},ColumnComponent.prototype.getHeaderFilterValue=function(){if(this._column.table.modExists("filter",!0))return this._column.table.modules.filter.getHeaderFilterValue(this._column)},ColumnComponent.prototype.setHeaderFilterValue=function(t){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterValue(this._column,t)},ColumnComponent.prototype.move=function(t,e){var o=this._column.table.columnManager.findColumn(t);o?this._column.table.columnManager.moveColumn(this._column,o,e):console.warn("Move Error - No matching column found:",o)},ColumnComponent.prototype.getNextColumn=function(){var t=this._column.nextColumn();return!!t&&t.getComponent()},ColumnComponent.prototype.getPrevColumn=function(){var t=this._column.prevColumn();return!!t&&t.getComponent()},ColumnComponent.prototype.updateDefinition=function(t){return this._column.updateDefinition(t)},ColumnComponent.prototype.getWidth=function(){return this._column.getWidth()},ColumnComponent.prototype.setWidth=function(t){return!0===t?this._column.reinitializeWidth(!0):this._column.setWidth(t)},ColumnComponent.prototype.validate=function(){return this._column.validate()};var Column=function t(e,o){var i=this;this.table=o.table,this.definition=e,this.parent=o,this.type="column",this.columns=[],this.cells=[],this.element=this.createElement(),this.contentElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.isGroup=!1,this.tooltip=!1,this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleFormatterRendered=!1,this.setField(this.definition.field),this.table.options.invalidOptionWarnings&&this.checkDefinition(),this.modules={},this.cellEvents={cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1},this.width=null,this.widthStyled="",this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this._mapDepricatedFunctionality(),e.columns?(this.isGroup=!0,e.columns.forEach(function(e,o){var n=new t(e,i);i.attachColumn(n)}),i.checkColumnVisibility()):o.registerColumnField(this),e.rowHandle&&!1!==this.table.options.movableRows&&this.table.modExists("moveRow")&&this.table.modules.moveRow.setHandle(!0),this._buildHeader(),this.bindModuleColumns()};Column.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-col"),t.setAttribute("role","columnheader"),t.setAttribute("aria-sort","none"),t},Column.prototype.createGroupElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-col-group-cols"),t},Column.prototype.checkDefinition=function(){var t=this;Object.keys(this.definition).forEach(function(e){-1===t.defaultOptionList.indexOf(e)&&console.warn("Invalid column definition option in '"+(t.field||t.definition.title)+"' column:",e)})},Column.prototype.setField=function(t){this.field=t,this.fieldStructure=t?this.table.options.nestedFieldSeparator?t.split(this.table.options.nestedFieldSeparator):[t]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData},Column.prototype.registerColumnPosition=function(t){this.parent.registerColumnPosition(t)},Column.prototype.registerColumnField=function(t){this.parent.registerColumnField(t)},Column.prototype.reRegisterPosition=function(){this.isGroup?this.columns.forEach(function(t){t.reRegisterPosition()}):this.registerColumnPosition(this)},Column.prototype._mapDepricatedFunctionality=function(){void 0!==this.definition.hideInHtml&&(this.definition.htmlOutput=!this.definition.hideInHtml,console.warn("hideInHtml column definition property is deprecated, you should now use htmlOutput")),void 0!==this.definition.align&&(this.definition.hozAlign=this.definition.align,console.warn("align column definition property is deprecated, you should now use hozAlign")),void 0!==this.definition.downloadTitle&&(this.definition.titleDownload=this.definition.downloadTitle,console.warn("downloadTitle definition property is deprecated, you should now use titleDownload"))},Column.prototype.setTooltip=function(){var t=this,e=t.definition,o=e.headerTooltip||!1===e.tooltip?e.headerTooltip:t.table.options.tooltipsHeader;o?!0===o?e.field?t.table.modules.localize.bind("columns|"+e.field,function(o){t.element.setAttribute("title",o||e.title)}):t.element.setAttribute("title",e.title):("function"==typeof o&&!1===(o=o(t.getComponent()))&&(o=""),t.element.setAttribute("title",o)):t.element.setAttribute("title","")},Column.prototype._buildHeader=function(){for(var t=this,e=t.definition;t.element.firstChild;)t.element.removeChild(t.element.firstChild);e.headerVertical&&(t.element.classList.add("tabulator-col-vertical"),"flip"===e.headerVertical&&t.element.classList.add("tabulator-col-vertical-flip")),t.contentElement=t._bindEvents(),t.contentElement=t._buildColumnHeaderContent(),t.element.appendChild(t.contentElement),t.isGroup?t._buildGroupHeader():t._buildColumnHeader(),t.setTooltip(),t.table.options.resizableColumns&&t.table.modExists("resizeColumns")&&t.table.modules.resizeColumns.initializeColumn("header",t,t.element),e.headerFilter&&t.table.modExists("filter")&&t.table.modExists("edit")&&(void 0!==e.headerFilterPlaceholder&&e.field&&t.table.modules.localize.setHeaderFilterColumnPlaceholder(e.field,e.headerFilterPlaceholder),t.table.modules.filter.initializeColumn(t)),t.table.modExists("frozenColumns")&&t.table.modules.frozenColumns.initializeColumn(t),t.table.options.movableColumns&&!t.isGroup&&t.table.modExists("moveColumn")&&t.table.modules.moveColumn.initializeColumn(t),(e.topCalc||e.bottomCalc)&&t.table.modExists("columnCalcs")&&t.table.modules.columnCalcs.initializeColumn(t),t.table.modExists("persistence")&&t.table.modules.persistence.config.columns&&t.table.modules.persistence.initializeColumn(t),t.element.addEventListener("mouseenter",function(e){t.setTooltip()})},Column.prototype._bindEvents=function(){var t,e,o,i=this,n=i.definition;"function"==typeof n.headerClick&&i.element.addEventListener("click",function(t){n.headerClick(t,i.getComponent())}),"function"==typeof n.headerDblClick&&i.element.addEventListener("dblclick",function(t){n.headerDblClick(t,i.getComponent())}),"function"==typeof n.headerContext&&i.element.addEventListener("contextmenu",function(t){n.headerContext(t,i.getComponent())}),"function"==typeof n.headerTap&&(o=!1,i.element.addEventListener("touchstart",function(t){o=!0},{passive:!0}),i.element.addEventListener("touchend",function(t){o&&n.headerTap(t,i.getComponent()),o=!1})),"function"==typeof n.headerDblTap&&(t=null,i.element.addEventListener("touchend",function(e){t?(clearTimeout(t),t=null,n.headerDblTap(e,i.getComponent())):t=setTimeout(function(){clearTimeout(t),t=null},300)})),"function"==typeof n.headerTapHold&&(e=null,i.element.addEventListener("touchstart",function(t){clearTimeout(e),e=setTimeout(function(){clearTimeout(e),e=null,o=!1,n.headerTapHold(t,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(t){clearTimeout(e),e=null})),"function"==typeof n.cellClick&&(i.cellEvents.cellClick=n.cellClick),"function"==typeof n.cellDblClick&&(i.cellEvents.cellDblClick=n.cellDblClick),"function"==typeof n.cellContext&&(i.cellEvents.cellContext=n.cellContext),"function"==typeof n.cellMouseEnter&&(i.cellEvents.cellMouseEnter=n.cellMouseEnter),"function"==typeof n.cellMouseLeave&&(i.cellEvents.cellMouseLeave=n.cellMouseLeave),"function"==typeof n.cellMouseOver&&(i.cellEvents.cellMouseOver=n.cellMouseOver),"function"==typeof n.cellMouseOut&&(i.cellEvents.cellMouseOut=n.cellMouseOut),"function"==typeof n.cellMouseMove&&(i.cellEvents.cellMouseMove=n.cellMouseMove),"function"==typeof n.cellTap&&(i.cellEvents.cellTap=n.cellTap),"function"==typeof n.cellDblTap&&(i.cellEvents.cellDblTap=n.cellDblTap),"function"==typeof n.cellTapHold&&(i.cellEvents.cellTapHold=n.cellTapHold),"function"==typeof n.cellEdited&&(i.cellEvents.cellEdited=n.cellEdited),"function"==typeof n.cellEditing&&(i.cellEvents.cellEditing=n.cellEditing),"function"==typeof n.cellEditCancelled&&(i.cellEvents.cellEditCancelled=n.cellEditCancelled)},Column.prototype._buildColumnHeader=function(){var t=this,e=t.definition,o=t.table;if(o.modExists("sort")&&o.modules.sort.initializeColumn(t,t.contentElement),(e.headerContextMenu||e.headerMenu)&&o.modExists("menu")&&o.modules.menu.initializeColumnHeader(t),o.modExists("format")&&o.modules.format.initializeColumn(t),void 0!==e.editor&&o.modExists("edit")&&o.modules.edit.initializeColumn(t),void 0!==e.validator&&o.modExists("validate")&&o.modules.validate.initializeColumn(t),o.modExists("mutator")&&o.modules.mutator.initializeColumn(t),o.modExists("accessor")&&o.modules.accessor.initializeColumn(t),_typeof(o.options.responsiveLayout)&&o.modExists("responsiveLayout")&&o.modules.responsiveLayout.initializeColumn(t),void 0!==e.visible&&(e.visible?t.show(!0):t.hide(!0)),e.cssClass){e.cssClass.split(" ").forEach(function(e){t.element.classList.add(e)})}e.field&&this.element.setAttribute("tabulator-field",e.field),t.setMinWidth(void 0===e.minWidth?t.table.options.columnMinWidth:parseInt(e.minWidth)),t.reinitializeWidth(),t.tooltip=t.definition.tooltip||!1===t.definition.tooltip?t.definition.tooltip:t.table.options.tooltips,t.hozAlign=void 0===t.definition.hozAlign?t.table.options.cellHozAlign:t.definition.hozAlign,t.vertAlign=void 0===t.definition.vertAlign?t.table.options.cellVertAlign:t.definition.vertAlign},Column.prototype._buildColumnHeaderContent=function(){var t=(this.definition,this.table,document.createElement("div"));return t.classList.add("tabulator-col-content"),this.titleElement=this._buildColumnHeaderTitle(),t.appendChild(this.titleElement),t},Column.prototype._buildColumnHeaderTitle=function(){var t=this,e=t.definition,o=t.table,i=document.createElement("div");if(i.classList.add("tabulator-col-title"),e.editableTitle){var n=document.createElement("input");n.classList.add("tabulator-title-editor"),n.addEventListener("click",function(t){t.stopPropagation(),n.focus()}),n.addEventListener("change",function(){e.title=n.value,o.options.columnTitleChanged.call(t.table,t.getComponent())}),i.appendChild(n),e.field?o.modules.localize.bind("columns|"+e.field,function(t){n.value=t||e.title||" "}):n.value=e.title||" "}else e.field?o.modules.localize.bind("columns|"+e.field,function(o){t._formatColumnHeaderTitle(i,o||e.title||" ")}):t._formatColumnHeaderTitle(i,e.title||" ");return i},Column.prototype._formatColumnHeaderTitle=function(t,e){var o,i,n,l,s,a=this;if(this.definition.titleFormatter&&this.table.modExists("format"))switch(o=this.table.modules.format.getFormatter(this.definition.titleFormatter),s=function(t){a.titleFormatterRendered=t},l={getValue:function(){return e},getElement:function(){return t}},n=this.definition.titleFormatterParams||{},n="function"==typeof n?n():n,i=o.call(this.table.modules.format,l,n,s),void 0===i?"undefined":_typeof(i)){case"object":i instanceof Node?t.appendChild(i):(t.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",i));break;case"undefined":case"null":t.innerHTML="";break;default:t.innerHTML=i}else t.innerHTML=e},Column.prototype._buildGroupHeader=function(){var t=this;if(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass){this.definition.cssClass.split(" ").forEach(function(e){t.element.classList.add(e)})}(this.definition.headerContextMenu||this.definition.headerMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeColumnHeader(this),this.element.appendChild(this.groupElement)},Column.prototype._getFlatData=function(t){return t[this.field]},Column.prototype._getNestedData=function(t){for(var e,o=t,i=this.fieldStructure,n=i.length,l=0;l-1&&this._nextVisibleColumn(t+1)},Column.prototype._nextVisibleColumn=function(t){var e=this.table.columnManager.getColumnByIndex(t);return!e||e.visible?e:this._nextVisibleColumn(t+1)},Column.prototype.prevColumn=function(){var t=this.table.columnManager.findColumnIndex(this);return t>-1&&this._prevVisibleColumn(t-1)},Column.prototype._prevVisibleColumn=function(t){var e=this.table.columnManager.getColumnByIndex(t);return!e||e.visible?e:this._prevVisibleColumn(t-1)},Column.prototype.reinitializeWidth=function(t){this.widthFixed=!1,void 0===this.definition.width||t||this.setWidth(this.definition.width),this.table.modExists("filter")&&this.table.modules.filter.hideHeaderFilterElements(),this.fitToData(),this.table.modExists("filter")&&this.table.modules.filter.showHeaderFilterElements()},Column.prototype.fitToData=function(){var t=this;this.widthFixed||(this.element.style.width="",t.cells.forEach(function(t){t.clearWidth()}));var e=this.element.offsetWidth;t.width&&this.widthFixed||(t.cells.forEach(function(t){var o=t.getWidth();o>e&&(e=o)}),e&&t.setWidthActual(e+1))},Column.prototype.updateDefinition=function(t){var e=this;return new Promise(function(o,i){var n;e.isGroup?(console.warn("Column Update Error - The updateDefintion function is only available on columns, not column groups"),i("Column Update Error - The updateDefintion function is only available on columns, not column groups")):(n=Object.assign({},e.getDefinition()),n=Object.assign(n,t),e.table.columnManager.addColumn(n,!1,e).then(function(t){n.field==e.field&&(e.field=!1),e.delete().then(function(){o(t.getComponent())}).catch(function(t){i(t)})}).catch(function(t){i(t)}))})},Column.prototype.deleteCell=function(t){var e=this.cells.indexOf(t);e>-1&&this.cells.splice(e,1)},Column.prototype.defaultOptionList=["title","field","columns","visible","align","hozAlign","vertAlign","width","minWidth","widthGrow","widthShrink","resizable","frozen","responsive","tooltip","cssClass","rowHandle","hideInHtml","print","htmlOutput","sorter","sorterParams","formatter","formatterParams","variableHeight","editable","editor","editorParams","validator","mutator","mutatorParams","mutatorData","mutatorDataParams","mutatorEdit","mutatorEditParams","mutatorClipboard","mutatorClipboardParams","accessor","accessorParams","accessorData","accessorDataParams","accessorDownload","accessorDownloadParams","accessorClipboard","accessorClipboardParams","accessorPrint","accessorPrintParams","accessorHtmlOutput","accessorHtmlOutputParams","clipboard","download","downloadTitle","topCalc","topCalcParams","topCalcFormatter","topCalcFormatterParams","bottomCalc","bottomCalcParams","bottomCalcFormatter","bottomCalcFormatterParams","cellClick","cellDblClick","cellContext","cellTap","cellDblTap","cellTapHold","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellEditing","cellEdited","cellEditCancelled","headerSort","headerSortStartingDir","headerSortTristate","headerClick","headerDblClick","headerContext","headerTap","headerDblTap","headerTapHold","headerTooltip","headerVertical","editableTitle","titleFormatter","titleFormatterParams","headerFilter","headerFilterPlaceholder","headerFilterParams","headerFilterEmptyCheck","headerFilterFunc","headerFilterFuncParams","headerFilterLiveFilter","print","headerContextMenu","headerMenu","contextMenu","formatterPrint","formatterPrintParams","formatterClipboard","formatterClipboardParams","formatterHtmlOutput","formatterHtmlOutputParams","titlePrint","titleClipboard","titleHtmlOutput","titleDownload"],Column.prototype.getComponent=function(){return this.component||(this.component=new ColumnComponent(this)),this.component};var RowManager=function(t){this.table=t,this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.heightFixer=this.createTableElement(),this.columnManager=null,this.height=0,this.firstRender=!1,this.renderMode="virtual",this.fixedHeight=!1,this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[],this.rowNumColumn=!1,this.redrawBlock=!1,this.redrawBlockRestoreConfig=!1,this.redrawBlockRederInPosition=!1};RowManager.prototype.createHolderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-tableHolder"),t.setAttribute("tabindex",0),t},RowManager.prototype.createTableElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-table"),t},RowManager.prototype.getElement=function(){return this.element},RowManager.prototype.getTableElement=function(){return this.tableElement},RowManager.prototype.getRowPosition=function(t,e){return e?this.activeRows.indexOf(t):this.rows.indexOf(t)},RowManager.prototype.setColumnManager=function(t){this.columnManager=t},RowManager.prototype.initialize=function(){var t=this;t.setRenderMode(),t.element.appendChild(t.tableElement),t.firstRender=!0,t.element.addEventListener("scroll",function(){var e=t.element.scrollLeft;t.scrollLeft!=e&&(t.columnManager.scrollHorizontal(e),t.table.options.groupBy&&t.table.modules.groupRows.scrollHeaders(e),t.table.modExists("columnCalcs")&&t.table.modules.columnCalcs.scrollHorizontal(e),t.table.options.scrollHorizontal(e)),t.scrollLeft=e}),"virtual"===this.renderMode&&t.element.addEventListener("scroll",function(){var e=t.element.scrollTop,o=t.scrollTop>e;t.scrollTop!=e?(t.scrollTop=e,t.scrollVertical(o),"scroll"==t.table.options.ajaxProgressiveLoad&&t.table.modules.ajax.nextPage(t.element.scrollHeight-t.element.clientHeight-e),t.table.options.scrollVertical(e)):t.scrollTop=e})},RowManager.prototype.findRow=function(t){var e=this;if("object"!=(void 0===t?"undefined":_typeof(t))){if(void 0===t||null===t)return!1;return e.rows.find(function(o){return o.data[e.table.options.index]==t})||!1}if(t instanceof Row)return t;if(t instanceof RowComponent)return t._getSelf()||!1;if("undefined"!=typeof HTMLElement&&t instanceof HTMLElement){return e.rows.find(function(e){return e.element===t})||!1}return!1},RowManager.prototype.getRowFromDataObject=function(t){return this.rows.find(function(e){return e.data===t})||!1},RowManager.prototype.getRowFromPosition=function(t,e){return e?this.activeRows[t]:this.rows[t]},RowManager.prototype.scrollToRow=function(t,e,o){var i,n=this,l=this.getDisplayRows().indexOf(t),s=t.getElement(),a=0;return new Promise(function(t,r){if(l>-1){if(void 0===e&&(e=n.table.options.scrollToRowPosition),void 0===o&&(o=n.table.options.scrollToRowIfVisible),"nearest"===e)switch(n.renderMode){case"classic":i=Tabulator.prototype.helpers.elOffset(s).top,e=Math.abs(n.element.scrollTop-i)>Math.abs(n.element.scrollTop+n.element.clientHeight-i)?"bottom":"top";break;case"virtual":e=Math.abs(n.vDomTop-l)>Math.abs(n.vDomBottom-l)?"bottom":"top"}if(!o&&Tabulator.prototype.helpers.elVisible(s)&&(a=Tabulator.prototype.helpers.elOffset(s).top-Tabulator.prototype.helpers.elOffset(n.element).top)>0&&a-1&&this.activeRows.splice(i,1),o>-1&&this.rows.splice(o,1),this.setActiveRows(this.activeRows),this.displayRowIterator(function(e){var o=e.indexOf(t);o>-1&&e.splice(o,1)}),e||this.reRenderInPosition(),this.regenerateRowNumbers(),this.table.options.rowDeleted.call(this.table,t.getComponent()),this.table.options.dataEdited.call(this.table,this.getData()),this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.updateGroupRows(!0):this.table.options.pagination&&this.table.modExists("page")?this.refreshActiveData(!1,!1,!0):this.table.options.pagination&&this.table.modExists("page")&&this.refreshActiveData("page")},RowManager.prototype.addRow=function(t,e,o,i){var n=this.addRowActual(t,e,o,i);return this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowAdd",n,{data:t,pos:e,index:o}),n},RowManager.prototype.addRows=function(t,e,o){var i=this,n=this,l=0,s=[];return new Promise(function(a,r){e=i.findAddRowPos(e),Array.isArray(t)||(t=[t]),l=t.length-1,(void 0===o&&e||void 0!==o&&!e)&&t.reverse(),t.forEach(function(t,i){var l=n.addRow(t,e,o,!0);s.push(l)}),i.table.options.groupBy&&i.table.modExists("groupRows")?i.table.modules.groupRows.updateGroupRows(!0):i.table.options.pagination&&i.table.modExists("page")?i.refreshActiveData(!1,!1,!0):i.reRenderInPosition(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.regenerateRowNumbers(),a(s)})},RowManager.prototype.findAddRowPos=function(t){return void 0===t&&(t=this.table.options.addRowPos),"pos"===t&&(t=!0),"bottom"===t&&(t=!1),t},RowManager.prototype.addRowActual=function(t,e,o,i){var n,l,s=t instanceof Row?t:new Row(t||{},this),a=this.findAddRowPos(e),r=-1;if(!o&&this.table.options.pagination&&"page"==this.table.options.paginationAddRow&&(l=this.getDisplayRows(),a?l.length?o=l[0]:this.activeRows.length&&(o=this.activeRows[this.activeRows.length-1],a=!1):l.length&&(o=l[l.length-1],a=!(l.length1&&(!o||o&&-1==u.indexOf(o)?a?u[0]!==s&&(o=u[0],this._moveRowInArray(s.getGroup().rows,s,o,!a)):u[u.length-1]!==s&&(o=u[u.length-1],this._moveRowInArray(s.getGroup().rows,s,o,!a)):this._moveRowInArray(s.getGroup().rows,s,o,!a))}return o&&(r=this.rows.indexOf(o)),o&&r>-1?(n=this.activeRows.indexOf(o),this.displayRowIterator(function(t){var e=t.indexOf(o);e>-1&&t.splice(a?e:e+1,0,s)}),n>-1&&this.activeRows.splice(a?n:n+1,0,s),this.rows.splice(a?r:r+1,0,s)):a?(this.displayRowIterator(function(t){t.unshift(s)}),this.activeRows.unshift(s),this.rows.unshift(s)):(this.displayRowIterator(function(t){t.push(s)}),this.activeRows.push(s),this.rows.push(s)),this.setActiveRows(this.activeRows),this.table.options.rowAdded.call(this.table,s.getComponent()),this.table.options.dataEdited.call(this.table,this.getData()),i||this.reRenderInPosition(),s},RowManager.prototype.moveRow=function(t,e,o){this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowMove",t,{posFrom:this.getRowPosition(t),posTo:this.getRowPosition(e),to:e,after:o}),this.moveRowActual(t,e,o),this.regenerateRowNumbers(),this.table.options.rowMoved.call(this.table,t.getComponent())},RowManager.prototype.moveRowActual=function(t,e,o){var i=this;if(this._moveRowInArray(this.rows,t,e,o),this._moveRowInArray(this.activeRows,t,e,o),this.displayRowIterator(function(n){i._moveRowInArray(n,t,e,o)}),this.table.options.groupBy&&this.table.modExists("groupRows")){!o&&e instanceof Group&&(e=this.table.rowManager.prevDisplayRow(t)||e);var n=e.getGroup(),l=t.getGroup();n===l?this._moveRowInArray(n.rows,t,e,o):(l&&l.removeRow(t),n.insertRow(t,e,o))}},RowManager.prototype._moveRowInArray=function(t,e,o,i){var n,l,s,a;if(e!==o&&(n=t.indexOf(e),n>-1&&(t.splice(n,1),l=t.indexOf(o),l>-1?i?t.splice(l+1,0,e):t.splice(l,0,e):t.splice(n,0,e)),t===this.getDisplayRows())){s=nn?l:n+1;for(var r=s;r<=a;r++)t[r]&&this.styleRow(t[r],r)}},RowManager.prototype.clearData=function(){this.setData([])},RowManager.prototype.getRowIndex=function(t){return this.findRowIndex(t,this.rows)},RowManager.prototype.getDisplayRowIndex=function(t){var e=this.getDisplayRows().indexOf(t);return e>-1&&e},RowManager.prototype.nextDisplayRow=function(t,e){var o=this.getDisplayRowIndex(t),i=!1;return!1!==o&&o-1)&&o},RowManager.prototype.getData=function(t,e){var o=[];return this.getRows(t).forEach(function(t){"row"==t.type&&o.push(t.getData(e||"data"))}),o},RowManager.prototype.getComponents=function(t){var e=[];return this.getRows(t).forEach(function(t){e.push(t.getComponent())}),e},RowManager.prototype.getDataCount=function(t){return this.getRows(t).length},RowManager.prototype._genRemoteRequest=function(){var t=this,e=this.table,o=e.options,i={};if(e.modExists("page")){if(o.ajaxSorting){var n=this.table.modules.sort.getSort();n.forEach(function(t){delete t.column}),i[this.table.modules.page.paginationDataSentNames.sorters]=n}if(o.ajaxFiltering){var l=this.table.modules.filter.getFilters(!0,!0);i[this.table.modules.page.paginationDataSentNames.filters]=l}this.table.modules.ajax.setParams(i,!0)}e.modules.ajax.sendRequest().then(function(e){t._setDataActual(e,!0)}).catch(function(t){})},RowManager.prototype.filterRefresh=function(){var t=this.table,e=t.options,o=this.scrollLeft;e.ajaxFiltering?"remote"==e.pagination&&t.modExists("page")?(t.modules.page.reset(!0),t.modules.page.setPage(1).then(function(){}).catch(function(){})):e.ajaxProgressiveLoad?t.modules.ajax.loadData().then(function(){}).catch(function(){}):this._genRemoteRequest():this.refreshActiveData("filter"),this.scrollHorizontal(o)},RowManager.prototype.sorterRefresh=function(t){var e=this.table,o=this.table.options,i=this.scrollLeft;o.ajaxSorting?("remote"==o.pagination||o.progressiveLoad)&&e.modExists("page")?(e.modules.page.reset(!0),e.modules.page.setPage(1).then(function(){}).catch(function(){})):o.ajaxProgressiveLoad?e.modules.ajax.loadData().then(function(){}).catch(function(){}):this._genRemoteRequest():this.refreshActiveData(t?"filter":"sort"),this.scrollHorizontal(i)},RowManager.prototype.scrollHorizontal=function(t){this.scrollLeft=t,this.element.scrollLeft=t,this.table.options.groupBy&&this.table.modules.groupRows.scrollHeaders(t),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.scrollHorizontal(t)},RowManager.prototype.refreshActiveData=function(t,e,o){var i,n=this,l=this.table,s=["all","filter","sort","display","freeze","group","tree","page"];if(this.redrawBlock)return void((!this.redrawBlockRestoreConfig||s.indexOf(t)=0))break;l=a}else if(e-s[a].getElement().offsetTop>=0)n=a;else{if(i=!0,!(o-s[a].getElement().offsetTop>=0))break;l=a}}else n=this.vDomTop,l=this.vDomBottom;return s.slice(n,l+1)},RowManager.prototype.displayRowIterator=function(t){this.displayRows.forEach(t),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length},RowManager.prototype.getRows=function(t){var e;switch(t){case"active":e=this.activeRows;break;case"display":e=this.table.rowManager.getDisplayRows();break;case"visible":e=this.getVisibleRows(!0);break;default:e=this.rows}return e},RowManager.prototype.reRenderInPosition=function(t){if("virtual"==this.getRenderMode())if(this.redrawBlock)t?t():this.redrawBlockRederInPosition=!0;else{for(var e=this.element.scrollTop,o=!1,i=!1,n=this.scrollLeft,l=this.getDisplayRows(),s=this.vDomTop;s<=this.vDomBottom;s++)if(l[s]){var a=e-l[s].getElement().offsetTop;if(!(!1===i||Math.abs(a)this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*f),"group"!==m.type&&(c=!1),i.vDomBottom++,u++}t?(i.vDomTopPad=e?i.vDomRowHeight*this.vDomTop+o:i.scrollTop-r,i.vDomBottomPad=i.vDomBottom==i.displayRowsCount-1?0:Math.max(i.vDomScrollHeight-i.vDomTopPad-a-r,0)):(this.vDomTopPad=0,i.vDomRowHeight=Math.floor((a+r)/u),i.vDomBottomPad=i.vDomRowHeight*(i.displayRowsCount-i.vDomBottom-1),i.vDomScrollHeight=r+a+i.vDomBottomPad-i.height),n.style.paddingTop=i.vDomTopPad+"px",n.style.paddingBottom=i.vDomBottomPad+"px",e&&(this.scrollTop=i.vDomTopPad+r+o-(this.element.scrollWidth>this.element.clientWidth?this.element.offsetHeight-this.element.clientHeight:0)),this.scrollTop=Math.min(this.scrollTop,this.element.scrollHeight-this.height),this.element.scrollWidth>this.element.offsetWidth&&e&&(this.scrollTop+=this.element.offsetHeight-this.element.clientHeight),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,l.scrollTop=this.scrollTop,n.style.minWidth=c?i.table.columnManager.getWidth()+"px":"",i.table.options.groupBy&&"fitDataFill"!=i.table.modules.layout.getMode()&&i.displayRowsCount==i.table.modules.groupRows.countGroups()&&(i.tableElement.style.minWidth=i.table.columnManager.getWidth())}else this.renderEmptyScroll();this.fixedHeight||this.adjustTableSize()},RowManager.prototype.scrollVertical=function(t){var e=this.scrollTop-this.vDomScrollPosTop,o=this.scrollTop-this.vDomScrollPosBottom,i=2*this.vDomWindowBuffer;if(-e>i||o>i){var n=this.scrollLeft;this._virtualRenderFill(Math.floor(this.element.scrollTop/this.element.scrollHeight*this.displayRowsCount)),this.scrollHorizontal(n)}else t?(e<0&&this._addTopRow(-e),o<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(-o):this.vDomScrollPosBottom=this.scrollTop)):(e>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(e):this.vDomScrollPosTop=this.scrollTop),o>=0&&this._addBottomRow(o))},RowManager.prototype._addTopRow=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomTop){var n=this.vDomTop-1,l=i[n],s=l.getHeight()||this.vDomRowHeight;t>=s&&(this.styleRow(l,n),o.insertBefore(l.getElement(),o.firstChild),l.initialized&&l.heightInitialized||(this.vDomTopNewRows.push(l),l.heightInitialized||l.clearCellHeight()),l.initialize(),this.vDomTopPad-=s,this.vDomTopPad<0&&(this.vDomTopPad=n*this.vDomRowHeight),n||(this.vDomTopPad=0),o.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=s,this.vDomTop--),t=-(this.scrollTop-this.vDomScrollPosTop),l.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*l.getHeight()),e=(i[this.vDomTop-1].getHeight()||this.vDomRowHeight)?this._addTopRow(t,e+1):this._quickNormalizeRowHeight(this.vDomTopNewRows)}},RowManager.prototype._removeTopRow=function(t){var e=this.tableElement,o=this.getDisplayRows()[this.vDomTop],i=o.getHeight()||this.vDomRowHeight;if(t>=i){var n=o.getElement();n.parentNode.removeChild(n),this.vDomTopPad+=i,e.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?i:i+this.vDomWindowBuffer,this.vDomTop++,t=this.scrollTop-this.vDomScrollPosTop,this._removeTopRow(t)}},RowManager.prototype._addBottomRow=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomBottom=s&&(this.styleRow(l,n),o.appendChild(l.getElement()),l.initialized&&l.heightInitialized||(this.vDomBottomNewRows.push(l),l.heightInitialized||l.clearCellHeight()),l.initialize(),this.vDomBottomPad-=s,(this.vDomBottomPad<0||n==this.displayRowsCount-1)&&(this.vDomBottomPad=0),o.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=s,this.vDomBottom++),t=this.scrollTop-this.vDomScrollPosBottom,l.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*l.getHeight()),e=(i[this.vDomBottom+1].getHeight()||this.vDomRowHeight)?this._addBottomRow(t,e+1):this._quickNormalizeRowHeight(this.vDomBottomNewRows)}},RowManager.prototype._removeBottomRow=function(t){var e=this.tableElement,o=this.getDisplayRows()[this.vDomBottom],i=o.getHeight()||this.vDomRowHeight;if(t>=i){var n=o.getElement();n.parentNode&&n.parentNode.removeChild(n),this.vDomBottomPad+=i,this.vDomBottomPad<0&&(this.vDomBottomPad=0),e.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=i,this.vDomBottom--,t=-(this.scrollTop-this.vDomScrollPosBottom),this._removeBottomRow(t)}},RowManager.prototype._quickNormalizeRowHeight=function(t){t.forEach(function(t){t.calcHeight()}),t.forEach(function(t){t.setCellHeight()}),t.length=0},RowManager.prototype.normalizeHeight=function(){this.activeRows.forEach(function(t){t.normalizeHeight()})},RowManager.prototype.adjustTableSize=function(){var t,e=this.element.clientHeight;if("virtual"===this.renderMode){var o=this.columnManager.getElement().offsetHeight+(this.table.footerManager&&!this.table.footerManager.external?this.table.footerManager.getElement().offsetHeight:0);this.fixedHeight?(this.element.style.minHeight="calc(100% - "+o+"px)",this.element.style.height="calc(100% - "+o+"px)",this.element.style.maxHeight="calc(100% - "+o+"px)"):(this.element.style.height="",this.element.style.height=this.table.element.clientHeight-o+"px",this.element.scrollTop=this.scrollTop),this.height=this.element.clientHeight,this.vDomWindowBuffer=this.table.options.virtualDomBuffer||this.height,this.fixedHeight||e==this.element.clientHeight||((t=this.table.modExists("resizeTable"))&&!this.table.modules.resizeTable.autoResize||!t)&&this.redraw()}},RowManager.prototype.reinitialize=function(){this.rows.forEach(function(t){t.reinitialize()})},RowManager.prototype.blockRedraw=function(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1},RowManager.prototype.restoreRedraw=function(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.stage,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),this.redrawBlockRestoreConfig=!1):this.redrawBlockRederInPosition&&this.reRenderInPosition(),this.redrawBlockRederInPosition=!1}, +RowManager.prototype.redraw=function(t){var e=this.scrollLeft;this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,t?this.renderTable():("classic"==this.renderMode?this.table.options.groupBy?this.refreshActiveData("group",!1,!1):this._simpleRender():(this.reRenderInPosition(),this.scrollHorizontal(e)),this.displayRowsCount||this.table.options.placeholder&&this.getElement().appendChild(this.table.options.placeholder))},RowManager.prototype.resetScroll=function(){if(this.element.scrollLeft=0,this.element.scrollTop=0,"ie"===this.table.browser){var t=document.createEvent("Event");t.initEvent("scroll",!1,!0),this.element.dispatchEvent(t)}else this.element.dispatchEvent(new Event("scroll"))};var RowComponent=function(t){this._row=t};RowComponent.prototype.getData=function(t){return this._row.getData(t)},RowComponent.prototype.getElement=function(){return this._row.getElement()},RowComponent.prototype.getCells=function(){var t=[];return this._row.getCells().forEach(function(e){t.push(e.getComponent())}),t},RowComponent.prototype.getCell=function(t){var e=this._row.getCell(t);return!!e&&e.getComponent()},RowComponent.prototype.getIndex=function(){return this._row.getData("data")[this._row.table.options.index]},RowComponent.prototype.getPosition=function(t){return this._row.table.rowManager.getRowPosition(this._row,t)},RowComponent.prototype.delete=function(){return this._row.delete()},RowComponent.prototype.scrollTo=function(){return this._row.table.rowManager.scrollToRow(this._row)},RowComponent.prototype.pageTo=function(){if(this._row.table.modExists("page",!0))return this._row.table.modules.page.setPageToRow(this._row)},RowComponent.prototype.move=function(t,e){this._row.moveToRow(t,e)},RowComponent.prototype.update=function(t){return this._row.updateData(t)},RowComponent.prototype.normalizeHeight=function(){this._row.normalizeHeight(!0)},RowComponent.prototype.select=function(){this._row.table.modules.selectRow.selectRows(this._row)},RowComponent.prototype.deselect=function(){this._row.table.modules.selectRow.deselectRows(this._row)},RowComponent.prototype.toggleSelect=function(){this._row.table.modules.selectRow.toggleRow(this._row)},RowComponent.prototype.isSelected=function(){return this._row.table.modules.selectRow.isRowSelected(this._row)},RowComponent.prototype._getSelf=function(){return this._row},RowComponent.prototype.validate=function(){return this._row.validate()},RowComponent.prototype.freeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.freezeRow(this._row)},RowComponent.prototype.unfreeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.unfreezeRow(this._row)},RowComponent.prototype.isFrozen=function(){if(this._row.table.modExists("frozenRows",!0)){return this._row.table.modules.frozenRows.rows.indexOf(this._row)>-1}return!1},RowComponent.prototype.treeCollapse=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.collapseRow(this._row)},RowComponent.prototype.treeExpand=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.expandRow(this._row)},RowComponent.prototype.treeToggle=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.toggleRow(this._row)},RowComponent.prototype.getTreeParent=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeParent(this._row)},RowComponent.prototype.getTreeChildren=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeChildren(this._row)},RowComponent.prototype.addTreeChild=function(t,e,o){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.addTreeChildRow(this._row,t,e,o)},RowComponent.prototype.reformat=function(){return this._row.reinitialize()},RowComponent.prototype.getGroup=function(){return this._row.getGroup().getComponent()},RowComponent.prototype.getTable=function(){return this._row.table},RowComponent.prototype.getNextRow=function(){var t=this._row.nextRow();return t?t.getComponent():t},RowComponent.prototype.getPrevRow=function(){var t=this._row.prevRow();return t?t.getComponent():t};var Row=function(t,e){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"row";this.table=e.table,this.parent=e,this.data={},this.type=o,this.element=this.createElement(),this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.component=null,this.setData(t),this.generateElement()};Row.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-row"),t.setAttribute("role","row"),t},Row.prototype.getElement=function(){return this.element},Row.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},Row.prototype.generateElement=function(){var t,e,o,i=this;!1!==i.table.options.selectable&&i.table.modExists("selectRow")&&i.table.modules.selectRow.initializeRow(this),!1!==i.table.options.movableRows&&i.table.modExists("moveRow")&&i.table.modules.moveRow.initializeRow(this),!1!==i.table.options.dataTree&&i.table.modExists("dataTree")&&i.table.modules.dataTree.initializeRow(this),"collapse"===i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout")&&i.table.modules.responsiveLayout.initializeRow(this),i.table.options.rowContextMenu&&this.table.modExists("menu")&&i.table.modules.menu.initializeRow(this),i.table.options.rowClick&&i.element.addEventListener("click",function(t){i.table.options.rowClick(t,i.getComponent())}),i.table.options.rowDblClick&&i.element.addEventListener("dblclick",function(t){i.table.options.rowDblClick(t,i.getComponent())}),i.table.options.rowContext&&i.element.addEventListener("contextmenu",function(t){i.table.options.rowContext(t,i.getComponent())}),i.table.options.rowMouseEnter&&i.element.addEventListener("mouseenter",function(t){i.table.options.rowMouseEnter(t,i.getComponent())}),i.table.options.rowMouseLeave&&i.element.addEventListener("mouseleave",function(t){i.table.options.rowMouseLeave(t,i.getComponent())}),i.table.options.rowMouseOver&&i.element.addEventListener("mouseover",function(t){i.table.options.rowMouseOver(t,i.getComponent())}),i.table.options.rowMouseOut&&i.element.addEventListener("mouseout",function(t){i.table.options.rowMouseOut(t,i.getComponent())}),i.table.options.rowMouseMove&&i.element.addEventListener("mousemove",function(t){i.table.options.rowMouseMove(t,i.getComponent())}),i.table.options.rowTap&&(o=!1,i.element.addEventListener("touchstart",function(t){o=!0},{passive:!0}),i.element.addEventListener("touchend",function(t){o&&i.table.options.rowTap(t,i.getComponent()),o=!1})),i.table.options.rowDblTap&&(t=null,i.element.addEventListener("touchend",function(e){t?(clearTimeout(t),t=null,i.table.options.rowDblTap(e,i.getComponent())):t=setTimeout(function(){clearTimeout(t),t=null},300)})),i.table.options.rowTapHold&&(e=null,i.element.addEventListener("touchstart",function(t){clearTimeout(e),e=setTimeout(function(){clearTimeout(e),e=null,o=!1,i.table.options.rowTapHold(t,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(t){clearTimeout(e),e=null}))},Row.prototype.generateCells=function(){this.cells=this.table.columnManager.generateCells(this)},Row.prototype.initialize=function(t){var e=this;if(!e.initialized||t){for(e.deleteCells();e.element.firstChild;)e.element.removeChild(e.element.firstChild);this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutRow(this),this.generateCells(),e.cells.forEach(function(t){e.element.appendChild(t.getElement()),t.cellRendered()}),t&&e.normalizeHeight(),e.table.options.dataTree&&e.table.modExists("dataTree")&&e.table.modules.dataTree.layoutRow(this),"collapse"===e.table.options.responsiveLayout&&e.table.modExists("responsiveLayout")&&e.table.modules.responsiveLayout.layoutRow(this),e.table.options.rowFormatter&&e.table.options.rowFormatter(e.getComponent()),e.table.options.resizableRows&&e.table.modExists("resizeRows")&&e.table.modules.resizeRows.initializeRow(e),e.initialized=!0}},Row.prototype.reinitializeHeight=function(){this.heightInitialized=!1,null!==this.element.offsetParent&&this.normalizeHeight(!0)},Row.prototype.reinitialize=function(){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),null!==this.element.offsetParent&&this.initialize(!0)},Row.prototype.calcHeight=function(t){var e=0,o=this.table.options.resizableRows?this.element.clientHeight:0;this.cells.forEach(function(t){var o=t.getHeight();o>e&&(e=o)}),this.height=t?Math.max(e,o):this.manualHeight?this.height:Math.max(e,o),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight},Row.prototype.setCellHeight=function(){this.cells.forEach(function(t){t.setHeight()}),this.heightInitialized=!0},Row.prototype.clearCellHeight=function(){this.cells.forEach(function(t){t.clearHeight()})},Row.prototype.normalizeHeight=function(t){t&&this.clearCellHeight(),this.calcHeight(t),this.setCellHeight()},Row.prototype.setHeight=function(t,e){(this.height!=t||e)&&(this.manualHeight=!0,this.height=t,this.heightStyled=t?t+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight)},Row.prototype.getHeight=function(){return this.outerHeight},Row.prototype.getWidth=function(){return this.element.offsetWidth},Row.prototype.deleteCell=function(t){var e=this.cells.indexOf(t);e>-1&&this.cells.splice(e,1)},Row.prototype.setData=function(t){this.table.modExists("mutator")&&(t=this.table.modules.mutator.transformRow(t,"data")),this.data=t,this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchRow(this)},Row.prototype.updateData=function(t){var e,o=this,i=Tabulator.prototype.helpers.elVisible(this.element),n={};return new Promise(function(l,s){"string"==typeof t&&(t=JSON.parse(t)),o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.block(),o.table.modExists("mutator")?(n=Object.assign(n,o.data),n=Object.assign(n,t),e=o.table.modules.mutator.transformRow(n,"data",t)):e=t;for(var a in e)o.data[a]=e[a];o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.unblock();for(var a in t){o.table.columnManager.getColumnsByFieldRoot(a).forEach(function(t){var n=o.getCell(t.getField());if(n){var l=t.getFieldValue(e);n.getValue()!=l&&(n.setValueProcessData(l),i&&n.cellRendered())}})}i?(o.normalizeHeight(!0),o.table.options.rowFormatter&&o.table.options.rowFormatter(o.getComponent())):(o.initialized=!1,o.height=0,o.heightStyled=""),!1!==o.table.options.dataTree&&o.table.modExists("dataTree")&&o.table.modules.dataTree.redrawNeeded(t)&&(o.table.modules.dataTree.initializeRow(o),o.table.modules.dataTree.layoutRow(o),o.table.rowManager.refreshActiveData("tree",!1,!0)),o.table.options.rowUpdated.call(o.table,o.getComponent()),l()})},Row.prototype.getData=function(t){var e=this;return t?e.table.modExists("accessor")?e.table.modules.accessor.transformRow(e.data,t):void 0:this.data},Row.prototype.getCell=function(t){return t=this.table.columnManager.findColumn(t),this.cells.find(function(e){return e.column===t})},Row.prototype.getCellIndex=function(t){return this.cells.findIndex(function(e){return e===t})},Row.prototype.findNextEditableCell=function(t){var e=!1;if(t0)for(var o=t-1;o>=0;o--){var i=this.cells[o],n=!0;if(i.column.modules.edit&&Tabulator.prototype.helpers.elVisible(i.getElement())&&("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n)){e=i;break}}return e},Row.prototype.getCells=function(){return this.cells},Row.prototype.nextRow=function(){return this.table.rowManager.nextDisplayRow(this,!0)||!1},Row.prototype.prevRow=function(){return this.table.rowManager.prevDisplayRow(this,!0)||!1},Row.prototype.moveToRow=function(t,e){var o=this.table.rowManager.findRow(t);o?(this.table.rowManager.moveRowActual(this,o,!e),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",t)},Row.prototype.validate=function(){var t=[];return this.cells.forEach(function(e){e.validate()||t.push(e.getComponent())}),!t.length||t},Row.prototype.delete=function(){var t=this;return new Promise(function(e,o){var i,n;t.table.options.history&&t.table.modExists("history")&&(t.table.options.groupBy&&t.table.modExists("groupRows")?(n=t.getGroup().rows,(i=n.indexOf(t))&&(i=n[i-1])):(i=t.table.rowManager.getRowIndex(t))&&(i=t.table.rowManager.rows[i-1]),t.table.modules.history.action("rowDelete",t,{data:t.getData(),pos:!i,index:i})),t.deleteActual(),e()})},Row.prototype.deleteActual=function(t){this.table.rowManager.getRowIndex(this);this.table.modExists("selectRow")&&this.table.modules.selectRow._deselectRow(this,!0),this.table.modExists("edit")&&this.table.modules.edit.currentCell.row===this&&this.table.modules.edit.cancelEdit(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0),this.modules.group&&this.modules.group.removeRow(this),this.table.rowManager.deleteRow(this,t),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.rowDelete(this),this.table.modExists("columnCalcs")&&(this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.columnCalcs.recalcRowGroup(this):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows))},Row.prototype.deleteCells=function(){for(var t=this.cells.length,e=0;e-1?(this.browser="ie",this.browserSlow=!0):t.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):t.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4))},Tabulator.prototype.blockRedraw=function(){return this.rowManager.blockRedraw()},Tabulator.prototype.restoreRedraw=function(){return this.rowManager.restoreRedraw()},Tabulator.prototype.setDataFromLocalFile=function(t){var e=this;return new Promise(function(o,i){var n=document.createElement("input");n.type="file",n.accept=t||".json,application/json",n.addEventListener("change",function(t){var l,s=n.files[0],a=new FileReader;a.readAsText(s),a.onload=function(t){try{l=JSON.parse(a.result)}catch(t){return console.warn("File Load Error - File contents is invalid JSON",t),void i(t)}e._setData(l).then(function(t){o(t)}).catch(function(t){o(t)})},a.onerror=function(t){console.warn("File Load Error - Unable to read file"),i()}}),n.click()})},Tabulator.prototype.setData=function(t,e,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(t,e,o,!1,!0)},Tabulator.prototype._setData=function(t,e,o,i,n){var l=this;return"string"!=typeof t?t?l.rowManager.setData(t,i,n):l.modExists("ajax")&&(l.modules.ajax.getUrl||l.options.ajaxURLGenerator)?"remote"==l.options.pagination&&l.modExists("page",!0)?(l.modules.page.reset(!0,!0),l.modules.page.setPage(1)):l.modules.ajax.loadData(i,n):l.rowManager.setData([],i,n):0==t.indexOf("{")||0==t.indexOf("[")?l.rowManager.setData(JSON.parse(t),i,n):l.modExists("ajax",!0)?(e&&l.modules.ajax.setParams(e),o&&l.modules.ajax.setConfig(o),l.modules.ajax.setUrl(t),"remote"==l.options.pagination&&l.modExists("page",!0)?(l.modules.page.reset(!0,!0),l.modules.page.setPage(1)):l.modules.ajax.loadData(i,n)):void 0},Tabulator.prototype.clearData=function(){this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this.rowManager.clearData()},Tabulator.prototype.getData=function(t){return!0===t&&(console.warn("passing a boolean to the getData function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getData(t)},Tabulator.prototype.getDataCount=function(t){return!0===t&&(console.warn("passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getDataCount(t)},Tabulator.prototype.searchRows=function(t,e,o){if(this.modExists("filter",!0))return this.modules.filter.search("rows",t,e,o)},Tabulator.prototype.searchData=function(t,e,o){if(this.modExists("filter",!0))return this.modules.filter.search("data",t,e,o)},Tabulator.prototype.getHtml=function(t,e,o){if(this.modExists("export",!0))return this.modules.export.getHtml(t,e,o)},Tabulator.prototype.print=function(t,e,o){if(this.modExists("print",!0))return this.modules.print.printFullscreen(t,e,o)},Tabulator.prototype.getAjaxUrl=function(){if(this.modExists("ajax",!0))return this.modules.ajax.getUrl()},Tabulator.prototype.replaceData=function(t,e,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(t,e,o,!0)},Tabulator.prototype.updateData=function(t){var e=this,o=this,i=0;return new Promise(function(n,l){e.modExists("ajax")&&e.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?t.forEach(function(t){var e=o.rowManager.findRow(t[o.options.index]);e&&(i++,e.updateData(t).then(function(){--i||n()}))}):(console.warn("Update Error - No data provided"),l("Update Error - No data provided"))})},Tabulator.prototype.addData=function(t,e,o){var i=this;return new Promise(function(n,l){i.modExists("ajax")&&i.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?i.rowManager.addRows(t,e,o).then(function(t){var e=[];t.forEach(function(t){e.push(t.getComponent())}),n(e)}):(console.warn("Update Error - No data provided"),l("Update Error - No data provided"))})},Tabulator.prototype.updateOrAddData=function(t){var e=this,o=this,i=[],n=0;return new Promise(function(l,s){e.modExists("ajax")&&e.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?t.forEach(function(t){var e=o.rowManager.findRow(t[o.options.index]);n++,e?e.updateData(t).then(function(){n--,i.push(e.getComponent()),n||l(i)}):o.rowManager.addRows(t).then(function(t){n--,i.push(t[0].getComponent()),n||l(i)})}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})},Tabulator.prototype.getRow=function(t){var e=this.rowManager.findRow(t);return e?e.getComponent():(console.warn("Find Error - No matching row found:",t),!1)},Tabulator.prototype.getRowFromPosition=function(t,e){var o=this.rowManager.getRowFromPosition(t,e);return o?o.getComponent():(console.warn("Find Error - No matching row found:",t),!1)},Tabulator.prototype.deleteRow=function(t){var e=this;return new Promise(function(o,i){function n(){++s==t.length&&a&&(l.rowManager.reRenderInPosition(),o())}var l=e,s=0,a=0,r=[];Array.isArray(t)||(t=[t]),t.forEach(function(t){var o=e.rowManager.findRow(t,!0);o?r.push(o):(console.warn("Delete Error - No matching row found:",t),i("Delete Error - No matching row found"),n())}),r.sort(function(t,o){return e.rowManager.rows.indexOf(t)>e.rowManager.rows.indexOf(o)?1:-1}),r.forEach(function(t){t.delete().then(function(){a++,n()}).catch(function(t){n(),i(t)})})})},Tabulator.prototype.addRow=function(t,e,o){var i=this;return new Promise(function(n,l){"string"==typeof t&&(t=JSON.parse(t)),i.rowManager.addRows(t,e,o).then(function(t){i.modExists("columnCalcs")&&i.modules.columnCalcs.recalc(i.rowManager.activeRows),n(t[0].getComponent())})})},Tabulator.prototype.updateOrAddRow=function(t,e){var o=this;return new Promise(function(i,n){var l=o.rowManager.findRow(t);"string"==typeof e&&(e=JSON.parse(e)),l?l.updateData(e).then(function(){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(l.getComponent())}).catch(function(t){n(t)}):l=o.rowManager.addRows(e).then(function(t){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(t[0].getComponent())}).catch(function(t){n(t)})})},Tabulator.prototype.updateRow=function(t,e){var o=this;return new Promise(function(i,n){var l=o.rowManager.findRow(t);"string"==typeof e&&(e=JSON.parse(e)),l?l.updateData(e).then(function(){i(l.getComponent())}).catch(function(t){n(t)}):(console.warn("Update Error - No matching row found:",t),n("Update Error - No matching row found"))})},Tabulator.prototype.scrollToRow=function(t,e,o){var i=this;return new Promise(function(n,l){var s=i.rowManager.findRow(t);s?i.rowManager.scrollToRow(s,e,o).then(function(){n()}).catch(function(t){l(t)}):(console.warn("Scroll Error - No matching row found:",t),l("Scroll Error - No matching row found"))})},Tabulator.prototype.moveRow=function(t,e,o){var i=this.rowManager.findRow(t);i?i.moveToRow(e,o):console.warn("Move Error - No matching row found:",t)},Tabulator.prototype.getRows=function(t){return!0===t&&(console.warn("passing a boolean to the getRows function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getComponents(t)},Tabulator.prototype.getRowPosition=function(t,e){var o=this.rowManager.findRow(t);return o?this.rowManager.getRowPosition(o,e):(console.warn("Position Error - No matching row found:",t),!1)},Tabulator.prototype.copyToClipboard=function(t){this.modExists("clipboard",!0)&&this.modules.clipboard.copy(t)},Tabulator.prototype.setColumns=function(t){this.columnManager.setColumns(t)},Tabulator.prototype.getColumns=function(t){return this.columnManager.getComponents(t)},Tabulator.prototype.getColumn=function(t){var e=this.columnManager.findColumn(t);return e?e.getComponent():(console.warn("Find Error - No matching column found:",t),!1)},Tabulator.prototype.getColumnDefinitions=function(){return this.columnManager.getDefinitionTree()},Tabulator.prototype.getColumnLayout=function(){if(this.modExists("persistence",!0))return this.modules.persistence.parseColumns(this.columnManager.getColumns())},Tabulator.prototype.setColumnLayout=function(t){return!!this.modExists("persistence",!0)&&(this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns,t)),!0)},Tabulator.prototype.showColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Show Error - No matching column found:",t),!1;e.show(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},Tabulator.prototype.hideColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Hide Error - No matching column found:",t),!1;e.hide(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},Tabulator.prototype.toggleColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Visibility Toggle Error - No matching column found:",t),!1;e.visible?e.hide():e.show()},Tabulator.prototype.addColumn=function(t,e,o){var i=this;return new Promise(function(n,l){var s=i.columnManager.findColumn(o);i.columnManager.addColumn(t,e,s).then(function(t){n(t.getComponent())}).catch(function(t){l(t)})})},Tabulator.prototype.deleteColumn=function(t){var e=this;return new Promise(function(o,i){var n=e.columnManager.findColumn(t);n?n.delete().then(function(){o()}).catch(function(t){i(t)}):(console.warn("Column Delete Error - No matching column found:",t),i())})},Tabulator.prototype.updateColumnDefinition=function(t,e){var o=this;return new Promise(function(i,n){var l=o.columnManager.findColumn(t);l?l.updateDefinition(e).then(function(t){i(t)}).catch(function(t){n(t)}):(console.warn("Column Update Error - No matching column found:",t),n())})},Tabulator.prototype.moveColumn=function(t,e,o){var i=this.columnManager.findColumn(t),n=this.columnManager.findColumn(e);i?n?this.columnManager.moveColumn(i,n,o):console.warn("Move Error - No matching column found:",n):console.warn("Move Error - No matching column found:",t)},Tabulator.prototype.scrollToColumn=function(t,e,o){var i=this;return new Promise(function(n,l){var s=i.columnManager.findColumn(t);s?i.columnManager.scrollToColumn(s,e,o).then(function(){n()}).catch(function(t){l(t)}):(console.warn("Scroll Error - No matching column found:",t),l("Scroll Error - No matching column found"))})},Tabulator.prototype.setLocale=function(t){this.modules.localize.setLocale(t)},Tabulator.prototype.getLocale=function(){return this.modules.localize.getLocale()},Tabulator.prototype.getLang=function(t){return this.modules.localize.getLang(t)},Tabulator.prototype.redraw=function(t){this.columnManager.redraw(t),this.rowManager.redraw(t)},Tabulator.prototype.setHeight=function(t){"classic"!==this.rowManager.renderMode?(this.options.height=isNaN(t)?t:t+"px",this.element.style.height=this.options.height,this.rowManager.setRenderMode(),this.rowManager.redraw()):console.warn("setHeight function is not available in classic render mode")},Tabulator.prototype.setSort=function(t,e){this.modExists("sort",!0)&&(this.modules.sort.setSort(t,e),this.rowManager.sorterRefresh())},Tabulator.prototype.getSorters=function(){if(this.modExists("sort",!0))return this.modules.sort.getSort()},Tabulator.prototype.clearSort=function(){this.modExists("sort",!0)&&(this.modules.sort.clear(),this.rowManager.sorterRefresh())},Tabulator.prototype.setFilter=function(t,e,o,i){this.modExists("filter",!0)&&(this.modules.filter.setFilter(t,e,o,i),this.rowManager.filterRefresh())},Tabulator.prototype.addFilter=function(t,e,o,i){this.modExists("filter",!0)&&(this.modules.filter.addFilter(t,e,o,i),this.rowManager.filterRefresh())},Tabulator.prototype.getFilters=function(t){if(this.modExists("filter",!0))return this.modules.filter.getFilters(t)},Tabulator.prototype.setHeaderFilterFocus=function(t){if(this.modExists("filter",!0)){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Filter Focus Error - No matching column found:",t),!1;this.modules.filter.setHeaderFilterFocus(e)}},Tabulator.prototype.getHeaderFilterValue=function(t){if(this.modExists("filter",!0)){var e=this.columnManager.findColumn(t);if(e)return this.modules.filter.getHeaderFilterValue(e);console.warn("Column Filter Error - No matching column found:",t)}},Tabulator.prototype.setHeaderFilterValue=function(t,e){if(this.modExists("filter",!0)){var o=this.columnManager.findColumn(t);if(!o)return console.warn("Column Filter Error - No matching column found:",t),!1;this.modules.filter.setHeaderFilterValue(o,e)}},Tabulator.prototype.getHeaderFilters=function(){if(this.modExists("filter",!0))return this.modules.filter.getHeaderFilters()},Tabulator.prototype.removeFilter=function(t,e,o){this.modExists("filter",!0)&&(this.modules.filter.removeFilter(t,e,o),this.rowManager.filterRefresh())},Tabulator.prototype.clearFilter=function(t){this.modExists("filter",!0)&&(this.modules.filter.clearFilter(t),this.rowManager.filterRefresh())},Tabulator.prototype.clearHeaderFilter=function(){this.modExists("filter",!0)&&(this.modules.filter.clearHeaderFilter(),this.rowManager.filterRefresh())},Tabulator.prototype.selectRow=function(t){this.modExists("selectRow",!0)&&(!0===t&&(console.warn("passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'"),t="active"),this.modules.selectRow.selectRows(t))},Tabulator.prototype.deselectRow=function(t){this.modExists("selectRow",!0)&&this.modules.selectRow.deselectRows(t)},Tabulator.prototype.toggleSelectRow=function(t){this.modExists("selectRow",!0)&&this.modules.selectRow.toggleRow(t)},Tabulator.prototype.getSelectedRows=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedRows()},Tabulator.prototype.getSelectedData=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedData()},Tabulator.prototype.getInvalidCells=function(){if(this.modExists("validate",!0))return this.modules.validate.getInvalidCells()},Tabulator.prototype.clearCellValidation=function(t){var e=this;this.modExists("validate",!0)&&(t||(t=this.modules.validate.getInvalidCells()),Array.isArray(t)||(t=[t]),t.forEach(function(t){e.modules.validate.clearValidation(t._getSelf())}))},Tabulator.prototype.validate=function(t){var e=[];return this.rowManager.rows.forEach(function(t){var o=t.validate();!0!==o&&(e=e.concat(o))}),!e.length||e},Tabulator.prototype.setMaxPage=function(t){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setMaxPage(t)},Tabulator.prototype.setPage=function(t){return this.options.pagination&&this.modExists("page")?this.modules.page.setPage(t):new Promise(function(t,e){e()})},Tabulator.prototype.setPageToRow=function(t){var e=this;return new Promise(function(o,i){e.options.pagination&&e.modExists("page")?(t=e.rowManager.findRow(t),t?e.modules.page.setPageToRow(t).then(function(){o()}).catch(function(){i()}):i()):i()})},Tabulator.prototype.setPageSize=function(t){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setPageSize(t),this.modules.page.setPage(1).then(function(){}).catch(function(){})},Tabulator.prototype.getPageSize=function(){if(this.options.pagination&&this.modExists("page",!0))return this.modules.page.getPageSize()},Tabulator.prototype.previousPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.previousPage()},Tabulator.prototype.nextPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.nextPage()},Tabulator.prototype.getPage=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPage()},Tabulator.prototype.getPageMax=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPageMax()},Tabulator.prototype.setGroupBy=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupBy=t,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")},Tabulator.prototype.setGroupStartOpen=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupStartOpen=t,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},Tabulator.prototype.setGroupHeader=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupHeader=t,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},Tabulator.prototype.getGroups=function(t){return!!this.modExists("groupRows",!0)&&this.modules.groupRows.getGroups(!0)},Tabulator.prototype.getGroupedData=function(){if(this.modExists("groupRows",!0))return this.options.groupBy?this.modules.groupRows.getGroupedData():this.getData()},Tabulator.prototype.getEditedCells=function(){if(this.modExists("edit",!0))return this.modules.edit.getEditedCells()},Tabulator.prototype.clearCellEdited=function(t){var e=this;this.modExists("edit",!0)&&(t||(t=this.modules.edit.getEditedCells()),Array.isArray(t)||(t=[t]),t.forEach(function(t){e.modules.edit.clearEdited(t._getSelf())}))},Tabulator.prototype.getCalcResults=function(){return!!this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.getResults()},Tabulator.prototype.recalc=function(){this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.recalcAll(this.rowManager.activeRows)},Tabulator.prototype.navigatePrev=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&t.nav().prev()},Tabulator.prototype.navigateNext=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&t.nav().next()},Tabulator.prototype.navigateLeft=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().left())},Tabulator.prototype.navigateRight=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().right())},Tabulator.prototype.navigateUp=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().up())},Tabulator.prototype.navigateDown=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().down())},Tabulator.prototype.undo=function(){ +return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.undo()},Tabulator.prototype.redo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.redo()},Tabulator.prototype.getHistoryUndoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryUndoSize()},Tabulator.prototype.getHistoryRedoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryRedoSize()},Tabulator.prototype.download=function(t,e,o,i){this.modExists("download",!0)&&this.modules.download.download(t,e,o,i)},Tabulator.prototype.downloadToTab=function(t,e,o,i){this.modExists("download",!0)&&this.modules.download.download(t,e,o,i,!0)},Tabulator.prototype.tableComms=function(t,e,o,i){this.modules.comms.receive(t,e,o,i)},Tabulator.prototype.moduleBindings={},Tabulator.prototype.extendModule=function(t,e,o){if(Tabulator.prototype.moduleBindings[t]){var i=Tabulator.prototype.moduleBindings[t].prototype[e];if(i)if("object"==(void 0===o?"undefined":_typeof(o)))for(var n in o)i[n]=o[n];else console.warn("Module Error - Invalid value type, it must be an object");else console.warn("Module Error - property does not exist:",e)}else console.warn("Module Error - module does not exist:",t)},Tabulator.prototype.registerModule=function(t,e){Tabulator.prototype.moduleBindings[t]=e},Tabulator.prototype.bindModules=function(){this.modules={};for(var t in Tabulator.prototype.moduleBindings)this.modules[t]=new Tabulator.prototype.moduleBindings[t](this)},Tabulator.prototype.modExists=function(t,e){return!!this.modules[t]||(e&&console.error("Tabulator Module Not Installed: "+t),!1)},Tabulator.prototype.helpers={elVisible:function(t){return!(t.offsetWidth<=0&&t.offsetHeight<=0)},elOffset:function(t){var e=t.getBoundingClientRect();return{top:e.top+window.pageYOffset-document.documentElement.clientTop,left:e.left+window.pageXOffset-document.documentElement.clientLeft}},deepClone:function(t){var e=Array.isArray(t)?[]:{};for(var o in t)null!=t[o]&&"object"===_typeof(t[o])?t[o]instanceof Date?e[o]=new Date(t[o]):e[o]=this.deepClone(t[o]):e[o]=t[o];return e}},Tabulator.prototype.comms={tables:[],register:function(t){Tabulator.prototype.comms.tables.push(t)},deregister:function(t){var e=Tabulator.prototype.comms.tables.indexOf(t);e>-1&&Tabulator.prototype.comms.tables.splice(e,1)},lookupTable:function(t,e){var o,i,n=[];if("string"==typeof t){if(o=document.querySelectorAll(t),o.length)for(var l=0;l0?l.setWidth(n):l.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitColumns:function(t){function e(t){return"string"==typeof t?t.indexOf("%")>-1?n/100*parseInt(t):parseInt(t):t}function o(t,i,n,l){function s(t){return n*(t.column.definition.widthGrow||1)}function a(t){return e(t.width)-n*(t.column.definition.widthShrink||0)}var r=[],u=0,c=0,h=0,d=0,p=0,m=[];return t.forEach(function(t,e){var o=l?a(t):s(t);t.column.minWidth>=o?r.push(t):(m.push(t),p+=l?t.column.definition.widthShrink||1:t.column.definition.widthGrow||1)}),r.length?(r.forEach(function(t){u+=l?t.width-t.column.minWidth:t.column.minWidth,t.width=t.column.minWidth}),c=i-u,h=p?Math.floor(c/p):c,d=c-h*p,d+=o(m,c,h,l)):(d=p?i-Math.floor(i/p)*p:i,m.forEach(function(t){t.width=l?a(t):s(t)})),d}var i=this,n=i.table.element.clientWidth,l=0,s=0,a=0,r=0,u=[],c=[],h=0,d=0,p=0;this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(n-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),t.forEach(function(t){var o,i,n;t.visible&&(o=t.definition.width,i=parseInt(t.minWidth),o?(n=e(o),l+=n>i?n:i,t.definition.widthShrink&&(c.push({column:t,width:n>i?n:i}),h+=t.definition.widthShrink)):(u.push({column:t,width:0}),a+=t.definition.widthGrow||1))}),s=n-l,r=Math.floor(s/a);var p=o(u,s,r,!1);u.length&&p>0&&(u[u.length-1].width+=+p),u.forEach(function(t){s-=t.width}),d=Math.abs(p)+s,d>0&&h&&(p=o(c,d,Math.floor(d/h),!0)),c.length&&(c[c.length-1].width-=p),u.forEach(function(t){t.column.setWidth(t.width)}),c.forEach(function(t){t.column.setWidth(t.width)})}},Tabulator.prototype.registerModule("layout",Layout);var Localize=function(t){this.table=t,this.locale="default",this.lang=!1,this.bindings={}};Localize.prototype.setHeaderFilterPlaceholder=function(t){this.langs.default.headerFilters.default=t},Localize.prototype.setHeaderFilterColumnPlaceholder=function(t,e){this.langs.default.headerFilters.columns[t]=e,this.lang&&!this.lang.headerFilters.columns[t]&&(this.lang.headerFilters.columns[t]=e)},Localize.prototype.installLang=function(t,e){this.langs[t]?this._setLangProp(this.langs[t],e):this.langs[t]=e},Localize.prototype._setLangProp=function(t,e){for(var o in e)t[o]&&"object"==_typeof(t[o])?this._setLangProp(t[o],e[o]):t[o]=e[o]},Localize.prototype.setLocale=function(t){function e(t,o){for(var i in t)"object"==_typeof(t[i])?(o[i]||(o[i]={}),e(t[i],o[i])):o[i]=t[i]}var o=this;if(t=t||"default",!0===t&&navigator.language&&(t=navigator.language.toLowerCase()),t&&!o.langs[t]){var i=t.split("-")[0];o.langs[i]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",t,i),t=i):(console.warn("Localization Error - Matching locale not found, using default: ",t),t="default")}o.locale=t,o.lang=Tabulator.prototype.helpers.deepClone(o.langs.default||{}),"default"!=t&&e(o.langs[t],o.lang),o.table.options.localized.call(o.table,o.locale,o.lang),o._executeBindings()},Localize.prototype.getLocale=function(t){return self.locale},Localize.prototype.getLang=function(t){return t?this.langs[t]:this.lang},Localize.prototype.getText=function(t,e){var t=e?t+"|"+e:t,o=t.split("|");return this._getLangElement(o,this.locale)||""},Localize.prototype._getLangElement=function(t,e){var o=this,i=o.lang;return t.forEach(function(t){var e;i&&(e=i[t],i=void 0!==e&&e)}),i},Localize.prototype.bind=function(t,e){this.bindings[t]||(this.bindings[t]=[]),this.bindings[t].push(e),e(this.getText(t),this.lang)},Localize.prototype._executeBindings=function(){var t=this;for(var e in t.bindings)!function(e){t.bindings[e].forEach(function(o){o(t.getText(e),t.lang)})}(e)},Localize.prototype.langs={default:{groups:{item:"item",items:"items"},columns:{},ajax:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All"},headerFilters:{default:"filter column...",columns:{}}}},Tabulator.prototype.registerModule("localize",Localize);var Comms=function(t){this.table=t};Comms.prototype.getConnections=function(t){var e,o=this,i=[];return e=Tabulator.prototype.comms.lookupTable(t),e.forEach(function(t){o.table!==t&&i.push(t)}),i},Comms.prototype.send=function(t,e,o,i){var n=this,l=this.getConnections(t);l.forEach(function(t){t.tableComms(n.table.element,e,o,i)}),!l.length&&t&&console.warn("Table Connection Error - No tables matching selector found",t)},Comms.prototype.receive=function(t,e,o,i){if(this.table.modExists(e))return this.table.modules[e].commsReceived(t,o,i);console.warn("Inter-table Comms Error - no such module:",e)},Tabulator.prototype.registerModule("comms",Comms); \ No newline at end of file diff --git a/admin/lib/composer.json b/admin/lib/composer.json new file mode 100644 index 0000000..c4a3f1d --- /dev/null +++ b/admin/lib/composer.json @@ -0,0 +1,6 @@ +{ + "require":{ + "mustache/mustache":"2.13.0", + "phpmailer/phpmailer":"~6.1" + } +} \ No newline at end of file diff --git a/admin/lib/composer.lock b/admin/lib/composer.lock new file mode 100644 index 0000000..653ae87 --- /dev/null +++ b/admin/lib/composer.lock @@ -0,0 +1,134 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "4df00bed21ac245a6cfa5bc94e8dcb54", + "packages": [ + { + "name": "mustache/mustache", + "version": "v2.13.0", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/mustache.php.git", + "reference": "e95c5a008c23d3151d59ea72484d4f72049ab7f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/mustache.php/zipball/e95c5a008c23d3151d59ea72484d4f72049ab7f4", + "reference": "e95c5a008c23d3151d59ea72484d4f72049ab7f4", + "shasum": "" + }, + "require": { + "php": ">=5.2.4" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~1.11", + "phpunit/phpunit": "~3.7|~4.0|~5.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Mustache": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "A Mustache implementation in PHP.", + "homepage": "https://github.com/bobthecow/mustache.php", + "keywords": [ + "mustache", + "templating" + ], + "time": "2019-11-23T21:40:31+00:00" + }, + { + "name": "phpmailer/phpmailer", + "version": "v6.1.8", + "source": { + "type": "git", + "url": "https://github.com/PHPMailer/PHPMailer.git", + "reference": "917ab212fa00dc6eacbb26e8bc387ebe40993bc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/917ab212fa00dc6eacbb26e8bc387ebe40993bc1", + "reference": "917ab212fa00dc6eacbb26e8bc387ebe40993bc1", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "php": ">=5.5.0" + }, + "require-dev": { + "doctrine/annotations": "^1.2", + "friendsofphp/php-cs-fixer": "^2.2", + "phpunit/phpunit": "^4.8 || ^5.7" + }, + "suggest": { + "ext-mbstring": "Needed to send email in multibyte encoding charset", + "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", + "league/oauth2-google": "Needed for Google XOAUTH2 authentication", + "psr/log": "For optional PSR-3 debug logging", + "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication", + "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPMailer\\PHPMailer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-only" + ], + "authors": [ + { + "name": "Marcus Bointon", + "email": "phpmailer@synchromedia.co.uk" + }, + { + "name": "Jim Jagielski", + "email": "jimjag@gmail.com" + }, + { + "name": "Andy Prevost", + "email": "codeworxtech@users.sourceforge.net" + }, + { + "name": "Brent R. Matzelle" + } + ], + "description": "PHPMailer is a full-featured email creation and transfer class for PHP", + "funding": [ + { + "url": "https://github.com/synchro", + "type": "github" + } + ], + "time": "2020-10-09T14:55:58+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "1.1.0" +} diff --git a/admin/lib/config.php b/admin/lib/config.php new file mode 100644 index 0000000..6149f7a --- /dev/null +++ b/admin/lib/config.php @@ -0,0 +1,35 @@ + "/dks_lu_admin/", + "cookie" => "dks_lu", + "templatepath" => "tmpl/", + "db"=> array( + "type" => "pgsql", + "host" => "sql12.your-server.de", + "dbname" => "dkslu2_db", + "user" => "dkslu2_user", + "password" => "wehH6EvQmFHKpyWf", + ), + "appversion" => "1", + "minify" => "", + "sitename" => "dks.lu", + "sitetemplatepath" => $_SERVER["DOCUMENT_ROOT"].'/dks_lu' + ); + + // function getparams(){ + // $get_arr = array(); + // if ($_SERVER['QUERY_STRING'] != ""){ + // $xar = explode("&", $_SERVER['QUERY_STRING']); + // #print_r($xar); + // if (count($xar) > 0){ + // foreach ($xar as $tmp_arr_param) { + // $split_param = explode("=", $tmp_arr_param); + // if ($split_param[1]){ + // $get_arr[$split_param[0]] = urldecode($split_param[1]); + // } + // } + // } + // } + // return $get_arr; + // } +?> \ No newline at end of file diff --git a/admin/lib/database.php b/admin/lib/database.php new file mode 100644 index 0000000..5373a0b --- /dev/null +++ b/admin/lib/database.php @@ -0,0 +1,83 @@ +dbconf = $pdbconf; + try { + //'mysql:host=;dbname=', $user, password + //'sqlite:/opt/databases/mydb.sq3 + //pgsql:host=localhost;port=5432;dbname=testdb;user=bruce;password=mypass + $this->conn = new PDO($this->dbconf["type"].':host='.$this->dbconf["host"].';port=5432;dbname='.$this->dbconf["dbname"],$this->dbconf["user"],$this->dbconf["password"]); + } catch(PDOException $e){ + error_log("Connection error:".$e->getMessage()); + // fwrite(STDERR, "Connectio Error: ".$e->getMessage()."\n"); + } + } + + public function securetext($text){ + return str_replace("'","''",$text); + } + public function value($text){ + if (($text == "") || ($text == null)){ + return 'null'; + } + return "'".$text."'"; + } + + public function query($sql){ + try { + if ($this->debug ==1 ){ + error_log("QUERY: ".$sql); + } + // fwrite(STDERR, "QUERY: ".$sql."\n"); + if ($this->conn){ + $sth = $this->conn->prepare($sql); + $sth->execute(); + $result = $sth->fetch(PDO::FETCH_ASSOC); + + return $result; + } + } catch(PDOException $e){ + error_log("QUERY ERROR: ".$sql." ".$e->getMessage()); + } + return null; + } + + public function queryarray($sql){ + $result = null; + try { + if ($this->conn){ + $sth = $this->link->prepare($sql); + $sth->execute(); + $result = $sth->fetchAll(PDO::FETCH_ASSOC); + return $result; + } + } catch (PDOException $e){ + error_log("QUERYARRAY ERROR: ".$sql); + } + return $result; + } + + public function exec($sql){ + try { + if ($this->conn){ + return $this->conn->exec($sql); + } + } catch (PDOException $e){ + error_log("EXEC ERROR: ".$sql); + } + return -1; + } + + public function newuuid(){ + $nid = $this->query("SELECT uuid_in(md5(random()::text || clock_timestamp()::text)::cstring) as id"); + return $nid["id"]; + } + + public function __destruct(){ + $this->conn = null; + } +} +?> \ No newline at end of file diff --git a/admin/lib/session.php b/admin/lib/session.php new file mode 100644 index 0000000..a3a4926 --- /dev/null +++ b/admin/lib/session.php @@ -0,0 +1,35 @@ +dbh = $dblink; + } + + public function getSession($sid){ + if (($sid !== null) && ($sid != "")){ + $this->session = $this->dbh->query("select u.id as id_user, u.username, u.id_usergroup as usergroup, s.id as id_session , s.sessiondata from sessions s join users u on (s.id_user=u.id) where s.id='".$sid."' and s.remote_addr='".$_SERVER["REMOTE_ADDR"]."';"); + } + return $this->session; + } + + public function checkLogin($username,$password){ + $encpwd = hash('sha256', trim($password)); + + //echo "select id,username,usergroup from public.users where username='".$username."' and password='".$encpwd."';\n"; + $auth = $this->dbh->query("select id,username,id_usergroup as usergroup from public.users where username='".$username."' and userpassword='".$encpwd."';"); + //error_log(print_r($auth)); + + if ($auth){ + $nuuid = $this->dbh->newuuid(); + $this->dbh->exec("INSERT INTO public.sessions (id,id_user,remote_addr,user_agent) VALUES ('".$nuuid."','".$auth['id']."','".$_SERVER["REMOTE_ADDR"]."','".$_SERVER["HTTP_USER_AGENT"]."');"); + return $this->getSession($nuuid); + } + return null; + } + + public function __destruct(){ + $this->conn = null; + } +} +?> \ No newline at end of file diff --git a/admin/lib/vendor/autoload.php b/admin/lib/vendor/autoload.php new file mode 100644 index 0000000..2286229 --- /dev/null +++ b/admin/lib/vendor/autoload.php @@ -0,0 +1,7 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + * @see http://www.php-fig.org/psr/psr-0/ + * @see http://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + // PSR-4 + private $prefixLengthsPsr4 = array(); + private $prefixDirsPsr4 = array(); + private $fallbackDirsPsr4 = array(); + + // PSR-0 + private $prefixesPsr0 = array(); + private $fallbackDirsPsr0 = array(); + + private $useIncludePath = false; + private $classMap = array(); + private $classMapAuthoritative = false; + private $missingClasses = array(); + private $apcuPrefix; + + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); + } + + return array(); + } + + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param array $classMap Class to filename map + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + */ + public function add($prefix, $paths, $prepend = false) + { + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + (array) $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + (array) $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = (array) $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + (array) $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + (array) $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + (array) $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + (array) $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 base directories + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + } + + /** + * Unregisters this instance as an autoloader. + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return bool|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + includeFile($file); + + return true; + } + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { + return false; + } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if (false === $file && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + + if (false === $file) { + // Remember that this class does not exist. + $this->missingClasses[$class] = true; + } + + return $file; + } + + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath . '\\'; + if (isset($this->prefixDirsPsr4[$search])) { + $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); + foreach ($this->prefixDirsPsr4[$search] as $dir) { + if (file_exists($file = $dir . $pathEnd)) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + + return false; + } +} + +/** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + */ +function includeFile($file) +{ + include $file; +} diff --git a/admin/lib/vendor/composer/LICENSE b/admin/lib/vendor/composer/LICENSE new file mode 100644 index 0000000..f27399a --- /dev/null +++ b/admin/lib/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) Nils Adermann, Jordi Boggiano + +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/admin/lib/vendor/composer/autoload_classmap.php b/admin/lib/vendor/composer/autoload_classmap.php new file mode 100644 index 0000000..7a91153 --- /dev/null +++ b/admin/lib/vendor/composer/autoload_classmap.php @@ -0,0 +1,9 @@ + array($vendorDir . '/mustache/mustache/src'), +); diff --git a/admin/lib/vendor/composer/autoload_psr4.php b/admin/lib/vendor/composer/autoload_psr4.php new file mode 100644 index 0000000..0706da6 --- /dev/null +++ b/admin/lib/vendor/composer/autoload_psr4.php @@ -0,0 +1,10 @@ + array($vendorDir . '/phpmailer/phpmailer/src'), +); diff --git a/admin/lib/vendor/composer/autoload_real.php b/admin/lib/vendor/composer/autoload_real.php new file mode 100644 index 0000000..c620f26 --- /dev/null +++ b/admin/lib/vendor/composer/autoload_real.php @@ -0,0 +1,55 @@ += 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); + if ($useStaticLoader) { + require_once __DIR__ . '/autoload_static.php'; + + call_user_func(\Composer\Autoload\ComposerStaticInit885fbe19dab1b37aa91c383b45da3786::getInitializer($loader)); + } else { + $map = require __DIR__ . '/autoload_namespaces.php'; + foreach ($map as $namespace => $path) { + $loader->set($namespace, $path); + } + + $map = require __DIR__ . '/autoload_psr4.php'; + foreach ($map as $namespace => $path) { + $loader->setPsr4($namespace, $path); + } + + $classMap = require __DIR__ . '/autoload_classmap.php'; + if ($classMap) { + $loader->addClassMap($classMap); + } + } + + $loader->register(true); + + return $loader; + } +} diff --git a/admin/lib/vendor/composer/autoload_static.php b/admin/lib/vendor/composer/autoload_static.php new file mode 100644 index 0000000..c41aefa --- /dev/null +++ b/admin/lib/vendor/composer/autoload_static.php @@ -0,0 +1,42 @@ + + array ( + 'PHPMailer\\PHPMailer\\' => 20, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'PHPMailer\\PHPMailer\\' => + array ( + 0 => __DIR__ . '/..' . '/phpmailer/phpmailer/src', + ), + ); + + public static $prefixesPsr0 = array ( + 'M' => + array ( + 'Mustache' => + array ( + 0 => __DIR__ . '/..' . '/mustache/mustache/src', + ), + ), + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInit885fbe19dab1b37aa91c383b45da3786::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit885fbe19dab1b37aa91c383b45da3786::$prefixDirsPsr4; + $loader->prefixesPsr0 = ComposerStaticInit885fbe19dab1b37aa91c383b45da3786::$prefixesPsr0; + + }, null, ClassLoader::class); + } +} diff --git a/admin/lib/vendor/composer/installed.json b/admin/lib/vendor/composer/installed.json new file mode 100644 index 0000000..e2dfae8 --- /dev/null +++ b/admin/lib/vendor/composer/installed.json @@ -0,0 +1,121 @@ +[ + { + "name": "mustache/mustache", + "version": "v2.13.0", + "version_normalized": "2.13.0.0", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/mustache.php.git", + "reference": "e95c5a008c23d3151d59ea72484d4f72049ab7f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/mustache.php/zipball/e95c5a008c23d3151d59ea72484d4f72049ab7f4", + "reference": "e95c5a008c23d3151d59ea72484d4f72049ab7f4", + "shasum": "" + }, + "require": { + "php": ">=5.2.4" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~1.11", + "phpunit/phpunit": "~3.7|~4.0|~5.0" + }, + "time": "2019-11-23T21:40:31+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "Mustache": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "A Mustache implementation in PHP.", + "homepage": "https://github.com/bobthecow/mustache.php", + "keywords": [ + "mustache", + "templating" + ] + }, + { + "name": "phpmailer/phpmailer", + "version": "v6.1.8", + "version_normalized": "6.1.8.0", + "source": { + "type": "git", + "url": "https://github.com/PHPMailer/PHPMailer.git", + "reference": "917ab212fa00dc6eacbb26e8bc387ebe40993bc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/917ab212fa00dc6eacbb26e8bc387ebe40993bc1", + "reference": "917ab212fa00dc6eacbb26e8bc387ebe40993bc1", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "php": ">=5.5.0" + }, + "require-dev": { + "doctrine/annotations": "^1.2", + "friendsofphp/php-cs-fixer": "^2.2", + "phpunit/phpunit": "^4.8 || ^5.7" + }, + "suggest": { + "ext-mbstring": "Needed to send email in multibyte encoding charset", + "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", + "league/oauth2-google": "Needed for Google XOAUTH2 authentication", + "psr/log": "For optional PSR-3 debug logging", + "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication", + "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)" + }, + "time": "2020-10-09T14:55:58+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "PHPMailer\\PHPMailer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-only" + ], + "authors": [ + { + "name": "Marcus Bointon", + "email": "phpmailer@synchromedia.co.uk" + }, + { + "name": "Jim Jagielski", + "email": "jimjag@gmail.com" + }, + { + "name": "Andy Prevost", + "email": "codeworxtech@users.sourceforge.net" + }, + { + "name": "Brent R. Matzelle" + } + ], + "description": "PHPMailer is a full-featured email creation and transfer class for PHP", + "funding": [ + { + "url": "https://github.com/synchro", + "type": "github" + } + ] + } +] diff --git a/admin/lib/vendor/mustache/mustache/.gitignore b/admin/lib/vendor/mustache/mustache/.gitignore new file mode 100644 index 0000000..3861f00 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/.gitignore @@ -0,0 +1,4 @@ +.php_cs.cache +composer.lock +mustache.php +vendor diff --git a/admin/lib/vendor/mustache/mustache/.gitmodules b/admin/lib/vendor/mustache/mustache/.gitmodules new file mode 100644 index 0000000..042ea4d --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/.gitmodules @@ -0,0 +1,6 @@ +[submodule "vendor/spec"] + path = vendor/spec + url = https://github.com/mustache/spec.git +[submodule "vendor/yaml"] + path = vendor/yaml + url = https://github.com/fabpot/yaml.git diff --git a/admin/lib/vendor/mustache/mustache/.php_cs b/admin/lib/vendor/mustache/mustache/.php_cs new file mode 100644 index 0000000..d924712 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/.php_cs @@ -0,0 +1,26 @@ +level(Symfony\CS\FixerInterface::SYMFONY_LEVEL) + ->fixers(array( + '-concat_without_spaces', + '-pre_increment', + '-unalign_double_arrow', + '-unalign_equals', + 'align_double_arrow', + 'concat_with_spaces', + 'ordered_use', + 'strict', + )) + ->setUsingLinter(false); + +$finder = $config->getFinder() + ->in('bin') + ->in('src') + ->in('test'); + +return $config; diff --git a/admin/lib/vendor/mustache/mustache/.styleci.yml b/admin/lib/vendor/mustache/mustache/.styleci.yml new file mode 100644 index 0000000..1aebcc3 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/.styleci.yml @@ -0,0 +1,13 @@ +preset: symfony + +enabled: + - align_double_arrow + - concat_with_spaces + - ordered_use + - strict + +disabled: + - concat_without_spaces + - pre_increment + - unalign_double_arrow + - unalign_equals diff --git a/admin/lib/vendor/mustache/mustache/.travis.yml b/admin/lib/vendor/mustache/mustache/.travis.yml new file mode 100644 index 0000000..d88c6f0 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/.travis.yml @@ -0,0 +1,31 @@ +language: php + +sudo: false + +matrix: + include: + - php: 5.2 + dist: precise + - php: 5.3 + dist: precise + - php: 5.4 + dist: trusty + - php: 5.5 + dist: trusty + - php: 5.6 + - php: 7.0 + - php: 7.1 + - php: 7.2 + - php: 7.3 + - php: 7.4snapshot + - php: hhvm + dist: trusty + allow_failures: + - php: hhvm + - php: 7.4snapshot + +script: + - '[[ "$TRAVIS_PHP_VERSION" = 5.2* ]] && phpunit || vendor/bin/phpunit --verbose' + +install: + - '[[ "$TRAVIS_PHP_VERSION" = 5.2* ]] || composer install' diff --git a/admin/lib/vendor/mustache/mustache/CONTRIBUTING.md b/admin/lib/vendor/mustache/mustache/CONTRIBUTING.md new file mode 100644 index 0000000..c0b323d --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/CONTRIBUTING.md @@ -0,0 +1,35 @@ +# Contributions welcome! + + +### Here's a quick guide: + + 1. [Fork the repo on GitHub](https://github.com/bobthecow/mustache.php). + + 2. Update submodules: `git submodule update --init` + + 3. Run the test suite. We only take pull requests with passing tests, and it's great to know that you have a clean slate. Make sure you have PHPUnit 3.5+, then run `phpunit` from the project directory. + + 4. Add tests for your change. Only refactoring and documentation changes require no new tests. If you are adding functionality or fixing a bug, add a test! + + 5. Make the tests pass. + + 6. Push your fork to GitHub and submit a pull request against the `dev` branch. + + +### You can do some things to increase the chance that your pull request is accepted the first time: + + * Submit one pull request per fix or feature. + * To help with that, do all your work in a feature branch (e.g. `feature/my-alsome-feature`). + * Follow the conventions you see used in the project. + * Use `phpcs --standard=PSR2` to check your changes against the coding standard. + * Write tests that fail without your code, and pass with it. + * Don't bump version numbers. Those will be updated — per [semver](http://semver.org) — once your change is merged into `master`. + * Update any documentation: docblocks, README, examples, etc. + * ... Don't update the wiki until your change is merged and released, but make a note in your pull request so we don't forget. + + +### Mustache.php follows the PSR-* coding standards: + + * [PSR-0: Class and file naming conventions](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md) + * [PSR-1: Basic coding standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md) + * [PSR-2: Coding style guide](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md) diff --git a/admin/lib/vendor/mustache/mustache/LICENSE b/admin/lib/vendor/mustache/mustache/LICENSE new file mode 100644 index 0000000..e0aecc9 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2010-2015 Justin Hileman + +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/admin/lib/vendor/mustache/mustache/README.md b/admin/lib/vendor/mustache/mustache/README.md new file mode 100644 index 0000000..a596ace --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/README.md @@ -0,0 +1,72 @@ +Mustache.php +============ + +A [Mustache](http://mustache.github.com/) implementation in PHP. + +[![Package version](http://img.shields.io/packagist/v/mustache/mustache.svg?style=flat-square)](https://packagist.org/packages/mustache/mustache) +[![Build status](http://img.shields.io/travis/bobthecow/mustache.php/dev.svg?style=flat-square)](http://travis-ci.org/bobthecow/mustache.php) +[![StyleCI](https://styleci.io/repos/569670/shield)](https://styleci.io/repos/569670) +[![Monthly downloads](http://img.shields.io/packagist/dm/mustache/mustache.svg?style=flat-square)](https://packagist.org/packages/mustache/mustache) + + +Usage +----- + +A quick example: + +```php +render('Hello {{planet}}', array('planet' => 'World!')); // "Hello World!" +``` + + +And a more in-depth example -- this is the canonical Mustache template: + +```html+jinja +Hello {{name}} +You have just won {{value}} dollars! +{{#in_ca}} +Well, {{taxed_value}} dollars, after taxes. +{{/in_ca}} +``` + + +Create a view "context" object -- which could also be an associative array, but those don't do functions quite as well: + +```php +value - ($this->value * 0.4); + } + + public $in_ca = true; +} +``` + + +And render it: + +```php +render($template, $chris); +``` + + +And That's Not All! +------------------- + +Read [the Mustache.php documentation](https://github.com/bobthecow/mustache.php/wiki/Home) for more information. + + +See Also +-------- + + * [Readme for the Ruby Mustache implementation](http://github.com/defunkt/mustache/blob/master/README.md). + * [mustache(5)](http://mustache.github.com/mustache.5.html) man page. diff --git a/admin/lib/vendor/mustache/mustache/bin/build_bootstrap.php b/admin/lib/vendor/mustache/mustache/bin/build_bootstrap.php new file mode 100644 index 0000000..cc23b2b --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/bin/build_bootstrap.php @@ -0,0 +1,178 @@ +#!/usr/bin/env php + + */ +class SymfonyClassCollectionLoader +{ + private static $loaded; + + const HEADER = <<<'EOS' +\s*$/'), '', file_get_contents($r->getFileName())); + } + + $cache = $cacheDir . '/' . $name . $extension; + $header = sprintf(self::HEADER, strftime('%Y')); + self::writeCacheFile($cache, $header . substr(self::stripComments('=5.2.4" + }, + "require-dev": { + "phpunit/phpunit": "~3.7|~4.0|~5.0", + "friendsofphp/php-cs-fixer": "~1.11" + }, + "autoload": { + "psr-0": { "Mustache": "src/" } + } +} diff --git a/admin/lib/vendor/mustache/mustache/phpunit.xml.dist b/admin/lib/vendor/mustache/mustache/phpunit.xml.dist new file mode 100644 index 0000000..3c620b6 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/phpunit.xml.dist @@ -0,0 +1,17 @@ + + + + ./test + ./test/Mustache/Test/FiveThree + + + + ./test/Mustache/Test/FiveThree + + + + + ./src/Mustache + + + \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/src/Mustache/Autoloader.php b/admin/lib/vendor/mustache/mustache/src/Mustache/Autoloader.php new file mode 100644 index 0000000..e8ea3f4 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/src/Mustache/Autoloader.php @@ -0,0 +1,88 @@ +baseDir = $realDir; + } else { + $this->baseDir = $baseDir; + } + } + + /** + * Register a new instance as an SPL autoloader. + * + * @param string $baseDir Mustache library base directory (default: dirname(__FILE__).'/..') + * + * @return Mustache_Autoloader Registered Autoloader instance + */ + public static function register($baseDir = null) + { + $key = $baseDir ? $baseDir : 0; + + if (!isset(self::$instances[$key])) { + self::$instances[$key] = new self($baseDir); + } + + $loader = self::$instances[$key]; + spl_autoload_register(array($loader, 'autoload')); + + return $loader; + } + + /** + * Autoload Mustache classes. + * + * @param string $class + */ + public function autoload($class) + { + if ($class[0] === '\\') { + $class = substr($class, 1); + } + + if (strpos($class, 'Mustache') !== 0) { + return; + } + + $file = sprintf('%s/%s.php', $this->baseDir, str_replace('_', '/', $class)); + if (is_file($file)) { + require $file; + } + } +} diff --git a/admin/lib/vendor/mustache/mustache/src/Mustache/Cache.php b/admin/lib/vendor/mustache/mustache/src/Mustache/Cache.php new file mode 100644 index 0000000..3b5b3f1 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/src/Mustache/Cache.php @@ -0,0 +1,36 @@ +logger; + } + + /** + * Set a logger instance. + * + * @param Mustache_Logger|Psr\Log\LoggerInterface $logger + */ + public function setLogger($logger = null) + { + if ($logger !== null && !($logger instanceof Mustache_Logger || is_a($logger, 'Psr\\Log\\LoggerInterface'))) { + throw new Mustache_Exception_InvalidArgumentException('Expected an instance of Mustache_Logger or Psr\\Log\\LoggerInterface.'); + } + + $this->logger = $logger; + } + + /** + * Add a log record if logging is enabled. + * + * @param int $level The logging level + * @param string $message The log message + * @param array $context The log context + */ + protected function log($level, $message, array $context = array()) + { + if (isset($this->logger)) { + $this->logger->log($level, $message, $context); + } + } +} diff --git a/admin/lib/vendor/mustache/mustache/src/Mustache/Cache/FilesystemCache.php b/admin/lib/vendor/mustache/mustache/src/Mustache/Cache/FilesystemCache.php new file mode 100644 index 0000000..3e742b7 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/src/Mustache/Cache/FilesystemCache.php @@ -0,0 +1,161 @@ +cache($className, $compiledSource); + * + * The FilesystemCache benefits from any opcode caching that may be setup in your environment. So do that, k? + */ +class Mustache_Cache_FilesystemCache extends Mustache_Cache_AbstractCache +{ + private $baseDir; + private $fileMode; + + /** + * Filesystem cache constructor. + * + * @param string $baseDir Directory for compiled templates + * @param int $fileMode Override default permissions for cache files. Defaults to using the system-defined umask + */ + public function __construct($baseDir, $fileMode = null) + { + $this->baseDir = $baseDir; + $this->fileMode = $fileMode; + } + + /** + * Load the class from cache using `require_once`. + * + * @param string $key + * + * @return bool + */ + public function load($key) + { + $fileName = $this->getCacheFilename($key); + if (!is_file($fileName)) { + return false; + } + + require_once $fileName; + + return true; + } + + /** + * Cache and load the compiled class. + * + * @param string $key + * @param string $value + */ + public function cache($key, $value) + { + $fileName = $this->getCacheFilename($key); + + $this->log( + Mustache_Logger::DEBUG, + 'Writing to template cache: "{fileName}"', + array('fileName' => $fileName) + ); + + $this->writeFile($fileName, $value); + $this->load($key); + } + + /** + * Build the cache filename. + * Subclasses should override for custom cache directory structures. + * + * @param string $name + * + * @return string + */ + protected function getCacheFilename($name) + { + return sprintf('%s/%s.php', $this->baseDir, $name); + } + + /** + * Create cache directory. + * + * @throws Mustache_Exception_RuntimeException If unable to create directory + * + * @param string $fileName + * + * @return string + */ + private function buildDirectoryForFilename($fileName) + { + $dirName = dirname($fileName); + if (!is_dir($dirName)) { + $this->log( + Mustache_Logger::INFO, + 'Creating Mustache template cache directory: "{dirName}"', + array('dirName' => $dirName) + ); + + @mkdir($dirName, 0777, true); + // @codeCoverageIgnoreStart + if (!is_dir($dirName)) { + throw new Mustache_Exception_RuntimeException(sprintf('Failed to create cache directory "%s".', $dirName)); + } + // @codeCoverageIgnoreEnd + } + + return $dirName; + } + + /** + * Write cache file. + * + * @throws Mustache_Exception_RuntimeException If unable to write file + * + * @param string $fileName + * @param string $value + */ + private function writeFile($fileName, $value) + { + $dirName = $this->buildDirectoryForFilename($fileName); + + $this->log( + Mustache_Logger::DEBUG, + 'Caching compiled template to "{fileName}"', + array('fileName' => $fileName) + ); + + $tempFile = tempnam($dirName, basename($fileName)); + if (false !== @file_put_contents($tempFile, $value)) { + if (@rename($tempFile, $fileName)) { + $mode = isset($this->fileMode) ? $this->fileMode : (0666 & ~umask()); + @chmod($fileName, $mode); + + return; + } + + // @codeCoverageIgnoreStart + $this->log( + Mustache_Logger::ERROR, + 'Unable to rename Mustache temp cache file: "{tempName}" -> "{fileName}"', + array('tempName' => $tempFile, 'fileName' => $fileName) + ); + // @codeCoverageIgnoreEnd + } + + // @codeCoverageIgnoreStart + throw new Mustache_Exception_RuntimeException(sprintf('Failed to write cache file "%s".', $fileName)); + // @codeCoverageIgnoreEnd + } +} diff --git a/admin/lib/vendor/mustache/mustache/src/Mustache/Cache/NoopCache.php b/admin/lib/vendor/mustache/mustache/src/Mustache/Cache/NoopCache.php new file mode 100644 index 0000000..ed9eec9 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/src/Mustache/Cache/NoopCache.php @@ -0,0 +1,47 @@ +log( + Mustache_Logger::WARNING, + 'Template cache disabled, evaluating "{className}" class at runtime', + array('className' => $key) + ); + eval('?>' . $value); + } +} diff --git a/admin/lib/vendor/mustache/mustache/src/Mustache/Compiler.php b/admin/lib/vendor/mustache/mustache/src/Mustache/Compiler.php new file mode 100644 index 0000000..610369e --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/src/Mustache/Compiler.php @@ -0,0 +1,692 @@ +pragmas = $this->defaultPragmas; + $this->sections = array(); + $this->blocks = array(); + $this->source = $source; + $this->indentNextLine = true; + $this->customEscape = $customEscape; + $this->entityFlags = $entityFlags; + $this->charset = $charset; + $this->strictCallables = $strictCallables; + + return $this->writeCode($tree, $name); + } + + /** + * Enable pragmas across all templates, regardless of the presence of pragma + * tags in the individual templates. + * + * @internal Users should set global pragmas in Mustache_Engine, not here :) + * + * @param string[] $pragmas + */ + public function setPragmas(array $pragmas) + { + $this->pragmas = array(); + foreach ($pragmas as $pragma) { + $this->pragmas[$pragma] = true; + } + $this->defaultPragmas = $this->pragmas; + } + + /** + * Helper function for walking the Mustache token parse tree. + * + * @throws Mustache_Exception_SyntaxException upon encountering unknown token types + * + * @param array $tree Parse tree of Mustache tokens + * @param int $level (default: 0) + * + * @return string Generated PHP source code + */ + private function walk(array $tree, $level = 0) + { + $code = ''; + $level++; + foreach ($tree as $node) { + switch ($node[Mustache_Tokenizer::TYPE]) { + case Mustache_Tokenizer::T_PRAGMA: + $this->pragmas[$node[Mustache_Tokenizer::NAME]] = true; + break; + + case Mustache_Tokenizer::T_SECTION: + $code .= $this->section( + $node[Mustache_Tokenizer::NODES], + $node[Mustache_Tokenizer::NAME], + isset($node[Mustache_Tokenizer::FILTERS]) ? $node[Mustache_Tokenizer::FILTERS] : array(), + $node[Mustache_Tokenizer::INDEX], + $node[Mustache_Tokenizer::END], + $node[Mustache_Tokenizer::OTAG], + $node[Mustache_Tokenizer::CTAG], + $level + ); + break; + + case Mustache_Tokenizer::T_INVERTED: + $code .= $this->invertedSection( + $node[Mustache_Tokenizer::NODES], + $node[Mustache_Tokenizer::NAME], + isset($node[Mustache_Tokenizer::FILTERS]) ? $node[Mustache_Tokenizer::FILTERS] : array(), + $level + ); + break; + + case Mustache_Tokenizer::T_PARTIAL: + $code .= $this->partial( + $node[Mustache_Tokenizer::NAME], + isset($node[Mustache_Tokenizer::INDENT]) ? $node[Mustache_Tokenizer::INDENT] : '', + $level + ); + break; + + case Mustache_Tokenizer::T_PARENT: + $code .= $this->parent( + $node[Mustache_Tokenizer::NAME], + isset($node[Mustache_Tokenizer::INDENT]) ? $node[Mustache_Tokenizer::INDENT] : '', + $node[Mustache_Tokenizer::NODES], + $level + ); + break; + + case Mustache_Tokenizer::T_BLOCK_ARG: + $code .= $this->blockArg( + $node[Mustache_Tokenizer::NODES], + $node[Mustache_Tokenizer::NAME], + $node[Mustache_Tokenizer::INDEX], + $node[Mustache_Tokenizer::END], + $node[Mustache_Tokenizer::OTAG], + $node[Mustache_Tokenizer::CTAG], + $level + ); + break; + + case Mustache_Tokenizer::T_BLOCK_VAR: + $code .= $this->blockVar( + $node[Mustache_Tokenizer::NODES], + $node[Mustache_Tokenizer::NAME], + $node[Mustache_Tokenizer::INDEX], + $node[Mustache_Tokenizer::END], + $node[Mustache_Tokenizer::OTAG], + $node[Mustache_Tokenizer::CTAG], + $level + ); + break; + + case Mustache_Tokenizer::T_COMMENT: + break; + + case Mustache_Tokenizer::T_ESCAPED: + case Mustache_Tokenizer::T_UNESCAPED: + case Mustache_Tokenizer::T_UNESCAPED_2: + $code .= $this->variable( + $node[Mustache_Tokenizer::NAME], + isset($node[Mustache_Tokenizer::FILTERS]) ? $node[Mustache_Tokenizer::FILTERS] : array(), + $node[Mustache_Tokenizer::TYPE] === Mustache_Tokenizer::T_ESCAPED, + $level + ); + break; + + case Mustache_Tokenizer::T_TEXT: + $code .= $this->text($node[Mustache_Tokenizer::VALUE], $level); + break; + + default: + throw new Mustache_Exception_SyntaxException(sprintf('Unknown token type: %s', $node[Mustache_Tokenizer::TYPE]), $node); + } + } + + return $code; + } + + const KLASS = 'lambdaHelper = new Mustache_LambdaHelper($this->mustache, $context); + $buffer = \'\'; + %s + + return $buffer; + } + %s + %s + }'; + + const KLASS_NO_LAMBDAS = 'walk($tree); + $sections = implode("\n", $this->sections); + $blocks = implode("\n", $this->blocks); + $klass = empty($this->sections) && empty($this->blocks) ? self::KLASS_NO_LAMBDAS : self::KLASS; + + $callable = $this->strictCallables ? $this->prepare(self::STRICT_CALLABLE) : ''; + + return sprintf($this->prepare($klass, 0, false, true), $name, $callable, $code, $sections, $blocks); + } + + const BLOCK_VAR = ' + $blockFunction = $context->findInBlock(%s); + if (is_callable($blockFunction)) { + $buffer .= call_user_func($blockFunction, $context); + %s} + '; + + const BLOCK_VAR_ELSE = '} else {%s'; + + /** + * Generate Mustache Template inheritance block variable PHP source. + * + * @param array $nodes Array of child tokens + * @param string $id Section name + * @param int $start Section start offset + * @param int $end Section end offset + * @param string $otag Current Mustache opening tag + * @param string $ctag Current Mustache closing tag + * @param int $level + * + * @return string Generated PHP source code + */ + private function blockVar($nodes, $id, $start, $end, $otag, $ctag, $level) + { + $id = var_export($id, true); + + $else = $this->walk($nodes, $level); + if ($else !== '') { + $else = sprintf($this->prepare(self::BLOCK_VAR_ELSE, $level + 1, false, true), $else); + } + + return sprintf($this->prepare(self::BLOCK_VAR, $level), $id, $else); + } + + const BLOCK_ARG = '%s => array($this, \'block%s\'),'; + + /** + * Generate Mustache Template inheritance block argument PHP source. + * + * @param array $nodes Array of child tokens + * @param string $id Section name + * @param int $start Section start offset + * @param int $end Section end offset + * @param string $otag Current Mustache opening tag + * @param string $ctag Current Mustache closing tag + * @param int $level + * + * @return string Generated PHP source code + */ + private function blockArg($nodes, $id, $start, $end, $otag, $ctag, $level) + { + $key = $this->block($nodes); + $keystr = var_export($key, true); + $id = var_export($id, true); + + return sprintf($this->prepare(self::BLOCK_ARG, $level), $id, $key); + } + + const BLOCK_FUNCTION = ' + public function block%s($context) + { + $indent = $buffer = \'\';%s + + return $buffer; + } + '; + + /** + * Generate Mustache Template inheritance block function PHP source. + * + * @param array $nodes Array of child tokens + * + * @return string key of new block function + */ + private function block($nodes) + { + $code = $this->walk($nodes, 0); + $key = ucfirst(md5($code)); + + if (!isset($this->blocks[$key])) { + $this->blocks[$key] = sprintf($this->prepare(self::BLOCK_FUNCTION, 0), $key, $code); + } + + return $key; + } + + const SECTION_CALL = ' + // %s section + $value = $context->%s(%s);%s + $buffer .= $this->section%s($context, $indent, $value); + '; + + const SECTION = ' + private function section%s(Mustache_Context $context, $indent, $value) + { + $buffer = \'\'; + + if (%s) { + $source = %s; + $result = call_user_func($value, $source, %s); + if (strpos($result, \'{{\') === false) { + $buffer .= $result; + } else { + $buffer .= $this->mustache + ->loadLambda((string) $result%s) + ->renderInternal($context); + } + } elseif (!empty($value)) { + $values = $this->isIterable($value) ? $value : array($value); + foreach ($values as $value) { + $context->push($value); + %s + $context->pop(); + } + } + + return $buffer; + } + '; + + /** + * Generate Mustache Template section PHP source. + * + * @param array $nodes Array of child tokens + * @param string $id Section name + * @param string[] $filters Array of filters + * @param int $start Section start offset + * @param int $end Section end offset + * @param string $otag Current Mustache opening tag + * @param string $ctag Current Mustache closing tag + * @param int $level + * + * @return string Generated section PHP source code + */ + private function section($nodes, $id, $filters, $start, $end, $otag, $ctag, $level) + { + $source = var_export(substr($this->source, $start, $end - $start), true); + $callable = $this->getCallable(); + + if ($otag !== '{{' || $ctag !== '}}') { + $delimTag = var_export(sprintf('{{= %s %s =}}', $otag, $ctag), true); + $helper = sprintf('$this->lambdaHelper->withDelimiters(%s)', $delimTag); + $delims = ', ' . $delimTag; + } else { + $helper = '$this->lambdaHelper'; + $delims = ''; + } + + $key = ucfirst(md5($delims . "\n" . $source)); + + if (!isset($this->sections[$key])) { + $this->sections[$key] = sprintf($this->prepare(self::SECTION), $key, $callable, $source, $helper, $delims, $this->walk($nodes, 2)); + } + + $method = $this->getFindMethod($id); + $id = var_export($id, true); + $filters = $this->getFilters($filters, $level); + + return sprintf($this->prepare(self::SECTION_CALL, $level), $id, $method, $id, $filters, $key); + } + + const INVERTED_SECTION = ' + // %s inverted section + $value = $context->%s(%s);%s + if (empty($value)) { + %s + } + '; + + /** + * Generate Mustache Template inverted section PHP source. + * + * @param array $nodes Array of child tokens + * @param string $id Section name + * @param string[] $filters Array of filters + * @param int $level + * + * @return string Generated inverted section PHP source code + */ + private function invertedSection($nodes, $id, $filters, $level) + { + $method = $this->getFindMethod($id); + $id = var_export($id, true); + $filters = $this->getFilters($filters, $level); + + return sprintf($this->prepare(self::INVERTED_SECTION, $level), $id, $method, $id, $filters, $this->walk($nodes, $level)); + } + + const PARTIAL_INDENT = ', $indent . %s'; + const PARTIAL = ' + if ($partial = $this->mustache->loadPartial(%s)) { + $buffer .= $partial->renderInternal($context%s); + } + '; + + /** + * Generate Mustache Template partial call PHP source. + * + * @param string $id Partial name + * @param string $indent Whitespace indent to apply to partial + * @param int $level + * + * @return string Generated partial call PHP source code + */ + private function partial($id, $indent, $level) + { + if ($indent !== '') { + $indentParam = sprintf(self::PARTIAL_INDENT, var_export($indent, true)); + } else { + $indentParam = ''; + } + + return sprintf( + $this->prepare(self::PARTIAL, $level), + var_export($id, true), + $indentParam + ); + } + + const PARENT = ' + if ($parent = $this->mustache->loadPartial(%s)) { + $context->pushBlockContext(array(%s + )); + $buffer .= $parent->renderInternal($context, $indent); + $context->popBlockContext(); + } + '; + + const PARENT_NO_CONTEXT = ' + if ($parent = $this->mustache->loadPartial(%s)) { + $buffer .= $parent->renderInternal($context, $indent); + } + '; + + /** + * Generate Mustache Template inheritance parent call PHP source. + * + * @param string $id Parent tag name + * @param string $indent Whitespace indent to apply to parent + * @param array $children Child nodes + * @param int $level + * + * @return string Generated PHP source code + */ + private function parent($id, $indent, array $children, $level) + { + $realChildren = array_filter($children, array(__CLASS__, 'onlyBlockArgs')); + + if (empty($realChildren)) { + return sprintf($this->prepare(self::PARENT_NO_CONTEXT, $level), var_export($id, true)); + } + + return sprintf( + $this->prepare(self::PARENT, $level), + var_export($id, true), + $this->walk($realChildren, $level + 1) + ); + } + + /** + * Helper method for filtering out non-block-arg tokens. + * + * @param array $node + * + * @return bool True if $node is a block arg token + */ + private static function onlyBlockArgs(array $node) + { + return $node[Mustache_Tokenizer::TYPE] === Mustache_Tokenizer::T_BLOCK_ARG; + } + + const VARIABLE = ' + $value = $this->resolveValue($context->%s(%s), $context);%s + $buffer .= %s%s; + '; + + /** + * Generate Mustache Template variable interpolation PHP source. + * + * @param string $id Variable name + * @param string[] $filters Array of filters + * @param bool $escape Escape the variable value for output? + * @param int $level + * + * @return string Generated variable interpolation PHP source + */ + private function variable($id, $filters, $escape, $level) + { + $method = $this->getFindMethod($id); + $id = ($method !== 'last') ? var_export($id, true) : ''; + $filters = $this->getFilters($filters, $level); + $value = $escape ? $this->getEscape() : '$value'; + + return sprintf($this->prepare(self::VARIABLE, $level), $method, $id, $filters, $this->flushIndent(), $value); + } + + const FILTER = ' + $filter = $context->%s(%s); + if (!(%s)) { + throw new Mustache_Exception_UnknownFilterException(%s); + } + $value = call_user_func($filter, $value);%s + '; + + /** + * Generate Mustache Template variable filtering PHP source. + * + * @param string[] $filters Array of filters + * @param int $level + * + * @return string Generated filter PHP source + */ + private function getFilters(array $filters, $level) + { + if (empty($filters)) { + return ''; + } + + $name = array_shift($filters); + $method = $this->getFindMethod($name); + $filter = ($method !== 'last') ? var_export($name, true) : ''; + $callable = $this->getCallable('$filter'); + $msg = var_export($name, true); + + return sprintf($this->prepare(self::FILTER, $level), $method, $filter, $callable, $msg, $this->getFilters($filters, $level)); + } + + const LINE = '$buffer .= "\n";'; + const TEXT = '$buffer .= %s%s;'; + + /** + * Generate Mustache Template output Buffer call PHP source. + * + * @param string $text + * @param int $level + * + * @return string Generated output Buffer call PHP source + */ + private function text($text, $level) + { + $indentNextLine = (substr($text, -1) === "\n"); + $code = sprintf($this->prepare(self::TEXT, $level), $this->flushIndent(), var_export($text, true)); + $this->indentNextLine = $indentNextLine; + + return $code; + } + + /** + * Prepare PHP source code snippet for output. + * + * @param string $text + * @param int $bonus Additional indent level (default: 0) + * @param bool $prependNewline Prepend a newline to the snippet? (default: true) + * @param bool $appendNewline Append a newline to the snippet? (default: false) + * + * @return string PHP source code snippet + */ + private function prepare($text, $bonus = 0, $prependNewline = true, $appendNewline = false) + { + $text = ($prependNewline ? "\n" : '') . trim($text); + if ($prependNewline) { + $bonus++; + } + if ($appendNewline) { + $text .= "\n"; + } + + return preg_replace("/\n( {8})?/", "\n" . str_repeat(' ', $bonus * 4), $text); + } + + const DEFAULT_ESCAPE = 'htmlspecialchars(%s, %s, %s)'; + const CUSTOM_ESCAPE = 'call_user_func($this->mustache->getEscape(), %s)'; + + /** + * Get the current escaper. + * + * @param string $value (default: '$value') + * + * @return string Either a custom callback, or an inline call to `htmlspecialchars` + */ + private function getEscape($value = '$value') + { + if ($this->customEscape) { + return sprintf(self::CUSTOM_ESCAPE, $value); + } + + return sprintf(self::DEFAULT_ESCAPE, $value, var_export($this->entityFlags, true), var_export($this->charset, true)); + } + + /** + * Select the appropriate Context `find` method for a given $id. + * + * The return value will be one of `find`, `findDot`, `findAnchoredDot` or `last`. + * + * @see Mustache_Context::find + * @see Mustache_Context::findDot + * @see Mustache_Context::last + * + * @param string $id Variable name + * + * @return string `find` method name + */ + private function getFindMethod($id) + { + if ($id === '.') { + return 'last'; + } + + if (isset($this->pragmas[Mustache_Engine::PRAGMA_ANCHORED_DOT]) && $this->pragmas[Mustache_Engine::PRAGMA_ANCHORED_DOT]) { + if (substr($id, 0, 1) === '.') { + return 'findAnchoredDot'; + } + } + + if (strpos($id, '.') === false) { + return 'find'; + } + + return 'findDot'; + } + + const IS_CALLABLE = '!is_string(%s) && is_callable(%s)'; + const STRICT_IS_CALLABLE = 'is_object(%s) && is_callable(%s)'; + + /** + * Helper function to compile strict vs lax "is callable" logic. + * + * @param string $variable (default: '$value') + * + * @return string "is callable" logic + */ + private function getCallable($variable = '$value') + { + $tpl = $this->strictCallables ? self::STRICT_IS_CALLABLE : self::IS_CALLABLE; + + return sprintf($tpl, $variable, $variable); + } + + const LINE_INDENT = '$indent . '; + + /** + * Get the current $indent prefix to write to the buffer. + * + * @return string "$indent . " or "" + */ + private function flushIndent() + { + if (!$this->indentNextLine) { + return ''; + } + + $this->indentNextLine = false; + + return self::LINE_INDENT; + } +} diff --git a/admin/lib/vendor/mustache/mustache/src/Mustache/Context.php b/admin/lib/vendor/mustache/mustache/src/Mustache/Context.php new file mode 100644 index 0000000..69c02e0 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/src/Mustache/Context.php @@ -0,0 +1,242 @@ +stack = array($context); + } + } + + /** + * Push a new Context frame onto the stack. + * + * @param mixed $value Object or array to use for context + */ + public function push($value) + { + array_push($this->stack, $value); + } + + /** + * Push a new Context frame onto the block context stack. + * + * @param mixed $value Object or array to use for block context + */ + public function pushBlockContext($value) + { + array_push($this->blockStack, $value); + } + + /** + * Pop the last Context frame from the stack. + * + * @return mixed Last Context frame (object or array) + */ + public function pop() + { + return array_pop($this->stack); + } + + /** + * Pop the last block Context frame from the stack. + * + * @return mixed Last block Context frame (object or array) + */ + public function popBlockContext() + { + return array_pop($this->blockStack); + } + + /** + * Get the last Context frame. + * + * @return mixed Last Context frame (object or array) + */ + public function last() + { + return end($this->stack); + } + + /** + * Find a variable in the Context stack. + * + * Starting with the last Context frame (the context of the innermost section), and working back to the top-level + * rendering context, look for a variable with the given name: + * + * * If the Context frame is an associative array which contains the key $id, returns the value of that element. + * * If the Context frame is an object, this will check first for a public method, then a public property named + * $id. Failing both of these, it will try `__isset` and `__get` magic methods. + * * If a value named $id is not found in any Context frame, returns an empty string. + * + * @param string $id Variable name + * + * @return mixed Variable value, or '' if not found + */ + public function find($id) + { + return $this->findVariableInStack($id, $this->stack); + } + + /** + * Find a 'dot notation' variable in the Context stack. + * + * Note that dot notation traversal bubbles through scope differently than the regular find method. After finding + * the initial chunk of the dotted name, each subsequent chunk is searched for only within the value of the previous + * result. For example, given the following context stack: + * + * $data = array( + * 'name' => 'Fred', + * 'child' => array( + * 'name' => 'Bob' + * ), + * ); + * + * ... and the Mustache following template: + * + * {{ child.name }} + * + * ... the `name` value is only searched for within the `child` value of the global Context, not within parent + * Context frames. + * + * @param string $id Dotted variable selector + * + * @return mixed Variable value, or '' if not found + */ + public function findDot($id) + { + $chunks = explode('.', $id); + $first = array_shift($chunks); + $value = $this->findVariableInStack($first, $this->stack); + + foreach ($chunks as $chunk) { + if ($value === '') { + return $value; + } + + $value = $this->findVariableInStack($chunk, array($value)); + } + + return $value; + } + + /** + * Find an 'anchored dot notation' variable in the Context stack. + * + * This is the same as findDot(), except it looks in the top of the context + * stack for the first value, rather than searching the whole context stack + * and starting from there. + * + * @see Mustache_Context::findDot + * + * @throws Mustache_Exception_InvalidArgumentException if given an invalid anchored dot $id + * + * @param string $id Dotted variable selector + * + * @return mixed Variable value, or '' if not found + */ + public function findAnchoredDot($id) + { + $chunks = explode('.', $id); + $first = array_shift($chunks); + if ($first !== '') { + throw new Mustache_Exception_InvalidArgumentException(sprintf('Unexpected id for findAnchoredDot: %s', $id)); + } + + $value = $this->last(); + + foreach ($chunks as $chunk) { + if ($value === '') { + return $value; + } + + $value = $this->findVariableInStack($chunk, array($value)); + } + + return $value; + } + + /** + * Find an argument in the block context stack. + * + * @param string $id + * + * @return mixed Variable value, or '' if not found + */ + public function findInBlock($id) + { + foreach ($this->blockStack as $context) { + if (array_key_exists($id, $context)) { + return $context[$id]; + } + } + + return ''; + } + + /** + * Helper function to find a variable in the Context stack. + * + * @see Mustache_Context::find + * + * @param string $id Variable name + * @param array $stack Context stack + * + * @return mixed Variable value, or '' if not found + */ + private function findVariableInStack($id, array $stack) + { + for ($i = count($stack) - 1; $i >= 0; $i--) { + $frame = &$stack[$i]; + + switch (gettype($frame)) { + case 'object': + if (!($frame instanceof Closure)) { + // Note that is_callable() *will not work here* + // See https://github.com/bobthecow/mustache.php/wiki/Magic-Methods + if (method_exists($frame, $id)) { + return $frame->$id(); + } + + if (isset($frame->$id)) { + return $frame->$id; + } + + if ($frame instanceof ArrayAccess && isset($frame[$id])) { + return $frame[$id]; + } + } + break; + + case 'array': + if (array_key_exists($id, $frame)) { + return $frame[$id]; + } + break; + } + } + + return ''; + } +} diff --git a/admin/lib/vendor/mustache/mustache/src/Mustache/Engine.php b/admin/lib/vendor/mustache/mustache/src/Mustache/Engine.php new file mode 100644 index 0000000..fe99799 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/src/Mustache/Engine.php @@ -0,0 +1,829 @@ + true, + self::PRAGMA_BLOCKS => true, + self::PRAGMA_ANCHORED_DOT => true, + ); + + // Template cache + private $templates = array(); + + // Environment + private $templateClassPrefix = '__Mustache_'; + private $cache; + private $lambdaCache; + private $cacheLambdaTemplates = false; + private $loader; + private $partialsLoader; + private $helpers; + private $escape; + private $entityFlags = ENT_COMPAT; + private $charset = 'UTF-8'; + private $logger; + private $strictCallables = false; + private $pragmas = array(); + private $delimiters; + + // Services + private $tokenizer; + private $parser; + private $compiler; + + /** + * Mustache class constructor. + * + * Passing an $options array allows overriding certain Mustache options during instantiation: + * + * $options = array( + * // The class prefix for compiled templates. Defaults to '__Mustache_'. + * 'template_class_prefix' => '__MyTemplates_', + * + * // A Mustache cache instance or a cache directory string for compiled templates. + * // Mustache will not cache templates unless this is set. + * 'cache' => dirname(__FILE__).'/tmp/cache/mustache', + * + * // Override default permissions for cache files. Defaults to using the system-defined umask. It is + * // *strongly* recommended that you configure your umask properly rather than overriding permissions here. + * 'cache_file_mode' => 0666, + * + * // Optionally, enable caching for lambda section templates. This is generally not recommended, as lambda + * // sections are often too dynamic to benefit from caching. + * 'cache_lambda_templates' => true, + * + * // Customize the tag delimiters used by this engine instance. Note that overriding here changes the + * // delimiters used to parse all templates and partials loaded by this instance. To override just for a + * // single template, use an inline "change delimiters" tag at the start of the template file: + * // + * // {{=<% %>=}} + * // + * 'delimiters' => '<% %>', + * + * // A Mustache template loader instance. Uses a StringLoader if not specified. + * 'loader' => new Mustache_Loader_FilesystemLoader(dirname(__FILE__).'/views'), + * + * // A Mustache loader instance for partials. + * 'partials_loader' => new Mustache_Loader_FilesystemLoader(dirname(__FILE__).'/views/partials'), + * + * // An array of Mustache partials. Useful for quick-and-dirty string template loading, but not as + * // efficient or lazy as a Filesystem (or database) loader. + * 'partials' => array('foo' => file_get_contents(dirname(__FILE__).'/views/partials/foo.mustache')), + * + * // An array of 'helpers'. Helpers can be global variables or objects, closures (e.g. for higher order + * // sections), or any other valid Mustache context value. They will be prepended to the context stack, + * // so they will be available in any template loaded by this Mustache instance. + * 'helpers' => array('i18n' => function ($text) { + * // do something translatey here... + * }), + * + * // An 'escape' callback, responsible for escaping double-mustache variables. + * 'escape' => function ($value) { + * return htmlspecialchars($buffer, ENT_COMPAT, 'UTF-8'); + * }, + * + * // Type argument for `htmlspecialchars`. Defaults to ENT_COMPAT. You may prefer ENT_QUOTES. + * 'entity_flags' => ENT_QUOTES, + * + * // Character set for `htmlspecialchars`. Defaults to 'UTF-8'. Use 'UTF-8'. + * 'charset' => 'ISO-8859-1', + * + * // A Mustache Logger instance. No logging will occur unless this is set. Using a PSR-3 compatible + * // logging library -- such as Monolog -- is highly recommended. A simple stream logger implementation is + * // available as well: + * 'logger' => new Mustache_Logger_StreamLogger('php://stderr'), + * + * // Only treat Closure instances and invokable classes as callable. If true, values like + * // `array('ClassName', 'methodName')` and `array($classInstance, 'methodName')`, which are traditionally + * // "callable" in PHP, are not called to resolve variables for interpolation or section contexts. This + * // helps protect against arbitrary code execution when user input is passed directly into the template. + * // This currently defaults to false, but will default to true in v3.0. + * 'strict_callables' => true, + * + * // Enable pragmas across all templates, regardless of the presence of pragma tags in the individual + * // templates. + * 'pragmas' => [Mustache_Engine::PRAGMA_FILTERS], + * ); + * + * @throws Mustache_Exception_InvalidArgumentException If `escape` option is not callable + * + * @param array $options (default: array()) + */ + public function __construct(array $options = array()) + { + if (isset($options['template_class_prefix'])) { + if ((string) $options['template_class_prefix'] === '') { + throw new Mustache_Exception_InvalidArgumentException('Mustache Constructor "template_class_prefix" must not be empty'); + } + + $this->templateClassPrefix = $options['template_class_prefix']; + } + + if (isset($options['cache'])) { + $cache = $options['cache']; + + if (is_string($cache)) { + $mode = isset($options['cache_file_mode']) ? $options['cache_file_mode'] : null; + $cache = new Mustache_Cache_FilesystemCache($cache, $mode); + } + + $this->setCache($cache); + } + + if (isset($options['cache_lambda_templates'])) { + $this->cacheLambdaTemplates = (bool) $options['cache_lambda_templates']; + } + + if (isset($options['loader'])) { + $this->setLoader($options['loader']); + } + + if (isset($options['partials_loader'])) { + $this->setPartialsLoader($options['partials_loader']); + } + + if (isset($options['partials'])) { + $this->setPartials($options['partials']); + } + + if (isset($options['helpers'])) { + $this->setHelpers($options['helpers']); + } + + if (isset($options['escape'])) { + if (!is_callable($options['escape'])) { + throw new Mustache_Exception_InvalidArgumentException('Mustache Constructor "escape" option must be callable'); + } + + $this->escape = $options['escape']; + } + + if (isset($options['entity_flags'])) { + $this->entityFlags = $options['entity_flags']; + } + + if (isset($options['charset'])) { + $this->charset = $options['charset']; + } + + if (isset($options['logger'])) { + $this->setLogger($options['logger']); + } + + if (isset($options['strict_callables'])) { + $this->strictCallables = $options['strict_callables']; + } + + if (isset($options['delimiters'])) { + $this->delimiters = $options['delimiters']; + } + + if (isset($options['pragmas'])) { + foreach ($options['pragmas'] as $pragma) { + if (!isset(self::$knownPragmas[$pragma])) { + throw new Mustache_Exception_InvalidArgumentException(sprintf('Unknown pragma: "%s".', $pragma)); + } + $this->pragmas[$pragma] = true; + } + } + } + + /** + * Shortcut 'render' invocation. + * + * Equivalent to calling `$mustache->loadTemplate($template)->render($context);` + * + * @see Mustache_Engine::loadTemplate + * @see Mustache_Template::render + * + * @param string $template + * @param mixed $context (default: array()) + * + * @return string Rendered template + */ + public function render($template, $context = array()) + { + return $this->loadTemplate($template)->render($context); + } + + /** + * Get the current Mustache escape callback. + * + * @return callable|null + */ + public function getEscape() + { + return $this->escape; + } + + /** + * Get the current Mustache entitity type to escape. + * + * @return int + */ + public function getEntityFlags() + { + return $this->entityFlags; + } + + /** + * Get the current Mustache character set. + * + * @return string + */ + public function getCharset() + { + return $this->charset; + } + + /** + * Get the current globally enabled pragmas. + * + * @return array + */ + public function getPragmas() + { + return array_keys($this->pragmas); + } + + /** + * Set the Mustache template Loader instance. + * + * @param Mustache_Loader $loader + */ + public function setLoader(Mustache_Loader $loader) + { + $this->loader = $loader; + } + + /** + * Get the current Mustache template Loader instance. + * + * If no Loader instance has been explicitly specified, this method will instantiate and return + * a StringLoader instance. + * + * @return Mustache_Loader + */ + public function getLoader() + { + if (!isset($this->loader)) { + $this->loader = new Mustache_Loader_StringLoader(); + } + + return $this->loader; + } + + /** + * Set the Mustache partials Loader instance. + * + * @param Mustache_Loader $partialsLoader + */ + public function setPartialsLoader(Mustache_Loader $partialsLoader) + { + $this->partialsLoader = $partialsLoader; + } + + /** + * Get the current Mustache partials Loader instance. + * + * If no Loader instance has been explicitly specified, this method will instantiate and return + * an ArrayLoader instance. + * + * @return Mustache_Loader + */ + public function getPartialsLoader() + { + if (!isset($this->partialsLoader)) { + $this->partialsLoader = new Mustache_Loader_ArrayLoader(); + } + + return $this->partialsLoader; + } + + /** + * Set partials for the current partials Loader instance. + * + * @throws Mustache_Exception_RuntimeException If the current Loader instance is immutable + * + * @param array $partials (default: array()) + */ + public function setPartials(array $partials = array()) + { + if (!isset($this->partialsLoader)) { + $this->partialsLoader = new Mustache_Loader_ArrayLoader(); + } + + if (!$this->partialsLoader instanceof Mustache_Loader_MutableLoader) { + throw new Mustache_Exception_RuntimeException('Unable to set partials on an immutable Mustache Loader instance'); + } + + $this->partialsLoader->setTemplates($partials); + } + + /** + * Set an array of Mustache helpers. + * + * An array of 'helpers'. Helpers can be global variables or objects, closures (e.g. for higher order sections), or + * any other valid Mustache context value. They will be prepended to the context stack, so they will be available in + * any template loaded by this Mustache instance. + * + * @throws Mustache_Exception_InvalidArgumentException if $helpers is not an array or Traversable + * + * @param array|Traversable $helpers + */ + public function setHelpers($helpers) + { + if (!is_array($helpers) && !$helpers instanceof Traversable) { + throw new Mustache_Exception_InvalidArgumentException('setHelpers expects an array of helpers'); + } + + $this->getHelpers()->clear(); + + foreach ($helpers as $name => $helper) { + $this->addHelper($name, $helper); + } + } + + /** + * Get the current set of Mustache helpers. + * + * @see Mustache_Engine::setHelpers + * + * @return Mustache_HelperCollection + */ + public function getHelpers() + { + if (!isset($this->helpers)) { + $this->helpers = new Mustache_HelperCollection(); + } + + return $this->helpers; + } + + /** + * Add a new Mustache helper. + * + * @see Mustache_Engine::setHelpers + * + * @param string $name + * @param mixed $helper + */ + public function addHelper($name, $helper) + { + $this->getHelpers()->add($name, $helper); + } + + /** + * Get a Mustache helper by name. + * + * @see Mustache_Engine::setHelpers + * + * @param string $name + * + * @return mixed Helper + */ + public function getHelper($name) + { + return $this->getHelpers()->get($name); + } + + /** + * Check whether this Mustache instance has a helper. + * + * @see Mustache_Engine::setHelpers + * + * @param string $name + * + * @return bool True if the helper is present + */ + public function hasHelper($name) + { + return $this->getHelpers()->has($name); + } + + /** + * Remove a helper by name. + * + * @see Mustache_Engine::setHelpers + * + * @param string $name + */ + public function removeHelper($name) + { + $this->getHelpers()->remove($name); + } + + /** + * Set the Mustache Logger instance. + * + * @throws Mustache_Exception_InvalidArgumentException If logger is not an instance of Mustache_Logger or Psr\Log\LoggerInterface + * + * @param Mustache_Logger|Psr\Log\LoggerInterface $logger + */ + public function setLogger($logger = null) + { + if ($logger !== null && !($logger instanceof Mustache_Logger || is_a($logger, 'Psr\\Log\\LoggerInterface'))) { + throw new Mustache_Exception_InvalidArgumentException('Expected an instance of Mustache_Logger or Psr\\Log\\LoggerInterface.'); + } + + if ($this->getCache()->getLogger() === null) { + $this->getCache()->setLogger($logger); + } + + $this->logger = $logger; + } + + /** + * Get the current Mustache Logger instance. + * + * @return Mustache_Logger|Psr\Log\LoggerInterface + */ + public function getLogger() + { + return $this->logger; + } + + /** + * Set the Mustache Tokenizer instance. + * + * @param Mustache_Tokenizer $tokenizer + */ + public function setTokenizer(Mustache_Tokenizer $tokenizer) + { + $this->tokenizer = $tokenizer; + } + + /** + * Get the current Mustache Tokenizer instance. + * + * If no Tokenizer instance has been explicitly specified, this method will instantiate and return a new one. + * + * @return Mustache_Tokenizer + */ + public function getTokenizer() + { + if (!isset($this->tokenizer)) { + $this->tokenizer = new Mustache_Tokenizer(); + } + + return $this->tokenizer; + } + + /** + * Set the Mustache Parser instance. + * + * @param Mustache_Parser $parser + */ + public function setParser(Mustache_Parser $parser) + { + $this->parser = $parser; + } + + /** + * Get the current Mustache Parser instance. + * + * If no Parser instance has been explicitly specified, this method will instantiate and return a new one. + * + * @return Mustache_Parser + */ + public function getParser() + { + if (!isset($this->parser)) { + $this->parser = new Mustache_Parser(); + } + + return $this->parser; + } + + /** + * Set the Mustache Compiler instance. + * + * @param Mustache_Compiler $compiler + */ + public function setCompiler(Mustache_Compiler $compiler) + { + $this->compiler = $compiler; + } + + /** + * Get the current Mustache Compiler instance. + * + * If no Compiler instance has been explicitly specified, this method will instantiate and return a new one. + * + * @return Mustache_Compiler + */ + public function getCompiler() + { + if (!isset($this->compiler)) { + $this->compiler = new Mustache_Compiler(); + } + + return $this->compiler; + } + + /** + * Set the Mustache Cache instance. + * + * @param Mustache_Cache $cache + */ + public function setCache(Mustache_Cache $cache) + { + if (isset($this->logger) && $cache->getLogger() === null) { + $cache->setLogger($this->getLogger()); + } + + $this->cache = $cache; + } + + /** + * Get the current Mustache Cache instance. + * + * If no Cache instance has been explicitly specified, this method will instantiate and return a new one. + * + * @return Mustache_Cache + */ + public function getCache() + { + if (!isset($this->cache)) { + $this->setCache(new Mustache_Cache_NoopCache()); + } + + return $this->cache; + } + + /** + * Get the current Lambda Cache instance. + * + * If 'cache_lambda_templates' is enabled, this is the default cache instance. Otherwise, it is a NoopCache. + * + * @see Mustache_Engine::getCache + * + * @return Mustache_Cache + */ + protected function getLambdaCache() + { + if ($this->cacheLambdaTemplates) { + return $this->getCache(); + } + + if (!isset($this->lambdaCache)) { + $this->lambdaCache = new Mustache_Cache_NoopCache(); + } + + return $this->lambdaCache; + } + + /** + * Helper method to generate a Mustache template class. + * + * This method must be updated any time options are added which make it so + * the same template could be parsed and compiled multiple different ways. + * + * @param string|Mustache_Source $source + * + * @return string Mustache Template class name + */ + public function getTemplateClassName($source) + { + // For the most part, adding a new option here should do the trick. + // + // Pick a value here which is unique for each possible way the template + // could be compiled... but not necessarily unique per option value. See + // escape below, which only needs to differentiate between 'custom' and + // 'default' escapes. + // + // Keep this list in alphabetical order :) + $chunks = array( + 'charset' => $this->charset, + 'delimiters' => $this->delimiters ? $this->delimiters : '{{ }}', + 'entityFlags' => $this->entityFlags, + 'escape' => isset($this->escape) ? 'custom' : 'default', + 'key' => ($source instanceof Mustache_Source) ? $source->getKey() : 'source', + 'pragmas' => $this->getPragmas(), + 'strictCallables' => $this->strictCallables, + 'version' => self::VERSION, + ); + + $key = json_encode($chunks); + + // Template Source instances have already provided their own source key. For strings, just include the whole + // source string in the md5 hash. + if (!$source instanceof Mustache_Source) { + $key .= "\n" . $source; + } + + return $this->templateClassPrefix . md5($key); + } + + /** + * Load a Mustache Template by name. + * + * @param string $name + * + * @return Mustache_Template + */ + public function loadTemplate($name) + { + return $this->loadSource($this->getLoader()->load($name)); + } + + /** + * Load a Mustache partial Template by name. + * + * This is a helper method used internally by Template instances for loading partial templates. You can most likely + * ignore it completely. + * + * @param string $name + * + * @return Mustache_Template + */ + public function loadPartial($name) + { + try { + if (isset($this->partialsLoader)) { + $loader = $this->partialsLoader; + } elseif (isset($this->loader) && !$this->loader instanceof Mustache_Loader_StringLoader) { + $loader = $this->loader; + } else { + throw new Mustache_Exception_UnknownTemplateException($name); + } + + return $this->loadSource($loader->load($name)); + } catch (Mustache_Exception_UnknownTemplateException $e) { + // If the named partial cannot be found, log then return null. + $this->log( + Mustache_Logger::WARNING, + 'Partial not found: "{name}"', + array('name' => $e->getTemplateName()) + ); + } + } + + /** + * Load a Mustache lambda Template by source. + * + * This is a helper method used by Template instances to generate subtemplates for Lambda sections. You can most + * likely ignore it completely. + * + * @param string $source + * @param string $delims (default: null) + * + * @return Mustache_Template + */ + public function loadLambda($source, $delims = null) + { + if ($delims !== null) { + $source = $delims . "\n" . $source; + } + + return $this->loadSource($source, $this->getLambdaCache()); + } + + /** + * Instantiate and return a Mustache Template instance by source. + * + * Optionally provide a Mustache_Cache instance. This is used internally by Mustache_Engine::loadLambda to respect + * the 'cache_lambda_templates' configuration option. + * + * @see Mustache_Engine::loadTemplate + * @see Mustache_Engine::loadPartial + * @see Mustache_Engine::loadLambda + * + * @param string|Mustache_Source $source + * @param Mustache_Cache $cache (default: null) + * + * @return Mustache_Template + */ + private function loadSource($source, Mustache_Cache $cache = null) + { + $className = $this->getTemplateClassName($source); + + if (!isset($this->templates[$className])) { + if ($cache === null) { + $cache = $this->getCache(); + } + + if (!class_exists($className, false)) { + if (!$cache->load($className)) { + $compiled = $this->compile($source); + $cache->cache($className, $compiled); + } + } + + $this->log( + Mustache_Logger::DEBUG, + 'Instantiating template: "{className}"', + array('className' => $className) + ); + + $this->templates[$className] = new $className($this); + } + + return $this->templates[$className]; + } + + /** + * Helper method to tokenize a Mustache template. + * + * @see Mustache_Tokenizer::scan + * + * @param string $source + * + * @return array Tokens + */ + private function tokenize($source) + { + return $this->getTokenizer()->scan($source, $this->delimiters); + } + + /** + * Helper method to parse a Mustache template. + * + * @see Mustache_Parser::parse + * + * @param string $source + * + * @return array Token tree + */ + private function parse($source) + { + $parser = $this->getParser(); + $parser->setPragmas($this->getPragmas()); + + return $parser->parse($this->tokenize($source)); + } + + /** + * Helper method to compile a Mustache template. + * + * @see Mustache_Compiler::compile + * + * @param string|Mustache_Source $source + * + * @return string generated Mustache template class code + */ + private function compile($source) + { + $name = $this->getTemplateClassName($source); + + $this->log( + Mustache_Logger::INFO, + 'Compiling template to "{className}" class', + array('className' => $name) + ); + + if ($source instanceof Mustache_Source) { + $source = $source->getSource(); + } + $tree = $this->parse($source); + + $compiler = $this->getCompiler(); + $compiler->setPragmas($this->getPragmas()); + + return $compiler->compile($source, $tree, $name, isset($this->escape), $this->charset, $this->strictCallables, $this->entityFlags); + } + + /** + * Add a log record if logging is enabled. + * + * @param int $level The logging level + * @param string $message The log message + * @param array $context The log context + */ + private function log($level, $message, array $context = array()) + { + if (isset($this->logger)) { + $this->logger->log($level, $message, $context); + } + } +} diff --git a/admin/lib/vendor/mustache/mustache/src/Mustache/Exception.php b/admin/lib/vendor/mustache/mustache/src/Mustache/Exception.php new file mode 100644 index 0000000..d4001a9 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/src/Mustache/Exception.php @@ -0,0 +1,18 @@ +token = $token; + if (version_compare(PHP_VERSION, '5.3.0', '>=')) { + parent::__construct($msg, 0, $previous); + } else { + parent::__construct($msg); // @codeCoverageIgnore + } + } + + /** + * @return array + */ + public function getToken() + { + return $this->token; + } +} diff --git a/admin/lib/vendor/mustache/mustache/src/Mustache/Exception/UnknownFilterException.php b/admin/lib/vendor/mustache/mustache/src/Mustache/Exception/UnknownFilterException.php new file mode 100644 index 0000000..0651c17 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/src/Mustache/Exception/UnknownFilterException.php @@ -0,0 +1,38 @@ +filterName = $filterName; + $message = sprintf('Unknown filter: %s', $filterName); + if (version_compare(PHP_VERSION, '5.3.0', '>=')) { + parent::__construct($message, 0, $previous); + } else { + parent::__construct($message); // @codeCoverageIgnore + } + } + + public function getFilterName() + { + return $this->filterName; + } +} diff --git a/admin/lib/vendor/mustache/mustache/src/Mustache/Exception/UnknownHelperException.php b/admin/lib/vendor/mustache/mustache/src/Mustache/Exception/UnknownHelperException.php new file mode 100644 index 0000000..193be78 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/src/Mustache/Exception/UnknownHelperException.php @@ -0,0 +1,38 @@ +helperName = $helperName; + $message = sprintf('Unknown helper: %s', $helperName); + if (version_compare(PHP_VERSION, '5.3.0', '>=')) { + parent::__construct($message, 0, $previous); + } else { + parent::__construct($message); // @codeCoverageIgnore + } + } + + public function getHelperName() + { + return $this->helperName; + } +} diff --git a/admin/lib/vendor/mustache/mustache/src/Mustache/Exception/UnknownTemplateException.php b/admin/lib/vendor/mustache/mustache/src/Mustache/Exception/UnknownTemplateException.php new file mode 100644 index 0000000..32a778a --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/src/Mustache/Exception/UnknownTemplateException.php @@ -0,0 +1,38 @@ +templateName = $templateName; + $message = sprintf('Unknown template: %s', $templateName); + if (version_compare(PHP_VERSION, '5.3.0', '>=')) { + parent::__construct($message, 0, $previous); + } else { + parent::__construct($message); // @codeCoverageIgnore + } + } + + public function getTemplateName() + { + return $this->templateName; + } +} diff --git a/admin/lib/vendor/mustache/mustache/src/Mustache/HelperCollection.php b/admin/lib/vendor/mustache/mustache/src/Mustache/HelperCollection.php new file mode 100644 index 0000000..5d8f73c --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/src/Mustache/HelperCollection.php @@ -0,0 +1,172 @@ + $helper` pairs. + * + * @throws Mustache_Exception_InvalidArgumentException if the $helpers argument isn't an array or Traversable + * + * @param array|Traversable $helpers (default: null) + */ + public function __construct($helpers = null) + { + if ($helpers === null) { + return; + } + + if (!is_array($helpers) && !$helpers instanceof Traversable) { + throw new Mustache_Exception_InvalidArgumentException('HelperCollection constructor expects an array of helpers'); + } + + foreach ($helpers as $name => $helper) { + $this->add($name, $helper); + } + } + + /** + * Magic mutator. + * + * @see Mustache_HelperCollection::add + * + * @param string $name + * @param mixed $helper + */ + public function __set($name, $helper) + { + $this->add($name, $helper); + } + + /** + * Add a helper to this collection. + * + * @param string $name + * @param mixed $helper + */ + public function add($name, $helper) + { + $this->helpers[$name] = $helper; + } + + /** + * Magic accessor. + * + * @see Mustache_HelperCollection::get + * + * @param string $name + * + * @return mixed Helper + */ + public function __get($name) + { + return $this->get($name); + } + + /** + * Get a helper by name. + * + * @throws Mustache_Exception_UnknownHelperException If helper does not exist + * + * @param string $name + * + * @return mixed Helper + */ + public function get($name) + { + if (!$this->has($name)) { + throw new Mustache_Exception_UnknownHelperException($name); + } + + return $this->helpers[$name]; + } + + /** + * Magic isset(). + * + * @see Mustache_HelperCollection::has + * + * @param string $name + * + * @return bool True if helper is present + */ + public function __isset($name) + { + return $this->has($name); + } + + /** + * Check whether a given helper is present in the collection. + * + * @param string $name + * + * @return bool True if helper is present + */ + public function has($name) + { + return array_key_exists($name, $this->helpers); + } + + /** + * Magic unset(). + * + * @see Mustache_HelperCollection::remove + * + * @param string $name + */ + public function __unset($name) + { + $this->remove($name); + } + + /** + * Check whether a given helper is present in the collection. + * + * @throws Mustache_Exception_UnknownHelperException if the requested helper is not present + * + * @param string $name + */ + public function remove($name) + { + if (!$this->has($name)) { + throw new Mustache_Exception_UnknownHelperException($name); + } + + unset($this->helpers[$name]); + } + + /** + * Clear the helper collection. + * + * Removes all helpers from this collection + */ + public function clear() + { + $this->helpers = array(); + } + + /** + * Check whether the helper collection is empty. + * + * @return bool True if the collection is empty + */ + public function isEmpty() + { + return empty($this->helpers); + } +} diff --git a/admin/lib/vendor/mustache/mustache/src/Mustache/LambdaHelper.php b/admin/lib/vendor/mustache/mustache/src/Mustache/LambdaHelper.php new file mode 100644 index 0000000..e93dbfa --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/src/Mustache/LambdaHelper.php @@ -0,0 +1,76 @@ + =}}`. (default: null) + */ + public function __construct(Mustache_Engine $mustache, Mustache_Context $context, $delims = null) + { + $this->mustache = $mustache; + $this->context = $context; + $this->delims = $delims; + } + + /** + * Render a string as a Mustache template with the current rendering context. + * + * @param string $string + * + * @return string Rendered template + */ + public function render($string) + { + return $this->mustache + ->loadLambda((string) $string, $this->delims) + ->renderInternal($this->context); + } + + /** + * Render a string as a Mustache template with the current rendering context. + * + * @param string $string + * + * @return string Rendered template + */ + public function __invoke($string) + { + return $this->render($string); + } + + /** + * Get a Lambda Helper with custom delimiters. + * + * @param string $delims Custom delimiters, in the format `{{= <% %> =}}` + * + * @return Mustache_LambdaHelper + */ + public function withDelimiters($delims) + { + return new self($this->mustache, $this->context, $delims); + } +} diff --git a/admin/lib/vendor/mustache/mustache/src/Mustache/Loader.php b/admin/lib/vendor/mustache/mustache/src/Mustache/Loader.php new file mode 100644 index 0000000..23adba1 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/src/Mustache/Loader.php @@ -0,0 +1,27 @@ + '{{ bar }}', + * 'baz' => 'Hey {{ qux }}!' + * ); + * + * $tpl = $loader->load('foo'); // '{{ bar }}' + * + * The ArrayLoader is used internally as a partials loader by Mustache_Engine instance when an array of partials + * is set. It can also be used as a quick-and-dirty Template loader. + */ +class Mustache_Loader_ArrayLoader implements Mustache_Loader, Mustache_Loader_MutableLoader +{ + private $templates; + + /** + * ArrayLoader constructor. + * + * @param array $templates Associative array of Template source (default: array()) + */ + public function __construct(array $templates = array()) + { + $this->templates = $templates; + } + + /** + * Load a Template. + * + * @throws Mustache_Exception_UnknownTemplateException If a template file is not found + * + * @param string $name + * + * @return string Mustache Template source + */ + public function load($name) + { + if (!isset($this->templates[$name])) { + throw new Mustache_Exception_UnknownTemplateException($name); + } + + return $this->templates[$name]; + } + + /** + * Set an associative array of Template sources for this loader. + * + * @param array $templates + */ + public function setTemplates(array $templates) + { + $this->templates = $templates; + } + + /** + * Set a Template source by name. + * + * @param string $name + * @param string $template Mustache Template source + */ + public function setTemplate($name, $template) + { + $this->templates[$name] = $template; + } +} diff --git a/admin/lib/vendor/mustache/mustache/src/Mustache/Loader/CascadingLoader.php b/admin/lib/vendor/mustache/mustache/src/Mustache/Loader/CascadingLoader.php new file mode 100644 index 0000000..3fb6353 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/src/Mustache/Loader/CascadingLoader.php @@ -0,0 +1,69 @@ +loaders = array(); + foreach ($loaders as $loader) { + $this->addLoader($loader); + } + } + + /** + * Add a Loader instance. + * + * @param Mustache_Loader $loader + */ + public function addLoader(Mustache_Loader $loader) + { + $this->loaders[] = $loader; + } + + /** + * Load a Template by name. + * + * @throws Mustache_Exception_UnknownTemplateException If a template file is not found + * + * @param string $name + * + * @return string Mustache Template source + */ + public function load($name) + { + foreach ($this->loaders as $loader) { + try { + return $loader->load($name); + } catch (Mustache_Exception_UnknownTemplateException $e) { + // do nothing, check the next loader. + } + } + + throw new Mustache_Exception_UnknownTemplateException($name); + } +} diff --git a/admin/lib/vendor/mustache/mustache/src/Mustache/Loader/FilesystemLoader.php b/admin/lib/vendor/mustache/mustache/src/Mustache/Loader/FilesystemLoader.php new file mode 100644 index 0000000..e366df7 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/src/Mustache/Loader/FilesystemLoader.php @@ -0,0 +1,135 @@ +load('foo'); // equivalent to `file_get_contents(dirname(__FILE__).'/views/foo.mustache'); + * + * This is probably the most useful Mustache Loader implementation. It can be used for partials and normal Templates: + * + * $m = new Mustache(array( + * 'loader' => new Mustache_Loader_FilesystemLoader(dirname(__FILE__).'/views'), + * 'partials_loader' => new Mustache_Loader_FilesystemLoader(dirname(__FILE__).'/views/partials'), + * )); + */ +class Mustache_Loader_FilesystemLoader implements Mustache_Loader +{ + private $baseDir; + private $extension = '.mustache'; + private $templates = array(); + + /** + * Mustache filesystem Loader constructor. + * + * Passing an $options array allows overriding certain Loader options during instantiation: + * + * $options = array( + * // The filename extension used for Mustache templates. Defaults to '.mustache' + * 'extension' => '.ms', + * ); + * + * @throws Mustache_Exception_RuntimeException if $baseDir does not exist + * + * @param string $baseDir Base directory containing Mustache template files + * @param array $options Array of Loader options (default: array()) + */ + public function __construct($baseDir, array $options = array()) + { + $this->baseDir = $baseDir; + + if (strpos($this->baseDir, '://') === false) { + $this->baseDir = realpath($this->baseDir); + } + + if ($this->shouldCheckPath() && !is_dir($this->baseDir)) { + throw new Mustache_Exception_RuntimeException(sprintf('FilesystemLoader baseDir must be a directory: %s', $baseDir)); + } + + if (array_key_exists('extension', $options)) { + if (empty($options['extension'])) { + $this->extension = ''; + } else { + $this->extension = '.' . ltrim($options['extension'], '.'); + } + } + } + + /** + * Load a Template by name. + * + * $loader = new Mustache_Loader_FilesystemLoader(dirname(__FILE__).'/views'); + * $loader->load('admin/dashboard'); // loads "./views/admin/dashboard.mustache"; + * + * @param string $name + * + * @return string Mustache Template source + */ + public function load($name) + { + if (!isset($this->templates[$name])) { + $this->templates[$name] = $this->loadFile($name); + } + + return $this->templates[$name]; + } + + /** + * Helper function for loading a Mustache file by name. + * + * @throws Mustache_Exception_UnknownTemplateException If a template file is not found + * + * @param string $name + * + * @return string Mustache Template source + */ + protected function loadFile($name) + { + $fileName = $this->getFileName($name); + + if ($this->shouldCheckPath() && !file_exists($fileName)) { + throw new Mustache_Exception_UnknownTemplateException($name); + } + + return file_get_contents($fileName); + } + + /** + * Helper function for getting a Mustache template file name. + * + * @param string $name + * + * @return string Template file name + */ + protected function getFileName($name) + { + $fileName = $this->baseDir . '/' . $name; + if (substr($fileName, 0 - strlen($this->extension)) !== $this->extension) { + $fileName .= $this->extension; + } + + return $fileName; + } + + /** + * Only check if baseDir is a directory and requested templates are files if + * baseDir is using the filesystem stream wrapper. + * + * @return bool Whether to check `is_dir` and `file_exists` + */ + protected function shouldCheckPath() + { + return strpos($this->baseDir, '://') === false || strpos($this->baseDir, 'file://') === 0; + } +} diff --git a/admin/lib/vendor/mustache/mustache/src/Mustache/Loader/InlineLoader.php b/admin/lib/vendor/mustache/mustache/src/Mustache/Loader/InlineLoader.php new file mode 100644 index 0000000..ae297fe --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/src/Mustache/Loader/InlineLoader.php @@ -0,0 +1,123 @@ +load('hello'); + * $goodbye = $loader->load('goodbye'); + * + * __halt_compiler(); + * + * @@ hello + * Hello, {{ planet }}! + * + * @@ goodbye + * Goodbye, cruel {{ planet }} + * + * Templates are deliniated by lines containing only `@@ name`. + * + * The InlineLoader is well-suited to micro-frameworks such as Silex: + * + * $app->register(new MustacheServiceProvider, array( + * 'mustache.loader' => new Mustache_Loader_InlineLoader(__FILE__, __COMPILER_HALT_OFFSET__) + * )); + * + * $app->get('/{name}', function ($name) use ($app) { + * return $app['mustache']->render('hello', compact('name')); + * }) + * ->value('name', 'world'); + * + * // ... + * + * __halt_compiler(); + * + * @@ hello + * Hello, {{ name }}! + */ +class Mustache_Loader_InlineLoader implements Mustache_Loader +{ + protected $fileName; + protected $offset; + protected $templates; + + /** + * The InlineLoader requires a filename and offset to process templates. + * + * The magic constants `__FILE__` and `__COMPILER_HALT_OFFSET__` are usually + * perfectly suited to the job: + * + * $loader = new Mustache_Loader_InlineLoader(__FILE__, __COMPILER_HALT_OFFSET__); + * + * Note that this only works if the loader is instantiated inside the same + * file as the inline templates. If the templates are located in another + * file, it would be necessary to manually specify the filename and offset. + * + * @param string $fileName The file to parse for inline templates + * @param int $offset A string offset for the start of the templates. + * This usually coincides with the `__halt_compiler` + * call, and the `__COMPILER_HALT_OFFSET__` + */ + public function __construct($fileName, $offset) + { + if (!is_file($fileName)) { + throw new Mustache_Exception_InvalidArgumentException('InlineLoader expects a valid filename.'); + } + + if (!is_int($offset) || $offset < 0) { + throw new Mustache_Exception_InvalidArgumentException('InlineLoader expects a valid file offset.'); + } + + $this->fileName = $fileName; + $this->offset = $offset; + } + + /** + * Load a Template by name. + * + * @throws Mustache_Exception_UnknownTemplateException If a template file is not found + * + * @param string $name + * + * @return string Mustache Template source + */ + public function load($name) + { + $this->loadTemplates(); + + if (!array_key_exists($name, $this->templates)) { + throw new Mustache_Exception_UnknownTemplateException($name); + } + + return $this->templates[$name]; + } + + /** + * Parse and load templates from the end of a source file. + */ + protected function loadTemplates() + { + if ($this->templates === null) { + $this->templates = array(); + $data = file_get_contents($this->fileName, false, null, $this->offset); + foreach (preg_split("/^@@(?= [\w\d\.]+$)/m", $data, -1) as $chunk) { + if (trim($chunk)) { + list($name, $content) = explode("\n", $chunk, 2); + $this->templates[trim($name)] = trim($content); + } + } + } + } +} diff --git a/admin/lib/vendor/mustache/mustache/src/Mustache/Loader/MutableLoader.php b/admin/lib/vendor/mustache/mustache/src/Mustache/Loader/MutableLoader.php new file mode 100644 index 0000000..57fe5be --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/src/Mustache/Loader/MutableLoader.php @@ -0,0 +1,31 @@ + '.ms', + * 'stat_props' => array('size', 'mtime'), + * ); + * + * Specifying 'stat_props' overrides the stat properties used to invalidate the template cache. By default, this + * uses 'mtime' and 'size', but this can be set to any of the properties supported by stat(): + * + * http://php.net/manual/en/function.stat.php + * + * You can also disable filesystem stat entirely: + * + * $options = array('stat_props' => null); + * + * But with great power comes great responsibility. Namely, if you disable stat-based cache invalidation, + * YOU MUST CLEAR THE TEMPLATE CACHE YOURSELF when your templates change. Make it part of your build or deploy + * process so you don't forget! + * + * @throws Mustache_Exception_RuntimeException if $baseDir does not exist. + * + * @param string $baseDir Base directory containing Mustache template files. + * @param array $options Array of Loader options (default: array()) + */ + public function __construct($baseDir, array $options = array()) + { + parent::__construct($baseDir, $options); + + if (array_key_exists('stat_props', $options)) { + if (empty($options['stat_props'])) { + $this->statProps = array(); + } else { + $this->statProps = $options['stat_props']; + } + } else { + $this->statProps = array('size', 'mtime'); + } + } + + /** + * Helper function for loading a Mustache file by name. + * + * @throws Mustache_Exception_UnknownTemplateException If a template file is not found. + * + * @param string $name + * + * @return Mustache_Source Mustache Template source + */ + protected function loadFile($name) + { + $fileName = $this->getFileName($name); + + if (!file_exists($fileName)) { + throw new Mustache_Exception_UnknownTemplateException($name); + } + + return new Mustache_Source_FilesystemSource($fileName, $this->statProps); + } +} diff --git a/admin/lib/vendor/mustache/mustache/src/Mustache/Loader/StringLoader.php b/admin/lib/vendor/mustache/mustache/src/Mustache/Loader/StringLoader.php new file mode 100644 index 0000000..7012c03 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/src/Mustache/Loader/StringLoader.php @@ -0,0 +1,39 @@ +load('{{ foo }}'); // '{{ foo }}' + * + * This is the default Template Loader instance used by Mustache: + * + * $m = new Mustache; + * $tpl = $m->loadTemplate('{{ foo }}'); + * echo $tpl->render(array('foo' => 'bar')); // "bar" + */ +class Mustache_Loader_StringLoader implements Mustache_Loader +{ + /** + * Load a Template by source. + * + * @param string $name Mustache Template source + * + * @return string Mustache Template source + */ + public function load($name) + { + return $name; + } +} diff --git a/admin/lib/vendor/mustache/mustache/src/Mustache/Logger.php b/admin/lib/vendor/mustache/mustache/src/Mustache/Logger.php new file mode 100644 index 0000000..cb4037a --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/src/Mustache/Logger.php @@ -0,0 +1,126 @@ +log(Mustache_Logger::EMERGENCY, $message, $context); + } + + /** + * Action must be taken immediately. + * + * Example: Entire website down, database unavailable, etc. This should + * trigger the SMS alerts and wake you up. + * + * @param string $message + * @param array $context + */ + public function alert($message, array $context = array()) + { + $this->log(Mustache_Logger::ALERT, $message, $context); + } + + /** + * Critical conditions. + * + * Example: Application component unavailable, unexpected exception. + * + * @param string $message + * @param array $context + */ + public function critical($message, array $context = array()) + { + $this->log(Mustache_Logger::CRITICAL, $message, $context); + } + + /** + * Runtime errors that do not require immediate action but should typically + * be logged and monitored. + * + * @param string $message + * @param array $context + */ + public function error($message, array $context = array()) + { + $this->log(Mustache_Logger::ERROR, $message, $context); + } + + /** + * Exceptional occurrences that are not errors. + * + * Example: Use of deprecated APIs, poor use of an API, undesirable things + * that are not necessarily wrong. + * + * @param string $message + * @param array $context + */ + public function warning($message, array $context = array()) + { + $this->log(Mustache_Logger::WARNING, $message, $context); + } + + /** + * Normal but significant events. + * + * @param string $message + * @param array $context + */ + public function notice($message, array $context = array()) + { + $this->log(Mustache_Logger::NOTICE, $message, $context); + } + + /** + * Interesting events. + * + * Example: User logs in, SQL logs. + * + * @param string $message + * @param array $context + */ + public function info($message, array $context = array()) + { + $this->log(Mustache_Logger::INFO, $message, $context); + } + + /** + * Detailed debug information. + * + * @param string $message + * @param array $context + */ + public function debug($message, array $context = array()) + { + $this->log(Mustache_Logger::DEBUG, $message, $context); + } +} diff --git a/admin/lib/vendor/mustache/mustache/src/Mustache/Logger/StreamLogger.php b/admin/lib/vendor/mustache/mustache/src/Mustache/Logger/StreamLogger.php new file mode 100644 index 0000000..402a148 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/src/Mustache/Logger/StreamLogger.php @@ -0,0 +1,194 @@ + 100, + self::INFO => 200, + self::NOTICE => 250, + self::WARNING => 300, + self::ERROR => 400, + self::CRITICAL => 500, + self::ALERT => 550, + self::EMERGENCY => 600, + ); + + protected $level; + protected $stream = null; + protected $url = null; + + /** + * @throws InvalidArgumentException if the logging level is unknown + * + * @param resource|string $stream Resource instance or URL + * @param int $level The minimum logging level at which this handler will be triggered + */ + public function __construct($stream, $level = Mustache_Logger::ERROR) + { + $this->setLevel($level); + + if (is_resource($stream)) { + $this->stream = $stream; + } else { + $this->url = $stream; + } + } + + /** + * Close stream resources. + */ + public function __destruct() + { + if (is_resource($this->stream)) { + fclose($this->stream); + } + } + + /** + * Set the minimum logging level. + * + * @throws Mustache_Exception_InvalidArgumentException if the logging level is unknown + * + * @param int $level The minimum logging level which will be written + */ + public function setLevel($level) + { + if (!array_key_exists($level, self::$levels)) { + throw new Mustache_Exception_InvalidArgumentException(sprintf('Unexpected logging level: %s', $level)); + } + + $this->level = $level; + } + + /** + * Get the current minimum logging level. + * + * @return int + */ + public function getLevel() + { + return $this->level; + } + + /** + * Logs with an arbitrary level. + * + * @throws Mustache_Exception_InvalidArgumentException if the logging level is unknown + * + * @param mixed $level + * @param string $message + * @param array $context + */ + public function log($level, $message, array $context = array()) + { + if (!array_key_exists($level, self::$levels)) { + throw new Mustache_Exception_InvalidArgumentException(sprintf('Unexpected logging level: %s', $level)); + } + + if (self::$levels[$level] >= self::$levels[$this->level]) { + $this->writeLog($level, $message, $context); + } + } + + /** + * Write a record to the log. + * + * @throws Mustache_Exception_LogicException If neither a stream resource nor url is present + * @throws Mustache_Exception_RuntimeException If the stream url cannot be opened + * + * @param int $level The logging level + * @param string $message The log message + * @param array $context The log context + */ + protected function writeLog($level, $message, array $context = array()) + { + if (!is_resource($this->stream)) { + if (!isset($this->url)) { + throw new Mustache_Exception_LogicException('Missing stream url, the stream can not be opened. This may be caused by a premature call to close().'); + } + + $this->stream = fopen($this->url, 'a'); + if (!is_resource($this->stream)) { + // @codeCoverageIgnoreStart + throw new Mustache_Exception_RuntimeException(sprintf('The stream or file "%s" could not be opened.', $this->url)); + // @codeCoverageIgnoreEnd + } + } + + fwrite($this->stream, self::formatLine($level, $message, $context)); + } + + /** + * Gets the name of the logging level. + * + * @throws InvalidArgumentException if the logging level is unknown + * + * @param int $level + * + * @return string + */ + protected static function getLevelName($level) + { + return strtoupper($level); + } + + /** + * Format a log line for output. + * + * @param int $level The logging level + * @param string $message The log message + * @param array $context The log context + * + * @return string + */ + protected static function formatLine($level, $message, array $context = array()) + { + return sprintf( + "%s: %s\n", + self::getLevelName($level), + self::interpolateMessage($message, $context) + ); + } + + /** + * Interpolate context values into the message placeholders. + * + * @param string $message + * @param array $context + * + * @return string + */ + protected static function interpolateMessage($message, array $context = array()) + { + if (strpos($message, '{') === false) { + return $message; + } + + // build a replacement array with braces around the context keys + $replace = array(); + foreach ($context as $key => $val) { + $replace['{' . $key . '}'] = $val; + } + + // interpolate replacement values into the the message and return + return strtr($message, $replace); + } +} diff --git a/admin/lib/vendor/mustache/mustache/src/Mustache/Parser.php b/admin/lib/vendor/mustache/mustache/src/Mustache/Parser.php new file mode 100644 index 0000000..0ec4192 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/src/Mustache/Parser.php @@ -0,0 +1,317 @@ +lineNum = -1; + $this->lineTokens = 0; + $this->pragmas = $this->defaultPragmas; + + $this->pragmaFilters = isset($this->pragmas[Mustache_Engine::PRAGMA_FILTERS]); + $this->pragmaBlocks = isset($this->pragmas[Mustache_Engine::PRAGMA_BLOCKS]); + + return $this->buildTree($tokens); + } + + /** + * Enable pragmas across all templates, regardless of the presence of pragma + * tags in the individual templates. + * + * @internal Users should set global pragmas in Mustache_Engine, not here :) + * + * @param string[] $pragmas + */ + public function setPragmas(array $pragmas) + { + $this->pragmas = array(); + foreach ($pragmas as $pragma) { + $this->enablePragma($pragma); + } + $this->defaultPragmas = $this->pragmas; + } + + /** + * Helper method for recursively building a parse tree. + * + * @throws Mustache_Exception_SyntaxException when nesting errors or mismatched section tags are encountered + * + * @param array &$tokens Set of Mustache tokens + * @param array $parent Parent token (default: null) + * + * @return array Mustache Token parse tree + */ + private function buildTree(array &$tokens, array $parent = null) + { + $nodes = array(); + + while (!empty($tokens)) { + $token = array_shift($tokens); + + if ($token[Mustache_Tokenizer::LINE] === $this->lineNum) { + $this->lineTokens++; + } else { + $this->lineNum = $token[Mustache_Tokenizer::LINE]; + $this->lineTokens = 0; + } + + if ($this->pragmaFilters && isset($token[Mustache_Tokenizer::NAME])) { + list($name, $filters) = $this->getNameAndFilters($token[Mustache_Tokenizer::NAME]); + if (!empty($filters)) { + $token[Mustache_Tokenizer::NAME] = $name; + $token[Mustache_Tokenizer::FILTERS] = $filters; + } + } + + switch ($token[Mustache_Tokenizer::TYPE]) { + case Mustache_Tokenizer::T_DELIM_CHANGE: + $this->checkIfTokenIsAllowedInParent($parent, $token); + $this->clearStandaloneLines($nodes, $tokens); + break; + + case Mustache_Tokenizer::T_SECTION: + case Mustache_Tokenizer::T_INVERTED: + $this->checkIfTokenIsAllowedInParent($parent, $token); + $this->clearStandaloneLines($nodes, $tokens); + $nodes[] = $this->buildTree($tokens, $token); + break; + + case Mustache_Tokenizer::T_END_SECTION: + if (!isset($parent)) { + $msg = sprintf( + 'Unexpected closing tag: /%s on line %d', + $token[Mustache_Tokenizer::NAME], + $token[Mustache_Tokenizer::LINE] + ); + throw new Mustache_Exception_SyntaxException($msg, $token); + } + + if ($token[Mustache_Tokenizer::NAME] !== $parent[Mustache_Tokenizer::NAME]) { + $msg = sprintf( + 'Nesting error: %s (on line %d) vs. %s (on line %d)', + $parent[Mustache_Tokenizer::NAME], + $parent[Mustache_Tokenizer::LINE], + $token[Mustache_Tokenizer::NAME], + $token[Mustache_Tokenizer::LINE] + ); + throw new Mustache_Exception_SyntaxException($msg, $token); + } + + $this->clearStandaloneLines($nodes, $tokens); + $parent[Mustache_Tokenizer::END] = $token[Mustache_Tokenizer::INDEX]; + $parent[Mustache_Tokenizer::NODES] = $nodes; + + return $parent; + + case Mustache_Tokenizer::T_PARTIAL: + $this->checkIfTokenIsAllowedInParent($parent, $token); + //store the whitespace prefix for laters! + if ($indent = $this->clearStandaloneLines($nodes, $tokens)) { + $token[Mustache_Tokenizer::INDENT] = $indent[Mustache_Tokenizer::VALUE]; + } + $nodes[] = $token; + break; + + case Mustache_Tokenizer::T_PARENT: + $this->checkIfTokenIsAllowedInParent($parent, $token); + $nodes[] = $this->buildTree($tokens, $token); + break; + + case Mustache_Tokenizer::T_BLOCK_VAR: + if ($this->pragmaBlocks) { + // BLOCKS pragma is enabled, let's do this! + if (isset($parent) && $parent[Mustache_Tokenizer::TYPE] === Mustache_Tokenizer::T_PARENT) { + $token[Mustache_Tokenizer::TYPE] = Mustache_Tokenizer::T_BLOCK_ARG; + } + $this->clearStandaloneLines($nodes, $tokens); + $nodes[] = $this->buildTree($tokens, $token); + } else { + // pretend this was just a normal "escaped" token... + $token[Mustache_Tokenizer::TYPE] = Mustache_Tokenizer::T_ESCAPED; + // TODO: figure out how to figure out if there was a space after this dollar: + $token[Mustache_Tokenizer::NAME] = '$' . $token[Mustache_Tokenizer::NAME]; + $nodes[] = $token; + } + break; + + case Mustache_Tokenizer::T_PRAGMA: + $this->enablePragma($token[Mustache_Tokenizer::NAME]); + // no break + + case Mustache_Tokenizer::T_COMMENT: + $this->clearStandaloneLines($nodes, $tokens); + $nodes[] = $token; + break; + + default: + $nodes[] = $token; + break; + } + } + + if (isset($parent)) { + $msg = sprintf( + 'Missing closing tag: %s opened on line %d', + $parent[Mustache_Tokenizer::NAME], + $parent[Mustache_Tokenizer::LINE] + ); + throw new Mustache_Exception_SyntaxException($msg, $parent); + } + + return $nodes; + } + + /** + * Clear standalone line tokens. + * + * Returns a whitespace token for indenting partials, if applicable. + * + * @param array $nodes Parsed nodes + * @param array $tokens Tokens to be parsed + * + * @return array|null Resulting indent token, if any + */ + private function clearStandaloneLines(array &$nodes, array &$tokens) + { + if ($this->lineTokens > 1) { + // this is the third or later node on this line, so it can't be standalone + return; + } + + $prev = null; + if ($this->lineTokens === 1) { + // this is the second node on this line, so it can't be standalone + // unless the previous node is whitespace. + if ($prev = end($nodes)) { + if (!$this->tokenIsWhitespace($prev)) { + return; + } + } + } + + if ($next = reset($tokens)) { + // If we're on a new line, bail. + if ($next[Mustache_Tokenizer::LINE] !== $this->lineNum) { + return; + } + + // If the next token isn't whitespace, bail. + if (!$this->tokenIsWhitespace($next)) { + return; + } + + if (count($tokens) !== 1) { + // Unless it's the last token in the template, the next token + // must end in newline for this to be standalone. + if (substr($next[Mustache_Tokenizer::VALUE], -1) !== "\n") { + return; + } + } + + // Discard the whitespace suffix + array_shift($tokens); + } + + if ($prev) { + // Return the whitespace prefix, if any + return array_pop($nodes); + } + } + + /** + * Check whether token is a whitespace token. + * + * True if token type is T_TEXT and value is all whitespace characters. + * + * @param array $token + * + * @return bool True if token is a whitespace token + */ + private function tokenIsWhitespace(array $token) + { + if ($token[Mustache_Tokenizer::TYPE] === Mustache_Tokenizer::T_TEXT) { + return preg_match('/^\s*$/', $token[Mustache_Tokenizer::VALUE]); + } + + return false; + } + + /** + * Check whether a token is allowed inside a parent tag. + * + * @throws Mustache_Exception_SyntaxException if an invalid token is found inside a parent tag + * + * @param array|null $parent + * @param array $token + */ + private function checkIfTokenIsAllowedInParent($parent, array $token) + { + if (isset($parent) && $parent[Mustache_Tokenizer::TYPE] === Mustache_Tokenizer::T_PARENT) { + throw new Mustache_Exception_SyntaxException('Illegal content in < parent tag', $token); + } + } + + /** + * Split a tag name into name and filters. + * + * @param string $name + * + * @return array [Tag name, Array of filters] + */ + private function getNameAndFilters($name) + { + $filters = array_map('trim', explode('|', $name)); + $name = array_shift($filters); + + return array($name, $filters); + } + + /** + * Enable a pragma. + * + * @param string $name + */ + private function enablePragma($name) + { + $this->pragmas[$name] = true; + + switch ($name) { + case Mustache_Engine::PRAGMA_BLOCKS: + $this->pragmaBlocks = true; + break; + + case Mustache_Engine::PRAGMA_FILTERS: + $this->pragmaFilters = true; + break; + } + } +} diff --git a/admin/lib/vendor/mustache/mustache/src/Mustache/Source.php b/admin/lib/vendor/mustache/mustache/src/Mustache/Source.php new file mode 100644 index 0000000..278c2cb --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/src/Mustache/Source.php @@ -0,0 +1,40 @@ +fileName = $fileName; + $this->statProps = $statProps; + } + + /** + * Get the Source key (used to generate the compiled class name). + * + * @throws RuntimeException when a source file cannot be read + * + * @return string + */ + public function getKey() + { + $chunks = array( + 'fileName' => $this->fileName, + ); + + if (!empty($this->statProps)) { + if (!isset($this->stat)) { + $this->stat = @stat($this->fileName); + } + + if ($this->stat === false) { + throw new RuntimeException(sprintf('Failed to read source file "%s".', $this->fileName)); + } + + foreach ($this->statProps as $prop) { + $chunks[$prop] = $this->stat[$prop]; + } + } + + return json_encode($chunks); + } + + /** + * Get the template Source. + * + * @return string + */ + public function getSource() + { + return file_get_contents($this->fileName); + } +} diff --git a/admin/lib/vendor/mustache/mustache/src/Mustache/Template.php b/admin/lib/vendor/mustache/mustache/src/Mustache/Template.php new file mode 100644 index 0000000..4de8239 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/src/Mustache/Template.php @@ -0,0 +1,180 @@ +mustache = $mustache; + } + + /** + * Mustache Template instances can be treated as a function and rendered by simply calling them. + * + * $m = new Mustache_Engine; + * $tpl = $m->loadTemplate('Hello, {{ name }}!'); + * echo $tpl(array('name' => 'World')); // "Hello, World!" + * + * @see Mustache_Template::render + * + * @param mixed $context Array or object rendering context (default: array()) + * + * @return string Rendered template + */ + public function __invoke($context = array()) + { + return $this->render($context); + } + + /** + * Render this template given the rendering context. + * + * @param mixed $context Array or object rendering context (default: array()) + * + * @return string Rendered template + */ + public function render($context = array()) + { + return $this->renderInternal( + $this->prepareContextStack($context) + ); + } + + /** + * Internal rendering method implemented by Mustache Template concrete subclasses. + * + * This is where the magic happens :) + * + * NOTE: This method is not part of the Mustache.php public API. + * + * @param Mustache_Context $context + * @param string $indent (default: '') + * + * @return string Rendered template + */ + abstract public function renderInternal(Mustache_Context $context, $indent = ''); + + /** + * Tests whether a value should be iterated over (e.g. in a section context). + * + * In most languages there are two distinct array types: list and hash (or whatever you want to call them). Lists + * should be iterated, hashes should be treated as objects. Mustache follows this paradigm for Ruby, Javascript, + * Java, Python, etc. + * + * PHP, however, treats lists and hashes as one primitive type: array. So Mustache.php needs a way to distinguish + * between between a list of things (numeric, normalized array) and a set of variables to be used as section context + * (associative array). In other words, this will be iterated over: + * + * $items = array( + * array('name' => 'foo'), + * array('name' => 'bar'), + * array('name' => 'baz'), + * ); + * + * ... but this will be used as a section context block: + * + * $items = array( + * 1 => array('name' => 'foo'), + * 'banana' => array('name' => 'bar'), + * 42 => array('name' => 'baz'), + * ); + * + * @param mixed $value + * + * @return bool True if the value is 'iterable' + */ + protected function isIterable($value) + { + switch (gettype($value)) { + case 'object': + return $value instanceof Traversable; + + case 'array': + $i = 0; + foreach ($value as $k => $v) { + if ($k !== $i++) { + return false; + } + } + + return true; + + default: + return false; + } + } + + /** + * Helper method to prepare the Context stack. + * + * Adds the Mustache HelperCollection to the stack's top context frame if helpers are present. + * + * @param mixed $context Optional first context frame (default: null) + * + * @return Mustache_Context + */ + protected function prepareContextStack($context = null) + { + $stack = new Mustache_Context(); + + $helpers = $this->mustache->getHelpers(); + if (!$helpers->isEmpty()) { + $stack->push($helpers); + } + + if (!empty($context)) { + $stack->push($context); + } + + return $stack; + } + + /** + * Resolve a context value. + * + * Invoke the value if it is callable, otherwise return the value. + * + * @param mixed $value + * @param Mustache_Context $context + * + * @return string + */ + protected function resolveValue($value, Mustache_Context $context) + { + if (($this->strictCallables ? is_object($value) : !is_string($value)) && is_callable($value)) { + return $this->mustache + ->loadLambda((string) call_user_func($value)) + ->renderInternal($context); + } + + return $value; + } +} diff --git a/admin/lib/vendor/mustache/mustache/src/Mustache/Tokenizer.php b/admin/lib/vendor/mustache/mustache/src/Mustache/Tokenizer.php new file mode 100644 index 0000000..6dbe0cd --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/src/Mustache/Tokenizer.php @@ -0,0 +1,342 @@ +'; + const T_PARENT = '<'; + const T_DELIM_CHANGE = '='; + const T_ESCAPED = '_v'; + const T_UNESCAPED = '{'; + const T_UNESCAPED_2 = '&'; + const T_TEXT = '_t'; + const T_PRAGMA = '%'; + const T_BLOCK_VAR = '$'; + const T_BLOCK_ARG = '$arg'; + + // Valid token types + private static $tagTypes = array( + self::T_SECTION => true, + self::T_INVERTED => true, + self::T_END_SECTION => true, + self::T_COMMENT => true, + self::T_PARTIAL => true, + self::T_PARENT => true, + self::T_DELIM_CHANGE => true, + self::T_ESCAPED => true, + self::T_UNESCAPED => true, + self::T_UNESCAPED_2 => true, + self::T_PRAGMA => true, + self::T_BLOCK_VAR => true, + ); + + // Token properties + const TYPE = 'type'; + const NAME = 'name'; + const OTAG = 'otag'; + const CTAG = 'ctag'; + const LINE = 'line'; + const INDEX = 'index'; + const END = 'end'; + const INDENT = 'indent'; + const NODES = 'nodes'; + const VALUE = 'value'; + const FILTERS = 'filters'; + + private $state; + private $tagType; + private $buffer; + private $tokens; + private $seenTag; + private $line; + + private $otag; + private $otagChar; + private $otagLen; + + private $ctag; + private $ctagChar; + private $ctagLen; + + /** + * Scan and tokenize template source. + * + * @throws Mustache_Exception_SyntaxException when mismatched section tags are encountered + * @throws Mustache_Exception_InvalidArgumentException when $delimiters string is invalid + * + * @param string $text Mustache template source to tokenize + * @param string $delimiters Optionally, pass initial opening and closing delimiters (default: null) + * + * @return array Set of Mustache tokens + */ + public function scan($text, $delimiters = null) + { + // Setting mbstring.func_overload makes things *really* slow. + // Let's do everyone a favor and scan this string as ASCII instead. + // + // @codeCoverageIgnoreStart + $encoding = null; + if (function_exists('mb_internal_encoding') && ini_get('mbstring.func_overload') & 2) { + $encoding = mb_internal_encoding(); + mb_internal_encoding('ASCII'); + } + // @codeCoverageIgnoreEnd + + $this->reset(); + + if ($delimiters = trim($delimiters)) { + $this->setDelimiters($delimiters); + } + + $len = strlen($text); + for ($i = 0; $i < $len; $i++) { + switch ($this->state) { + case self::IN_TEXT: + $char = $text[$i]; + // Test whether it's time to change tags. + if ($char === $this->otagChar && substr($text, $i, $this->otagLen) === $this->otag) { + $i--; + $this->flushBuffer(); + $this->state = self::IN_TAG_TYPE; + } else { + $this->buffer .= $char; + if ($char === "\n") { + $this->flushBuffer(); + $this->line++; + } + } + break; + + case self::IN_TAG_TYPE: + $i += $this->otagLen - 1; + $char = $text[$i + 1]; + if (isset(self::$tagTypes[$char])) { + $tag = $char; + $this->tagType = $tag; + } else { + $tag = null; + $this->tagType = self::T_ESCAPED; + } + + if ($this->tagType === self::T_DELIM_CHANGE) { + $i = $this->changeDelimiters($text, $i); + $this->state = self::IN_TEXT; + } elseif ($this->tagType === self::T_PRAGMA) { + $i = $this->addPragma($text, $i); + $this->state = self::IN_TEXT; + } else { + if ($tag !== null) { + $i++; + } + $this->state = self::IN_TAG; + } + $this->seenTag = $i; + break; + + default: + $char = $text[$i]; + // Test whether it's time to change tags. + if ($char === $this->ctagChar && substr($text, $i, $this->ctagLen) === $this->ctag) { + $token = array( + self::TYPE => $this->tagType, + self::NAME => trim($this->buffer), + self::OTAG => $this->otag, + self::CTAG => $this->ctag, + self::LINE => $this->line, + self::INDEX => ($this->tagType === self::T_END_SECTION) ? $this->seenTag - $this->otagLen : $i + $this->ctagLen, + ); + + if ($this->tagType === self::T_UNESCAPED) { + // Clean up `{{{ tripleStache }}}` style tokens. + if ($this->ctag === '}}') { + if (($i + 2 < $len) && $text[$i + 2] === '}') { + $i++; + } else { + $msg = sprintf( + 'Mismatched tag delimiters: %s on line %d', + $token[self::NAME], + $token[self::LINE] + ); + + throw new Mustache_Exception_SyntaxException($msg, $token); + } + } else { + $lastName = $token[self::NAME]; + if (substr($lastName, -1) === '}') { + $token[self::NAME] = trim(substr($lastName, 0, -1)); + } else { + $msg = sprintf( + 'Mismatched tag delimiters: %s on line %d', + $token[self::NAME], + $token[self::LINE] + ); + + throw new Mustache_Exception_SyntaxException($msg, $token); + } + } + } + + $this->buffer = ''; + $i += $this->ctagLen - 1; + $this->state = self::IN_TEXT; + $this->tokens[] = $token; + } else { + $this->buffer .= $char; + } + break; + } + } + + $this->flushBuffer(); + + // Restore the user's encoding... + // @codeCoverageIgnoreStart + if ($encoding) { + mb_internal_encoding($encoding); + } + // @codeCoverageIgnoreEnd + + return $this->tokens; + } + + /** + * Helper function to reset tokenizer internal state. + */ + private function reset() + { + $this->state = self::IN_TEXT; + $this->tagType = null; + $this->buffer = ''; + $this->tokens = array(); + $this->seenTag = false; + $this->line = 0; + + $this->otag = '{{'; + $this->otagChar = '{'; + $this->otagLen = 2; + + $this->ctag = '}}'; + $this->ctagChar = '}'; + $this->ctagLen = 2; + } + + /** + * Flush the current buffer to a token. + */ + private function flushBuffer() + { + if (strlen($this->buffer) > 0) { + $this->tokens[] = array( + self::TYPE => self::T_TEXT, + self::LINE => $this->line, + self::VALUE => $this->buffer, + ); + $this->buffer = ''; + } + } + + /** + * Change the current Mustache delimiters. Set new `otag` and `ctag` values. + * + * @throws Mustache_Exception_SyntaxException when delimiter string is invalid + * + * @param string $text Mustache template source + * @param int $index Current tokenizer index + * + * @return int New index value + */ + private function changeDelimiters($text, $index) + { + $startIndex = strpos($text, '=', $index) + 1; + $close = '=' . $this->ctag; + $closeIndex = strpos($text, $close, $index); + + $token = array( + self::TYPE => self::T_DELIM_CHANGE, + self::LINE => $this->line, + ); + + try { + $this->setDelimiters(trim(substr($text, $startIndex, $closeIndex - $startIndex))); + } catch (Mustache_Exception_InvalidArgumentException $e) { + throw new Mustache_Exception_SyntaxException($e->getMessage(), $token); + } + + $this->tokens[] = $token; + + return $closeIndex + strlen($close) - 1; + } + + /** + * Set the current Mustache `otag` and `ctag` delimiters. + * + * @throws Mustache_Exception_InvalidArgumentException when delimiter string is invalid + * + * @param string $delimiters + */ + private function setDelimiters($delimiters) + { + if (!preg_match('/^\s*(\S+)\s+(\S+)\s*$/', $delimiters, $matches)) { + throw new Mustache_Exception_InvalidArgumentException(sprintf('Invalid delimiters: %s', $delimiters)); + } + + list($_, $otag, $ctag) = $matches; + + $this->otag = $otag; + $this->otagChar = $otag[0]; + $this->otagLen = strlen($otag); + + $this->ctag = $ctag; + $this->ctagChar = $ctag[0]; + $this->ctagLen = strlen($ctag); + } + + /** + * Add pragma token. + * + * Pragmas are hoisted to the front of the template, so all pragma tokens + * will appear at the front of the token list. + * + * @param string $text + * @param int $index + * + * @return int New index value + */ + private function addPragma($text, $index) + { + $end = strpos($text, $this->ctag, $index); + $pragma = trim(substr($text, $index + 2, $end - $index - 2)); + + // Pragmas are hoisted to the front of the template. + array_unshift($this->tokens, array( + self::TYPE => self::T_PRAGMA, + self::NAME => $pragma, + self::LINE => 0, + )); + + return $end + $this->ctagLen - 1; + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/AutoloaderTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/AutoloaderTest.php new file mode 100644 index 0000000..c72effe --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/AutoloaderTest.php @@ -0,0 +1,51 @@ +assertTrue(spl_autoload_unregister(array($loader, 'autoload'))); + } + + public function testAutoloader() + { + $loader = new Mustache_Autoloader(dirname(__FILE__) . '/../../fixtures/autoloader'); + + $this->assertNull($loader->autoload('NonMustacheClass')); + $this->assertFalse(class_exists('NonMustacheClass')); + + $loader->autoload('Mustache_Foo'); + $this->assertTrue(class_exists('Mustache_Foo')); + + $loader->autoload('\Mustache_Bar'); + $this->assertTrue(class_exists('Mustache_Bar')); + } + + /** + * Test that the autoloader won't register multiple times. + */ + public function testRegisterMultiple() + { + $numLoaders = count(spl_autoload_functions()); + + Mustache_Autoloader::register(); + Mustache_Autoloader::register(); + + $expectedNumLoaders = $numLoaders + 1; + + $this->assertCount($expectedNumLoaders, spl_autoload_functions()); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Cache/AbstractCacheTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Cache/AbstractCacheTest.php new file mode 100644 index 0000000..ac47e64 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Cache/AbstractCacheTest.php @@ -0,0 +1,44 @@ +setLogger($logger); + $this->assertSame($logger, $cache->getLogger()); + } + + /** + * @expectedException Mustache_Exception_InvalidArgumentException + */ + public function testSetLoggerThrowsExceptions() + { + $cache = new CacheStub(); + $logger = new StdClass(); + $cache->setLogger($logger); + } +} + +class CacheStub extends Mustache_Cache_AbstractCache +{ + public function load($key) + { + // nada + } + + public function cache($key, $value) + { + // nada + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Cache/FilesystemCacheTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Cache/FilesystemCacheTest.php new file mode 100644 index 0000000..6bcc483 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Cache/FilesystemCacheTest.php @@ -0,0 +1,36 @@ +load($key); + + $this->assertFalse($loaded); + } + + public function testCachePut() + { + $key = 'some key'; + $value = 'cache($key, $value); + $loaded = $cache->load($key); + + $this->assertTrue($loaded); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/CompilerTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/CompilerTest.php new file mode 100644 index 0000000..6fd1986 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/CompilerTest.php @@ -0,0 +1,154 @@ +compile($source, $tree, $name, $customEscaper, $charset, false, $entityFlags); + foreach ($expected as $contains) { + $this->assertContains($contains, $compiled); + } + } + + public function getCompileValues() + { + return array( + array('', array(), 'Banana', false, ENT_COMPAT, 'ISO-8859-1', array( + "\nclass Banana extends Mustache_Template", + 'return $buffer;', + )), + + array('', array($this->createTextToken('TEXT')), 'Monkey', false, ENT_COMPAT, 'UTF-8', array( + "\nclass Monkey extends Mustache_Template", + '$buffer .= $indent . \'TEXT\';', + 'return $buffer;', + )), + + array( + '', + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_ESCAPED, + Mustache_Tokenizer::NAME => 'name', + ), + ), + 'Monkey', + true, + ENT_COMPAT, + 'ISO-8859-1', + array( + "\nclass Monkey extends Mustache_Template", + '$value = $this->resolveValue($context->find(\'name\'), $context);', + '$buffer .= $indent . call_user_func($this->mustache->getEscape(), $value);', + 'return $buffer;', + ), + ), + + array( + '', + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_ESCAPED, + Mustache_Tokenizer::NAME => 'name', + ), + ), + 'Monkey', + false, + ENT_COMPAT, + 'ISO-8859-1', + array( + "\nclass Monkey extends Mustache_Template", + '$value = $this->resolveValue($context->find(\'name\'), $context);', + '$buffer .= $indent . htmlspecialchars($value, ' . ENT_COMPAT . ', \'ISO-8859-1\');', + 'return $buffer;', + ), + ), + + array( + '', + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_ESCAPED, + Mustache_Tokenizer::NAME => 'name', + ), + ), + 'Monkey', + false, + ENT_QUOTES, + 'ISO-8859-1', + array( + "\nclass Monkey extends Mustache_Template", + '$value = $this->resolveValue($context->find(\'name\'), $context);', + '$buffer .= $indent . htmlspecialchars($value, ' . ENT_QUOTES . ', \'ISO-8859-1\');', + 'return $buffer;', + ), + ), + + array( + '', + array( + $this->createTextToken("foo\n"), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_ESCAPED, + Mustache_Tokenizer::NAME => 'name', + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_ESCAPED, + Mustache_Tokenizer::NAME => '.', + ), + $this->createTextToken("'bar'"), + ), + 'Monkey', + false, + ENT_COMPAT, + 'UTF-8', + array( + "\nclass Monkey extends Mustache_Template", + "\$buffer .= \$indent . 'foo\n';", + '$value = $this->resolveValue($context->find(\'name\'), $context);', + '$buffer .= htmlspecialchars($value, ' . ENT_COMPAT . ', \'UTF-8\');', + '$value = $this->resolveValue($context->last(), $context);', + '$buffer .= \'\\\'bar\\\'\';', + 'return $buffer;', + ), + ), + ); + } + + /** + * @expectedException Mustache_Exception_SyntaxException + */ + public function testCompilerThrowsSyntaxException() + { + $compiler = new Mustache_Compiler(); + $compiler->compile('', array(array(Mustache_Tokenizer::TYPE => 'invalid')), 'SomeClass'); + } + + /** + * @param string $value + */ + private function createTextToken($value) + { + return array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::VALUE => $value, + ); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/ContextTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/ContextTest.php new file mode 100644 index 0000000..447ea16 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/ContextTest.php @@ -0,0 +1,282 @@ +assertSame('', $one->find('foo')); + $this->assertSame('', $one->find('bar')); + + $two = new Mustache_Context(array( + 'foo' => 'FOO', + 'bar' => '', + )); + $this->assertEquals('FOO', $two->find('foo')); + $this->assertEquals('', $two->find('bar')); + + $obj = new StdClass(); + $obj->name = 'NAME'; + $three = new Mustache_Context($obj); + $this->assertSame($obj, $three->last()); + $this->assertEquals('NAME', $three->find('name')); + } + + public function testPushPopAndLast() + { + $context = new Mustache_Context(); + $this->assertFalse($context->last()); + + $dummy = new Mustache_Test_TestDummy(); + $context->push($dummy); + $this->assertSame($dummy, $context->last()); + $this->assertSame($dummy, $context->pop()); + $this->assertFalse($context->last()); + + $obj = new StdClass(); + $context->push($dummy); + $this->assertSame($dummy, $context->last()); + $context->push($obj); + $this->assertSame($obj, $context->last()); + $this->assertSame($obj, $context->pop()); + $this->assertSame($dummy, $context->pop()); + $this->assertFalse($context->last()); + } + + public function testFind() + { + $context = new Mustache_Context(); + + $dummy = new Mustache_Test_TestDummy(); + + $obj = new StdClass(); + $obj->name = 'obj'; + + $arr = array( + 'a' => array('b' => array('c' => 'see')), + 'b' => 'bee', + ); + + $string = 'some arbitrary string'; + + $context->push($dummy); + $this->assertEquals('dummy', $context->find('name')); + + $context->push($obj); + $this->assertEquals('obj', $context->find('name')); + + $context->pop(); + $this->assertEquals('dummy', $context->find('name')); + + $dummy->name = 'dummyer'; + $this->assertEquals('dummyer', $context->find('name')); + + $context->push($arr); + $this->assertEquals('bee', $context->find('b')); + $this->assertEquals('see', $context->findDot('a.b.c')); + + $dummy->name = 'dummy'; + + $context->push($string); + $this->assertSame($string, $context->last()); + $this->assertEquals('dummy', $context->find('name')); + $this->assertEquals('see', $context->findDot('a.b.c')); + $this->assertEquals('', $context->find('foo')); + $this->assertEquals('', $context->findDot('bar')); + } + + public function testArrayAccessFind() + { + $access = new Mustache_Test_TestArrayAccess(array( + 'a' => array('b' => array('c' => 'see')), + 'b' => 'bee', + )); + + $context = new Mustache_Context($access); + $this->assertEquals('bee', $context->find('b')); + $this->assertEquals('see', $context->findDot('a.b.c')); + $this->assertEquals(null, $context->findDot('a.b.c.d')); + } + + public function testAccessorPriority() + { + $context = new Mustache_Context(new Mustache_Test_AllTheThings()); + + $this->assertEquals('win', $context->find('foo'), 'method beats property'); + $this->assertEquals('win', $context->find('bar'), 'property beats ArrayAccess'); + $this->assertEquals('win', $context->find('baz'), 'ArrayAccess stands alone'); + $this->assertEquals('win', $context->find('qux'), 'ArrayAccess beats private property'); + } + + public function testAnchoredDotNotation() + { + $context = new Mustache_Context(); + + $a = array( + 'name' => 'a', + 'number' => 1, + ); + + $b = array( + 'number' => 2, + 'child' => array( + 'name' => 'baby bee', + ), + ); + + $c = array( + 'name' => 'cee', + ); + + $context->push($a); + $this->assertEquals('a', $context->find('name')); + $this->assertEquals('', $context->findDot('.name')); + $this->assertEquals('a', $context->findAnchoredDot('.name')); + $this->assertEquals(1, $context->find('number')); + $this->assertEquals('', $context->findDot('.number')); + $this->assertEquals(1, $context->findAnchoredDot('.number')); + + $context->push($b); + $this->assertEquals('a', $context->find('name')); + $this->assertEquals(2, $context->find('number')); + $this->assertEquals('', $context->findDot('.name')); + $this->assertEquals('', $context->findDot('.number')); + $this->assertEquals('', $context->findAnchoredDot('.name')); + $this->assertEquals(2, $context->findAnchoredDot('.number')); + $this->assertEquals('baby bee', $context->findDot('child.name')); + $this->assertEquals('', $context->findDot('.child.name')); + $this->assertEquals('baby bee', $context->findAnchoredDot('.child.name')); + + $context->push($c); + $this->assertEquals('cee', $context->find('name')); + $this->assertEquals('', $context->findDot('.name')); + $this->assertEquals('cee', $context->findAnchoredDot('.name')); + $this->assertEquals(2, $context->find('number')); + $this->assertEquals('', $context->findDot('.number')); + $this->assertEquals('', $context->findAnchoredDot('.number')); + $this->assertEquals('baby bee', $context->findDot('child.name')); + $this->assertEquals('', $context->findDot('.child.name')); + $this->assertEquals('', $context->findAnchoredDot('.child.name')); + } + + /** + * @expectedException Mustache_Exception_InvalidArgumentException + */ + public function testAnchoredDotNotationThrowsExceptions() + { + $context = new Mustache_Context(); + $context->push(array('a' => 1)); + $context->findAnchoredDot('a'); + } +} + +class Mustache_Test_TestDummy +{ + public $name = 'dummy'; + + public function __invoke() + { + // nothing + } + + public static function foo() + { + return ''; + } + + public function bar() + { + return ''; + } +} + +class Mustache_Test_TestArrayAccess implements ArrayAccess +{ + private $container = array(); + + public function __construct($array) + { + foreach ($array as $key => $value) { + $this->container[$key] = $value; + } + } + + public function offsetSet($offset, $value) + { + if (is_null($offset)) { + $this->container[] = $value; + } else { + $this->container[$offset] = $value; + } + } + + public function offsetExists($offset) + { + return isset($this->container[$offset]); + } + + public function offsetUnset($offset) + { + unset($this->container[$offset]); + } + + public function offsetGet($offset) + { + return isset($this->container[$offset]) ? $this->container[$offset] : null; + } +} + +class Mustache_Test_AllTheThings implements ArrayAccess +{ + public $foo = 'fail'; + public $bar = 'win'; + private $qux = 'fail'; + + public function foo() + { + return 'win'; + } + + public function offsetExists($offset) + { + return true; + } + + public function offsetGet($offset) + { + switch ($offset) { + case 'foo': + case 'bar': + return 'fail'; + + case 'baz': + case 'qux': + return 'win'; + + default: + return 'lolwhut'; + } + } + + public function offsetSet($offset, $value) + { + // nada + } + + public function offsetUnset($offset) + { + // nada + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/EngineTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/EngineTest.php new file mode 100644 index 0000000..3e4d193 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/EngineTest.php @@ -0,0 +1,397 @@ + '__whot__', + 'cache' => self::$tempDir, + 'cache_file_mode' => 777, + 'logger' => $logger, + 'loader' => $loader, + 'partials_loader' => $partialsLoader, + 'partials' => array( + 'foo' => '{{ foo }}', + ), + 'helpers' => array( + 'foo' => array($this, 'getFoo'), + 'bar' => 'BAR', + ), + 'escape' => 'strtoupper', + 'entity_flags' => ENT_QUOTES, + 'charset' => 'ISO-8859-1', + 'pragmas' => array(Mustache_Engine::PRAGMA_FILTERS), + )); + + $this->assertSame($logger, $mustache->getLogger()); + $this->assertSame($loader, $mustache->getLoader()); + $this->assertSame($partialsLoader, $mustache->getPartialsLoader()); + $this->assertEquals('{{ foo }}', $partialsLoader->load('foo')); + $this->assertContains('__whot__', $mustache->getTemplateClassName('{{ foo }}')); + $this->assertEquals('strtoupper', $mustache->getEscape()); + $this->assertEquals(ENT_QUOTES, $mustache->getEntityFlags()); + $this->assertEquals('ISO-8859-1', $mustache->getCharset()); + $this->assertTrue($mustache->hasHelper('foo')); + $this->assertTrue($mustache->hasHelper('bar')); + $this->assertFalse($mustache->hasHelper('baz')); + $this->assertInstanceOf('Mustache_Cache_FilesystemCache', $mustache->getCache()); + $this->assertEquals(array(Mustache_Engine::PRAGMA_FILTERS), $mustache->getPragmas()); + } + + public static function getFoo() + { + return 'foo'; + } + + public function testRender() + { + $source = '{{ foo }}'; + $data = array('bar' => 'baz'); + $output = 'TEH OUTPUT'; + + $template = $this->getMockBuilder('Mustache_Template') + ->disableOriginalConstructor() + ->getMock(); + + $mustache = new MustacheStub(); + $mustache->template = $template; + + $template->expects($this->once()) + ->method('render') + ->with($data) + ->will($this->returnValue($output)); + + $this->assertEquals($output, $mustache->render($source, $data)); + $this->assertEquals($source, $mustache->source); + } + + public function testSettingServices() + { + $logger = new Mustache_Logger_StreamLogger(tmpfile()); + $loader = new Mustache_Loader_StringLoader(); + $tokenizer = new Mustache_Tokenizer(); + $parser = new Mustache_Parser(); + $compiler = new Mustache_Compiler(); + $mustache = new Mustache_Engine(); + $cache = new Mustache_Cache_FilesystemCache(self::$tempDir); + + $this->assertNotSame($logger, $mustache->getLogger()); + $mustache->setLogger($logger); + $this->assertSame($logger, $mustache->getLogger()); + + $this->assertNotSame($loader, $mustache->getLoader()); + $mustache->setLoader($loader); + $this->assertSame($loader, $mustache->getLoader()); + + $this->assertNotSame($loader, $mustache->getPartialsLoader()); + $mustache->setPartialsLoader($loader); + $this->assertSame($loader, $mustache->getPartialsLoader()); + + $this->assertNotSame($tokenizer, $mustache->getTokenizer()); + $mustache->setTokenizer($tokenizer); + $this->assertSame($tokenizer, $mustache->getTokenizer()); + + $this->assertNotSame($parser, $mustache->getParser()); + $mustache->setParser($parser); + $this->assertSame($parser, $mustache->getParser()); + + $this->assertNotSame($compiler, $mustache->getCompiler()); + $mustache->setCompiler($compiler); + $this->assertSame($compiler, $mustache->getCompiler()); + + $this->assertNotSame($cache, $mustache->getCache()); + $mustache->setCache($cache); + $this->assertSame($cache, $mustache->getCache()); + } + + /** + * @group functional + */ + public function testCache() + { + $mustache = new Mustache_Engine(array( + 'template_class_prefix' => '__whot__', + 'cache' => self::$tempDir, + )); + + $source = '{{ foo }}'; + $template = $mustache->loadTemplate($source); + $className = $mustache->getTemplateClassName($source); + + $this->assertInstanceOf($className, $template); + } + + public function testLambdaCache() + { + $mustache = new MustacheStub(array( + 'cache' => self::$tempDir, + 'cache_lambda_templates' => true, + )); + + $this->assertNotInstanceOf('Mustache_Cache_NoopCache', $mustache->getProtectedLambdaCache()); + $this->assertSame($mustache->getCache(), $mustache->getProtectedLambdaCache()); + } + + public function testWithoutLambdaCache() + { + $mustache = new MustacheStub(array( + 'cache' => self::$tempDir, + )); + + $this->assertInstanceOf('Mustache_Cache_NoopCache', $mustache->getProtectedLambdaCache()); + $this->assertNotSame($mustache->getCache(), $mustache->getProtectedLambdaCache()); + } + + /** + * @expectedException Mustache_Exception_InvalidArgumentException + */ + public function testEmptyTemplatePrefixThrowsException() + { + new Mustache_Engine(array( + 'template_class_prefix' => '', + )); + } + + /** + * @expectedException Mustache_Exception_InvalidArgumentException + * @dataProvider getBadEscapers + */ + public function testNonCallableEscapeThrowsException($escape) + { + new Mustache_Engine(array('escape' => $escape)); + } + + public function getBadEscapers() + { + return array( + array('nothing'), + array('foo', 'bar'), + ); + } + + /** + * @expectedException Mustache_Exception_RuntimeException + */ + public function testImmutablePartialsLoadersThrowException() + { + $mustache = new Mustache_Engine(array( + 'partials_loader' => new Mustache_Loader_StringLoader(), + )); + + $mustache->setPartials(array('foo' => '{{ foo }}')); + } + + public function testMissingPartialsTreatedAsEmptyString() + { + $mustache = new Mustache_Engine(array( + 'partials_loader' => new Mustache_Loader_ArrayLoader(array( + 'foo' => 'FOO', + 'baz' => 'BAZ', + )), + )); + + $this->assertEquals('FOOBAZ', $mustache->render('{{>foo}}{{>bar}}{{>baz}}', array())); + } + + public function testHelpers() + { + $foo = array($this, 'getFoo'); + $bar = 'BAR'; + $mustache = new Mustache_Engine(array('helpers' => array( + 'foo' => $foo, + 'bar' => $bar, + ))); + + $helpers = $mustache->getHelpers(); + $this->assertTrue($mustache->hasHelper('foo')); + $this->assertTrue($mustache->hasHelper('bar')); + $this->assertTrue($helpers->has('foo')); + $this->assertTrue($helpers->has('bar')); + $this->assertSame($foo, $mustache->getHelper('foo')); + $this->assertSame($bar, $mustache->getHelper('bar')); + + $mustache->removeHelper('bar'); + $this->assertFalse($mustache->hasHelper('bar')); + $mustache->addHelper('bar', $bar); + $this->assertSame($bar, $mustache->getHelper('bar')); + + $baz = array($this, 'wrapWithUnderscores'); + $this->assertFalse($mustache->hasHelper('baz')); + $this->assertFalse($helpers->has('baz')); + + $mustache->addHelper('baz', $baz); + $this->assertTrue($mustache->hasHelper('baz')); + $this->assertTrue($helpers->has('baz')); + + // ... and a functional test + $tpl = $mustache->loadTemplate('{{foo}} - {{bar}} - {{#baz}}qux{{/baz}}'); + $this->assertEquals('foo - BAR - __qux__', $tpl->render()); + $this->assertEquals('foo - BAR - __qux__', $tpl->render(array('qux' => "won't mess things up"))); + } + + public static function wrapWithUnderscores($text) + { + return '__' . $text . '__'; + } + + /** + * @expectedException Mustache_Exception_InvalidArgumentException + */ + public function testSetHelpersThrowsExceptions() + { + $mustache = new Mustache_Engine(); + $mustache->setHelpers('monkeymonkeymonkey'); + } + + /** + * @expectedException Mustache_Exception_InvalidArgumentException + */ + public function testSetLoggerThrowsExceptions() + { + $mustache = new Mustache_Engine(); + $mustache->setLogger(new StdClass()); + } + + public function testLoadPartialCascading() + { + $loader = new Mustache_Loader_ArrayLoader(array( + 'foo' => 'FOO', + )); + + $mustache = new Mustache_Engine(array('loader' => $loader)); + + $tpl = $mustache->loadTemplate('foo'); + + $this->assertSame($tpl, $mustache->loadPartial('foo')); + + $mustache->setPartials(array( + 'foo' => 'f00', + )); + + // setting partials overrides the default template loading fallback. + $this->assertNotSame($tpl, $mustache->loadPartial('foo')); + + // but it didn't overwrite the original template loader templates. + $this->assertSame($tpl, $mustache->loadTemplate('foo')); + } + + public function testPartialLoadFailLogging() + { + $name = tempnam(sys_get_temp_dir(), 'mustache-test'); + $mustache = new Mustache_Engine(array( + 'logger' => new Mustache_Logger_StreamLogger($name, Mustache_Logger::WARNING), + 'partials' => array( + 'foo' => 'FOO', + 'bar' => 'BAR', + ), + )); + + $result = $mustache->render('{{> foo }}{{> bar }}{{> baz }}', array()); + $this->assertEquals('FOOBAR', $result); + + $this->assertContains('WARNING: Partial not found: "baz"', file_get_contents($name)); + } + + public function testCacheWarningLogging() + { + list($name, $mustache) = $this->getLoggedMustache(Mustache_Logger::WARNING); + $mustache->render('{{ foo }}', array('foo' => 'FOO')); + $this->assertContains('WARNING: Template cache disabled, evaluating', file_get_contents($name)); + } + + public function testLoggingIsNotTooAnnoying() + { + list($name, $mustache) = $this->getLoggedMustache(); + $mustache->render('{{ foo }}{{> bar }}', array('foo' => 'FOO')); + $this->assertEmpty(file_get_contents($name)); + } + + public function testVerboseLoggingIsVerbose() + { + list($name, $mustache) = $this->getLoggedMustache(Mustache_Logger::DEBUG); + $mustache->render('{{ foo }}{{> bar }}', array('foo' => 'FOO')); + $log = file_get_contents($name); + $this->assertContains('DEBUG: Instantiating template: ', $log); + $this->assertContains('WARNING: Partial not found: "bar"', $log); + } + + /** + * @expectedException Mustache_Exception_InvalidArgumentException + */ + public function testUnknownPragmaThrowsException() + { + new Mustache_Engine(array( + 'pragmas' => array('UNKNOWN'), + )); + } + + public function testCompileFromMustacheSourceInstance() + { + $baseDir = realpath(dirname(__FILE__) . '/../../fixtures/templates'); + $mustache = new Mustache_Engine(array( + 'loader' => new Mustache_Loader_ProductionFilesystemLoader($baseDir), + )); + $this->assertEquals('one contents', $mustache->render('one')); + } + + private function getLoggedMustache($level = Mustache_Logger::ERROR) + { + $name = tempnam(sys_get_temp_dir(), 'mustache-test'); + $mustache = new Mustache_Engine(array( + 'logger' => new Mustache_Logger_StreamLogger($name, $level), + )); + + return array($name, $mustache); + } + + public function testCustomDelimiters() + { + $mustache = new Mustache_Engine(array( + 'delimiters' => '[[ ]]', + 'partials' => array( + 'one' => '[[> two ]]', + 'two' => '[[ a ]]', + ), + )); + + $tpl = $mustache->loadTemplate('[[# a ]][[ b ]][[/a ]]'); + $this->assertEquals('c', $tpl->render(array('a' => true, 'b' => 'c'))); + + $tpl = $mustache->loadTemplate('[[> one ]]'); + $this->assertEquals('b', $tpl->render(array('a' => 'b'))); + } +} + +class MustacheStub extends Mustache_Engine +{ + public $source; + public $template; + + public function loadTemplate($source) + { + $this->source = $source; + + return $this->template; + } + + public function getProtectedLambdaCache() + { + return $this->getLambdaCache(); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Exception/SyntaxExceptionTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Exception/SyntaxExceptionTest.php new file mode 100644 index 0000000..074dafc --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Exception/SyntaxExceptionTest.php @@ -0,0 +1,39 @@ + 'this')); + $this->assertTrue($e instanceof LogicException); + $this->assertTrue($e instanceof Mustache_Exception); + } + + public function testGetToken() + { + $token = array(Mustache_Tokenizer::TYPE => 'whatever'); + $e = new Mustache_Exception_SyntaxException('ignore this', $token); + $this->assertEquals($token, $e->getToken()); + } + + public function testPrevious() + { + if (version_compare(PHP_VERSION, '5.3.0', '<')) { + $this->markTestSkipped('Exception chaining requires at least PHP 5.3'); + } + + $previous = new Exception(); + $e = new Mustache_Exception_SyntaxException('foo', array(), $previous); + + $this->assertSame($previous, $e->getPrevious()); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Exception/UnknownFilterExceptionTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Exception/UnknownFilterExceptionTest.php new file mode 100644 index 0000000..6dbe25e --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Exception/UnknownFilterExceptionTest.php @@ -0,0 +1,44 @@ +assertTrue($e instanceof UnexpectedValueException); + $this->assertTrue($e instanceof Mustache_Exception); + } + + public function testMessage() + { + $e = new Mustache_Exception_UnknownFilterException('sausage'); + $this->assertEquals('Unknown filter: sausage', $e->getMessage()); + } + + public function testGetFilterName() + { + $e = new Mustache_Exception_UnknownFilterException('eggs'); + $this->assertEquals('eggs', $e->getFilterName()); + } + + public function testPrevious() + { + if (version_compare(PHP_VERSION, '5.3.0', '<')) { + $this->markTestSkipped('Exception chaining requires at least PHP 5.3'); + } + + $previous = new Exception(); + $e = new Mustache_Exception_UnknownFilterException('foo', $previous); + + $this->assertSame($previous, $e->getPrevious()); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Exception/UnknownHelperExceptionTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Exception/UnknownHelperExceptionTest.php new file mode 100644 index 0000000..5b1ccbb --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Exception/UnknownHelperExceptionTest.php @@ -0,0 +1,43 @@ +assertTrue($e instanceof InvalidArgumentException); + $this->assertTrue($e instanceof Mustache_Exception); + } + + public function testMessage() + { + $e = new Mustache_Exception_UnknownHelperException('beta'); + $this->assertEquals('Unknown helper: beta', $e->getMessage()); + } + + public function testGetHelperName() + { + $e = new Mustache_Exception_UnknownHelperException('gamma'); + $this->assertEquals('gamma', $e->getHelperName()); + } + + public function testPrevious() + { + if (version_compare(PHP_VERSION, '5.3.0', '<')) { + $this->markTestSkipped('Exception chaining requires at least PHP 5.3'); + } + + $previous = new Exception(); + $e = new Mustache_Exception_UnknownHelperException('foo', $previous); + $this->assertSame($previous, $e->getPrevious()); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Exception/UnknownTemplateExceptionTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Exception/UnknownTemplateExceptionTest.php new file mode 100644 index 0000000..b993bfa --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Exception/UnknownTemplateExceptionTest.php @@ -0,0 +1,43 @@ +assertTrue($e instanceof InvalidArgumentException); + $this->assertTrue($e instanceof Mustache_Exception); + } + + public function testMessage() + { + $e = new Mustache_Exception_UnknownTemplateException('luigi'); + $this->assertEquals('Unknown template: luigi', $e->getMessage()); + } + + public function testGetTemplateName() + { + $e = new Mustache_Exception_UnknownTemplateException('yoshi'); + $this->assertEquals('yoshi', $e->getTemplateName()); + } + + public function testPrevious() + { + if (version_compare(PHP_VERSION, '5.3.0', '<')) { + $this->markTestSkipped('Exception chaining requires at least PHP 5.3'); + } + + $previous = new Exception(); + $e = new Mustache_Exception_UnknownTemplateException('foo', $previous); + $this->assertSame($previous, $e->getPrevious()); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/ClosureQuirksTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/ClosureQuirksTest.php new file mode 100644 index 0000000..cc575a9 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/ClosureQuirksTest.php @@ -0,0 +1,32 @@ +mustache = new Mustache_Engine(); + } + + public function testClosuresDontLikeItWhenYouTouchTheirProperties() + { + $tpl = $this->mustache->loadTemplate('{{ foo.bar }}'); + $this->assertEquals('', $tpl->render(array('foo' => function () { + return 'FOO'; + }))); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/EngineTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/EngineTest.php new file mode 100644 index 0000000..406473e --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/EngineTest.php @@ -0,0 +1,50 @@ + $pragmas, + 'helpers' => $helpers, + )); + + $this->assertEquals($expect, $mustache->render($tpl, $data)); + } + + public function pragmaData() + { + $helpers = array( + 'longdate' => function (\DateTime $value) { + return $value->format('Y-m-d h:m:s'); + }, + ); + + $data = array( + 'date' => new DateTime('1/1/2000', new DateTimeZone('UTC')), + ); + + $tpl = '{{ date | longdate }}'; + + return array( + array(array(Mustache_Engine::PRAGMA_FILTERS), $helpers, $data, $tpl, '2000-01-01 12:01:00'), + array(array(), $helpers, $data, $tpl, ''), + ); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/FiltersTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/FiltersTest.php new file mode 100644 index 0000000..16dec60 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/FiltersTest.php @@ -0,0 +1,187 @@ +mustache = new Mustache_Engine(); + } + + /** + * @dataProvider singleFilterData + */ + public function testSingleFilter($tpl, $helpers, $data, $expect) + { + $this->mustache->setHelpers($helpers); + $this->assertEquals($expect, $this->mustache->render($tpl, $data)); + } + + public function singleFilterData() + { + $helpers = array( + 'longdate' => function (\DateTime $value) { + return $value->format('Y-m-d h:m:s'); + }, + 'echo' => function ($value) { + return array($value, $value, $value); + }, + ); + + return array( + array( + '{{% FILTERS }}{{ date | longdate }}', + $helpers, + (object) array('date' => new DateTime('1/1/2000', new DateTimeZone('UTC'))), + '2000-01-01 12:01:00', + ), + + array( + '{{% FILTERS }}{{# word | echo }}{{ . }}!{{/ word | echo }}', + $helpers, + array('word' => 'bacon'), + 'bacon!bacon!bacon!', + ), + ); + } + + public function testChainedFilters() + { + $tpl = $this->mustache->loadTemplate('{{% FILTERS }}{{ date | longdate | withbrackets }}'); + + $this->mustache->addHelper('longdate', function (\DateTime $value) { + return $value->format('Y-m-d h:m:s'); + }); + + $this->mustache->addHelper('withbrackets', function ($value) { + return sprintf('[[%s]]', $value); + }); + + $foo = new \StdClass(); + $foo->date = new DateTime('1/1/2000', new DateTimeZone('UTC')); + + $this->assertEquals('[[2000-01-01 12:01:00]]', $tpl->render($foo)); + } + + const CHAINED_SECTION_FILTERS_TPL = <<<'EOS' +{{% FILTERS }} +{{# word | echo | with_index }} +{{ key }}: {{ value }} +{{/ word | echo | with_index }} +EOS; + + public function testChainedSectionFilters() + { + $tpl = $this->mustache->loadTemplate(self::CHAINED_SECTION_FILTERS_TPL); + + $this->mustache->addHelper('echo', function ($value) { + return array($value, $value, $value); + }); + + $this->mustache->addHelper('with_index', function ($value) { + return array_map(function ($k, $v) { + return array( + 'key' => $k, + 'value' => $v, + ); + }, array_keys($value), $value); + }); + + $this->assertEquals("0: bacon\n1: bacon\n2: bacon\n", $tpl->render(array('word' => 'bacon'))); + } + + /** + * @dataProvider interpolateFirstData + */ + public function testInterpolateFirst($tpl, $data, $expect) + { + $this->assertEquals($expect, $this->mustache->render($tpl, $data)); + } + + public function interpolateFirstData() + { + $data = array( + 'foo' => 'FOO', + 'bar' => function ($value) { + return ($value === 'FOO') ? 'win!' : 'fail :('; + }, + ); + + return array( + array('{{% FILTERS }}{{ foo | bar }}', $data, 'win!'), + array('{{% FILTERS }}{{# foo | bar }}{{ . }}{{/ foo | bar }}', $data, 'win!'), + ); + } + + /** + * @expectedException Mustache_Exception_UnknownFilterException + * @dataProvider brokenPipeData + */ + public function testThrowsExceptionForBrokenPipes($tpl, $data) + { + $this->mustache->render($tpl, $data); + } + + public function brokenPipeData() + { + return array( + array('{{% FILTERS }}{{ foo | bar }}', array()), + array('{{% FILTERS }}{{ foo | bar }}', array('foo' => 'FOO')), + array('{{% FILTERS }}{{ foo | bar }}', array('foo' => 'FOO', 'bar' => 'BAR')), + array('{{% FILTERS }}{{ foo | bar }}', array('foo' => 'FOO', 'bar' => array(1, 2))), + array('{{% FILTERS }}{{ foo | bar | baz }}', array('foo' => 'FOO', 'bar' => function () { + return 'BAR'; + })), + array('{{% FILTERS }}{{ foo | bar | baz }}', array('foo' => 'FOO', 'baz' => function () { + return 'BAZ'; + })), + array('{{% FILTERS }}{{ foo | bar | baz }}', array('bar' => function () { + return 'BAR'; + })), + array('{{% FILTERS }}{{ foo | bar | baz }}', array('baz' => function () { + return 'BAZ'; + })), + array('{{% FILTERS }}{{ foo | bar.baz }}', array('foo' => 'FOO', 'bar' => function () { + return 'BAR'; + }, 'baz' => function () { + return 'BAZ'; + })), + + array('{{% FILTERS }}{{# foo | bar }}{{ . }}{{/ foo | bar }}', array()), + array('{{% FILTERS }}{{# foo | bar }}{{ . }}{{/ foo | bar }}', array('foo' => 'FOO')), + array('{{% FILTERS }}{{# foo | bar }}{{ . }}{{/ foo | bar }}', array('foo' => 'FOO', 'bar' => 'BAR')), + array('{{% FILTERS }}{{# foo | bar }}{{ . }}{{/ foo | bar }}', array('foo' => 'FOO', 'bar' => array(1, 2))), + array('{{% FILTERS }}{{# foo | bar | baz }}{{ . }}{{/ foo | bar | baz }}', array('foo' => 'FOO', 'bar' => function () { + return 'BAR'; + })), + array('{{% FILTERS }}{{# foo | bar | baz }}{{ . }}{{/ foo | bar | baz }}', array('foo' => 'FOO', 'baz' => function () { + return 'BAZ'; + })), + array('{{% FILTERS }}{{# foo | bar | baz }}{{ . }}{{/ foo | bar | baz }}', array('bar' => function () { + return 'BAR'; + })), + array('{{% FILTERS }}{{# foo | bar | baz }}{{ . }}{{/ foo | bar | baz }}', array('baz' => function () { + return 'BAZ'; + })), + array('{{% FILTERS }}{{# foo | bar.baz }}{{ . }}{{/ foo | bar.baz }}', array('foo' => 'FOO', 'bar' => function () { + return 'BAR'; + }, 'baz' => function () { + return 'BAZ'; + })), + ); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/HigherOrderSectionsTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/HigherOrderSectionsTest.php new file mode 100644 index 0000000..eb05150 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/HigherOrderSectionsTest.php @@ -0,0 +1,77 @@ +mustache = new Mustache_Engine(); + } + + public function testAnonymousFunctionSectionCallback() + { + $tpl = $this->mustache->loadTemplate('{{#wrapper}}{{name}}{{/wrapper}}'); + + $foo = new Mustache_Test_FiveThree_Functional_Foo(); + $foo->name = 'Mario'; + $foo->wrapper = function ($text) { + return sprintf('
%s
', $text); + }; + + $this->assertEquals(sprintf('
%s
', $foo->name), $tpl->render($foo)); + } + + public function testSectionCallback() + { + $one = $this->mustache->loadTemplate('{{name}}'); + $two = $this->mustache->loadTemplate('{{#wrap}}{{name}}{{/wrap}}'); + + $foo = new Mustache_Test_FiveThree_Functional_Foo(); + $foo->name = 'Luigi'; + + $this->assertEquals($foo->name, $one->render($foo)); + $this->assertEquals(sprintf('%s', $foo->name), $two->render($foo)); + } + + public function testViewArrayAnonymousSectionCallback() + { + $tpl = $this->mustache->loadTemplate('{{#wrap}}{{name}}{{/wrap}}'); + + $data = array( + 'name' => 'Bob', + 'wrap' => function ($text) { + return sprintf('[[%s]]', $text); + }, + ); + + $this->assertEquals(sprintf('[[%s]]', $data['name']), $tpl->render($data)); + } +} + +class Mustache_Test_FiveThree_Functional_Foo +{ + public $name = 'Justin'; + public $lorem = 'Lorem ipsum dolor sit amet,'; + public $wrap; + + public function __construct() + { + $this->wrap = function ($text) { + return sprintf('%s', $text); + }; + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/LambdaHelperTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/LambdaHelperTest.php new file mode 100644 index 0000000..6fc5d40 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/LambdaHelperTest.php @@ -0,0 +1,67 @@ +mustache = new Mustache_Engine(); + } + + public function testSectionLambdaHelper() + { + $one = $this->mustache->loadTemplate('{{name}}'); + $two = $this->mustache->loadTemplate('{{#lambda}}{{name}}{{/lambda}}'); + + $foo = new StdClass(); + $foo->name = 'Mario'; + $foo->lambda = function ($text, $mustache) { + return strtoupper($mustache->render($text)); + }; + + $this->assertEquals('Mario', $one->render($foo)); + $this->assertEquals('MARIO', $two->render($foo)); + } + + public function testSectionLambdaHelperRespectsDelimiterChanges() + { + $tpl = $this->mustache->loadTemplate("{{=<% %>=}}\n<%# bang %><% value %><%/ bang %>"); + + $data = new StdClass(); + $data->value = 'hello world'; + $data->bang = function ($text, $mustache) { + return $mustache->render($text) . '!'; + }; + + $this->assertEquals('hello world!', $tpl->render($data)); + } + + public function testLambdaHelperIsInvokable() + { + $one = $this->mustache->loadTemplate('{{name}}'); + $two = $this->mustache->loadTemplate('{{#lambda}}{{name}}{{/lambda}}'); + + $foo = new StdClass(); + $foo->name = 'Mario'; + $foo->lambda = function ($text, $render) { + return strtoupper($render($text)); + }; + + $this->assertEquals('Mario', $one->render($foo)); + $this->assertEquals('MARIO', $two->render($foo)); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/MustacheSpecTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/MustacheSpecTest.php new file mode 100644 index 0000000..af3f982 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/MustacheSpecTest.php @@ -0,0 +1,68 @@ +markTestSkipped('Mustache spec submodule not initialized: run "git submodule update --init"'); + } + } + + /** + * @group lambdas + * @dataProvider loadLambdasSpec + */ + public function testLambdasSpec($desc, $source, $partials, $data, $expected) + { + $template = self::loadTemplate($source, $partials); + $this->assertEquals($expected, $template($this->prepareLambdasSpec($data)), $desc); + } + + public function loadLambdasSpec() + { + return $this->loadSpec('~lambdas'); + } + + /** + * Extract and lambdafy any 'lambda' values found in the $data array. + */ + private function prepareLambdasSpec($data) + { + foreach ($data as $key => $val) { + if ($key === 'lambda') { + if (!isset($val['php'])) { + $this->markTestSkipped(sprintf('PHP lambda test not implemented for this test.')); + } + + $func = $val['php']; + $data[$key] = function ($text = null) use ($func) { + return eval($func); + }; + } elseif (is_array($val)) { + $data[$key] = $this->prepareLambdasSpec($val); + } + } + + return $data; + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/PartialLambdaIndentTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/PartialLambdaIndentTest.php new file mode 100644 index 0000000..1f9af7c --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/PartialLambdaIndentTest.php @@ -0,0 +1,94 @@ + + {{> input }} + + +EOS; + $partial = <<<'EOS' + + +EOS; + + $expected = <<<'EOS' +
+ +
+ +EOS; + + $m = new Mustache_Engine(array( + 'partials' => array('input' => $partial), + )); + + $tpl = $m->loadTemplate($src); + + $data = new Mustache_Test_FiveThree_Functional_ClassWithLambda(); + $this->assertEquals($expected, $tpl->render($data)); + } + + public function testLambdaInterpolationsInsidePartialsAreIndentedProperly() + { + $src = <<<'EOS' +
+ {{> input }} +
+ +EOS; + $partial = <<<'EOS' + + +EOS; + + $expected = <<<'EOS' +
+ +
+ +EOS; + + $m = new Mustache_Engine(array( + 'partials' => array('input' => $partial), + )); + + $tpl = $m->loadTemplate($src); + + $data = new Mustache_Test_FiveThree_Functional_ClassWithLambda(); + $this->assertEquals($expected, $tpl->render($data)); + } +} + +class Mustache_Test_FiveThree_Functional_ClassWithLambda +{ + public function _t() + { + return function ($val) { + return strtoupper($val); + }; + } + + public function placeholder() + { + return function () { + return 'Enter your name'; + }; + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/StrictCallablesTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/StrictCallablesTest.php new file mode 100644 index 0000000..2c01169 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/StrictCallablesTest.php @@ -0,0 +1,135 @@ + $strict)); + $tpl = $mustache->loadTemplate('{{# section }}{{ name }}{{/ section }}'); + + $data = new StdClass(); + $data->name = $name; + $data->section = $section; + + $this->assertEquals($expected, $tpl->render($data)); + } + + public function callables() + { + $lambda = function ($tpl, $mustache) { + return strtoupper($mustache->render($tpl)); + }; + + return array( + // Interpolation lambdas + array( + false, + array($this, 'instanceName'), + $lambda, + 'YOSHI', + ), + array( + false, + array(__CLASS__, 'staticName'), + $lambda, + 'YOSHI', + ), + array( + false, + function () { + return 'Yoshi'; + }, + $lambda, + 'YOSHI', + ), + + // Section lambdas + array( + false, + 'Yoshi', + array($this, 'instanceCallable'), + 'YOSHI', + ), + array( + false, + 'Yoshi', + array(__CLASS__, 'staticCallable'), + 'YOSHI', + ), + array( + false, + 'Yoshi', + $lambda, + 'YOSHI', + ), + + // Strict interpolation lambdas + array( + true, + function () { + return 'Yoshi'; + }, + $lambda, + 'YOSHI', + ), + + // Strict section lambdas + array( + true, + 'Yoshi', + array($this, 'instanceCallable'), + 'YoshiYoshi', + ), + array( + true, + 'Yoshi', + array(__CLASS__, 'staticCallable'), + 'YoshiYoshi', + ), + array( + true, + 'Yoshi', + function ($tpl, $mustache) { + return strtoupper($mustache->render($tpl)); + }, + 'YOSHI', + ), + ); + } + + public function instanceCallable($tpl, $mustache) + { + return strtoupper($mustache->render($tpl)); + } + + public static function staticCallable($tpl, $mustache) + { + return strtoupper($mustache->render($tpl)); + } + + public function instanceName() + { + return 'Yoshi'; + } + + public static function staticName() + { + return 'Yoshi'; + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/CallTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/CallTest.php new file mode 100644 index 0000000..681ec1b --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/CallTest.php @@ -0,0 +1,40 @@ +loadTemplate('{{# foo }}{{ label }}: {{ name }}{{/ foo }}'); + + $foo = new Mustache_Test_Functional_ClassWithCall(); + $foo->name = 'Bob'; + + $data = array('label' => 'name', 'foo' => $foo); + + $this->assertEquals('name: Bob', $tpl->render($data)); + } +} + +class Mustache_Test_Functional_ClassWithCall +{ + public $name; + + public function __call($method, $args) + { + return 'unknown value'; + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/ExamplesTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/ExamplesTest.php new file mode 100644 index 0000000..ac883ea --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/ExamplesTest.php @@ -0,0 +1,142 @@ + $partials, + )); + $this->assertEquals($expected, $mustache->loadTemplate($source)->render($context)); + } + + /** + * Data provider for testExamples method. + * + * Loads examples from the test fixtures directory. + * + * This examples directory should contain any number of subdirectories, each of which contains + * three files: one Mustache class (.php), one Mustache template (.mustache), and one output file + * (.txt). Optionally, the directory may contain a folder full of partials. + * + * @return array + */ + public function getExamples() + { + $path = realpath(dirname(__FILE__) . '/../../../fixtures/examples'); + $examples = array(); + + $handle = opendir($path); + while (($file = readdir($handle)) !== false) { + if ($file === '.' || $file === '..') { + continue; + } + + $fullpath = $path . '/' . $file; + if (is_dir($fullpath)) { + $examples[$file] = $this->loadExample($fullpath); + } + } + closedir($handle); + + return $examples; + } + + /** + * Helper method to load an example given the full path. + * + * @param string $path + * + * @return array arguments for testExamples + */ + private function loadExample($path) + { + $context = null; + $source = null; + $partials = array(); + $expected = null; + + $handle = opendir($path); + while (($file = readdir($handle)) !== false) { + $fullpath = $path . '/' . $file; + $info = pathinfo($fullpath); + + if (is_dir($fullpath) && $info['basename'] === 'partials') { + // load partials + $partials = $this->loadPartials($fullpath); + } elseif (is_file($fullpath)) { + // load other files + switch ($info['extension']) { + case 'php': + require_once $fullpath; + $className = $info['filename']; + $context = new $className(); + break; + + case 'mustache': + $source = file_get_contents($fullpath); + break; + + case 'txt': + $expected = file_get_contents($fullpath); + break; + } + } + } + closedir($handle); + + return array($context, $source, $partials, $expected); + } + + /** + * Helper method to load partials given an example directory. + * + * @param string $path + * + * @return array $partials + */ + private function loadPartials($path) + { + $partials = array(); + + $handle = opendir($path); + while (($file = readdir($handle)) !== false) { + if ($file === '.' || $file === '..') { + continue; + } + + $fullpath = $path . '/' . $file; + $info = pathinfo($fullpath); + + if ($info['extension'] === 'mustache') { + $partials[$info['filename']] = file_get_contents($fullpath); + } + } + closedir($handle); + + return $partials; + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/HigherOrderSectionsTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/HigherOrderSectionsTest.php new file mode 100644 index 0000000..14774cd --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/HigherOrderSectionsTest.php @@ -0,0 +1,177 @@ +mustache = new Mustache_Engine(); + } + + /** + * @dataProvider sectionCallbackData + */ + public function testSectionCallback($data, $tpl, $expect) + { + $this->assertEquals($expect, $this->mustache->render($tpl, $data)); + } + + public function sectionCallbackData() + { + $foo = new Mustache_Test_Functional_Foo(); + $foo->doublewrap = array($foo, 'wrapWithBoth'); + + $bar = new Mustache_Test_Functional_Foo(); + $bar->trimmer = array(get_class($bar), 'staticTrim'); + + return array( + array($foo, '{{#doublewrap}}{{name}}{{/doublewrap}}', sprintf('%s', $foo->name)), + array($bar, '{{#trimmer}} {{name}} {{/trimmer}}', $bar->name), + ); + } + + public function testViewArraySectionCallback() + { + $tpl = $this->mustache->loadTemplate('{{#trim}} {{name}} {{/trim}}'); + + $foo = new Mustache_Test_Functional_Foo(); + + $data = array( + 'name' => 'Bob', + 'trim' => array(get_class($foo), 'staticTrim'), + ); + + $this->assertEquals($data['name'], $tpl->render($data)); + } + + public function testMonsters() + { + $tpl = $this->mustache->loadTemplate('{{#title}}{{title}} {{/title}}{{name}}'); + + $frank = new Mustache_Test_Functional_Monster(); + $frank->title = 'Dr.'; + $frank->name = 'Frankenstein'; + $this->assertEquals('Dr. Frankenstein', $tpl->render($frank)); + + $dracula = new Mustache_Test_Functional_Monster(); + $dracula->title = 'Count'; + $dracula->name = 'Dracula'; + $this->assertEquals('Count Dracula', $tpl->render($dracula)); + } + + public function testPassthroughOptimization() + { + $mustache = $this->getMock('Mustache_Engine', array('loadLambda')); + $mustache->expects($this->never()) + ->method('loadLambda'); + + $tpl = $mustache->loadTemplate('{{#wrap}}NAME{{/wrap}}'); + + $foo = new Mustache_Test_Functional_Foo(); + $foo->wrap = array($foo, 'wrapWithEm'); + + $this->assertEquals('NAME', $tpl->render($foo)); + } + + public function testWithoutPassthroughOptimization() + { + $mustache = $this->getMock('Mustache_Engine', array('loadLambda')); + $mustache->expects($this->once()) + ->method('loadLambda') + ->will($this->returnValue($mustache->loadTemplate('{{ name }}'))); + + $tpl = $mustache->loadTemplate('{{#wrap}}{{name}}{{/wrap}}'); + + $foo = new Mustache_Test_Functional_Foo(); + $foo->wrap = array($foo, 'wrapWithEm'); + + $this->assertEquals('' . $foo->name . '', $tpl->render($foo)); + } + + /** + * @dataProvider cacheLambdaTemplatesData + */ + public function testCacheLambdaTemplatesOptionWorks($dirName, $tplPrefix, $enable, $expect) + { + $cacheDir = $this->setUpCacheDir($dirName); + $mustache = new Mustache_Engine(array( + 'template_class_prefix' => $tplPrefix, + 'cache' => $cacheDir, + 'cache_lambda_templates' => $enable, + )); + + $tpl = $mustache->loadTemplate('{{#wrap}}{{name}}{{/wrap}}'); + $foo = new Mustache_Test_Functional_Foo(); + $foo->wrap = array($foo, 'wrapWithEm'); + $this->assertEquals('' . $foo->name . '', $tpl->render($foo)); + $this->assertCount($expect, glob($cacheDir . '/*.php')); + } + + public function cacheLambdaTemplatesData() + { + return array( + array('test_enabling_lambda_cache', '_TestEnablingLambdaCache_', true, 2), + array('test_disabling_lambda_cache', '_TestDisablingLambdaCache_', false, 1), + ); + } + + protected function setUpCacheDir($name) + { + $cacheDir = self::$tempDir . '/' . $name; + if (file_exists($cacheDir)) { + self::rmdir($cacheDir); + } + mkdir($cacheDir, 0777, true); + + return $cacheDir; + } +} + +class Mustache_Test_Functional_Foo +{ + public $name = 'Justin'; + public $lorem = 'Lorem ipsum dolor sit amet,'; + + public function wrapWithEm($text) + { + return sprintf('%s', $text); + } + + /** + * @param string $text + */ + public function wrapWithStrong($text) + { + return sprintf('%s', $text); + } + + public function wrapWithBoth($text) + { + return self::wrapWithStrong(self::wrapWithEm($text)); + } + + public static function staticTrim($text) + { + return trim($text); + } +} + +class Mustache_Test_Functional_Monster +{ + public $title; + public $name; +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/InheritanceTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/InheritanceTest.php new file mode 100644 index 0000000..6243704 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/InheritanceTest.php @@ -0,0 +1,543 @@ +mustache = new Mustache_Engine(array( + 'pragmas' => array(Mustache_Engine::PRAGMA_BLOCKS), + )); + } + + public function getIllegalInheritanceExamples() + { + return array( + array( + array( + 'foo' => '{{$baz}}default content{{/baz}}', + ), + array( + 'bar' => 'set by user', + ), + '{{< foo }}{{# bar }}{{$ baz }}{{/ baz }}{{/ bar }}{{/ foo }}', + ), + array( + array( + 'foo' => '{{$baz}}default content{{/baz}}', + ), + array( + ), + '{{ '{{$baz}}default content{{/baz}}', + 'qux' => 'I am a partial', + ), + array( + ), + '{{qux}}{{$baz}}set by template{{/baz}}{{/foo}}', + ), + array( + array( + 'foo' => '{{$baz}}default content{{/baz}}', + ), + array(), + '{{=}}<%={{ }}=%>{{/foo}}', + ), + ); + } + + public function getLegalInheritanceExamples() + { + return array( + array( + array( + 'foo' => '{{$baz}}default content{{/baz}}', + ), + array( + 'bar' => 'set by user', + ), + '{{ '{{$baz}}default content{{/baz}}', + ), + array( + ), + '{{ '{{$baz}}defualt content{{/baz}}', + ), + array(), + '{{ '{{$a}}FAIL!{{/a}}', + 'bar' => 'WIN!!', + ), + array(), + '{{mustache->loadTemplate('{{$title}}Default title{{/title}}'); + + $data = array(); + + $this->assertEquals('Default title', $tpl->render($data)); + } + + public function testDefaultContentRendersVariables() + { + $tpl = $this->mustache->loadTemplate('{{$foo}}default {{bar}} content{{/foo}}'); + + $data = array( + 'bar' => 'baz', + ); + + $this->assertEquals('default baz content', $tpl->render($data)); + } + + public function testDefaultContentRendersTripleMustacheVariables() + { + $tpl = $this->mustache->loadTemplate('{{$foo}}default {{{bar}}} content{{/foo}}'); + + $data = array( + 'bar' => '', + ); + + $this->assertEquals('default content', $tpl->render($data)); + } + + public function testDefaultContentRendersSections() + { + $tpl = $this->mustache->loadTemplate( + '{{$foo}}default {{#bar}}{{baz}}{{/bar}} content{{/foo}}' + ); + + $data = array( + 'bar' => array('baz' => 'qux'), + ); + + $this->assertEquals('default qux content', $tpl->render($data)); + } + + public function testDefaultContentRendersNegativeSections() + { + $tpl = $this->mustache->loadTemplate( + '{{$foo}}default {{^bar}}{{baz}}{{/bar}} content{{/foo}}' + ); + + $data = array( + 'foo' => array('bar' => 'qux'), + 'baz' => 'three', + ); + + $this->assertEquals('default three content', $tpl->render($data)); + } + + public function testMustacheInjectionInDefaultContent() + { + $tpl = $this->mustache->loadTemplate( + '{{$foo}}default {{#bar}}{{baz}}{{/bar}} content{{/foo}}' + ); + + $data = array( + 'bar' => array('baz' => '{{qux}}'), + ); + + $this->assertEquals('default {{qux}} content', $tpl->render($data)); + } + + public function testDefaultContentRenderedInsideIncludedTemplates() + { + $partials = array( + 'include' => '{{$foo}}default content{{/foo}}', + ); + + $this->mustache->setPartials($partials); + + $tpl = $this->mustache->loadTemplate( + '{{assertEquals('default content', $tpl->render($data)); + } + + public function testOverriddenContent() + { + $partials = array( + 'super' => '...{{$title}}Default title{{/title}}...', + ); + + $this->mustache->setPartials($partials); + + $tpl = $this->mustache->loadTemplate( + '{{assertEquals('...sub template title...', $tpl->render($data)); + } + + public function testOverriddenPartial() + { + $partials = array( + 'partial' => '|{{$stuff}}...{{/stuff}}{{$default}} default{{/default}}|', + ); + + $this->mustache->setPartials($partials); + + $tpl = $this->mustache->loadTemplate( + 'test {{assertEquals('test |override1 default| |override2 default|', $tpl->render($data)); + } + + public function testBlocksDoNotLeakBetweenPartials() + { + $partials = array( + 'partial' => '|{{$a}}A{{/a}} {{$b}}B{{/b}}|', + ); + + $this->mustache->setPartials($partials); + + $tpl = $this->mustache->loadTemplate( + 'test {{assertEquals('test |C B| |A D|', $tpl->render($data)); + } + + public function testDataDoesNotOverrideBlock() + { + $partials = array( + 'include' => '{{$var}}var in include{{/var}}', + ); + + $this->mustache->setPartials($partials); + + $tpl = $this->mustache->loadTemplate( + '{{ 'var in data', + ); + + $this->assertEquals('var in template', $tpl->render($data)); + } + + public function testDataDoesNotOverrideDefaultBlockValue() + { + $partials = array( + 'include' => '{{$var}}var in include{{/var}}', + ); + + $this->mustache->setPartials($partials); + + $tpl = $this->mustache->loadTemplate( + '{{ 'var in data', + ); + + $this->assertEquals('var in include', $tpl->render($data)); + } + + public function testOverridePartialWithNewlines() + { + $partials = array( + 'partial' => '{{$ballmer}}peaking{{/ballmer}}', + ); + + $this->mustache->setPartials($partials); + + $tpl = $this->mustache->loadTemplate( + "{{assertEquals("peaked\n\n:(\n", $tpl->render($data)); + } + + public function testInheritIndentationWhenOverridingAPartial() + { + $partials = array( + 'partial' => 'stop: + {{$nineties}}collaborate and listen{{/nineties}}', + ); + + $this->mustache->setPartials($partials); + + $tpl = $this->mustache->loadTemplate( + '{{assertEquals( + 'stop: + hammer time', + $tpl->render($data) + ); + } + + public function testInheritSpacingWhenOverridingAPartial() + { + $partials = array( + 'parent' => 'collaborate_and{{$id}}{{/id}}', + 'child' => '{{mustache->setPartials($partials); + + $tpl = $this->mustache->loadTemplate( + 'stop: + {{>child}}' + ); + + $data = array(); + + $this->assertEquals( + 'stop: + collaborate_and_listen', + $tpl->render($data) + ); + } + + public function testOverrideOneSubstitutionButNotTheOther() + { + $partials = array( + 'partial' => '{{$stuff}}default one{{/stuff}}, {{$stuff2}}default two{{/stuff2}}', + ); + + $this->mustache->setPartials($partials); + + $tpl = $this->mustache->loadTemplate( + '{{assertEquals('default one, override two', $tpl->render($data)); + } + + public function testSuperTemplatesWithNoParameters() + { + $partials = array( + 'include' => '{{$foo}}default content{{/foo}}', + ); + + $this->mustache->setPartials($partials); + + $tpl = $this->mustache->loadTemplate( + '{{>include}}|{{assertEquals('default content|default content', $tpl->render($data)); + } + + public function testRecursionInInheritedTemplates() + { + $partials = array( + 'include' => '{{$foo}}default content{{/foo}} {{$bar}}{{ '{{$foo}}include2 default content{{/foo}} {{mustache->setPartials($partials); + + $tpl = $this->mustache->loadTemplate( + '{{assertEquals('override override override don\'t recurse', $tpl->render($data)); + } + + public function testTopLevelSubstitutionsTakePrecedenceInMultilevelInheritance() + { + $partials = array( + 'parent' => '{{ '{{ '{{$a}}g{{/a}}', + ); + + $this->mustache->setPartials($partials); + + $tpl = $this->mustache->loadTemplate( + '{{assertEquals('c', $tpl->render($data)); + } + + public function testMultiLevelInheritanceNoSubChild() + { + $partials = array( + 'parent' => '{{ '{{ '{{$a}}g{{/a}}', + ); + + $this->mustache->setPartials($partials); + + $tpl = $this->mustache->loadTemplate( + '{{assertEquals('p', $tpl->render($data)); + } + + public function testIgnoreTextInsideSuperTemplatesButParseArgs() + { + $partials = array( + 'include' => '{{$foo}}default content{{/foo}}', + ); + + $this->mustache->setPartials($partials); + + $tpl = $this->mustache->loadTemplate( + '{{assertEquals('hmm', $tpl->render($data)); + } + + public function testIgnoreTextInsideSuperTemplates() + { + $partials = array( + 'include' => '{{$foo}}default content{{/foo}}', + ); + + $this->mustache->setPartials($partials); + + $tpl = $this->mustache->loadTemplate( + '{{assertEquals('default content', $tpl->render($data)); + } + + public function testInheritanceWithLazyEvaluation() + { + $partials = array( + 'parent' => '{{#items}}{{$value}}ignored{{/value}}{{/items}}', + ); + + $this->mustache->setPartials($partials); + + $tpl = $this->mustache->loadTemplate( + '{{{{/value}}{{/parent}}' + ); + + $data = array('items' => array(1, 2, 3)); + + $this->assertEquals('<1><2><3>', $tpl->render($data)); + } + + public function testInheritanceWithLazyEvaluationWhitespaceIgnored() + { + $partials = array( + 'parent' => '{{#items}}{{$value}}\n\nignored\n\n{{/value}}{{/items}}', + ); + + $this->mustache->setPartials($partials); + + $tpl = $this->mustache->loadTemplate( + '{{{{/value}}\n\n{{/parent}}' + ); + + $data = array('items' => array(1, 2, 3)); + + $this->assertEquals('<1><2><3>', $tpl->render($data)); + } + + public function testInheritanceWithLazyEvaluationAndSections() + { + $partials = array( + 'parent' => '{{#items}}{{$value}}\n\nignored {{.}} {{#more}} there is more {{/more}}\n\n{{/value}}{{/items}}', + ); + + $this->mustache->setPartials($partials); + + $tpl = $this->mustache->loadTemplate( + '{{{{#more}} there is less {{/more}}{{/value}}\n\n{{/parent}}' + ); + + $data = array('items' => array(1, 2, 3), 'more' => 'stuff'); + + $this->assertEquals('<1> there is less <2> there is less <3> there is less ', $tpl->render($data)); + } + + /** + * @dataProvider getIllegalInheritanceExamples + * @expectedException Mustache_Exception_SyntaxException + * @expectedExceptionMessage Illegal content in < parent tag + */ + public function testIllegalInheritanceExamples($partials, $data, $template) + { + $this->mustache->setPartials($partials); + $tpl = $this->mustache->loadTemplate($template); + $tpl->render($data); + } + + /** + * @dataProvider getLegalInheritanceExamples + */ + public function testLegalInheritanceExamples($partials, $data, $template, $expect) + { + $this->mustache->setPartials($partials); + $tpl = $this->mustache->loadTemplate($template); + $this->assertSame($expect, $tpl->render($data)); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/MustacheInjectionTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/MustacheInjectionTest.php new file mode 100644 index 0000000..7a9d6ac --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/MustacheInjectionTest.php @@ -0,0 +1,83 @@ +mustache = new Mustache_Engine(); + } + + /** + * @dataProvider injectionData + */ + public function testInjection($tpl, $data, $partials, $expect) + { + $this->mustache->setPartials($partials); + $this->assertEquals($expect, $this->mustache->render($tpl, $data)); + } + + public function injectionData() + { + $interpolationData = array( + 'a' => '{{ b }}', + 'b' => 'FAIL', + ); + + $sectionData = array( + 'a' => true, + 'b' => '{{ c }}', + 'c' => 'FAIL', + ); + + $lambdaInterpolationData = array( + 'a' => array($this, 'lambdaInterpolationCallback'), + 'b' => '{{ c }}', + 'c' => 'FAIL', + ); + + $lambdaSectionData = array( + 'a' => array($this, 'lambdaSectionCallback'), + 'b' => '{{ c }}', + 'c' => 'FAIL', + ); + + return array( + array('{{ a }}', $interpolationData, array(), '{{ b }}'), + array('{{{ a }}}', $interpolationData, array(), '{{ b }}'), + + array('{{# a }}{{ b }}{{/ a }}', $sectionData, array(), '{{ c }}'), + array('{{# a }}{{{ b }}}{{/ a }}', $sectionData, array(), '{{ c }}'), + + array('{{> partial }}', $interpolationData, array('partial' => '{{ a }}'), '{{ b }}'), + array('{{> partial }}', $interpolationData, array('partial' => '{{{ a }}}'), '{{ b }}'), + + array('{{ a }}', $lambdaInterpolationData, array(), '{{ c }}'), + array('{{# a }}b{{/ a }}', $lambdaSectionData, array(), '{{ c }}'), + ); + } + + public static function lambdaInterpolationCallback() + { + return '{{ b }}'; + } + + public static function lambdaSectionCallback($text) + { + return '{{ ' . $text . ' }}'; + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/MustacheSpecTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/MustacheSpecTest.php new file mode 100644 index 0000000..6cde602 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/MustacheSpecTest.php @@ -0,0 +1,121 @@ +markTestSkipped('Mustache spec submodule not initialized: run "git submodule update --init"'); + } + } + + /** + * @group comments + * @dataProvider loadCommentSpec + */ + public function testCommentSpec($desc, $source, $partials, $data, $expected) + { + $template = self::loadTemplate($source, $partials); + $this->assertEquals($expected, $template->render($data), $desc); + } + + public function loadCommentSpec() + { + return $this->loadSpec('comments'); + } + + /** + * @group delimiters + * @dataProvider loadDelimitersSpec + */ + public function testDelimitersSpec($desc, $source, $partials, $data, $expected) + { + $template = self::loadTemplate($source, $partials); + $this->assertEquals($expected, $template->render($data), $desc); + } + + public function loadDelimitersSpec() + { + return $this->loadSpec('delimiters'); + } + + /** + * @group interpolation + * @dataProvider loadInterpolationSpec + */ + public function testInterpolationSpec($desc, $source, $partials, $data, $expected) + { + $template = self::loadTemplate($source, $partials); + $this->assertEquals($expected, $template->render($data), $desc); + } + + public function loadInterpolationSpec() + { + return $this->loadSpec('interpolation'); + } + + /** + * @group inverted + * @group inverted-sections + * @dataProvider loadInvertedSpec + */ + public function testInvertedSpec($desc, $source, $partials, $data, $expected) + { + $template = self::loadTemplate($source, $partials); + $this->assertEquals($expected, $template->render($data), $desc); + } + + public function loadInvertedSpec() + { + return $this->loadSpec('inverted'); + } + + /** + * @group partials + * @dataProvider loadPartialsSpec + */ + public function testPartialsSpec($desc, $source, $partials, $data, $expected) + { + $template = self::loadTemplate($source, $partials); + $this->assertEquals($expected, $template->render($data), $desc); + } + + public function loadPartialsSpec() + { + return $this->loadSpec('partials'); + } + + /** + * @group sections + * @dataProvider loadSectionsSpec + */ + public function testSectionsSpec($desc, $source, $partials, $data, $expected) + { + $template = self::loadTemplate($source, $partials); + $this->assertEquals($expected, $template->render($data), $desc); + } + + public function loadSectionsSpec() + { + return $this->loadSpec('sections'); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/NestedPartialIndentTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/NestedPartialIndentTest.php new file mode 100644 index 0000000..90af4d9 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/NestedPartialIndentTest.php @@ -0,0 +1,45 @@ + $partials, + )); + $tpl = $m->loadTemplate($src); + $this->assertEquals($expected, $tpl->render()); + } + + public function partialsAndStuff() + { + $partials = array( + 'a' => ' {{> b }}', + 'b' => ' {{> d }}', + 'c' => ' {{> d }}{{> d }}', + 'd' => 'D!', + ); + + return array( + array(' {{> a }}', $partials, ' D!'), + array(' {{> b }}', $partials, ' D!'), + array(' {{> c }}', $partials, ' D!D!'), + ); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/ObjectSectionTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/ObjectSectionTest.php new file mode 100644 index 0000000..3cf01e1 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Functional/ObjectSectionTest.php @@ -0,0 +1,110 @@ +mustache = new Mustache_Engine(); + } + + public function testBasicObject() + { + $tpl = $this->mustache->loadTemplate('{{#foo}}{{name}}{{/foo}}'); + $this->assertEquals('Foo', $tpl->render(new Mustache_Test_Functional_Alpha())); + } + + /** + * @group magic_methods + */ + public function testObjectWithGet() + { + $tpl = $this->mustache->loadTemplate('{{#foo}}{{name}}{{/foo}}'); + $this->assertEquals('Foo', $tpl->render(new Mustache_Test_Functional_Beta())); + } + + /** + * @group magic_methods + */ + public function testSectionObjectWithGet() + { + $tpl = $this->mustache->loadTemplate('{{#bar}}{{#foo}}{{name}}{{/foo}}{{/bar}}'); + $this->assertEquals('Foo', $tpl->render(new Mustache_Test_Functional_Gamma())); + } + + public function testSectionObjectWithFunction() + { + $tpl = $this->mustache->loadTemplate('{{#foo}}{{name}}{{/foo}}'); + $alpha = new Mustache_Test_Functional_Alpha(); + $alpha->foo = new Mustache_Test_Functional_Delta(); + $this->assertEquals('Foo', $tpl->render($alpha)); + } +} + +class Mustache_Test_Functional_Alpha +{ + public $foo; + + public function __construct() + { + $this->foo = new StdClass(); + $this->foo->name = 'Foo'; + $this->foo->number = 1; + } +} + +class Mustache_Test_Functional_Beta +{ + protected $_data = array(); + + public function __construct() + { + $this->_data['foo'] = new StdClass(); + $this->_data['foo']->name = 'Foo'; + $this->_data['foo']->number = 1; + } + + public function __isset($name) + { + return array_key_exists($name, $this->_data); + } + + public function __get($name) + { + return $this->_data[$name]; + } +} + +class Mustache_Test_Functional_Gamma +{ + public $bar; + + public function __construct() + { + $this->bar = new Mustache_Test_Functional_Beta(); + } +} + +class Mustache_Test_Functional_Delta +{ + protected $_name = 'Foo'; + + public function name() + { + return $this->_name; + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FunctionalTestCase.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FunctionalTestCase.php new file mode 100644 index 0000000..213b045 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/FunctionalTestCase.php @@ -0,0 +1,47 @@ + $foo, + 'bar' => $bar, + )); + + $this->assertSame($foo, $helpers->get('foo')); + $this->assertSame($bar, $helpers->get('bar')); + } + + public static function getFoo() + { + echo 'foo'; + } + + public function testAccessorsAndMutators() + { + $foo = array($this, 'getFoo'); + $bar = 'BAR'; + + $helpers = new Mustache_HelperCollection(); + $this->assertTrue($helpers->isEmpty()); + $this->assertFalse($helpers->has('foo')); + $this->assertFalse($helpers->has('bar')); + + $helpers->add('foo', $foo); + $this->assertFalse($helpers->isEmpty()); + $this->assertTrue($helpers->has('foo')); + $this->assertFalse($helpers->has('bar')); + + $helpers->add('bar', $bar); + $this->assertFalse($helpers->isEmpty()); + $this->assertTrue($helpers->has('foo')); + $this->assertTrue($helpers->has('bar')); + + $helpers->remove('foo'); + $this->assertFalse($helpers->isEmpty()); + $this->assertFalse($helpers->has('foo')); + $this->assertTrue($helpers->has('bar')); + } + + public function testMagicMethods() + { + $foo = array($this, 'getFoo'); + $bar = 'BAR'; + + $helpers = new Mustache_HelperCollection(); + $this->assertTrue($helpers->isEmpty()); + $this->assertFalse($helpers->has('foo')); + $this->assertFalse($helpers->has('bar')); + $this->assertFalse(isset($helpers->foo)); + $this->assertFalse(isset($helpers->bar)); + + $helpers->foo = $foo; + $this->assertFalse($helpers->isEmpty()); + $this->assertTrue($helpers->has('foo')); + $this->assertFalse($helpers->has('bar')); + $this->assertTrue(isset($helpers->foo)); + $this->assertFalse(isset($helpers->bar)); + + $helpers->bar = $bar; + $this->assertFalse($helpers->isEmpty()); + $this->assertTrue($helpers->has('foo')); + $this->assertTrue($helpers->has('bar')); + $this->assertTrue(isset($helpers->foo)); + $this->assertTrue(isset($helpers->bar)); + + unset($helpers->foo); + $this->assertFalse($helpers->isEmpty()); + $this->assertFalse($helpers->has('foo')); + $this->assertTrue($helpers->has('bar')); + $this->assertFalse(isset($helpers->foo)); + $this->assertTrue(isset($helpers->bar)); + } + + /** + * @dataProvider getInvalidHelperArguments + */ + public function testHelperCollectionIsntAfraidToThrowExceptions($helpers = array(), $actions = array(), $exception = null) + { + if ($exception) { + $this->setExpectedException($exception); + } + + $helpers = new Mustache_HelperCollection($helpers); + + foreach ($actions as $method => $args) { + call_user_func_array(array($helpers, $method), $args); + } + } + + public function getInvalidHelperArguments() + { + return array( + array( + 'not helpers', + array(), + 'InvalidArgumentException', + ), + array( + array(), + array('get' => array('foo')), + 'InvalidArgumentException', + ), + array( + array('foo' => 'FOO'), + array('get' => array('foo')), + null, + ), + array( + array('foo' => 'FOO'), + array('get' => array('bar')), + 'InvalidArgumentException', + ), + array( + array('foo' => 'FOO'), + array( + 'add' => array('bar', 'BAR'), + 'get' => array('bar'), + ), + null, + ), + array( + array('foo' => 'FOO'), + array( + 'get' => array('foo'), + 'remove' => array('foo'), + ), + null, + ), + array( + array('foo' => 'FOO'), + array( + 'remove' => array('foo'), + 'get' => array('foo'), + ), + 'InvalidArgumentException', + ), + array( + array(), + array('remove' => array('foo')), + 'InvalidArgumentException', + ), + ); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Loader/ArrayLoaderTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Loader/ArrayLoaderTest.php new file mode 100644 index 0000000..1f30987 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Loader/ArrayLoaderTest.php @@ -0,0 +1,52 @@ + 'bar', + )); + + $this->assertEquals('bar', $loader->load('foo')); + } + + public function testSetAndLoadTemplates() + { + $loader = new Mustache_Loader_ArrayLoader(array( + 'foo' => 'bar', + )); + $this->assertEquals('bar', $loader->load('foo')); + + $loader->setTemplate('baz', 'qux'); + $this->assertEquals('qux', $loader->load('baz')); + + $loader->setTemplates(array( + 'foo' => 'FOO', + 'baz' => 'BAZ', + )); + $this->assertEquals('FOO', $loader->load('foo')); + $this->assertEquals('BAZ', $loader->load('baz')); + } + + /** + * @expectedException Mustache_Exception_UnknownTemplateException + */ + public function testMissingTemplatesThrowExceptions() + { + $loader = new Mustache_Loader_ArrayLoader(); + $loader->load('not_a_real_template'); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Loader/CascadingLoaderTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Loader/CascadingLoaderTest.php new file mode 100644 index 0000000..ecf80d6 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Loader/CascadingLoaderTest.php @@ -0,0 +1,40 @@ + '{{ foo }}')), + new Mustache_Loader_ArrayLoader(array('bar' => '{{#bar}}BAR{{/bar}}')), + )); + + $this->assertEquals('{{ foo }}', $loader->load('foo')); + $this->assertEquals('{{#bar}}BAR{{/bar}}', $loader->load('bar')); + } + + /** + * @expectedException Mustache_Exception_UnknownTemplateException + */ + public function testMissingTemplatesThrowExceptions() + { + $loader = new Mustache_Loader_CascadingLoader(array( + new Mustache_Loader_ArrayLoader(array('foo' => '{{ foo }}')), + new Mustache_Loader_ArrayLoader(array('bar' => '{{#bar}}BAR{{/bar}}')), + )); + + $loader->load('not_a_real_template'); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Loader/FilesystemLoaderTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Loader/FilesystemLoaderTest.php new file mode 100644 index 0000000..8c06e76 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Loader/FilesystemLoaderTest.php @@ -0,0 +1,80 @@ + '.ms')); + $this->assertEquals('alpha contents', $loader->load('alpha')); + $this->assertEquals('beta contents', $loader->load('beta.ms')); + } + + public function testTrailingSlashes() + { + $baseDir = dirname(__FILE__) . '/../../../fixtures/templates/'; + $loader = new Mustache_Loader_FilesystemLoader($baseDir); + $this->assertEquals('one contents', $loader->load('one')); + } + + public function testConstructorWithProtocol() + { + $baseDir = realpath(dirname(__FILE__) . '/../../../fixtures/templates'); + + $loader = new Mustache_Loader_FilesystemLoader('test://' . $baseDir, array('extension' => '.ms')); + $this->assertEquals('alpha contents', $loader->load('alpha')); + $this->assertEquals('beta contents', $loader->load('beta.ms')); + } + + public function testLoadTemplates() + { + $baseDir = realpath(dirname(__FILE__) . '/../../../fixtures/templates'); + $loader = new Mustache_Loader_FilesystemLoader($baseDir); + $this->assertEquals('one contents', $loader->load('one')); + $this->assertEquals('two contents', $loader->load('two.mustache')); + } + + public function testEmptyExtensionString() + { + $baseDir = realpath(dirname(__FILE__) . '/../../../fixtures/templates'); + + $loader = new Mustache_Loader_FilesystemLoader($baseDir, array('extension' => '')); + $this->assertEquals('one contents', $loader->load('one.mustache')); + $this->assertEquals('alpha contents', $loader->load('alpha.ms')); + + $loader = new Mustache_Loader_FilesystemLoader($baseDir, array('extension' => null)); + $this->assertEquals('two contents', $loader->load('two.mustache')); + $this->assertEquals('beta contents', $loader->load('beta.ms')); + } + + /** + * @expectedException Mustache_Exception_RuntimeException + */ + public function testMissingBaseDirThrowsException() + { + new Mustache_Loader_FilesystemLoader(dirname(__FILE__) . '/not_a_directory'); + } + + /** + * @expectedException Mustache_Exception_UnknownTemplateException + */ + public function testMissingTemplateThrowsException() + { + $baseDir = realpath(dirname(__FILE__) . '/../../../fixtures/templates'); + $loader = new Mustache_Loader_FilesystemLoader($baseDir); + + $loader->load('fake'); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Loader/InlineLoaderTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Loader/InlineLoaderTest.php new file mode 100644 index 0000000..24f2e0b --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Loader/InlineLoaderTest.php @@ -0,0 +1,56 @@ +assertEquals('{{ foo }}', $loader->load('foo')); + $this->assertEquals('{{#bar}}BAR{{/bar}}', $loader->load('bar')); + } + + /** + * @expectedException Mustache_Exception_UnknownTemplateException + */ + public function testMissingTemplatesThrowExceptions() + { + $loader = new Mustache_Loader_InlineLoader(__FILE__, __COMPILER_HALT_OFFSET__); + $loader->load('not_a_real_template'); + } + + /** + * @expectedException Mustache_Exception_InvalidArgumentException + */ + public function testInvalidOffsetThrowsException() + { + new Mustache_Loader_InlineLoader(__FILE__, 'notanumber'); + } + + /** + * @expectedException Mustache_Exception_InvalidArgumentException + */ + public function testInvalidFileThrowsException() + { + new Mustache_Loader_InlineLoader('notarealfile', __COMPILER_HALT_OFFSET__); + } +} + +__halt_compiler(); + +@@ foo +{{ foo }} + +@@ bar +{{#bar}}BAR{{/bar}} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Loader/ProductionFilesystemLoaderTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Loader/ProductionFilesystemLoaderTest.php new file mode 100644 index 0000000..0c7c7e3 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Loader/ProductionFilesystemLoaderTest.php @@ -0,0 +1,103 @@ + '.ms')); + $this->assertInstanceOf('Mustache_Source', $loader->load('alpha')); + $this->assertEquals('alpha contents', $loader->load('alpha')->getSource()); + $this->assertInstanceOf('Mustache_Source', $loader->load('beta.ms')); + $this->assertEquals('beta contents', $loader->load('beta.ms')->getSource()); + } + + public function testTrailingSlashes() + { + $baseDir = dirname(__FILE__) . '/../../../fixtures/templates/'; + $loader = new Mustache_Loader_ProductionFilesystemLoader($baseDir); + $this->assertEquals('one contents', $loader->load('one')->getSource()); + } + + public function testConstructorWithProtocol() + { + $baseDir = realpath(dirname(__FILE__) . '/../../../fixtures/templates'); + + $loader = new Mustache_Loader_ProductionFilesystemLoader('file://' . $baseDir, array('extension' => '.ms')); + $this->assertEquals('alpha contents', $loader->load('alpha')->getSource()); + $this->assertEquals('beta contents', $loader->load('beta.ms')->getSource()); + } + + public function testLoadTemplates() + { + $baseDir = realpath(dirname(__FILE__) . '/../../../fixtures/templates'); + $loader = new Mustache_Loader_ProductionFilesystemLoader($baseDir); + $this->assertEquals('one contents', $loader->load('one')->getSource()); + $this->assertEquals('two contents', $loader->load('two.mustache')->getSource()); + } + + public function testEmptyExtensionString() + { + $baseDir = realpath(dirname(__FILE__) . '/../../../fixtures/templates'); + + $loader = new Mustache_Loader_ProductionFilesystemLoader($baseDir, array('extension' => '')); + $this->assertEquals('one contents', $loader->load('one.mustache')->getSource()); + $this->assertEquals('alpha contents', $loader->load('alpha.ms')->getSource()); + + $loader = new Mustache_Loader_ProductionFilesystemLoader($baseDir, array('extension' => null)); + $this->assertEquals('two contents', $loader->load('two.mustache')->getSource()); + $this->assertEquals('beta contents', $loader->load('beta.ms')->getSource()); + } + + /** + * @expectedException Mustache_Exception_RuntimeException + */ + public function testMissingBaseDirThrowsException() + { + new Mustache_Loader_ProductionFilesystemLoader(dirname(__FILE__) . '/not_a_directory'); + } + + /** + * @expectedException Mustache_Exception_UnknownTemplateException + */ + public function testMissingTemplateThrowsException() + { + $baseDir = realpath(dirname(__FILE__) . '/../../../fixtures/templates'); + $loader = new Mustache_Loader_ProductionFilesystemLoader($baseDir); + + $loader->load('fake'); + } + + public function testLoadWithDifferentStatProps() + { + $baseDir = realpath(dirname(__FILE__) . '/../../../fixtures/templates'); + $noStatLoader = new Mustache_Loader_ProductionFilesystemLoader($baseDir, array('stat_props' => null)); + $mtimeLoader = new Mustache_Loader_ProductionFilesystemLoader($baseDir, array('stat_props' => array('mtime'))); + $sizeLoader = new Mustache_Loader_ProductionFilesystemLoader($baseDir, array('stat_props' => array('size'))); + $bothLoader = new Mustache_Loader_ProductionFilesystemLoader($baseDir, array('stat_props' => array('mtime', 'size'))); + + $noStatKey = $noStatLoader->load('one.mustache')->getKey(); + $mtimeKey = $mtimeLoader->load('one.mustache')->getKey(); + $sizeKey = $sizeLoader->load('one.mustache')->getKey(); + $bothKey = $bothLoader->load('one.mustache')->getKey(); + + $this->assertNotEquals($noStatKey, $mtimeKey); + $this->assertNotEquals($noStatKey, $sizeKey); + $this->assertNotEquals($noStatKey, $bothKey); + $this->assertNotEquals($mtimeKey, $sizeKey); + $this->assertNotEquals($mtimeKey, $bothKey); + $this->assertNotEquals($sizeKey, $bothKey); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Loader/StringLoaderTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Loader/StringLoaderTest.php new file mode 100644 index 0000000..5896f00 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Loader/StringLoaderTest.php @@ -0,0 +1,25 @@ +assertEquals('foo', $loader->load('foo')); + $this->assertEquals('{{ bar }}', $loader->load('{{ bar }}')); + $this->assertEquals("\n{{! comment }}\n", $loader->load("\n{{! comment }}\n")); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Logger/AbstractLoggerTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Logger/AbstractLoggerTest.php new file mode 100644 index 0000000..19dc27c --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Logger/AbstractLoggerTest.php @@ -0,0 +1,60 @@ +emergency('emergency message'); + $logger->alert('alert message'); + $logger->critical('critical message'); + $logger->error('error message'); + $logger->warning('warning message'); + $logger->notice('notice message'); + $logger->info('info message'); + $logger->debug('debug message'); + + $expected = array( + array(Mustache_Logger::EMERGENCY, 'emergency message', array()), + array(Mustache_Logger::ALERT, 'alert message', array()), + array(Mustache_Logger::CRITICAL, 'critical message', array()), + array(Mustache_Logger::ERROR, 'error message', array()), + array(Mustache_Logger::WARNING, 'warning message', array()), + array(Mustache_Logger::NOTICE, 'notice message', array()), + array(Mustache_Logger::INFO, 'info message', array()), + array(Mustache_Logger::DEBUG, 'debug message', array()), + ); + + $this->assertEquals($expected, $logger->log); + } +} + +class Mustache_Test_Logger_TestLogger extends Mustache_Logger_AbstractLogger +{ + public $log = array(); + + /** + * Logs with an arbitrary level. + * + * @param mixed $level + * @param string $message + * @param array $context + */ + public function log($level, $message, array $context = array()) + { + $this->log[] = array($level, $message, $context); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Logger/StreamLoggerTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Logger/StreamLoggerTest.php new file mode 100644 index 0000000..fc1a06f --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Logger/StreamLoggerTest.php @@ -0,0 +1,209 @@ +log(Mustache_Logger::CRITICAL, 'message'); + + $this->assertEquals("CRITICAL: message\n", file_get_contents($name)); + } + + public function acceptsStreamData() + { + $one = tempnam(sys_get_temp_dir(), 'mustache-test'); + $two = tempnam(sys_get_temp_dir(), 'mustache-test'); + + return array( + array($one, $one), + array($two, fopen($two, 'a')), + ); + } + + /** + * @expectedException Mustache_Exception_LogicException + */ + public function testPrematurelyClosedStreamThrowsException() + { + $stream = tmpfile(); + $logger = new Mustache_Logger_StreamLogger($stream); + fclose($stream); + + $logger->log(Mustache_Logger::CRITICAL, 'message'); + } + + /** + * @dataProvider getLevels + */ + public function testLoggingThresholds($logLevel, $level, $shouldLog) + { + $stream = tmpfile(); + $logger = new Mustache_Logger_StreamLogger($stream, $logLevel); + $logger->log($level, 'logged'); + + rewind($stream); + $result = fread($stream, 1024); + + if ($shouldLog) { + $this->assertContains('logged', $result); + } else { + $this->assertEmpty($result); + } + } + + public function getLevels() + { + // $logLevel, $level, $shouldLog + return array( + // identities + array(Mustache_Logger::EMERGENCY, Mustache_Logger::EMERGENCY, true), + array(Mustache_Logger::ALERT, Mustache_Logger::ALERT, true), + array(Mustache_Logger::CRITICAL, Mustache_Logger::CRITICAL, true), + array(Mustache_Logger::ERROR, Mustache_Logger::ERROR, true), + array(Mustache_Logger::WARNING, Mustache_Logger::WARNING, true), + array(Mustache_Logger::NOTICE, Mustache_Logger::NOTICE, true), + array(Mustache_Logger::INFO, Mustache_Logger::INFO, true), + array(Mustache_Logger::DEBUG, Mustache_Logger::DEBUG, true), + + // one above + array(Mustache_Logger::ALERT, Mustache_Logger::EMERGENCY, true), + array(Mustache_Logger::CRITICAL, Mustache_Logger::ALERT, true), + array(Mustache_Logger::ERROR, Mustache_Logger::CRITICAL, true), + array(Mustache_Logger::WARNING, Mustache_Logger::ERROR, true), + array(Mustache_Logger::NOTICE, Mustache_Logger::WARNING, true), + array(Mustache_Logger::INFO, Mustache_Logger::NOTICE, true), + array(Mustache_Logger::DEBUG, Mustache_Logger::INFO, true), + + // one below + array(Mustache_Logger::EMERGENCY, Mustache_Logger::ALERT, false), + array(Mustache_Logger::ALERT, Mustache_Logger::CRITICAL, false), + array(Mustache_Logger::CRITICAL, Mustache_Logger::ERROR, false), + array(Mustache_Logger::ERROR, Mustache_Logger::WARNING, false), + array(Mustache_Logger::WARNING, Mustache_Logger::NOTICE, false), + array(Mustache_Logger::NOTICE, Mustache_Logger::INFO, false), + array(Mustache_Logger::INFO, Mustache_Logger::DEBUG, false), + ); + } + + /** + * @dataProvider getLogMessages + */ + public function testLogging($level, $message, $context, $expected) + { + $stream = tmpfile(); + $logger = new Mustache_Logger_StreamLogger($stream, Mustache_Logger::DEBUG); + $logger->log($level, $message, $context); + + rewind($stream); + $result = fread($stream, 1024); + + $this->assertEquals($expected, $result); + } + + public function getLogMessages() + { + // $level, $message, $context, $expected + return array( + array(Mustache_Logger::DEBUG, 'debug message', array(), "DEBUG: debug message\n"), + array(Mustache_Logger::INFO, 'info message', array(), "INFO: info message\n"), + array(Mustache_Logger::NOTICE, 'notice message', array(), "NOTICE: notice message\n"), + array(Mustache_Logger::WARNING, 'warning message', array(), "WARNING: warning message\n"), + array(Mustache_Logger::ERROR, 'error message', array(), "ERROR: error message\n"), + array(Mustache_Logger::CRITICAL, 'critical message', array(), "CRITICAL: critical message\n"), + array(Mustache_Logger::ALERT, 'alert message', array(), "ALERT: alert message\n"), + array(Mustache_Logger::EMERGENCY, 'emergency message', array(), "EMERGENCY: emergency message\n"), + + // with context + array( + Mustache_Logger::ERROR, + 'error message', + array('name' => 'foo', 'number' => 42), + "ERROR: error message\n", + ), + + // with interpolation + array( + Mustache_Logger::ERROR, + 'error {name}-{number}', + array('name' => 'foo', 'number' => 42), + "ERROR: error foo-42\n", + ), + + // with iterpolation false positive + array( + Mustache_Logger::ERROR, + 'error {nothing}', + array('name' => 'foo', 'number' => 42), + "ERROR: error {nothing}\n", + ), + + // with interpolation injection + array( + Mustache_Logger::ERROR, + '{foo}', + array('foo' => '{bar}', 'bar' => 'FAIL'), + "ERROR: {bar}\n", + ), + ); + } + + public function testChangeLoggingLevels() + { + $stream = tmpfile(); + $logger = new Mustache_Logger_StreamLogger($stream); + + $logger->setLevel(Mustache_Logger::ERROR); + $this->assertEquals(Mustache_Logger::ERROR, $logger->getLevel()); + + $logger->log(Mustache_Logger::WARNING, 'ignore this'); + + $logger->setLevel(Mustache_Logger::INFO); + $this->assertEquals(Mustache_Logger::INFO, $logger->getLevel()); + + $logger->log(Mustache_Logger::WARNING, 'log this'); + + $logger->setLevel(Mustache_Logger::CRITICAL); + $this->assertEquals(Mustache_Logger::CRITICAL, $logger->getLevel()); + + $logger->log(Mustache_Logger::ERROR, 'ignore this'); + + rewind($stream); + $result = fread($stream, 1024); + + $this->assertEquals("WARNING: log this\n", $result); + } + + /** + * @expectedException Mustache_Exception_InvalidArgumentException + */ + public function testThrowsInvalidArgumentExceptionWhenSettingUnknownLevels() + { + $logger = new Mustache_Logger_StreamLogger(tmpfile()); + $logger->setLevel('bacon'); + } + + /** + * @expectedException Mustache_Exception_InvalidArgumentException + */ + public function testThrowsInvalidArgumentExceptionWhenLoggingUnknownLevels() + { + $logger = new Mustache_Logger_StreamLogger(tmpfile()); + $logger->log('bacon', 'CODE BACON ERROR!'); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/ParserTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/ParserTest.php new file mode 100644 index 0000000..d8458f7 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/ParserTest.php @@ -0,0 +1,425 @@ +assertEquals($expected, $parser->parse($tokens)); + } + + public function getTokenSets() + { + return array( + array( + array(), + array(), + ), + + array( + array(array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::VALUE => 'text', + )), + array(array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::VALUE => 'text', + )), + ), + + array( + array(array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_ESCAPED, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::NAME => 'name', + )), + array(array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_ESCAPED, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::NAME => 'name', + )), + ), + + array( + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::VALUE => 'foo', + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_INVERTED, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 123, + Mustache_Tokenizer::NAME => 'parent', + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_ESCAPED, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::NAME => 'name', + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_END_SECTION, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 456, + Mustache_Tokenizer::NAME => 'parent', + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::VALUE => 'bar', + ), + ), + + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::VALUE => 'foo', + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_INVERTED, + Mustache_Tokenizer::NAME => 'parent', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 123, + Mustache_Tokenizer::END => 456, + Mustache_Tokenizer::NODES => array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_ESCAPED, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::NAME => 'name', + ), + ), + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::VALUE => 'bar', + ), + ), + ), + + // This *would* be an invalid inheritance parse tree, but that pragma + // isn't enabled so it'll thunk it back into an "escaped" token: + array( + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_BLOCK_VAR, + Mustache_Tokenizer::NAME => 'foo', + Mustache_Tokenizer::OTAG => '{{', + Mustache_Tokenizer::CTAG => '}}', + Mustache_Tokenizer::LINE => 0, + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::VALUE => 'bar', + ), + ), + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_ESCAPED, + Mustache_Tokenizer::NAME => '$foo', + Mustache_Tokenizer::OTAG => '{{', + Mustache_Tokenizer::CTAG => '}}', + Mustache_Tokenizer::LINE => 0, + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::VALUE => 'bar', + ), + ), + ), + + array( + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::VALUE => ' ', + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_DELIM_CHANGE, + Mustache_Tokenizer::LINE => 0, + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::VALUE => " \n", + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_ESCAPED, + Mustache_Tokenizer::NAME => 'foo', + Mustache_Tokenizer::OTAG => '[[', + Mustache_Tokenizer::CTAG => ']]', + Mustache_Tokenizer::LINE => 1, + ), + ), + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_ESCAPED, + Mustache_Tokenizer::NAME => 'foo', + Mustache_Tokenizer::OTAG => '[[', + Mustache_Tokenizer::CTAG => ']]', + Mustache_Tokenizer::LINE => 1, + ), + ), + ), + + ); + } + + /** + * @dataProvider getInheritanceTokenSets + */ + public function testParseWithInheritance($tokens, $expected) + { + $parser = new Mustache_Parser(); + $parser->setPragmas(array(Mustache_Engine::PRAGMA_BLOCKS)); + $this->assertEquals($expected, $parser->parse($tokens)); + } + + public function getInheritanceTokenSets() + { + return array( + array( + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_PARENT, + Mustache_Tokenizer::NAME => 'foo', + Mustache_Tokenizer::OTAG => '{{', + Mustache_Tokenizer::CTAG => '}}', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 8, + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_BLOCK_VAR, + Mustache_Tokenizer::NAME => 'bar', + Mustache_Tokenizer::OTAG => '{{', + Mustache_Tokenizer::CTAG => '}}', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 16, + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::VALUE => 'baz', + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_END_SECTION, + Mustache_Tokenizer::NAME => 'bar', + Mustache_Tokenizer::OTAG => '{{', + Mustache_Tokenizer::CTAG => '}}', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 19, + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_END_SECTION, + Mustache_Tokenizer::NAME => 'foo', + Mustache_Tokenizer::OTAG => '{{', + Mustache_Tokenizer::CTAG => '}}', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 27, + ), + ), + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_PARENT, + Mustache_Tokenizer::NAME => 'foo', + Mustache_Tokenizer::OTAG => '{{', + Mustache_Tokenizer::CTAG => '}}', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 8, + Mustache_Tokenizer::END => 27, + Mustache_Tokenizer::NODES => array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_BLOCK_ARG, + Mustache_Tokenizer::NAME => 'bar', + Mustache_Tokenizer::OTAG => '{{', + Mustache_Tokenizer::CTAG => '}}', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 16, + Mustache_Tokenizer::END => 19, + Mustache_Tokenizer::NODES => array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::VALUE => 'baz', + ), + ), + ), + ), + ), + ), + ), + + array( + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_BLOCK_VAR, + Mustache_Tokenizer::NAME => 'foo', + Mustache_Tokenizer::OTAG => '{{', + Mustache_Tokenizer::CTAG => '}}', + Mustache_Tokenizer::LINE => 0, + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::VALUE => 'bar', + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_END_SECTION, + Mustache_Tokenizer::NAME => 'foo', + Mustache_Tokenizer::OTAG => '{{', + Mustache_Tokenizer::CTAG => '}}', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 11, + ), + ), + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_BLOCK_VAR, + Mustache_Tokenizer::NAME => 'foo', + Mustache_Tokenizer::OTAG => '{{', + Mustache_Tokenizer::CTAG => '}}', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::END => 11, + Mustache_Tokenizer::NODES => array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::VALUE => 'bar', + ), + ), + ), + ), + ), + ); + } + + /** + * @dataProvider getBadParseTrees + * @expectedException Mustache_Exception_SyntaxException + */ + public function testParserThrowsExceptions($tokens) + { + $parser = new Mustache_Parser(); + $parser->parse($tokens); + } + + public function getBadParseTrees() + { + return array( + // no close + array( + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_SECTION, + Mustache_Tokenizer::NAME => 'parent', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 123, + ), + ), + ), + + // no close inverted + array( + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_INVERTED, + Mustache_Tokenizer::NAME => 'parent', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 123, + ), + ), + ), + + // no opening inverted + array( + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_END_SECTION, + Mustache_Tokenizer::NAME => 'parent', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 123, + ), + ), + ), + + // weird nesting + array( + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_SECTION, + Mustache_Tokenizer::NAME => 'parent', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 123, + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_SECTION, + Mustache_Tokenizer::NAME => 'child', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 123, + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_END_SECTION, + Mustache_Tokenizer::NAME => 'parent', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 123, + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_END_SECTION, + Mustache_Tokenizer::NAME => 'child', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 123, + ), + ), + ), + + // This *would* be a valid inheritance parse tree, but that pragma + // isn't enabled here so it's going to fail :) + array( + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_BLOCK_VAR, + Mustache_Tokenizer::NAME => 'foo', + Mustache_Tokenizer::OTAG => '{{', + Mustache_Tokenizer::CTAG => '}}', + Mustache_Tokenizer::LINE => 0, + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::VALUE => 'bar', + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_END_SECTION, + Mustache_Tokenizer::NAME => 'foo', + Mustache_Tokenizer::OTAG => '{{', + Mustache_Tokenizer::CTAG => '}}', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 11, + ), + ), + ), + ); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Source/FilesystemSourceTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Source/FilesystemSourceTest.php new file mode 100644 index 0000000..a636ffe --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/Source/FilesystemSourceTest.php @@ -0,0 +1,25 @@ +getKey(); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/SpecTestCase.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/SpecTestCase.php new file mode 100644 index 0000000..db188de --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/SpecTestCase.php @@ -0,0 +1,67 @@ +setPartials($partials); + + return self::$mustache->loadTemplate($source); + } + + /** + * Data provider for the mustache spec test. + * + * Loads YAML files from the spec and converts them to PHPisms. + * + * @param string $name + * + * @return array + */ + protected function loadSpec($name) + { + $filename = dirname(__FILE__) . '/../../../vendor/spec/specs/' . $name . '.yml'; + if (!file_exists($filename)) { + return array(); + } + + $data = array(); + $yaml = new sfYamlParser(); + $file = file_get_contents($filename); + + // @hack: pre-process the 'lambdas' spec so the Symfony YAML parser doesn't complain. + if ($name === '~lambdas') { + $file = str_replace(" !code\n", "\n", $file); + } + + $spec = $yaml->parse($file); + + foreach ($spec['tests'] as $test) { + $data[] = array( + $test['name'] . ': ' . $test['desc'], + $test['template'], + isset($test['partials']) ? $test['partials'] : array(), + $test['data'], + $test['expected'], + ); + } + + return $data; + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/TemplateTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/TemplateTest.php new file mode 100644 index 0000000..60065aa --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/TemplateTest.php @@ -0,0 +1,55 @@ +assertSame($mustache, $template->getMustache()); + } + + public function testRendering() + { + $rendered = '<< wheee >>'; + $mustache = new Mustache_Engine(); + $template = new Mustache_Test_TemplateStub($mustache); + $template->rendered = $rendered; + $context = new Mustache_Context(); + + if (version_compare(PHP_VERSION, '5.3.0', '>=')) { + $this->assertEquals($rendered, $template()); + } + + $this->assertEquals($rendered, $template->render()); + $this->assertEquals($rendered, $template->renderInternal($context)); + $this->assertEquals($rendered, $template->render(array('foo' => 'bar'))); + } +} + +class Mustache_Test_TemplateStub extends Mustache_Template +{ + public $rendered; + + public function getMustache() + { + return $this->mustache; + } + + public function renderInternal(Mustache_Context $context, $indent = '', $escape = false) + { + return $this->rendered; + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/Mustache/Test/TokenizerTest.php b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/TokenizerTest.php new file mode 100644 index 0000000..38f16dc --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/Mustache/Test/TokenizerTest.php @@ -0,0 +1,306 @@ +assertSame($expected, $tokenizer->scan($text, $delimiters)); + } + + /** + * @expectedException Mustache_Exception_SyntaxException + */ + public function testUnevenBracesThrowExceptions() + { + $tokenizer = new Mustache_Tokenizer(); + + $text = '{{{ name }}'; + $tokenizer->scan($text, null); + } + + /** + * @expectedException Mustache_Exception_SyntaxException + */ + public function testUnevenBracesWithCustomDelimiterThrowExceptions() + { + $tokenizer = new Mustache_Tokenizer(); + + $text = '<%{ name %>'; + $tokenizer->scan($text, '<% %>'); + } + + public function getTokens() + { + return array( + array( + 'text', + null, + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::VALUE => 'text', + ), + ), + ), + + array( + 'text', + '<<< >>>', + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::VALUE => 'text', + ), + ), + ), + + array( + '{{ name }}', + null, + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_ESCAPED, + Mustache_Tokenizer::NAME => 'name', + Mustache_Tokenizer::OTAG => '{{', + Mustache_Tokenizer::CTAG => '}}', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 10, + ), + ), + ), + + array( + '{{ name }}', + '<<< >>>', + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::VALUE => '{{ name }}', + ), + ), + ), + + array( + '<<< name >>>', + '<<< >>>', + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_ESCAPED, + Mustache_Tokenizer::NAME => 'name', + Mustache_Tokenizer::OTAG => '<<<', + Mustache_Tokenizer::CTAG => '>>>', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 12, + ), + ), + ), + + array( + "{{{ a }}}\n{{# b }} \n{{= | | =}}| c ||/ b |\n|{ d }|", + null, + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_UNESCAPED, + Mustache_Tokenizer::NAME => 'a', + Mustache_Tokenizer::OTAG => '{{', + Mustache_Tokenizer::CTAG => '}}', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 8, + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::VALUE => "\n", + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_SECTION, + Mustache_Tokenizer::NAME => 'b', + Mustache_Tokenizer::OTAG => '{{', + Mustache_Tokenizer::CTAG => '}}', + Mustache_Tokenizer::LINE => 1, + Mustache_Tokenizer::INDEX => 18, + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::LINE => 1, + Mustache_Tokenizer::VALUE => " \n", + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_DELIM_CHANGE, + Mustache_Tokenizer::LINE => 2, + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_ESCAPED, + Mustache_Tokenizer::NAME => 'c', + Mustache_Tokenizer::OTAG => '|', + Mustache_Tokenizer::CTAG => '|', + Mustache_Tokenizer::LINE => 2, + Mustache_Tokenizer::INDEX => 37, + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_END_SECTION, + Mustache_Tokenizer::NAME => 'b', + Mustache_Tokenizer::OTAG => '|', + Mustache_Tokenizer::CTAG => '|', + Mustache_Tokenizer::LINE => 2, + Mustache_Tokenizer::INDEX => 37, + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::LINE => 2, + Mustache_Tokenizer::VALUE => "\n", + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_UNESCAPED, + Mustache_Tokenizer::NAME => 'd', + Mustache_Tokenizer::OTAG => '|', + Mustache_Tokenizer::CTAG => '|', + Mustache_Tokenizer::LINE => 3, + Mustache_Tokenizer::INDEX => 51, + ), + + ), + ), + + // See https://github.com/bobthecow/mustache.php/issues/183 + array( + '{{# a }}0{{/ a }}', + null, + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_SECTION, + Mustache_Tokenizer::NAME => 'a', + Mustache_Tokenizer::OTAG => '{{', + Mustache_Tokenizer::CTAG => '}}', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 8, + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::VALUE => '0', + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_END_SECTION, + Mustache_Tokenizer::NAME => 'a', + Mustache_Tokenizer::OTAG => '{{', + Mustache_Tokenizer::CTAG => '}}', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 9, + ), + ), + ), + + // custom delimiters don't swallow the next character, even if it is a }, }}}, or the same delimiter + array( + '<% a %>} <% b %>%> <% c %>}}}', + '<% %>', + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_ESCAPED, + Mustache_Tokenizer::NAME => 'a', + Mustache_Tokenizer::OTAG => '<%', + Mustache_Tokenizer::CTAG => '%>', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 7, + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::VALUE => '} ', + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_ESCAPED, + Mustache_Tokenizer::NAME => 'b', + Mustache_Tokenizer::OTAG => '<%', + Mustache_Tokenizer::CTAG => '%>', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 16, + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::VALUE => '%> ', + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_ESCAPED, + Mustache_Tokenizer::NAME => 'c', + Mustache_Tokenizer::OTAG => '<%', + Mustache_Tokenizer::CTAG => '%>', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 26, + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::VALUE => '}}}', + ), + ), + ), + + // unescaped custom delimiters are properly parsed + array( + '<%{ a }%>', + '<% %>', + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_UNESCAPED, + Mustache_Tokenizer::NAME => 'a', + Mustache_Tokenizer::OTAG => '<%', + Mustache_Tokenizer::CTAG => '%>', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 9, + ), + ), + ), + + // Ensure that $arg token is not picked up during tokenization + array( + '{{$arg}}default{{/arg}}', + null, + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_BLOCK_VAR, + Mustache_Tokenizer::NAME => 'arg', + Mustache_Tokenizer::OTAG => '{{', + Mustache_Tokenizer::CTAG => '}}', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 8, + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT, + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::VALUE => 'default', + ), + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_END_SECTION, + Mustache_Tokenizer::NAME => 'arg', + Mustache_Tokenizer::OTAG => '{{', + Mustache_Tokenizer::CTAG => '}}', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 15, + ), + ), + ), + ); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/bootstrap.php b/admin/lib/vendor/mustache/mustache/test/bootstrap.php new file mode 100644 index 0000000..b3d0a19 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/bootstrap.php @@ -0,0 +1,91 @@ +filehandle = fopen($path, $mode); + + return $this->filehandle !== false; + } + + /** + * @return array + */ + public function stream_stat() + { + return array(); + } + + /** + * @param int $count + * + * @return string + */ + public function stream_read($count) + { + return fgets($this->filehandle, $count); + } + + /** + * @return bool + */ + public function stream_eof() + { + return feof($this->filehandle); + } + + /** + * @return bool + */ + public function stream_close() + { + return fclose($this->filehandle); + } +} + +if (!stream_wrapper_register('test', 'TestStream')) { + die('Failed to register protocol'); +} diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/autoloader/Mustache/Bar.php b/admin/lib/vendor/mustache/mustache/test/fixtures/autoloader/Mustache/Bar.php new file mode 100644 index 0000000..35c2668 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/autoloader/Mustache/Bar.php @@ -0,0 +1,15 @@ + 'Punk', + 'subgenres' => array( + array( + 'name' => 'Hardcore', + 'subgenres' => array( + array( + 'name' => 'First wave of black metal', + 'subgenres' => array( + array('name' => 'Norwegian black metal'), + array( + 'name' => 'Death metal', + 'subgenres' => array( + array( + 'name' => 'Swedish death metal', + 'subgenres' => array( + array('name' => 'New wave of American metal'), + ), + ), + ), + ), + ), + ), + array( + 'name' => 'Thrash metal', + 'subgenres' => array( + array('name' => 'Grindcore'), + array( + 'name' => 'Metalcore', + 'subgenres' => array( + array('name' => 'Nu metal'), + ), + ), + ), + ), + ), + ), + ), + ), + ); +} diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/anchored_dot_notation/anchored_dot_notation.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/anchored_dot_notation/anchored_dot_notation.mustache new file mode 100644 index 0000000..9494fb1 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/anchored_dot_notation/anchored_dot_notation.mustache @@ -0,0 +1,4 @@ +{{% ANCHORED-DOT }} +{{# genres }} +{{> genre }} +{{/ genres }} \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/anchored_dot_notation/anchored_dot_notation.txt b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/anchored_dot_notation/anchored_dot_notation.txt new file mode 100644 index 0000000..fa56efc --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/anchored_dot_notation/anchored_dot_notation.txt @@ -0,0 +1,11 @@ + - Punk + - Hardcore + - First wave of black metal + - Norwegian black metal + - Death metal + - Swedish death metal + - New wave of American metal + - Thrash metal + - Grindcore + - Metalcore + - Nu metal diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/anchored_dot_notation/partials/genre.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/anchored_dot_notation/partials/genre.mustache new file mode 100644 index 0000000..f51c503 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/anchored_dot_notation/partials/genre.mustache @@ -0,0 +1,5 @@ +{{% ANCHORED-DOT }} + - {{ name }} +{{# .subgenres }} + {{> genre }} +{{/ .subgenres }} \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/blocks/Blocks.php b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/blocks/Blocks.php new file mode 100644 index 0000000..6362aca --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/blocks/Blocks.php @@ -0,0 +1,15 @@ + 'child works', + ); + + public $grandparent = array( + 'parent' => array( + 'child' => 'grandchild works', + ), + ); +} diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/child_context/child_context.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/child_context/child_context.mustache new file mode 100644 index 0000000..e1f2ebc --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/child_context/child_context.mustache @@ -0,0 +1,2 @@ +

{{#parent}}{{child}}{{/parent}}

+

{{#grandparent}}{{#parent}}{{child}}{{/parent}}{{/grandparent}}

\ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/child_context/child_context.txt b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/child_context/child_context.txt new file mode 100644 index 0000000..cfb76bf --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/child_context/child_context.txt @@ -0,0 +1,2 @@ +

child works

+

grandchild works

\ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/comments/Comments.php b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/comments/Comments.php new file mode 100644 index 0000000..88fe821 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/comments/Comments.php @@ -0,0 +1,18 @@ +{{title}}{{! just something interesting... #or ^not... }}

\ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/comments/comments.txt b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/comments/comments.txt new file mode 100644 index 0000000..9f40e77 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/comments/comments.txt @@ -0,0 +1 @@ +

A Comedy of Errors

\ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/complex/complex.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/complex/complex.mustache new file mode 100644 index 0000000..807c201 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/complex/complex.mustache @@ -0,0 +1,16 @@ +

{{header}}

+{{#notEmpty}} +
+{{/notEmpty}} +{{#isEmpty}} +

The list is empty.

+{{/isEmpty}} \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/complex/complex.php b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/complex/complex.php new file mode 100644 index 0000000..7c69615 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/complex/complex.php @@ -0,0 +1,31 @@ + 'red', 'current' => true, 'url' => '#Red'), + array('name' => 'green', 'current' => false, 'url' => '#Green'), + array('name' => 'blue', 'current' => false, 'url' => '#Blue'), + ); + + public function notEmpty() + { + return !($this->isEmpty()); + } + + public function isEmpty() + { + return count($this->item) === 0; + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/complex/complex.txt b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/complex/complex.txt new file mode 100644 index 0000000..facee6d --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/complex/complex.txt @@ -0,0 +1,6 @@ +

Colors

+ diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/delimiters/Delimiters.php b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/delimiters/Delimiters.php new file mode 100644 index 0000000..235a088 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/delimiters/Delimiters.php @@ -0,0 +1,25 @@ + 'And it worked the second time.'), + array('item' => 'As well as the third.'), + ); + } + + public $final = 'Then, surprisingly, it worked the final time.'; +} diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/delimiters/delimiters.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/delimiters/delimiters.mustache new file mode 100644 index 0000000..e9b0332 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/delimiters/delimiters.mustache @@ -0,0 +1,8 @@ +{{=<% %>=}} +* <% start %> +<%=| |=%> +|# middle | +* | item | +|/ middle | +|={{ }}=| +* {{ final }} \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/delimiters/delimiters.txt b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/delimiters/delimiters.txt new file mode 100644 index 0000000..e6b2d7a --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/delimiters/delimiters.txt @@ -0,0 +1,4 @@ +* It worked the first time. +* And it worked the second time. +* As well as the third. +* Then, surprisingly, it worked the final time. \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/dot_notation/DotNotation.php b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/dot_notation/DotNotation.php new file mode 100644 index 0000000..eadbf61 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/dot_notation/DotNotation.php @@ -0,0 +1,24 @@ + array('first' => 'Chris', 'last' => 'Firescythe'), + 'age' => 24, + 'hometown' => array( + 'city' => 'Cincinnati', + 'state' => 'OH', + ), + ); + + public $normal = 'Normal'; +} diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/dot_notation/dot_notation.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/dot_notation/dot_notation.mustache new file mode 100644 index 0000000..0566867 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/dot_notation/dot_notation.mustache @@ -0,0 +1,4 @@ +* {{person.name.first}} {{person.name.last}} +* {{person.age}} +* {{person.hometown.city}}, {{person.hometown.state}} +* {{normal}} \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/dot_notation/dot_notation.txt b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/dot_notation/dot_notation.txt new file mode 100644 index 0000000..f8cf1fa --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/dot_notation/dot_notation.txt @@ -0,0 +1,4 @@ +* Chris Firescythe +* 24 +* Cincinnati, OH +* Normal \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/double_section/DoubleSection.php b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/double_section/DoubleSection.php new file mode 100644 index 0000000..1b3f6b6 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/double_section/DoubleSection.php @@ -0,0 +1,20 @@ + "Shark"'; +} diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/escaped/escaped.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/escaped/escaped.mustache new file mode 100644 index 0000000..8be4ccb --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/escaped/escaped.mustache @@ -0,0 +1 @@ +

{{title}}

\ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/escaped/escaped.txt b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/escaped/escaped.txt new file mode 100644 index 0000000..6ba3657 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/escaped/escaped.txt @@ -0,0 +1 @@ +

"Bear" > "Shark"

\ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/filters/Filters.php b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/filters/Filters.php new file mode 100644 index 0000000..eb6e3b7 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/filters/Filters.php @@ -0,0 +1,97 @@ + 'Alabama', + 'ak' => 'Alaska', + 'az' => 'Arizona', + 'ar' => 'Arkansas', + 'ca' => 'California', + 'co' => 'Colorado', + 'ct' => 'Connecticut', + 'de' => 'Delaware', + 'fl' => 'Florida', + 'ga' => 'Georgia', + 'hi' => 'Hawaii', + 'id' => 'Idaho', + 'il' => 'Illinois', + 'in' => 'Indiana', + 'ia' => 'Iowa', + 'ks' => 'Kansas', + 'ky' => 'Kentucky', + 'la' => 'Louisiana', + 'me' => 'Maine', + 'md' => 'Maryland', + 'ma' => 'Massachusetts', + 'mi' => 'Michigan', + 'mn' => 'Minnesota', + 'ms' => 'Mississippi', + 'mo' => 'Missouri', + 'mt' => 'Montana', + 'ne' => 'Nebraska', + 'nv' => 'Nevada', + 'nh' => 'New Hampshire', + 'nj' => 'New Jersey', + 'nm' => 'New Mexico', + 'ny' => 'New York', + 'nc' => 'North Carolina', + 'nd' => 'North Dakota', + 'oh' => 'Ohio', + 'ok' => 'Oklahoma', + 'or' => 'Oregon', + 'pa' => 'Pennsylvania', + 'ri' => 'Rhode Island', + 'sc' => 'South Carolina', + 'sd' => 'South Dakota', + 'tn' => 'Tennessee', + 'tx' => 'Texas', + 'ut' => 'Utah', + 'vt' => 'Vermont', + 'va' => 'Virginia', + 'wa' => 'Washington', + 'wv' => 'West Virginia', + 'wi' => 'Wisconsin', + 'wy' => 'Wyoming', + ); + + // The next few functions are ugly, because they have to work in PHP 5.2... + // for everyone who doesn't have to support 5.2, please, for the love, make + // your ViewModel return closures rather than `array($this, '...')` + // + // :) + + public function upcase() + { + return array($this, '_upcase'); + } + + public function _upcase($val) + { + return strtoupper($val); + } + + public function eachPair() + { + return array($this, '_eachPair'); + } + + public function _eachPair($val) + { + $ret = array(); + foreach ($val as $key => $value) { + array_push($ret, compact('key', 'value')); + } + + return $ret; + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/filters/filters.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/filters/filters.mustache new file mode 100644 index 0000000..50f1465 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/filters/filters.mustache @@ -0,0 +1,4 @@ +{{%FILTERS}} +{{# states | eachPair }} +{{ key | upcase }}: {{ value }} +{{/ states }} \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/filters/filters.txt b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/filters/filters.txt new file mode 100644 index 0000000..67466fd --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/filters/filters.txt @@ -0,0 +1,50 @@ +AL: Alabama +AK: Alaska +AZ: Arizona +AR: Arkansas +CA: California +CO: Colorado +CT: Connecticut +DE: Delaware +FL: Florida +GA: Georgia +HI: Hawaii +ID: Idaho +IL: Illinois +IN: Indiana +IA: Iowa +KS: Kansas +KY: Kentucky +LA: Louisiana +ME: Maine +MD: Maryland +MA: Massachusetts +MI: Michigan +MN: Minnesota +MS: Mississippi +MO: Missouri +MT: Montana +NE: Nebraska +NV: Nevada +NH: New Hampshire +NJ: New Jersey +NM: New Mexico +NY: New York +NC: North Carolina +ND: North Dakota +OH: Ohio +OK: Oklahoma +OR: Oregon +PA: Pennsylvania +RI: Rhode Island +SC: South Carolina +SD: South Dakota +TN: Tennessee +TX: Texas +UT: Utah +VT: Vermont +VA: Virginia +WA: Washington +WV: West Virginia +WI: Wisconsin +WY: Wyoming diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/grand_parent_context/GrandParentContext.php b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/grand_parent_context/GrandParentContext.php new file mode 100644 index 0000000..2ee0e42 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/grand_parent_context/GrandParentContext.php @@ -0,0 +1,33 @@ +parent_contexts[] = array('parent_id' => 'parent1', 'child_contexts' => array( + array('child_id' => 'parent1-child1'), + array('child_id' => 'parent1-child2'), + )); + + $parent2 = new stdClass(); + $parent2->parent_id = 'parent2'; + $parent2->child_contexts = array( + array('child_id' => 'parent2-child1'), + array('child_id' => 'parent2-child2'), + ); + + $this->parent_contexts[] = $parent2; + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/grand_parent_context/grand_parent_context.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/grand_parent_context/grand_parent_context.mustache new file mode 100644 index 0000000..6d03ddf --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/grand_parent_context/grand_parent_context.mustache @@ -0,0 +1,7 @@ +{{grand_parent_id}} +{{#parent_contexts}} + {{parent_id}} ({{grand_parent_id}}) + {{#child_contexts}} + {{child_id}} ({{parent_id}} << {{grand_parent_id}}) + {{/child_contexts}} +{{/parent_contexts}} diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/grand_parent_context/grand_parent_context.txt b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/grand_parent_context/grand_parent_context.txt new file mode 100644 index 0000000..2687f84 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/grand_parent_context/grand_parent_context.txt @@ -0,0 +1,7 @@ +grand_parent1 + parent1 (grand_parent1) + parent1-child1 (parent1 << grand_parent1) + parent1-child2 (parent1 << grand_parent1) + parent2 (grand_parent1) + parent2-child1 (parent2 << grand_parent1) + parent2-child2 (parent2 << grand_parent1) diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/i18n/I18n.php b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/i18n/I18n.php new file mode 100644 index 0000000..c36bf70 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/i18n/I18n.php @@ -0,0 +1,30 @@ + 'Hola.', + 'My name is {{ name }}.' => 'Me llamo {{ name }}.', + ); + + public static function __trans($text) + { + return isset(self::$dictionary[$text]) ? self::$dictionary[$text] : $text; + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/i18n/i18n.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/i18n/i18n.mustache new file mode 100644 index 0000000..eef169b --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/i18n/i18n.mustache @@ -0,0 +1 @@ +{{#__}}Hello.{{/__}} {{#__}}My name is {{ name }}.{{/__}} \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/i18n/i18n.txt b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/i18n/i18n.txt new file mode 100644 index 0000000..650a71a --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/i18n/i18n.txt @@ -0,0 +1 @@ +Hola. Me llamo Bob. \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/implicit_iterator/ImplicitIterator.php b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/implicit_iterator/ImplicitIterator.php new file mode 100644 index 0000000..074f8f4 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/implicit_iterator/ImplicitIterator.php @@ -0,0 +1,15 @@ +{{name}}
+{{/repo}} +{{^repo}} + No repos :( +{{/repo}} \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/inverted_section/inverted_section.txt b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/inverted_section/inverted_section.txt new file mode 100644 index 0000000..6ba5a99 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/inverted_section/inverted_section.txt @@ -0,0 +1 @@ + No repos :( diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/nested_partials/NestedPartials.php b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/nested_partials/NestedPartials.php new file mode 100644 index 0000000..a2a2bb1 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/nested_partials/NestedPartials.php @@ -0,0 +1,15 @@ + + {{> second }} + \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/nested_partials/nested_partials.txt b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/nested_partials/nested_partials.txt new file mode 100644 index 0000000..62776f9 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/nested_partials/nested_partials.txt @@ -0,0 +1,7 @@ + + + + FOURTH! + + + \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/nested_partials/partials/fourth.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/nested_partials/partials/fourth.mustache new file mode 100644 index 0000000..727676f --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/nested_partials/partials/fourth.mustache @@ -0,0 +1 @@ +{{ val }} diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/nested_partials/partials/second.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/nested_partials/partials/second.mustache new file mode 100644 index 0000000..83f33cf --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/nested_partials/partials/second.mustache @@ -0,0 +1,3 @@ + + {{> third }} + diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/nested_partials/partials/third.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/nested_partials/partials/third.mustache new file mode 100644 index 0000000..f33301a --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/nested_partials/partials/third.mustache @@ -0,0 +1,3 @@ + + {{> fourth }} + diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/partials/Partials.php b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/partials/Partials.php new file mode 100644 index 0000000..e91dc68 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/partials/Partials.php @@ -0,0 +1,19 @@ + 'Page Title', + 'subtitle' => 'Page Subtitle', + 'content' => 'Lorem ipsum dolor sit amet.', + ); +} diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/partials/partials.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/partials/partials.mustache new file mode 100644 index 0000000..54cf1c5 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/partials/partials.mustache @@ -0,0 +1,7 @@ +
+ {{> header }} + +
+ {{ page.content }} +
+
\ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/partials/partials.txt b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/partials/partials.txt new file mode 100644 index 0000000..f8e45ce --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/partials/partials.txt @@ -0,0 +1,8 @@ +
+

Page Title

+

Page Subtitle

+ +
+ Lorem ipsum dolor sit amet. +
+
\ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/partials/partials/header.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/partials/partials/header.mustache new file mode 100644 index 0000000..88d567b --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/partials/partials/header.mustache @@ -0,0 +1,4 @@ +{{# page }} +

{{ title }}

+

{{ subtitle }}

+{{/ page }} \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/recursive_partials/RecursivePartials.php b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/recursive_partials/RecursivePartials.php new file mode 100644 index 0000000..15b6973 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/recursive_partials/RecursivePartials.php @@ -0,0 +1,22 @@ + 'Dan', + 'child' => array( + 'name' => 'Justin', + 'child' => false, + ), + ); +} diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/recursive_partials/partials/child.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/recursive_partials/partials/child.mustache new file mode 100644 index 0000000..1282941 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/recursive_partials/partials/child.mustache @@ -0,0 +1 @@ + > {{ name }}{{#child}}{{>child}}{{/child}} \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/recursive_partials/recursive_partials.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/recursive_partials/recursive_partials.mustache new file mode 100644 index 0000000..0bc5d03 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/recursive_partials/recursive_partials.mustache @@ -0,0 +1 @@ +{{name}}{{#child}}{{>child}}{{/child}} \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/recursive_partials/recursive_partials.txt b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/recursive_partials/recursive_partials.txt new file mode 100644 index 0000000..681cdef --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/recursive_partials/recursive_partials.txt @@ -0,0 +1 @@ +George > Dan > Justin \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_iterator_objects/SectionIteratorObjects.php b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_iterator_objects/SectionIteratorObjects.php new file mode 100644 index 0000000..0dc793c --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_iterator_objects/SectionIteratorObjects.php @@ -0,0 +1,27 @@ + 'And it worked the second time.'), + array('item' => 'As well as the third.'), + ); + + public function middle() + { + return new ArrayIterator($this->_data); + } + + public $final = 'Then, surprisingly, it worked the final time.'; +} diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_iterator_objects/section_iterator_objects.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_iterator_objects/section_iterator_objects.mustache new file mode 100644 index 0000000..44dfce4 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_iterator_objects/section_iterator_objects.mustache @@ -0,0 +1,5 @@ +* {{ start }} +{{# middle }} +* {{ item }} +{{/ middle }} +* {{ final }} \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_iterator_objects/section_iterator_objects.txt b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_iterator_objects/section_iterator_objects.txt new file mode 100644 index 0000000..e6b2d7a --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_iterator_objects/section_iterator_objects.txt @@ -0,0 +1,4 @@ +* It worked the first time. +* And it worked the second time. +* As well as the third. +* Then, surprisingly, it worked the final time. \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_magic_objects/SectionMagicObjects.php b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_magic_objects/SectionMagicObjects.php new file mode 100644 index 0000000..0fcb3b4 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_magic_objects/SectionMagicObjects.php @@ -0,0 +1,40 @@ + 'And it worked the second time.', + 'bar' => 'As well as the third.', + ); + + public function __get($key) + { + return isset($this->_data[$key]) ? $this->_data[$key] : null; + } + + public function __isset($key) + { + return isset($this->_data[$key]); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_magic_objects/section_magic_objects.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_magic_objects/section_magic_objects.mustache new file mode 100644 index 0000000..9119608 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_magic_objects/section_magic_objects.mustache @@ -0,0 +1,6 @@ +* {{ start }} +{{# middle }} +* {{ foo }} +* {{ bar }} +{{/ middle }} +* {{ final }} \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_magic_objects/section_magic_objects.txt b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_magic_objects/section_magic_objects.txt new file mode 100644 index 0000000..e6b2d7a --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_magic_objects/section_magic_objects.txt @@ -0,0 +1,4 @@ +* It worked the first time. +* And it worked the second time. +* As well as the third. +* Then, surprisingly, it worked the final time. \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_objects/SectionObjects.php b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_objects/SectionObjects.php new file mode 100644 index 0000000..913c3eb --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/section_objects/SectionObjects.php @@ -0,0 +1,28 @@ + 'And it worked the second time.'), + array('item' => 'As well as the third.'), + ); + } + + public $final = 'Then, surprisingly, it worked the final time.'; +} diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/sections/sections.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/sections/sections.mustache new file mode 100644 index 0000000..44dfce4 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/sections/sections.mustache @@ -0,0 +1,5 @@ +* {{ start }} +{{# middle }} +* {{ item }} +{{/ middle }} +* {{ final }} \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/sections/sections.txt b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/sections/sections.txt new file mode 100644 index 0000000..e6b2d7a --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/sections/sections.txt @@ -0,0 +1,4 @@ +* It worked the first time. +* And it worked the second time. +* As well as the third. +* Then, surprisingly, it worked the final time. \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/sections_nested/SectionsNested.php b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/sections_nested/SectionsNested.php new file mode 100644 index 0000000..43657c3 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/sections_nested/SectionsNested.php @@ -0,0 +1,44 @@ + 'Von Kaiser', + 'enemies' => array( + array('name' => 'Super Macho Man'), + array('name' => 'Piston Honda'), + array('name' => 'Mr. Sandman'), + ), + ), + array( + 'name' => 'Mike Tyson', + 'enemies' => array( + array('name' => 'Soda Popinski'), + array('name' => 'King Hippo'), + array('name' => 'Great Tiger'), + array('name' => 'Glass Joe'), + ), + ), + array( + 'name' => 'Don Flamenco', + 'enemies' => array( + array('name' => 'Bald Bull'), + ), + ), + ); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/sections_nested/sections_nested.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/sections_nested/sections_nested.mustache new file mode 100644 index 0000000..9f8007d --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/sections_nested/sections_nested.mustache @@ -0,0 +1,7 @@ +Enemies of {{ name }}: +{{# enemies }} +{{ name }} ... who also has enemies: +{{# enemies }} +--> {{ name }} +{{/ enemies }} +{{/ enemies }} \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/sections_nested/sections_nested.txt b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/sections_nested/sections_nested.txt new file mode 100644 index 0000000..72c44d0 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/sections_nested/sections_nested.txt @@ -0,0 +1,12 @@ +Enemies of Little Mac: +Von Kaiser ... who also has enemies: +--> Super Macho Man +--> Piston Honda +--> Mr. Sandman +Mike Tyson ... who also has enemies: +--> Soda Popinski +--> King Hippo +--> Great Tiger +--> Glass Joe +Don Flamenco ... who also has enemies: +--> Bald Bull diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/simple/Simple.php b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/simple/Simple.php new file mode 100644 index 0000000..a5492e8 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/simple/Simple.php @@ -0,0 +1,23 @@ +value - ($this->value * 0.4); + } + + public $in_ca = true; +} diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/simple/simple.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/simple/simple.mustache new file mode 100644 index 0000000..03df206 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/simple/simple.mustache @@ -0,0 +1,5 @@ +Hello {{name}} +You have just won ${{value}}! +{{#in_ca}} +Well, ${{ taxed_value }}, after taxes. +{{/in_ca}} \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/simple/simple.txt b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/simple/simple.txt new file mode 100644 index 0000000..5d75d65 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/simple/simple.txt @@ -0,0 +1,3 @@ +Hello Chris +You have just won $10000! +Well, $6000, after taxes. diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/unescaped/Unescaped.php b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/unescaped/Unescaped.php new file mode 100644 index 0000000..ea85f88 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/unescaped/Unescaped.php @@ -0,0 +1,15 @@ + Shark'; +} diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/unescaped/unescaped.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/unescaped/unescaped.mustache new file mode 100644 index 0000000..9982708 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/unescaped/unescaped.mustache @@ -0,0 +1 @@ +

{{{title}}}

\ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/unescaped/unescaped.txt b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/unescaped/unescaped.txt new file mode 100644 index 0000000..01fa404 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/unescaped/unescaped.txt @@ -0,0 +1 @@ +

Bear > Shark

\ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/utf8/UTF8.php b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/utf8/UTF8.php new file mode 100644 index 0000000..c53fec9 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/utf8/UTF8.php @@ -0,0 +1,15 @@ +中文 {{test}} \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/utf8/utf8.txt b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/utf8/utf8.txt new file mode 100644 index 0000000..bf17971 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/utf8/utf8.txt @@ -0,0 +1 @@ +

中文 中文又来啦

\ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/utf8_unescaped/UTF8Unescaped.php b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/utf8_unescaped/UTF8Unescaped.php new file mode 100644 index 0000000..67f9366 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/utf8_unescaped/UTF8Unescaped.php @@ -0,0 +1,15 @@ +中文 {{{test}}} \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/utf8_unescaped/utf8_unescaped.txt b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/utf8_unescaped/utf8_unescaped.txt new file mode 100644 index 0000000..bf17971 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/utf8_unescaped/utf8_unescaped.txt @@ -0,0 +1 @@ +

中文 中文又来啦

\ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/whitespace/Whitespace.php b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/whitespace/Whitespace.php new file mode 100644 index 0000000..57a3267 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/whitespace/Whitespace.php @@ -0,0 +1,43 @@ + tag }}` and `{{> tag}}` and `{{>tag}}` should all be equivalent. + */ +class Whitespace +{ + public $foo = 'alpha'; + + public $bar = 'beta'; + + public function baz() + { + return 'gamma'; + } + + public function qux() + { + return array( + array('key with space' => 'A'), + array('key with space' => 'B'), + array('key with space' => 'C'), + array('key with space' => 'D'), + array('key with space' => 'E'), + array('key with space' => 'F'), + array('key with space' => 'G'), + ); + } +} diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/whitespace/partials/alphabet.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/whitespace/partials/alphabet.mustache new file mode 100644 index 0000000..d281c41 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/whitespace/partials/alphabet.mustache @@ -0,0 +1 @@ + * {{.}} \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/whitespace/whitespace.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/whitespace/whitespace.mustache new file mode 100644 index 0000000..0b3ba00 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/whitespace/whitespace.mustache @@ -0,0 +1,10 @@ +{{^ inverted section test }} +These are some things: +{{/inverted section test }} +* {{ foo }} +* {{ bar}} +* {{ baz }} +{{# qux }} +* {{ key with space }} +{{/ qux }} +{{#qux}}.{{/qux}} \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/examples/whitespace/whitespace.txt b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/whitespace/whitespace.txt new file mode 100644 index 0000000..5226c69 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/examples/whitespace/whitespace.txt @@ -0,0 +1,12 @@ +These are some things: +* alpha +* beta +* gamma +* A +* B +* C +* D +* E +* F +* G +....... \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/templates/alpha.ms b/admin/lib/vendor/mustache/mustache/test/fixtures/templates/alpha.ms new file mode 100644 index 0000000..3845830 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/templates/alpha.ms @@ -0,0 +1 @@ +alpha contents \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/templates/beta.ms b/admin/lib/vendor/mustache/mustache/test/fixtures/templates/beta.ms new file mode 100644 index 0000000..a083dfe --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/templates/beta.ms @@ -0,0 +1 @@ +beta contents \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/templates/one.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/templates/one.mustache new file mode 100644 index 0000000..f83ad09 --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/templates/one.mustache @@ -0,0 +1 @@ +one contents \ No newline at end of file diff --git a/admin/lib/vendor/mustache/mustache/test/fixtures/templates/two.mustache b/admin/lib/vendor/mustache/mustache/test/fixtures/templates/two.mustache new file mode 100644 index 0000000..dacc40e --- /dev/null +++ b/admin/lib/vendor/mustache/mustache/test/fixtures/templates/two.mustache @@ -0,0 +1 @@ +two contents \ No newline at end of file diff --git a/admin/lib/vendor/phpmailer/phpmailer/COMMITMENT b/admin/lib/vendor/phpmailer/phpmailer/COMMITMENT new file mode 100644 index 0000000..a687e0d --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/COMMITMENT @@ -0,0 +1,46 @@ +GPL Cooperation Commitment +Version 1.0 + +Before filing or continuing to prosecute any legal proceeding or claim +(other than a Defensive Action) arising from termination of a Covered +License, we commit to extend to the person or entity ('you') accused +of violating the Covered License the following provisions regarding +cure and reinstatement, taken from GPL version 3. As used here, the +term 'this License' refers to the specific Covered License being +enforced. + + 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. + +We intend this Commitment to be irrevocable, and binding and +enforceable against us and assignees of or successors to our +copyrights. + +Definitions + +'Covered License' means the GNU General Public License, version 2 +(GPLv2), the GNU Lesser General Public License, version 2.1 +(LGPLv2.1), or the GNU Library General Public License, version 2 +(LGPLv2), all as published by the Free Software Foundation. + +'Defensive Action' means a legal proceeding or claim that We bring +against you in response to a prior proceeding or claim initiated by +you or your affiliate. + +'We' means each contributor to this repository as of the date of +inclusion of this file, including subsidiaries of a corporate +contributor. + +This work is available under a Creative Commons Attribution-ShareAlike +4.0 International license (https://creativecommons.org/licenses/by-sa/4.0/). diff --git a/website/js/vendor/tinymce/js/tinymce/license.txt b/admin/lib/vendor/phpmailer/phpmailer/LICENSE similarity index 98% rename from website/js/vendor/tinymce/js/tinymce/license.txt rename to admin/lib/vendor/phpmailer/phpmailer/LICENSE index b17fc90..f166cc5 100644 --- a/website/js/vendor/tinymce/js/tinymce/license.txt +++ b/admin/lib/vendor/phpmailer/phpmailer/LICENSE @@ -1,5 +1,5 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA @@ -10,7 +10,7 @@ as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] - Preamble + Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public @@ -55,7 +55,7 @@ modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. - + Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a @@ -111,8 +111,8 @@ modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE + + GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other @@ -146,7 +146,7 @@ such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. - + 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an @@ -158,7 +158,7 @@ Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. - + 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 @@ -216,7 +216,7 @@ instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. - + Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. @@ -267,7 +267,7 @@ Library will still fall under Section 6.) distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. - + 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work @@ -329,7 +329,7 @@ restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. - + 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined @@ -370,7 +370,7 @@ subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. - + 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or @@ -422,7 +422,7 @@ conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. - + 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is @@ -432,7 +432,7 @@ decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. - NO WARRANTY + NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. @@ -455,8 +455,8 @@ FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - END OF TERMS AND CONDITIONS - + END OF TERMS AND CONDITIONS + How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest @@ -499,6 +499,4 @@ necessary. Here is a sample; alter the names: , 1 April 1990 Ty Coon, President of Vice -That's all there is to it! - - +That's all there is to it! \ No newline at end of file diff --git a/admin/lib/vendor/phpmailer/phpmailer/README.md b/admin/lib/vendor/phpmailer/phpmailer/README.md new file mode 100644 index 0000000..c287e30 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/README.md @@ -0,0 +1,221 @@ +![PHPMailer](https://raw.github.com/PHPMailer/PHPMailer/master/examples/images/phpmailer.png) + +# PHPMailer - A full-featured email creation and transfer class for PHP + +Build status: [![Build Status](https://travis-ci.org/PHPMailer/PHPMailer.svg)](https://travis-ci.org/PHPMailer/PHPMailer) +[![Scrutinizer Quality Score](https://scrutinizer-ci.com/g/PHPMailer/PHPMailer/badges/quality-score.png?s=3758e21d279becdf847a557a56a3ed16dfec9d5d)](https://scrutinizer-ci.com/g/PHPMailer/PHPMailer/) +[![Code Coverage](https://scrutinizer-ci.com/g/PHPMailer/PHPMailer/badges/coverage.png?s=3fe6ca5fe8cd2cdf96285756e42932f7ca256962)](https://scrutinizer-ci.com/g/PHPMailer/PHPMailer/) + +[![Latest Stable Version](https://poser.pugx.org/phpmailer/phpmailer/v/stable.svg)](https://packagist.org/packages/phpmailer/phpmailer) [![Total Downloads](https://poser.pugx.org/phpmailer/phpmailer/downloads)](https://packagist.org/packages/phpmailer/phpmailer) [![Latest Unstable Version](https://poser.pugx.org/phpmailer/phpmailer/v/unstable.svg)](https://packagist.org/packages/phpmailer/phpmailer) [![License](https://poser.pugx.org/phpmailer/phpmailer/license.svg)](https://packagist.org/packages/phpmailer/phpmailer) [![API Docs](https://github.com/phpmailer/phpmailer/workflows/Docs/badge.svg)](http://phpmailer.github.io/PHPMailer/) + +## Class Features +- Probably the world's most popular code for sending email from PHP! +- Used by many open-source projects: WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla! and many more +- Integrated SMTP support - send without a local mail server +- Send emails with multiple To, CC, BCC and Reply-to addresses +- Multipart/alternative emails for mail clients that do not read HTML email +- Add attachments, including inline +- Support for UTF-8 content and 8bit, base64, binary, and quoted-printable encodings +- SMTP authentication with LOGIN, PLAIN, CRAM-MD5, and XOAUTH2 mechanisms over SSL and SMTP+STARTTLS transports +- Validates email addresses automatically +- Protect against header injection attacks +- Error messages in over 50 languages! +- DKIM and S/MIME signing support +- Compatible with PHP 5.5 and later +- Namespaced to prevent name clashes +- Much more! + +## Why you might need it +Many PHP developers need to send email from their code. The only PHP function that supports this is [`mail()`](https://www.php.net/manual/en/function.mail.php). However, it does not provide any assistance for making use of popular features such as encryption, authentication, HTML messages, and attachments. + +Formatting email correctly is surprisingly difficult. There are myriad overlapping RFCs, requiring tight adherence to horribly complicated formatting and encoding rules – the vast majority of code that you'll find online that uses the `mail()` function directly is just plain wrong! +*Please* don't be tempted to do it yourself – if you don't use PHPMailer, there are many other excellent libraries that you should look at before rolling your own. Try [SwiftMailer](https://swiftmailer.symfony.com/), [Zend/Mail](https://zendframework.github.io/zend-mail/), [ZetaComponents](https://github.com/zetacomponents/Mail) etc. + +The PHP `mail()` function usually sends via a local mail server, typically fronted by a `sendmail` binary on Linux, BSD, and macOS platforms, however, Windows usually doesn't include a local mail server; PHPMailer's integrated SMTP implementation allows email sending on Windows platforms without a local mail server. + +## License +This software is distributed under the [LGPL 2.1](http://www.gnu.org/licenses/lgpl-2.1.html) license, along with the [GPL Cooperation Commitment](https://gplcc.github.io/gplcc/). Please read LICENSE for information on the software availability and distribution. + +## Installation & loading +PHPMailer is available on [Packagist](https://packagist.org/packages/phpmailer/phpmailer) (using semantic versioning), and installation via [Composer](https://getcomposer.org) is the recommended way to install PHPMailer. Just add this line to your `composer.json` file: + +```json +"phpmailer/phpmailer": "~6.1" +``` + +or run + +```sh +composer require phpmailer/phpmailer +``` + +Note that the `vendor` folder and the `vendor/autoload.php` script are generated by Composer; they are not part of PHPMailer. + +If you want to use the Gmail XOAUTH2 authentication class, you will also need to add a dependency on the `league/oauth2-client` package in your `composer.json`. + +Alternatively, if you're not using Composer, copy the contents of the PHPMailer folder into one of the `include_path` directories specified in your PHP configuration and load each class file manually: + +```php +SMTPDebug = SMTP::DEBUG_SERVER; // Enable verbose debug output + $mail->isSMTP(); // Send using SMTP + $mail->Host = 'smtp1.example.com'; // Set the SMTP server to send through + $mail->SMTPAuth = true; // Enable SMTP authentication + $mail->Username = 'user@example.com'; // SMTP username + $mail->Password = 'secret'; // SMTP password + $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged + $mail->Port = 587; // TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` above + + //Recipients + $mail->setFrom('from@example.com', 'Mailer'); + $mail->addAddress('joe@example.net', 'Joe User'); // Add a recipient + $mail->addAddress('ellen@example.com'); // Name is optional + $mail->addReplyTo('info@example.com', 'Information'); + $mail->addCC('cc@example.com'); + $mail->addBCC('bcc@example.com'); + + // Attachments + $mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments + $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name + + // Content + $mail->isHTML(true); // Set email format to HTML + $mail->Subject = 'Here is the subject'; + $mail->Body = 'This is the HTML message body in bold!'; + $mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; + + $mail->send(); + echo 'Message has been sent'; +} catch (Exception $e) { + echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}"; +} +``` + +You'll find plenty more to play with in the [examples](https://github.com/PHPMailer/PHPMailer/tree/master/examples) folder. + +If you are re-using the instance (e.g. when sending to a mailing list), you may need to clear the recipient list to avoid sending duplicate messages. See [the mailing list example](https://github.com/PHPMailer/PHPMailer/blob/master/examples/mailing_list.phps) for further guidance. + +That's it. You should now be ready to use PHPMailer! + +## Localization +PHPMailer defaults to English, but in the [language](https://github.com/PHPMailer/PHPMailer/tree/master/language/) folder you'll find many translations for PHPMailer error messages that you may encounter. Their filenames contain [ISO 639-1](http://en.wikipedia.org/wiki/ISO_639-1) language code for the translations, for example `fr` for French. To specify a language, you need to tell PHPMailer which one to use, like this: + +```php +// To load the French version +$mail->setLanguage('fr', '/optional/path/to/language/directory/'); +``` + +We welcome corrections and new languages - if you're looking for corrections to do, run the [PHPMailerLangTest.php](https://github.com/PHPMailer/PHPMailer/tree/master/test/PHPMailerLangTest.php) script in the tests folder and it will show any missing translations. + +## Documentation +Start reading at the [GitHub wiki](https://github.com/PHPMailer/PHPMailer/wiki). If you're having trouble, this should be the first place you look as it's the most frequently updated. + +Examples of how to use PHPMailer for common scenarios can be found in the [examples](https://github.com/PHPMailer/PHPMailer/tree/master/examples) folder. If you're looking for a good starting point, we recommend you start with [the Gmail example](https://github.com/PHPMailer/PHPMailer/tree/master/examples/gmail.phps). + +Note that in order to reduce PHPMailer's deployed code footprint, the examples are no longer included if you load PHPMailer via Composer or via [GitHub's zip file download](https://github.com/PHPMailer/PHPMailer/archive/master.zip), so you'll need to either clone the git repository or use the above links to get to the examples directly. + +Complete generated API documentation is [available online](http://phpmailer.github.io/PHPMailer/). + +You can generate complete API-level documentation by running `phpdoc` in the top-level folder, and documentation will appear in the `docs` folder, though you'll need to have [PHPDocumentor](http://www.phpdoc.org) installed. You may find [the unit tests](https://github.com/PHPMailer/PHPMailer/blob/master/test/PHPMailerTest.php) a good source of how to do various operations such as encryption. + +If the documentation doesn't cover what you need, search the [many questions on Stack Overflow](http://stackoverflow.com/questions/tagged/phpmailer), and before you ask a question about "SMTP Error: Could not connect to SMTP host.", [read the troubleshooting guide](https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting). + +## Tests +There is a PHPUnit test script in the [test](https://github.com/PHPMailer/PHPMailer/tree/master/test/) folder. PHPMailer uses PHPUnit 4.8 - we would use 5.x but we need to run on PHP 5.5. + +Build status: [![Build Status](https://travis-ci.org/PHPMailer/PHPMailer.svg)](https://travis-ci.org/PHPMailer/PHPMailer) + +If this isn't passing, is there something you can do to help? + +## Security +Please disclose any vulnerabilities found responsibly - report any security problems found to the maintainers privately. + +PHPMailer versions prior to 5.2.22 (released January 9th 2017) have a local file disclosure vulnerability, [CVE-2017-5223](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2017-5223). If content passed into `msgHTML()` is sourced from unfiltered user input, relative paths can map to absolute local file paths and added as attachments. Also note that `addAttachment` (just like `file_get_contents`, `passthru`, `unlink`, etc) should not be passed user-sourced params either! Reported by Yongxiang Li of Asiasecurity. + +PHPMailer versions prior to 5.2.20 (released December 28th 2016) are vulnerable to [CVE-2016-10045](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-10045) a remote code execution vulnerability, responsibly reported by [Dawid Golunski](https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10045-Vuln-Patch-Bypass.html), and patched by Paul Buonopane (@Zenexer). + +PHPMailer versions prior to 5.2.18 (released December 2016) are vulnerable to [CVE-2016-10033](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-10033) a critical remote code execution vulnerability, responsibly reported by [Dawid Golunski](http://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10033-Vuln.html). + +See [SECURITY](https://github.com/PHPMailer/PHPMailer/tree/master/SECURITY.md) for more detail on security issues. + +## Contributing +Please submit bug reports, suggestions and pull requests to the [GitHub issue tracker](https://github.com/PHPMailer/PHPMailer/issues). + +We're particularly interested in fixing edge-cases, expanding test coverage and updating translations. + +If you found a mistake in the docs, or want to add something, go ahead and amend the wiki - anyone can edit it. + +If you have git clones from prior to the move to the PHPMailer GitHub organisation, you'll need to update any remote URLs referencing the old GitHub location with a command like this from within your clone: + +```sh +git remote set-url upstream https://github.com/PHPMailer/PHPMailer.git +``` + +Please *don't* use the SourceForge or Google Code projects any more; they are obsolete and no longer maintained. + +## Sponsorship +Development time and resources for PHPMailer are provided by [Smartmessages.net](https://info.smartmessages.net/), a powerful email marketing system. + +Smartmessages email marketing + +Other contributions are gladly received, whether in beer 🍺, T-shirts 👕, Amazon wishlist raids, or cold, hard cash 💰. If you'd like to donate to say "thank you" to maintainers or contributors, please contact them through individual profile pages via [the contributors page](https://github.com/PHPMailer/PHPMailer/graphs/contributors). + +## Changelog +See [changelog](changelog.md). + +## History +- PHPMailer was originally written in 2001 by Brent R. Matzelle as a [SourceForge project](http://sourceforge.net/projects/phpmailer/). +- Marcus Bointon (coolbru on SF) and Andy Prevost (codeworxtech) took over the project in 2004. +- Became an Apache incubator project on Google Code in 2010, managed by Jim Jagielski. +- Marcus created his fork on [GitHub](https://github.com/Synchro/PHPMailer) in 2008. +- Jim and Marcus decide to join forces and use GitHub as the canonical and official repo for PHPMailer in 2013. +- PHPMailer moves to the [PHPMailer organisation](https://github.com/PHPMailer) on GitHub in 2013. + +### What's changed since moving from SourceForge? +- Official successor to the SourceForge and Google Code projects. +- Test suite. +- Continuous integration with Travis-CI. +- Composer support. +- Public development. +- Additional languages and language strings. +- CRAM-MD5 authentication support. +- Preserves full repo history of authors, commits and branches from the original SourceForge project. diff --git a/admin/lib/vendor/phpmailer/phpmailer/SECURITY.md b/admin/lib/vendor/phpmailer/phpmailer/SECURITY.md new file mode 100644 index 0000000..fc3e61c --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/SECURITY.md @@ -0,0 +1,30 @@ +# Security notices relating to PHPMailer + +Please disclose any vulnerabilities found responsibly - report any security problems found to the maintainers privately. + +PHPMailer versions 6.1.5 and earlier contain an output escaping bug that occurs in `Content-Type` and `Content-Disposition` when filenames passed into `addAttachment` and other methods that accept attachment names contain double quote characters, in contravention of RFC822 3.4.1. No specific vulnerability has been found relating to this, but it could allow file attachments to bypass attachment filters that are based on matching filename extensions. Recorded as [CVE-2020-13625](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2020-13625). Reported by Elar Lang of Clarified Security. + +PHPMailer versions prior to 6.0.6 and 5.2.27 are vulnerable to an object injection attack by passing `phar://` paths into `addAttachment()` and other functions that may receive unfiltered local paths, possibly leading to RCE. Recorded as [CVE-2018-19296](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2018-19296). See [this article](https://knasmueller.net/5-answers-about-php-phar-exploitation) for more info on this type of vulnerability. Mitigated by blocking the use of paths containing URL-protocol style prefixes such as `phar://`. Reported by Sehun Oh of cyberone.kr. + +PHPMailer versions prior to 5.2.24 (released July 26th 2017) have an XSS vulnerability in one of the code examples, [CVE-2017-11503](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2017-11503). The `code_generator.phps` example did not filter user input prior to output. This file is distributed with a `.phps` extension, so it it not normally executable unless it is explicitly renamed, and the file is not included when PHPMailer is loaded through composer, so it is safe by default. There was also an undisclosed potential XSS vulnerability in the default exception handler (unused by default). Patches for both issues kindly provided by Patrick Monnerat of the Fedora Project. + +PHPMailer versions prior to 5.2.22 (released January 9th 2017) have a local file disclosure vulnerability, [CVE-2017-5223](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2017-5223). If content passed into `msgHTML()` is sourced from unfiltered user input, relative paths can map to absolute local file paths and added as attachments. Also note that `addAttachment` (just like `file_get_contents`, `passthru`, `unlink`, etc) should not be passed user-sourced params either! Reported by Yongxiang Li of Asiasecurity. + +PHPMailer versions prior to 5.2.20 (released December 28th 2016) are vulnerable to [CVE-2016-10045](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-10045) a remote code execution vulnerability, responsibly reported by [Dawid Golunski](https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10045-Vuln-Patch-Bypass.html), and patched by Paul Buonopane (@Zenexer). + +PHPMailer versions prior to 5.2.18 (released December 2016) are vulnerable to [CVE-2016-10033](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-10033) a remote code execution vulnerability, responsibly reported by [Dawid Golunski](http://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10033-Vuln.html). + +PHPMailer versions prior to 5.2.14 (released November 2015) are vulnerable to [CVE-2015-8476](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-8476) an SMTP CRLF injection bug permitting arbitrary message sending. + +PHPMailer versions prior to 5.2.10 (released May 2015) are vulnerable to [CVE-2008-5619](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2008-5619), a remote code execution vulnerability in the bundled html2text library. This file was removed in 5.2.10, so if you are using a version prior to that and make use of the html2text function, it's vitally important that you upgrade and remove this file. + +PHPMailer versions prior to 2.0.7 and 2.2.1 are vulnerable to [CVE-2012-0796](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2012-0796), an email header injection attack. + +Joomla 1.6.0 uses PHPMailer in an unsafe way, allowing it to reveal local file paths, reported in [CVE-2011-3747](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2011-3747). + +PHPMailer didn't sanitise the `$lang_path` parameter in `SetLanguage`. This wasn't a problem in itself, but some apps (PHPClassifieds, ATutor) also failed to sanitise user-provided parameters passed to it, permitting semi-arbitrary local file inclusion, reported in [CVE-2010-4914](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2010-4914), [CVE-2007-2021](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2007-2021) and [CVE-2006-5734](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2006-5734). + +PHPMailer 1.7.2 and earlier contained a possible DDoS vulnerability reported in [CVE-2005-1807](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2005-1807). + +PHPMailer 1.7 and earlier (June 2003) have a possible vulnerability in the `SendmailSend` method where shell commands may not be sanitised. Reported in [CVE-2007-3215](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2007-3215). + diff --git a/admin/lib/vendor/phpmailer/phpmailer/VERSION b/admin/lib/vendor/phpmailer/phpmailer/VERSION new file mode 100644 index 0000000..aeee9f7 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/VERSION @@ -0,0 +1 @@ +6.1.8 \ No newline at end of file diff --git a/admin/lib/vendor/phpmailer/phpmailer/composer.json b/admin/lib/vendor/phpmailer/phpmailer/composer.json new file mode 100644 index 0000000..95a8991 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/composer.json @@ -0,0 +1,58 @@ +{ + "name": "phpmailer/phpmailer", + "type": "library", + "description": "PHPMailer is a full-featured email creation and transfer class for PHP", + "authors": [ + { + "name": "Marcus Bointon", + "email": "phpmailer@synchromedia.co.uk" + }, + { + "name": "Jim Jagielski", + "email": "jimjag@gmail.com" + }, + { + "name": "Andy Prevost", + "email": "codeworxtech@users.sourceforge.net" + }, + { + "name": "Brent R. Matzelle" + } + ], + "funding": [ + { + "url": "https://github.com/synchro", + "type": "github" + } + ], + "require": { + "php": ">=5.5.0", + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.2", + "phpunit/phpunit": "^4.8 || ^5.7", + "doctrine/annotations": "^1.2" + }, + "suggest": { + "psr/log": "For optional PSR-3 debug logging", + "league/oauth2-google": "Needed for Google XOAUTH2 authentication", + "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", + "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication", + "ext-mbstring": "Needed to send email in multibyte encoding charset", + "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)" + }, + "autoload": { + "psr-4": { + "PHPMailer\\PHPMailer\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "PHPMailer\\Test\\": "test/" + } + }, + "license": "LGPL-2.1-only" +} diff --git a/admin/lib/vendor/phpmailer/phpmailer/get_oauth_token.php b/admin/lib/vendor/phpmailer/phpmailer/get_oauth_token.php new file mode 100644 index 0000000..8335883 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/get_oauth_token.php @@ -0,0 +1,144 @@ + + * @author Jim Jagielski (jimjag) + * @author Andy Prevost (codeworxtech) + * @author Brent R. Matzelle (original founder) + * @copyright 2012 - 2020 Marcus Bointon + * @copyright 2010 - 2012 Jim Jagielski + * @copyright 2004 - 2009 Andy Prevost + * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @note This program is distributed in the hope that it will be useful - WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + */ +/** + * Get an OAuth2 token from an OAuth2 provider. + * * Install this script on your server so that it's accessible + * as [https/http]:////get_oauth_token.php + * e.g.: http://localhost/phpmailer/get_oauth_token.php + * * Ensure dependencies are installed with 'composer install' + * * Set up an app in your Google/Yahoo/Microsoft account + * * Set the script address as the app's redirect URL + * If no refresh token is obtained when running this file, + * revoke access to your app and run the script again. + */ + +namespace PHPMailer\PHPMailer; + +/** + * Aliases for League Provider Classes + * Make sure you have added these to your composer.json and run `composer install` + * Plenty to choose from here: + * @see http://oauth2-client.thephpleague.com/providers/thirdparty/ + */ +// @see https://github.com/thephpleague/oauth2-google +use League\OAuth2\Client\Provider\Google; +// @see https://packagist.org/packages/hayageek/oauth2-yahoo +use Hayageek\OAuth2\Client\Provider\Yahoo; +// @see https://github.com/stevenmaguire/oauth2-microsoft +use Stevenmaguire\OAuth2\Client\Provider\Microsoft; + +if (!isset($_GET['code']) && !isset($_GET['provider'])) { +?> + +Select Provider:
+Google
+Yahoo
+Microsoft/Outlook/Hotmail/Live/Office365
+ + + $clientId, + 'clientSecret' => $clientSecret, + 'redirectUri' => $redirectUri, + 'accessType' => 'offline' +]; + +$options = []; +$provider = null; + +switch ($providerName) { + case 'Google': + $provider = new Google($params); + $options = [ + 'scope' => [ + 'https://mail.google.com/' + ] + ]; + break; + case 'Yahoo': + $provider = new Yahoo($params); + break; + case 'Microsoft': + $provider = new Microsoft($params); + $options = [ + 'scope' => [ + 'wl.imap', + 'wl.offline_access' + ] + ]; + break; +} + +if (null === $provider) { + exit('Provider missing'); +} + +if (!isset($_GET['code'])) { + // If we don't have an authorization code then get one + $authUrl = $provider->getAuthorizationUrl($options); + $_SESSION['oauth2state'] = $provider->getState(); + header('Location: ' . $authUrl); + exit; +// Check given state against previously stored one to mitigate CSRF attack +} elseif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) { + unset($_SESSION['oauth2state']); + unset($_SESSION['provider']); + exit('Invalid state'); +} else { + unset($_SESSION['provider']); + // Try to get an access token (using the authorization code grant) + $token = $provider->getAccessToken( + 'authorization_code', + [ + 'code' => $_GET['code'] + ] + ); + // Use this to interact with an API on the users behalf + // Use this to get a new access token if the old one expires + echo 'Refresh Token: ', $token->getRefreshToken(); +} diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-af.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-af.php new file mode 100644 index 0000000..3c42d78 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-af.php @@ -0,0 +1,25 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'خطأ SMTP : لا يمكن تأكيد الهوية.'; +$PHPMAILER_LANG['connect_host'] = 'خطأ SMTP: لا يمكن الاتصال بالخادم SMTP.'; +$PHPMAILER_LANG['data_not_accepted'] = 'خطأ SMTP: لم يتم قبول المعلومات .'; +$PHPMAILER_LANG['empty_message'] = 'نص الرسالة فارغ'; +$PHPMAILER_LANG['encoding'] = 'ترميز غير معروف: '; +$PHPMAILER_LANG['execute'] = 'لا يمكن تنفيذ : '; +$PHPMAILER_LANG['file_access'] = 'لا يمكن الوصول للملف: '; +$PHPMAILER_LANG['file_open'] = 'خطأ في الملف: لا يمكن فتحه: '; +$PHPMAILER_LANG['from_failed'] = 'خطأ على مستوى عنوان المرسل : '; +$PHPMAILER_LANG['instantiate'] = 'لا يمكن توفير خدمة البريد.'; +$PHPMAILER_LANG['invalid_address'] = 'الإرسال غير ممكن لأن عنوان البريد الإلكتروني غير صالح: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' برنامج الإرسال غير مدعوم.'; +$PHPMAILER_LANG['provide_address'] = 'يجب توفير عنوان البريد الإلكتروني لمستلم واحد على الأقل.'; +$PHPMAILER_LANG['recipients_failed'] = 'خطأ SMTP: الأخطاء التالية ' . + 'فشل في الارسال لكل من : '; +$PHPMAILER_LANG['signing'] = 'خطأ في التوقيع: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() غير ممكن.'; +$PHPMAILER_LANG['smtp_error'] = 'خطأ على مستوى الخادم SMTP: '; +$PHPMAILER_LANG['variable_set'] = 'لا يمكن تعيين أو إعادة تعيين متغير: '; +$PHPMAILER_LANG['extension_missing'] = 'الإضافة غير موجودة: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-az.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-az.php new file mode 100644 index 0000000..3749d83 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-az.php @@ -0,0 +1,26 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP Greška: Neuspjela prijava.'; +$PHPMAILER_LANG['connect_host'] = 'SMTP Greška: Nije moguće spojiti se sa SMTP serverom.'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Greška: Podatci nisu prihvaćeni.'; +$PHPMAILER_LANG['empty_message'] = 'Sadržaj poruke je prazan.'; +$PHPMAILER_LANG['encoding'] = 'Nepoznata kriptografija: '; +$PHPMAILER_LANG['execute'] = 'Nije moguće izvršiti naredbu: '; +$PHPMAILER_LANG['file_access'] = 'Nije moguće pristupiti datoteci: '; +$PHPMAILER_LANG['file_open'] = 'Nije moguće otvoriti datoteku: '; +$PHPMAILER_LANG['from_failed'] = 'SMTP Greška: Slanje sa navedenih e-mail adresa nije uspjelo: '; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP Greška: Slanje na navedene e-mail adrese nije uspjelo: '; +$PHPMAILER_LANG['instantiate'] = 'Ne mogu pokrenuti mail funkcionalnost.'; +$PHPMAILER_LANG['invalid_address'] = 'E-mail nije poslan. Neispravna e-mail adresa: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' mailer nije podržan.'; +$PHPMAILER_LANG['provide_address'] = 'Definišite barem jednu adresu primaoca.'; +$PHPMAILER_LANG['signing'] = 'Greška prilikom prijave: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'Spajanje na SMTP server nije uspjelo.'; +$PHPMAILER_LANG['smtp_error'] = 'SMTP greška: '; +$PHPMAILER_LANG['variable_set'] = 'Nije moguće postaviti varijablu ili je vratiti nazad: '; +$PHPMAILER_LANG['extension_missing'] = 'Nedostaje ekstenzija: '; \ No newline at end of file diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-be.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-be.php new file mode 100644 index 0000000..e2f98f0 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-be.php @@ -0,0 +1,26 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'Памылка SMTP: памылка ідэнтыфікацыі.'; +$PHPMAILER_LANG['connect_host'] = 'Памылка SMTP: нельга ўстанавіць сувязь з SMTP-серверам.'; +$PHPMAILER_LANG['data_not_accepted'] = 'Памылка SMTP: звесткі непрынятыя.'; +$PHPMAILER_LANG['empty_message'] = 'Пустое паведамленне.'; +$PHPMAILER_LANG['encoding'] = 'Невядомая кадыроўка тэксту: '; +$PHPMAILER_LANG['execute'] = 'Нельга выканаць каманду: '; +$PHPMAILER_LANG['file_access'] = 'Няма доступу да файла: '; +$PHPMAILER_LANG['file_open'] = 'Нельга адкрыць файл: '; +$PHPMAILER_LANG['from_failed'] = 'Няправільны адрас адпраўніка: '; +$PHPMAILER_LANG['instantiate'] = 'Нельга прымяніць функцыю mail().'; +$PHPMAILER_LANG['invalid_address'] = 'Нельга даслаць паведамленне, няправільны email атрымальніка: '; +$PHPMAILER_LANG['provide_address'] = 'Запоўніце, калі ласка, правільны email атрымальніка.'; +$PHPMAILER_LANG['mailer_not_supported'] = ' - паштовы сервер не падтрымліваецца.'; +$PHPMAILER_LANG['recipients_failed'] = 'Памылка SMTP: няправільныя атрымальнікі: '; +$PHPMAILER_LANG['signing'] = 'Памылка подпісу паведамлення: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'Памылка сувязі з SMTP-серверам.'; +$PHPMAILER_LANG['smtp_error'] = 'Памылка SMTP: '; +$PHPMAILER_LANG['variable_set'] = 'Нельга ўстанавіць або перамяніць значэнне пераменнай: '; +//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-bg.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-bg.php new file mode 100644 index 0000000..b22941f --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-bg.php @@ -0,0 +1,26 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP грешка: Не може да се удостовери пред сървъра.'; +$PHPMAILER_LANG['connect_host'] = 'SMTP грешка: Не може да се свърже с SMTP хоста.'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP грешка: данните не са приети.'; +$PHPMAILER_LANG['empty_message'] = 'Съдържанието на съобщението е празно'; +$PHPMAILER_LANG['encoding'] = 'Неизвестно кодиране: '; +$PHPMAILER_LANG['execute'] = 'Не може да се изпълни: '; +$PHPMAILER_LANG['file_access'] = 'Няма достъп до файл: '; +$PHPMAILER_LANG['file_open'] = 'Файлова грешка: Не може да се отвори файл: '; +$PHPMAILER_LANG['from_failed'] = 'Следните адреси за подател са невалидни: '; +$PHPMAILER_LANG['instantiate'] = 'Не може да се инстанцира функцията mail.'; +$PHPMAILER_LANG['invalid_address'] = 'Невалиден адрес: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' - пощенски сървър не се поддържа.'; +$PHPMAILER_LANG['provide_address'] = 'Трябва да предоставите поне един email адрес за получател.'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP грешка: Следните адреси за Получател са невалидни: '; +$PHPMAILER_LANG['signing'] = 'Грешка при подписване: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP провален connect().'; +$PHPMAILER_LANG['smtp_error'] = 'SMTP сървърна грешка: '; +$PHPMAILER_LANG['variable_set'] = 'Не може да се установи или възстанови променлива: '; +$PHPMAILER_LANG['extension_missing'] = 'Липсва разширение: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ca.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ca.php new file mode 100644 index 0000000..4117596 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ca.php @@ -0,0 +1,26 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'Error SMTP: No s’ha pogut autenticar.'; +$PHPMAILER_LANG['connect_host'] = 'Error SMTP: No es pot connectar al servidor SMTP.'; +$PHPMAILER_LANG['data_not_accepted'] = 'Error SMTP: Dades no acceptades.'; +$PHPMAILER_LANG['empty_message'] = 'El cos del missatge està buit.'; +$PHPMAILER_LANG['encoding'] = 'Codificació desconeguda: '; +$PHPMAILER_LANG['execute'] = 'No es pot executar: '; +$PHPMAILER_LANG['file_access'] = 'No es pot accedir a l’arxiu: '; +$PHPMAILER_LANG['file_open'] = 'Error d’Arxiu: No es pot obrir l’arxiu: '; +$PHPMAILER_LANG['from_failed'] = 'La(s) següent(s) adreces de remitent han fallat: '; +$PHPMAILER_LANG['instantiate'] = 'No s’ha pogut crear una instància de la funció Mail.'; +$PHPMAILER_LANG['invalid_address'] = 'Adreça d’email invalida: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' mailer no està suportat'; +$PHPMAILER_LANG['provide_address'] = 'S’ha de proveir almenys una adreça d’email com a destinatari.'; +$PHPMAILER_LANG['recipients_failed'] = 'Error SMTP: Els següents destinataris han fallat: '; +$PHPMAILER_LANG['signing'] = 'Error al signar: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'Ha fallat el SMTP Connect().'; +$PHPMAILER_LANG['smtp_error'] = 'Error del servidor SMTP: '; +$PHPMAILER_LANG['variable_set'] = 'No s’ha pogut establir o restablir la variable: '; +//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ch.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ch.php new file mode 100644 index 0000000..4fda6b8 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ch.php @@ -0,0 +1,26 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP 错误:身份验证失败。'; +$PHPMAILER_LANG['connect_host'] = 'SMTP 错误: 不能连接SMTP主机。'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP 错误: 数据不可接受。'; +//$PHPMAILER_LANG['empty_message'] = 'Message body empty'; +$PHPMAILER_LANG['encoding'] = '未知编码:'; +$PHPMAILER_LANG['execute'] = '不能执行: '; +$PHPMAILER_LANG['file_access'] = '不能访问文件:'; +$PHPMAILER_LANG['file_open'] = '文件错误:不能打开文件:'; +$PHPMAILER_LANG['from_failed'] = '下面的发送地址邮件发送失败了: '; +$PHPMAILER_LANG['instantiate'] = '不能实现mail方法。'; +//$PHPMAILER_LANG['invalid_address'] = 'Invalid address: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' 您所选择的发送邮件的方法并不支持。'; +$PHPMAILER_LANG['provide_address'] = '您必须提供至少一个 收信人的email地址。'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP 错误: 下面的 收件人失败了: '; +//$PHPMAILER_LANG['signing'] = 'Signing Error: '; +//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.'; +//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: '; +//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: '; +//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-cs.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-cs.php new file mode 100644 index 0000000..1160cf0 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-cs.php @@ -0,0 +1,25 @@ + + * Rewrite and extension of the work by Mikael Stokkebro + * + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP fejl: Login mislykkedes.'; +$PHPMAILER_LANG['connect_host'] = 'SMTP fejl: Forbindelse til SMTP serveren kunne ikke oprettes.'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP fejl: Data blev ikke accepteret.'; +$PHPMAILER_LANG['empty_message'] = 'Meddelelsen er uden indhold'; +$PHPMAILER_LANG['encoding'] = 'Ukendt encode-format: '; +$PHPMAILER_LANG['execute'] = 'Kunne ikke afvikle: '; +$PHPMAILER_LANG['file_access'] = 'Kunne ikke tilgå filen: '; +$PHPMAILER_LANG['file_open'] = 'Fil fejl: Kunne ikke åbne filen: '; +$PHPMAILER_LANG['from_failed'] = 'Følgende afsenderadresse er forkert: '; +$PHPMAILER_LANG['instantiate'] = 'Email funktionen kunne ikke initialiseres.'; +$PHPMAILER_LANG['invalid_address'] = 'Udgyldig adresse: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' mailer understøttes ikke.'; +$PHPMAILER_LANG['provide_address'] = 'Indtast mindst en modtagers email adresse.'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP fejl: Følgende modtagere er forkerte: '; +$PHPMAILER_LANG['signing'] = 'Signeringsfejl: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() fejlede.'; +$PHPMAILER_LANG['smtp_error'] = 'SMTP server fejl: '; +$PHPMAILER_LANG['variable_set'] = 'Kunne ikke definere eller nulstille variablen: '; +$PHPMAILER_LANG['extension_missing'] = 'Udvidelse mangler: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-de.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-de.php new file mode 100644 index 0000000..b36c6cb --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-de.php @@ -0,0 +1,27 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'Error SMTP: Imposible autentificar.'; +$PHPMAILER_LANG['connect_host'] = 'Error SMTP: Imposible conectar al servidor SMTP.'; +$PHPMAILER_LANG['data_not_accepted'] = 'Error SMTP: Datos no aceptados.'; +$PHPMAILER_LANG['empty_message'] = 'El cuerpo del mensaje está vacío.'; +$PHPMAILER_LANG['encoding'] = 'Codificación desconocida: '; +$PHPMAILER_LANG['execute'] = 'Imposible ejecutar: '; +$PHPMAILER_LANG['file_access'] = 'Imposible acceder al archivo: '; +$PHPMAILER_LANG['file_open'] = 'Error de Archivo: Imposible abrir el archivo: '; +$PHPMAILER_LANG['from_failed'] = 'La(s) siguiente(s) direcciones de remitente fallaron: '; +$PHPMAILER_LANG['instantiate'] = 'Imposible crear una instancia de la función Mail.'; +$PHPMAILER_LANG['invalid_address'] = 'Imposible enviar: dirección de email inválido: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' mailer no está soportado.'; +$PHPMAILER_LANG['provide_address'] = 'Debe proporcionar al menos una dirección de email de destino.'; +$PHPMAILER_LANG['recipients_failed'] = 'Error SMTP: Los siguientes destinos fallaron: '; +$PHPMAILER_LANG['signing'] = 'Error al firmar: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() falló.'; +$PHPMAILER_LANG['smtp_error'] = 'Error del servidor SMTP: '; +$PHPMAILER_LANG['variable_set'] = 'No se pudo configurar la variable: '; +$PHPMAILER_LANG['extension_missing'] = 'Extensión faltante: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-et.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-et.php new file mode 100644 index 0000000..7e06da1 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-et.php @@ -0,0 +1,27 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP Viga: Autoriseerimise viga.'; +$PHPMAILER_LANG['connect_host'] = 'SMTP Viga: Ei õnnestunud luua ühendust SMTP serveriga.'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Viga: Vigased andmed.'; +$PHPMAILER_LANG['empty_message'] = 'Tühi kirja sisu'; +$PHPMAILER_LANG["encoding"] = 'Tundmatu kodeering: '; +$PHPMAILER_LANG['execute'] = 'Tegevus ebaõnnestus: '; +$PHPMAILER_LANG['file_access'] = 'Pole piisavalt õiguseid järgneva faili avamiseks: '; +$PHPMAILER_LANG['file_open'] = 'Faili Viga: Faili avamine ebaõnnestus: '; +$PHPMAILER_LANG['from_failed'] = 'Järgnev saatja e-posti aadress on vigane: '; +$PHPMAILER_LANG['instantiate'] = 'mail funktiooni käivitamine ebaõnnestus.'; +$PHPMAILER_LANG['invalid_address'] = 'Saatmine peatatud, e-posti address vigane: '; +$PHPMAILER_LANG['provide_address'] = 'Te peate määrama vähemalt ühe saaja e-posti aadressi.'; +$PHPMAILER_LANG['mailer_not_supported'] = ' maileri tugi puudub.'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP Viga: Järgnevate saajate e-posti aadressid on vigased: '; +$PHPMAILER_LANG["signing"] = 'Viga allkirjastamisel: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() ebaõnnestus.'; +$PHPMAILER_LANG['smtp_error'] = 'SMTP serveri viga: '; +$PHPMAILER_LANG['variable_set'] = 'Ei õnnestunud määrata või lähtestada muutujat: '; +$PHPMAILER_LANG['extension_missing'] = 'Nõutud laiendus on puudu: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fa.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fa.php new file mode 100644 index 0000000..8aa0ad2 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fa.php @@ -0,0 +1,27 @@ + + * @author Mohammad Hossein Mojtahedi + */ + +$PHPMAILER_LANG['authenticate'] = 'خطای SMTP: احراز هویت با شکست مواجه شد.'; +$PHPMAILER_LANG['connect_host'] = 'خطای SMTP: اتصال به سرور SMTP برقرار نشد.'; +$PHPMAILER_LANG['data_not_accepted'] = 'خطای SMTP: داده‌ها نا‌درست هستند.'; +$PHPMAILER_LANG['empty_message'] = 'بخش متن پیام خالی است.'; +$PHPMAILER_LANG['encoding'] = 'کد‌گذاری نا‌شناخته: '; +$PHPMAILER_LANG['execute'] = 'امکان اجرا وجود ندارد: '; +$PHPMAILER_LANG['file_access'] = 'امکان دسترسی به فایل وجود ندارد: '; +$PHPMAILER_LANG['file_open'] = 'خطای File: امکان بازکردن فایل وجود ندارد: '; +$PHPMAILER_LANG['from_failed'] = 'آدرس فرستنده اشتباه است: '; +$PHPMAILER_LANG['instantiate'] = 'امکان معرفی تابع ایمیل وجود ندارد.'; +$PHPMAILER_LANG['invalid_address'] = 'آدرس ایمیل معتبر نیست: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' mailer پشتیبانی نمی‌شود.'; +$PHPMAILER_LANG['provide_address'] = 'باید حداقل یک آدرس گیرنده وارد کنید.'; +$PHPMAILER_LANG['recipients_failed'] = 'خطای SMTP: ارسال به آدرس گیرنده با خطا مواجه شد: '; +$PHPMAILER_LANG['signing'] = 'خطا در امضا: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'خطا در اتصال به SMTP.'; +$PHPMAILER_LANG['smtp_error'] = 'خطا در SMTP Server: '; +$PHPMAILER_LANG['variable_set'] = 'امکان ارسال یا ارسال مجدد متغیر‌ها وجود ندارد: '; +$PHPMAILER_LANG['extension_missing'] = 'افزونه موجود نیست: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fi.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fi.php new file mode 100644 index 0000000..ec4e752 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fi.php @@ -0,0 +1,27 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP feilur: Kundi ikki góðkenna.'; +$PHPMAILER_LANG['connect_host'] = 'SMTP feilur: Kundi ikki knýta samband við SMTP vert.'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP feilur: Data ikki góðkent.'; +//$PHPMAILER_LANG['empty_message'] = 'Message body empty'; +$PHPMAILER_LANG['encoding'] = 'Ókend encoding: '; +$PHPMAILER_LANG['execute'] = 'Kundi ikki útføra: '; +$PHPMAILER_LANG['file_access'] = 'Kundi ikki tilganga fílu: '; +$PHPMAILER_LANG['file_open'] = 'Fílu feilur: Kundi ikki opna fílu: '; +$PHPMAILER_LANG['from_failed'] = 'fylgjandi Frá/From adressa miseydnaðist: '; +$PHPMAILER_LANG['instantiate'] = 'Kuni ikki instantiera mail funktión.'; +//$PHPMAILER_LANG['invalid_address'] = 'Invalid address: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' er ikki supporterað.'; +$PHPMAILER_LANG['provide_address'] = 'Tú skal uppgeva minst móttakara-emailadressu(r).'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP Feilur: Fylgjandi móttakarar miseydnaðust: '; +//$PHPMAILER_LANG['signing'] = 'Signing Error: '; +//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.'; +//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: '; +//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: '; +//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fr.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fr.php new file mode 100644 index 0000000..af68c92 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fr.php @@ -0,0 +1,29 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'Erro SMTP: Non puido ser autentificado.'; +$PHPMAILER_LANG['connect_host'] = 'Erro SMTP: Non puido conectar co servidor SMTP.'; +$PHPMAILER_LANG['data_not_accepted'] = 'Erro SMTP: Datos non aceptados.'; +$PHPMAILER_LANG['empty_message'] = 'Corpo da mensaxe vacía'; +$PHPMAILER_LANG['encoding'] = 'Codificación descoñecida: '; +$PHPMAILER_LANG['execute'] = 'Non puido ser executado: '; +$PHPMAILER_LANG['file_access'] = 'Nob puido acceder ó arquivo: '; +$PHPMAILER_LANG['file_open'] = 'Erro de Arquivo: No puido abrir o arquivo: '; +$PHPMAILER_LANG['from_failed'] = 'A(s) seguinte(s) dirección(s) de remitente(s) deron erro: '; +$PHPMAILER_LANG['instantiate'] = 'Non puido crear unha instancia da función Mail.'; +$PHPMAILER_LANG['invalid_address'] = 'Non puido envia-lo correo: dirección de email inválida: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' mailer non está soportado.'; +$PHPMAILER_LANG['provide_address'] = 'Debe engadir polo menos unha dirección de email coma destino.'; +$PHPMAILER_LANG['recipients_failed'] = 'Erro SMTP: Os seguintes destinos fallaron: '; +$PHPMAILER_LANG['signing'] = 'Erro ó firmar: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() fallou.'; +$PHPMAILER_LANG['smtp_error'] = 'Erro do servidor SMTP: '; +$PHPMAILER_LANG['variable_set'] = 'Non puidemos axustar ou reaxustar a variábel: '; +//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-he.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-he.php new file mode 100644 index 0000000..70eb717 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-he.php @@ -0,0 +1,26 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'שגיאת SMTP: פעולת האימות נכשלה.'; +$PHPMAILER_LANG['connect_host'] = 'שגיאת SMTP: לא הצלחתי להתחבר לשרת SMTP.'; +$PHPMAILER_LANG['data_not_accepted'] = 'שגיאת SMTP: מידע לא התקבל.'; +$PHPMAILER_LANG['empty_message'] = 'גוף ההודעה ריק'; +$PHPMAILER_LANG['invalid_address'] = 'כתובת שגויה: '; +$PHPMAILER_LANG['encoding'] = 'קידוד לא מוכר: '; +$PHPMAILER_LANG['execute'] = 'לא הצלחתי להפעיל את: '; +$PHPMAILER_LANG['file_access'] = 'לא ניתן לגשת לקובץ: '; +$PHPMAILER_LANG['file_open'] = 'שגיאת קובץ: לא ניתן לגשת לקובץ: '; +$PHPMAILER_LANG['from_failed'] = 'כתובות הנמענים הבאות נכשלו: '; +$PHPMAILER_LANG['instantiate'] = 'לא הצלחתי להפעיל את פונקציית המייל.'; +$PHPMAILER_LANG['mailer_not_supported'] = ' אינה נתמכת.'; +$PHPMAILER_LANG['provide_address'] = 'חובה לספק לפחות כתובת אחת של מקבל המייל.'; +$PHPMAILER_LANG['recipients_failed'] = 'שגיאת SMTP: הנמענים הבאים נכשלו: '; +$PHPMAILER_LANG['signing'] = 'שגיאת חתימה: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.'; +$PHPMAILER_LANG['smtp_error'] = 'שגיאת שרת SMTP: '; +$PHPMAILER_LANG['variable_set'] = 'לא ניתן לקבוע או לשנות את המשתנה: '; +//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hi.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hi.php new file mode 100644 index 0000000..607a5ee --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hi.php @@ -0,0 +1,26 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP त्रुटि: प्रामाणिकता की जांच नहीं हो सका। '; +$PHPMAILER_LANG['connect_host'] = 'SMTP त्रुटि: SMTP सर्वर से कनेक्ट नहीं हो सका। '; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP त्रुटि: डेटा स्वीकार नहीं किया जाता है। '; +$PHPMAILER_LANG['empty_message'] = 'संदेश खाली है। '; +$PHPMAILER_LANG['encoding'] = 'अज्ञात एन्कोडिंग प्रकार। '; +$PHPMAILER_LANG['execute'] = 'आदेश को निष्पादित करने में विफल। '; +$PHPMAILER_LANG['file_access'] = 'फ़ाइल उपलब्ध नहीं है। '; +$PHPMAILER_LANG['file_open'] = 'फ़ाइल त्रुटि: फाइल को खोला नहीं जा सका। '; +$PHPMAILER_LANG['from_failed'] = 'प्रेषक का पता गलत है। '; +$PHPMAILER_LANG['instantiate'] = 'मेल फ़ंक्शन कॉल नहीं कर सकता है।'; +$PHPMAILER_LANG['invalid_address'] = 'पता गलत है। '; +$PHPMAILER_LANG['mailer_not_supported'] = 'मेल सर्वर के साथ काम नहीं करता है। '; +$PHPMAILER_LANG['provide_address'] = 'आपको कम से कम एक प्राप्तकर्ता का ई-मेल पता प्रदान करना होगा।'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP त्रुटि: निम्न प्राप्तकर्ताओं को पते भेजने में विफल। '; +$PHPMAILER_LANG['signing'] = 'साइनअप त्रुटि:। '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP का connect () फ़ंक्शन विफल हुआ। '; +$PHPMAILER_LANG['smtp_error'] = 'SMTP सर्वर त्रुटि। '; +$PHPMAILER_LANG['variable_set'] = 'चर को बना या संशोधित नहीं किया जा सकता। '; +$PHPMAILER_LANG['extension_missing'] = 'एक्सटेन्षन गायब है: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hr.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hr.php new file mode 100644 index 0000000..3822920 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hr.php @@ -0,0 +1,26 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP Greška: Neuspjela autentikacija.'; +$PHPMAILER_LANG['connect_host'] = 'SMTP Greška: Ne mogu se spojiti na SMTP poslužitelj.'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Greška: Podatci nisu prihvaćeni.'; +$PHPMAILER_LANG['empty_message'] = 'Sadržaj poruke je prazan.'; +$PHPMAILER_LANG['encoding'] = 'Nepoznati encoding: '; +$PHPMAILER_LANG['execute'] = 'Nije moguće izvršiti naredbu: '; +$PHPMAILER_LANG['file_access'] = 'Nije moguće pristupiti datoteci: '; +$PHPMAILER_LANG['file_open'] = 'Nije moguće otvoriti datoteku: '; +$PHPMAILER_LANG['from_failed'] = 'SMTP Greška: Slanje s navedenih e-mail adresa nije uspjelo: '; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP Greška: Slanje na navedenih e-mail adresa nije uspjelo: '; +$PHPMAILER_LANG['instantiate'] = 'Ne mogu pokrenuti mail funkcionalnost.'; +$PHPMAILER_LANG['invalid_address'] = 'E-mail nije poslan. Neispravna e-mail adresa: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' mailer nije podržan.'; +$PHPMAILER_LANG['provide_address'] = 'Definirajte barem jednu adresu primatelja.'; +$PHPMAILER_LANG['signing'] = 'Greška prilikom prijave: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'Spajanje na SMTP poslužitelj nije uspjelo.'; +$PHPMAILER_LANG['smtp_error'] = 'Greška SMTP poslužitelja: '; +$PHPMAILER_LANG['variable_set'] = 'Ne mogu postaviti varijablu niti ju vratiti nazad: '; +$PHPMAILER_LANG['extension_missing'] = 'Nedostaje proširenje: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hu.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hu.php new file mode 100644 index 0000000..196cddc --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hu.php @@ -0,0 +1,26 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP -ի սխալ: չհաջողվեց ստուգել իսկությունը.'; +$PHPMAILER_LANG['connect_host'] = 'SMTP -ի սխալ: չհաջողվեց կապ հաստատել SMTP սերվերի հետ.'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP -ի սխալ: տվյալները ընդունված չեն.'; +$PHPMAILER_LANG['empty_message'] = 'Հաղորդագրությունը դատարկ է'; +$PHPMAILER_LANG['encoding'] = 'Կոդավորման անհայտ տեսակ: '; +$PHPMAILER_LANG['execute'] = 'Չհաջողվեց իրականացնել հրամանը: '; +$PHPMAILER_LANG['file_access'] = 'Ֆայլը հասանելի չէ: '; +$PHPMAILER_LANG['file_open'] = 'Ֆայլի սխալ: ֆայլը չհաջողվեց բացել: '; +$PHPMAILER_LANG['from_failed'] = 'Ուղարկողի հետևյալ հասցեն սխալ է: '; +$PHPMAILER_LANG['instantiate'] = 'Հնարավոր չէ կանչել mail ֆունկցիան.'; +$PHPMAILER_LANG['invalid_address'] = 'Հասցեն սխալ է: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' փոստային սերվերի հետ չի աշխատում.'; +$PHPMAILER_LANG['provide_address'] = 'Անհրաժեշտ է տրամադրել գոնե մեկ ստացողի e-mail հասցե.'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP -ի սխալ: չի հաջողվել ուղարկել հետևյալ ստացողների հասցեներին: '; +$PHPMAILER_LANG['signing'] = 'Ստորագրման սխալ: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP -ի connect() ֆունկցիան չի հաջողվել'; +$PHPMAILER_LANG['smtp_error'] = 'SMTP սերվերի սխալ: '; +$PHPMAILER_LANG['variable_set'] = 'Չի հաջողվում ստեղծել կամ վերափոխել փոփոխականը: '; +$PHPMAILER_LANG['extension_missing'] = 'Հավելվածը բացակայում է: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-id.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-id.php new file mode 100644 index 0000000..1353bab --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-id.php @@ -0,0 +1,30 @@ + + * @author @januridp + * @author Ian Mustafa + */ + +$PHPMAILER_LANG['authenticate'] = 'Kesalahan SMTP: Tidak dapat mengotentikasi.'; +$PHPMAILER_LANG['connect_host'] = 'Kesalahan SMTP: Tidak dapat terhubung ke host SMTP.'; +$PHPMAILER_LANG['data_not_accepted'] = 'Kesalahan SMTP: Data tidak diterima.'; +$PHPMAILER_LANG['empty_message'] = 'Isi pesan kosong'; +$PHPMAILER_LANG['encoding'] = 'Pengkodean karakter tidak dikenali: '; +$PHPMAILER_LANG['execute'] = 'Tidak dapat menjalankan proses: '; +$PHPMAILER_LANG['file_access'] = 'Tidak dapat mengakses berkas: '; +$PHPMAILER_LANG['file_open'] = 'Kesalahan Berkas: Berkas tidak dapat dibuka: '; +$PHPMAILER_LANG['from_failed'] = 'Alamat pengirim berikut mengakibatkan kesalahan: '; +$PHPMAILER_LANG['instantiate'] = 'Tidak dapat menginisialisasi fungsi surel.'; +$PHPMAILER_LANG['invalid_address'] = 'Gagal terkirim, alamat surel tidak sesuai: '; +$PHPMAILER_LANG['invalid_hostentry'] = 'Gagal terkirim, entri host tidak sesuai: '; +$PHPMAILER_LANG['invalid_host'] = 'Gagal terkirim, host tidak sesuai: '; +$PHPMAILER_LANG['provide_address'] = 'Harus tersedia minimal satu alamat tujuan'; +$PHPMAILER_LANG['mailer_not_supported'] = ' mailer tidak didukung'; +$PHPMAILER_LANG['recipients_failed'] = 'Kesalahan SMTP: Alamat tujuan berikut menyebabkan kesalahan: '; +$PHPMAILER_LANG['signing'] = 'Kesalahan dalam penandatangan SSL: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() gagal.'; +$PHPMAILER_LANG['smtp_error'] = 'Kesalahan pada pelayan SMTP: '; +$PHPMAILER_LANG['variable_set'] = 'Tidak dapat mengatur atau mengatur ulang variabel: '; +$PHPMAILER_LANG['extension_missing'] = 'Ekstensi PHP tidak tersedia: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-it.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-it.php new file mode 100644 index 0000000..e67b6f7 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-it.php @@ -0,0 +1,27 @@ + + * @author Stefano Sabatini + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP Error: Impossibile autenticarsi.'; +$PHPMAILER_LANG['connect_host'] = 'SMTP Error: Impossibile connettersi all\'host SMTP.'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Error: Dati non accettati dal server.'; +$PHPMAILER_LANG['empty_message'] = 'Il corpo del messaggio è vuoto'; +$PHPMAILER_LANG['encoding'] = 'Codifica dei caratteri sconosciuta: '; +$PHPMAILER_LANG['execute'] = 'Impossibile eseguire l\'operazione: '; +$PHPMAILER_LANG['file_access'] = 'Impossibile accedere al file: '; +$PHPMAILER_LANG['file_open'] = 'File Error: Impossibile aprire il file: '; +$PHPMAILER_LANG['from_failed'] = 'I seguenti indirizzi mittenti hanno generato errore: '; +$PHPMAILER_LANG['instantiate'] = 'Impossibile istanziare la funzione mail'; +$PHPMAILER_LANG['invalid_address'] = 'Impossibile inviare, l\'indirizzo email non è valido: '; +$PHPMAILER_LANG['provide_address'] = 'Deve essere fornito almeno un indirizzo ricevente'; +$PHPMAILER_LANG['mailer_not_supported'] = 'Mailer non supportato'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP Error: I seguenti indirizzi destinatari hanno generato un errore: '; +$PHPMAILER_LANG['signing'] = 'Errore nella firma: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() fallita.'; +$PHPMAILER_LANG['smtp_error'] = 'Errore del server SMTP: '; +$PHPMAILER_LANG['variable_set'] = 'Impossibile impostare o resettare la variabile: '; +$PHPMAILER_LANG['extension_missing'] = 'Estensione mancante: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ja.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ja.php new file mode 100644 index 0000000..2d77872 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ja.php @@ -0,0 +1,27 @@ + + * @author Yoshi Sakai + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTPエラー: 認証できませんでした。'; +$PHPMAILER_LANG['connect_host'] = 'SMTPエラー: SMTPホストに接続できませんでした。'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTPエラー: データが受け付けられませんでした。'; +//$PHPMAILER_LANG['empty_message'] = 'Message body empty'; +$PHPMAILER_LANG['encoding'] = '不明なエンコーディング: '; +$PHPMAILER_LANG['execute'] = '実行できませんでした: '; +$PHPMAILER_LANG['file_access'] = 'ファイルにアクセスできません: '; +$PHPMAILER_LANG['file_open'] = 'ファイルエラー: ファイルを開けません: '; +$PHPMAILER_LANG['from_failed'] = 'Fromアドレスを登録する際にエラーが発生しました: '; +$PHPMAILER_LANG['instantiate'] = 'メール関数が正常に動作しませんでした。'; +//$PHPMAILER_LANG['invalid_address'] = 'Invalid address: '; +$PHPMAILER_LANG['provide_address'] = '少なくとも1つメールアドレスを 指定する必要があります。'; +$PHPMAILER_LANG['mailer_not_supported'] = ' メーラーがサポートされていません。'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTPエラー: 次の受信者アドレスに 間違いがあります: '; +//$PHPMAILER_LANG['signing'] = 'Signing Error: '; +//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.'; +//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: '; +//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: '; +//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ka.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ka.php new file mode 100644 index 0000000..dd1af8a --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ka.php @@ -0,0 +1,26 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP შეცდომა: ავტორიზაცია შეუძლებელია.'; +$PHPMAILER_LANG['connect_host'] = 'SMTP შეცდომა: SMTP სერვერთან დაკავშირება შეუძლებელია.'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP შეცდომა: მონაცემები არ იქნა მიღებული.'; +$PHPMAILER_LANG['encoding'] = 'კოდირების უცნობი ტიპი: '; +$PHPMAILER_LANG['execute'] = 'შეუძლებელია შემდეგი ბრძანების შესრულება: '; +$PHPMAILER_LANG['file_access'] = 'შეუძლებელია წვდომა ფაილთან: '; +$PHPMAILER_LANG['file_open'] = 'ფაილური სისტემის შეცდომა: არ იხსნება ფაილი: '; +$PHPMAILER_LANG['from_failed'] = 'გამგზავნის არასწორი მისამართი: '; +$PHPMAILER_LANG['instantiate'] = 'mail ფუნქციის გაშვება ვერ ხერხდება.'; +$PHPMAILER_LANG['provide_address'] = 'გთხოვთ მიუთითოთ ერთი ადრესატის e-mail მისამართი მაინც.'; +$PHPMAILER_LANG['mailer_not_supported'] = ' - საფოსტო სერვერის მხარდაჭერა არ არის.'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP შეცდომა: შემდეგ მისამართებზე გაგზავნა ვერ მოხერხდა: '; +$PHPMAILER_LANG['empty_message'] = 'შეტყობინება ცარიელია'; +$PHPMAILER_LANG['invalid_address'] = 'არ გაიგზავნა, e-mail მისამართის არასწორი ფორმატი: '; +$PHPMAILER_LANG['signing'] = 'ხელმოწერის შეცდომა: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'შეცდომა SMTP სერვერთან დაკავშირებისას'; +$PHPMAILER_LANG['smtp_error'] = 'SMTP სერვერის შეცდომა: '; +$PHPMAILER_LANG['variable_set'] = 'შეუძლებელია შემდეგი ცვლადის შექმნა ან შეცვლა: '; +$PHPMAILER_LANG['extension_missing'] = 'ბიბლიოთეკა არ არსებობს: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ko.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ko.php new file mode 100644 index 0000000..9599fa6 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ko.php @@ -0,0 +1,26 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP 오류: 인증할 수 없습니다.'; +$PHPMAILER_LANG['connect_host'] = 'SMTP 오류: SMTP 호스트에 접속할 수 없습니다.'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP 오류: 데이터가 받아들여지지 않았습니다.'; +$PHPMAILER_LANG['empty_message'] = '메세지 내용이 없습니다'; +$PHPMAILER_LANG['encoding'] = '알 수 없는 인코딩: '; +$PHPMAILER_LANG['execute'] = '실행 불가: '; +$PHPMAILER_LANG['file_access'] = '파일 접근 불가: '; +$PHPMAILER_LANG['file_open'] = '파일 오류: 파일을 열 수 없습니다: '; +$PHPMAILER_LANG['from_failed'] = '다음 From 주소에서 오류가 발생했습니다: '; +$PHPMAILER_LANG['instantiate'] = 'mail 함수를 인스턴스화할 수 없습니다'; +$PHPMAILER_LANG['invalid_address'] = '잘못된 주소: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' 메일러는 지원되지 않습니다.'; +$PHPMAILER_LANG['provide_address'] = '적어도 한 개 이상의 수신자 메일 주소를 제공해야 합니다.'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP 오류: 다음 수신자에서 오류가 발생했습니다: '; +$PHPMAILER_LANG['signing'] = '서명 오류: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP 연결을 실패하였습니다.'; +$PHPMAILER_LANG['smtp_error'] = 'SMTP 서버 오류: '; +$PHPMAILER_LANG['variable_set'] = '변수 설정 및 초기화 불가: '; +$PHPMAILER_LANG['extension_missing'] = '확장자 없음: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-lt.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-lt.php new file mode 100644 index 0000000..1253a4f --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-lt.php @@ -0,0 +1,26 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP klaida: autentifikacija nepavyko.'; +$PHPMAILER_LANG['connect_host'] = 'SMTP klaida: nepavyksta prisijungti prie SMTP stoties.'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP klaida: duomenys nepriimti.'; +$PHPMAILER_LANG['empty_message'] = 'Laiško turinys tuščias'; +$PHPMAILER_LANG['encoding'] = 'Neatpažinta koduotė: '; +$PHPMAILER_LANG['execute'] = 'Nepavyko įvykdyti komandos: '; +$PHPMAILER_LANG['file_access'] = 'Byla nepasiekiama: '; +$PHPMAILER_LANG['file_open'] = 'Bylos klaida: Nepavyksta atidaryti: '; +$PHPMAILER_LANG['from_failed'] = 'Neteisingas siuntėjo adresas: '; +$PHPMAILER_LANG['instantiate'] = 'Nepavyko paleisti mail funkcijos.'; +$PHPMAILER_LANG['invalid_address'] = 'Neteisingas adresas: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' pašto stotis nepalaikoma.'; +$PHPMAILER_LANG['provide_address'] = 'Nurodykite bent vieną gavėjo adresą.'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP klaida: nepavyko išsiųsti šiems gavėjams: '; +$PHPMAILER_LANG['signing'] = 'Prisijungimo klaida: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP susijungimo klaida'; +$PHPMAILER_LANG['smtp_error'] = 'SMTP stoties klaida: '; +$PHPMAILER_LANG['variable_set'] = 'Nepavyko priskirti reikšmės kintamajam: '; +//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-lv.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-lv.php new file mode 100644 index 0000000..39bf9a1 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-lv.php @@ -0,0 +1,26 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP kļūda: Autorizācija neizdevās.'; +$PHPMAILER_LANG['connect_host'] = 'SMTP Kļūda: Nevar izveidot savienojumu ar SMTP serveri.'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Kļūda: Nepieņem informāciju.'; +$PHPMAILER_LANG['empty_message'] = 'Ziņojuma teksts ir tukšs'; +$PHPMAILER_LANG['encoding'] = 'Neatpazīts kodējums: '; +$PHPMAILER_LANG['execute'] = 'Neizdevās izpildīt komandu: '; +$PHPMAILER_LANG['file_access'] = 'Fails nav pieejams: '; +$PHPMAILER_LANG['file_open'] = 'Faila kļūda: Nevar atvērt failu: '; +$PHPMAILER_LANG['from_failed'] = 'Nepareiza sūtītāja adrese: '; +$PHPMAILER_LANG['instantiate'] = 'Nevar palaist sūtīšanas funkciju.'; +$PHPMAILER_LANG['invalid_address'] = 'Nepareiza adrese: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' sūtītājs netiek atbalstīts.'; +$PHPMAILER_LANG['provide_address'] = 'Lūdzu, norādiet vismaz vienu adresātu.'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP kļūda: neizdevās nosūtīt šādiem saņēmējiem: '; +$PHPMAILER_LANG['signing'] = 'Autorizācijas kļūda: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP savienojuma kļūda'; +$PHPMAILER_LANG['smtp_error'] = 'SMTP servera kļūda: '; +$PHPMAILER_LANG['variable_set'] = 'Nevar piešķirt mainīgā vērtību: '; +//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-mg.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-mg.php new file mode 100644 index 0000000..f4c7563 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-mg.php @@ -0,0 +1,25 @@ + + */ +$PHPMAILER_LANG['authenticate'] = 'Hadisoana SMTP: Tsy nahomby ny fanamarinana.'; +$PHPMAILER_LANG['connect_host'] = 'SMTP Error: Tsy afaka mampifandray amin\'ny mpampiantrano SMTP.'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP diso: tsy voarakitra ny angona.'; +$PHPMAILER_LANG['empty_message'] = 'Tsy misy ny votoaty mailaka.'; +$PHPMAILER_LANG['encoding'] = 'Tsy fantatra encoding: '; +$PHPMAILER_LANG['execute'] = 'Tsy afaka manatanteraka ity baiko manaraka ity: '; +$PHPMAILER_LANG['file_access'] = 'Tsy nahomby ny fidirana amin\'ity rakitra ity: '; +$PHPMAILER_LANG['file_open'] = 'Hadisoana diso: Tsy afaka nanokatra ity file manaraka ity: '; +$PHPMAILER_LANG['from_failed'] = 'Ny adiresy iraka manaraka dia diso: '; +$PHPMAILER_LANG['instantiate'] = 'Tsy afaka nanomboka ny hetsika mail.'; +$PHPMAILER_LANG['invalid_address'] = 'Tsy mety ny adiresy: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' mailer tsy manohana.'; +$PHPMAILER_LANG['provide_address'] = 'Alefaso azafady iray adiresy iray farafahakeliny.'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP Error: Tsy mety ireo mpanaraka ireto: '; +$PHPMAILER_LANG['signing'] = 'Error nandritra ny sonia:'; +$PHPMAILER_LANG['smtp_connect_failed'] = 'Tsy nahomby ny fifandraisana tamin\'ny server SMTP.'; +$PHPMAILER_LANG['smtp_error'] = 'Fahadisoana tamin\'ny server SMTP: '; +$PHPMAILER_LANG['variable_set'] = 'Tsy azo atao ny mametraka na mamerina ny variable: '; +$PHPMAILER_LANG['extension_missing'] = 'Tsy hita ny ampahany: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ms.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ms.php new file mode 100644 index 0000000..f12a6ad --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ms.php @@ -0,0 +1,26 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'Ralat SMTP: Tidak dapat pengesahan.'; +$PHPMAILER_LANG['connect_host'] = 'Ralat SMTP: Tidak dapat menghubungi hos pelayan SMTP.'; +$PHPMAILER_LANG['data_not_accepted'] = 'Ralat SMTP: Data tidak diterima oleh pelayan.'; +$PHPMAILER_LANG['empty_message'] = 'Tiada isi untuk mesej'; +$PHPMAILER_LANG['encoding'] = 'Pengekodan tidak diketahui: '; +$PHPMAILER_LANG['execute'] = 'Tidak dapat melaksanakan: '; +$PHPMAILER_LANG['file_access'] = 'Tidak dapat mengakses fail: '; +$PHPMAILER_LANG['file_open'] = 'Ralat Fail: Tidak dapat membuka fail: '; +$PHPMAILER_LANG['from_failed'] = 'Berikut merupakan ralat dari alamat e-mel: '; +$PHPMAILER_LANG['instantiate'] = 'Tidak dapat memberi contoh fungsi e-mel.'; +$PHPMAILER_LANG['invalid_address'] = 'Alamat emel tidak sah: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' jenis penghantar emel tidak disokong.'; +$PHPMAILER_LANG['provide_address'] = 'Anda perlu menyediakan sekurang-kurangnya satu alamat e-mel penerima.'; +$PHPMAILER_LANG['recipients_failed'] = 'Ralat SMTP: Penerima e-mel berikut telah gagal: '; +$PHPMAILER_LANG['signing'] = 'Ralat pada tanda tangan: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() telah gagal.'; +$PHPMAILER_LANG['smtp_error'] = 'Ralat pada pelayan SMTP: '; +$PHPMAILER_LANG['variable_set'] = 'Tidak boleh menetapkan atau menetapkan semula pembolehubah: '; +$PHPMAILER_LANG['extension_missing'] = 'Sambungan hilang: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-nb.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-nb.php new file mode 100644 index 0000000..97403e7 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-nb.php @@ -0,0 +1,25 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP-fout: authenticatie mislukt.'; +$PHPMAILER_LANG['connect_host'] = 'SMTP-fout: kon niet verbinden met SMTP-host.'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP-fout: data niet geaccepteerd.'; +$PHPMAILER_LANG['empty_message'] = 'Berichttekst is leeg'; +$PHPMAILER_LANG['encoding'] = 'Onbekende codering: '; +$PHPMAILER_LANG['execute'] = 'Kon niet uitvoeren: '; +$PHPMAILER_LANG['file_access'] = 'Kreeg geen toegang tot bestand: '; +$PHPMAILER_LANG['file_open'] = 'Bestandsfout: kon bestand niet openen: '; +$PHPMAILER_LANG['from_failed'] = 'Het volgende afzendersadres is mislukt: '; +$PHPMAILER_LANG['instantiate'] = 'Kon mailfunctie niet initialiseren.'; +$PHPMAILER_LANG['invalid_address'] = 'Ongeldig adres: '; +$PHPMAILER_LANG['invalid_hostentry'] = 'Ongeldige hostentry: '; +$PHPMAILER_LANG['invalid_host'] = 'Ongeldige host: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' mailer wordt niet ondersteund.'; +$PHPMAILER_LANG['provide_address'] = 'Er moet minstens één ontvanger worden opgegeven.'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP-fout: de volgende ontvangers zijn mislukt: '; +$PHPMAILER_LANG['signing'] = 'Signeerfout: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Verbinding mislukt.'; +$PHPMAILER_LANG['smtp_error'] = 'SMTP-serverfout: '; +$PHPMAILER_LANG['variable_set'] = 'Kan de volgende variabele niet instellen of resetten: '; +$PHPMAILER_LANG['extension_missing'] = 'Extensie afwezig: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-pl.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-pl.php new file mode 100644 index 0000000..3da0dee --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-pl.php @@ -0,0 +1,26 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'Erro do SMTP: Não foi possível realizar a autenticação.'; +$PHPMAILER_LANG['connect_host'] = 'Erro do SMTP: Não foi possível realizar ligação com o servidor SMTP.'; +$PHPMAILER_LANG['data_not_accepted'] = 'Erro do SMTP: Os dados foram rejeitados.'; +$PHPMAILER_LANG['empty_message'] = 'A mensagem no e-mail está vazia.'; +$PHPMAILER_LANG['encoding'] = 'Codificação desconhecida: '; +$PHPMAILER_LANG['execute'] = 'Não foi possível executar: '; +$PHPMAILER_LANG['file_access'] = 'Não foi possível aceder o ficheiro: '; +$PHPMAILER_LANG['file_open'] = 'Abertura do ficheiro: Não foi possível abrir o ficheiro: '; +$PHPMAILER_LANG['from_failed'] = 'Ocorreram falhas nos endereços dos seguintes remententes: '; +$PHPMAILER_LANG['instantiate'] = 'Não foi possível iniciar uma instância da função mail.'; +$PHPMAILER_LANG['invalid_address'] = 'Não foi enviado nenhum e-mail para o endereço de e-mail inválido: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' mailer não é suportado.'; +$PHPMAILER_LANG['provide_address'] = 'Tem de fornecer pelo menos um endereço como destinatário do e-mail.'; +$PHPMAILER_LANG['recipients_failed'] = 'Erro do SMTP: O endereço do seguinte destinatário falhou: '; +$PHPMAILER_LANG['signing'] = 'Erro ao assinar: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() falhou.'; +$PHPMAILER_LANG['smtp_error'] = 'Erro de servidor SMTP: '; +$PHPMAILER_LANG['variable_set'] = 'Não foi possível definir ou redefinir a variável: '; +$PHPMAILER_LANG['extension_missing'] = 'Extensão em falta: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-pt_br.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-pt_br.php new file mode 100644 index 0000000..62d692d --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-pt_br.php @@ -0,0 +1,29 @@ + + * @author Lucas Guimarães + * @author Phelipe Alves + * @author Fabio Beneditto + */ + +$PHPMAILER_LANG['authenticate'] = 'Erro de SMTP: Não foi possível autenticar.'; +$PHPMAILER_LANG['connect_host'] = 'Erro de SMTP: Não foi possível conectar ao servidor SMTP.'; +$PHPMAILER_LANG['data_not_accepted'] = 'Erro de SMTP: Dados rejeitados.'; +$PHPMAILER_LANG['empty_message'] = 'Mensagem vazia'; +$PHPMAILER_LANG['encoding'] = 'Codificação desconhecida: '; +$PHPMAILER_LANG['execute'] = 'Não foi possível executar: '; +$PHPMAILER_LANG['file_access'] = 'Não foi possível acessar o arquivo: '; +$PHPMAILER_LANG['file_open'] = 'Erro de Arquivo: Não foi possível abrir o arquivo: '; +$PHPMAILER_LANG['from_failed'] = 'Os seguintes remetentes falharam: '; +$PHPMAILER_LANG['instantiate'] = 'Não foi possível instanciar a função mail.'; +$PHPMAILER_LANG['invalid_address'] = 'Endereço de e-mail inválido: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' mailer não é suportado.'; +$PHPMAILER_LANG['provide_address'] = 'Você deve informar pelo menos um destinatário.'; +$PHPMAILER_LANG['recipients_failed'] = 'Erro de SMTP: Os seguintes destinatários falharam: '; +$PHPMAILER_LANG['signing'] = 'Erro de Assinatura: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() falhou.'; +$PHPMAILER_LANG['smtp_error'] = 'Erro de servidor SMTP: '; +$PHPMAILER_LANG['variable_set'] = 'Não foi possível definir ou redefinir a variável: '; +$PHPMAILER_LANG['extension_missing'] = 'Extensão não existe: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ro.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ro.php new file mode 100644 index 0000000..fa100ea --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ro.php @@ -0,0 +1,26 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'Eroare SMTP: Autentificarea a eșuat.'; +$PHPMAILER_LANG['connect_host'] = 'Eroare SMTP: Conectarea la serverul SMTP a eșuat.'; +$PHPMAILER_LANG['data_not_accepted'] = 'Eroare SMTP: Datele nu au fost acceptate.'; +$PHPMAILER_LANG['empty_message'] = 'Mesajul este gol.'; +$PHPMAILER_LANG['encoding'] = 'Encodare necunoscută: '; +$PHPMAILER_LANG['execute'] = 'Nu se poate executa următoarea comandă: '; +$PHPMAILER_LANG['file_access'] = 'Nu se poate accesa următorul fișier: '; +$PHPMAILER_LANG['file_open'] = 'Eroare fișier: Nu se poate deschide următorul fișier: '; +$PHPMAILER_LANG['from_failed'] = 'Următoarele adrese From au dat eroare: '; +$PHPMAILER_LANG['instantiate'] = 'Funcția mail nu a putut fi inițializată.'; +$PHPMAILER_LANG['invalid_address'] = 'Adresa de email nu este validă: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' mailer nu este suportat.'; +$PHPMAILER_LANG['provide_address'] = 'Trebuie să adăugați cel puțin o adresă de email.'; +$PHPMAILER_LANG['recipients_failed'] = 'Eroare SMTP: Următoarele adrese de email au eșuat: '; +$PHPMAILER_LANG['signing'] = 'A aparut o problemă la semnarea emailului. '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'Conectarea la serverul SMTP a eșuat.'; +$PHPMAILER_LANG['smtp_error'] = 'Eroare server SMTP: '; +$PHPMAILER_LANG['variable_set'] = 'Nu se poate seta/reseta variabila. '; +$PHPMAILER_LANG['extension_missing'] = 'Lipsește extensia: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ru.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ru.php new file mode 100644 index 0000000..720e9a1 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ru.php @@ -0,0 +1,27 @@ + + * @author Foster Snowhill + */ + +$PHPMAILER_LANG['authenticate'] = 'Ошибка SMTP: ошибка авторизации.'; +$PHPMAILER_LANG['connect_host'] = 'Ошибка SMTP: не удается подключиться к SMTP-серверу.'; +$PHPMAILER_LANG['data_not_accepted'] = 'Ошибка SMTP: данные не приняты.'; +$PHPMAILER_LANG['encoding'] = 'Неизвестная кодировка: '; +$PHPMAILER_LANG['execute'] = 'Невозможно выполнить команду: '; +$PHPMAILER_LANG['file_access'] = 'Нет доступа к файлу: '; +$PHPMAILER_LANG['file_open'] = 'Файловая ошибка: не удаётся открыть файл: '; +$PHPMAILER_LANG['from_failed'] = 'Неверный адрес отправителя: '; +$PHPMAILER_LANG['instantiate'] = 'Невозможно запустить функцию mail().'; +$PHPMAILER_LANG['provide_address'] = 'Пожалуйста, введите хотя бы один email-адрес получателя.'; +$PHPMAILER_LANG['mailer_not_supported'] = ' — почтовый сервер не поддерживается.'; +$PHPMAILER_LANG['recipients_failed'] = 'Ошибка SMTP: не удалась отправка таким адресатам: '; +$PHPMAILER_LANG['empty_message'] = 'Пустое сообщение'; +$PHPMAILER_LANG['invalid_address'] = 'Не отправлено из-за неправильного формата email-адреса: '; +$PHPMAILER_LANG['signing'] = 'Ошибка подписи: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'Ошибка соединения с SMTP-сервером'; +$PHPMAILER_LANG['smtp_error'] = 'Ошибка SMTP-сервера: '; +$PHPMAILER_LANG['variable_set'] = 'Невозможно установить или сбросить переменную: '; +$PHPMAILER_LANG['extension_missing'] = 'Расширение отсутствует: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sk.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sk.php new file mode 100644 index 0000000..69cfb0f --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sk.php @@ -0,0 +1,27 @@ + + * @author Peter Orlický + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP Error: Chyba autentifikácie.'; +$PHPMAILER_LANG['connect_host'] = 'SMTP Error: Nebolo možné nadviazať spojenie so SMTP serverom.'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Error: Dáta neboli prijaté'; +$PHPMAILER_LANG['empty_message'] = 'Prázdne telo správy.'; +$PHPMAILER_LANG['encoding'] = 'Neznáme kódovanie: '; +$PHPMAILER_LANG['execute'] = 'Nedá sa vykonať: '; +$PHPMAILER_LANG['file_access'] = 'Súbor nebol nájdený: '; +$PHPMAILER_LANG['file_open'] = 'File Error: Súbor sa otvoriť pre čítanie: '; +$PHPMAILER_LANG['from_failed'] = 'Následujúca adresa From je nesprávna: '; +$PHPMAILER_LANG['instantiate'] = 'Nedá sa vytvoriť inštancia emailovej funkcie.'; +$PHPMAILER_LANG['invalid_address'] = 'Neodoslané, emailová adresa je nesprávna: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' emailový klient nieje podporovaný.'; +$PHPMAILER_LANG['provide_address'] = 'Musíte zadať aspoň jednu emailovú adresu príjemcu.'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP Error: Adresy príjemcov niesu správne '; +$PHPMAILER_LANG['signing'] = 'Chyba prihlasovania: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() zlyhalo.'; +$PHPMAILER_LANG['smtp_error'] = 'SMTP chyba serveru: '; +$PHPMAILER_LANG['variable_set'] = 'Nemožno nastaviť alebo resetovať premennú: '; +$PHPMAILER_LANG['extension_missing'] = 'Chýba rozšírenie: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sl.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sl.php new file mode 100644 index 0000000..1e3cb7f --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sl.php @@ -0,0 +1,27 @@ + + * @author Filip Š + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP napaka: Avtentikacija ni uspela.'; +$PHPMAILER_LANG['connect_host'] = 'SMTP napaka: Vzpostavljanje povezave s SMTP gostiteljem ni uspelo.'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP napaka: Strežnik zavrača podatke.'; +$PHPMAILER_LANG['empty_message'] = 'E-poštno sporočilo nima vsebine.'; +$PHPMAILER_LANG['encoding'] = 'Nepoznan tip kodiranja: '; +$PHPMAILER_LANG['execute'] = 'Operacija ni uspela: '; +$PHPMAILER_LANG['file_access'] = 'Nimam dostopa do datoteke: '; +$PHPMAILER_LANG['file_open'] = 'Ne morem odpreti datoteke: '; +$PHPMAILER_LANG['from_failed'] = 'Neveljaven e-naslov pošiljatelja: '; +$PHPMAILER_LANG['instantiate'] = 'Ne morem inicializirati mail funkcije.'; +$PHPMAILER_LANG['invalid_address'] = 'E-poštno sporočilo ni bilo poslano. E-naslov je neveljaven: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' mailer ni podprt.'; +$PHPMAILER_LANG['provide_address'] = 'Prosim vnesite vsaj enega naslovnika.'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP napaka: Sledeči naslovniki so neveljavni: '; +$PHPMAILER_LANG['signing'] = 'Napaka pri podpisovanju: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'Ne morem vzpostaviti povezave s SMTP strežnikom.'; +$PHPMAILER_LANG['smtp_error'] = 'Napaka SMTP strežnika: '; +$PHPMAILER_LANG['variable_set'] = 'Ne morem nastaviti oz. ponastaviti spremenljivke: '; +$PHPMAILER_LANG['extension_missing'] = 'Manjkajoča razširitev: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sr.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sr.php new file mode 100644 index 0000000..34c1e18 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sr.php @@ -0,0 +1,27 @@ + + * @author Miloš Milanović + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP грешка: аутентификација није успела.'; +$PHPMAILER_LANG['connect_host'] = 'SMTP грешка: повезивање са SMTP сервером није успело.'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP грешка: подаци нису прихваћени.'; +$PHPMAILER_LANG['empty_message'] = 'Садржај поруке је празан.'; +$PHPMAILER_LANG['encoding'] = 'Непознато кодирање: '; +$PHPMAILER_LANG['execute'] = 'Није могуће извршити наредбу: '; +$PHPMAILER_LANG['file_access'] = 'Није могуће приступити датотеци: '; +$PHPMAILER_LANG['file_open'] = 'Није могуће отворити датотеку: '; +$PHPMAILER_LANG['from_failed'] = 'SMTP грешка: слање са следећих адреса није успело: '; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP грешка: слање на следеће адресе није успело: '; +$PHPMAILER_LANG['instantiate'] = 'Није могуће покренути mail функцију.'; +$PHPMAILER_LANG['invalid_address'] = 'Порука није послата. Неисправна адреса: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' мејлер није подржан.'; +$PHPMAILER_LANG['provide_address'] = 'Дефинишите бар једну адресу примаоца.'; +$PHPMAILER_LANG['signing'] = 'Грешка приликом пријаве: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'Повезивање са SMTP сервером није успело.'; +$PHPMAILER_LANG['smtp_error'] = 'Грешка SMTP сервера: '; +$PHPMAILER_LANG['variable_set'] = 'Није могуће задати нити ресетовати променљиву: '; +$PHPMAILER_LANG['extension_missing'] = 'Недостаје проширење: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sv.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sv.php new file mode 100644 index 0000000..c78237e --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sv.php @@ -0,0 +1,26 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP fel: Kunde inte autentisera.'; +$PHPMAILER_LANG['connect_host'] = 'SMTP fel: Kunde inte ansluta till SMTP-server.'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP fel: Data accepterades inte.'; +//$PHPMAILER_LANG['empty_message'] = 'Message body empty'; +$PHPMAILER_LANG['encoding'] = 'Okänt encode-format: '; +$PHPMAILER_LANG['execute'] = 'Kunde inte köra: '; +$PHPMAILER_LANG['file_access'] = 'Ingen åtkomst till fil: '; +$PHPMAILER_LANG['file_open'] = 'Fil fel: Kunde inte öppna fil: '; +$PHPMAILER_LANG['from_failed'] = 'Följande avsändaradress är felaktig: '; +$PHPMAILER_LANG['instantiate'] = 'Kunde inte initiera e-postfunktion.'; +$PHPMAILER_LANG['invalid_address'] = 'Felaktig adress: '; +$PHPMAILER_LANG['provide_address'] = 'Du måste ange minst en mottagares e-postadress.'; +$PHPMAILER_LANG['mailer_not_supported'] = ' mailer stöds inte.'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP fel: Följande mottagare är felaktig: '; +$PHPMAILER_LANG['signing'] = 'Signeringsfel: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() misslyckades.'; +$PHPMAILER_LANG['smtp_error'] = 'SMTP serverfel: '; +$PHPMAILER_LANG['variable_set'] = 'Kunde inte definiera eller återställa variabel: '; +$PHPMAILER_LANG['extension_missing'] = 'Tillägg ej tillgängligt: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-tl.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-tl.php new file mode 100644 index 0000000..cd91f75 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-tl.php @@ -0,0 +1,27 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP Error: Hindi mapatotohanan.'; +$PHPMAILER_LANG['connect_host'] = 'SMTP Error: Hindi makakonekta sa SMTP host.'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Error: Ang datos ay hindi naitanggap.'; +$PHPMAILER_LANG['empty_message'] = 'Walang laman ang mensahe'; +$PHPMAILER_LANG['encoding'] = 'Hindi alam ang encoding: '; +$PHPMAILER_LANG['execute'] = 'Hindi maisasagawa: '; +$PHPMAILER_LANG['file_access'] = 'Hindi ma-access ang file: '; +$PHPMAILER_LANG['file_open'] = 'File Error: Hindi mabuksan ang file: '; +$PHPMAILER_LANG['from_failed'] = 'Ang sumusunod na address ay nabigo: '; +$PHPMAILER_LANG['instantiate'] = 'Hindi maisimulan ang instance ng mail function.'; +$PHPMAILER_LANG['invalid_address'] = 'Hindi wasto ang address na naibigay: '; +$PHPMAILER_LANG['mailer_not_supported'] = 'Ang mailer ay hindi suportado.'; +$PHPMAILER_LANG['provide_address'] = 'Kailangan mong magbigay ng kahit isang email address na tatanggap.'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP Error: Ang mga sumusunod na tatanggap ay nabigo: '; +$PHPMAILER_LANG['signing'] = 'Hindi ma-sign: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'Ang SMTP connect() ay nabigo.'; +$PHPMAILER_LANG['smtp_error'] = 'Ang server ng SMTP ay nabigo: '; +$PHPMAILER_LANG['variable_set'] = 'Hindi matatakda o ma-reset ang mga variables: '; +$PHPMAILER_LANG['extension_missing'] = 'Nawawala ang extension: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-tr.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-tr.php new file mode 100644 index 0000000..cfe8eaa --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-tr.php @@ -0,0 +1,30 @@ + + * @fixed by Boris Yurchenko + */ + +$PHPMAILER_LANG['authenticate'] = 'Помилка SMTP: помилка авторизації.'; +$PHPMAILER_LANG['connect_host'] = 'Помилка SMTP: не вдається під\'єднатися до SMTP-серверу.'; +$PHPMAILER_LANG['data_not_accepted'] = 'Помилка SMTP: дані не прийнято.'; +$PHPMAILER_LANG['encoding'] = 'Невідоме кодування: '; +$PHPMAILER_LANG['execute'] = 'Неможливо виконати команду: '; +$PHPMAILER_LANG['file_access'] = 'Немає доступу до файлу: '; +$PHPMAILER_LANG['file_open'] = 'Помилка файлової системи: не вдається відкрити файл: '; +$PHPMAILER_LANG['from_failed'] = 'Невірна адреса відправника: '; +$PHPMAILER_LANG['instantiate'] = 'Неможливо запустити функцію mail().'; +$PHPMAILER_LANG['provide_address'] = 'Будь-ласка, введіть хоча б одну email-адресу отримувача.'; +$PHPMAILER_LANG['mailer_not_supported'] = ' - поштовий сервер не підтримується.'; +$PHPMAILER_LANG['recipients_failed'] = 'Помилка SMTP: не вдалося відправлення для таких отримувачів: '; +$PHPMAILER_LANG['empty_message'] = 'Пусте повідомлення'; +$PHPMAILER_LANG['invalid_address'] = 'Не відправлено через невірний формат email-адреси: '; +$PHPMAILER_LANG['signing'] = 'Помилка підпису: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'Помилка з\'єднання з SMTP-сервером'; +$PHPMAILER_LANG['smtp_error'] = 'Помилка SMTP-сервера: '; +$PHPMAILER_LANG['variable_set'] = 'Неможливо встановити або скинути змінну: '; +$PHPMAILER_LANG['extension_missing'] = 'Розширення відсутнє: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-vi.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-vi.php new file mode 100644 index 0000000..c60dade --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-vi.php @@ -0,0 +1,26 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'Lỗi SMTP: Không thể xác thực.'; +$PHPMAILER_LANG['connect_host'] = 'Lỗi SMTP: Không thể kết nối máy chủ SMTP.'; +$PHPMAILER_LANG['data_not_accepted'] = 'Lỗi SMTP: Dữ liệu không được chấp nhận.'; +$PHPMAILER_LANG['empty_message'] = 'Không có nội dung'; +$PHPMAILER_LANG['encoding'] = 'Mã hóa không xác định: '; +$PHPMAILER_LANG['execute'] = 'Không thực hiện được: '; +$PHPMAILER_LANG['file_access'] = 'Không thể truy cập tệp tin '; +$PHPMAILER_LANG['file_open'] = 'Lỗi Tập tin: Không thể mở tệp tin: '; +$PHPMAILER_LANG['from_failed'] = 'Lỗi địa chỉ gửi đi: '; +$PHPMAILER_LANG['instantiate'] = 'Không dùng được các hàm gửi thư.'; +$PHPMAILER_LANG['invalid_address'] = 'Đại chỉ emai không đúng: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' trình gửi thư không được hỗ trợ.'; +$PHPMAILER_LANG['provide_address'] = 'Bạn phải cung cấp ít nhất một địa chỉ người nhận.'; +$PHPMAILER_LANG['recipients_failed'] = 'Lỗi SMTP: lỗi địa chỉ người nhận: '; +$PHPMAILER_LANG['signing'] = 'Lỗi đăng nhập: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'Lỗi kết nối với SMTP'; +$PHPMAILER_LANG['smtp_error'] = 'Lỗi máy chủ smtp '; +$PHPMAILER_LANG['variable_set'] = 'Không thể thiết lập hoặc thiết lập lại biến: '; +//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh.php new file mode 100644 index 0000000..3e9e358 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh.php @@ -0,0 +1,28 @@ + + * @author Peter Dave Hello <@PeterDaveHello/> + * @author Jason Chiang + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP 錯誤:登入失敗。'; +$PHPMAILER_LANG['connect_host'] = 'SMTP 錯誤:無法連線到 SMTP 主機。'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP 錯誤:無法接受的資料。'; +$PHPMAILER_LANG['empty_message'] = '郵件內容為空'; +$PHPMAILER_LANG['encoding'] = '未知編碼: '; +$PHPMAILER_LANG['execute'] = '無法執行:'; +$PHPMAILER_LANG['file_access'] = '無法存取檔案:'; +$PHPMAILER_LANG['file_open'] = '檔案錯誤:無法開啟檔案:'; +$PHPMAILER_LANG['from_failed'] = '發送地址錯誤:'; +$PHPMAILER_LANG['instantiate'] = '未知函數呼叫。'; +$PHPMAILER_LANG['invalid_address'] = '因為電子郵件地址無效,無法傳送: '; +$PHPMAILER_LANG['mailer_not_supported'] = '不支援的發信客戶端。'; +$PHPMAILER_LANG['provide_address'] = '必須提供至少一個收件人地址。'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP 錯誤:以下收件人地址錯誤:'; +$PHPMAILER_LANG['signing'] = '電子簽章錯誤: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP 連線失敗'; +$PHPMAILER_LANG['smtp_error'] = 'SMTP 伺服器錯誤: '; +$PHPMAILER_LANG['variable_set'] = '無法設定或重設變數: '; +$PHPMAILER_LANG['extension_missing'] = '遺失模組 Extension: '; diff --git a/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh_cn.php b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh_cn.php new file mode 100644 index 0000000..3753780 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh_cn.php @@ -0,0 +1,28 @@ + + * @author young + * @author Teddysun + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP 错误:登录失败。'; +$PHPMAILER_LANG['connect_host'] = 'SMTP 错误:无法连接到 SMTP 主机。'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP 错误:数据不被接受。'; +$PHPMAILER_LANG['empty_message'] = '邮件正文为空。'; +$PHPMAILER_LANG['encoding'] = '未知编码:'; +$PHPMAILER_LANG['execute'] = '无法执行:'; +$PHPMAILER_LANG['file_access'] = '无法访问文件:'; +$PHPMAILER_LANG['file_open'] = '文件错误:无法打开文件:'; +$PHPMAILER_LANG['from_failed'] = '发送地址错误:'; +$PHPMAILER_LANG['instantiate'] = '未知函数调用。'; +$PHPMAILER_LANG['invalid_address'] = '发送失败,电子邮箱地址是无效的:'; +$PHPMAILER_LANG['mailer_not_supported'] = '发信客户端不被支持。'; +$PHPMAILER_LANG['provide_address'] = '必须提供至少一个收件人地址。'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP 错误:收件人地址错误:'; +$PHPMAILER_LANG['signing'] = '登录失败:'; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP服务器连接失败。'; +$PHPMAILER_LANG['smtp_error'] = 'SMTP服务器出错:'; +$PHPMAILER_LANG['variable_set'] = '无法设置或重置变量:'; +$PHPMAILER_LANG['extension_missing'] = '丢失模块 Extension:'; diff --git a/admin/lib/vendor/phpmailer/phpmailer/src/Exception.php b/admin/lib/vendor/phpmailer/phpmailer/src/Exception.php new file mode 100644 index 0000000..e7807fc --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/src/Exception.php @@ -0,0 +1,39 @@ + + * @author Jim Jagielski (jimjag) + * @author Andy Prevost (codeworxtech) + * @author Brent R. Matzelle (original founder) + * @copyright 2012 - 2020 Marcus Bointon + * @copyright 2010 - 2012 Jim Jagielski + * @copyright 2004 - 2009 Andy Prevost + * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @note This program is distributed in the hope that it will be useful - WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + */ + +namespace PHPMailer\PHPMailer; + +/** + * PHPMailer exception handler. + * + * @author Marcus Bointon + */ +class Exception extends \Exception +{ + /** + * Prettify error message output. + * + * @return string + */ + public function errorMessage() + { + return '' . htmlspecialchars($this->getMessage()) . "
\n"; + } +} diff --git a/admin/lib/vendor/phpmailer/phpmailer/src/OAuth.php b/admin/lib/vendor/phpmailer/phpmailer/src/OAuth.php new file mode 100644 index 0000000..753aac9 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/src/OAuth.php @@ -0,0 +1,138 @@ + + * @author Jim Jagielski (jimjag) + * @author Andy Prevost (codeworxtech) + * @author Brent R. Matzelle (original founder) + * @copyright 2012 - 2020 Marcus Bointon + * @copyright 2010 - 2012 Jim Jagielski + * @copyright 2004 - 2009 Andy Prevost + * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @note This program is distributed in the hope that it will be useful - WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + */ + +namespace PHPMailer\PHPMailer; + +use League\OAuth2\Client\Grant\RefreshToken; +use League\OAuth2\Client\Provider\AbstractProvider; +use League\OAuth2\Client\Token\AccessToken; + +/** + * OAuth - OAuth2 authentication wrapper class. + * Uses the oauth2-client package from the League of Extraordinary Packages. + * + * @see http://oauth2-client.thephpleague.com + * + * @author Marcus Bointon (Synchro/coolbru) + */ +class OAuth +{ + /** + * An instance of the League OAuth Client Provider. + * + * @var AbstractProvider + */ + protected $provider; + + /** + * The current OAuth access token. + * + * @var AccessToken + */ + protected $oauthToken; + + /** + * The user's email address, usually used as the login ID + * and also the from address when sending email. + * + * @var string + */ + protected $oauthUserEmail = ''; + + /** + * The client secret, generated in the app definition of the service you're connecting to. + * + * @var string + */ + protected $oauthClientSecret = ''; + + /** + * The client ID, generated in the app definition of the service you're connecting to. + * + * @var string + */ + protected $oauthClientId = ''; + + /** + * The refresh token, used to obtain new AccessTokens. + * + * @var string + */ + protected $oauthRefreshToken = ''; + + /** + * OAuth constructor. + * + * @param array $options Associative array containing + * `provider`, `userName`, `clientSecret`, `clientId` and `refreshToken` elements + */ + public function __construct($options) + { + $this->provider = $options['provider']; + $this->oauthUserEmail = $options['userName']; + $this->oauthClientSecret = $options['clientSecret']; + $this->oauthClientId = $options['clientId']; + $this->oauthRefreshToken = $options['refreshToken']; + } + + /** + * Get a new RefreshToken. + * + * @return RefreshToken + */ + protected function getGrant() + { + return new RefreshToken(); + } + + /** + * Get a new AccessToken. + * + * @return AccessToken + */ + protected function getToken() + { + return $this->provider->getAccessToken( + $this->getGrant(), + ['refresh_token' => $this->oauthRefreshToken] + ); + } + + /** + * Generate a base64-encoded OAuth token. + * + * @return string + */ + public function getOauth64() + { + // Get a new token if it's not available or has expired + if (null === $this->oauthToken || $this->oauthToken->hasExpired()) { + $this->oauthToken = $this->getToken(); + } + + return base64_encode( + 'user=' . + $this->oauthUserEmail . + "\001auth=Bearer " . + $this->oauthToken . + "\001\001" + ); + } +} diff --git a/admin/lib/vendor/phpmailer/phpmailer/src/PHPMailer.php b/admin/lib/vendor/phpmailer/phpmailer/src/PHPMailer.php new file mode 100644 index 0000000..f9498b1 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/src/PHPMailer.php @@ -0,0 +1,4860 @@ + + * @author Jim Jagielski (jimjag) + * @author Andy Prevost (codeworxtech) + * @author Brent R. Matzelle (original founder) + * @copyright 2012 - 2020 Marcus Bointon + * @copyright 2010 - 2012 Jim Jagielski + * @copyright 2004 - 2009 Andy Prevost + * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @note This program is distributed in the hope that it will be useful - WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + */ + +namespace PHPMailer\PHPMailer; + +/** + * PHPMailer - PHP email creation and transport class. + * + * @author Marcus Bointon (Synchro/coolbru) + * @author Jim Jagielski (jimjag) + * @author Andy Prevost (codeworxtech) + * @author Brent R. Matzelle (original founder) + */ +class PHPMailer +{ + const CHARSET_ASCII = 'us-ascii'; + const CHARSET_ISO88591 = 'iso-8859-1'; + const CHARSET_UTF8 = 'utf-8'; + + const CONTENT_TYPE_PLAINTEXT = 'text/plain'; + const CONTENT_TYPE_TEXT_CALENDAR = 'text/calendar'; + const CONTENT_TYPE_TEXT_HTML = 'text/html'; + const CONTENT_TYPE_MULTIPART_ALTERNATIVE = 'multipart/alternative'; + const CONTENT_TYPE_MULTIPART_MIXED = 'multipart/mixed'; + const CONTENT_TYPE_MULTIPART_RELATED = 'multipart/related'; + + const ENCODING_7BIT = '7bit'; + const ENCODING_8BIT = '8bit'; + const ENCODING_BASE64 = 'base64'; + const ENCODING_BINARY = 'binary'; + const ENCODING_QUOTED_PRINTABLE = 'quoted-printable'; + + const ENCRYPTION_STARTTLS = 'tls'; + const ENCRYPTION_SMTPS = 'ssl'; + + const ICAL_METHOD_REQUEST = 'REQUEST'; + const ICAL_METHOD_PUBLISH = 'PUBLISH'; + const ICAL_METHOD_REPLY = 'REPLY'; + const ICAL_METHOD_ADD = 'ADD'; + const ICAL_METHOD_CANCEL = 'CANCEL'; + const ICAL_METHOD_REFRESH = 'REFRESH'; + const ICAL_METHOD_COUNTER = 'COUNTER'; + const ICAL_METHOD_DECLINECOUNTER = 'DECLINECOUNTER'; + + /** + * Email priority. + * Options: null (default), 1 = High, 3 = Normal, 5 = low. + * When null, the header is not set at all. + * + * @var int|null + */ + public $Priority; + + /** + * The character set of the message. + * + * @var string + */ + public $CharSet = self::CHARSET_ISO88591; + + /** + * The MIME Content-type of the message. + * + * @var string + */ + public $ContentType = self::CONTENT_TYPE_PLAINTEXT; + + /** + * The message encoding. + * Options: "8bit", "7bit", "binary", "base64", and "quoted-printable". + * + * @var string + */ + public $Encoding = self::ENCODING_8BIT; + + /** + * Holds the most recent mailer error message. + * + * @var string + */ + public $ErrorInfo = ''; + + /** + * The From email address for the message. + * + * @var string + */ + public $From = 'root@localhost'; + + /** + * The From name of the message. + * + * @var string + */ + public $FromName = 'Root User'; + + /** + * The envelope sender of the message. + * This will usually be turned into a Return-Path header by the receiver, + * and is the address that bounces will be sent to. + * If not empty, will be passed via `-f` to sendmail or as the 'MAIL FROM' value over SMTP. + * + * @var string + */ + public $Sender = ''; + + /** + * The Subject of the message. + * + * @var string + */ + public $Subject = ''; + + /** + * An HTML or plain text message body. + * If HTML then call isHTML(true). + * + * @var string + */ + public $Body = ''; + + /** + * The plain-text message body. + * This body can be read by mail clients that do not have HTML email + * capability such as mutt & Eudora. + * Clients that can read HTML will view the normal Body. + * + * @var string + */ + public $AltBody = ''; + + /** + * An iCal message part body. + * Only supported in simple alt or alt_inline message types + * To generate iCal event structures, use classes like EasyPeasyICS or iCalcreator. + * + * @see http://sprain.ch/blog/downloads/php-class-easypeasyics-create-ical-files-with-php/ + * @see http://kigkonsult.se/iCalcreator/ + * + * @var string + */ + public $Ical = ''; + + /** + * Value-array of "method" in Contenttype header "text/calendar" + * + * @var string[] + */ + protected static $IcalMethods = [ + self::ICAL_METHOD_REQUEST, + self::ICAL_METHOD_PUBLISH, + self::ICAL_METHOD_REPLY, + self::ICAL_METHOD_ADD, + self::ICAL_METHOD_CANCEL, + self::ICAL_METHOD_REFRESH, + self::ICAL_METHOD_COUNTER, + self::ICAL_METHOD_DECLINECOUNTER, + ]; + + /** + * The complete compiled MIME message body. + * + * @var string + */ + protected $MIMEBody = ''; + + /** + * The complete compiled MIME message headers. + * + * @var string + */ + protected $MIMEHeader = ''; + + /** + * Extra headers that createHeader() doesn't fold in. + * + * @var string + */ + protected $mailHeader = ''; + + /** + * Word-wrap the message body to this number of chars. + * Set to 0 to not wrap. A useful value here is 78, for RFC2822 section 2.1.1 compliance. + * + * @see static::STD_LINE_LENGTH + * + * @var int + */ + public $WordWrap = 0; + + /** + * Which method to use to send mail. + * Options: "mail", "sendmail", or "smtp". + * + * @var string + */ + public $Mailer = 'mail'; + + /** + * The path to the sendmail program. + * + * @var string + */ + public $Sendmail = '/usr/sbin/sendmail'; + + /** + * Whether mail() uses a fully sendmail-compatible MTA. + * One which supports sendmail's "-oi -f" options. + * + * @var bool + */ + public $UseSendmailOptions = true; + + /** + * The email address that a reading confirmation should be sent to, also known as read receipt. + * + * @var string + */ + public $ConfirmReadingTo = ''; + + /** + * The hostname to use in the Message-ID header and as default HELO string. + * If empty, PHPMailer attempts to find one with, in order, + * $_SERVER['SERVER_NAME'], gethostname(), php_uname('n'), or the value + * 'localhost.localdomain'. + * + * @see PHPMailer::$Helo + * + * @var string + */ + public $Hostname = ''; + + /** + * An ID to be used in the Message-ID header. + * If empty, a unique id will be generated. + * You can set your own, but it must be in the format "", + * as defined in RFC5322 section 3.6.4 or it will be ignored. + * + * @see https://tools.ietf.org/html/rfc5322#section-3.6.4 + * + * @var string + */ + public $MessageID = ''; + + /** + * The message Date to be used in the Date header. + * If empty, the current date will be added. + * + * @var string + */ + public $MessageDate = ''; + + /** + * SMTP hosts. + * Either a single hostname or multiple semicolon-delimited hostnames. + * You can also specify a different port + * for each host by using this format: [hostname:port] + * (e.g. "smtp1.example.com:25;smtp2.example.com"). + * You can also specify encryption type, for example: + * (e.g. "tls://smtp1.example.com:587;ssl://smtp2.example.com:465"). + * Hosts will be tried in order. + * + * @var string + */ + public $Host = 'localhost'; + + /** + * The default SMTP server port. + * + * @var int + */ + public $Port = 25; + + /** + * The SMTP HELO/EHLO name used for the SMTP connection. + * Default is $Hostname. If $Hostname is empty, PHPMailer attempts to find + * one with the same method described above for $Hostname. + * + * @see PHPMailer::$Hostname + * + * @var string + */ + public $Helo = ''; + + /** + * What kind of encryption to use on the SMTP connection. + * Options: '', static::ENCRYPTION_STARTTLS, or static::ENCRYPTION_SMTPS. + * + * @var string + */ + public $SMTPSecure = ''; + + /** + * Whether to enable TLS encryption automatically if a server supports it, + * even if `SMTPSecure` is not set to 'tls'. + * Be aware that in PHP >= 5.6 this requires that the server's certificates are valid. + * + * @var bool + */ + public $SMTPAutoTLS = true; + + /** + * Whether to use SMTP authentication. + * Uses the Username and Password properties. + * + * @see PHPMailer::$Username + * @see PHPMailer::$Password + * + * @var bool + */ + public $SMTPAuth = false; + + /** + * Options array passed to stream_context_create when connecting via SMTP. + * + * @var array + */ + public $SMTPOptions = []; + + /** + * SMTP username. + * + * @var string + */ + public $Username = ''; + + /** + * SMTP password. + * + * @var string + */ + public $Password = ''; + + /** + * SMTP auth type. + * Options are CRAM-MD5, LOGIN, PLAIN, XOAUTH2, attempted in that order if not specified. + * + * @var string + */ + public $AuthType = ''; + + /** + * An instance of the PHPMailer OAuth class. + * + * @var OAuth + */ + protected $oauth; + + /** + * The SMTP server timeout in seconds. + * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2. + * + * @var int + */ + public $Timeout = 300; + + /** + * Comma separated list of DSN notifications + * 'NEVER' under no circumstances a DSN must be returned to the sender. + * If you use NEVER all other notifications will be ignored. + * 'SUCCESS' will notify you when your mail has arrived at its destination. + * 'FAILURE' will arrive if an error occurred during delivery. + * 'DELAY' will notify you if there is an unusual delay in delivery, but the actual + * delivery's outcome (success or failure) is not yet decided. + * + * @see https://tools.ietf.org/html/rfc3461 See section 4.1 for more information about NOTIFY + */ + public $dsn = ''; + + /** + * SMTP class debug output mode. + * Debug output level. + * Options: + * * SMTP::DEBUG_OFF: No output + * * SMTP::DEBUG_CLIENT: Client messages + * * SMTP::DEBUG_SERVER: Client and server messages + * * SMTP::DEBUG_CONNECTION: As SERVER plus connection status + * * SMTP::DEBUG_LOWLEVEL: Noisy, low-level data output, rarely needed + * + * @see SMTP::$do_debug + * + * @var int + */ + public $SMTPDebug = 0; + + /** + * How to handle debug output. + * Options: + * * `echo` Output plain-text as-is, appropriate for CLI + * * `html` Output escaped, line breaks converted to `
`, appropriate for browser output + * * `error_log` Output to error log as configured in php.ini + * By default PHPMailer will use `echo` if run from a `cli` or `cli-server` SAPI, `html` otherwise. + * Alternatively, you can provide a callable expecting two params: a message string and the debug level: + * + * ```php + * $mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";}; + * ``` + * + * Alternatively, you can pass in an instance of a PSR-3 compatible logger, though only `debug` + * level output is used: + * + * ```php + * $mail->Debugoutput = new myPsr3Logger; + * ``` + * + * @see SMTP::$Debugoutput + * + * @var string|callable|\Psr\Log\LoggerInterface + */ + public $Debugoutput = 'echo'; + + /** + * Whether to keep SMTP connection open after each message. + * If this is set to true then to close the connection + * requires an explicit call to smtpClose(). + * + * @var bool + */ + public $SMTPKeepAlive = false; + + /** + * Whether to split multiple to addresses into multiple messages + * or send them all in one message. + * Only supported in `mail` and `sendmail` transports, not in SMTP. + * + * @var bool + * + * @deprecated 6.0.0 PHPMailer isn't a mailing list manager! + */ + public $SingleTo = false; + + /** + * Storage for addresses when SingleTo is enabled. + * + * @var array + */ + protected $SingleToArray = []; + + /** + * Whether to generate VERP addresses on send. + * Only applicable when sending via SMTP. + * + * @see https://en.wikipedia.org/wiki/Variable_envelope_return_path + * @see http://www.postfix.org/VERP_README.html Postfix VERP info + * + * @var bool + */ + public $do_verp = false; + + /** + * Whether to allow sending messages with an empty body. + * + * @var bool + */ + public $AllowEmpty = false; + + /** + * DKIM selector. + * + * @var string + */ + public $DKIM_selector = ''; + + /** + * DKIM Identity. + * Usually the email address used as the source of the email. + * + * @var string + */ + public $DKIM_identity = ''; + + /** + * DKIM passphrase. + * Used if your key is encrypted. + * + * @var string + */ + public $DKIM_passphrase = ''; + + /** + * DKIM signing domain name. + * + * @example 'example.com' + * + * @var string + */ + public $DKIM_domain = ''; + + /** + * DKIM Copy header field values for diagnostic use. + * + * @var bool + */ + public $DKIM_copyHeaderFields = true; + + /** + * DKIM Extra signing headers. + * + * @example ['List-Unsubscribe', 'List-Help'] + * + * @var array + */ + public $DKIM_extraHeaders = []; + + /** + * DKIM private key file path. + * + * @var string + */ + public $DKIM_private = ''; + + /** + * DKIM private key string. + * + * If set, takes precedence over `$DKIM_private`. + * + * @var string + */ + public $DKIM_private_string = ''; + + /** + * Callback Action function name. + * + * The function that handles the result of the send email action. + * It is called out by send() for each email sent. + * + * Value can be any php callable: http://www.php.net/is_callable + * + * Parameters: + * bool $result result of the send action + * array $to email addresses of the recipients + * array $cc cc email addresses + * array $bcc bcc email addresses + * string $subject the subject + * string $body the email body + * string $from email address of sender + * string $extra extra information of possible use + * "smtp_transaction_id' => last smtp transaction id + * + * @var string + */ + public $action_function = ''; + + /** + * What to put in the X-Mailer header. + * Options: An empty string for PHPMailer default, whitespace/null for none, or a string to use. + * + * @var string|null + */ + public $XMailer = ''; + + /** + * Which validator to use by default when validating email addresses. + * May be a callable to inject your own validator, but there are several built-in validators. + * The default validator uses PHP's FILTER_VALIDATE_EMAIL filter_var option. + * + * @see PHPMailer::validateAddress() + * + * @var string|callable + */ + public static $validator = 'php'; + + /** + * An instance of the SMTP sender class. + * + * @var SMTP + */ + protected $smtp; + + /** + * The array of 'to' names and addresses. + * + * @var array + */ + protected $to = []; + + /** + * The array of 'cc' names and addresses. + * + * @var array + */ + protected $cc = []; + + /** + * The array of 'bcc' names and addresses. + * + * @var array + */ + protected $bcc = []; + + /** + * The array of reply-to names and addresses. + * + * @var array + */ + protected $ReplyTo = []; + + /** + * An array of all kinds of addresses. + * Includes all of $to, $cc, $bcc. + * + * @see PHPMailer::$to + * @see PHPMailer::$cc + * @see PHPMailer::$bcc + * + * @var array + */ + protected $all_recipients = []; + + /** + * An array of names and addresses queued for validation. + * In send(), valid and non duplicate entries are moved to $all_recipients + * and one of $to, $cc, or $bcc. + * This array is used only for addresses with IDN. + * + * @see PHPMailer::$to + * @see PHPMailer::$cc + * @see PHPMailer::$bcc + * @see PHPMailer::$all_recipients + * + * @var array + */ + protected $RecipientsQueue = []; + + /** + * An array of reply-to names and addresses queued for validation. + * In send(), valid and non duplicate entries are moved to $ReplyTo. + * This array is used only for addresses with IDN. + * + * @see PHPMailer::$ReplyTo + * + * @var array + */ + protected $ReplyToQueue = []; + + /** + * The array of attachments. + * + * @var array + */ + protected $attachment = []; + + /** + * The array of custom headers. + * + * @var array + */ + protected $CustomHeader = []; + + /** + * The most recent Message-ID (including angular brackets). + * + * @var string + */ + protected $lastMessageID = ''; + + /** + * The message's MIME type. + * + * @var string + */ + protected $message_type = ''; + + /** + * The array of MIME boundary strings. + * + * @var array + */ + protected $boundary = []; + + /** + * The array of available languages. + * + * @var array + */ + protected $language = []; + + /** + * The number of errors encountered. + * + * @var int + */ + protected $error_count = 0; + + /** + * The S/MIME certificate file path. + * + * @var string + */ + protected $sign_cert_file = ''; + + /** + * The S/MIME key file path. + * + * @var string + */ + protected $sign_key_file = ''; + + /** + * The optional S/MIME extra certificates ("CA Chain") file path. + * + * @var string + */ + protected $sign_extracerts_file = ''; + + /** + * The S/MIME password for the key. + * Used only if the key is encrypted. + * + * @var string + */ + protected $sign_key_pass = ''; + + /** + * Whether to throw exceptions for errors. + * + * @var bool + */ + protected $exceptions = false; + + /** + * Unique ID used for message ID and boundaries. + * + * @var string + */ + protected $uniqueid = ''; + + /** + * The PHPMailer Version number. + * + * @var string + */ + const VERSION = '6.1.8'; + + /** + * Error severity: message only, continue processing. + * + * @var int + */ + const STOP_MESSAGE = 0; + + /** + * Error severity: message, likely ok to continue processing. + * + * @var int + */ + const STOP_CONTINUE = 1; + + /** + * Error severity: message, plus full stop, critical error reached. + * + * @var int + */ + const STOP_CRITICAL = 2; + + /** + * The SMTP standard CRLF line break. + * If you want to change line break format, change static::$LE, not this. + */ + const CRLF = "\r\n"; + + /** + * "Folding White Space" a white space string used for line folding. + */ + const FWS = ' '; + + /** + * SMTP RFC standard line ending; Carriage Return, Line Feed. + * + * @var string + */ + protected static $LE = self::CRLF; + + /** + * The maximum line length supported by mail(). + * + * Background: mail() will sometimes corrupt messages + * with headers headers longer than 65 chars, see #818. + * + * @var int + */ + const MAIL_MAX_LINE_LENGTH = 63; + + /** + * The maximum line length allowed by RFC 2822 section 2.1.1. + * + * @var int + */ + const MAX_LINE_LENGTH = 998; + + /** + * The lower maximum line length allowed by RFC 2822 section 2.1.1. + * This length does NOT include the line break + * 76 means that lines will be 77 or 78 chars depending on whether + * the line break format is LF or CRLF; both are valid. + * + * @var int + */ + const STD_LINE_LENGTH = 76; + + /** + * Constructor. + * + * @param bool $exceptions Should we throw external exceptions? + */ + public function __construct($exceptions = null) + { + if (null !== $exceptions) { + $this->exceptions = (bool) $exceptions; + } + //Pick an appropriate debug output format automatically + $this->Debugoutput = (strpos(PHP_SAPI, 'cli') !== false ? 'echo' : 'html'); + } + + /** + * Destructor. + */ + public function __destruct() + { + //Close any open SMTP connection nicely + $this->smtpClose(); + } + + /** + * Call mail() in a safe_mode-aware fashion. + * Also, unless sendmail_path points to sendmail (or something that + * claims to be sendmail), don't pass params (not a perfect fix, + * but it will do). + * + * @param string $to To + * @param string $subject Subject + * @param string $body Message Body + * @param string $header Additional Header(s) + * @param string|null $params Params + * + * @return bool + */ + private function mailPassthru($to, $subject, $body, $header, $params) + { + //Check overloading of mail function to avoid double-encoding + if (ini_get('mbstring.func_overload') & 1) { + $subject = $this->secureHeader($subject); + } else { + $subject = $this->encodeHeader($this->secureHeader($subject)); + } + //Calling mail() with null params breaks + if (!$this->UseSendmailOptions || null === $params) { + $result = @mail($to, $subject, $body, $header); + } else { + $result = @mail($to, $subject, $body, $header, $params); + } + + return $result; + } + + /** + * Output debugging info via user-defined method. + * Only generates output if SMTP debug output is enabled (@see SMTP::$do_debug). + * + * @see PHPMailer::$Debugoutput + * @see PHPMailer::$SMTPDebug + * + * @param string $str + */ + protected function edebug($str) + { + if ($this->SMTPDebug <= 0) { + return; + } + //Is this a PSR-3 logger? + if ($this->Debugoutput instanceof \Psr\Log\LoggerInterface) { + $this->Debugoutput->debug($str); + + return; + } + //Avoid clash with built-in function names + if (is_callable($this->Debugoutput) && !in_array($this->Debugoutput, ['error_log', 'html', 'echo'])) { + call_user_func($this->Debugoutput, $str, $this->SMTPDebug); + + return; + } + switch ($this->Debugoutput) { + case 'error_log': + //Don't output, just log + /** @noinspection ForgottenDebugOutputInspection */ + error_log($str); + break; + case 'html': + //Cleans up output a bit for a better looking, HTML-safe output + echo htmlentities( + preg_replace('/[\r\n]+/', '', $str), + ENT_QUOTES, + 'UTF-8' + ), "
\n"; + break; + case 'echo': + default: + //Normalize line breaks + $str = preg_replace('/\r\n|\r/m', "\n", $str); + echo gmdate('Y-m-d H:i:s'), + "\t", + //Trim trailing space + trim( + //Indent for readability, except for trailing break + str_replace( + "\n", + "\n \t ", + trim($str) + ) + ), + "\n"; + } + } + + /** + * Sets message type to HTML or plain. + * + * @param bool $isHtml True for HTML mode + */ + public function isHTML($isHtml = true) + { + if ($isHtml) { + $this->ContentType = static::CONTENT_TYPE_TEXT_HTML; + } else { + $this->ContentType = static::CONTENT_TYPE_PLAINTEXT; + } + } + + /** + * Send messages using SMTP. + */ + public function isSMTP() + { + $this->Mailer = 'smtp'; + } + + /** + * Send messages using PHP's mail() function. + */ + public function isMail() + { + $this->Mailer = 'mail'; + } + + /** + * Send messages using $Sendmail. + */ + public function isSendmail() + { + $ini_sendmail_path = ini_get('sendmail_path'); + + if (false === stripos($ini_sendmail_path, 'sendmail')) { + $this->Sendmail = '/usr/sbin/sendmail'; + } else { + $this->Sendmail = $ini_sendmail_path; + } + $this->Mailer = 'sendmail'; + } + + /** + * Send messages using qmail. + */ + public function isQmail() + { + $ini_sendmail_path = ini_get('sendmail_path'); + + if (false === stripos($ini_sendmail_path, 'qmail')) { + $this->Sendmail = '/var/qmail/bin/qmail-inject'; + } else { + $this->Sendmail = $ini_sendmail_path; + } + $this->Mailer = 'qmail'; + } + + /** + * Add a "To" address. + * + * @param string $address The email address to send to + * @param string $name + * + * @throws Exception + * + * @return bool true on success, false if address already used or invalid in some way + */ + public function addAddress($address, $name = '') + { + return $this->addOrEnqueueAnAddress('to', $address, $name); + } + + /** + * Add a "CC" address. + * + * @param string $address The email address to send to + * @param string $name + * + * @throws Exception + * + * @return bool true on success, false if address already used or invalid in some way + */ + public function addCC($address, $name = '') + { + return $this->addOrEnqueueAnAddress('cc', $address, $name); + } + + /** + * Add a "BCC" address. + * + * @param string $address The email address to send to + * @param string $name + * + * @throws Exception + * + * @return bool true on success, false if address already used or invalid in some way + */ + public function addBCC($address, $name = '') + { + return $this->addOrEnqueueAnAddress('bcc', $address, $name); + } + + /** + * Add a "Reply-To" address. + * + * @param string $address The email address to reply to + * @param string $name + * + * @throws Exception + * + * @return bool true on success, false if address already used or invalid in some way + */ + public function addReplyTo($address, $name = '') + { + return $this->addOrEnqueueAnAddress('Reply-To', $address, $name); + } + + /** + * Add an address to one of the recipient arrays or to the ReplyTo array. Because PHPMailer + * can't validate addresses with an IDN without knowing the PHPMailer::$CharSet (that can still + * be modified after calling this function), addition of such addresses is delayed until send(). + * Addresses that have been added already return false, but do not throw exceptions. + * + * @param string $kind One of 'to', 'cc', 'bcc', or 'ReplyTo' + * @param string $address The email address to send, resp. to reply to + * @param string $name + * + * @throws Exception + * + * @return bool true on success, false if address already used or invalid in some way + */ + protected function addOrEnqueueAnAddress($kind, $address, $name) + { + $address = trim($address); + $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim + $pos = strrpos($address, '@'); + if (false === $pos) { + // At-sign is missing. + $error_message = sprintf( + '%s (%s): %s', + $this->lang('invalid_address'), + $kind, + $address + ); + $this->setError($error_message); + $this->edebug($error_message); + if ($this->exceptions) { + throw new Exception($error_message); + } + + return false; + } + $params = [$kind, $address, $name]; + // Enqueue addresses with IDN until we know the PHPMailer::$CharSet. + if (static::idnSupported() && $this->has8bitChars(substr($address, ++$pos))) { + if ('Reply-To' !== $kind) { + if (!array_key_exists($address, $this->RecipientsQueue)) { + $this->RecipientsQueue[$address] = $params; + + return true; + } + } elseif (!array_key_exists($address, $this->ReplyToQueue)) { + $this->ReplyToQueue[$address] = $params; + + return true; + } + + return false; + } + + // Immediately add standard addresses without IDN. + return call_user_func_array([$this, 'addAnAddress'], $params); + } + + /** + * Add an address to one of the recipient arrays or to the ReplyTo array. + * Addresses that have been added already return false, but do not throw exceptions. + * + * @param string $kind One of 'to', 'cc', 'bcc', or 'ReplyTo' + * @param string $address The email address to send, resp. to reply to + * @param string $name + * + * @throws Exception + * + * @return bool true on success, false if address already used or invalid in some way + */ + protected function addAnAddress($kind, $address, $name = '') + { + if (!in_array($kind, ['to', 'cc', 'bcc', 'Reply-To'])) { + $error_message = sprintf( + '%s: %s', + $this->lang('Invalid recipient kind'), + $kind + ); + $this->setError($error_message); + $this->edebug($error_message); + if ($this->exceptions) { + throw new Exception($error_message); + } + + return false; + } + if (!static::validateAddress($address)) { + $error_message = sprintf( + '%s (%s): %s', + $this->lang('invalid_address'), + $kind, + $address + ); + $this->setError($error_message); + $this->edebug($error_message); + if ($this->exceptions) { + throw new Exception($error_message); + } + + return false; + } + if ('Reply-To' !== $kind) { + if (!array_key_exists(strtolower($address), $this->all_recipients)) { + $this->{$kind}[] = [$address, $name]; + $this->all_recipients[strtolower($address)] = true; + + return true; + } + } elseif (!array_key_exists(strtolower($address), $this->ReplyTo)) { + $this->ReplyTo[strtolower($address)] = [$address, $name]; + + return true; + } + + return false; + } + + /** + * Parse and validate a string containing one or more RFC822-style comma-separated email addresses + * of the form "display name
" into an array of name/address pairs. + * Uses the imap_rfc822_parse_adrlist function if the IMAP extension is available. + * Note that quotes in the name part are removed. + * + * @see http://www.andrew.cmu.edu/user/agreen1/testing/mrbs/web/Mail/RFC822.php A more careful implementation + * + * @param string $addrstr The address list string + * @param bool $useimap Whether to use the IMAP extension to parse the list + * + * @return array + */ + public static function parseAddresses($addrstr, $useimap = true) + { + $addresses = []; + if ($useimap && function_exists('imap_rfc822_parse_adrlist')) { + //Use this built-in parser if it's available + $list = imap_rfc822_parse_adrlist($addrstr, ''); + foreach ($list as $address) { + if (('.SYNTAX-ERROR.' !== $address->host) && static::validateAddress( + $address->mailbox . '@' . $address->host + )) { + $addresses[] = [ + 'name' => (property_exists($address, 'personal') ? $address->personal : ''), + 'address' => $address->mailbox . '@' . $address->host, + ]; + } + } + } else { + //Use this simpler parser + $list = explode(',', $addrstr); + foreach ($list as $address) { + $address = trim($address); + //Is there a separate name part? + if (strpos($address, '<') === false) { + //No separate name, just use the whole thing + if (static::validateAddress($address)) { + $addresses[] = [ + 'name' => '', + 'address' => $address, + ]; + } + } else { + list($name, $email) = explode('<', $address); + $email = trim(str_replace('>', '', $email)); + if (static::validateAddress($email)) { + $addresses[] = [ + 'name' => trim(str_replace(['"', "'"], '', $name)), + 'address' => $email, + ]; + } + } + } + } + + return $addresses; + } + + /** + * Set the From and FromName properties. + * + * @param string $address + * @param string $name + * @param bool $auto Whether to also set the Sender address, defaults to true + * + * @throws Exception + * + * @return bool + */ + public function setFrom($address, $name = '', $auto = true) + { + $address = trim($address); + $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim + // Don't validate now addresses with IDN. Will be done in send(). + $pos = strrpos($address, '@'); + if ((false === $pos) + || ((!$this->has8bitChars(substr($address, ++$pos)) || !static::idnSupported()) + && !static::validateAddress($address)) + ) { + $error_message = sprintf( + '%s (From): %s', + $this->lang('invalid_address'), + $address + ); + $this->setError($error_message); + $this->edebug($error_message); + if ($this->exceptions) { + throw new Exception($error_message); + } + + return false; + } + $this->From = $address; + $this->FromName = $name; + if ($auto && empty($this->Sender)) { + $this->Sender = $address; + } + + return true; + } + + /** + * Return the Message-ID header of the last email. + * Technically this is the value from the last time the headers were created, + * but it's also the message ID of the last sent message except in + * pathological cases. + * + * @return string + */ + public function getLastMessageID() + { + return $this->lastMessageID; + } + + /** + * Check that a string looks like an email address. + * Validation patterns supported: + * * `auto` Pick best pattern automatically; + * * `pcre8` Use the squiloople.com pattern, requires PCRE > 8.0; + * * `pcre` Use old PCRE implementation; + * * `php` Use PHP built-in FILTER_VALIDATE_EMAIL; + * * `html5` Use the pattern given by the HTML5 spec for 'email' type form input elements. + * * `noregex` Don't use a regex: super fast, really dumb. + * Alternatively you may pass in a callable to inject your own validator, for example: + * + * ```php + * PHPMailer::validateAddress('user@example.com', function($address) { + * return (strpos($address, '@') !== false); + * }); + * ``` + * + * You can also set the PHPMailer::$validator static to a callable, allowing built-in methods to use your validator. + * + * @param string $address The email address to check + * @param string|callable $patternselect Which pattern to use + * + * @return bool + */ + public static function validateAddress($address, $patternselect = null) + { + if (null === $patternselect) { + $patternselect = static::$validator; + } + if (is_callable($patternselect)) { + return call_user_func($patternselect, $address); + } + //Reject line breaks in addresses; it's valid RFC5322, but not RFC5321 + if (strpos($address, "\n") !== false || strpos($address, "\r") !== false) { + return false; + } + switch ($patternselect) { + case 'pcre': //Kept for BC + case 'pcre8': + /* + * A more complex and more permissive version of the RFC5322 regex on which FILTER_VALIDATE_EMAIL + * is based. + * In addition to the addresses allowed by filter_var, also permits: + * * dotless domains: `a@b` + * * comments: `1234 @ local(blah) .machine .example` + * * quoted elements: `'"test blah"@example.org'` + * * numeric TLDs: `a@b.123` + * * unbracketed IPv4 literals: `a@192.168.0.1` + * * IPv6 literals: 'first.last@[IPv6:a1::]' + * Not all of these will necessarily work for sending! + * + * @see http://squiloople.com/2009/12/20/email-address-validation/ + * @copyright 2009-2010 Michael Rushton + * Feel free to use and redistribute this code. But please keep this copyright notice. + */ + return (bool) preg_match( + '/^(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){255,})(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){65,}@)' . + '((?>(?>(?>((?>(?>(?>\x0D\x0A)?[\t ])+|(?>[\t ]*\x0D\x0A)?[\t ]+)?)(\((?>(?2)' . + '(?>[\x01-\x08\x0B\x0C\x0E-\'*-\[\]-\x7F]|\\\[\x00-\x7F]|(?3)))*(?2)\)))+(?2))|(?2))?)' . + '([!#-\'*+\/-9=?^-~-]+|"(?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\x7F]))*' . + '(?2)")(?>(?1)\.(?1)(?4))*(?1)@(?!(?1)[a-z0-9-]{64,})(?1)(?>([a-z0-9](?>[a-z0-9-]*[a-z0-9])?)' . + '(?>(?1)\.(?!(?1)[a-z0-9-]{64,})(?1)(?5)){0,126}|\[(?:(?>IPv6:(?>([a-f0-9]{1,4})(?>:(?6)){7}' . + '|(?!(?:.*[a-f0-9][:\]]){8,})((?6)(?>:(?6)){0,6})?::(?7)?))|(?>(?>IPv6:(?>(?6)(?>:(?6)){5}:' . + '|(?!(?:.*[a-f0-9]:){6,})(?8)?::(?>((?6)(?>:(?6)){0,4}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}' . + '|[1-9]?[0-9])(?>\.(?9)){3}))\])(?1)$/isD', + $address + ); + case 'html5': + /* + * This is the pattern used in the HTML5 spec for validation of 'email' type form input elements. + * + * @see https://html.spec.whatwg.org/#e-mail-state-(type=email) + */ + return (bool) preg_match( + '/^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}' . + '[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/sD', + $address + ); + case 'php': + default: + return filter_var($address, FILTER_VALIDATE_EMAIL) !== false; + } + } + + /** + * Tells whether IDNs (Internationalized Domain Names) are supported or not. This requires the + * `intl` and `mbstring` PHP extensions. + * + * @return bool `true` if required functions for IDN support are present + */ + public static function idnSupported() + { + return function_exists('idn_to_ascii') && function_exists('mb_convert_encoding'); + } + + /** + * Converts IDN in given email address to its ASCII form, also known as punycode, if possible. + * Important: Address must be passed in same encoding as currently set in PHPMailer::$CharSet. + * This function silently returns unmodified address if: + * - No conversion is necessary (i.e. domain name is not an IDN, or is already in ASCII form) + * - Conversion to punycode is impossible (e.g. required PHP functions are not available) + * or fails for any reason (e.g. domain contains characters not allowed in an IDN). + * + * @see PHPMailer::$CharSet + * + * @param string $address The email address to convert + * + * @return string The encoded address in ASCII form + */ + public function punyencodeAddress($address) + { + // Verify we have required functions, CharSet, and at-sign. + $pos = strrpos($address, '@'); + if (!empty($this->CharSet) && + false !== $pos && + static::idnSupported() + ) { + $domain = substr($address, ++$pos); + // Verify CharSet string is a valid one, and domain properly encoded in this CharSet. + if ($this->has8bitChars($domain) && @mb_check_encoding($domain, $this->CharSet)) { + $domain = mb_convert_encoding($domain, 'UTF-8', $this->CharSet); + //Ignore IDE complaints about this line - method signature changed in PHP 5.4 + $errorcode = 0; + if (defined('INTL_IDNA_VARIANT_UTS46')) { + $punycode = idn_to_ascii($domain, $errorcode, INTL_IDNA_VARIANT_UTS46); + } elseif (defined('INTL_IDNA_VARIANT_2003')) { + $punycode = idn_to_ascii($domain, $errorcode, INTL_IDNA_VARIANT_2003); + } else { + $punycode = idn_to_ascii($domain, $errorcode); + } + if (false !== $punycode) { + return substr($address, 0, $pos) . $punycode; + } + } + } + + return $address; + } + + /** + * Create a message and send it. + * Uses the sending method specified by $Mailer. + * + * @throws Exception + * + * @return bool false on error - See the ErrorInfo property for details of the error + */ + public function send() + { + try { + if (!$this->preSend()) { + return false; + } + + return $this->postSend(); + } catch (Exception $exc) { + $this->mailHeader = ''; + $this->setError($exc->getMessage()); + if ($this->exceptions) { + throw $exc; + } + + return false; + } + } + + /** + * Prepare a message for sending. + * + * @throws Exception + * + * @return bool + */ + public function preSend() + { + if ('smtp' === $this->Mailer + || ('mail' === $this->Mailer && stripos(PHP_OS, 'WIN') === 0) + ) { + //SMTP mandates RFC-compliant line endings + //and it's also used with mail() on Windows + static::setLE(self::CRLF); + } else { + //Maintain backward compatibility with legacy Linux command line mailers + static::setLE(PHP_EOL); + } + //Check for buggy PHP versions that add a header with an incorrect line break + if ('mail' === $this->Mailer + && ((PHP_VERSION_ID >= 70000 && PHP_VERSION_ID < 70017) + || (PHP_VERSION_ID >= 70100 && PHP_VERSION_ID < 70103)) + && ini_get('mail.add_x_header') === '1' + && stripos(PHP_OS, 'WIN') === 0 + ) { + trigger_error( + 'Your version of PHP is affected by a bug that may result in corrupted messages.' . + ' To fix it, switch to sending using SMTP, disable the mail.add_x_header option in' . + ' your php.ini, switch to MacOS or Linux, or upgrade your PHP to version 7.0.17+ or 7.1.3+.', + E_USER_WARNING + ); + } + + try { + $this->error_count = 0; // Reset errors + $this->mailHeader = ''; + + // Dequeue recipient and Reply-To addresses with IDN + foreach (array_merge($this->RecipientsQueue, $this->ReplyToQueue) as $params) { + $params[1] = $this->punyencodeAddress($params[1]); + call_user_func_array([$this, 'addAnAddress'], $params); + } + if (count($this->to) + count($this->cc) + count($this->bcc) < 1) { + throw new Exception($this->lang('provide_address'), self::STOP_CRITICAL); + } + + // Validate From, Sender, and ConfirmReadingTo addresses + foreach (['From', 'Sender', 'ConfirmReadingTo'] as $address_kind) { + $this->$address_kind = trim($this->$address_kind); + if (empty($this->$address_kind)) { + continue; + } + $this->$address_kind = $this->punyencodeAddress($this->$address_kind); + if (!static::validateAddress($this->$address_kind)) { + $error_message = sprintf( + '%s (%s): %s', + $this->lang('invalid_address'), + $address_kind, + $this->$address_kind + ); + $this->setError($error_message); + $this->edebug($error_message); + if ($this->exceptions) { + throw new Exception($error_message); + } + + return false; + } + } + + // Set whether the message is multipart/alternative + if ($this->alternativeExists()) { + $this->ContentType = static::CONTENT_TYPE_MULTIPART_ALTERNATIVE; + } + + $this->setMessageType(); + // Refuse to send an empty message unless we are specifically allowing it + if (!$this->AllowEmpty && empty($this->Body)) { + throw new Exception($this->lang('empty_message'), self::STOP_CRITICAL); + } + + //Trim subject consistently + $this->Subject = trim($this->Subject); + // Create body before headers in case body makes changes to headers (e.g. altering transfer encoding) + $this->MIMEHeader = ''; + $this->MIMEBody = $this->createBody(); + // createBody may have added some headers, so retain them + $tempheaders = $this->MIMEHeader; + $this->MIMEHeader = $this->createHeader(); + $this->MIMEHeader .= $tempheaders; + + // To capture the complete message when using mail(), create + // an extra header list which createHeader() doesn't fold in + if ('mail' === $this->Mailer) { + if (count($this->to) > 0) { + $this->mailHeader .= $this->addrAppend('To', $this->to); + } else { + $this->mailHeader .= $this->headerLine('To', 'undisclosed-recipients:;'); + } + $this->mailHeader .= $this->headerLine( + 'Subject', + $this->encodeHeader($this->secureHeader($this->Subject)) + ); + } + + // Sign with DKIM if enabled + if (!empty($this->DKIM_domain) + && !empty($this->DKIM_selector) + && (!empty($this->DKIM_private_string) + || (!empty($this->DKIM_private) + && static::isPermittedPath($this->DKIM_private) + && file_exists($this->DKIM_private) + ) + ) + ) { + $header_dkim = $this->DKIM_Add( + $this->MIMEHeader . $this->mailHeader, + $this->encodeHeader($this->secureHeader($this->Subject)), + $this->MIMEBody + ); + $this->MIMEHeader = static::stripTrailingWSP($this->MIMEHeader) . static::$LE . + static::normalizeBreaks($header_dkim) . static::$LE; + } + + return true; + } catch (Exception $exc) { + $this->setError($exc->getMessage()); + if ($this->exceptions) { + throw $exc; + } + + return false; + } + } + + /** + * Actually send a message via the selected mechanism. + * + * @throws Exception + * + * @return bool + */ + public function postSend() + { + try { + // Choose the mailer and send through it + switch ($this->Mailer) { + case 'sendmail': + case 'qmail': + return $this->sendmailSend($this->MIMEHeader, $this->MIMEBody); + case 'smtp': + return $this->smtpSend($this->MIMEHeader, $this->MIMEBody); + case 'mail': + return $this->mailSend($this->MIMEHeader, $this->MIMEBody); + default: + $sendMethod = $this->Mailer . 'Send'; + if (method_exists($this, $sendMethod)) { + return $this->$sendMethod($this->MIMEHeader, $this->MIMEBody); + } + + return $this->mailSend($this->MIMEHeader, $this->MIMEBody); + } + } catch (Exception $exc) { + if ($this->Mailer === 'smtp' && $this->SMTPKeepAlive == true) { + $this->smtp->reset(); + } + $this->setError($exc->getMessage()); + $this->edebug($exc->getMessage()); + if ($this->exceptions) { + throw $exc; + } + } + + return false; + } + + /** + * Send mail using the $Sendmail program. + * + * @see PHPMailer::$Sendmail + * + * @param string $header The message headers + * @param string $body The message body + * + * @throws Exception + * + * @return bool + */ + protected function sendmailSend($header, $body) + { + $header = static::stripTrailingWSP($header) . static::$LE . static::$LE; + + // CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped. + if (!empty($this->Sender) && self::isShellSafe($this->Sender)) { + if ('qmail' === $this->Mailer) { + $sendmailFmt = '%s -f%s'; + } else { + $sendmailFmt = '%s -oi -f%s -t'; + } + } elseif ('qmail' === $this->Mailer) { + $sendmailFmt = '%s'; + } else { + $sendmailFmt = '%s -oi -t'; + } + + $sendmail = sprintf($sendmailFmt, escapeshellcmd($this->Sendmail), $this->Sender); + + if ($this->SingleTo) { + foreach ($this->SingleToArray as $toAddr) { + $mail = @popen($sendmail, 'w'); + if (!$mail) { + throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); + } + fwrite($mail, 'To: ' . $toAddr . "\n"); + fwrite($mail, $header); + fwrite($mail, $body); + $result = pclose($mail); + $this->doCallback( + ($result === 0), + [$toAddr], + $this->cc, + $this->bcc, + $this->Subject, + $body, + $this->From, + [] + ); + if (0 !== $result) { + throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); + } + } + } else { + $mail = @popen($sendmail, 'w'); + if (!$mail) { + throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); + } + fwrite($mail, $header); + fwrite($mail, $body); + $result = pclose($mail); + $this->doCallback( + ($result === 0), + $this->to, + $this->cc, + $this->bcc, + $this->Subject, + $body, + $this->From, + [] + ); + if (0 !== $result) { + throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); + } + } + + return true; + } + + /** + * Fix CVE-2016-10033 and CVE-2016-10045 by disallowing potentially unsafe shell characters. + * Note that escapeshellarg and escapeshellcmd are inadequate for our purposes, especially on Windows. + * + * @see https://github.com/PHPMailer/PHPMailer/issues/924 CVE-2016-10045 bug report + * + * @param string $string The string to be validated + * + * @return bool + */ + protected static function isShellSafe($string) + { + // Future-proof + if (escapeshellcmd($string) !== $string + || !in_array(escapeshellarg($string), ["'$string'", "\"$string\""]) + ) { + return false; + } + + $length = strlen($string); + + for ($i = 0; $i < $length; ++$i) { + $c = $string[$i]; + + // All other characters have a special meaning in at least one common shell, including = and +. + // Full stop (.) has a special meaning in cmd.exe, but its impact should be negligible here. + // Note that this does permit non-Latin alphanumeric characters based on the current locale. + if (!ctype_alnum($c) && strpos('@_-.', $c) === false) { + return false; + } + } + + return true; + } + + /** + * Check whether a file path is of a permitted type. + * Used to reject URLs and phar files from functions that access local file paths, + * such as addAttachment. + * + * @param string $path A relative or absolute path to a file + * + * @return bool + */ + protected static function isPermittedPath($path) + { + return !preg_match('#^[a-z]+://#i', $path); + } + + /** + * Check whether a file path is safe, accessible, and readable. + * + * @param string $path A relative or absolute path to a file + * + * @return bool + */ + protected static function fileIsAccessible($path) + { + $readable = file_exists($path); + //If not a UNC path (expected to start with \\), check read permission, see #2069 + if (strpos($path, '\\\\') !== 0) { + $readable = $readable && is_readable($path); + } + return static::isPermittedPath($path) && $readable; + } + + /** + * Send mail using the PHP mail() function. + * + * @see http://www.php.net/manual/en/book.mail.php + * + * @param string $header The message headers + * @param string $body The message body + * + * @throws Exception + * + * @return bool + */ + protected function mailSend($header, $body) + { + $header = static::stripTrailingWSP($header) . static::$LE . static::$LE; + + $toArr = []; + foreach ($this->to as $toaddr) { + $toArr[] = $this->addrFormat($toaddr); + } + $to = implode(', ', $toArr); + + $params = null; + //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver + //A space after `-f` is optional, but there is a long history of its presence + //causing problems, so we don't use one + //Exim docs: http://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html + //Sendmail docs: http://www.sendmail.org/~ca/email/man/sendmail.html + //Qmail docs: http://www.qmail.org/man/man8/qmail-inject.html + //Example problem: https://www.drupal.org/node/1057954 + // CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped. + if (!empty($this->Sender) && static::validateAddress($this->Sender) && self::isShellSafe($this->Sender)) { + $params = sprintf('-f%s', $this->Sender); + } + if (!empty($this->Sender) && static::validateAddress($this->Sender)) { + $old_from = ini_get('sendmail_from'); + ini_set('sendmail_from', $this->Sender); + } + $result = false; + if ($this->SingleTo && count($toArr) > 1) { + foreach ($toArr as $toAddr) { + $result = $this->mailPassthru($toAddr, $this->Subject, $body, $header, $params); + $this->doCallback($result, [$toAddr], $this->cc, $this->bcc, $this->Subject, $body, $this->From, []); + } + } else { + $result = $this->mailPassthru($to, $this->Subject, $body, $header, $params); + $this->doCallback($result, $this->to, $this->cc, $this->bcc, $this->Subject, $body, $this->From, []); + } + if (isset($old_from)) { + ini_set('sendmail_from', $old_from); + } + if (!$result) { + throw new Exception($this->lang('instantiate'), self::STOP_CRITICAL); + } + + return true; + } + + /** + * Get an instance to use for SMTP operations. + * Override this function to load your own SMTP implementation, + * or set one with setSMTPInstance. + * + * @return SMTP + */ + public function getSMTPInstance() + { + if (!is_object($this->smtp)) { + $this->smtp = new SMTP(); + } + + return $this->smtp; + } + + /** + * Provide an instance to use for SMTP operations. + * + * @return SMTP + */ + public function setSMTPInstance(SMTP $smtp) + { + $this->smtp = $smtp; + + return $this->smtp; + } + + /** + * Send mail via SMTP. + * Returns false if there is a bad MAIL FROM, RCPT, or DATA input. + * + * @see PHPMailer::setSMTPInstance() to use a different class. + * + * @uses \PHPMailer\PHPMailer\SMTP + * + * @param string $header The message headers + * @param string $body The message body + * + * @throws Exception + * + * @return bool + */ + protected function smtpSend($header, $body) + { + $header = static::stripTrailingWSP($header) . static::$LE . static::$LE; + $bad_rcpt = []; + if (!$this->smtpConnect($this->SMTPOptions)) { + throw new Exception($this->lang('smtp_connect_failed'), self::STOP_CRITICAL); + } + //Sender already validated in preSend() + if ('' === $this->Sender) { + $smtp_from = $this->From; + } else { + $smtp_from = $this->Sender; + } + if (!$this->smtp->mail($smtp_from)) { + $this->setError($this->lang('from_failed') . $smtp_from . ' : ' . implode(',', $this->smtp->getError())); + throw new Exception($this->ErrorInfo, self::STOP_CRITICAL); + } + + $callbacks = []; + // Attempt to send to all recipients + foreach ([$this->to, $this->cc, $this->bcc] as $togroup) { + foreach ($togroup as $to) { + if (!$this->smtp->recipient($to[0], $this->dsn)) { + $error = $this->smtp->getError(); + $bad_rcpt[] = ['to' => $to[0], 'error' => $error['detail']]; + $isSent = false; + } else { + $isSent = true; + } + + $callbacks[] = ['issent'=>$isSent, 'to'=>$to[0]]; + } + } + + // Only send the DATA command if we have viable recipients + if ((count($this->all_recipients) > count($bad_rcpt)) && !$this->smtp->data($header . $body)) { + throw new Exception($this->lang('data_not_accepted'), self::STOP_CRITICAL); + } + + $smtp_transaction_id = $this->smtp->getLastTransactionID(); + + if ($this->SMTPKeepAlive) { + $this->smtp->reset(); + } else { + $this->smtp->quit(); + $this->smtp->close(); + } + + foreach ($callbacks as $cb) { + $this->doCallback( + $cb['issent'], + [$cb['to']], + [], + [], + $this->Subject, + $body, + $this->From, + ['smtp_transaction_id' => $smtp_transaction_id] + ); + } + + //Create error message for any bad addresses + if (count($bad_rcpt) > 0) { + $errstr = ''; + foreach ($bad_rcpt as $bad) { + $errstr .= $bad['to'] . ': ' . $bad['error']; + } + throw new Exception($this->lang('recipients_failed') . $errstr, self::STOP_CONTINUE); + } + + return true; + } + + /** + * Initiate a connection to an SMTP server. + * Returns false if the operation failed. + * + * @param array $options An array of options compatible with stream_context_create() + * + * @throws Exception + * + * @uses \PHPMailer\PHPMailer\SMTP + * + * @return bool + */ + public function smtpConnect($options = null) + { + if (null === $this->smtp) { + $this->smtp = $this->getSMTPInstance(); + } + + //If no options are provided, use whatever is set in the instance + if (null === $options) { + $options = $this->SMTPOptions; + } + + // Already connected? + if ($this->smtp->connected()) { + return true; + } + + $this->smtp->setTimeout($this->Timeout); + $this->smtp->setDebugLevel($this->SMTPDebug); + $this->smtp->setDebugOutput($this->Debugoutput); + $this->smtp->setVerp($this->do_verp); + $hosts = explode(';', $this->Host); + $lastexception = null; + + foreach ($hosts as $hostentry) { + $hostinfo = []; + if (!preg_match( + '/^(?:(ssl|tls):\/\/)?(.+?)(?::(\d+))?$/', + trim($hostentry), + $hostinfo + )) { + $this->edebug($this->lang('invalid_hostentry') . ' ' . trim($hostentry)); + // Not a valid host entry + continue; + } + // $hostinfo[1]: optional ssl or tls prefix + // $hostinfo[2]: the hostname + // $hostinfo[3]: optional port number + // The host string prefix can temporarily override the current setting for SMTPSecure + // If it's not specified, the default value is used + + //Check the host name is a valid name or IP address before trying to use it + if (!static::isValidHost($hostinfo[2])) { + $this->edebug($this->lang('invalid_host') . ' ' . $hostinfo[2]); + continue; + } + $prefix = ''; + $secure = $this->SMTPSecure; + $tls = (static::ENCRYPTION_STARTTLS === $this->SMTPSecure); + if ('ssl' === $hostinfo[1] || ('' === $hostinfo[1] && static::ENCRYPTION_SMTPS === $this->SMTPSecure)) { + $prefix = 'ssl://'; + $tls = false; // Can't have SSL and TLS at the same time + $secure = static::ENCRYPTION_SMTPS; + } elseif ('tls' === $hostinfo[1]) { + $tls = true; + // tls doesn't use a prefix + $secure = static::ENCRYPTION_STARTTLS; + } + //Do we need the OpenSSL extension? + $sslext = defined('OPENSSL_ALGO_SHA256'); + if (static::ENCRYPTION_STARTTLS === $secure || static::ENCRYPTION_SMTPS === $secure) { + //Check for an OpenSSL constant rather than using extension_loaded, which is sometimes disabled + if (!$sslext) { + throw new Exception($this->lang('extension_missing') . 'openssl', self::STOP_CRITICAL); + } + } + $host = $hostinfo[2]; + $port = $this->Port; + if ( + array_key_exists(3, $hostinfo) && + is_numeric($hostinfo[3]) && + $hostinfo[3] > 0 && + $hostinfo[3] < 65536 + ) { + $port = (int) $hostinfo[3]; + } + if ($this->smtp->connect($prefix . $host, $port, $this->Timeout, $options)) { + try { + if ($this->Helo) { + $hello = $this->Helo; + } else { + $hello = $this->serverHostname(); + } + $this->smtp->hello($hello); + //Automatically enable TLS encryption if: + // * it's not disabled + // * we have openssl extension + // * we are not already using SSL + // * the server offers STARTTLS + if ($this->SMTPAutoTLS && $sslext && 'ssl' !== $secure && $this->smtp->getServerExt('STARTTLS')) { + $tls = true; + } + if ($tls) { + if (!$this->smtp->startTLS()) { + throw new Exception($this->lang('connect_host')); + } + // We must resend EHLO after TLS negotiation + $this->smtp->hello($hello); + } + if ($this->SMTPAuth && !$this->smtp->authenticate( + $this->Username, + $this->Password, + $this->AuthType, + $this->oauth + )) { + throw new Exception($this->lang('authenticate')); + } + + return true; + } catch (Exception $exc) { + $lastexception = $exc; + $this->edebug($exc->getMessage()); + // We must have connected, but then failed TLS or Auth, so close connection nicely + $this->smtp->quit(); + } + } + } + // If we get here, all connection attempts have failed, so close connection hard + $this->smtp->close(); + // As we've caught all exceptions, just report whatever the last one was + if ($this->exceptions && null !== $lastexception) { + throw $lastexception; + } + + return false; + } + + /** + * Close the active SMTP session if one exists. + */ + public function smtpClose() + { + if ((null !== $this->smtp) && $this->smtp->connected()) { + $this->smtp->quit(); + $this->smtp->close(); + } + } + + /** + * Set the language for error messages. + * Returns false if it cannot load the language file. + * The default language is English. + * + * @param string $langcode ISO 639-1 2-character language code (e.g. French is "fr") + * @param string $lang_path Path to the language file directory, with trailing separator (slash) + * + * @return bool + */ + public function setLanguage($langcode = 'en', $lang_path = '') + { + // Backwards compatibility for renamed language codes + $renamed_langcodes = [ + 'br' => 'pt_br', + 'cz' => 'cs', + 'dk' => 'da', + 'no' => 'nb', + 'se' => 'sv', + 'rs' => 'sr', + 'tg' => 'tl', + 'am' => 'hy', + ]; + + if (isset($renamed_langcodes[$langcode])) { + $langcode = $renamed_langcodes[$langcode]; + } + + // Define full set of translatable strings in English + $PHPMAILER_LANG = [ + 'authenticate' => 'SMTP Error: Could not authenticate.', + 'connect_host' => 'SMTP Error: Could not connect to SMTP host.', + 'data_not_accepted' => 'SMTP Error: data not accepted.', + 'empty_message' => 'Message body empty', + 'encoding' => 'Unknown encoding: ', + 'execute' => 'Could not execute: ', + 'file_access' => 'Could not access file: ', + 'file_open' => 'File Error: Could not open file: ', + 'from_failed' => 'The following From address failed: ', + 'instantiate' => 'Could not instantiate mail function.', + 'invalid_address' => 'Invalid address: ', + 'invalid_hostentry' => 'Invalid hostentry: ', + 'invalid_host' => 'Invalid host: ', + 'mailer_not_supported' => ' mailer is not supported.', + 'provide_address' => 'You must provide at least one recipient email address.', + 'recipients_failed' => 'SMTP Error: The following recipients failed: ', + 'signing' => 'Signing Error: ', + 'smtp_connect_failed' => 'SMTP connect() failed.', + 'smtp_error' => 'SMTP server error: ', + 'variable_set' => 'Cannot set or reset variable: ', + 'extension_missing' => 'Extension missing: ', + ]; + if (empty($lang_path)) { + // Calculate an absolute path so it can work if CWD is not here + $lang_path = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR; + } + //Validate $langcode + if (!preg_match('/^[a-z]{2}(?:_[a-zA-Z]{2})?$/', $langcode)) { + $langcode = 'en'; + } + $foundlang = true; + $lang_file = $lang_path . 'phpmailer.lang-' . $langcode . '.php'; + // There is no English translation file + if ('en' !== $langcode) { + // Make sure language file path is readable + if (!static::fileIsAccessible($lang_file)) { + $foundlang = false; + } else { + // Overwrite language-specific strings. + // This way we'll never have missing translation keys. + $foundlang = include $lang_file; + } + } + $this->language = $PHPMAILER_LANG; + + return (bool) $foundlang; // Returns false if language not found + } + + /** + * Get the array of strings for the current language. + * + * @return array + */ + public function getTranslations() + { + return $this->language; + } + + /** + * Create recipient headers. + * + * @param string $type + * @param array $addr An array of recipients, + * where each recipient is a 2-element indexed array with element 0 containing an address + * and element 1 containing a name, like: + * [['joe@example.com', 'Joe User'], ['zoe@example.com', 'Zoe User']] + * + * @return string + */ + public function addrAppend($type, $addr) + { + $addresses = []; + foreach ($addr as $address) { + $addresses[] = $this->addrFormat($address); + } + + return $type . ': ' . implode(', ', $addresses) . static::$LE; + } + + /** + * Format an address for use in a message header. + * + * @param array $addr A 2-element indexed array, element 0 containing an address, element 1 containing a name like + * ['joe@example.com', 'Joe User'] + * + * @return string + */ + public function addrFormat($addr) + { + if (empty($addr[1])) { // No name provided + return $this->secureHeader($addr[0]); + } + + return $this->encodeHeader($this->secureHeader($addr[1]), 'phrase') . + ' <' . $this->secureHeader($addr[0]) . '>'; + } + + /** + * Word-wrap message. + * For use with mailers that do not automatically perform wrapping + * and for quoted-printable encoded messages. + * Original written by philippe. + * + * @param string $message The message to wrap + * @param int $length The line length to wrap to + * @param bool $qp_mode Whether to run in Quoted-Printable mode + * + * @return string + */ + public function wrapText($message, $length, $qp_mode = false) + { + if ($qp_mode) { + $soft_break = sprintf(' =%s', static::$LE); + } else { + $soft_break = static::$LE; + } + // If utf-8 encoding is used, we will need to make sure we don't + // split multibyte characters when we wrap + $is_utf8 = static::CHARSET_UTF8 === strtolower($this->CharSet); + $lelen = strlen(static::$LE); + $crlflen = strlen(static::$LE); + + $message = static::normalizeBreaks($message); + //Remove a trailing line break + if (substr($message, -$lelen) === static::$LE) { + $message = substr($message, 0, -$lelen); + } + + //Split message into lines + $lines = explode(static::$LE, $message); + //Message will be rebuilt in here + $message = ''; + foreach ($lines as $line) { + $words = explode(' ', $line); + $buf = ''; + $firstword = true; + foreach ($words as $word) { + if ($qp_mode && (strlen($word) > $length)) { + $space_left = $length - strlen($buf) - $crlflen; + if (!$firstword) { + if ($space_left > 20) { + $len = $space_left; + if ($is_utf8) { + $len = $this->utf8CharBoundary($word, $len); + } elseif ('=' === substr($word, $len - 1, 1)) { + --$len; + } elseif ('=' === substr($word, $len - 2, 1)) { + $len -= 2; + } + $part = substr($word, 0, $len); + $word = substr($word, $len); + $buf .= ' ' . $part; + $message .= $buf . sprintf('=%s', static::$LE); + } else { + $message .= $buf . $soft_break; + } + $buf = ''; + } + while ($word !== '') { + if ($length <= 0) { + break; + } + $len = $length; + if ($is_utf8) { + $len = $this->utf8CharBoundary($word, $len); + } elseif ('=' === substr($word, $len - 1, 1)) { + --$len; + } elseif ('=' === substr($word, $len - 2, 1)) { + $len -= 2; + } + $part = substr($word, 0, $len); + $word = (string) substr($word, $len); + + if ($word !== '') { + $message .= $part . sprintf('=%s', static::$LE); + } else { + $buf = $part; + } + } + } else { + $buf_o = $buf; + if (!$firstword) { + $buf .= ' '; + } + $buf .= $word; + + if ('' !== $buf_o && strlen($buf) > $length) { + $message .= $buf_o . $soft_break; + $buf = $word; + } + } + $firstword = false; + } + $message .= $buf . static::$LE; + } + + return $message; + } + + /** + * Find the last character boundary prior to $maxLength in a utf-8 + * quoted-printable encoded string. + * Original written by Colin Brown. + * + * @param string $encodedText utf-8 QP text + * @param int $maxLength Find the last character boundary prior to this length + * + * @return int + */ + public function utf8CharBoundary($encodedText, $maxLength) + { + $foundSplitPos = false; + $lookBack = 3; + while (!$foundSplitPos) { + $lastChunk = substr($encodedText, $maxLength - $lookBack, $lookBack); + $encodedCharPos = strpos($lastChunk, '='); + if (false !== $encodedCharPos) { + // Found start of encoded character byte within $lookBack block. + // Check the encoded byte value (the 2 chars after the '=') + $hex = substr($encodedText, $maxLength - $lookBack + $encodedCharPos + 1, 2); + $dec = hexdec($hex); + if ($dec < 128) { + // Single byte character. + // If the encoded char was found at pos 0, it will fit + // otherwise reduce maxLength to start of the encoded char + if ($encodedCharPos > 0) { + $maxLength -= $lookBack - $encodedCharPos; + } + $foundSplitPos = true; + } elseif ($dec >= 192) { + // First byte of a multi byte character + // Reduce maxLength to split at start of character + $maxLength -= $lookBack - $encodedCharPos; + $foundSplitPos = true; + } elseif ($dec < 192) { + // Middle byte of a multi byte character, look further back + $lookBack += 3; + } + } else { + // No encoded character found + $foundSplitPos = true; + } + } + + return $maxLength; + } + + /** + * Apply word wrapping to the message body. + * Wraps the message body to the number of chars set in the WordWrap property. + * You should only do this to plain-text bodies as wrapping HTML tags may break them. + * This is called automatically by createBody(), so you don't need to call it yourself. + */ + public function setWordWrap() + { + if ($this->WordWrap < 1) { + return; + } + + switch ($this->message_type) { + case 'alt': + case 'alt_inline': + case 'alt_attach': + case 'alt_inline_attach': + $this->AltBody = $this->wrapText($this->AltBody, $this->WordWrap); + break; + default: + $this->Body = $this->wrapText($this->Body, $this->WordWrap); + break; + } + } + + /** + * Assemble message headers. + * + * @return string The assembled headers + */ + public function createHeader() + { + $result = ''; + + $result .= $this->headerLine('Date', '' === $this->MessageDate ? self::rfcDate() : $this->MessageDate); + + // The To header is created automatically by mail(), so needs to be omitted here + if ('mail' !== $this->Mailer) { + if ($this->SingleTo) { + foreach ($this->to as $toaddr) { + $this->SingleToArray[] = $this->addrFormat($toaddr); + } + } elseif (count($this->to) > 0) { + $result .= $this->addrAppend('To', $this->to); + } elseif (count($this->cc) === 0) { + $result .= $this->headerLine('To', 'undisclosed-recipients:;'); + } + } + $result .= $this->addrAppend('From', [[trim($this->From), $this->FromName]]); + + // sendmail and mail() extract Cc from the header before sending + if (count($this->cc) > 0) { + $result .= $this->addrAppend('Cc', $this->cc); + } + + // sendmail and mail() extract Bcc from the header before sending + if (( + 'sendmail' === $this->Mailer || 'qmail' === $this->Mailer || 'mail' === $this->Mailer + ) + && count($this->bcc) > 0 + ) { + $result .= $this->addrAppend('Bcc', $this->bcc); + } + + if (count($this->ReplyTo) > 0) { + $result .= $this->addrAppend('Reply-To', $this->ReplyTo); + } + + // mail() sets the subject itself + if ('mail' !== $this->Mailer) { + $result .= $this->headerLine('Subject', $this->encodeHeader($this->secureHeader($this->Subject))); + } + + // Only allow a custom message ID if it conforms to RFC 5322 section 3.6.4 + // https://tools.ietf.org/html/rfc5322#section-3.6.4 + if ('' !== $this->MessageID && preg_match('/^<.*@.*>$/', $this->MessageID)) { + $this->lastMessageID = $this->MessageID; + } else { + $this->lastMessageID = sprintf('<%s@%s>', $this->uniqueid, $this->serverHostname()); + } + $result .= $this->headerLine('Message-ID', $this->lastMessageID); + if (null !== $this->Priority) { + $result .= $this->headerLine('X-Priority', $this->Priority); + } + if ('' === $this->XMailer) { + $result .= $this->headerLine( + 'X-Mailer', + 'PHPMailer ' . self::VERSION . ' (https://github.com/PHPMailer/PHPMailer)' + ); + } else { + $myXmailer = trim($this->XMailer); + if ($myXmailer) { + $result .= $this->headerLine('X-Mailer', $myXmailer); + } + } + + if ('' !== $this->ConfirmReadingTo) { + $result .= $this->headerLine('Disposition-Notification-To', '<' . $this->ConfirmReadingTo . '>'); + } + + // Add custom headers + foreach ($this->CustomHeader as $header) { + $result .= $this->headerLine( + trim($header[0]), + $this->encodeHeader(trim($header[1])) + ); + } + if (!$this->sign_key_file) { + $result .= $this->headerLine('MIME-Version', '1.0'); + $result .= $this->getMailMIME(); + } + + return $result; + } + + /** + * Get the message MIME type headers. + * + * @return string + */ + public function getMailMIME() + { + $result = ''; + $ismultipart = true; + switch ($this->message_type) { + case 'inline': + $result .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_RELATED . ';'); + $result .= $this->textLine(' boundary="' . $this->boundary[1] . '"'); + break; + case 'attach': + case 'inline_attach': + case 'alt_attach': + case 'alt_inline_attach': + $result .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_MIXED . ';'); + $result .= $this->textLine(' boundary="' . $this->boundary[1] . '"'); + break; + case 'alt': + case 'alt_inline': + $result .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_ALTERNATIVE . ';'); + $result .= $this->textLine(' boundary="' . $this->boundary[1] . '"'); + break; + default: + // Catches case 'plain': and case '': + $result .= $this->textLine('Content-Type: ' . $this->ContentType . '; charset=' . $this->CharSet); + $ismultipart = false; + break; + } + // RFC1341 part 5 says 7bit is assumed if not specified + if (static::ENCODING_7BIT !== $this->Encoding) { + // RFC 2045 section 6.4 says multipart MIME parts may only use 7bit, 8bit or binary CTE + if ($ismultipart) { + if (static::ENCODING_8BIT === $this->Encoding) { + $result .= $this->headerLine('Content-Transfer-Encoding', static::ENCODING_8BIT); + } + // The only remaining alternatives are quoted-printable and base64, which are both 7bit compatible + } else { + $result .= $this->headerLine('Content-Transfer-Encoding', $this->Encoding); + } + } + + if ('mail' !== $this->Mailer) { +// $result .= static::$LE; + } + + return $result; + } + + /** + * Returns the whole MIME message. + * Includes complete headers and body. + * Only valid post preSend(). + * + * @see PHPMailer::preSend() + * + * @return string + */ + public function getSentMIMEMessage() + { + return static::stripTrailingWSP($this->MIMEHeader . $this->mailHeader) . + static::$LE . static::$LE . $this->MIMEBody; + } + + /** + * Create a unique ID to use for boundaries. + * + * @return string + */ + protected function generateId() + { + $len = 32; //32 bytes = 256 bits + $bytes = ''; + if (function_exists('random_bytes')) { + try { + $bytes = random_bytes($len); + } catch (\Exception $e) { + //Do nothing + } + } elseif (function_exists('openssl_random_pseudo_bytes')) { + /** @noinspection CryptographicallySecureRandomnessInspection */ + $bytes = openssl_random_pseudo_bytes($len); + } + if ($bytes === '') { + //We failed to produce a proper random string, so make do. + //Use a hash to force the length to the same as the other methods + $bytes = hash('sha256', uniqid((string) mt_rand(), true), true); + } + + //We don't care about messing up base64 format here, just want a random string + return str_replace(['=', '+', '/'], '', base64_encode(hash('sha256', $bytes, true))); + } + + /** + * Assemble the message body. + * Returns an empty string on failure. + * + * @throws Exception + * + * @return string The assembled message body + */ + public function createBody() + { + $body = ''; + //Create unique IDs and preset boundaries + $this->uniqueid = $this->generateId(); + $this->boundary[1] = 'b1_' . $this->uniqueid; + $this->boundary[2] = 'b2_' . $this->uniqueid; + $this->boundary[3] = 'b3_' . $this->uniqueid; + + if ($this->sign_key_file) { + $body .= $this->getMailMIME() . static::$LE; + } + + $this->setWordWrap(); + + $bodyEncoding = $this->Encoding; + $bodyCharSet = $this->CharSet; + //Can we do a 7-bit downgrade? + if (static::ENCODING_8BIT === $bodyEncoding && !$this->has8bitChars($this->Body)) { + $bodyEncoding = static::ENCODING_7BIT; + //All ISO 8859, Windows codepage and UTF-8 charsets are ascii compatible up to 7-bit + $bodyCharSet = static::CHARSET_ASCII; + } + //If lines are too long, and we're not already using an encoding that will shorten them, + //change to quoted-printable transfer encoding for the body part only + if (static::ENCODING_BASE64 !== $this->Encoding && static::hasLineLongerThanMax($this->Body)) { + $bodyEncoding = static::ENCODING_QUOTED_PRINTABLE; + } + + $altBodyEncoding = $this->Encoding; + $altBodyCharSet = $this->CharSet; + //Can we do a 7-bit downgrade? + if (static::ENCODING_8BIT === $altBodyEncoding && !$this->has8bitChars($this->AltBody)) { + $altBodyEncoding = static::ENCODING_7BIT; + //All ISO 8859, Windows codepage and UTF-8 charsets are ascii compatible up to 7-bit + $altBodyCharSet = static::CHARSET_ASCII; + } + //If lines are too long, and we're not already using an encoding that will shorten them, + //change to quoted-printable transfer encoding for the alt body part only + if (static::ENCODING_BASE64 !== $altBodyEncoding && static::hasLineLongerThanMax($this->AltBody)) { + $altBodyEncoding = static::ENCODING_QUOTED_PRINTABLE; + } + //Use this as a preamble in all multipart message types + $mimepre = 'This is a multi-part message in MIME format.' . static::$LE . static::$LE; + switch ($this->message_type) { + case 'inline': + $body .= $mimepre; + $body .= $this->getBoundary($this->boundary[1], $bodyCharSet, '', $bodyEncoding); + $body .= $this->encodeString($this->Body, $bodyEncoding); + $body .= static::$LE; + $body .= $this->attachAll('inline', $this->boundary[1]); + break; + case 'attach': + $body .= $mimepre; + $body .= $this->getBoundary($this->boundary[1], $bodyCharSet, '', $bodyEncoding); + $body .= $this->encodeString($this->Body, $bodyEncoding); + $body .= static::$LE; + $body .= $this->attachAll('attachment', $this->boundary[1]); + break; + case 'inline_attach': + $body .= $mimepre; + $body .= $this->textLine('--' . $this->boundary[1]); + $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_RELATED . ';'); + $body .= $this->textLine(' boundary="' . $this->boundary[2] . '";'); + $body .= $this->textLine(' type="' . static::CONTENT_TYPE_TEXT_HTML . '"'); + $body .= static::$LE; + $body .= $this->getBoundary($this->boundary[2], $bodyCharSet, '', $bodyEncoding); + $body .= $this->encodeString($this->Body, $bodyEncoding); + $body .= static::$LE; + $body .= $this->attachAll('inline', $this->boundary[2]); + $body .= static::$LE; + $body .= $this->attachAll('attachment', $this->boundary[1]); + break; + case 'alt': + $body .= $mimepre; + $body .= $this->getBoundary( + $this->boundary[1], + $altBodyCharSet, + static::CONTENT_TYPE_PLAINTEXT, + $altBodyEncoding + ); + $body .= $this->encodeString($this->AltBody, $altBodyEncoding); + $body .= static::$LE; + $body .= $this->getBoundary( + $this->boundary[1], + $bodyCharSet, + static::CONTENT_TYPE_TEXT_HTML, + $bodyEncoding + ); + $body .= $this->encodeString($this->Body, $bodyEncoding); + $body .= static::$LE; + if (!empty($this->Ical)) { + $method = static::ICAL_METHOD_REQUEST; + foreach (static::$IcalMethods as $imethod) { + if (stripos($this->Ical, 'METHOD:' . $imethod) !== false) { + $method = $imethod; + break; + } + } + $body .= $this->getBoundary( + $this->boundary[1], + '', + static::CONTENT_TYPE_TEXT_CALENDAR . '; method=' . $method, + '' + ); + $body .= $this->encodeString($this->Ical, $this->Encoding); + $body .= static::$LE; + } + $body .= $this->endBoundary($this->boundary[1]); + break; + case 'alt_inline': + $body .= $mimepre; + $body .= $this->getBoundary( + $this->boundary[1], + $altBodyCharSet, + static::CONTENT_TYPE_PLAINTEXT, + $altBodyEncoding + ); + $body .= $this->encodeString($this->AltBody, $altBodyEncoding); + $body .= static::$LE; + $body .= $this->textLine('--' . $this->boundary[1]); + $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_RELATED . ';'); + $body .= $this->textLine(' boundary="' . $this->boundary[2] . '";'); + $body .= $this->textLine(' type="' . static::CONTENT_TYPE_TEXT_HTML . '"'); + $body .= static::$LE; + $body .= $this->getBoundary( + $this->boundary[2], + $bodyCharSet, + static::CONTENT_TYPE_TEXT_HTML, + $bodyEncoding + ); + $body .= $this->encodeString($this->Body, $bodyEncoding); + $body .= static::$LE; + $body .= $this->attachAll('inline', $this->boundary[2]); + $body .= static::$LE; + $body .= $this->endBoundary($this->boundary[1]); + break; + case 'alt_attach': + $body .= $mimepre; + $body .= $this->textLine('--' . $this->boundary[1]); + $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_ALTERNATIVE . ';'); + $body .= $this->textLine(' boundary="' . $this->boundary[2] . '"'); + $body .= static::$LE; + $body .= $this->getBoundary( + $this->boundary[2], + $altBodyCharSet, + static::CONTENT_TYPE_PLAINTEXT, + $altBodyEncoding + ); + $body .= $this->encodeString($this->AltBody, $altBodyEncoding); + $body .= static::$LE; + $body .= $this->getBoundary( + $this->boundary[2], + $bodyCharSet, + static::CONTENT_TYPE_TEXT_HTML, + $bodyEncoding + ); + $body .= $this->encodeString($this->Body, $bodyEncoding); + $body .= static::$LE; + if (!empty($this->Ical)) { + $method = static::ICAL_METHOD_REQUEST; + foreach (static::$IcalMethods as $imethod) { + if (stripos($this->Ical, 'METHOD:' . $imethod) !== false) { + $method = $imethod; + break; + } + } + $body .= $this->getBoundary( + $this->boundary[2], + '', + static::CONTENT_TYPE_TEXT_CALENDAR . '; method=' . $method, + '' + ); + $body .= $this->encodeString($this->Ical, $this->Encoding); + } + $body .= $this->endBoundary($this->boundary[2]); + $body .= static::$LE; + $body .= $this->attachAll('attachment', $this->boundary[1]); + break; + case 'alt_inline_attach': + $body .= $mimepre; + $body .= $this->textLine('--' . $this->boundary[1]); + $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_ALTERNATIVE . ';'); + $body .= $this->textLine(' boundary="' . $this->boundary[2] . '"'); + $body .= static::$LE; + $body .= $this->getBoundary( + $this->boundary[2], + $altBodyCharSet, + static::CONTENT_TYPE_PLAINTEXT, + $altBodyEncoding + ); + $body .= $this->encodeString($this->AltBody, $altBodyEncoding); + $body .= static::$LE; + $body .= $this->textLine('--' . $this->boundary[2]); + $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_RELATED . ';'); + $body .= $this->textLine(' boundary="' . $this->boundary[3] . '";'); + $body .= $this->textLine(' type="' . static::CONTENT_TYPE_TEXT_HTML . '"'); + $body .= static::$LE; + $body .= $this->getBoundary( + $this->boundary[3], + $bodyCharSet, + static::CONTENT_TYPE_TEXT_HTML, + $bodyEncoding + ); + $body .= $this->encodeString($this->Body, $bodyEncoding); + $body .= static::$LE; + $body .= $this->attachAll('inline', $this->boundary[3]); + $body .= static::$LE; + $body .= $this->endBoundary($this->boundary[2]); + $body .= static::$LE; + $body .= $this->attachAll('attachment', $this->boundary[1]); + break; + default: + // Catch case 'plain' and case '', applies to simple `text/plain` and `text/html` body content types + //Reset the `Encoding` property in case we changed it for line length reasons + $this->Encoding = $bodyEncoding; + $body .= $this->encodeString($this->Body, $this->Encoding); + break; + } + + if ($this->isError()) { + $body = ''; + if ($this->exceptions) { + throw new Exception($this->lang('empty_message'), self::STOP_CRITICAL); + } + } elseif ($this->sign_key_file) { + try { + if (!defined('PKCS7_TEXT')) { + throw new Exception($this->lang('extension_missing') . 'openssl'); + } + + $file = tempnam(sys_get_temp_dir(), 'srcsign'); + $signed = tempnam(sys_get_temp_dir(), 'mailsign'); + file_put_contents($file, $body); + + //Workaround for PHP bug https://bugs.php.net/bug.php?id=69197 + if (empty($this->sign_extracerts_file)) { + $sign = @openssl_pkcs7_sign( + $file, + $signed, + 'file://' . realpath($this->sign_cert_file), + ['file://' . realpath($this->sign_key_file), $this->sign_key_pass], + [] + ); + } else { + $sign = @openssl_pkcs7_sign( + $file, + $signed, + 'file://' . realpath($this->sign_cert_file), + ['file://' . realpath($this->sign_key_file), $this->sign_key_pass], + [], + PKCS7_DETACHED, + $this->sign_extracerts_file + ); + } + + @unlink($file); + if ($sign) { + $body = file_get_contents($signed); + @unlink($signed); + //The message returned by openssl contains both headers and body, so need to split them up + $parts = explode("\n\n", $body, 2); + $this->MIMEHeader .= $parts[0] . static::$LE . static::$LE; + $body = $parts[1]; + } else { + @unlink($signed); + throw new Exception($this->lang('signing') . openssl_error_string()); + } + } catch (Exception $exc) { + $body = ''; + if ($this->exceptions) { + throw $exc; + } + } + } + + return $body; + } + + /** + * Return the start of a message boundary. + * + * @param string $boundary + * @param string $charSet + * @param string $contentType + * @param string $encoding + * + * @return string + */ + protected function getBoundary($boundary, $charSet, $contentType, $encoding) + { + $result = ''; + if ('' === $charSet) { + $charSet = $this->CharSet; + } + if ('' === $contentType) { + $contentType = $this->ContentType; + } + if ('' === $encoding) { + $encoding = $this->Encoding; + } + $result .= $this->textLine('--' . $boundary); + $result .= sprintf('Content-Type: %s; charset=%s', $contentType, $charSet); + $result .= static::$LE; + // RFC1341 part 5 says 7bit is assumed if not specified + if (static::ENCODING_7BIT !== $encoding) { + $result .= $this->headerLine('Content-Transfer-Encoding', $encoding); + } + $result .= static::$LE; + + return $result; + } + + /** + * Return the end of a message boundary. + * + * @param string $boundary + * + * @return string + */ + protected function endBoundary($boundary) + { + return static::$LE . '--' . $boundary . '--' . static::$LE; + } + + /** + * Set the message type. + * PHPMailer only supports some preset message types, not arbitrary MIME structures. + */ + protected function setMessageType() + { + $type = []; + if ($this->alternativeExists()) { + $type[] = 'alt'; + } + if ($this->inlineImageExists()) { + $type[] = 'inline'; + } + if ($this->attachmentExists()) { + $type[] = 'attach'; + } + $this->message_type = implode('_', $type); + if ('' === $this->message_type) { + //The 'plain' message_type refers to the message having a single body element, not that it is plain-text + $this->message_type = 'plain'; + } + } + + /** + * Format a header line. + * + * @param string $name + * @param string|int $value + * + * @return string + */ + public function headerLine($name, $value) + { + return $name . ': ' . $value . static::$LE; + } + + /** + * Return a formatted mail line. + * + * @param string $value + * + * @return string + */ + public function textLine($value) + { + return $value . static::$LE; + } + + /** + * Add an attachment from a path on the filesystem. + * Never use a user-supplied path to a file! + * Returns false if the file could not be found or read. + * Explicitly *does not* support passing URLs; PHPMailer is not an HTTP client. + * If you need to do that, fetch the resource yourself and pass it in via a local file or string. + * + * @param string $path Path to the attachment + * @param string $name Overrides the attachment name + * @param string $encoding File encoding (see $Encoding) + * @param string $type MIME type, e.g. `image/jpeg`; determined automatically from $path if not specified + * @param string $disposition Disposition to use + * + * @throws Exception + * + * @return bool + */ + public function addAttachment( + $path, + $name = '', + $encoding = self::ENCODING_BASE64, + $type = '', + $disposition = 'attachment' + ) { + try { + if (!static::fileIsAccessible($path)) { + throw new Exception($this->lang('file_access') . $path, self::STOP_CONTINUE); + } + + // If a MIME type is not specified, try to work it out from the file name + if ('' === $type) { + $type = static::filenameToType($path); + } + + $filename = (string) static::mb_pathinfo($path, PATHINFO_BASENAME); + if ('' === $name) { + $name = $filename; + } + if (!$this->validateEncoding($encoding)) { + throw new Exception($this->lang('encoding') . $encoding); + } + + $this->attachment[] = [ + 0 => $path, + 1 => $filename, + 2 => $name, + 3 => $encoding, + 4 => $type, + 5 => false, // isStringAttachment + 6 => $disposition, + 7 => $name, + ]; + } catch (Exception $exc) { + $this->setError($exc->getMessage()); + $this->edebug($exc->getMessage()); + if ($this->exceptions) { + throw $exc; + } + + return false; + } + + return true; + } + + /** + * Return the array of attachments. + * + * @return array + */ + public function getAttachments() + { + return $this->attachment; + } + + /** + * Attach all file, string, and binary attachments to the message. + * Returns an empty string on failure. + * + * @param string $disposition_type + * @param string $boundary + * + * @throws Exception + * + * @return string + */ + protected function attachAll($disposition_type, $boundary) + { + // Return text of body + $mime = []; + $cidUniq = []; + $incl = []; + + // Add all attachments + foreach ($this->attachment as $attachment) { + // Check if it is a valid disposition_filter + if ($attachment[6] === $disposition_type) { + // Check for string attachment + $string = ''; + $path = ''; + $bString = $attachment[5]; + if ($bString) { + $string = $attachment[0]; + } else { + $path = $attachment[0]; + } + + $inclhash = hash('sha256', serialize($attachment)); + if (in_array($inclhash, $incl, true)) { + continue; + } + $incl[] = $inclhash; + $name = $attachment[2]; + $encoding = $attachment[3]; + $type = $attachment[4]; + $disposition = $attachment[6]; + $cid = $attachment[7]; + if ('inline' === $disposition && array_key_exists($cid, $cidUniq)) { + continue; + } + $cidUniq[$cid] = true; + + $mime[] = sprintf('--%s%s', $boundary, static::$LE); + //Only include a filename property if we have one + if (!empty($name)) { + $mime[] = sprintf( + 'Content-Type: %s; name=%s%s', + $type, + static::quotedString($this->encodeHeader($this->secureHeader($name))), + static::$LE + ); + } else { + $mime[] = sprintf( + 'Content-Type: %s%s', + $type, + static::$LE + ); + } + // RFC1341 part 5 says 7bit is assumed if not specified + if (static::ENCODING_7BIT !== $encoding) { + $mime[] = sprintf('Content-Transfer-Encoding: %s%s', $encoding, static::$LE); + } + + //Only set Content-IDs on inline attachments + if ((string) $cid !== '' && $disposition === 'inline') { + $mime[] = 'Content-ID: <' . $this->encodeHeader($this->secureHeader($cid)) . '>' . static::$LE; + } + + // Allow for bypassing the Content-Disposition header + if (!empty($disposition)) { + $encoded_name = $this->encodeHeader($this->secureHeader($name)); + if (!empty($encoded_name)) { + $mime[] = sprintf( + 'Content-Disposition: %s; filename=%s%s', + $disposition, + static::quotedString($encoded_name), + static::$LE . static::$LE + ); + } else { + $mime[] = sprintf( + 'Content-Disposition: %s%s', + $disposition, + static::$LE . static::$LE + ); + } + } else { + $mime[] = static::$LE; + } + + // Encode as string attachment + if ($bString) { + $mime[] = $this->encodeString($string, $encoding); + } else { + $mime[] = $this->encodeFile($path, $encoding); + } + if ($this->isError()) { + return ''; + } + $mime[] = static::$LE; + } + } + + $mime[] = sprintf('--%s--%s', $boundary, static::$LE); + + return implode('', $mime); + } + + /** + * Encode a file attachment in requested format. + * Returns an empty string on failure. + * + * @param string $path The full path to the file + * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable' + * + * @return string + */ + protected function encodeFile($path, $encoding = self::ENCODING_BASE64) + { + try { + if (!static::fileIsAccessible($path)) { + throw new Exception($this->lang('file_open') . $path, self::STOP_CONTINUE); + } + $file_buffer = file_get_contents($path); + if (false === $file_buffer) { + throw new Exception($this->lang('file_open') . $path, self::STOP_CONTINUE); + } + $file_buffer = $this->encodeString($file_buffer, $encoding); + + return $file_buffer; + } catch (Exception $exc) { + $this->setError($exc->getMessage()); + $this->edebug($exc->getMessage()); + if ($this->exceptions) { + throw $exc; + } + + return ''; + } + } + + /** + * Encode a string in requested format. + * Returns an empty string on failure. + * + * @param string $str The text to encode + * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable' + * + * @throws Exception + * + * @return string + */ + public function encodeString($str, $encoding = self::ENCODING_BASE64) + { + $encoded = ''; + switch (strtolower($encoding)) { + case static::ENCODING_BASE64: + $encoded = chunk_split( + base64_encode($str), + static::STD_LINE_LENGTH, + static::$LE + ); + break; + case static::ENCODING_7BIT: + case static::ENCODING_8BIT: + $encoded = static::normalizeBreaks($str); + // Make sure it ends with a line break + if (substr($encoded, -(strlen(static::$LE))) !== static::$LE) { + $encoded .= static::$LE; + } + break; + case static::ENCODING_BINARY: + $encoded = $str; + break; + case static::ENCODING_QUOTED_PRINTABLE: + $encoded = $this->encodeQP($str); + break; + default: + $this->setError($this->lang('encoding') . $encoding); + if ($this->exceptions) { + throw new Exception($this->lang('encoding') . $encoding); + } + break; + } + + return $encoded; + } + + /** + * Encode a header value (not including its label) optimally. + * Picks shortest of Q, B, or none. Result includes folding if needed. + * See RFC822 definitions for phrase, comment and text positions. + * + * @param string $str The header value to encode + * @param string $position What context the string will be used in + * + * @return string + */ + public function encodeHeader($str, $position = 'text') + { + $matchcount = 0; + switch (strtolower($position)) { + case 'phrase': + if (!preg_match('/[\200-\377]/', $str)) { + // Can't use addslashes as we don't know the value of magic_quotes_sybase + $encoded = addcslashes($str, "\0..\37\177\\\""); + if (($str === $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) { + return $encoded; + } + + return "\"$encoded\""; + } + $matchcount = preg_match_all('/[^\040\041\043-\133\135-\176]/', $str, $matches); + break; + /* @noinspection PhpMissingBreakStatementInspection */ + case 'comment': + $matchcount = preg_match_all('/[()"]/', $str, $matches); + //fallthrough + case 'text': + default: + $matchcount += preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches); + break; + } + + if ($this->has8bitChars($str)) { + $charset = $this->CharSet; + } else { + $charset = static::CHARSET_ASCII; + } + + // Q/B encoding adds 8 chars and the charset ("` =??[QB]??=`"). + $overhead = 8 + strlen($charset); + + if ('mail' === $this->Mailer) { + $maxlen = static::MAIL_MAX_LINE_LENGTH - $overhead; + } else { + $maxlen = static::MAX_LINE_LENGTH - $overhead; + } + + // Select the encoding that produces the shortest output and/or prevents corruption. + if ($matchcount > strlen($str) / 3) { + // More than 1/3 of the content needs encoding, use B-encode. + $encoding = 'B'; + } elseif ($matchcount > 0) { + // Less than 1/3 of the content needs encoding, use Q-encode. + $encoding = 'Q'; + } elseif (strlen($str) > $maxlen) { + // No encoding needed, but value exceeds max line length, use Q-encode to prevent corruption. + $encoding = 'Q'; + } else { + // No reformatting needed + $encoding = false; + } + + switch ($encoding) { + case 'B': + if ($this->hasMultiBytes($str)) { + // Use a custom function which correctly encodes and wraps long + // multibyte strings without breaking lines within a character + $encoded = $this->base64EncodeWrapMB($str, "\n"); + } else { + $encoded = base64_encode($str); + $maxlen -= $maxlen % 4; + $encoded = trim(chunk_split($encoded, $maxlen, "\n")); + } + $encoded = preg_replace('/^(.*)$/m', ' =?' . $charset . "?$encoding?\\1?=", $encoded); + break; + case 'Q': + $encoded = $this->encodeQ($str, $position); + $encoded = $this->wrapText($encoded, $maxlen, true); + $encoded = str_replace('=' . static::$LE, "\n", trim($encoded)); + $encoded = preg_replace('/^(.*)$/m', ' =?' . $charset . "?$encoding?\\1?=", $encoded); + break; + default: + return $str; + } + + return trim(static::normalizeBreaks($encoded)); + } + + /** + * Check if a string contains multi-byte characters. + * + * @param string $str multi-byte text to wrap encode + * + * @return bool + */ + public function hasMultiBytes($str) + { + if (function_exists('mb_strlen')) { + return strlen($str) > mb_strlen($str, $this->CharSet); + } + + // Assume no multibytes (we can't handle without mbstring functions anyway) + return false; + } + + /** + * Does a string contain any 8-bit chars (in any charset)? + * + * @param string $text + * + * @return bool + */ + public function has8bitChars($text) + { + return (bool) preg_match('/[\x80-\xFF]/', $text); + } + + /** + * Encode and wrap long multibyte strings for mail headers + * without breaking lines within a character. + * Adapted from a function by paravoid. + * + * @see http://www.php.net/manual/en/function.mb-encode-mimeheader.php#60283 + * + * @param string $str multi-byte text to wrap encode + * @param string $linebreak string to use as linefeed/end-of-line + * + * @return string + */ + public function base64EncodeWrapMB($str, $linebreak = null) + { + $start = '=?' . $this->CharSet . '?B?'; + $end = '?='; + $encoded = ''; + if (null === $linebreak) { + $linebreak = static::$LE; + } + + $mb_length = mb_strlen($str, $this->CharSet); + // Each line must have length <= 75, including $start and $end + $length = 75 - strlen($start) - strlen($end); + // Average multi-byte ratio + $ratio = $mb_length / strlen($str); + // Base64 has a 4:3 ratio + $avgLength = floor($length * $ratio * .75); + + $offset = 0; + for ($i = 0; $i < $mb_length; $i += $offset) { + $lookBack = 0; + do { + $offset = $avgLength - $lookBack; + $chunk = mb_substr($str, $i, $offset, $this->CharSet); + $chunk = base64_encode($chunk); + ++$lookBack; + } while (strlen($chunk) > $length); + $encoded .= $chunk . $linebreak; + } + + // Chomp the last linefeed + return substr($encoded, 0, -strlen($linebreak)); + } + + /** + * Encode a string in quoted-printable format. + * According to RFC2045 section 6.7. + * + * @param string $string The text to encode + * + * @return string + */ + public function encodeQP($string) + { + return static::normalizeBreaks(quoted_printable_encode($string)); + } + + /** + * Encode a string using Q encoding. + * + * @see http://tools.ietf.org/html/rfc2047#section-4.2 + * + * @param string $str the text to encode + * @param string $position Where the text is going to be used, see the RFC for what that means + * + * @return string + */ + public function encodeQ($str, $position = 'text') + { + // There should not be any EOL in the string + $pattern = ''; + $encoded = str_replace(["\r", "\n"], '', $str); + switch (strtolower($position)) { + case 'phrase': + // RFC 2047 section 5.3 + $pattern = '^A-Za-z0-9!*+\/ -'; + break; + /* + * RFC 2047 section 5.2. + * Build $pattern without including delimiters and [] + */ + /* @noinspection PhpMissingBreakStatementInspection */ + case 'comment': + $pattern = '\(\)"'; + /* Intentional fall through */ + case 'text': + default: + // RFC 2047 section 5.1 + // Replace every high ascii, control, =, ? and _ characters + $pattern = '\000-\011\013\014\016-\037\075\077\137\177-\377' . $pattern; + break; + } + $matches = []; + if (preg_match_all("/[{$pattern}]/", $encoded, $matches)) { + // If the string contains an '=', make sure it's the first thing we replace + // so as to avoid double-encoding + $eqkey = array_search('=', $matches[0], true); + if (false !== $eqkey) { + unset($matches[0][$eqkey]); + array_unshift($matches[0], '='); + } + foreach (array_unique($matches[0]) as $char) { + $encoded = str_replace($char, '=' . sprintf('%02X', ord($char)), $encoded); + } + } + // Replace spaces with _ (more readable than =20) + // RFC 2047 section 4.2(2) + return str_replace(' ', '_', $encoded); + } + + /** + * Add a string or binary attachment (non-filesystem). + * This method can be used to attach ascii or binary data, + * such as a BLOB record from a database. + * + * @param string $string String attachment data + * @param string $filename Name of the attachment + * @param string $encoding File encoding (see $Encoding) + * @param string $type File extension (MIME) type + * @param string $disposition Disposition to use + * + * @throws Exception + * + * @return bool True on successfully adding an attachment + */ + public function addStringAttachment( + $string, + $filename, + $encoding = self::ENCODING_BASE64, + $type = '', + $disposition = 'attachment' + ) { + try { + // If a MIME type is not specified, try to work it out from the file name + if ('' === $type) { + $type = static::filenameToType($filename); + } + + if (!$this->validateEncoding($encoding)) { + throw new Exception($this->lang('encoding') . $encoding); + } + + // Append to $attachment array + $this->attachment[] = [ + 0 => $string, + 1 => $filename, + 2 => static::mb_pathinfo($filename, PATHINFO_BASENAME), + 3 => $encoding, + 4 => $type, + 5 => true, // isStringAttachment + 6 => $disposition, + 7 => 0, + ]; + } catch (Exception $exc) { + $this->setError($exc->getMessage()); + $this->edebug($exc->getMessage()); + if ($this->exceptions) { + throw $exc; + } + + return false; + } + + return true; + } + + /** + * Add an embedded (inline) attachment from a file. + * This can include images, sounds, and just about any other document type. + * These differ from 'regular' attachments in that they are intended to be + * displayed inline with the message, not just attached for download. + * This is used in HTML messages that embed the images + * the HTML refers to using the $cid value. + * Never use a user-supplied path to a file! + * + * @param string $path Path to the attachment + * @param string $cid Content ID of the attachment; Use this to reference + * the content when using an embedded image in HTML + * @param string $name Overrides the attachment name + * @param string $encoding File encoding (see $Encoding) + * @param string $type File MIME type + * @param string $disposition Disposition to use + * + * @throws Exception + * + * @return bool True on successfully adding an attachment + */ + public function addEmbeddedImage( + $path, + $cid, + $name = '', + $encoding = self::ENCODING_BASE64, + $type = '', + $disposition = 'inline' + ) { + try { + if (!static::fileIsAccessible($path)) { + throw new Exception($this->lang('file_access') . $path, self::STOP_CONTINUE); + } + + // If a MIME type is not specified, try to work it out from the file name + if ('' === $type) { + $type = static::filenameToType($path); + } + + if (!$this->validateEncoding($encoding)) { + throw new Exception($this->lang('encoding') . $encoding); + } + + $filename = (string) static::mb_pathinfo($path, PATHINFO_BASENAME); + if ('' === $name) { + $name = $filename; + } + + // Append to $attachment array + $this->attachment[] = [ + 0 => $path, + 1 => $filename, + 2 => $name, + 3 => $encoding, + 4 => $type, + 5 => false, // isStringAttachment + 6 => $disposition, + 7 => $cid, + ]; + } catch (Exception $exc) { + $this->setError($exc->getMessage()); + $this->edebug($exc->getMessage()); + if ($this->exceptions) { + throw $exc; + } + + return false; + } + + return true; + } + + /** + * Add an embedded stringified attachment. + * This can include images, sounds, and just about any other document type. + * If your filename doesn't contain an extension, be sure to set the $type to an appropriate MIME type. + * + * @param string $string The attachment binary data + * @param string $cid Content ID of the attachment; Use this to reference + * the content when using an embedded image in HTML + * @param string $name A filename for the attachment. If this contains an extension, + * PHPMailer will attempt to set a MIME type for the attachment. + * For example 'file.jpg' would get an 'image/jpeg' MIME type. + * @param string $encoding File encoding (see $Encoding), defaults to 'base64' + * @param string $type MIME type - will be used in preference to any automatically derived type + * @param string $disposition Disposition to use + * + * @throws Exception + * + * @return bool True on successfully adding an attachment + */ + public function addStringEmbeddedImage( + $string, + $cid, + $name = '', + $encoding = self::ENCODING_BASE64, + $type = '', + $disposition = 'inline' + ) { + try { + // If a MIME type is not specified, try to work it out from the name + if ('' === $type && !empty($name)) { + $type = static::filenameToType($name); + } + + if (!$this->validateEncoding($encoding)) { + throw new Exception($this->lang('encoding') . $encoding); + } + + // Append to $attachment array + $this->attachment[] = [ + 0 => $string, + 1 => $name, + 2 => $name, + 3 => $encoding, + 4 => $type, + 5 => true, // isStringAttachment + 6 => $disposition, + 7 => $cid, + ]; + } catch (Exception $exc) { + $this->setError($exc->getMessage()); + $this->edebug($exc->getMessage()); + if ($this->exceptions) { + throw $exc; + } + + return false; + } + + return true; + } + + /** + * Validate encodings. + * + * @param string $encoding + * + * @return bool + */ + protected function validateEncoding($encoding) + { + return in_array( + $encoding, + [ + self::ENCODING_7BIT, + self::ENCODING_QUOTED_PRINTABLE, + self::ENCODING_BASE64, + self::ENCODING_8BIT, + self::ENCODING_BINARY, + ], + true + ); + } + + /** + * Check if an embedded attachment is present with this cid. + * + * @param string $cid + * + * @return bool + */ + protected function cidExists($cid) + { + foreach ($this->attachment as $attachment) { + if ('inline' === $attachment[6] && $cid === $attachment[7]) { + return true; + } + } + + return false; + } + + /** + * Check if an inline attachment is present. + * + * @return bool + */ + public function inlineImageExists() + { + foreach ($this->attachment as $attachment) { + if ('inline' === $attachment[6]) { + return true; + } + } + + return false; + } + + /** + * Check if an attachment (non-inline) is present. + * + * @return bool + */ + public function attachmentExists() + { + foreach ($this->attachment as $attachment) { + if ('attachment' === $attachment[6]) { + return true; + } + } + + return false; + } + + /** + * Check if this message has an alternative body set. + * + * @return bool + */ + public function alternativeExists() + { + return !empty($this->AltBody); + } + + /** + * Clear queued addresses of given kind. + * + * @param string $kind 'to', 'cc', or 'bcc' + */ + public function clearQueuedAddresses($kind) + { + $this->RecipientsQueue = array_filter( + $this->RecipientsQueue, + static function ($params) use ($kind) { + return $params[0] !== $kind; + } + ); + } + + /** + * Clear all To recipients. + */ + public function clearAddresses() + { + foreach ($this->to as $to) { + unset($this->all_recipients[strtolower($to[0])]); + } + $this->to = []; + $this->clearQueuedAddresses('to'); + } + + /** + * Clear all CC recipients. + */ + public function clearCCs() + { + foreach ($this->cc as $cc) { + unset($this->all_recipients[strtolower($cc[0])]); + } + $this->cc = []; + $this->clearQueuedAddresses('cc'); + } + + /** + * Clear all BCC recipients. + */ + public function clearBCCs() + { + foreach ($this->bcc as $bcc) { + unset($this->all_recipients[strtolower($bcc[0])]); + } + $this->bcc = []; + $this->clearQueuedAddresses('bcc'); + } + + /** + * Clear all ReplyTo recipients. + */ + public function clearReplyTos() + { + $this->ReplyTo = []; + $this->ReplyToQueue = []; + } + + /** + * Clear all recipient types. + */ + public function clearAllRecipients() + { + $this->to = []; + $this->cc = []; + $this->bcc = []; + $this->all_recipients = []; + $this->RecipientsQueue = []; + } + + /** + * Clear all filesystem, string, and binary attachments. + */ + public function clearAttachments() + { + $this->attachment = []; + } + + /** + * Clear all custom headers. + */ + public function clearCustomHeaders() + { + $this->CustomHeader = []; + } + + /** + * Add an error message to the error container. + * + * @param string $msg + */ + protected function setError($msg) + { + ++$this->error_count; + if ('smtp' === $this->Mailer && null !== $this->smtp) { + $lasterror = $this->smtp->getError(); + if (!empty($lasterror['error'])) { + $msg .= $this->lang('smtp_error') . $lasterror['error']; + if (!empty($lasterror['detail'])) { + $msg .= ' Detail: ' . $lasterror['detail']; + } + if (!empty($lasterror['smtp_code'])) { + $msg .= ' SMTP code: ' . $lasterror['smtp_code']; + } + if (!empty($lasterror['smtp_code_ex'])) { + $msg .= ' Additional SMTP info: ' . $lasterror['smtp_code_ex']; + } + } + } + $this->ErrorInfo = $msg; + } + + /** + * Return an RFC 822 formatted date. + * + * @return string + */ + public static function rfcDate() + { + // Set the time zone to whatever the default is to avoid 500 errors + // Will default to UTC if it's not set properly in php.ini + date_default_timezone_set(@date_default_timezone_get()); + + return date('D, j M Y H:i:s O'); + } + + /** + * Get the server hostname. + * Returns 'localhost.localdomain' if unknown. + * + * @return string + */ + protected function serverHostname() + { + $result = ''; + if (!empty($this->Hostname)) { + $result = $this->Hostname; + } elseif (isset($_SERVER) && array_key_exists('SERVER_NAME', $_SERVER)) { + $result = $_SERVER['SERVER_NAME']; + } elseif (function_exists('gethostname') && gethostname() !== false) { + $result = gethostname(); + } elseif (php_uname('n') !== false) { + $result = php_uname('n'); + } + if (!static::isValidHost($result)) { + return 'localhost.localdomain'; + } + + return $result; + } + + /** + * Validate whether a string contains a valid value to use as a hostname or IP address. + * IPv6 addresses must include [], e.g. `[::1]`, not just `::1`. + * + * @param string $host The host name or IP address to check + * + * @return bool + */ + public static function isValidHost($host) + { + //Simple syntax limits + if (empty($host) + || !is_string($host) + || strlen($host) > 256 + || !preg_match('/^([a-zA-Z\d.-]*|\[[a-fA-F\d:]+])$/', $host) + ) { + return false; + } + //Looks like a bracketed IPv6 address + if (strlen($host) > 2 && substr($host, 0, 1) === '[' && substr($host, -1, 1) === ']') { + return filter_var(substr($host, 1, -1), FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) !== false; + } + //If removing all the dots results in a numeric string, it must be an IPv4 address. + //Need to check this first because otherwise things like `999.0.0.0` are considered valid host names + if (is_numeric(str_replace('.', '', $host))) { + //Is it a valid IPv4 address? + return filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false; + } + if (filter_var('http://' . $host, FILTER_VALIDATE_URL) !== false) { + //Is it a syntactically valid hostname? + return true; + } + + return false; + } + + /** + * Get an error message in the current language. + * + * @param string $key + * + * @return string + */ + protected function lang($key) + { + if (count($this->language) < 1) { + $this->setLanguage(); // set the default language + } + + if (array_key_exists($key, $this->language)) { + if ('smtp_connect_failed' === $key) { + //Include a link to troubleshooting docs on SMTP connection failure + //this is by far the biggest cause of support questions + //but it's usually not PHPMailer's fault. + return $this->language[$key] . ' https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting'; + } + + return $this->language[$key]; + } + + //Return the key as a fallback + return $key; + } + + /** + * Check if an error occurred. + * + * @return bool True if an error did occur + */ + public function isError() + { + return $this->error_count > 0; + } + + /** + * Add a custom header. + * $name value can be overloaded to contain + * both header name and value (name:value). + * + * @param string $name Custom header name + * @param string|null $value Header value + * + * @throws Exception + */ + public function addCustomHeader($name, $value = null) + { + if (null === $value && strpos($name, ':') !== false) { + // Value passed in as name:value + list($name, $value) = explode(':', $name, 2); + } + $name = trim($name); + $value = trim($value); + //Ensure name is not empty, and that neither name nor value contain line breaks + if (empty($name) || strpbrk($name . $value, "\r\n") !== false) { + if ($this->exceptions) { + throw new Exception('Invalid header name or value'); + } + + return false; + } + $this->CustomHeader[] = [$name, $value]; + + return true; + } + + /** + * Returns all custom headers. + * + * @return array + */ + public function getCustomHeaders() + { + return $this->CustomHeader; + } + + /** + * Create a message body from an HTML string. + * Automatically inlines images and creates a plain-text version by converting the HTML, + * overwriting any existing values in Body and AltBody. + * Do not source $message content from user input! + * $basedir is prepended when handling relative URLs, e.g. and must not be empty + * will look for an image file in $basedir/images/a.png and convert it to inline. + * If you don't provide a $basedir, relative paths will be left untouched (and thus probably break in email) + * Converts data-uri images into embedded attachments. + * If you don't want to apply these transformations to your HTML, just set Body and AltBody directly. + * + * @param string $message HTML message string + * @param string $basedir Absolute path to a base directory to prepend to relative paths to images + * @param bool|callable $advanced Whether to use the internal HTML to text converter + * or your own custom converter + * @return string The transformed message body + * + * @throws Exception + * + * @see PHPMailer::html2text() + */ + public function msgHTML($message, $basedir = '', $advanced = false) + { + preg_match_all('/(? 1 && '/' !== substr($basedir, -1)) { + // Ensure $basedir has a trailing / + $basedir .= '/'; + } + foreach ($images[2] as $imgindex => $url) { + // Convert data URIs into embedded images + //e.g. "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" + $match = []; + if (preg_match('#^data:(image/(?:jpe?g|gif|png));?(base64)?,(.+)#', $url, $match)) { + if (count($match) === 4 && static::ENCODING_BASE64 === $match[2]) { + $data = base64_decode($match[3]); + } elseif ('' === $match[2]) { + $data = rawurldecode($match[3]); + } else { + //Not recognised so leave it alone + continue; + } + //Hash the decoded data, not the URL, so that the same data-URI image used in multiple places + //will only be embedded once, even if it used a different encoding + $cid = substr(hash('sha256', $data), 0, 32) . '@phpmailer.0'; // RFC2392 S 2 + + if (!$this->cidExists($cid)) { + $this->addStringEmbeddedImage( + $data, + $cid, + 'embed' . $imgindex, + static::ENCODING_BASE64, + $match[1] + ); + } + $message = str_replace( + $images[0][$imgindex], + $images[1][$imgindex] . '="cid:' . $cid . '"', + $message + ); + continue; + } + if (// Only process relative URLs if a basedir is provided (i.e. no absolute local paths) + !empty($basedir) + // Ignore URLs containing parent dir traversal (..) + && (strpos($url, '..') === false) + // Do not change urls that are already inline images + && 0 !== strpos($url, 'cid:') + // Do not change absolute URLs, including anonymous protocol + && !preg_match('#^[a-z][a-z0-9+.-]*:?//#i', $url) + ) { + $filename = static::mb_pathinfo($url, PATHINFO_BASENAME); + $directory = dirname($url); + if ('.' === $directory) { + $directory = ''; + } + // RFC2392 S 2 + $cid = substr(hash('sha256', $url), 0, 32) . '@phpmailer.0'; + if (strlen($basedir) > 1 && '/' !== substr($basedir, -1)) { + $basedir .= '/'; + } + if (strlen($directory) > 1 && '/' !== substr($directory, -1)) { + $directory .= '/'; + } + if ($this->addEmbeddedImage( + $basedir . $directory . $filename, + $cid, + $filename, + static::ENCODING_BASE64, + static::_mime_types((string) static::mb_pathinfo($filename, PATHINFO_EXTENSION)) + ) + ) { + $message = preg_replace( + '/' . $images[1][$imgindex] . '=["\']' . preg_quote($url, '/') . '["\']/Ui', + $images[1][$imgindex] . '="cid:' . $cid . '"', + $message + ); + } + } + } + } + $this->isHTML(); + // Convert all message body line breaks to LE, makes quoted-printable encoding work much better + $this->Body = static::normalizeBreaks($message); + $this->AltBody = static::normalizeBreaks($this->html2text($message, $advanced)); + if (!$this->alternativeExists()) { + $this->AltBody = 'This is an HTML-only message. To view it, activate HTML in your email application.' + . static::$LE; + } + + return $this->Body; + } + + /** + * Convert an HTML string into plain text. + * This is used by msgHTML(). + * Note - older versions of this function used a bundled advanced converter + * which was removed for license reasons in #232. + * Example usage: + * + * ```php + * // Use default conversion + * $plain = $mail->html2text($html); + * // Use your own custom converter + * $plain = $mail->html2text($html, function($html) { + * $converter = new MyHtml2text($html); + * return $converter->get_text(); + * }); + * ``` + * + * @param string $html The HTML text to convert + * @param bool|callable $advanced Any boolean value to use the internal converter, + * or provide your own callable for custom conversion + * + * @return string + */ + public function html2text($html, $advanced = false) + { + if (is_callable($advanced)) { + return call_user_func($advanced, $html); + } + + return html_entity_decode( + trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/si', '', $html))), + ENT_QUOTES, + $this->CharSet + ); + } + + /** + * Get the MIME type for a file extension. + * + * @param string $ext File extension + * + * @return string MIME type of file + */ + public static function _mime_types($ext = '') + { + $mimes = [ + 'xl' => 'application/excel', + 'js' => 'application/javascript', + 'hqx' => 'application/mac-binhex40', + 'cpt' => 'application/mac-compactpro', + 'bin' => 'application/macbinary', + 'doc' => 'application/msword', + 'word' => 'application/msword', + 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', + 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template', + 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', + 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide', + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', + 'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12', + 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12', + 'class' => 'application/octet-stream', + 'dll' => 'application/octet-stream', + 'dms' => 'application/octet-stream', + 'exe' => 'application/octet-stream', + 'lha' => 'application/octet-stream', + 'lzh' => 'application/octet-stream', + 'psd' => 'application/octet-stream', + 'sea' => 'application/octet-stream', + 'so' => 'application/octet-stream', + 'oda' => 'application/oda', + 'pdf' => 'application/pdf', + 'ai' => 'application/postscript', + 'eps' => 'application/postscript', + 'ps' => 'application/postscript', + 'smi' => 'application/smil', + 'smil' => 'application/smil', + 'mif' => 'application/vnd.mif', + 'xls' => 'application/vnd.ms-excel', + 'ppt' => 'application/vnd.ms-powerpoint', + 'wbxml' => 'application/vnd.wap.wbxml', + 'wmlc' => 'application/vnd.wap.wmlc', + 'dcr' => 'application/x-director', + 'dir' => 'application/x-director', + 'dxr' => 'application/x-director', + 'dvi' => 'application/x-dvi', + 'gtar' => 'application/x-gtar', + 'php3' => 'application/x-httpd-php', + 'php4' => 'application/x-httpd-php', + 'php' => 'application/x-httpd-php', + 'phtml' => 'application/x-httpd-php', + 'phps' => 'application/x-httpd-php-source', + 'swf' => 'application/x-shockwave-flash', + 'sit' => 'application/x-stuffit', + 'tar' => 'application/x-tar', + 'tgz' => 'application/x-tar', + 'xht' => 'application/xhtml+xml', + 'xhtml' => 'application/xhtml+xml', + 'zip' => 'application/zip', + 'mid' => 'audio/midi', + 'midi' => 'audio/midi', + 'mp2' => 'audio/mpeg', + 'mp3' => 'audio/mpeg', + 'm4a' => 'audio/mp4', + 'mpga' => 'audio/mpeg', + 'aif' => 'audio/x-aiff', + 'aifc' => 'audio/x-aiff', + 'aiff' => 'audio/x-aiff', + 'ram' => 'audio/x-pn-realaudio', + 'rm' => 'audio/x-pn-realaudio', + 'rpm' => 'audio/x-pn-realaudio-plugin', + 'ra' => 'audio/x-realaudio', + 'wav' => 'audio/x-wav', + 'mka' => 'audio/x-matroska', + 'bmp' => 'image/bmp', + 'gif' => 'image/gif', + 'jpeg' => 'image/jpeg', + 'jpe' => 'image/jpeg', + 'jpg' => 'image/jpeg', + 'png' => 'image/png', + 'tiff' => 'image/tiff', + 'tif' => 'image/tiff', + 'webp' => 'image/webp', + 'avif' => 'image/avif', + 'heif' => 'image/heif', + 'heifs' => 'image/heif-sequence', + 'heic' => 'image/heic', + 'heics' => 'image/heic-sequence', + 'eml' => 'message/rfc822', + 'css' => 'text/css', + 'html' => 'text/html', + 'htm' => 'text/html', + 'shtml' => 'text/html', + 'log' => 'text/plain', + 'text' => 'text/plain', + 'txt' => 'text/plain', + 'rtx' => 'text/richtext', + 'rtf' => 'text/rtf', + 'vcf' => 'text/vcard', + 'vcard' => 'text/vcard', + 'ics' => 'text/calendar', + 'xml' => 'text/xml', + 'xsl' => 'text/xml', + 'wmv' => 'video/x-ms-wmv', + 'mpeg' => 'video/mpeg', + 'mpe' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'mp4' => 'video/mp4', + 'm4v' => 'video/mp4', + 'mov' => 'video/quicktime', + 'qt' => 'video/quicktime', + 'rv' => 'video/vnd.rn-realvideo', + 'avi' => 'video/x-msvideo', + 'movie' => 'video/x-sgi-movie', + 'webm' => 'video/webm', + 'mkv' => 'video/x-matroska', + ]; + $ext = strtolower($ext); + if (array_key_exists($ext, $mimes)) { + return $mimes[$ext]; + } + + return 'application/octet-stream'; + } + + /** + * Map a file name to a MIME type. + * Defaults to 'application/octet-stream', i.e.. arbitrary binary data. + * + * @param string $filename A file name or full path, does not need to exist as a file + * + * @return string + */ + public static function filenameToType($filename) + { + // In case the path is a URL, strip any query string before getting extension + $qpos = strpos($filename, '?'); + if (false !== $qpos) { + $filename = substr($filename, 0, $qpos); + } + $ext = static::mb_pathinfo($filename, PATHINFO_EXTENSION); + + return static::_mime_types($ext); + } + + /** + * Multi-byte-safe pathinfo replacement. + * Drop-in replacement for pathinfo(), but multibyte- and cross-platform-safe. + * + * @see http://www.php.net/manual/en/function.pathinfo.php#107461 + * + * @param string $path A filename or path, does not need to exist as a file + * @param int|string $options Either a PATHINFO_* constant, + * or a string name to return only the specified piece + * + * @return string|array + */ + public static function mb_pathinfo($path, $options = null) + { + $ret = ['dirname' => '', 'basename' => '', 'extension' => '', 'filename' => '']; + $pathinfo = []; + if (preg_match('#^(.*?)[\\\\/]*(([^/\\\\]*?)(\.([^.\\\\/]+?)|))[\\\\/.]*$#m', $path, $pathinfo)) { + if (array_key_exists(1, $pathinfo)) { + $ret['dirname'] = $pathinfo[1]; + } + if (array_key_exists(2, $pathinfo)) { + $ret['basename'] = $pathinfo[2]; + } + if (array_key_exists(5, $pathinfo)) { + $ret['extension'] = $pathinfo[5]; + } + if (array_key_exists(3, $pathinfo)) { + $ret['filename'] = $pathinfo[3]; + } + } + switch ($options) { + case PATHINFO_DIRNAME: + case 'dirname': + return $ret['dirname']; + case PATHINFO_BASENAME: + case 'basename': + return $ret['basename']; + case PATHINFO_EXTENSION: + case 'extension': + return $ret['extension']; + case PATHINFO_FILENAME: + case 'filename': + return $ret['filename']; + default: + return $ret; + } + } + + /** + * Set or reset instance properties. + * You should avoid this function - it's more verbose, less efficient, more error-prone and + * harder to debug than setting properties directly. + * Usage Example: + * `$mail->set('SMTPSecure', static::ENCRYPTION_STARTTLS);` + * is the same as: + * `$mail->SMTPSecure = static::ENCRYPTION_STARTTLS;`. + * + * @param string $name The property name to set + * @param mixed $value The value to set the property to + * + * @return bool + */ + public function set($name, $value = '') + { + if (property_exists($this, $name)) { + $this->$name = $value; + + return true; + } + $this->setError($this->lang('variable_set') . $name); + + return false; + } + + /** + * Strip newlines to prevent header injection. + * + * @param string $str + * + * @return string + */ + public function secureHeader($str) + { + return trim(str_replace(["\r", "\n"], '', $str)); + } + + /** + * Normalize line breaks in a string. + * Converts UNIX LF, Mac CR and Windows CRLF line breaks into a single line break format. + * Defaults to CRLF (for message bodies) and preserves consecutive breaks. + * + * @param string $text + * @param string $breaktype What kind of line break to use; defaults to static::$LE + * + * @return string + */ + public static function normalizeBreaks($text, $breaktype = null) + { + if (null === $breaktype) { + $breaktype = static::$LE; + } + // Normalise to \n + $text = str_replace([self::CRLF, "\r"], "\n", $text); + // Now convert LE as needed + if ("\n" !== $breaktype) { + $text = str_replace("\n", $breaktype, $text); + } + + return $text; + } + + /** + * Remove trailing breaks from a string. + * + * @param string $text + * + * @return string The text to remove breaks from + */ + public static function stripTrailingWSP($text) + { + return rtrim($text, " \r\n\t"); + } + + /** + * Return the current line break format string. + * + * @return string + */ + public static function getLE() + { + return static::$LE; + } + + /** + * Set the line break format string, e.g. "\r\n". + * + * @param string $le + */ + protected static function setLE($le) + { + static::$LE = $le; + } + + /** + * Set the public and private key files and password for S/MIME signing. + * + * @param string $cert_filename + * @param string $key_filename + * @param string $key_pass Password for private key + * @param string $extracerts_filename Optional path to chain certificate + */ + public function sign($cert_filename, $key_filename, $key_pass, $extracerts_filename = '') + { + $this->sign_cert_file = $cert_filename; + $this->sign_key_file = $key_filename; + $this->sign_key_pass = $key_pass; + $this->sign_extracerts_file = $extracerts_filename; + } + + /** + * Quoted-Printable-encode a DKIM header. + * + * @param string $txt + * + * @return string + */ + public function DKIM_QP($txt) + { + $line = ''; + $len = strlen($txt); + for ($i = 0; $i < $len; ++$i) { + $ord = ord($txt[$i]); + if (((0x21 <= $ord) && ($ord <= 0x3A)) || $ord === 0x3C || ((0x3E <= $ord) && ($ord <= 0x7E))) { + $line .= $txt[$i]; + } else { + $line .= '=' . sprintf('%02X', $ord); + } + } + + return $line; + } + + /** + * Generate a DKIM signature. + * + * @param string $signHeader + * + * @throws Exception + * + * @return string The DKIM signature value + */ + public function DKIM_Sign($signHeader) + { + if (!defined('PKCS7_TEXT')) { + if ($this->exceptions) { + throw new Exception($this->lang('extension_missing') . 'openssl'); + } + + return ''; + } + $privKeyStr = !empty($this->DKIM_private_string) ? + $this->DKIM_private_string : + file_get_contents($this->DKIM_private); + if ('' !== $this->DKIM_passphrase) { + $privKey = openssl_pkey_get_private($privKeyStr, $this->DKIM_passphrase); + } else { + $privKey = openssl_pkey_get_private($privKeyStr); + } + if (openssl_sign($signHeader, $signature, $privKey, 'sha256WithRSAEncryption')) { + openssl_pkey_free($privKey); + + return base64_encode($signature); + } + openssl_pkey_free($privKey); + + return ''; + } + + /** + * Generate a DKIM canonicalization header. + * Uses the 'relaxed' algorithm from RFC6376 section 3.4.2. + * Canonicalized headers should *always* use CRLF, regardless of mailer setting. + * + * @see https://tools.ietf.org/html/rfc6376#section-3.4.2 + * + * @param string $signHeader Header + * + * @return string + */ + public function DKIM_HeaderC($signHeader) + { + //Normalize breaks to CRLF (regardless of the mailer) + $signHeader = static::normalizeBreaks($signHeader, self::CRLF); + //Unfold header lines + //Note PCRE \s is too broad a definition of whitespace; RFC5322 defines it as `[ \t]` + //@see https://tools.ietf.org/html/rfc5322#section-2.2 + //That means this may break if you do something daft like put vertical tabs in your headers. + $signHeader = preg_replace('/\r\n[ \t]+/', ' ', $signHeader); + //Break headers out into an array + $lines = explode(self::CRLF, $signHeader); + foreach ($lines as $key => $line) { + //If the header is missing a :, skip it as it's invalid + //This is likely to happen because the explode() above will also split + //on the trailing LE, leaving an empty line + if (strpos($line, ':') === false) { + continue; + } + list($heading, $value) = explode(':', $line, 2); + //Lower-case header name + $heading = strtolower($heading); + //Collapse white space within the value, also convert WSP to space + $value = preg_replace('/[ \t]+/', ' ', $value); + //RFC6376 is slightly unclear here - it says to delete space at the *end* of each value + //But then says to delete space before and after the colon. + //Net result is the same as trimming both ends of the value. + //By elimination, the same applies to the field name + $lines[$key] = trim($heading, " \t") . ':' . trim($value, " \t"); + } + + return implode(self::CRLF, $lines); + } + + /** + * Generate a DKIM canonicalization body. + * Uses the 'simple' algorithm from RFC6376 section 3.4.3. + * Canonicalized bodies should *always* use CRLF, regardless of mailer setting. + * + * @see https://tools.ietf.org/html/rfc6376#section-3.4.3 + * + * @param string $body Message Body + * + * @return string + */ + public function DKIM_BodyC($body) + { + if (empty($body)) { + return self::CRLF; + } + // Normalize line endings to CRLF + $body = static::normalizeBreaks($body, self::CRLF); + + //Reduce multiple trailing line breaks to a single one + return static::stripTrailingWSP($body) . self::CRLF; + } + + /** + * Create the DKIM header and body in a new message header. + * + * @param string $headers_line Header lines + * @param string $subject Subject + * @param string $body Body + * + * @throws Exception + * + * @return string + */ + public function DKIM_Add($headers_line, $subject, $body) + { + $DKIMsignatureType = 'rsa-sha256'; // Signature & hash algorithms + $DKIMcanonicalization = 'relaxed/simple'; // Canonicalization methods of header & body + $DKIMquery = 'dns/txt'; // Query method + $DKIMtime = time(); + //Always sign these headers without being asked + //Recommended list from https://tools.ietf.org/html/rfc6376#section-5.4.1 + $autoSignHeaders = [ + 'from', + 'to', + 'cc', + 'date', + 'subject', + 'reply-to', + 'message-id', + 'content-type', + 'mime-version', + 'x-mailer', + ]; + if (stripos($headers_line, 'Subject') === false) { + $headers_line .= 'Subject: ' . $subject . static::$LE; + } + $headerLines = explode(static::$LE, $headers_line); + $currentHeaderLabel = ''; + $currentHeaderValue = ''; + $parsedHeaders = []; + $headerLineIndex = 0; + $headerLineCount = count($headerLines); + foreach ($headerLines as $headerLine) { + $matches = []; + if (preg_match('/^([^ \t]*?)(?::[ \t]*)(.*)$/', $headerLine, $matches)) { + if ($currentHeaderLabel !== '') { + //We were previously in another header; This is the start of a new header, so save the previous one + $parsedHeaders[] = ['label' => $currentHeaderLabel, 'value' => $currentHeaderValue]; + } + $currentHeaderLabel = $matches[1]; + $currentHeaderValue = $matches[2]; + } elseif (preg_match('/^[ \t]+(.*)$/', $headerLine, $matches)) { + //This is a folded continuation of the current header, so unfold it + $currentHeaderValue .= ' ' . $matches[1]; + } + ++$headerLineIndex; + if ($headerLineIndex >= $headerLineCount) { + //This was the last line, so finish off this header + $parsedHeaders[] = ['label' => $currentHeaderLabel, 'value' => $currentHeaderValue]; + } + } + $copiedHeaders = []; + $headersToSignKeys = []; + $headersToSign = []; + foreach ($parsedHeaders as $header) { + //Is this header one that must be included in the DKIM signature? + if (in_array(strtolower($header['label']), $autoSignHeaders, true)) { + $headersToSignKeys[] = $header['label']; + $headersToSign[] = $header['label'] . ': ' . $header['value']; + if ($this->DKIM_copyHeaderFields) { + $copiedHeaders[] = $header['label'] . ':' . //Note no space after this, as per RFC + str_replace('|', '=7C', $this->DKIM_QP($header['value'])); + } + continue; + } + //Is this an extra custom header we've been asked to sign? + if (in_array($header['label'], $this->DKIM_extraHeaders, true)) { + //Find its value in custom headers + foreach ($this->CustomHeader as $customHeader) { + if ($customHeader[0] === $header['label']) { + $headersToSignKeys[] = $header['label']; + $headersToSign[] = $header['label'] . ': ' . $header['value']; + if ($this->DKIM_copyHeaderFields) { + $copiedHeaders[] = $header['label'] . ':' . //Note no space after this, as per RFC + str_replace('|', '=7C', $this->DKIM_QP($header['value'])); + } + //Skip straight to the next header + continue 2; + } + } + } + } + $copiedHeaderFields = ''; + if ($this->DKIM_copyHeaderFields && count($copiedHeaders) > 0) { + //Assemble a DKIM 'z' tag + $copiedHeaderFields = ' z='; + $first = true; + foreach ($copiedHeaders as $copiedHeader) { + if (!$first) { + $copiedHeaderFields .= static::$LE . ' |'; + } + //Fold long values + if (strlen($copiedHeader) > self::STD_LINE_LENGTH - 3) { + $copiedHeaderFields .= substr( + chunk_split($copiedHeader, self::STD_LINE_LENGTH - 3, static::$LE . self::FWS), + 0, + -strlen(static::$LE . self::FWS) + ); + } else { + $copiedHeaderFields .= $copiedHeader; + } + $first = false; + } + $copiedHeaderFields .= ';' . static::$LE; + } + $headerKeys = ' h=' . implode(':', $headersToSignKeys) . ';' . static::$LE; + $headerValues = implode(static::$LE, $headersToSign); + $body = $this->DKIM_BodyC($body); + $DKIMb64 = base64_encode(pack('H*', hash('sha256', $body))); // Base64 of packed binary SHA-256 hash of body + $ident = ''; + if ('' !== $this->DKIM_identity) { + $ident = ' i=' . $this->DKIM_identity . ';' . static::$LE; + } + //The DKIM-Signature header is included in the signature *except for* the value of the `b` tag + //which is appended after calculating the signature + //https://tools.ietf.org/html/rfc6376#section-3.5 + $dkimSignatureHeader = 'DKIM-Signature: v=1;' . + ' d=' . $this->DKIM_domain . ';' . + ' s=' . $this->DKIM_selector . ';' . static::$LE . + ' a=' . $DKIMsignatureType . ';' . + ' q=' . $DKIMquery . ';' . + ' t=' . $DKIMtime . ';' . + ' c=' . $DKIMcanonicalization . ';' . static::$LE . + $headerKeys . + $ident . + $copiedHeaderFields . + ' bh=' . $DKIMb64 . ';' . static::$LE . + ' b='; + //Canonicalize the set of headers + $canonicalizedHeaders = $this->DKIM_HeaderC( + $headerValues . static::$LE . $dkimSignatureHeader + ); + $signature = $this->DKIM_Sign($canonicalizedHeaders); + $signature = trim(chunk_split($signature, self::STD_LINE_LENGTH - 3, static::$LE . self::FWS)); + + return static::normalizeBreaks($dkimSignatureHeader . $signature); + } + + /** + * Detect if a string contains a line longer than the maximum line length + * allowed by RFC 2822 section 2.1.1. + * + * @param string $str + * + * @return bool + */ + public static function hasLineLongerThanMax($str) + { + return (bool) preg_match('/^(.{' . (self::MAX_LINE_LENGTH + strlen(static::$LE)) . ',})/m', $str); + } + + /** + * If a string contains any "special" characters, double-quote the name, + * and escape any double quotes with a backslash. + * + * @param string $str + * + * @return string + * + * @see RFC822 3.4.1 + */ + public static function quotedString($str) + { + if (preg_match('/[ ()<>@,;:"\/\[\]?=]/', $str)) { + //If the string contains any of these chars, it must be double-quoted + //and any double quotes must be escaped with a backslash + return '"' . str_replace('"', '\\"', $str) . '"'; + } + + //Return the string untouched, it doesn't need quoting + return $str; + } + + /** + * Allows for public read access to 'to' property. + * Before the send() call, queued addresses (i.e. with IDN) are not yet included. + * + * @return array + */ + public function getToAddresses() + { + return $this->to; + } + + /** + * Allows for public read access to 'cc' property. + * Before the send() call, queued addresses (i.e. with IDN) are not yet included. + * + * @return array + */ + public function getCcAddresses() + { + return $this->cc; + } + + /** + * Allows for public read access to 'bcc' property. + * Before the send() call, queued addresses (i.e. with IDN) are not yet included. + * + * @return array + */ + public function getBccAddresses() + { + return $this->bcc; + } + + /** + * Allows for public read access to 'ReplyTo' property. + * Before the send() call, queued addresses (i.e. with IDN) are not yet included. + * + * @return array + */ + public function getReplyToAddresses() + { + return $this->ReplyTo; + } + + /** + * Allows for public read access to 'all_recipients' property. + * Before the send() call, queued addresses (i.e. with IDN) are not yet included. + * + * @return array + */ + public function getAllRecipientAddresses() + { + return $this->all_recipients; + } + + /** + * Perform a callback. + * + * @param bool $isSent + * @param array $to + * @param array $cc + * @param array $bcc + * @param string $subject + * @param string $body + * @param string $from + * @param array $extra + */ + protected function doCallback($isSent, $to, $cc, $bcc, $subject, $body, $from, $extra) + { + if (!empty($this->action_function) && is_callable($this->action_function)) { + call_user_func($this->action_function, $isSent, $to, $cc, $bcc, $subject, $body, $from, $extra); + } + } + + /** + * Get the OAuth instance. + * + * @return OAuth + */ + public function getOAuth() + { + return $this->oauth; + } + + /** + * Set an OAuth instance. + */ + public function setOAuth(OAuth $oauth) + { + $this->oauth = $oauth; + } +} diff --git a/admin/lib/vendor/phpmailer/phpmailer/src/POP3.php b/admin/lib/vendor/phpmailer/phpmailer/src/POP3.php new file mode 100644 index 0000000..a6a4128 --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/src/POP3.php @@ -0,0 +1,421 @@ + + * @author Jim Jagielski (jimjag) + * @author Andy Prevost (codeworxtech) + * @author Brent R. Matzelle (original founder) + * @copyright 2012 - 2020 Marcus Bointon + * @copyright 2010 - 2012 Jim Jagielski + * @copyright 2004 - 2009 Andy Prevost + * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @note This program is distributed in the hope that it will be useful - WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + */ + +namespace PHPMailer\PHPMailer; + +/** + * PHPMailer POP-Before-SMTP Authentication Class. + * Specifically for PHPMailer to use for RFC1939 POP-before-SMTP authentication. + * 1) This class does not support APOP authentication. + * 2) Opening and closing lots of POP3 connections can be quite slow. If you need + * to send a batch of emails then just perform the authentication once at the start, + * and then loop through your mail sending script. Providing this process doesn't + * take longer than the verification period lasts on your POP3 server, you should be fine. + * 3) This is really ancient technology; you should only need to use it to talk to very old systems. + * 4) This POP3 class is deliberately lightweight and incomplete, implementing just + * enough to do authentication. + * If you want a more complete class there are other POP3 classes for PHP available. + * + * @author Richard Davey (original author) + * @author Marcus Bointon (Synchro/coolbru) + * @author Jim Jagielski (jimjag) + * @author Andy Prevost (codeworxtech) + */ +class POP3 +{ + /** + * The POP3 PHPMailer Version number. + * + * @var string + */ + const VERSION = '6.1.8'; + + /** + * Default POP3 port number. + * + * @var int + */ + const DEFAULT_PORT = 110; + + /** + * Default timeout in seconds. + * + * @var int + */ + const DEFAULT_TIMEOUT = 30; + + /** + * Debug display level. + * Options: 0 = no, 1+ = yes. + * + * @var int + */ + public $do_debug = 0; + + /** + * POP3 mail server hostname. + * + * @var string + */ + public $host; + + /** + * POP3 port number. + * + * @var int + */ + public $port; + + /** + * POP3 Timeout Value in seconds. + * + * @var int + */ + public $tval; + + /** + * POP3 username. + * + * @var string + */ + public $username; + + /** + * POP3 password. + * + * @var string + */ + public $password; + + /** + * Resource handle for the POP3 connection socket. + * + * @var resource + */ + protected $pop_conn; + + /** + * Are we connected? + * + * @var bool + */ + protected $connected = false; + + /** + * Error container. + * + * @var array + */ + protected $errors = []; + + /** + * Line break constant. + */ + const LE = "\r\n"; + + /** + * Simple static wrapper for all-in-one POP before SMTP. + * + * @param string $host The hostname to connect to + * @param int|bool $port The port number to connect to + * @param int|bool $timeout The timeout value + * @param string $username + * @param string $password + * @param int $debug_level + * + * @return bool + */ + public static function popBeforeSmtp( + $host, + $port = false, + $timeout = false, + $username = '', + $password = '', + $debug_level = 0 + ) { + $pop = new self(); + + return $pop->authorise($host, $port, $timeout, $username, $password, $debug_level); + } + + /** + * Authenticate with a POP3 server. + * A connect, login, disconnect sequence + * appropriate for POP-before SMTP authorisation. + * + * @param string $host The hostname to connect to + * @param int|bool $port The port number to connect to + * @param int|bool $timeout The timeout value + * @param string $username + * @param string $password + * @param int $debug_level + * + * @return bool + */ + public function authorise($host, $port = false, $timeout = false, $username = '', $password = '', $debug_level = 0) + { + $this->host = $host; + // If no port value provided, use default + if (false === $port) { + $this->port = static::DEFAULT_PORT; + } else { + $this->port = (int) $port; + } + // If no timeout value provided, use default + if (false === $timeout) { + $this->tval = static::DEFAULT_TIMEOUT; + } else { + $this->tval = (int) $timeout; + } + $this->do_debug = $debug_level; + $this->username = $username; + $this->password = $password; + // Reset the error log + $this->errors = []; + // connect + $result = $this->connect($this->host, $this->port, $this->tval); + if ($result) { + $login_result = $this->login($this->username, $this->password); + if ($login_result) { + $this->disconnect(); + + return true; + } + } + // We need to disconnect regardless of whether the login succeeded + $this->disconnect(); + + return false; + } + + /** + * Connect to a POP3 server. + * + * @param string $host + * @param int|bool $port + * @param int $tval + * + * @return bool + */ + public function connect($host, $port = false, $tval = 30) + { + // Are we already connected? + if ($this->connected) { + return true; + } + + //On Windows this will raise a PHP Warning error if the hostname doesn't exist. + //Rather than suppress it with @fsockopen, capture it cleanly instead + set_error_handler([$this, 'catchWarning']); + + if (false === $port) { + $port = static::DEFAULT_PORT; + } + + // connect to the POP3 server + $errno = 0; + $errstr = ''; + $this->pop_conn = fsockopen( + $host, // POP3 Host + $port, // Port # + $errno, // Error Number + $errstr, // Error Message + $tval + ); // Timeout (seconds) + // Restore the error handler + restore_error_handler(); + + // Did we connect? + if (false === $this->pop_conn) { + // It would appear not... + $this->setError( + "Failed to connect to server $host on port $port. errno: $errno; errstr: $errstr" + ); + + return false; + } + + // Increase the stream time-out + stream_set_timeout($this->pop_conn, $tval, 0); + + // Get the POP3 server response + $pop3_response = $this->getResponse(); + // Check for the +OK + if ($this->checkResponse($pop3_response)) { + // The connection is established and the POP3 server is talking + $this->connected = true; + + return true; + } + + return false; + } + + /** + * Log in to the POP3 server. + * Does not support APOP (RFC 2828, 4949). + * + * @param string $username + * @param string $password + * + * @return bool + */ + public function login($username = '', $password = '') + { + if (!$this->connected) { + $this->setError('Not connected to POP3 server'); + } + if (empty($username)) { + $username = $this->username; + } + if (empty($password)) { + $password = $this->password; + } + + // Send the Username + $this->sendString("USER $username" . static::LE); + $pop3_response = $this->getResponse(); + if ($this->checkResponse($pop3_response)) { + // Send the Password + $this->sendString("PASS $password" . static::LE); + $pop3_response = $this->getResponse(); + if ($this->checkResponse($pop3_response)) { + return true; + } + } + + return false; + } + + /** + * Disconnect from the POP3 server. + */ + public function disconnect() + { + $this->sendString('QUIT'); + //The QUIT command may cause the daemon to exit, which will kill our connection + //So ignore errors here + try { + @fclose($this->pop_conn); + } catch (Exception $e) { + //Do nothing + } + } + + /** + * Get a response from the POP3 server. + * + * @param int $size The maximum number of bytes to retrieve + * + * @return string + */ + protected function getResponse($size = 128) + { + $response = fgets($this->pop_conn, $size); + if ($this->do_debug >= 1) { + echo 'Server -> Client: ', $response; + } + + return $response; + } + + /** + * Send raw data to the POP3 server. + * + * @param string $string + * + * @return int + */ + protected function sendString($string) + { + if ($this->pop_conn) { + if ($this->do_debug >= 2) { //Show client messages when debug >= 2 + echo 'Client -> Server: ', $string; + } + + return fwrite($this->pop_conn, $string, strlen($string)); + } + + return 0; + } + + /** + * Checks the POP3 server response. + * Looks for for +OK or -ERR. + * + * @param string $string + * + * @return bool + */ + protected function checkResponse($string) + { + if (strpos($string, '+OK') !== 0) { + $this->setError("Server reported an error: $string"); + + return false; + } + + return true; + } + + /** + * Add an error to the internal error store. + * Also display debug output if it's enabled. + * + * @param string $error + */ + protected function setError($error) + { + $this->errors[] = $error; + if ($this->do_debug >= 1) { + echo '
';
+            foreach ($this->errors as $e) {
+                print_r($e);
+            }
+            echo '
'; + } + } + + /** + * Get an array of error messages, if any. + * + * @return array + */ + public function getErrors() + { + return $this->errors; + } + + /** + * POP3 connection error handler. + * + * @param int $errno + * @param string $errstr + * @param string $errfile + * @param int $errline + */ + protected function catchWarning($errno, $errstr, $errfile, $errline) + { + $this->setError( + 'Connecting to the POP3 server raised a PHP warning:' . + "errno: $errno errstr: $errstr; errfile: $errfile; errline: $errline" + ); + } +} diff --git a/admin/lib/vendor/phpmailer/phpmailer/src/SMTP.php b/admin/lib/vendor/phpmailer/phpmailer/src/SMTP.php new file mode 100644 index 0000000..9e43dce --- /dev/null +++ b/admin/lib/vendor/phpmailer/phpmailer/src/SMTP.php @@ -0,0 +1,1426 @@ + + * @author Jim Jagielski (jimjag) + * @author Andy Prevost (codeworxtech) + * @author Brent R. Matzelle (original founder) + * @copyright 2012 - 2020 Marcus Bointon + * @copyright 2010 - 2012 Jim Jagielski + * @copyright 2004 - 2009 Andy Prevost + * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @note This program is distributed in the hope that it will be useful - WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + */ + +namespace PHPMailer\PHPMailer; + +/** + * PHPMailer RFC821 SMTP email transport class. + * Implements RFC 821 SMTP commands and provides some utility methods for sending mail to an SMTP server. + * + * @author Chris Ryan + * @author Marcus Bointon + */ +class SMTP +{ + /** + * The PHPMailer SMTP version number. + * + * @var string + */ + const VERSION = '6.1.8'; + + /** + * SMTP line break constant. + * + * @var string + */ + const LE = "\r\n"; + + /** + * The SMTP port to use if one is not specified. + * + * @var int + */ + const DEFAULT_PORT = 25; + + /** + * The maximum line length allowed by RFC 5321 section 4.5.3.1.6, + * *excluding* a trailing CRLF break. + * + * @see https://tools.ietf.org/html/rfc5321#section-4.5.3.1.6 + * + * @var int + */ + const MAX_LINE_LENGTH = 998; + + /** + * The maximum line length allowed for replies in RFC 5321 section 4.5.3.1.5, + * *including* a trailing CRLF line break. + * + * @see https://tools.ietf.org/html/rfc5321#section-4.5.3.1.5 + * + * @var int + */ + const MAX_REPLY_LENGTH = 512; + + /** + * Debug level for no output. + * + * @var int + */ + const DEBUG_OFF = 0; + + /** + * Debug level to show client -> server messages. + * + * @var int + */ + const DEBUG_CLIENT = 1; + + /** + * Debug level to show client -> server and server -> client messages. + * + * @var int + */ + const DEBUG_SERVER = 2; + + /** + * Debug level to show connection status, client -> server and server -> client messages. + * + * @var int + */ + const DEBUG_CONNECTION = 3; + + /** + * Debug level to show all messages. + * + * @var int + */ + const DEBUG_LOWLEVEL = 4; + + /** + * Debug output level. + * Options: + * * self::DEBUG_OFF (`0`) No debug output, default + * * self::DEBUG_CLIENT (`1`) Client commands + * * self::DEBUG_SERVER (`2`) Client commands and server responses + * * self::DEBUG_CONNECTION (`3`) As DEBUG_SERVER plus connection status + * * self::DEBUG_LOWLEVEL (`4`) Low-level data output, all messages. + * + * @var int + */ + public $do_debug = self::DEBUG_OFF; + + /** + * How to handle debug output. + * Options: + * * `echo` Output plain-text as-is, appropriate for CLI + * * `html` Output escaped, line breaks converted to `
`, appropriate for browser output + * * `error_log` Output to error log as configured in php.ini + * Alternatively, you can provide a callable expecting two params: a message string and the debug level: + * + * ```php + * $smtp->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";}; + * ``` + * + * Alternatively, you can pass in an instance of a PSR-3 compatible logger, though only `debug` + * level output is used: + * + * ```php + * $mail->Debugoutput = new myPsr3Logger; + * ``` + * + * @var string|callable|\Psr\Log\LoggerInterface + */ + public $Debugoutput = 'echo'; + + /** + * Whether to use VERP. + * + * @see http://en.wikipedia.org/wiki/Variable_envelope_return_path + * @see http://www.postfix.org/VERP_README.html Info on VERP + * + * @var bool + */ + public $do_verp = false; + + /** + * The timeout value for connection, in seconds. + * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2. + * This needs to be quite high to function correctly with hosts using greetdelay as an anti-spam measure. + * + * @see http://tools.ietf.org/html/rfc2821#section-4.5.3.2 + * + * @var int + */ + public $Timeout = 300; + + /** + * How long to wait for commands to complete, in seconds. + * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2. + * + * @var int + */ + public $Timelimit = 300; + + /** + * Patterns to extract an SMTP transaction id from reply to a DATA command. + * The first capture group in each regex will be used as the ID. + * MS ESMTP returns the message ID, which may not be correct for internal tracking. + * + * @var string[] + */ + protected $smtp_transaction_id_patterns = [ + 'exim' => '/[\d]{3} OK id=(.*)/', + 'sendmail' => '/[\d]{3} 2.0.0 (.*) Message/', + 'postfix' => '/[\d]{3} 2.0.0 Ok: queued as (.*)/', + 'Microsoft_ESMTP' => '/[0-9]{3} 2.[\d].0 (.*)@(?:.*) Queued mail for delivery/', + 'Amazon_SES' => '/[\d]{3} Ok (.*)/', + 'SendGrid' => '/[\d]{3} Ok: queued as (.*)/', + 'CampaignMonitor' => '/[\d]{3} 2.0.0 OK:([a-zA-Z\d]{48})/', + ]; + + /** + * The last transaction ID issued in response to a DATA command, + * if one was detected. + * + * @var string|bool|null + */ + protected $last_smtp_transaction_id; + + /** + * The socket for the server connection. + * + * @var ?resource + */ + protected $smtp_conn; + + /** + * Error information, if any, for the last SMTP command. + * + * @var array + */ + protected $error = [ + 'error' => '', + 'detail' => '', + 'smtp_code' => '', + 'smtp_code_ex' => '', + ]; + + /** + * The reply the server sent to us for HELO. + * If null, no HELO string has yet been received. + * + * @var string|null + */ + protected $helo_rply; + + /** + * The set of SMTP extensions sent in reply to EHLO command. + * Indexes of the array are extension names. + * Value at index 'HELO' or 'EHLO' (according to command that was sent) + * represents the server name. In case of HELO it is the only element of the array. + * Other values can be boolean TRUE or an array containing extension options. + * If null, no HELO/EHLO string has yet been received. + * + * @var array|null + */ + protected $server_caps; + + /** + * The most recent reply received from the server. + * + * @var string + */ + protected $last_reply = ''; + + /** + * Output debugging info via a user-selected method. + * + * @param string $str Debug string to output + * @param int $level The debug level of this message; see DEBUG_* constants + * + * @see SMTP::$Debugoutput + * @see SMTP::$do_debug + */ + protected function edebug($str, $level = 0) + { + if ($level > $this->do_debug) { + return; + } + //Is this a PSR-3 logger? + if ($this->Debugoutput instanceof \Psr\Log\LoggerInterface) { + $this->Debugoutput->debug($str); + + return; + } + //Avoid clash with built-in function names + if (is_callable($this->Debugoutput) && !in_array($this->Debugoutput, ['error_log', 'html', 'echo'])) { + call_user_func($this->Debugoutput, $str, $level); + + return; + } + switch ($this->Debugoutput) { + case 'error_log': + //Don't output, just log + error_log($str); + break; + case 'html': + //Cleans up output a bit for a better looking, HTML-safe output + echo gmdate('Y-m-d H:i:s'), ' ', htmlentities( + preg_replace('/[\r\n]+/', '', $str), + ENT_QUOTES, + 'UTF-8' + ), "
\n"; + break; + case 'echo': + default: + //Normalize line breaks + $str = preg_replace('/\r\n|\r/m', "\n", $str); + echo gmdate('Y-m-d H:i:s'), + "\t", + //Trim trailing space + trim( + //Indent for readability, except for trailing break + str_replace( + "\n", + "\n \t ", + trim($str) + ) + ), + "\n"; + } + } + + /** + * Connect to an SMTP server. + * + * @param string $host SMTP server IP or host name + * @param int $port The port number to connect to + * @param int $timeout How long to wait for the connection to open + * @param array $options An array of options for stream_context_create() + * + * @return bool + */ + public function connect($host, $port = null, $timeout = 30, $options = []) + { + // Clear errors to avoid confusion + $this->setError(''); + // Make sure we are __not__ connected + if ($this->connected()) { + // Already connected, generate error + $this->setError('Already connected to a server'); + + return false; + } + if (empty($port)) { + $port = self::DEFAULT_PORT; + } + // Connect to the SMTP server + $this->edebug( + "Connection: opening to $host:$port, timeout=$timeout, options=" . + (count($options) > 0 ? var_export($options, true) : 'array()'), + self::DEBUG_CONNECTION + ); + + $this->smtp_conn = $this->getSMTPConnection($host, $port, $timeout, $options); + + if ($this->smtp_conn === false) { + //Error info already set inside `getSMTPConnection()` + return false; + } + + $this->edebug('Connection: opened', self::DEBUG_CONNECTION); + + // Get any announcement + $this->last_reply = $this->get_lines(); + $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER); + + return true; + } + + /** + * Create connection to the SMTP server. + * + * @param string $host SMTP server IP or host name + * @param int $port The port number to connect to + * @param int $timeout How long to wait for the connection to open + * @param array $options An array of options for stream_context_create() + * + * @return false|resource + */ + protected function getSMTPConnection($host, $port = null, $timeout = 30, $options = []) + { + static $streamok; + //This is enabled by default since 5.0.0 but some providers disable it + //Check this once and cache the result + if (null === $streamok) { + $streamok = function_exists('stream_socket_client'); + } + + $errno = 0; + $errstr = ''; + if ($streamok) { + $socket_context = stream_context_create($options); + set_error_handler([$this, 'errorHandler']); + $connection = stream_socket_client( + $host . ':' . $port, + $errno, + $errstr, + $timeout, + STREAM_CLIENT_CONNECT, + $socket_context + ); + restore_error_handler(); + } else { + //Fall back to fsockopen which should work in more places, but is missing some features + $this->edebug( + 'Connection: stream_socket_client not available, falling back to fsockopen', + self::DEBUG_CONNECTION + ); + set_error_handler([$this, 'errorHandler']); + $connection = fsockopen( + $host, + $port, + $errno, + $errstr, + $timeout + ); + restore_error_handler(); + } + + // Verify we connected properly + if (!is_resource($connection)) { + $this->setError( + 'Failed to connect to server', + '', + (string) $errno, + $errstr + ); + $this->edebug( + 'SMTP ERROR: ' . $this->error['error'] + . ": $errstr ($errno)", + self::DEBUG_CLIENT + ); + + return false; + } + + // SMTP server can take longer to respond, give longer timeout for first read + // Windows does not have support for this timeout function + if (strpos(PHP_OS, 'WIN') !== 0) { + $max = (int)ini_get('max_execution_time'); + // Don't bother if unlimited, or if set_time_limit is disabled + if (0 !== $max && $timeout > $max && strpos(ini_get('disable_functions'), 'set_time_limit') === false) { + @set_time_limit($timeout); + } + stream_set_timeout($connection, $timeout, 0); + } + + return $connection; + } + + /** + * Initiate a TLS (encrypted) session. + * + * @return bool + */ + public function startTLS() + { + if (!$this->sendCommand('STARTTLS', 'STARTTLS', 220)) { + return false; + } + + //Allow the best TLS version(s) we can + $crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT; + + //PHP 5.6.7 dropped inclusion of TLS 1.1 and 1.2 in STREAM_CRYPTO_METHOD_TLS_CLIENT + //so add them back in manually if we can + if (defined('STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT')) { + $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT; + $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT; + } + + // Begin encrypted connection + set_error_handler([$this, 'errorHandler']); + $crypto_ok = stream_socket_enable_crypto( + $this->smtp_conn, + true, + $crypto_method + ); + restore_error_handler(); + + return (bool) $crypto_ok; + } + + /** + * Perform SMTP authentication. + * Must be run after hello(). + * + * @see hello() + * + * @param string $username The user name + * @param string $password The password + * @param string $authtype The auth type (CRAM-MD5, PLAIN, LOGIN, XOAUTH2) + * @param OAuth $OAuth An optional OAuth instance for XOAUTH2 authentication + * + * @return bool True if successfully authenticated + */ + public function authenticate( + $username, + $password, + $authtype = null, + $OAuth = null + ) { + if (!$this->server_caps) { + $this->setError('Authentication is not allowed before HELO/EHLO'); + + return false; + } + + if (array_key_exists('EHLO', $this->server_caps)) { + // SMTP extensions are available; try to find a proper authentication method + if (!array_key_exists('AUTH', $this->server_caps)) { + $this->setError('Authentication is not allowed at this stage'); + // 'at this stage' means that auth may be allowed after the stage changes + // e.g. after STARTTLS + + return false; + } + + $this->edebug('Auth method requested: ' . ($authtype ?: 'UNSPECIFIED'), self::DEBUG_LOWLEVEL); + $this->edebug( + 'Auth methods available on the server: ' . implode(',', $this->server_caps['AUTH']), + self::DEBUG_LOWLEVEL + ); + + //If we have requested a specific auth type, check the server supports it before trying others + if (null !== $authtype && !in_array($authtype, $this->server_caps['AUTH'], true)) { + $this->edebug('Requested auth method not available: ' . $authtype, self::DEBUG_LOWLEVEL); + $authtype = null; + } + + if (empty($authtype)) { + //If no auth mechanism is specified, attempt to use these, in this order + //Try CRAM-MD5 first as it's more secure than the others + foreach (['CRAM-MD5', 'LOGIN', 'PLAIN', 'XOAUTH2'] as $method) { + if (in_array($method, $this->server_caps['AUTH'], true)) { + $authtype = $method; + break; + } + } + if (empty($authtype)) { + $this->setError('No supported authentication methods found'); + + return false; + } + $this->edebug('Auth method selected: ' . $authtype, self::DEBUG_LOWLEVEL); + } + + if (!in_array($authtype, $this->server_caps['AUTH'], true)) { + $this->setError("The requested authentication method \"$authtype\" is not supported by the server"); + + return false; + } + } elseif (empty($authtype)) { + $authtype = 'LOGIN'; + } + switch ($authtype) { + case 'PLAIN': + // Start authentication + if (!$this->sendCommand('AUTH', 'AUTH PLAIN', 334)) { + return false; + } + // Send encoded username and password + if (!$this->sendCommand( + 'User & Password', + base64_encode("\0" . $username . "\0" . $password), + 235 + ) + ) { + return false; + } + break; + case 'LOGIN': + // Start authentication + if (!$this->sendCommand('AUTH', 'AUTH LOGIN', 334)) { + return false; + } + if (!$this->sendCommand('Username', base64_encode($username), 334)) { + return false; + } + if (!$this->sendCommand('Password', base64_encode($password), 235)) { + return false; + } + break; + case 'CRAM-MD5': + // Start authentication + if (!$this->sendCommand('AUTH CRAM-MD5', 'AUTH CRAM-MD5', 334)) { + return false; + } + // Get the challenge + $challenge = base64_decode(substr($this->last_reply, 4)); + + // Build the response + $response = $username . ' ' . $this->hmac($challenge, $password); + + // send encoded credentials + return $this->sendCommand('Username', base64_encode($response), 235); + case 'XOAUTH2': + //The OAuth instance must be set up prior to requesting auth. + if (null === $OAuth) { + return false; + } + $oauth = $OAuth->getOauth64(); + + // Start authentication + if (!$this->sendCommand('AUTH', 'AUTH XOAUTH2 ' . $oauth, 235)) { + return false; + } + break; + default: + $this->setError("Authentication method \"$authtype\" is not supported"); + + return false; + } + + return true; + } + + /** + * Calculate an MD5 HMAC hash. + * Works like hash_hmac('md5', $data, $key) + * in case that function is not available. + * + * @param string $data The data to hash + * @param string $key The key to hash with + * + * @return string + */ + protected function hmac($data, $key) + { + if (function_exists('hash_hmac')) { + return hash_hmac('md5', $data, $key); + } + + // The following borrowed from + // http://php.net/manual/en/function.mhash.php#27225 + + // RFC 2104 HMAC implementation for php. + // Creates an md5 HMAC. + // Eliminates the need to install mhash to compute a HMAC + // by Lance Rushing + + $bytelen = 64; // byte length for md5 + if (strlen($key) > $bytelen) { + $key = pack('H*', md5($key)); + } + $key = str_pad($key, $bytelen, chr(0x00)); + $ipad = str_pad('', $bytelen, chr(0x36)); + $opad = str_pad('', $bytelen, chr(0x5c)); + $k_ipad = $key ^ $ipad; + $k_opad = $key ^ $opad; + + return md5($k_opad . pack('H*', md5($k_ipad . $data))); + } + + /** + * Check connection state. + * + * @return bool True if connected + */ + public function connected() + { + if (is_resource($this->smtp_conn)) { + $sock_status = stream_get_meta_data($this->smtp_conn); + if ($sock_status['eof']) { + // The socket is valid but we are not connected + $this->edebug( + 'SMTP NOTICE: EOF caught while checking if connected', + self::DEBUG_CLIENT + ); + $this->close(); + + return false; + } + + return true; // everything looks good + } + + return false; + } + + /** + * Close the socket and clean up the state of the class. + * Don't use this function without first trying to use QUIT. + * + * @see quit() + */ + public function close() + { + $this->setError(''); + $this->server_caps = null; + $this->helo_rply = null; + if (is_resource($this->smtp_conn)) { + // close the connection and cleanup + fclose($this->smtp_conn); + $this->smtp_conn = null; //Makes for cleaner serialization + $this->edebug('Connection: closed', self::DEBUG_CONNECTION); + } + } + + /** + * Send an SMTP DATA command. + * Issues a data command and sends the msg_data to the server, + * finializing the mail transaction. $msg_data is the message + * that is to be send with the headers. Each header needs to be + * on a single line followed by a with the message headers + * and the message body being separated by an additional . + * Implements RFC 821: DATA . + * + * @param string $msg_data Message data to send + * + * @return bool + */ + public function data($msg_data) + { + //This will use the standard timelimit + if (!$this->sendCommand('DATA', 'DATA', 354)) { + return false; + } + + /* The server is ready to accept data! + * According to rfc821 we should not send more than 1000 characters on a single line (including the LE) + * so we will break the data up into lines by \r and/or \n then if needed we will break each of those into + * smaller lines to fit within the limit. + * We will also look for lines that start with a '.' and prepend an additional '.'. + * NOTE: this does not count towards line-length limit. + */ + + // Normalize line breaks before exploding + $lines = explode("\n", str_replace(["\r\n", "\r"], "\n", $msg_data)); + + /* To distinguish between a complete RFC822 message and a plain message body, we check if the first field + * of the first line (':' separated) does not contain a space then it _should_ be a header and we will + * process all lines before a blank line as headers. + */ + + $field = substr($lines[0], 0, strpos($lines[0], ':')); + $in_headers = false; + if (!empty($field) && strpos($field, ' ') === false) { + $in_headers = true; + } + + foreach ($lines as $line) { + $lines_out = []; + if ($in_headers && $line === '') { + $in_headers = false; + } + //Break this line up into several smaller lines if it's too long + //Micro-optimisation: isset($str[$len]) is faster than (strlen($str) > $len), + while (isset($line[self::MAX_LINE_LENGTH])) { + //Working backwards, try to find a space within the last MAX_LINE_LENGTH chars of the line to break on + //so as to avoid breaking in the middle of a word + $pos = strrpos(substr($line, 0, self::MAX_LINE_LENGTH), ' '); + //Deliberately matches both false and 0 + if (!$pos) { + //No nice break found, add a hard break + $pos = self::MAX_LINE_LENGTH - 1; + $lines_out[] = substr($line, 0, $pos); + $line = substr($line, $pos); + } else { + //Break at the found point + $lines_out[] = substr($line, 0, $pos); + //Move along by the amount we dealt with + $line = substr($line, $pos + 1); + } + //If processing headers add a LWSP-char to the front of new line RFC822 section 3.1.1 + if ($in_headers) { + $line = "\t" . $line; + } + } + $lines_out[] = $line; + + //Send the lines to the server + foreach ($lines_out as $line_out) { + //RFC2821 section 4.5.2 + if (!empty($line_out) && $line_out[0] === '.') { + $line_out = '.' . $line_out; + } + $this->client_send($line_out . static::LE, 'DATA'); + } + } + + //Message data has been sent, complete the command + //Increase timelimit for end of DATA command + $savetimelimit = $this->Timelimit; + $this->Timelimit *= 2; + $result = $this->sendCommand('DATA END', '.', 250); + $this->recordLastTransactionID(); + //Restore timelimit + $this->Timelimit = $savetimelimit; + + return $result; + } + + /** + * Send an SMTP HELO or EHLO command. + * Used to identify the sending server to the receiving server. + * This makes sure that client and server are in a known state. + * Implements RFC 821: HELO + * and RFC 2821 EHLO. + * + * @param string $host The host name or IP to connect to + * + * @return bool + */ + public function hello($host = '') + { + //Try extended hello first (RFC 2821) + return $this->sendHello('EHLO', $host) or $this->sendHello('HELO', $host); + } + + /** + * Send an SMTP HELO or EHLO command. + * Low-level implementation used by hello(). + * + * @param string $hello The HELO string + * @param string $host The hostname to say we are + * + * @return bool + * + * @see hello() + */ + protected function sendHello($hello, $host) + { + $noerror = $this->sendCommand($hello, $hello . ' ' . $host, 250); + $this->helo_rply = $this->last_reply; + if ($noerror) { + $this->parseHelloFields($hello); + } else { + $this->server_caps = null; + } + + return $noerror; + } + + /** + * Parse a reply to HELO/EHLO command to discover server extensions. + * In case of HELO, the only parameter that can be discovered is a server name. + * + * @param string $type `HELO` or `EHLO` + */ + protected function parseHelloFields($type) + { + $this->server_caps = []; + $lines = explode("\n", $this->helo_rply); + + foreach ($lines as $n => $s) { + //First 4 chars contain response code followed by - or space + $s = trim(substr($s, 4)); + if (empty($s)) { + continue; + } + $fields = explode(' ', $s); + if (!empty($fields)) { + if (!$n) { + $name = $type; + $fields = $fields[0]; + } else { + $name = array_shift($fields); + switch ($name) { + case 'SIZE': + $fields = ($fields ? $fields[0] : 0); + break; + case 'AUTH': + if (!is_array($fields)) { + $fields = []; + } + break; + default: + $fields = true; + } + } + $this->server_caps[$name] = $fields; + } + } + } + + /** + * Send an SMTP MAIL command. + * Starts a mail transaction from the email address specified in + * $from. Returns true if successful or false otherwise. If True + * the mail transaction is started and then one or more recipient + * commands may be called followed by a data command. + * Implements RFC 821: MAIL FROM: . + * + * @param string $from Source address of this message + * + * @return bool + */ + public function mail($from) + { + $useVerp = ($this->do_verp ? ' XVERP' : ''); + + return $this->sendCommand( + 'MAIL FROM', + 'MAIL FROM:<' . $from . '>' . $useVerp, + 250 + ); + } + + /** + * Send an SMTP QUIT command. + * Closes the socket if there is no error or the $close_on_error argument is true. + * Implements from RFC 821: QUIT . + * + * @param bool $close_on_error Should the connection close if an error occurs? + * + * @return bool + */ + public function quit($close_on_error = true) + { + $noerror = $this->sendCommand('QUIT', 'QUIT', 221); + $err = $this->error; //Save any error + if ($noerror || $close_on_error) { + $this->close(); + $this->error = $err; //Restore any error from the quit command + } + + return $noerror; + } + + /** + * Send an SMTP RCPT command. + * Sets the TO argument to $toaddr. + * Returns true if the recipient was accepted false if it was rejected. + * Implements from RFC 821: RCPT TO: . + * + * @param string $address The address the message is being sent to + * @param string $dsn Comma separated list of DSN notifications. NEVER, SUCCESS, FAILURE + * or DELAY. If you specify NEVER all other notifications are ignored. + * + * @return bool + */ + public function recipient($address, $dsn = '') + { + if (empty($dsn)) { + $rcpt = 'RCPT TO:<' . $address . '>'; + } else { + $dsn = strtoupper($dsn); + $notify = []; + + if (strpos($dsn, 'NEVER') !== false) { + $notify[] = 'NEVER'; + } else { + foreach (['SUCCESS', 'FAILURE', 'DELAY'] as $value) { + if (strpos($dsn, $value) !== false) { + $notify[] = $value; + } + } + } + + $rcpt = 'RCPT TO:<' . $address . '> NOTIFY=' . implode(',', $notify); + } + + return $this->sendCommand( + 'RCPT TO', + $rcpt, + [250, 251] + ); + } + + /** + * Send an SMTP RSET command. + * Abort any transaction that is currently in progress. + * Implements RFC 821: RSET . + * + * @return bool True on success + */ + public function reset() + { + return $this->sendCommand('RSET', 'RSET', 250); + } + + /** + * Send a command to an SMTP server and check its return code. + * + * @param string $command The command name - not sent to the server + * @param string $commandstring The actual command to send + * @param int|array $expect One or more expected integer success codes + * + * @return bool True on success + */ + protected function sendCommand($command, $commandstring, $expect) + { + if (!$this->connected()) { + $this->setError("Called $command without being connected"); + + return false; + } + //Reject line breaks in all commands + if ((strpos($commandstring, "\n") !== false) || (strpos($commandstring, "\r") !== false)) { + $this->setError("Command '$command' contained line breaks"); + + return false; + } + $this->client_send($commandstring . static::LE, $command); + + $this->last_reply = $this->get_lines(); + // Fetch SMTP code and possible error code explanation + $matches = []; + if (preg_match('/^([\d]{3})[ -](?:([\d]\\.[\d]\\.[\d]{1,2}) )?/', $this->last_reply, $matches)) { + $code = (int) $matches[1]; + $code_ex = (count($matches) > 2 ? $matches[2] : null); + // Cut off error code from each response line + $detail = preg_replace( + "/{$code}[ -]" . + ($code_ex ? str_replace('.', '\\.', $code_ex) . ' ' : '') . '/m', + '', + $this->last_reply + ); + } else { + // Fall back to simple parsing if regex fails + $code = (int) substr($this->last_reply, 0, 3); + $code_ex = null; + $detail = substr($this->last_reply, 4); + } + + $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER); + + if (!in_array($code, (array) $expect, true)) { + $this->setError( + "$command command failed", + $detail, + $code, + $code_ex + ); + $this->edebug( + 'SMTP ERROR: ' . $this->error['error'] . ': ' . $this->last_reply, + self::DEBUG_CLIENT + ); + + return false; + } + + $this->setError(''); + + return true; + } + + /** + * Send an SMTP SAML command. + * Starts a mail transaction from the email address specified in $from. + * Returns true if successful or false otherwise. If True + * the mail transaction is started and then one or more recipient + * commands may be called followed by a data command. This command + * will send the message to the users terminal if they are logged + * in and send them an email. + * Implements RFC 821: SAML FROM: . + * + * @param string $from The address the message is from + * + * @return bool + */ + public function sendAndMail($from) + { + return $this->sendCommand('SAML', "SAML FROM:$from", 250); + } + + /** + * Send an SMTP VRFY command. + * + * @param string $name The name to verify + * + * @return bool + */ + public function verify($name) + { + return $this->sendCommand('VRFY', "VRFY $name", [250, 251]); + } + + /** + * Send an SMTP NOOP command. + * Used to keep keep-alives alive, doesn't actually do anything. + * + * @return bool + */ + public function noop() + { + return $this->sendCommand('NOOP', 'NOOP', 250); + } + + /** + * Send an SMTP TURN command. + * This is an optional command for SMTP that this class does not support. + * This method is here to make the RFC821 Definition complete for this class + * and _may_ be implemented in future. + * Implements from RFC 821: TURN . + * + * @return bool + */ + public function turn() + { + $this->setError('The SMTP TURN command is not implemented'); + $this->edebug('SMTP NOTICE: ' . $this->error['error'], self::DEBUG_CLIENT); + + return false; + } + + /** + * Send raw data to the server. + * + * @param string $data The data to send + * @param string $command Optionally, the command this is part of, used only for controlling debug output + * + * @return int|bool The number of bytes sent to the server or false on error + */ + public function client_send($data, $command = '') + { + //If SMTP transcripts are left enabled, or debug output is posted online + //it can leak credentials, so hide credentials in all but lowest level + if (self::DEBUG_LOWLEVEL > $this->do_debug && + in_array($command, ['User & Password', 'Username', 'Password'], true)) { + $this->edebug('CLIENT -> SERVER: [credentials hidden]', self::DEBUG_CLIENT); + } else { + $this->edebug('CLIENT -> SERVER: ' . $data, self::DEBUG_CLIENT); + } + set_error_handler([$this, 'errorHandler']); + $result = fwrite($this->smtp_conn, $data); + restore_error_handler(); + + return $result; + } + + /** + * Get the latest error. + * + * @return array + */ + public function getError() + { + return $this->error; + } + + /** + * Get SMTP extensions available on the server. + * + * @return array|null + */ + public function getServerExtList() + { + return $this->server_caps; + } + + /** + * Get metadata about the SMTP server from its HELO/EHLO response. + * The method works in three ways, dependent on argument value and current state: + * 1. HELO/EHLO has not been sent - returns null and populates $this->error. + * 2. HELO has been sent - + * $name == 'HELO': returns server name + * $name == 'EHLO': returns boolean false + * $name == any other string: returns null and populates $this->error + * 3. EHLO has been sent - + * $name == 'HELO'|'EHLO': returns the server name + * $name == any other string: if extension $name exists, returns True + * or its options (e.g. AUTH mechanisms supported). Otherwise returns False. + * + * @param string $name Name of SMTP extension or 'HELO'|'EHLO' + * + * @return string|bool|null + */ + public function getServerExt($name) + { + if (!$this->server_caps) { + $this->setError('No HELO/EHLO was sent'); + + return; + } + + if (!array_key_exists($name, $this->server_caps)) { + if ('HELO' === $name) { + return $this->server_caps['EHLO']; + } + if ('EHLO' === $name || array_key_exists('EHLO', $this->server_caps)) { + return false; + } + $this->setError('HELO handshake was used; No information about server extensions available'); + + return; + } + + return $this->server_caps[$name]; + } + + /** + * Get the last reply from the server. + * + * @return string + */ + public function getLastReply() + { + return $this->last_reply; + } + + /** + * Read the SMTP server's response. + * Either before eof or socket timeout occurs on the operation. + * With SMTP we can tell if we have more lines to read if the + * 4th character is '-' symbol. If it is a space then we don't + * need to read anything else. + * + * @return string + */ + protected function get_lines() + { + // If the connection is bad, give up straight away + if (!is_resource($this->smtp_conn)) { + return ''; + } + $data = ''; + $endtime = 0; + stream_set_timeout($this->smtp_conn, $this->Timeout); + if ($this->Timelimit > 0) { + $endtime = time() + $this->Timelimit; + } + $selR = [$this->smtp_conn]; + $selW = null; + while (is_resource($this->smtp_conn) && !feof($this->smtp_conn)) { + //Must pass vars in here as params are by reference + //solution for signals inspired by https://github.com/symfony/symfony/pull/6540 + set_error_handler([$this, 'errorHandler']); + $n = stream_select($selR, $selW, $selW, $this->Timelimit); + restore_error_handler(); + + if ($n === false) { + $message = $this->getError()['detail']; + + $this->edebug( + 'SMTP -> get_lines(): select failed (' . $message . ')', + self::DEBUG_LOWLEVEL + ); + + //stream_select returns false when the `select` system call is interrupted by an incoming signal, try the select again + if (stripos($message, 'interrupted system call') !== false) { + $this->edebug( + 'SMTP -> get_lines(): retrying stream_select', + self::DEBUG_LOWLEVEL + ); + $this->setError(''); + continue; + } + + break; + } + + if (!$n) { + $this->edebug( + 'SMTP -> get_lines(): select timed-out in (' . $this->Timelimit . ' sec)', + self::DEBUG_LOWLEVEL + ); + break; + } + + //Deliberate noise suppression - errors are handled afterwards + $str = @fgets($this->smtp_conn, self::MAX_REPLY_LENGTH); + $this->edebug('SMTP INBOUND: "' . trim($str) . '"', self::DEBUG_LOWLEVEL); + $data .= $str; + // If response is only 3 chars (not valid, but RFC5321 S4.2 says it must be handled), + // or 4th character is a space or a line break char, we are done reading, break the loop. + // String array access is a significant micro-optimisation over strlen + if (!isset($str[3]) || $str[3] === ' ' || $str[3] === "\r" || $str[3] === "\n") { + break; + } + // Timed-out? Log and break + $info = stream_get_meta_data($this->smtp_conn); + if ($info['timed_out']) { + $this->edebug( + 'SMTP -> get_lines(): stream timed-out (' . $this->Timeout . ' sec)', + self::DEBUG_LOWLEVEL + ); + break; + } + // Now check if reads took too long + if ($endtime && time() > $endtime) { + $this->edebug( + 'SMTP -> get_lines(): timelimit reached (' . + $this->Timelimit . ' sec)', + self::DEBUG_LOWLEVEL + ); + break; + } + } + + return $data; + } + + /** + * Enable or disable VERP address generation. + * + * @param bool $enabled + */ + public function setVerp($enabled = false) + { + $this->do_verp = $enabled; + } + + /** + * Get VERP address generation mode. + * + * @return bool + */ + public function getVerp() + { + return $this->do_verp; + } + + /** + * Set error messages and codes. + * + * @param string $message The error message + * @param string $detail Further detail on the error + * @param string $smtp_code An associated SMTP error code + * @param string $smtp_code_ex Extended SMTP code + */ + protected function setError($message, $detail = '', $smtp_code = '', $smtp_code_ex = '') + { + $this->error = [ + 'error' => $message, + 'detail' => $detail, + 'smtp_code' => $smtp_code, + 'smtp_code_ex' => $smtp_code_ex, + ]; + } + + /** + * Set debug output method. + * + * @param string|callable $method The name of the mechanism to use for debugging output, or a callable to handle it + */ + public function setDebugOutput($method = 'echo') + { + $this->Debugoutput = $method; + } + + /** + * Get debug output method. + * + * @return string + */ + public function getDebugOutput() + { + return $this->Debugoutput; + } + + /** + * Set debug output level. + * + * @param int $level + */ + public function setDebugLevel($level = 0) + { + $this->do_debug = $level; + } + + /** + * Get debug output level. + * + * @return int + */ + public function getDebugLevel() + { + return $this->do_debug; + } + + /** + * Set SMTP timeout. + * + * @param int $timeout The timeout duration in seconds + */ + public function setTimeout($timeout = 0) + { + $this->Timeout = $timeout; + } + + /** + * Get SMTP timeout. + * + * @return int + */ + public function getTimeout() + { + return $this->Timeout; + } + + /** + * Reports an error number and string. + * + * @param int $errno The error number returned by PHP + * @param string $errmsg The error message returned by PHP + * @param string $errfile The file the error occurred in + * @param int $errline The line number the error occurred on + */ + protected function errorHandler($errno, $errmsg, $errfile = '', $errline = 0) + { + $notice = 'Connection failed.'; + $this->setError( + $notice, + $errmsg, + (string) $errno + ); + $this->edebug( + "$notice Error #$errno: $errmsg [$errfile line $errline]", + self::DEBUG_CONNECTION + ); + } + + /** + * Extract and return the ID of the last SMTP transaction based on + * a list of patterns provided in SMTP::$smtp_transaction_id_patterns. + * Relies on the host providing the ID in response to a DATA command. + * If no reply has been received yet, it will return null. + * If no pattern was matched, it will return false. + * + * @return bool|string|null + */ + protected function recordLastTransactionID() + { + $reply = $this->getLastReply(); + + if (empty($reply)) { + $this->last_smtp_transaction_id = null; + } else { + $this->last_smtp_transaction_id = false; + foreach ($this->smtp_transaction_id_patterns as $smtp_transaction_id_pattern) { + $matches = []; + if (preg_match($smtp_transaction_id_pattern, $reply, $matches)) { + $this->last_smtp_transaction_id = trim($matches[1]); + break; + } + } + } + + return $this->last_smtp_transaction_id; + } + + /** + * Get the queue/transaction ID of the last SMTP transaction + * If no reply has been received yet, it will return null. + * If no pattern was matched, it will return false. + * + * @return bool|string|null + * + * @see recordLastTransactionID() + */ + public function getLastTransactionID() + { + return $this->last_smtp_transaction_id; + } +} diff --git a/admin/lib/web/galleries.php b/admin/lib/web/galleries.php new file mode 100644 index 0000000..cb77006 --- /dev/null +++ b/admin/lib/web/galleries.php @@ -0,0 +1,56 @@ +dbh = $dblink; + } + + public function getGalleries($parentid){ + + } + + public function getGallery($id){ + + } + + public function addgallery(){ + + } + + public function duplicateGallery($id){ + + } + + public function removeGallery($id){ + + } + + public function updateGallery($id,$data){ + + } + + public function newItem(){ + + } + + public function setItemFile($id,$file){ + + } + + public function removeItem($id){ + + } + + public function duplicateItem($id){ + + } + + public function updateItem($id,$data){ + + } + + public function __destruct(){ + $this->dbh = null; + } +} +?> \ No newline at end of file diff --git a/admin/lib/web/rendezvous.php b/admin/lib/web/rendezvous.php new file mode 100644 index 0000000..86cb73b --- /dev/null +++ b/admin/lib/web/rendezvous.php @@ -0,0 +1,36 @@ +dbh = $dblink; + } + + + public function addWorkplan(){ + + } + + public function updateWorkplan($id,$data){ + + } + + public function removeWorkplan($id){ + + } + + public function duplicateWorkplan($id){ + + } + + public function updateWorkplanDay($id,$data){ + + } + + + + public function __destruct(){ + $this->dbh = null; + } +} + +?> \ No newline at end of file diff --git a/admin/lib/web/templates.php b/admin/lib/web/templates.php new file mode 100644 index 0000000..7ed8c0c --- /dev/null +++ b/admin/lib/web/templates.php @@ -0,0 +1,64 @@ +templatedir = $templatedir; + } + + public function __destruct(){ + } + + public function gettemplatefiles(){ + return $this->getTemplateContents($this->templatedir); + } + + public function getmediafiles(){ + return $this->getMediaContents($this->templatedir); + } + + + + private function getMediaContents($dir, &$results = array()) { + $files = scandir($dir); + foreach ($files as $key => $value) { + $path = $dir . DIRECTORY_SEPARATOR . $value; + if (!is_dir($path)) { + $relpath = substr($path,strlen($this->templatedir)+ 1); + $cat = ""; + if (substr($relpath,0,4) == "img/" ){ $cat = "Site";} + elseif (substr($relpath,0,5) == "media/" ){ $cat = "Media";} + if ($cat != ""){ + $results[] = array("category" => $cat,"filepath" => $relpath,"folder" => substr($relpath,0,strlen(dirname($relpath))),"filename" => basename($relpath)); + } + + } else if ((substr($value,0,1) != "." ) && (substr($path,0,3) != 'lib')) { + $this->getMediaContents($path, $results); + } + } + return $results; + } + + private function getTemplateContents($dir, &$results = array()) { + $files = scandir($dir); + foreach ($files as $key => $value) { + $path = $dir . DIRECTORY_SEPARATOR . $value; + if (!is_dir($path)) { + $relpath = substr($path,strlen($this->templatedir)+ 1); + $cat = ""; + if (substr($relpath,0,4) == "css/" ){ $cat= "StyleSheet"; } + elseif (substr($relpath,0,5) == "tmpl/" ){ $cat = "Template"; } + elseif (substr($relpath,0,3) == "js/" ) { $cat = "JavaScript";} + if ($cat != ""){ + $results[] = array("category" => $cat,"filepath" => $relpath,"folder" => substr($relpath,0,strlen(dirname($relpath))),"filename" => basename($relpath)); + } + + } else if ((substr($value,0,1) != "." ) && (substr($path,0,3) != 'lib')) { + $this->getTemplateContents($path, $results); + #$results[] = $path; + } + } + return $results; + } + +} +?> \ No newline at end of file diff --git a/admin/lib/web/webmenu.php b/admin/lib/web/webmenu.php new file mode 100644 index 0000000..b8aa838 --- /dev/null +++ b/admin/lib/web/webmenu.php @@ -0,0 +1,48 @@ +dbh = $dblink; + } + + public function getMenu($idparent){ + + } + + public function addMenu(){ + + } + + public function deleteMenu(){ + + } + + public function updateMenu(){ + + } + + public function duplicateMenu(){ + + } + + public function addMenuItem(){ + + } + + public function removeMenuItem($id){ + + } + + public function updateMenuItem($id,$data){ + + } + + public function duplicateMenuItem($id){ + + } + + public function __destruct(){ + $this->dbh = null; + } + } +?> \ No newline at end of file diff --git a/admin/lib/web/websites.php b/admin/lib/web/websites.php new file mode 100644 index 0000000..470e86b --- /dev/null +++ b/admin/lib/web/websites.php @@ -0,0 +1,29 @@ +dbh = $dblink; + } + + public function addWebsite($id){ + + } + + public function updateWebsite($id,$data){ + + } + + public function removeWebsite($id){ + + } + + public function duplicateWebsite($id){ + + } + + + public function __destruct(){ + $this->dbh = null; + } + } +?> \ No newline at end of file diff --git a/admin/tmpl/.htaccess b/admin/tmpl/.htaccess new file mode 100644 index 0000000..908fc52 --- /dev/null +++ b/admin/tmpl/.htaccess @@ -0,0 +1,5 @@ +#RewriteEngine On +#RewriteBase / +#RewriteCond %{HTTP_COOKIE} !potlu= [NC] +#RewriteRule .* "%{REQUEST_SCHEME}://%{HTTP_HOST}/backoffice/login.html" [L] +Require all denied \ No newline at end of file diff --git a/admin/tmpl/index.html.mustache b/admin/tmpl/index.html.mustache new file mode 100644 index 0000000..8c43185 --- /dev/null +++ b/admin/tmpl/index.html.mustache @@ -0,0 +1,55 @@ + + + + + + Website Admin + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ {{ pagedata }} +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/admin/tmpl/login.html.mustache b/admin/tmpl/login.html.mustache new file mode 100644 index 0000000..a0e1704 --- /dev/null +++ b/admin/tmpl/login.html.mustache @@ -0,0 +1,66 @@ + + + + + + + + + OLD BELL - Site Admin + + + + + + + + + + + + + + + + + + + + +
+ +
+
  +
+
+
+ logo +
+
+ {{pagedata}} +
+ +
+
  +
+
+ +
+ + + diff --git a/admin/tmpl/pages/config/rendezvous.html.mustache b/admin/tmpl/pages/config/rendezvous.html.mustache new file mode 100644 index 0000000..e69de29 diff --git a/admin/tmpl/pages/config/shop.html.mustache b/admin/tmpl/pages/config/shop.html.mustache new file mode 100644 index 0000000..e69de29 diff --git a/admin/tmpl/pages/config/site.html.mustache b/admin/tmpl/pages/config/site.html.mustache new file mode 100644 index 0000000..e69de29 diff --git a/admin/tmpl/pages/config/template.html.mustache b/admin/tmpl/pages/config/template.html.mustache new file mode 100644 index 0000000..4c49fdb --- /dev/null +++ b/admin/tmpl/pages/config/template.html.mustache @@ -0,0 +1,32 @@ +
+ retour +
Galleries
+
+ + + + +
+
+ +
+ +
+
+
+
+ + + \ No newline at end of file diff --git a/admin/tmpl/pages/config/users.html.mustache b/admin/tmpl/pages/config/users.html.mustache new file mode 100644 index 0000000..e69de29 diff --git a/admin/tmpl/pages/error.html.mustache b/admin/tmpl/pages/error.html.mustache new file mode 100644 index 0000000..31ab5ed --- /dev/null +++ b/admin/tmpl/pages/error.html.mustache @@ -0,0 +1,2 @@ +

Cette page n'existe pas!

+
{{config}}
\ No newline at end of file diff --git a/admin/tmpl/pages/galleries.html.mustache b/admin/tmpl/pages/galleries.html.mustache new file mode 100644 index 0000000..82cd1b3 --- /dev/null +++ b/admin/tmpl/pages/galleries.html.mustache @@ -0,0 +1,28 @@ +
+ retour +
Galleries
+
+ + + + +
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/admin/tmpl/pages/home.html.mustache b/admin/tmpl/pages/home.html.mustache new file mode 100644 index 0000000..b249c75 --- /dev/null +++ b/admin/tmpl/pages/home.html.mustache @@ -0,0 +1,45 @@ +
+ +
{{ sitename }}
+ Logout +
+
+
+
+
+

Contenu

+
+ +
+
+
+ +
+
+ + \ No newline at end of file diff --git a/admin/tmpl/pages/login/forgotpassword.html.mustache b/admin/tmpl/pages/login/forgotpassword.html.mustache new file mode 100644 index 0000000..3205836 --- /dev/null +++ b/admin/tmpl/pages/login/forgotpassword.html.mustache @@ -0,0 +1,20 @@ +
+

Mot de passe oublié?

+
Demander un nouveau mot de passe
+
+
+
+ + + + +
+ +
+ +
+ + +
\ No newline at end of file diff --git a/admin/tmpl/pages/login/login.html.mustache b/admin/tmpl/pages/login/login.html.mustache new file mode 100644 index 0000000..3ab8836 --- /dev/null +++ b/admin/tmpl/pages/login/login.html.mustache @@ -0,0 +1,23 @@ +
+

Accès Client

+
+
+
+ + +
+
+ + +
+
+ +
+ + +
+ +
+
\ No newline at end of file diff --git a/admin/tmpl/pages/login/message.html.mustache b/admin/tmpl/pages/login/message.html.mustache new file mode 100644 index 0000000..e9d05ec --- /dev/null +++ b/admin/tmpl/pages/login/message.html.mustache @@ -0,0 +1,7 @@ +
[% message %]
+ +
+ +
\ No newline at end of file diff --git a/admin/tmpl/pages/orders.html.mustache b/admin/tmpl/pages/orders.html.mustache new file mode 100644 index 0000000..e69de29 diff --git a/admin/tmpl/pages/rendezvous.html.mustache b/admin/tmpl/pages/rendezvous.html.mustache new file mode 100644 index 0000000..e69de29 diff --git a/admin/tmpl/pages/shop.html.mustache b/admin/tmpl/pages/shop.html.mustache new file mode 100644 index 0000000..e69de29 diff --git a/admin/tmpl/pages/websites.html.mustache b/admin/tmpl/pages/websites.html.mustache new file mode 100644 index 0000000..e69de29 diff --git a/admin/upload.php b/admin/upload.php new file mode 100644 index 0000000..e69de29 diff --git a/dev/appicons.json b/dev/appicons.json new file mode 100644 index 0000000..31497e4 --- /dev/null +++ b/dev/appicons.json @@ -0,0 +1 @@ +{"IcoMoonType":"selection","icons":[{"icon":{"paths":["M256 80.171v153.6h768v-153.6h-768zM0 233.771h153.6v-153.6h-153.6v153.6zM256 592.171h768v-153.6h-768v153.6zM0 592.171h153.6v-153.6h-153.6v153.6zM256 950.571h768v-153.6h-768v153.6zM0 950.571h153.6v-153.6h-153.6v153.6z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a3_list"]},"attrs":[{}],"properties":{"order":60,"id":143,"name":"list","prevSize":32,"code":59648},"setIdx":0,"setId":1,"iconIdx":3},{"icon":{"paths":["M0 446.251h1024v216.661h-1024v-216.661z","M0 807.381h1023.659v216.619h-1023.659v-216.619z","M0 85.163h1024v216.661h-1024v-216.661z"],"attrs":[{},{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a5_menu"]},"attrs":[{},{},{}],"properties":{"order":38,"id":141,"name":"menu","prevSize":32,"code":59649},"setIdx":0,"setId":1,"iconIdx":5},{"icon":{"paths":["M1024 1023.915l-1024 0.085v-428.672l153.6-0.171v275.243l718.421 0.768v-275.84l151.979-0.085z","M411.989 279.509v-279.509h192.512v279.509h211.456l-303.957 385.067-303.915-385.067z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a7_import"]},"attrs":[{},{}],"properties":{"order":65,"id":139,"name":"mport","prevSize":32,"code":59650},"setIdx":0,"setId":1,"iconIdx":7},{"icon":{"paths":["M1024 1023.915l-1024 0.085v-428.672l153.6-0.171v275.243l718.421 0.768v-275.84l151.979-0.085z","M411.989 385.067v279.509h192.512v-279.509h211.456l-303.957-385.067-303.915 385.067z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a9_export"]},"attrs":[{},{}],"properties":{"order":68,"id":137,"name":"export","prevSize":32,"code":59651},"setIdx":0,"setId":1,"iconIdx":9},{"icon":{"paths":["M896.896 395.648h-271.317v-271.275h-225.365v271.275h-271.317v225.408h271.317v271.275h225.365v-271.275h271.317z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a15_smallAdd"]},"attrs":[{}],"properties":{"order":19,"id":131,"name":"add","prevSize":32,"code":59652},"setIdx":0,"setId":1,"iconIdx":15},{"icon":{"paths":["M979.499 89.045h-267.179c0-27.051 5.205-89.045-51.925-89.045h-252.032c-56.789 0-52.139 61.995-52.139 89.045h-267.093c-29.355 0-44.501 61.995-44.501 89.003h979.371c0-26.965-15.147-89.003-44.501-89.003zM133.632 222.592l-2.347 745.387c0 30.933 27.179 56.021 60.715 56.021h683.989c33.579 0 60.757-25.088 60.757-55.979l-1.792-745.387h-801.323zM311.723 934.827h-89.045v-623.189h89.045v623.189zM489.771 934.827h-89.045v-623.189h89.003v623.189zM667.819 934.827h-89.045v-623.189h89.045v623.189zM845.909 934.827h-89.003v-623.189h89.003v623.189z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a25_trash"]},"attrs":[{}],"properties":{"order":17,"id":121,"name":"trash","prevSize":32,"code":59653},"setIdx":0,"setId":1,"iconIdx":25},{"icon":{"paths":["M704.768 157.141l-191.872 191.872-191.829-191.829-159.317 159.317 191.829 191.872-191.872 191.829 159.36 159.36 191.872-191.829 191.829 191.829 159.36-159.36-191.787-191.787 191.829-191.872z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a31_smallX"]},"attrs":[{}],"properties":{"order":20,"id":115,"name":"close","prevSize":32,"code":59654},"setIdx":0,"setId":1,"iconIdx":31},{"icon":{"paths":["M725.077 1024l-517.717-512.043 517.717-511.957 135.083 133.547-382.677 378.411 382.677 378.453-135.083 133.589z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a33_leftChevron"]},"attrs":[{}],"properties":{"order":21,"id":113,"name":"back","prevSize":32,"code":59655},"setIdx":0,"setId":1,"iconIdx":33},{"icon":{"paths":["M342.4 1024l-135.040-133.589 382.635-378.453-382.635-378.411 135.040-133.547 517.717 512-517.717 512z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a35_rightChevron"]},"attrs":[{}],"properties":{"order":22,"id":111,"name":"next","prevSize":32,"code":59656},"setIdx":0,"setId":1,"iconIdx":35},{"icon":{"paths":["M593.323 356.821h430.677v296.661h-430.677v325.76l-593.323-468.309 593.323-468.267z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a37_leftArrow"]},"attrs":[{}],"properties":{"order":64,"id":109,"name":"back2","prevSize":32,"code":59657},"setIdx":0,"setId":1,"iconIdx":37},{"icon":{"paths":["M430.677 356.821h-430.677v296.661h430.677v325.76l593.323-468.309-593.323-468.267z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a39_rightArrow"]},"attrs":[{}],"properties":{"order":63,"id":107,"name":"next2","prevSize":32,"code":59658},"setIdx":0,"setId":1,"iconIdx":39},{"icon":{"paths":["M512 0c-282.325 0-512 229.675-512 512s229.675 512 512 512c282.325 0 512-229.675 512-512s-229.675-512-512-512zM825.216 860.544c2.219-4.437 2.347-7.509-0.469-8.704-21.973-9.515-43.605-18.688-65.109-28.032-21.461-9.429-42.325-18.603-62.507-27.477-20.267-8.917-38.315-16.768-54.101-23.68v-86.571c0-4.011 1.195-10.197 3.712-18.944 2.432-8.619 5.205-17.536 8.107-27.008 3.413-10.795 7.125-22.4 11.136-34.645 8.832-16.512 16.043-34.603 22.571-53.675 1.835 1.152 3.755 2.133 5.803 2.517 19.285 3.328 33.835-33.408 38.016-78.208 4.011-43.989 8.491-57.771-20.907-60.032 0-2.048 0.427-4.096 0.427-6.101 0-50.389-5.205-92.928-15.957-127.701-10.539-34.688-11.051-59.733-29.483-81.237-18.475-21.461-54.101-40.192-78.507-49.92-24.576-9.6-50.475-14.336-78.080-14.336-28.203 0-54.699 12.459-79.189 22.315-24.448 9.941-63.744 20.224-81.963 41.941-18.261 21.76-14.507 47.787-25.131 82.347-10.325 33.749-12.715 83.584-12.715 132.523-0.555 0-0.896 0-1.323 0-30.933 1.92-26.155 15.531-22.059 60.245 4.181 44.8 18.688 81.493 37.973 78.123 1.92-0.384 3.669-1.237 5.376-2.304 6.741 20.139 14.251 39.125 23.552 56.32 3.797 11.307 7.339 22.059 10.325 31.787 2.475 8.363 4.821 16.64 6.997 24.747 2.176 8.277 3.883 14.251 4.779 18.176v84.437c-15.275 6.912-32.939 14.805-53.291 23.765-20.224 8.832-41.685 18.091-64.427 28.032-22.571 9.899-45.483 19.712-68.395 29.611-1.024 0.469-1.621 1.237-2.176 2.005-89.472-85.461-145.536-205.611-145.536-338.859 0-258.773 210.56-469.333 469.333-469.333s469.333 210.56 469.333 469.333c0 138.368-60.544 262.528-156.117 348.544z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a44_contactOutline"]},"attrs":[{}],"properties":{"order":25,"id":102,"name":"user","prevSize":32,"code":59659},"setIdx":0,"setId":1,"iconIdx":44},{"icon":{"paths":["M512 0c-282.325 0-512 229.675-512 512s229.675 512 512 512c282.325 0 512-229.717 512-512s-229.675-512-512-512zM512 42.667c258.773 0 469.333 210.56 469.333 469.333 0 70.869-16.256 137.856-44.501 198.187-5.973-2.645-12.032-5.291-17.792-7.851-10.496-4.565-19.84-8.661-28.075-12.331v-44.971c0-2.091 0.683-5.333 1.92-9.813s2.645-9.173 4.267-14.123c1.749-5.547 3.669-11.563 5.76-17.963 4.565-8.576 8.32-18.048 11.733-27.861 0.896 0.64 2.005 1.067 2.987 1.28 10.069 1.664 17.579-17.323 19.755-40.619 2.091-22.912 4.48-30.037-10.837-31.189 0-1.109 0.171-2.133 0.171-3.243 0-26.112-2.645-48.256-8.235-66.347-5.504-18.091-5.76-31.104-15.317-42.197-9.685-11.179-28.16-20.864-40.832-25.899-12.757-4.992-26.155-7.509-40.576-7.509-14.677 0-28.501 6.4-41.173 11.605-12.672 5.163-33.067 10.496-42.496 21.803-9.6 11.307-7.68 24.789-13.099 42.752-5.419 17.621-6.656 43.52-6.656 68.907-0.256 0-0.427 0-0.683 0-6.4 0.427-9.771 1.877-11.52 4.821 2.731 4.736 1.579 13.312 0.256 27.605 2.176 22.699 9.685 41.173 19.499 39.509 0.896-0.213 1.92-0.64 2.731-1.195 3.499 10.411 7.424 20.437 12.245 29.312 2.091 5.931 3.84 11.477 5.419 16.469 1.237 4.437 2.517 8.661 3.669 12.971 1.152 4.267 2.005 7.339 2.517 9.429v43.904c-8.021 3.541-17.152 7.637-27.733 12.288-10.496 4.565-21.589 9.472-33.493 14.592-5.589 2.475-11.179 4.907-16.768 7.253 3.584 1.579 7.083 3.157 11.093 4.864 11.819 5.248 23.936 10.581 36.48 16.043 12.587 5.504 25.259 10.88 38.101 16.427 12.843 5.504 25.088 10.581 36.651 15.403 11.52 4.693 21.845 8.96 31.104 12.8 9.259 3.755 16.683 6.571 22.485 8.533 5.76 2.091 12.928 10.411 19.371 19.499-4.907 5.803-10.155 11.307-15.317 16.853-0.171-0.171-0.213-0.384-0.384-0.555-8.021-9.515-18.517-16.512-31.403-21.12-6.187-2.133-14.165-5.248-24.064-9.216-9.899-4.096-20.992-8.661-33.323-13.696-12.331-5.12-25.429-10.539-39.083-16.427-13.739-5.973-27.349-11.691-40.661-17.536-13.483-5.931-26.496-11.605-39.168-17.152-12.587-5.589-23.936-10.496-33.749-14.848v-54.144c0-2.475 0.683-6.357 2.347-11.861 1.493-5.333 3.243-10.965 5.077-16.896 2.091-6.741 4.437-13.952 6.912-21.717 5.504-10.24 9.984-21.589 14.080-33.493 1.152 0.768 2.347 1.28 3.669 1.579 12.075 2.048 21.163-20.864 23.68-48.896 2.603-27.52 5.419-36.139-13.013-37.547 0-1.323 0.256-2.56 0.256-3.883 0-31.403-3.243-58.069-9.899-79.787-6.571-21.717-6.912-37.376-18.517-50.731-11.563-13.44-33.835-25.173-49.067-31.189-15.317-6.016-31.573-9.003-48.811-9.003-17.621 0-34.219 7.765-49.451 13.909-15.317 6.229-39.936 12.672-51.285 26.283-11.52 13.568-9.173 29.781-15.787 51.413-6.528 21.077-8.021 52.309-8.021 82.816-0.299 0-0.512 0-0.768 0-19.371 1.237-16.384 9.728-13.781 37.717 2.56 27.947 11.648 50.944 23.68 48.853 1.195-0.213 2.304-0.811 3.371-1.408 4.181 12.544 8.917 24.448 14.677 35.2 2.517 7.040 4.608 13.739 6.485 19.84 1.536 5.291 2.987 10.411 4.437 15.531 1.323 5.12 2.475 8.875 2.987 11.349v52.736c-9.6 4.352-20.608 9.301-33.365 14.848-12.629 5.547-26.027 11.349-40.235 17.579-14.123 6.229-28.416 12.331-42.752 18.517-14.379 6.187-27.989 12.032-41.003 17.323-12.928 5.419-24.619 10.155-35.072 14.336-10.539 4.224-19.029 7.424-25.557 9.557-12.672 4.608-22.912 11.605-30.976 21.12-4.651 5.376-8.576 10.923-12.075 16.512-7.381-7.211-14.336-14.848-21.291-22.528 7.595-7.936 15.317-14.805 20.309-16.683 6.059-1.92 14.037-4.864 23.808-8.832 9.771-3.883 20.779-8.363 32.896-13.312 12.117-4.992 24.875-10.453 38.272-16.299 13.44-5.717 26.795-11.52 40.021-17.323 13.312-5.76 25.771-11.179 37.675-16.427 1.493-0.64 2.731-1.195 4.267-1.877-5.376-2.304-10.795-4.651-16.171-6.955-11.179-4.907-22.016-9.643-32.555-14.208-10.496-4.693-19.84-8.789-28.075-12.331v-45.013c0-2.048 0.64-5.291 1.963-9.813 1.237-4.437 2.645-9.173 4.267-14.123 1.749-5.547 3.712-11.605 5.717-17.92 4.608-8.576 8.363-18.133 11.733-27.904 0.981 0.64 1.963 1.109 3.029 1.237 10.069 1.707 17.579-17.365 19.712-40.619 2.133-22.869 4.48-29.995-10.795-31.189 0-1.067 0.213-2.091 0.213-3.157 0-26.112-2.773-48.341-8.277-66.389-5.547-18.091-5.76-31.061-15.317-42.197-9.643-11.264-28.16-20.949-40.875-26.027-12.715-4.992-26.197-7.467-40.576-7.467-14.635 0-28.416 6.4-41.131 11.563s-33.152 10.496-42.539 21.845c-9.515 11.307-7.637 24.789-13.141 42.795-5.376 17.536-6.571 43.477-6.613 68.907-0.171 0-0.427-0.043-0.64 0-16.085 0.981-13.611 8.021-11.477 31.275s9.685 42.325 19.712 40.576c0.981-0.128 1.877-0.64 2.773-1.152 3.499 10.453 7.424 20.395 12.203 29.312 2.048 5.845 3.883 11.435 5.419 16.469 1.237 4.437 2.475 8.704 3.627 12.928 1.109 4.309 1.963 7.424 2.475 9.472v43.861c-7.936 3.627-17.109 7.723-27.691 12.331-7.851 3.413-16.469 7.211-25.045 10.965-31.744-63.232-50.048-134.315-50.048-209.707 0-258.816 210.56-469.333 469.333-469.333z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a46_contactsOutline"]},"attrs":[{}],"properties":{"order":26,"id":100,"name":"usergroup","prevSize":32,"code":59660},"setIdx":0,"setId":1,"iconIdx":46},{"icon":{"paths":["M551.509 862.848l110.677 102.997 264.149-268.416-110.592-102.997-264.235 268.416zM1008.811 548.693l-41.984-39.083c-19.669-18.261-50.517-17.493-69.163 1.536l-52.736 54.059 112.853 105.003 52.736-53.931c18.603-19.072 17.877-49.323-1.707-67.584zM496.555 1024l138.325-29.952-108.331-100.779-29.995 130.731z","M755.883 581.12l-137.344-57.259 0.171-0.128v-70.827c0-3.285 0.981-8.405 3.072-15.616 2.005-7.083 4.267-14.507 6.656-22.272 2.816-8.875 5.931-18.432 9.173-28.587 7.253-13.568 13.269-28.544 18.603-44.203 1.579 0.939 3.157 1.749 4.821 2.005 15.829 2.731 27.819-27.52 31.232-64.427 3.328-36.309 7.083-47.616-17.152-49.536 0-1.707 0.341-3.285 0.341-5.035 0-41.515-4.352-76.629-13.099-105.301-8.832-28.672-9.173-49.28-24.405-66.944-15.232-17.707-44.587-33.152-64.811-41.131-20.139-7.893-41.515-11.861-64.256-11.861-23.253 0-45.141 10.24-65.28 18.389-20.181 8.235-52.608 16.725-67.627 34.645-15.061 17.877-11.947 39.339-20.693 67.84-8.576 27.861-10.496 68.992-10.496 109.312-0.384 0-0.683 0-1.024 0-25.557 1.621-21.589 12.757-18.219 49.707 3.456 36.864 15.36 67.157 31.275 64.341 1.579-0.256 3.072-1.024 4.48-1.877 5.504 16.555 11.733 32.341 19.371 46.464 3.243 9.344 6.101 18.176 8.576 26.197 2.005 6.955 3.925 13.739 5.803 20.437 1.749 6.827 3.157 11.733 3.925 14.976v69.589c-12.587 5.717-27.179 12.16-43.947 19.541-16.683 7.339-34.347 14.976-53.163 23.211-18.603 8.107-37.461 16.256-56.363 24.363-18.944 8.235-36.949 15.872-54.101 22.997-17.067 6.997-32.512 13.355-46.336 18.816-13.824 5.589-25.003 9.771-33.621 12.501-16.683 6.187-30.251 15.403-40.832 27.861-10.581 12.373-18.987 25.045-25.045 38.101-7.339 15.104-12.8 31.019-16.469 47.616v77.525h478.507l248.277-251.435z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a47_account"]},"attrs":[{},{}],"properties":{"order":49,"id":99,"name":"edituser","prevSize":32,"code":59661},"setIdx":0,"setId":1,"iconIdx":47},{"icon":{"paths":["M1004.032 673.835h-23.979c-10.965 0-22.699-8.661-25.941-19.157l-13.781-33.493c-5.12-9.6-3.029-23.979 4.693-31.659l17.024-17.067c7.851-7.765 7.851-20.48 0-28.245l-28.288-28.331c-7.808-7.765-20.48-7.765-28.331 0l-17.024 16.981c-7.723 7.851-22.101 9.899-31.744 4.736l-33.451-13.824c-10.411-3.243-19.115-14.933-19.115-25.899v-23.979c0-11.008-8.96-20.011-19.968-20.011h-40.021c-10.965 0-20.011 9.003-20.011 20.011v23.979c0 11.008-8.619 22.656-19.029 25.899l-33.536 13.824c-9.771 5.163-23.979 3.072-31.829-4.736l-17.024-16.981c-7.765-7.765-20.437-7.765-28.288 0l-28.203 28.331c-7.893 7.723-7.893 20.48 0 28.245l16.896 17.067c7.851 7.68 9.984 22.101 4.736 31.659l-13.739 33.579c-3.285 10.581-14.976 19.072-25.941 19.072h-23.979c-11.008 0-20.053 9.003-20.053 20.011v40.021c0 11.008 9.045 20.011 20.053 20.011h23.979c11.008 0 22.656 8.576 25.899 19.072l13.781 33.493c5.163 9.771 3.072 24.064-4.736 31.829l-16.939 16.896c-7.851 7.851-7.851 20.565 0 28.416l28.245 28.16c7.851 7.851 20.523 7.851 28.288 0l17.024-16.981c7.765-7.765 22.101-9.813 31.701-4.651l33.579 13.824c10.411 3.243 19.029 14.933 19.029 25.984v23.936c0 10.923 9.045 19.925 20.011 19.925h40.021c11.008 0 19.968-9.003 19.968-19.925v-23.936c0-11.093 8.704-22.741 19.115-25.984l33.579-13.824c9.643-5.163 23.979-3.072 31.787 4.651l16.896 16.981c7.851 7.851 20.523 7.851 28.331 0l28.288-28.16c7.851-7.851 7.851-20.565 0-28.416l-17.024-16.896c-7.765-7.765-9.813-22.101-4.693-31.829l13.781-33.493c3.243-10.496 15.019-19.072 25.941-19.072h23.979c10.965 0 19.968-9.003 19.968-20.011v-40.021c0.043-11.008-8.96-20.011-19.925-20.011zM864.128 713.813c0 55.168-44.8 99.925-100.011 99.925-55.253 0-100.053-44.757-100.053-99.925 0-55.253 44.8-100.011 100.053-100.011 55.211 0.043 100.011 44.8 100.011 100.011z","M461.312 692.821c0-73.899 37.547-139.008 94.549-177.451l0.171-0.128v-66.773c0-3.072 0.939-7.936 2.901-14.72 1.877-6.656 4.011-13.653 6.272-21.035 2.645-8.363 5.589-17.408 8.619-26.965 6.869-12.8 12.501-26.923 17.536-41.685 1.493 0.896 2.944 1.664 4.523 1.877 15.019 2.603 26.283-25.899 29.44-60.757 3.157-34.261 6.699-44.928-16.171-46.72 0-1.579 0.341-3.115 0.341-4.736 0-39.125-4.053-72.277-12.416-99.328-8.192-27.008-8.576-46.464-22.955-63.104-14.379-16.683-42.027-31.232-61.099-38.784-18.901-7.467-39.083-11.179-60.587-11.179-21.931 0-42.539 9.643-61.568 17.365-18.987 7.68-49.579 15.701-63.744 32.64-14.208 16.896-11.264 37.12-19.541 64-8.021 26.283-9.856 65.024-9.899 103.040-0.341 0-0.64 0-0.939 0-24.107 1.536-20.352 12.075-17.152 46.933 3.285 34.773 14.507 63.317 29.483 60.672 1.451-0.213 2.859-0.939 4.224-1.749 5.163 15.616 11.051 30.464 18.219 43.819 3.072 8.789 5.76 17.109 8.064 24.704 1.877 6.528 3.712 12.971 5.461 19.328 1.664 6.4 2.987 11.093 3.712 14.123v65.621c-11.904 5.419-25.685 11.52-41.429 18.475-15.744 6.869-32.427 14.123-50.133 21.888-17.536 7.723-35.328 15.317-53.163 22.997-17.835 7.765-34.816 14.933-51.029 21.675-16.085 6.571-30.635 12.587-43.691 17.749-13.013 5.12-23.552 9.045-31.659 11.733-15.744 5.76-28.544 14.507-38.528 26.24-9.984 11.648-17.92 23.595-23.595 35.925-6.912 14.165-12.075 29.227-15.531 44.971v73.003h494.293c-20.779-32.896-32.981-71.808-32.981-113.664z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a49_administrator"]},"attrs":[{},{}],"properties":{"order":27,"id":97,"name":"userconfig","prevSize":32,"code":59662},"setIdx":0,"setId":1,"iconIdx":49},{"icon":{"paths":["M984.704 433.195h-47.232c-21.675 0-44.757-16.939-51.115-37.589l-27.136-65.963c-10.112-19.029-6.016-47.275 9.216-62.549l33.621-33.536c15.317-15.36 15.317-40.405 0-55.68l-55.808-55.68c-15.275-15.36-40.363-15.36-55.723 0l-33.579 33.493c-15.275 15.317-43.52 19.499-62.635 9.216l-65.792-27.093c-20.651-6.443-37.675-29.397-37.675-51.115v-47.275c0.043-21.675-17.707-39.424-39.381-39.424h-78.848c-21.589 0-39.339 17.749-39.339 39.424v47.189c0 21.717-16.939 44.672-37.589 51.115l-65.877 27.136c-19.2 10.283-47.275 6.144-62.635-9.259l-33.579-33.451c-15.275-15.36-40.32-15.36-55.723 0l-55.552 55.68c-15.445 15.232-15.445 40.32 0 55.68l33.323 33.536c15.36 15.275 19.627 43.52 9.301 62.549l-27.051 66.005c-6.528 20.736-29.44 37.589-51.157 37.589h-47.275c-21.675 0-39.467 17.749-39.467 39.381v78.763c0 21.675 17.792 39.339 39.467 39.339h47.232c21.717 0.128 44.629 17.067 51.072 37.76l27.179 65.92c10.197 19.243 6.101 47.403-9.301 62.677l-33.451 33.493c-15.36 15.317-15.36 40.32 0 55.851l55.637 55.509c15.403 15.403 40.448 15.403 55.723 0l33.579-33.493c15.275-15.232 43.477-19.328 62.421-9.173l66.091 27.264c20.651 6.4 37.589 29.397 37.589 51.157v47.104c0 21.675 17.749 39.253 39.339 39.253h78.848c21.675 0 39.424-17.579 39.424-39.253v-47.104c0-21.76 16.981-44.757 37.675-51.157l66.005-27.264c19.029-10.155 47.232-6.101 62.677 9.173l33.323 33.493c15.317 15.403 40.405 15.403 55.723 0l55.808-55.509c15.317-15.488 15.317-40.491 0-55.851l-33.621-33.493c-15.189-15.232-19.328-43.435-9.216-62.677l27.136-65.92c6.357-20.651 29.525-37.632 51.115-37.632h47.232c21.632 0 39.296-17.707 39.296-39.339v-78.891c0-21.632-17.664-39.381-39.296-39.381zM709.077 512c0 108.672-88.149 196.779-196.821 196.779-108.885 0-197.12-88.064-197.12-196.779 0-108.8 88.192-196.992 197.12-196.992 108.672-0.043 196.821 88.192 196.821 196.992z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a51_options"]},"attrs":[{}],"properties":{"order":62,"id":95,"name":"options","prevSize":32,"code":59663},"setIdx":0,"setId":1,"iconIdx":51},{"icon":{"paths":["M512.043 0c-282.795 0-512.043 229.248-512.043 512s229.248 512 512.043 512c282.709 0 511.957-229.248 511.957-512s-229.248-512-511.957-512zM504.277 172.8c38.613 0 68.523 28.971 68.523 67.541 0 36.693-29.909 67.584-69.504 67.584-35.712 0-67.584-30.891-67.584-67.584 0.043-38.571 31.915-67.541 68.565-67.541zM635.563 807.083h-247.125v-30.933c55.979-6.741 61.781-10.667 61.781-79.147v-191.147c0-63.744-6.741-66.603-53.12-74.325v-27.989c57.899-6.784 121.643-19.328 175.701-34.731v328.235c0 66.645 4.779 71.424 62.763 79.147v30.891z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a53_info"]},"attrs":[{}],"properties":{"order":23,"id":93,"name":"info","prevSize":32,"code":59664},"setIdx":0,"setId":1,"iconIdx":53},{"icon":{"paths":["M512.085 0c-282.752 0-511.915 229.163-511.915 512.043 0 282.581 229.163 511.957 511.915 511.957s511.915-229.376 511.915-511.957c0-282.88-229.163-512.043-511.915-512.043zM585.429 859.691h-139.648v-134.955h139.648v134.955zM718.635 466.432c-11.776 16.811-34.517 38.272-68.053 64.469l-32.981 25.685c-18.048 13.995-29.952 30.379-35.925 49.024-3.755 11.819-5.76 30.208-6.059 55.125h-126.592c1.835-52.608 6.869-88.917 14.848-109.013 8.107-20.096 28.885-43.264 62.421-69.419l34.005-26.624c11.179-8.405 20.224-17.621 27.051-27.563 12.331-17.109 18.603-35.968 18.603-56.533 0-23.68-6.912-45.184-20.651-64.64-13.867-19.456-39.125-29.269-75.733-29.269-36.053 0-61.568 11.989-76.672 35.968-15.061 23.979-22.613 48.896-22.613 74.709h-134.997c3.755-88.661 34.731-151.552 92.928-188.629 36.736-23.68 81.92-35.499 135.509-35.499 70.357 0 128.853 16.853 175.36 50.432 46.549 33.664 69.845 83.499 69.845 149.461 0 40.491-10.155 74.581-30.293 102.315z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a55_help"]},"attrs":[{}],"properties":{"order":24,"id":91,"name":"help","prevSize":32,"code":59665},"setIdx":0,"setId":1,"iconIdx":55},{"icon":{"paths":["M938.112 228.267h-937.6l333.184 523.819v271.915h245.376v-273.067z","M0 0h938.667v183.424h-938.667v-183.424z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a59_filter"]},"attrs":[{},{}],"properties":{"order":30,"id":87,"name":"filter","prevSize":32,"code":59666},"setIdx":0,"setId":1,"iconIdx":59},{"icon":{"paths":["M973.397 162.731h-922.837c-27.947 0-50.56 22.699-50.56 50.603v455.083c0 27.904 22.613 50.603 50.56 50.603h108.885v245.675h700.032v-245.675h113.963c27.861 0 50.56-22.656 50.56-50.603v-455.083c-0.043-27.904-22.699-50.603-50.603-50.603zM816.811 921.984h-614.699v-467.925h614.699v467.925z","M263.125 0h497.664v105.643h-497.664v-105.643z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a61_print"]},"attrs":[{},{}],"properties":{"order":29,"id":85,"name":"print","prevSize":32,"code":59667},"setIdx":0,"setId":1,"iconIdx":61},{"icon":{"paths":["M1024 818.944l-359.893-278.741 359.893-352.896z","M0 171.989l375.211 363.136-375.211 308.907z","M580.267 633.344c-21.333 21.035-69.12 21.035-98.603-6.997l-70.997-55.765-378.667 301.568 992-1.067-380.16-290.389-63.573 52.651z","M1005.227 147.243l-422.229 413.227c-28.075 24.149-73.771 24.149-102.101 0l-448.896-412.459 973.227-0.768z"],"attrs":[{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a63_email"]},"attrs":[{},{},{},{}],"properties":{"order":28,"id":83,"name":"email","prevSize":32,"code":59668},"setIdx":0,"setId":1,"iconIdx":63},{"icon":{"paths":["M1024 738.603l-259.072-127.061c0 0-95.317 141.696-117.291 136.875-12.245-2.731-13.909-3.072-24.491-7.339-38.016-15.232-132.395-58.581-221.227-138.923l-0.725 0.853c-87.765-79.701-140.032-168.107-158.848-204.075-5.291-9.941-5.888-11.691-9.856-23.552-7.125-21.376 124.117-130.688 124.117-130.688l-152.96-244.693c0 0-202.795 15.744-203.648 217.515-1.109 275.328 239.403 501.589 239.403 501.589 130.816 119.979 325.803 272.683 589.056 244.48 200.661-21.504 195.541-224.981 195.541-224.981z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a65_phone"]},"attrs":[{}],"properties":{"order":53,"id":81,"name":"phone","prevSize":32,"code":59669},"setIdx":0,"setId":1,"iconIdx":65},{"icon":{"paths":["M726.955 780.971c0 49.365-40.149 89.429-89.557 89.429h-547.968c-49.408-0.043-89.429-40.064-89.429-89.429v-530.603c0-49.365 40.021-89.472 89.429-89.472h547.968c49.365 0 89.557 40.107 89.557 89.472v530.603z","M786.389 356.949v334.848l237.611 183.723v-702.251z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a67_video"]},"attrs":[{},{}],"properties":{"order":55,"id":79,"name":"video","prevSize":32,"code":59670},"setIdx":0,"setId":1,"iconIdx":67},{"icon":{"paths":["M512.043 0c-282.709 0-512.043 229.248-512.043 512s229.291 512 512 512c282.709 0 512-229.248 512-512s-229.248-512-511.957-512zM470.229 584.192c0 0-158.677-36.693-189.568-98.603-62.208-124.715-69.589-100.608-77.227-139.221-7.893-38.656 3.797-117.973 3.797-117.973s-1.92 15.488 75.307-84.992c54.997-71.296 183.509-45.909 228.181-30.891 18.517 6.101-79.189 0-83.2 52.224-3.797 52.096 7.893 44.501 52.309 56.021 44.587 11.52 42.581-90.965 42.581-90.965l67.627 40.619 25.216 25.216c0 0 6.997 62.635-15.616 90.88-25.771 32.384-60.416 32.085-65.579 88.875-3.84 41.515 3.797 110.208 3.797 110.208s-8.789 11.392-21.291 1.877c-17.707-13.397-36.608-36.48-50.219-63.744-23.168-46.464-90.88-13.525-92.8-7.765-37.376 112.256 98.603 135.296 98.603 135.296l-1.92 32.939zM530.048 970.923c7.808-30.933 85.205-100.608 69.589-131.499-15.36-30.933-46.293-30.933-77.227-54.187-31.019-23.168-33.579-95.317 15.403-139.179 46.507-41.6 100.608-46.379 100.608-46.379s100.48 30.891 131.371 38.571c31.019 7.808 100.608-15.36 100.608 38.699 0.043 201.259-347.989 324.949-340.352 293.973z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a69_url"]},"attrs":[{}],"properties":{"order":61,"id":77,"name":"website","prevSize":32,"code":59671},"setIdx":0,"setId":1,"iconIdx":69},{"icon":{"paths":["M107.093 711.125l214.827 199.979 512.683-520.96-214.699-199.893-512.811 520.875zM994.603 101.589l-81.664-75.947c-38.059-35.413-98.091-33.963-134.229 3.029l-102.357 104.875 219.136 203.819 102.229-104.704c36.224-37.12 34.816-95.787-3.115-131.072zM0.299 1024l268.459-58.24-210.133-195.584-58.325 253.824z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a71_edit"]},"attrs":[{}],"properties":{"order":37,"id":75,"name":"edit","prevSize":32,"code":59672},"setIdx":0,"setId":1,"iconIdx":71},{"icon":{"paths":["M940.459 348.501h-344.96v-344.917z","M496.555 646.485c-13.995 0-22.997 1.237-28.331 2.432v180.907c5.333 1.28 13.952 1.28 21.717 1.28 56.661 0.384 93.525-30.805 93.525-96.853 0.512-57.429-33.152-87.765-86.912-87.765z","M254.805 645.675c-12.715 0-21.376 1.195-25.899 2.432v81.707c5.333 1.152 11.904 1.621 20.949 1.621 33.237 0 53.717-16.853 53.717-45.184-0.043-25.429-17.664-40.576-48.768-40.576z","M506.624 425.771v-425.771h-428.416v1024h862.251l1.408-598.229h-435.243zM340.096 750.251c-21.333 20.139-52.907 29.141-89.813 29.141-8.192 0-15.616-0.384-21.376-1.237v98.859h-61.909v-272.811c19.328-3.285 46.336-5.76 84.48-5.76 38.528 0 66.091 7.424 84.48 22.229 17.707 13.909 29.525 36.864 29.525 63.957s-8.96 50.048-25.387 65.621zM604.075 844.203c-29.227 24.192-73.515 35.712-127.659 35.712-32.384 0-55.381-2.048-70.955-4.139v-271.573c22.912-3.712 52.864-5.76 84.437-5.76 52.48 0 86.656 9.472 113.28 29.568 28.715 21.291 46.763 55.339 46.763 104.192 0 52.949-19.328 89.429-45.867 112zM860.245 651.733h-106.24v63.189h99.243v50.901h-99.243v111.104h-62.763v-276.48h169.003v51.285z"],"attrs":[{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a77_PDF"]},"attrs":[{},{},{},{}],"properties":{"order":31,"id":69,"name":"pdf","prevSize":32,"code":59673},"setIdx":0,"setId":1,"iconIdx":77},{"icon":{"paths":["M5.461 0h1018.539v170.325h-1018.539v-170.325z","M276.779 275.669h747.221v170.325h-747.221v-170.325z","M277.035 559.531h746.965v170.283h-746.965v-170.283z","M7.125 836.352h1016.875v170.325h-1016.875v-170.325z"],"attrs":[{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a81_report"]},"attrs":[{},{},{},{}],"properties":{"order":47,"id":65,"name":"categories","prevSize":32,"code":59674},"setIdx":0,"setId":1,"iconIdx":81},{"icon":{"paths":["M169.813 169.728l598.997 0.811-1.408-170.539h-767.403v767.403h169.813z","M224.64 224.64v799.36h799.36v-799.36h-799.36zM928.896 670.251h-258.645v258.603h-85.333v-258.603h-258.603v-85.333h258.603v-258.645h85.333v258.645h258.645v85.333z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a87_duplicate"]},"attrs":[{},{}],"properties":{"order":32,"id":59,"name":"duplicate","prevSize":32,"code":59675},"setIdx":0,"setId":1,"iconIdx":87},{"icon":{"paths":["M1024 886.016l-275.499-275.499c89.685-152.917 67.328-355.541-66.731-489.6-158.336-158.464-413.056-161.536-567.765-6.827-154.624 154.624-151.595 409.344 6.827 567.808 137.984 137.899 348.8 157.909 503.083 58.88l271.829 273.493 128.256-128.256zM205.525 597.248c-110.507-110.677-112.683-288.469-4.736-396.416 107.904-107.989 285.824-105.813 396.373 4.736 110.507 110.507 112.683 288.384 4.651 396.288-107.947 108.032-285.653 105.856-396.288-4.608z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a89_find"]},"attrs":[{}],"properties":{"order":58,"id":57,"name":"search","prevSize":32,"code":59676},"setIdx":0,"setId":1,"iconIdx":89},{"icon":{"paths":["M0 88.832v834.389h1024v-834.389h-1024zM296.96 214.229c70.571 0 127.701 57.173 127.701 127.701s-57.131 127.744-127.701 127.744c-70.443 0-127.659-57.173-127.659-127.744s57.216-127.701 127.659-127.701zM100.437 812.331l241.024-226.987 82.133 16.896 120.533-98.261 82.091 111.872 153.344-213.419 153.6 409.941h-832.725z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a91_image"]},"attrs":[{}],"properties":{"order":57,"id":55,"name":"image","prevSize":32,"code":59677},"setIdx":0,"setId":1,"iconIdx":91},{"icon":{"paths":["M907.563 0l-578.432 171.989v586.539c-38.528-13.44-86.101-13.781-133.248 2.859-90.88 32.085-144.853 114.005-120.533 182.997 24.32 68.907 117.76 98.816 208.683 66.688 73.941-26.069 122.667-85.035 125.483-143.232h0.256v-5.931c0-3.072 0.299-6.144 0-9.216v-508.544l416.939-123.989v404.864c-38.613-13.696-86.4-14.165-133.888 2.603-90.923 32.085-144.896 114.005-120.533 182.955 24.32 68.949 117.717 98.859 208.725 66.773 74.155-26.24 123.008-85.675 125.44-144.085h0.981v-733.269z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a93_music"]},"attrs":[{}],"properties":{"order":36,"id":53,"name":"music","prevSize":32,"code":59678},"setIdx":0,"setId":1,"iconIdx":93},{"icon":{"paths":["M507.349 0c-206.592 0-374.016 167.424-374.016 374.016 0 206.549 374.016 649.984 374.016 649.984s374.016-443.435 374.016-649.984c0-206.592-167.424-374.016-374.016-374.016zM510.635 565.248c-102.827 0-186.112-83.413-186.112-186.24s83.285-186.155 186.112-186.155c102.869 0 186.24 83.371 186.24 186.155 0 102.827-83.371 186.24-186.24 186.24z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a97_location"]},"attrs":[{}],"properties":{"order":34,"id":49,"name":"location","prevSize":32,"code":59679},"setIdx":0,"setId":1,"iconIdx":97},{"icon":{"paths":["M512 405.888c-84.779 0-153.771 69.035-153.771 153.771 0 84.907 68.992 153.899 153.771 153.899 84.821 0 153.899-68.992 153.899-153.899 0-84.736-69.077-153.771-153.899-153.771z","M913.237 206.208h-138.325v-9.131c0-40.789-32.981-73.856-73.813-73.856h-378.197c-40.747 0-73.813 33.109-73.813 73.856v9.131h-138.368c-61.056 0-110.72 49.579-110.72 110.763v467.029c0 61.056 49.664 110.677 110.72 110.677h802.56c61.184 0 110.763-49.621 110.763-110.677v-467.029c-0.043-61.184-49.621-110.763-110.805-110.763zM512 797.995c-131.371 0-238.165-106.965-238.165-238.336 0-131.328 106.795-238.208 238.165-238.208 131.413 0 238.251 106.88 238.251 238.208 0 131.371-106.837 238.336-238.251 238.336z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a101_camera"]},"attrs":[{},{}],"properties":{"order":59,"id":45,"name":"camera","prevSize":32,"code":59680},"setIdx":0,"setId":1,"iconIdx":101},{"icon":{"paths":["M1024 653.44l-108.971-210.859-206.208 106.581 120.277 38.869c-37.803 144.64-169.088 251.861-325.419 251.861-101.248 0-196.139-44.971-260.437-123.307l-69.376 56.96c81.408 99.243 201.643 156.117 329.813 156.117 191.019 0 356.309-132.608 410.453-306.048l109.867 29.824z","M194.859 441.472c37.717-144.597 169.045-251.819 325.376-251.819 101.205 0 196.139 44.928 260.437 123.307l69.419-56.96c-81.408-99.243-201.643-156.117-329.813-156.117-190.976 0-352.725 135.296-406.912 308.651l-113.365-32.427 108.971 210.859 206.165-106.581-120.277-38.912z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a125_sync"]},"attrs":[{},{}],"properties":{"order":44,"id":21,"name":"sync","prevSize":32,"code":59681},"setIdx":0,"setId":1,"iconIdx":125},{"icon":{"paths":["M429.099 89.259h165.803v194.688h-165.803v-194.688z","M679.552 219.52v140.501h-331.733v-140.501h-347.819v722.261h1024v-722.261h-344.448zM454.699 806.997h-352.469v-332.544h352.469v332.544zM928.597 801.408h-378.795v-86.485h378.795v86.485zM928.597 561.92h-378.795v-86.528h378.795v86.528z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a129_badge"]},"attrs":[{},{}],"properties":{"order":69,"id":17,"name":"badge","prevSize":32,"code":59682},"setIdx":0,"setId":1,"iconIdx":129},{"icon":{"paths":["M225.963 88.704l-208.853-46.037-17.109 77.611 164.693 36.309 200.448 647.723h643.243v-79.573h-585.856z","M514.645 939.819c0 46.492-37.689 84.181-84.181 84.181s-84.181-37.689-84.181-84.181c0-46.492 37.689-84.181 84.181-84.181s84.181 37.689 84.181 84.181z","M979.371 939.819c0 46.492-37.689 84.181-84.181 84.181s-84.181-37.689-84.181-84.181c0-46.492 37.689-84.181 84.181-84.181s84.181 37.689 84.181 84.181z","M976.853 643.371l47.147-415.829h-653.355l117.76 415.829z"],"attrs":[{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a133_cart"]},"attrs":[{},{},{},{}],"properties":{"order":33,"id":13,"name":"cart","prevSize":32,"code":59683},"setIdx":0,"setId":1,"iconIdx":133},{"icon":{"paths":["M876.885 569.003v408.491h-249.515v-308.139h-236.757v308.139h-252.416v-408.491l369.707-397.312z","M1024 552.448l-512.981-552.448-194.048 208.299v-72.192c0-4.523-3.413-8.149-7.595-8.149h-106.411c-4.224 0-7.595 3.584-7.595 8.149l0.299 202.581-195.669 210.176 33.024 35.499 477.952-513.365 480.085 516.821 32.939-35.371z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a135_home"]},"attrs":[{},{}],"properties":{"order":40,"id":11,"name":"home","prevSize":32,"code":59684},"setIdx":0,"setId":1,"iconIdx":135},{"icon":{"paths":["M1001.173 785.877l-384.981-666.88c-26.709-46.293-63.659-71.808-104.021-71.808s-77.312 25.472-104.064 71.765l-385.024 666.923c-26.709 46.293-30.336 91.051-10.155 125.952 20.181 34.944 60.715 54.229 114.176 54.229h770.048c53.461 0 93.995-19.243 114.176-54.187 20.139-34.944 16.555-79.701-10.155-125.995zM514.645 880.597c-35.797 0-64.768-28.971-64.768-64.811 0-35.669 28.971-64.683 64.768-64.683 35.755 0 64.768 29.013 64.768 64.683-0.043 35.84-29.056 64.811-64.768 64.811zM604.459 311.467c0 0-35.712 354.901-35.712 355.456l-0.043 0.555h-0.043c-1.28 26.155-25.557 47.061-55.424 47.061-30.848 0-55.765-22.101-55.765-49.195 0-0.811-33.536-353.92-33.536-353.92v-0.128c0-49.835 40.363-90.283 90.24-90.283 49.792 0 90.24 40.448 90.24 90.283 0.043 0.085 0.043 0.128 0.043 0.171z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a141_alert"]},"attrs":[{}],"properties":{"order":39,"id":5,"name":"alert","prevSize":32,"code":59685},"setIdx":0,"setId":1,"iconIdx":141},{"icon":{"paths":["M899.755 172.203c0 95.105-176.87 172.203-395.051 172.203s-395.051-77.098-395.051-172.203c0-95.105 176.87-172.203 395.051-172.203s395.051 77.098 395.051 172.203z","M899.328 239.061h-0.085c0-0.341 0.085-0.725 0.085-0.981 0-1.493-0.341-2.944-0.427-4.395-15.019 89.088-185.259 159.488-393.643 159.488-214.741 0-389.077-74.709-394.539-167.723-0.64 4.181-0.725 17.877-0.512 20.608v150.827c-0.128 1.835-0.597 3.499-0.597 5.419 0 95.061 176.896 172.117 395.051 172.117 215.936 0 391.083-75.52 394.667-169.301v-0.043c0-0.853 0.341-1.835 0.341-2.731 0-0.981-0.341-1.963-0.341-2.901v-160.384z","M899.328 462.421h-0.085c0-0.299 0.085-0.683 0.085-0.981 0-1.451-0.341-2.944-0.427-4.395-15.019 89.088-185.259 159.488-393.685 159.488-214.699 0-389.035-74.667-394.496-167.68-0.64 4.181-0.768 17.877-0.555 20.565v150.827c-0.085 1.835-0.597 3.584-0.597 5.419 0 95.104 176.896 172.245 395.051 172.245 215.893 0 391.125-75.648 394.667-169.429v0c0-0.896 0.341-1.92 0.341-2.816 0-0.981-0.341-1.92-0.341-2.816v-160.427z","M899.328 688.512h-0.085c0-0.256 0.085-0.683 0.085-0.981 0-1.408-0.341-2.901-0.427-4.437-15.019 89.173-185.259 159.488-393.643 159.488-214.741 0-389.035-74.667-394.539-167.68-0.64 4.181-0.768 17.92-0.512 20.565v150.912c-0.128 1.749-0.597 3.499-0.597 5.333 0 95.104 176.896 172.245 395.051 172.245 215.893 0 391.125-75.563 394.667-169.344v-0.085c0-0.896 0.427-1.92 0.427-2.816s-0.427-1.835-0.427-2.816v-160.384z"],"attrs":[{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["a145_host"]},"attrs":[{},{},{},{}],"properties":{"order":42,"id":1,"name":"dataset","prevSize":32,"code":59686},"setIdx":0,"setId":1,"iconIdx":145},{"icon":{"paths":["M388.095 0h247.869v388.114h388.114v247.869h-388.114v388.075h-247.869v-388.075h-388.095v-247.869h388.095z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Add_New"]},"attrs":[{}],"properties":{"order":9,"id":750,"name":"new","prevSize":32,"code":59687},"setIdx":1,"setId":0,"iconIdx":4},{"icon":{"paths":["M200.571 796.931c-65.7 20.885-113.75 73.848-130.451 94.215 0.202-3.96-6.842 8.705-6.842 8.705s2.706-3.609 6.842-8.705c-0.062 1.554-1.135 5.38-4.261 13.7-11.29 29.974 23.636 29.205 23.636 29.205 99.024-16.106 111.076-137.121 111.076-137.121zM767.851 694.951c-18.402-0.001-29.754 1.181-29.754 1.181 105.384 92.26 203.398 70.757 203.398 70.757 40.12-5.38-21.102-42.521-21.102-42.521-56.586-25.098-117.411-29.415-152.542-29.417zM407.732 445.851c0 0-38.052 198.070-85.604 256.815l263.733-42.154c0 0-131.431-126.545-178.128-214.661zM413.841 80.012c-0.327-0.031-0.655-0.025-0.984 0.018-2.95 0.391-5.989 3.865-8.935 12.118 0 0-14.213 73.113 21.382 194.629 0 0 30.308-96.404 7.495-170.219 0-0-8.827-35.592-18.958-36.546zM380.637 0.017c28.069-1.161 53.374 56.91 53.374 56.91 78.685 180.728 4.276 296.195 4.276 296.195 77.907 197.402 234.047 302.811 234.047 302.811 151.708-8.755 262.38 32.43 262.38 32.43 87.066 49.221 57.909 95.201 57.909 95.201-91.233 109.402-359.227-61.184-359.227-61.184l-345.434 62.554c-49.916 183.551-216.724 226.674-216.724 226.674-79.509 12.464-68.639-76.672-68.639-76.672 62.061-146.761 218.123-180.527 218.123-180.527 61.47-70.59 161.941-402.39 161.941-402.39-101.512-245.186-30.183-326.754-30.183-326.754 9.136-17.894 18.799-24.862 28.156-25.249z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Adobe_Acrobat"]},"attrs":[{}],"properties":{"order":13,"id":749,"name":"acrobat","prevSize":32,"code":59688},"setIdx":1,"setId":0,"iconIdx":5},{"icon":{"paths":["M167.399 677.842h323.415c0 0 5.916 31.909 7.353 37.842h-330.768c-8.671 0-15.672-7.017-15.672-15.688v-6.483c0-8.652 7.001-15.67 15.672-15.67zM166.669 556.899h286.113c0.132 1.774 0.017 3.559-0.635 5.28l-12.548 32.574h-272.93c-8.657 0-15.674-7.020-15.674-15.692v-6.469c0-8.674 7.018-15.694 15.674-15.694zM164.498 438.164h277.904l3.993 8.972c1.888 4.295 0.969 9.356-2.323 12.716l-16.156 16.154h-263.419c-8.654 0-15.671-7.016-15.671-15.687v-6.482c0-8.653 7.018-15.672 15.671-15.672zM742.87 333.929c-99.615 0-180.35 80.744-180.35 180.355 0 99.603 80.734 180.406 180.35 180.406 99.632 0 180.386-80.803 180.386-180.406 0-99.611-80.754-180.355-180.386-180.355zM163.987 320.635h326.827v33.951c0 1.354-0.266 2.641-0.701 3.878h-326.127c-8.672 0-15.674-7.018-15.674-15.674v-6.483c0-8.672 7.001-15.672 15.674-15.672zM742.875 236.316c3.759 0 7.519 1.433 10.393 4.299l28.972 28.939c3.14 3.158 7.869 4.042 11.913 2.239l37.526-16.592c7.435-3.325 16.073 0.082 19.366 7.485l19.533 44.028c1.802 4.042 5.862 6.7 10.325 6.7h48.152c8.106 0 14.672 6.549 14.672 14.686v41.002c0 4.444 2.755 8.405 6.865 9.992l38.264 14.768c7.585 2.91 11.36 11.448 8.437 18.999l-17.345 44.912c-1.619 4.176-0.617 8.922 2.541 12.079l34.069 34.019c5.747 5.749 5.747 15.071 0 20.819l-29.005 28.972c-3.109 3.108-4.010 7.853-2.206 11.897l16.592 37.477c3.291 7.47-0.050 16.124-7.486 19.415l-43.993 19.515c-4.077 1.805-6.732 5.884-6.732 10.343v48.088c0 8.152-6.566 14.753-14.672 14.753h-1.653l94.603 227.368c2.038 4.911-2.941 9.792-7.803 7.617l-110.426-48.72c-3.726-1.637-8.021 0.099-9.523 3.827l-45.115 109.69c-2.054 5.047-9.154 5.047-11.261 0.050l-91.812-220.185c-0.382-0.984-0.484-2.036-0.717-3.005-1.989 0.284-3.96 0.25-5.933-0.235l-91.844 220.601c-2.089 4.981-9.207 4.981-11.245-0.032l-45.129-109.69c-1.537-3.71-5.833-5.514-9.557-3.845l-110.424 48.722c-4.88 2.155-9.843-2.723-7.822-7.6l93.452-224.563h-0.135c-8.103 0-14.687-6.601-14.687-14.753v-40.97c0-4.428-2.738-8.422-6.866-9.974l-38.228-14.786c-7.602-2.909-11.363-11.43-8.454-18.981l17.327-44.947c1.586-4.159 0.583-8.871-2.559-12.029l-34.051-34.019c-5.714-5.747-5.714-15.070 0-20.819l29.040-29.006c3.090-3.125 3.959-7.903 2.188-11.913l-16.624-37.493c-3.276-7.403 0.049-16.108 7.467-19.415l44.060-19.465c4.078-1.805 6.7-5.848 6.7-10.311v-48.17c0-8.137 6.584-14.686 14.687-14.686h41.002c4.396 0 8.39-2.742 9.96-6.884l14.767-38.246c2.924-7.552 11.447-11.328 19.031-8.42l44.93 17.309c4.178 1.654 8.922 0.62 12.080-2.522l34.002-34.036c2.874-2.866 6.633-4.299 10.392-4.299zM163.837 188.247h206.951c8.672 0 15.689 6.999 15.689 15.672v6.483c0 8.673-7.017 15.674-15.689 15.674h-206.951c-8.672 0-15.691-7.002-15.691-15.674v-6.483c0-8.673 7.019-15.672 15.691-15.672zM26.215 4.042h721.289c14.469 0 26.233 11.762 26.233 26.214v178.013l-15.84-15.805c-3.942-3.927-9.156-6.099-14.72-6.099s-10.778 2.172-14.72 6.081l-22.858 22.891v-122.357c0-11.462-9.34-20.785-20.819-20.785h-595.842c-11.462 0-20.784 9.323-20.784 20.785v752.636c-0 11.478 9.322 20.801 20.784 20.801h353.1l-28.353 68.155h-387.471c-14.452 0-26.215-11.765-26.215-26.233v-878.084c0-14.452 11.763-26.214 26.215-26.214z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Agreement_01"]},"attrs":[{}],"properties":{"order":6,"id":745,"name":"agreement","prevSize":32,"code":59689},"setIdx":1,"setId":0,"iconIdx":9},{"icon":{"paths":["M694.258 599.428c45.741 0 82.948 37.172 82.948 82.93 0 45.74-37.206 82.914-82.948 82.914-45.759 0-82.948-37.173-82.948-82.914 0-45.758 37.188-82.93 82.948-82.93zM694.249 579.495c-56.717 0-102.862 46.13-102.862 102.864 0 56.684 46.146 102.846 102.862 102.846 56.701 0 102.844-46.162 102.844-102.846 0-56.734-46.143-102.864-102.844-102.864zM694.249 555.455c70.032 0 126.851 56.82 126.851 126.904 0 41.364-19.832 78.082-50.455 101.248-2.643 2.003-3.333 5.657-1.767 8.603l43.586 80.843c1.97 3.653-1.65 7.829-5.557 6.379l-32.137-11.886c-3.113-1.162-6.581 0.387-7.809 3.487l-12.578 31.832c-1.716 4.396-7.812 4.733-10.034 0.573l-47.289-88.938c-1.196-2.241-4.428-2.241-5.64 0l-47.289 88.938c-2.239 4.161-8.317 3.823-10.050-0.573l-12.561-31.832c-1.227-3.1-4.696-4.649-7.829-3.487l-32.105 11.886c-3.921 1.449-7.542-2.727-5.571-6.379l43.568-80.843c1.583-2.947 0.893-6.6-1.749-8.603-30.64-23.166-50.472-59.884-50.472-101.248 0-70.084 56.803-126.904 126.886-126.904zM269.891 450.612h486.196c9.528 0 17.24 7.707 17.24 17.236v7.12c-0 9.527-7.712 17.237-17.24 17.237h-486.196c-9.53 0-17.24-7.71-17.24-17.237v-7.12c0-9.529 7.71-17.236 17.24-17.236zM267.499 354.521h486.196c9.532 0 17.24 7.712 17.24 17.243v7.123c0 9.529-7.708 17.241-17.24 17.241h-486.196c-9.529 0-17.24-7.712-17.24-17.241v-7.123c0-9.53 7.711-17.243 17.24-17.243zM266.942 259.775h486.198c9.528 0 17.239 7.713 17.239 17.242v7.124c0 9.53-7.711 17.241-17.239 17.241h-486.198c-9.53 0-17.239-7.711-17.239-17.241v-7.124c0-9.529 7.708-17.242 17.239-17.242zM266.775 165.96h193.064c9.53 0 17.239 7.709 17.239 17.237v7.12c0 9.528-7.708 17.237-17.239 17.237h-193.064c-9.529 0-17.24-7.709-17.24-17.237v-7.12c0-9.528 7.711-17.237 17.24-17.237zM184.438 75.858c-12.355 0-22.407 10.050-22.407 22.407v827.471c0 12.356 10.053 22.406 22.407 22.406h655.085c12.357 0 22.409-10.050 22.409-22.406v-827.471c0-12.356-10.053-22.407-22.409-22.407zM115.481 0h792.997c16.162 0 29.309 13.148 29.309 29.309v965.38c0 16.162-13.148 29.311-29.309 29.311h-792.997c-16.162 0-29.308-13.149-29.308-29.311v-965.38c0-16.162 13.146-29.309 29.308-29.309z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Agreement_02"]},"attrs":[{}],"properties":{"order":7,"id":744,"name":"agreement2","prevSize":32,"code":59690},"setIdx":1,"setId":0,"iconIdx":10},{"icon":{"paths":["M675.041 775.84c54.269 0 98.415 45.251 98.415 100.877 0 55.616-44.146 100.867-98.415 100.867-54.301 0-98.497-45.251-98.497-100.867 0-55.626 44.196-100.877 98.497-100.877zM201.965 775.84c54.274 0 98.419 45.251 98.419 100.877 0 55.616-44.145 100.867-98.419 100.867-54.24 0-98.365-45.251-98.365-100.867-0-55.626 44.124-100.877 98.365-100.877zM675.23 494.43c-19.584 0-36.136 14.043-39.354 33.374l-13.231 79.96c-1.467 8.79 1.054 17.789 6.886 24.654 6.219 7.354 15.418 11.573 25.218 11.573h5.022c19.282 0 36.188-12.792 41.125-31.114l2.904-10.854c5.243-19.261 11.794-43.469 18.96-72.074 2.094-8.397 0.23-17.166-5.134-24.043-5.614-7.186-14.447-11.477-23.69-11.477zM514.384 494.43c-19.383 0-35.165 15.77-35.165 35.146v84.115c0 16.707 13.73 30.301 30.573 30.301 16.635 0 30.709-12.021 33.448-28.592l14.042-84.752c1.499-9.042-1.051-18.238-6.958-25.229-5.949-6.981-14.605-10.989-23.762-10.989zM354.736 494.43c-9.155 0-17.821 4.008-23.759 10.989-5.906 6.99-8.458 16.187-6.958 25.219l13.915 84.749c2.742 16.574 16.835 28.605 33.511 28.605 16.824 0 30.533-13.605 30.533-30.323v-84.093c0-19.376-15.781-35.146-35.165-35.146zM183.028 494.43c-9.144 0-17.626 4.125-23.237 11.342-5.605 7.178-7.564 16.376-5.334 25.21 7.123 28.418 13.644 52.49 18.822 71.603l2.363 8.782c5.168 19.208 21.688 32.624 40.149 32.624h13.040c8.73 0 17.011-3.843 22.707-10.562 5.981-7.062 8.542-16.419 7.013-25.666l-13.232-79.96c-3.208-19.331-19.747-33.374-39.354-33.374zM710.22 272.137c-19.227 0-35.48 14.030-38.685 33.376l-12.094 73.25c-1.491 9.042 1.042 18.248 6.968 25.229 5.936 6.978 14.584 10.99 23.739 10.99h27.104c19.458 0 36.325-12.854 40.991-31.261 5.333-21.146 10.406-39.822 14.895-56.387l4.877-18.102c2.363-8.802 0.499-18.010-5.074-25.283-5.781-7.499-14.562-11.811-24.093-11.811zM513.864 272.137c-19.093 0-34.645 15.771-34.645 35.157v72.543c0 19.374 15.783 35.146 35.165 35.146h26.981c19.603 0 36.157-14.032 39.365-33.346l12.187-73.269c1.467-8.875-1.030-17.907-6.875-24.79-6.155-7.274-15.227-11.44-24.875-11.44zM320.135 272.137c-9.637 0-18.688 4.166-24.856 11.44-5.843 6.883-8.365 15.934-6.874 24.79l12.197 73.269c3.19 19.314 19.751 33.346 39.367 33.346h26.845c19.384 0 35.165-15.771 35.165-35.146v-72.543c0-19.386-15.512-35.157-34.573-35.157zM127.082 272.137c-9.326 0-18.211 4.342-23.793 11.616-5.302 6.906-7.073 15.654-4.824 24.019l5.333 19.75c4.398 16.208 9.366 34.45 14.595 55.032 4.874 19.093 21.854 32.427 41.304 32.427h31.469c9.174 0 17.832-4.013 23.759-10.99 5.928-6.981 8.459-16.187 6.979-25.229l-12.134-73.25c-3.178-19.346-20-33.376-39.97-33.376zM890.503 46.48l99.273 0.344c18.875 0.043 34.24 15.459 34.24 34.323s-15.344 34.198-34.199 34.198h-54.24c-19.595 0-36.532 13.293-41.208 32.314l-130.064 531.104c-6.438 26.291-29.824 44.645-56.885 44.645h-537.891c-27.083 0-50.594-18.342-57.178-44.615l-111.365-445.646c-2.447-9.792-0.282-19.96 5.896-27.906 6.219-7.938 15.563-12.491 25.656-12.491h741.183c19.563 0 36.594-13.217 41.439-32.154l17.875-69.688c6.707-26.158 30.259-44.428 57.468-44.428z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Basket"]},"attrs":[{}],"properties":{"order":8,"id":719,"name":"shop","prevSize":32,"code":59691},"setIdx":1,"setId":0,"iconIdx":35},{"icon":{"paths":["M559.767 776.041h125.060v121.123h-125.060zM365.241 776.041h125.012v121.123h-125.012zM170.715 776.041h125.060v121.123h-125.060zM744.356 585.547h125.059v121.075h-125.059zM559.767 585.547h125.060v121.075h-125.060zM365.241 585.547h125.012v121.075h-125.012zM170.715 585.547h125.060v121.075h-125.060zM744.356 391.021h125.059v121.075h-125.059zM549.83 391.021h125.059v121.075h-125.059zM355.304 391.021h125.060v121.075h-125.060zM92.933 263.979v702.974h838.384v-702.974zM35.766 0h952.709v1024.144h-952.709z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Calendar__02"]},"attrs":[{}],"properties":{"order":10,"id":679,"name":"calendar","prevSize":32,"code":59692},"setIdx":1,"setId":0,"iconIdx":75},{"icon":{"paths":["M850.469 602.208c5.223 0 9.821 3.31 11.443 8.26l35.206 108.297h113.85c5.223 0 9.833 3.374 11.423 8.322 1.627 4.951-0.146 10.38-4.337 13.433l-92.14 66.94 35.206 108.297c1.607 4.916-0.16 10.348-4.371 13.433-2.105 1.543-4.611 2.28-7.069 2.28-2.473 0-4.949-0.738-7.071-2.28l-92.14-66.94-92.123 66.94c-2.123 1.543-4.581 2.28-7.054 2.28-2.488 0-4.981-0.738-7.086-2.28-4.208-3.085-5.975-8.517-4.354-13.433l35.189-108.297-92.123-66.94c-4.226-3.053-5.975-8.483-4.386-13.433 1.622-4.948 6.237-8.322 11.455-8.322h113.867l35.189-108.297c1.609-4.951 6.22-8.26 11.425-8.26zM361.71 459.578c14.748 0 28.373 3.181 40.826 9.48 12.45 6.363 21.964 15.040 28.533 25.966 6.621 10.99 9.916 22.624 9.916 34.932 0 11.664-3.149 22.365-9.403 31.973-6.281 9.578-15.631 17.227-27.939 22.881 16.019 3.697 28.469 11.378 37.341 22.977 8.884 11.666 13.287 26.255 13.287 43.738 0 23.651-8.628 43.64-25.871 60.158-17.238 16.452-39.042 24.614-65.391 24.614-23.748 0-43.479-7.068-59.206-21.24-15.713-14.206-24.679-32.585-26.912-55.145l33.259-4.371c3.84 18.799 10.316 32.425 19.474 40.717 9.173 8.354 20.37 12.498 33.528 12.498 15.634 0 28.842-5.398 39.671-16.291 10.733-10.798 16.113-24.164 16.113-40.266 0-15.265-4.995-27.894-14.94-37.761-10.010-9.929-22.652-14.845-38.062-14.845-6.266 0-14.074 1.222-23.457 3.663l3.677-29.147c2.236 0.291 4.003 0.321 5.336 0.321 14.188 0 26.979-3.663 38.304-11.020 11.31-7.392 16.967-18.769 16.967-34.194 0-12.18-4.114-22.269-12.357-30.27-8.272-8.033-18.943-12.019-31.974-12.019-12.885 0-23.743 4.082-32.326 12.212-8.61 8.098-14.168 20.341-16.614 36.569l-33.222-5.911c4.047-22.336 13.319-39.56 27.714-51.804 14.398-12.276 32.309-18.414 53.728-18.414zM590.945 459.554h21.406v271.857h-33.25v-211.926c-8.003 7.744-18.481 15.392-31.497 22.976-13.018 7.648-24.652 13.302-35.037 17.127v-32.103c18.629-8.803 34.874-19.312 48.823-31.747 13.902-12.374 23.769-24.425 29.555-36.185zM81.385 169.038h89.292v100.424h161.824v-100.424h226.916v100.424h161.808v-100.424h97.342c44.909 0 81.338 36.411 81.338 81.34v379.789l-9.436-28.988c-5.637-17.356-21.704-29.052-39.993-29.052-15.65-0-29.274 8.902-36.538 22.27v-223.863h-727.928v437.636h638.894l14.813 10.766-27.267 83.908h-712.452v-94.673h0.079v-557.792c0-44.928 36.396-81.34 81.306-81.34zM590.238 92.429h100.154v144.258h-100.154zM201.493 92.429h100.179v144.258h-100.179z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Calendar_Favourite"]},"attrs":[{}],"properties":{"order":4,"id":671,"name":"today","prevSize":32,"code":59693},"setIdx":1,"setId":0,"iconIdx":83},{"icon":{"paths":["M238.69 60.541c-52.938-0-95.847 42.9-95.847 95.842 0 52.939 42.909 95.862 95.847 95.862 52.94 0 95.84-42.923 95.84-95.862 0-52.942-42.901-95.842-95.84-95.842zM392.221 50.426h306.155l294.456 288.139v685.485h-776.863v-561.039l40.642-94.103 35.023 81.093v498.374h625.532v-577.602h-249.704v-244.67h-244.628l-1.306-7.293c-4.98-24.278-14.689-46.852-28.118-66.713zM238.689 0c86.369 0 156.367 69.992 156.367 156.374 0 35.435-11.925 68.041-31.798 94.252l116.289 215.985-85.124-24.582-34.050 90.799-96.019-222.375c-5.331 0.878-10.759 1.522-16.269 1.843l-97.681 226.194-34.051-90.799-85.135 24.605 106.068-196.98c-33.598-28.701-54.974-71.302-54.974-118.942 0-86.382 70.011-156.374 156.377-156.374z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Certificate_02"]},"attrs":[{}],"properties":{"order":15,"id":646,"name":"certificate","prevSize":32,"code":59694},"setIdx":1,"setId":0,"iconIdx":108}],"height":1024,"metadata":{"name":"appicons"},"preferences":{"showGlyphs":true,"showCodes":true,"showQuickUse":true,"showQuickUse2":true,"showSVGs":true,"fontPref":{"prefix":"icon-","metadata":{"fontFamily":"appicons","majorVersion":1,"minorVersion":0},"metrics":{"emSize":1024,"baseline":6.25,"whitespace":50},"embed":false,"noie8":true,"ie7":false,"showSelector":true,"showMetrics":false,"showMetadata":false,"showVersion":false},"imagePref":{"prefix":"icon-","png":true,"useClassSelector":true,"color":0,"bgColor":16777215,"name":"icomoon","classSelector":".icon"},"historySize":50,"gridSize":16}} \ No newline at end of file diff --git a/dev/db/sitedb..schema.sql b/dev/db/sitedb..schema.sql new file mode 100644 index 0000000..5099ae0 --- /dev/null +++ b/dev/db/sitedb..schema.sql @@ -0,0 +1,60 @@ + +CREATE TABLE sessions ( + id_user text NULL, + user_agent text NULL, + remote_addr text NULL, + id text NOT NULL, + sessiondata json NULL, + cschema text NULL, + created timestamp NULL DEFAULT now(), + CONSTRAINT sessions_pkey PRIMARY KEY (id) +); + + +CREATE TABLE usergroups ( + id text NOT NULL, + isdefault bool NULL, + groupname text NULL, + CONSTRAINT usergroups_pkey PRIMARY KEY (id) +); + +CREATE TABLE users ( + id text NOT NULL, + username text NULL, + userpassword text NULL, + surname text NULL, + prename text NULL, + created timestamp NULL DEFAULT now(), + isblocked bool NULL, + regcode text NULL, + vcode text NULL, + schemaaccess json NULL, + id_usergroups json NULL, + id_usergroup text NULL, + isdeleted bool NULL, + terms bool NULL, + CONSTRAINT uniq_username UNIQUE (username), + CONSTRAINT users_pkey PRIMARY KEY (id) +); + +CREATE OR REPLACE FUNCTION public.getuuid() + RETURNS text + LANGUAGE plpgsql +AS $function$ +declare + newuuid text; + begin + SELECT uuid_in(md5(random()::text || clock_timestamp()::text)::cstring) into newuuid; + return newuuid; +END; +$function$ +; + + +INSERT INTO usergroups (id, true, groupname) VALUES('user', NULL, 'Users'); +INSERT INTO usergroups (id, isdefault, groupname) VALUES('admin', NULL, 'Administrator'); +INSERT INTO users (id, userpassword, username, surname, prename, id_usergroup ) VALUES +(getuuid(),'0ecf731e2426a8a469f06e9f4a3bcbed6f8071d9d3e3ef7ef5fd9165021e27ec', 'ksaffran@dks.lu', 'Saffran', 'Kilian', 'admin'); + + + diff --git a/dev/setdevlinks.sh b/dev/setdevlinks.sh new file mode 100644 index 0000000..0db3d47 --- /dev/null +++ b/dev/setdevlinks.sh @@ -0,0 +1,8 @@ +#!/bin/bash +CALLDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +PROJECT="$(dirname "${CALLDIR}")" +PROJECT="$(basename "${PROJECT}")" +#PROJECT="$(basename "${PROJECT}")" +echo ${PROJECT} +sudo ln -s "/usr/home/dksalu/public_html/"${PROJECT} $wk"/"${PROJECT}"/website" +sudo ln -s "/usr/home/dksalu/public_html/"${PROJECT}"_admin" $wk"/"${PROJECT}"/admin" \ No newline at end of file diff --git a/website/css/creorga.css b/website/css/creorga.css deleted file mode 100644 index 7eb7245..0000000 --- a/website/css/creorga.css +++ /dev/null @@ -1,11 +0,0 @@ -body { - background: url("../img/bg_creorga.jpg"); - background-attachment: fixed; - background-position: center; - background-size: cover; -} - -.bg-topbar { - background: -webkit-linear-gradient(to right, #ffffff, #77a518); - background: linear-gradient(to right, #ffffff, #77a518); -} \ No newline at end of file diff --git a/website/css/site.css b/website/css/site.css deleted file mode 100644 index 2aa5057..0000000 --- a/website/css/site.css +++ /dev/null @@ -1,88 +0,0 @@ -body, html { - /* height: 100%; - line-height: 1.8; */ -} - -/* Full height image header */ -.bgimg-1 { - /* background-position: center; - background-size: cover; - background-image: url("../img/slider_pctablet.png"); - min-height: 50%; */ -} - -/* - -.bg-topbar { - background-color: #6a92d3; -} - -.main { - margin-top: 80px; -} - -.card-header { - background-color: #6a92d3; - color: #fff; -} - -h1 { - font-size: 35pt; - font-weight: bold; -} - -.card { - opacity: 0.8; -} - -header.masthead { - padding-top: 30px; - position: relative; - background: url(../img/bg.jpg); - background-position: center; - background-size: cover; -} - - -.iconbar { - width: 60px; - float: left; -} - -a { - color: #000; -} - -a:hover { - color: #000; -} - -a.footer { - color: #fff; -} - -.dropdown-menu { - border-radius: 0px; -} - -.navbar-nav .dropdown-menu { - background-color: #6a92d3; - color: #fff; -} - -.navbar-nav .dropdown-menu .dropdown-item { - color: #fff; -} - -.navbar-nav .dropdown-menu .dropdown-item:hover { - background-color: #52638e; -} - -.nav-link:hover { - text-decoration: underline; -} - -h3 a: { - color: #000; -} - */ diff --git a/website/css/theme.css b/website/css/theme.css index 4c3f290..a2d8180 100644 --- a/website/css/theme.css +++ b/website/css/theme.css @@ -29,8 +29,8 @@ legend{color:inherit;display:table;max-width:100%;padding:0;white-space:normal}t background-color: #52638e; } */ html,body{font-family:Verdana,sans-serif;font-size:10pt;line-height:1.5}html{overflow-x:hidden} -h1{font-size:36px}h2{font-size:30px}h3{font-size:24px}h4{font-size:20px}h5{font-size:18px}h6{font-size:16px}.serif{font-family:serif} -h1,h2,h3,h4,h5,h6{font-family:"Segoe UI",Arial,sans-serif;font-weight:400;margin: 0}.wide{letter-spacing:4px} +h1{font-size:20pt}h2{font-size:18pt}h3{font-size:16px; text-decoration: underline; font-weight: bold;}h4{font-size:13px}h5{font-size:12px}h6{font-size:11pt}.serif{font-family:serif} +h1,h2,h3,h4,h5,h6{font-family:"Segoe UI",Arial,sans-serif;font-weight:bold;margin: 0}.wide{letter-spacing:4px} hr{border:0;border-top:1px solid #eee;margin:20px 0} .img{max-width:100%;height:auto; vertical-align:middle}a{color:inherit} .table,.table-all{border-collapse:collapse;border-spacing:0;width:100%;display:table}.table-all{border:1px solid #ccc} @@ -117,7 +117,7 @@ hr{border:0;border-top:1px solid #eee;margin:20px 0} .circle{border-radius:50%} .round-small{border-radius:2px}.round,.round-medium{border-radius:4px}.round-large{border-radius:8px}.round-xlarge{border-radius:16px}.round-xxlarge{border-radius:32px} .row-padding,.row-padding>.half,.row-padding>.third,.row-padding>.twothird,.row-padding>.threequarter,.row-padding>.quarter,.row-padding>.col{padding:0 8px} -.container,.datapanel{padding:0.01em 8px}.datapanel{margin-top:8px;margin-bottom:8px} +.container,.datapanel{padding:2px 4px}.datapanel{margin-top:4px;margin-bottom:4px} .code,.codespan{font-family:Consolas,"courier new";font-size:16px} .code{width:auto;background-color:#fff;padding:8px 12px;border-left:4px solid #4CAF50;word-wrap:break-word} .codespan{color:crimson;background-color:#f1f1f1;padding-left:4px;padding-right:4px;font-size:110%} @@ -146,9 +146,9 @@ hr{border:0;border-top:1px solid #eee;margin:20px 0} .topbar{border-top:6px solid #ccc!important}.bottombar{border-bottom:6px solid #ccc!important} .leftbar{border-left:6px solid #ccc!important}.rightbar{border-right:6px solid #ccc!important} .section,.code{margin-top:16px!important;margin-bottom:16px!important} -.margin{margin:16px!important}.margin-top{margin-top:16px!important}.margin-bottom{margin-bottom:16px!important} -.margin-left{margin-left:16px!important}.margin-right{margin-right:16px!important} -.padding-small{padding:4px 8px!important}.padding{padding:8px 16px!important}.padding-large{padding:12px 24px!important} +.margin{margin:4px!important}.margin-top{margin-top:4px!important}.margin-bottom{margin-bottom:4px!important} +.margin-left{margin-left:4px!important}.margin-right{margin-right:4px!important} +.padding-small{padding:2px 2px!important}.padding{padding:4px 4px!important}.padding-large{padding:8px 8px!important} .padding-16{padding-top:16px!important;padding-bottom:16px!important}.padding-24{padding-top:24px!important;padding-bottom:24px!important} .padding-32{padding-top:32px!important;padding-bottom:32px!important}.padding-48{padding-top:48px!important;padding-bottom:48px!important} .padding-64{padding-top:64px!important;padding-bottom:64px!important} @@ -552,7 +552,8 @@ div.PageListHeader .inner_border .moduletoolbar { - background-color: #293146; + background-color: #6a92d3; + /* background-color: #293146; */ color: #fff; } diff --git a/website/download/update.php b/website/download/update.php deleted file mode 100644 index 4b137b4..0000000 --- a/website/download/update.php +++ /dev/null @@ -1,235 +0,0 @@ -".$updatefile.""; - } - -?> - - - - - - - - - - - DKS - The Database Specialist in Luxembourg - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
-
- - - -
-

- -
- -
-
Version pour MacOS
Minimum MacOS X 10.6
-  Téléchargement

- -
-
Version pour Windows
Minimum Windows Vista
-  Téléchargement

- -
- - - -
-
-
- - -
- -
-
-
-
-

Copyright © 2017 DKS s.à r.l. All Rights Reserved

-
-
-
-
-
- - - - - - - - - - - - - - - diff --git a/website/img/Creorga_1000px.png b/website/img/Creorga_1000px.png deleted file mode 100644 index 4a09df9690c9101ff4cf71a212ecf598051eca1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37576 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 - - - - - image/svg+xml - - - - - - - - - - - diff --git a/website/img/apps/coloradiologo.svg b/website/img/apps/coloradiologo.svg deleted file mode 100644 index e6db71b..0000000 --- a/website/img/apps/coloradiologo.svg +++ /dev/null @@ -1,52 +0,0 @@ - -image/svg+xml - - - - - - - - - - - - - diff --git a/website/img/apps/creorgalogo.svg b/website/img/apps/creorgalogo.svg deleted file mode 100644 index 6a91a48..0000000 --- a/website/img/apps/creorgalogo.svg +++ /dev/null @@ -1,931 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/website/img/apps/datastorelogo.svg b/website/img/apps/datastorelogo.svg deleted file mode 100644 index 8278e97..0000000 --- a/website/img/apps/datastorelogo.svg +++ /dev/null @@ -1,193 +0,0 @@ - -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/website/img/apps/dkstools.svg b/website/img/apps/dkstools.svg deleted file mode 100644 index c20a204..0000000 --- a/website/img/apps/dkstools.svg +++ /dev/null @@ -1,137 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/website/img/apps/dksvpn.svg b/website/img/apps/dksvpn.svg deleted file mode 100644 index d805810..0000000 --- a/website/img/apps/dksvpn.svg +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/website/img/apps/hourtraxlogo.svg b/website/img/apps/hourtraxlogo.svg deleted file mode 100644 index 519e8d2..0000000 --- a/website/img/apps/hourtraxlogo.svg +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - diff --git a/website/img/apps/invoicejournallogo.svg b/website/img/apps/invoicejournallogo.svg deleted file mode 100644 index fda0cb0..0000000 --- a/website/img/apps/invoicejournallogo.svg +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - diff --git a/website/img/apps/qrcodegenerateorlogo.svg b/website/img/apps/qrcodegenerateorlogo.svg deleted file mode 100644 index 45352fd..0000000 --- a/website/img/apps/qrcodegenerateorlogo.svg +++ /dev/null @@ -1,2322 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/website/img/apps/websiteeditorlogo.svg b/website/img/apps/websiteeditorlogo.svg deleted file mode 100644 index 32abb3c..0000000 --- a/website/img/apps/websiteeditorlogo.svg +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - diff --git a/website/img/bash.png b/website/img/bash.png deleted file mode 100644 index e0331c1edbab0ede8226056587961a0a54d52c29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35702 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 Tt878%d?fkDD$*rV#)1D2853ik diff --git a/website/img/bg.jpg b/website/img/bg.jpg deleted file mode 100644 index 5ad4139179885859fa22a6855d305439ff7d822c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134006 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

98O_T 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

2U#tEyUElPts7%ihL0UFF(YR;A1}ssR-L? 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