From d987e730a8edd83e0950f9f645b39a1a7f0475c7 Mon Sep 17 00:00:00 2001 From: kilian Date: Mon, 31 Aug 2020 19:00:43 +0200 Subject: [PATCH] v20200831 del php --- website/appphp/.htaccess | 8 - website/appphp/data/.htaccess | 5 - .../data/mail/body/user_forgotpasswd.tt | 12 - .../data/mail/body/user_registration.tt | 15 - website/appphp/data/mail/mail.tt | 23 - .../appphp/data/reports/pot/pot_period.conf | 12 - .../data/reports/pot/pot_period.footer.tt | 36 - .../data/reports/pot/pot_period.header.tt | 28 - website/appphp/data/reports/pot/pot_period.tt | 125 - .../reports/pot/pot_staffmember_period.conf | 12 - .../pot/pot_staffmember_period.footer.tt | 36 - .../pot/pot_staffmember_period.header.tt | 28 - .../reports/pot/pot_staffmember_period.tt | 226 - .../pot/pot_staffmember_period/pot.ttf | Bin 1372 -> 0 bytes .../pot_staffmember_period/pot.ttf.b64.txt | 1 - website/appphp/data/schemata/.htaccess | 5 - .../data/schemata/defaultcompany.schema.sql | 1349 - website/appphp/db.cgi | 343 - website/appphp/db.php | 35 - website/appphp/index.cgi | 174 - website/appphp/index.php | 32 - website/appphp/info.php | 4 - website/appphp/lib/.htaccess | 5 - website/appphp/lib/config.php | 32 - website/appphp/lib/db.php | 417 - website/appphp/lib/dksconfig.pm | 45 - website/appphp/lib/dksdb.pm | 417 - website/appphp/lib/pdfreport.php | 0 website/appphp/lib/pdfreport.pm | 124 - website/appphp/lib/sendemail.php | 0 website/appphp/lib/sendemail.pm | 71 - website/appphp/lib/sendemail_new.pm | 151 - website/appphp/lib/session.php | 183 - website/appphp/lib/session.pm | 261 - website/appphp/report.cgi | 129 - website/appphp/static/css/fonts/pot.svg | 94 - website/appphp/static/css/fonts/pot.ttf | Bin 18180 -> 0 bytes website/appphp/static/css/fonts/pot.woff | Bin 18256 -> 0 bytes website/appphp/static/css/icons.css | 305 - website/appphp/static/css/theme.css | 1005 - website/appphp/static/img/POT-logo.png | Bin 20930 -> 0 bytes website/appphp/static/img/bg1.jpg | Bin 135161 -> 0 bytes .../img/favicon/android-icon-144x144.png | Bin 12179 -> 0 bytes .../img/favicon/android-icon-192x192.png | Bin 16669 -> 0 bytes .../static/img/favicon/android-icon-36x36.png | Bin 2527 -> 0 bytes .../static/img/favicon/android-icon-48x48.png | Bin 3489 -> 0 bytes .../static/img/favicon/android-icon-72x72.png | Bin 5250 -> 0 bytes .../static/img/favicon/android-icon-96x96.png | Bin 7086 -> 0 bytes .../static/img/favicon/apple-icon-114x114.png | Bin 8487 -> 0 bytes .../static/img/favicon/apple-icon-120x120.png | Bin 9134 -> 0 bytes .../static/img/favicon/apple-icon-144x144.png | Bin 12179 -> 0 bytes .../static/img/favicon/apple-icon-152x152.png | Bin 13278 -> 0 bytes .../static/img/favicon/apple-icon-180x180.png | Bin 17376 -> 0 bytes .../static/img/favicon/apple-icon-57x57.png | Bin 4122 -> 0 bytes .../static/img/favicon/apple-icon-60x60.png | Bin 4312 -> 0 bytes .../static/img/favicon/apple-icon-72x72.png | Bin 5250 -> 0 bytes .../static/img/favicon/apple-icon-76x76.png | Bin 5550 -> 0 bytes .../img/favicon/apple-icon-precomposed.png | Bin 17158 -> 0 bytes .../appphp/static/img/favicon/apple-icon.png | Bin 17158 -> 0 bytes .../static/img/favicon/browserconfig.xml | 2 - .../static/img/favicon/favicon-16x16.png | Bin 1251 -> 0 bytes .../static/img/favicon/favicon-32x32.png | Bin 2246 -> 0 bytes .../static/img/favicon/favicon-96x96.png | Bin 7086 -> 0 bytes website/appphp/static/img/favicon/favicon.ico | Bin 1150 -> 0 bytes .../appphp/static/img/favicon/manifest.json | 41 - .../static/img/favicon/ms-icon-144x144.png | Bin 12179 -> 0 bytes .../static/img/favicon/ms-icon-150x150.png | Bin 12985 -> 0 bytes .../static/img/favicon/ms-icon-310x310.png | Bin 40744 -> 0 bytes .../static/img/favicon/ms-icon-70x70.png | Bin 5051 -> 0 bytes website/appphp/static/img/logo_512.png | Bin 31456 -> 0 bytes website/appphp/static/img/logo_512_xx.png | Bin 14719 -> 0 bytes website/appphp/static/img/potbg.jpg | Bin 663960 -> 0 bytes website/appphp/static/img/poticon512.png | Bin 31211 -> 0 bytes website/appphp/static/img/potlogowhite.svg | 133 - website/appphp/static/img/pottop.png | Bin 2689 -> 0 bytes website/appphp/static/img/toplogo.png | Bin 31456 -> 0 bytes website/appphp/static/js/app.js | 93 - website/appphp/static/js/form.js | 281 - website/appphp/static/js/report.js | 13 - website/appphp/static/js/request.js | 124 - website/appphp/static/js/timecalc.js | 113 - .../static/vendors/flatpickr/flatpickr.css | 784 - .../static/vendors/flatpickr/flatpickr.js | 2596 -- .../vendors/flatpickr/flatpickr.min.css | 1 - .../static/vendors/flatpickr/flatpickr.min.js | 2 - .../vendors/flatpickr/flatpickr.min.orig.css | 13 - .../appphp/static/vendors/flatpickr/ie.css | 13 - .../static/vendors/flatpickr/index.d.ts | 4 - .../static/vendors/flatpickr/l10n/de.d.ts | 66 - .../static/vendors/flatpickr/l10n/de.js | 70 - .../vendors/flatpickr/l10n/default.d.ts | 3 - .../static/vendors/flatpickr/l10n/default.js | 83 - .../static/vendors/flatpickr/l10n/fr.d.ts | 66 - .../static/vendors/flatpickr/l10n/fr.js | 75 - .../static/vendors/flatpickr/l10n/lu.d.ts | 67 - .../static/vendors/flatpickr/l10n/lu.js | 71 - .../plugins/confirmDate/confirmDate.css | 24 - .../plugins/confirmDate/confirmDate.d.ts | 9 - .../plugins/confirmDate/confirmDate.js | 84 - .../plugins/labelPlugin/labelPlugin.d.ts | 3 - .../plugins/labelPlugin/labelPlugin.js | 31 - .../flatpickr/plugins/minMaxTimePlugin.d.ts | 17 - .../flatpickr/plugins/minMaxTimePlugin.js | 326 - .../flatpickr/plugins/monthSelect/index.d.ts | 13 - .../flatpickr/plugins/monthSelect/index.js | 174 - .../flatpickr/plugins/monthSelect/style.css | 69 - .../plugins/monthSelect/tests.spec.d.ts | 1 - .../flatpickr/plugins/rangePlugin.d.ts | 12 - .../vendors/flatpickr/plugins/rangePlugin.js | 146 - .../flatpickr/plugins/scrollPlugin.d.ts | 3 - .../vendors/flatpickr/plugins/scrollPlugin.js | 58 - .../plugins/weekSelect/weekSelect.d.ts | 7 - .../plugins/weekSelect/weekSelect.js | 86 - .../vendors/flatpickr/themes/airbnb.css | 872 - .../vendors/flatpickr/themes/airbnb.min.css | 1 - .../vendors/flatpickr/types/globals.d.ts | 20 - .../vendors/flatpickr/types/instance.d.ts | 118 - .../vendors/flatpickr/types/locale.d.ts | 45 - .../vendors/flatpickr/types/options.d.ts | 144 - .../static/vendors/flatpickr/typings.d.ts | 38 - .../static/vendors/flatpickr/utils/dates.d.ts | 17 - .../static/vendors/flatpickr/utils/dom.d.ts | 6 - .../vendors/flatpickr/utils/formatting.d.ts | 13 - .../static/vendors/flatpickr/utils/index.d.ts | 8 - .../vendors/flatpickr/utils/polyfills.d.ts | 0 .../vendors/moment/moment-with-locales.js | 14765 --------- .../vendors/moment/moment-with-locales.min.js | 1 - .../appphp/static/vendors/moment/moment.js | 4602 --- .../static/vendors/moment/moment.min.js | 1 - .../static/vendors/slimselect/slimselect.css | 398 - .../static/vendors/slimselect/slimselect.js | 1931 -- .../vendors/slimselect/slimselect.min.css | 1 - .../vendors/slimselect/slimselect.min.js | 1 - .../static/vendors/slimselect/slimselect.scss | 391 - .../vendors/tabulator/css/tabulator.css | 995 - .../vendors/tabulator/css/tabulator.min.css | 3 - .../tabulator/css/tabulator.min.css.map | 1 - .../tabulator/css/tabulator_midnight.css | 999 - .../tabulator/css/tabulator_midnight.min.css | 3 - .../css/tabulator_midnight.min.css.map | 1 - .../tabulator/css/tabulator_modern.css | 1032 - .../tabulator/css/tabulator_modern.min.css | 3 - .../css/tabulator_modern.min.css.map | 1 - .../tabulator/css/tabulator_simple.css | 992 - .../tabulator/css/tabulator_simple.min.css | 3 - .../css/tabulator_simple.min.css.map | 1 - .../vendors/tabulator/css/tabulator_site.css | 993 - .../tabulator/css/tabulator_site.min.css | 3 - .../tabulator/css/tabulator_site.min.css.map | 1 - .../vendors/tabulator/js/modules/accessor.js | 93 - .../tabulator/js/modules/accessor.min.js | 2 - .../vendors/tabulator/js/modules/ajax.js | 465 - .../vendors/tabulator/js/modules/ajax.min.js | 2 - .../js/modules/calculation_colums.js | 495 - .../js/modules/calculation_colums.min.js | 2 - .../vendors/tabulator/js/modules/clipboard.js | 346 - .../tabulator/js/modules/clipboard.min.js | 2 - .../vendors/tabulator/js/modules/data_tree.js | 492 - .../tabulator/js/modules/data_tree.min.js | 2 - .../vendors/tabulator/js/modules/download.js | 433 - .../tabulator/js/modules/download.min.js | 2 - .../vendors/tabulator/js/modules/edit.js | 2109 -- .../vendors/tabulator/js/modules/edit.min.js | 2 - .../vendors/tabulator/js/modules/export.js | 616 - .../tabulator/js/modules/export.min.js | 2 - .../vendors/tabulator/js/modules/filter.js | 807 - .../tabulator/js/modules/filter.min.js | 2 - .../vendors/tabulator/js/modules/format.js | 725 - .../tabulator/js/modules/format.min.js | 2 - .../tabulator/js/modules/frozen_columns.js | 275 - .../js/modules/frozen_columns.min.js | 2 - .../tabulator/js/modules/frozen_rows.js | 98 - .../tabulator/js/modules/frozen_rows.min.js | 2 - .../tabulator/js/modules/group_rows.js | 1087 - .../tabulator/js/modules/group_rows.min.js | 2 - .../vendors/tabulator/js/modules/history.js | 141 - .../tabulator/js/modules/history.min.js | 2 - .../tabulator/js/modules/html_table_import.js | 191 - .../js/modules/html_table_import.min.js | 2 - .../tabulator/js/modules/keybindings.js | 392 - .../tabulator/js/modules/keybindings.min.js | 2 - .../vendors/tabulator/js/modules/menu.js | 200 - .../vendors/tabulator/js/modules/menu.min.js | 2 - .../tabulator/js/modules/moveable_columns.js | 289 - .../js/modules/moveable_columns.min.js | 2 - .../tabulator/js/modules/moveable_rows.js | 636 - .../tabulator/js/modules/moveable_rows.min.js | 2 - .../vendors/tabulator/js/modules/mutator.js | 116 - .../tabulator/js/modules/mutator.min.js | 2 - .../vendors/tabulator/js/modules/page.js | 730 - .../vendors/tabulator/js/modules/page.min.js | 2 - .../tabulator/js/modules/persistence.js | 411 - .../tabulator/js/modules/persistence.min.js | 2 - .../vendors/tabulator/js/modules/print.js | 96 - .../vendors/tabulator/js/modules/print.min.js | 2 - .../tabulator/js/modules/reactive_data.js | 235 - .../tabulator/js/modules/reactive_data.min.js | 2 - .../tabulator/js/modules/resize_columns.js | 163 - .../js/modules/resize_columns.min.js | 2 - .../tabulator/js/modules/resize_rows.js | 98 - .../tabulator/js/modules/resize_rows.min.js | 2 - .../tabulator/js/modules/resize_table.js | 107 - .../tabulator/js/modules/resize_table.min.js | 2 - .../tabulator/js/modules/responsive_layout.js | 301 - .../js/modules/responsive_layout.min.js | 2 - .../tabulator/js/modules/select_row.js | 417 - .../tabulator/js/modules/select_row.min.js | 2 - .../vendors/tabulator/js/modules/sort.js | 571 - .../vendors/tabulator/js/modules/sort.min.js | 2 - .../vendors/tabulator/js/modules/validate.js | 286 - .../tabulator/js/modules/validate.min.js | 2 - .../static/vendors/tabulator/js/tabulator.js | 24907 ---------------- .../vendors/tabulator/js/tabulator.min.js | 12 - .../vendors/tabulator/js/tabulator_core.js | 8906 ------ .../tabulator/js/tabulator_core.min.js | 6 - .../static/vendors/tinymce/changelog.txt | 1393 - .../tinymce/js/tinymce/jquery.tinymce.min.js | 91 - .../vendors/tinymce/js/tinymce/langs/de.js | 260 - .../vendors/tinymce/js/tinymce/langs/fr_FR.js | 261 - .../tinymce/js/tinymce/langs/readme.md | 3 - .../vendors/tinymce/js/tinymce/license.txt | 504 - .../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 | 7 - .../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 - .../vendors/tinymce/js/tinymce/tinymce.min.js | 9 - website/appphp/tmplphp/.htaccess | 5 - website/appphp/tmplphp/block/cgu.tt | 216 - .../block/dlg_replacestaffdayworkplan.tt | 62 - website/appphp/tmplphp/block/dlgdataload.tt | 37 - website/appphp/tmplphp/block/dlgdeleterow.tt | 69 - website/appphp/tmplphp/block/dlginfo.tt | 59 - website/appphp/tmplphp/block/dlgmessage.tt | 25 - .../tmplphp/block/dlgstaffpayedhours.tt | 29 - .../tmplphp/block/dlgstaffperioddays.tt | 207 - website/appphp/tmplphp/block/head.tt | 28 - website/appphp/tmplphp/block/pnl_nodata.tt | 10 - website/appphp/tmplphp/block/snackbar.php | 1 - website/appphp/tmplphp/file.php | 1 - website/appphp/tmplphp/index.php | 69 - website/appphp/tmplphp/login.php | 65 - website/appphp/tmplphp/module/admin.php | 56 - .../appphp/tmplphp/module/admin/companies.js | 178 - .../tmplphp/module/admin/dlg_dataset.php | 40 - .../tmplphp/module/admin/dlg_staffgroups.php | 21 - .../appphp/tmplphp/module/admin/dlg_users.php | 64 - .../tmplphp/module/admin/dlg_worktimes.php | 56 - .../tmplphp/module/admin/pnl_basedata.php | 113 - .../tmplphp/module/admin/schemadataset.js | 51 - .../tmplphp/module/admin/staffgroups.js | 79 - website/appphp/tmplphp/module/admin/users.js | 172 - .../appphp/tmplphp/module/admin/worktimes.js | 94 - website/appphp/tmplphp/module/company.php | 33 - .../appphp/tmplphp/module/company/company.js | 68 - .../module/company/dlg_staffgroups.php | 25 - .../tmplphp/module/company/dlg_users.php | 104 - .../tmplphp/module/company/pnl_basedata.php | 108 - .../tmplphp/module/company/staffgroups.js | 65 - .../appphp/tmplphp/module/company/users.js | 172 - website/appphp/tmplphp/module/index.php | 57 - website/appphp/tmplphp/module/index/index.js | 24 - .../tmplphp/module/login/accountreset.php | 27 - .../tmplphp/module/login/forgotpassword.php | 20 - website/appphp/tmplphp/module/login/login.php | 27 - .../appphp/tmplphp/module/login/message.php | 12 - .../appphp/tmplphp/module/login/register.php | 49 - .../tmplphp/module/login/validationcode.php | 23 - website/appphp/tmplphp/module/periods.php | 50 - .../tmplphp/module/periods/reportperiod.js | 152 - .../module/periods/staffperiodweeks.js | 324 - .../module/periods/tlb_staffperiodweeks.php | 5 - website/appphp/tmplphp/module/profile.php | 54 - .../tmplphp/module/profile/dlgpassword.php | 81 - .../tmplphp/module/profile/dlgusername.php | 100 - .../appphp/tmplphp/module/profile/profile.js | 20 - website/appphp/tmplphp/module/staff.php | 58 - .../module/staff/dlg_staffcontract.php | 37 - .../tmplphp/module/staff/pnl_basedata.php | 106 - website/appphp/tmplphp/module/staff/staff.js | 152 - .../tmplphp/module/staff/staffcontract.js | 170 - .../tmplphp/module/staff/staffperiods.js | 74 - .../tmplphp/module/timetrackers/index.js | 25 - .../tmplphp/module/timetrackers/index.tt | 15 - website/appphp/tmplphp/module/workplans.php | 43 - .../tmplphp/module/workplans/dlg_workplan.php | 33 - .../module/workplans/dlg_workplanday.php | 131 - .../tmplphp/module/workplans/workplans.js | 248 - 347 files changed, 103792 deletions(-) delete mode 100644 website/appphp/.htaccess delete mode 100644 website/appphp/data/.htaccess delete mode 100644 website/appphp/data/mail/body/user_forgotpasswd.tt delete mode 100644 website/appphp/data/mail/body/user_registration.tt delete mode 100644 website/appphp/data/mail/mail.tt delete mode 100644 website/appphp/data/reports/pot/pot_period.conf delete mode 100644 website/appphp/data/reports/pot/pot_period.footer.tt delete mode 100644 website/appphp/data/reports/pot/pot_period.header.tt delete mode 100644 website/appphp/data/reports/pot/pot_period.tt delete mode 100644 website/appphp/data/reports/pot/pot_staffmember_period.conf delete mode 100644 website/appphp/data/reports/pot/pot_staffmember_period.footer.tt delete mode 100644 website/appphp/data/reports/pot/pot_staffmember_period.header.tt delete mode 100644 website/appphp/data/reports/pot/pot_staffmember_period.tt delete mode 100644 website/appphp/data/reports/pot/pot_staffmember_period/pot.ttf delete mode 100644 website/appphp/data/reports/pot/pot_staffmember_period/pot.ttf.b64.txt delete mode 100644 website/appphp/data/schemata/.htaccess delete mode 100644 website/appphp/data/schemata/defaultcompany.schema.sql delete mode 100644 website/appphp/db.cgi delete mode 100644 website/appphp/db.php delete mode 100644 website/appphp/index.cgi delete mode 100644 website/appphp/index.php delete mode 100644 website/appphp/info.php delete mode 100644 website/appphp/lib/.htaccess delete mode 100644 website/appphp/lib/config.php delete mode 100644 website/appphp/lib/db.php delete mode 100644 website/appphp/lib/dksconfig.pm delete mode 100644 website/appphp/lib/dksdb.pm delete mode 100644 website/appphp/lib/pdfreport.php delete mode 100644 website/appphp/lib/pdfreport.pm delete mode 100644 website/appphp/lib/sendemail.php delete mode 100644 website/appphp/lib/sendemail.pm delete mode 100644 website/appphp/lib/sendemail_new.pm delete mode 100644 website/appphp/lib/session.php delete mode 100644 website/appphp/lib/session.pm delete mode 100644 website/appphp/report.cgi delete mode 100644 website/appphp/static/css/fonts/pot.svg delete mode 100644 website/appphp/static/css/fonts/pot.ttf delete mode 100644 website/appphp/static/css/fonts/pot.woff delete mode 100644 website/appphp/static/css/icons.css delete mode 100644 website/appphp/static/css/theme.css delete mode 100644 website/appphp/static/img/POT-logo.png delete mode 100644 website/appphp/static/img/bg1.jpg delete mode 100644 website/appphp/static/img/favicon/android-icon-144x144.png delete mode 100644 website/appphp/static/img/favicon/android-icon-192x192.png delete mode 100644 website/appphp/static/img/favicon/android-icon-36x36.png delete mode 100644 website/appphp/static/img/favicon/android-icon-48x48.png delete mode 100644 website/appphp/static/img/favicon/android-icon-72x72.png delete mode 100644 website/appphp/static/img/favicon/android-icon-96x96.png delete mode 100644 website/appphp/static/img/favicon/apple-icon-114x114.png delete mode 100644 website/appphp/static/img/favicon/apple-icon-120x120.png delete mode 100644 website/appphp/static/img/favicon/apple-icon-144x144.png delete mode 100644 website/appphp/static/img/favicon/apple-icon-152x152.png delete mode 100644 website/appphp/static/img/favicon/apple-icon-180x180.png delete mode 100644 website/appphp/static/img/favicon/apple-icon-57x57.png delete mode 100644 website/appphp/static/img/favicon/apple-icon-60x60.png delete mode 100644 website/appphp/static/img/favicon/apple-icon-72x72.png delete mode 100644 website/appphp/static/img/favicon/apple-icon-76x76.png delete mode 100644 website/appphp/static/img/favicon/apple-icon-precomposed.png delete mode 100644 website/appphp/static/img/favicon/apple-icon.png delete mode 100644 website/appphp/static/img/favicon/browserconfig.xml delete mode 100644 website/appphp/static/img/favicon/favicon-16x16.png delete mode 100644 website/appphp/static/img/favicon/favicon-32x32.png delete mode 100644 website/appphp/static/img/favicon/favicon-96x96.png delete mode 100644 website/appphp/static/img/favicon/favicon.ico delete mode 100644 website/appphp/static/img/favicon/manifest.json delete mode 100644 website/appphp/static/img/favicon/ms-icon-144x144.png delete mode 100644 website/appphp/static/img/favicon/ms-icon-150x150.png delete mode 100644 website/appphp/static/img/favicon/ms-icon-310x310.png delete mode 100644 website/appphp/static/img/favicon/ms-icon-70x70.png delete mode 100644 website/appphp/static/img/logo_512.png delete mode 100644 website/appphp/static/img/logo_512_xx.png delete mode 100644 website/appphp/static/img/potbg.jpg delete mode 100644 website/appphp/static/img/poticon512.png delete mode 100644 website/appphp/static/img/potlogowhite.svg delete mode 100644 website/appphp/static/img/pottop.png delete mode 100644 website/appphp/static/img/toplogo.png delete mode 100644 website/appphp/static/js/app.js delete mode 100644 website/appphp/static/js/form.js delete mode 100644 website/appphp/static/js/report.js delete mode 100644 website/appphp/static/js/request.js delete mode 100644 website/appphp/static/js/timecalc.js delete mode 100644 website/appphp/static/vendors/flatpickr/flatpickr.css delete mode 100644 website/appphp/static/vendors/flatpickr/flatpickr.js delete mode 100644 website/appphp/static/vendors/flatpickr/flatpickr.min.css delete mode 100644 website/appphp/static/vendors/flatpickr/flatpickr.min.js delete mode 100644 website/appphp/static/vendors/flatpickr/flatpickr.min.orig.css delete mode 100644 website/appphp/static/vendors/flatpickr/ie.css delete mode 100644 website/appphp/static/vendors/flatpickr/index.d.ts delete mode 100644 website/appphp/static/vendors/flatpickr/l10n/de.d.ts delete mode 100644 website/appphp/static/vendors/flatpickr/l10n/de.js delete mode 100644 website/appphp/static/vendors/flatpickr/l10n/default.d.ts delete mode 100644 website/appphp/static/vendors/flatpickr/l10n/default.js delete mode 100644 website/appphp/static/vendors/flatpickr/l10n/fr.d.ts delete mode 100644 website/appphp/static/vendors/flatpickr/l10n/fr.js delete mode 100644 website/appphp/static/vendors/flatpickr/l10n/lu.d.ts delete mode 100644 website/appphp/static/vendors/flatpickr/l10n/lu.js delete mode 100644 website/appphp/static/vendors/flatpickr/plugins/confirmDate/confirmDate.css delete mode 100644 website/appphp/static/vendors/flatpickr/plugins/confirmDate/confirmDate.d.ts delete mode 100644 website/appphp/static/vendors/flatpickr/plugins/confirmDate/confirmDate.js delete mode 100644 website/appphp/static/vendors/flatpickr/plugins/labelPlugin/labelPlugin.d.ts delete mode 100644 website/appphp/static/vendors/flatpickr/plugins/labelPlugin/labelPlugin.js delete mode 100644 website/appphp/static/vendors/flatpickr/plugins/minMaxTimePlugin.d.ts delete mode 100644 website/appphp/static/vendors/flatpickr/plugins/minMaxTimePlugin.js delete mode 100644 website/appphp/static/vendors/flatpickr/plugins/monthSelect/index.d.ts delete mode 100644 website/appphp/static/vendors/flatpickr/plugins/monthSelect/index.js delete mode 100644 website/appphp/static/vendors/flatpickr/plugins/monthSelect/style.css delete mode 100644 website/appphp/static/vendors/flatpickr/plugins/monthSelect/tests.spec.d.ts delete mode 100644 website/appphp/static/vendors/flatpickr/plugins/rangePlugin.d.ts delete mode 100644 website/appphp/static/vendors/flatpickr/plugins/rangePlugin.js delete mode 100644 website/appphp/static/vendors/flatpickr/plugins/scrollPlugin.d.ts delete mode 100644 website/appphp/static/vendors/flatpickr/plugins/scrollPlugin.js delete mode 100644 website/appphp/static/vendors/flatpickr/plugins/weekSelect/weekSelect.d.ts delete mode 100644 website/appphp/static/vendors/flatpickr/plugins/weekSelect/weekSelect.js delete mode 100644 website/appphp/static/vendors/flatpickr/themes/airbnb.css delete mode 100644 website/appphp/static/vendors/flatpickr/themes/airbnb.min.css delete mode 100644 website/appphp/static/vendors/flatpickr/types/globals.d.ts delete mode 100644 website/appphp/static/vendors/flatpickr/types/instance.d.ts delete mode 100644 website/appphp/static/vendors/flatpickr/types/locale.d.ts delete mode 100644 website/appphp/static/vendors/flatpickr/types/options.d.ts delete mode 100644 website/appphp/static/vendors/flatpickr/typings.d.ts delete mode 100644 website/appphp/static/vendors/flatpickr/utils/dates.d.ts delete mode 100644 website/appphp/static/vendors/flatpickr/utils/dom.d.ts delete mode 100644 website/appphp/static/vendors/flatpickr/utils/formatting.d.ts delete mode 100644 website/appphp/static/vendors/flatpickr/utils/index.d.ts delete mode 100644 website/appphp/static/vendors/flatpickr/utils/polyfills.d.ts delete mode 100644 website/appphp/static/vendors/moment/moment-with-locales.js delete mode 100644 website/appphp/static/vendors/moment/moment-with-locales.min.js delete mode 100644 website/appphp/static/vendors/moment/moment.js delete mode 100644 website/appphp/static/vendors/moment/moment.min.js delete mode 100644 website/appphp/static/vendors/slimselect/slimselect.css delete mode 100644 website/appphp/static/vendors/slimselect/slimselect.js delete mode 100644 website/appphp/static/vendors/slimselect/slimselect.min.css delete mode 100644 website/appphp/static/vendors/slimselect/slimselect.min.js delete mode 100644 website/appphp/static/vendors/slimselect/slimselect.scss delete mode 100644 website/appphp/static/vendors/tabulator/css/tabulator.css delete mode 100644 website/appphp/static/vendors/tabulator/css/tabulator.min.css delete mode 100644 website/appphp/static/vendors/tabulator/css/tabulator.min.css.map delete mode 100644 website/appphp/static/vendors/tabulator/css/tabulator_midnight.css delete mode 100644 website/appphp/static/vendors/tabulator/css/tabulator_midnight.min.css delete mode 100644 website/appphp/static/vendors/tabulator/css/tabulator_midnight.min.css.map delete mode 100644 website/appphp/static/vendors/tabulator/css/tabulator_modern.css delete mode 100644 website/appphp/static/vendors/tabulator/css/tabulator_modern.min.css delete mode 100644 website/appphp/static/vendors/tabulator/css/tabulator_modern.min.css.map delete mode 100644 website/appphp/static/vendors/tabulator/css/tabulator_simple.css delete mode 100644 website/appphp/static/vendors/tabulator/css/tabulator_simple.min.css delete mode 100644 website/appphp/static/vendors/tabulator/css/tabulator_simple.min.css.map delete mode 100644 website/appphp/static/vendors/tabulator/css/tabulator_site.css delete mode 100644 website/appphp/static/vendors/tabulator/css/tabulator_site.min.css delete mode 100644 website/appphp/static/vendors/tabulator/css/tabulator_site.min.css.map delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/accessor.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/accessor.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/ajax.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/ajax.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/calculation_colums.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/calculation_colums.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/clipboard.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/clipboard.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/data_tree.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/data_tree.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/download.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/download.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/edit.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/edit.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/export.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/export.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/filter.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/filter.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/format.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/format.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/frozen_columns.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/frozen_columns.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/frozen_rows.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/frozen_rows.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/group_rows.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/group_rows.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/history.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/history.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/html_table_import.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/html_table_import.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/keybindings.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/keybindings.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/menu.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/menu.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/moveable_columns.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/moveable_columns.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/moveable_rows.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/moveable_rows.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/mutator.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/mutator.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/page.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/page.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/persistence.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/persistence.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/print.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/print.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/reactive_data.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/reactive_data.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/resize_columns.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/resize_columns.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/resize_rows.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/resize_rows.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/resize_table.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/resize_table.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/responsive_layout.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/responsive_layout.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/select_row.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/select_row.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/sort.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/sort.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/validate.js delete mode 100644 website/appphp/static/vendors/tabulator/js/modules/validate.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/tabulator.js delete mode 100644 website/appphp/static/vendors/tabulator/js/tabulator.min.js delete mode 100644 website/appphp/static/vendors/tabulator/js/tabulator_core.js delete mode 100644 website/appphp/static/vendors/tabulator/js/tabulator_core.min.js delete mode 100644 website/appphp/static/vendors/tinymce/changelog.txt delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/jquery.tinymce.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/langs/de.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/langs/fr_FR.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/langs/readme.md delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/license.txt delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/advlist/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/anchor/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/autolink/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/autoresize/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/autosave/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/bbcode/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/charmap/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/code/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/codesample/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/colorpicker/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/contextmenu/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/directionality/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/emoticons/js/emojis.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/emoticons/js/emojis.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/emoticons/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/fullpage/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/help/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/hr/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/image/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/imagetools/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/importcss/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/insertdatetime/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/legacyoutput/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/link/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/lists/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/media/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/nonbreaking/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/noneditable/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/pagebreak/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/paste/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/preview/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/print/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/quickbars/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/save/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/searchreplace/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/spellchecker/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/tabfocus/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/table/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/template/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/textcolor/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/textpattern/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/toc/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/visualblocks/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/visualchars/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/plugins/wordcount/plugin.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/skins/content/dark/content.min.css delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/skins/content/default/content.min.css delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/skins/content/document/content.min.css delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/skins/content/writer/content.min.css delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/skins/ui/oxide-dark/content.inline.min.css delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/skins/ui/oxide-dark/content.min.css delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/skins/ui/oxide-dark/content.mobile.min.css delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/skins/ui/oxide-dark/skin.min.css delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/skins/ui/oxide-dark/skin.mobile.min.css delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/skins/ui/oxide/content.inline.min.css delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/skins/ui/oxide/content.min.css delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/skins/ui/oxide/content.mobile.min.css delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/skins/ui/oxide/skin.min.css delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/skins/ui/oxide/skin.mobile.min.css delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/themes/mobile/theme.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/themes/silver/theme.min.js delete mode 100644 website/appphp/static/vendors/tinymce/js/tinymce/tinymce.min.js delete mode 100644 website/appphp/tmplphp/.htaccess delete mode 100644 website/appphp/tmplphp/block/cgu.tt delete mode 100644 website/appphp/tmplphp/block/dlg_replacestaffdayworkplan.tt delete mode 100644 website/appphp/tmplphp/block/dlgdataload.tt delete mode 100644 website/appphp/tmplphp/block/dlgdeleterow.tt delete mode 100644 website/appphp/tmplphp/block/dlginfo.tt delete mode 100644 website/appphp/tmplphp/block/dlgmessage.tt delete mode 100644 website/appphp/tmplphp/block/dlgstaffpayedhours.tt delete mode 100644 website/appphp/tmplphp/block/dlgstaffperioddays.tt delete mode 100644 website/appphp/tmplphp/block/head.tt delete mode 100644 website/appphp/tmplphp/block/pnl_nodata.tt delete mode 100644 website/appphp/tmplphp/block/snackbar.php delete mode 100644 website/appphp/tmplphp/file.php delete mode 100644 website/appphp/tmplphp/index.php delete mode 100644 website/appphp/tmplphp/login.php delete mode 100644 website/appphp/tmplphp/module/admin.php delete mode 100644 website/appphp/tmplphp/module/admin/companies.js delete mode 100644 website/appphp/tmplphp/module/admin/dlg_dataset.php delete mode 100644 website/appphp/tmplphp/module/admin/dlg_staffgroups.php delete mode 100644 website/appphp/tmplphp/module/admin/dlg_users.php delete mode 100644 website/appphp/tmplphp/module/admin/dlg_worktimes.php delete mode 100644 website/appphp/tmplphp/module/admin/pnl_basedata.php delete mode 100644 website/appphp/tmplphp/module/admin/schemadataset.js delete mode 100644 website/appphp/tmplphp/module/admin/staffgroups.js delete mode 100644 website/appphp/tmplphp/module/admin/users.js delete mode 100644 website/appphp/tmplphp/module/admin/worktimes.js delete mode 100644 website/appphp/tmplphp/module/company.php delete mode 100644 website/appphp/tmplphp/module/company/company.js delete mode 100644 website/appphp/tmplphp/module/company/dlg_staffgroups.php delete mode 100644 website/appphp/tmplphp/module/company/dlg_users.php delete mode 100644 website/appphp/tmplphp/module/company/pnl_basedata.php delete mode 100644 website/appphp/tmplphp/module/company/staffgroups.js delete mode 100644 website/appphp/tmplphp/module/company/users.js delete mode 100644 website/appphp/tmplphp/module/index.php delete mode 100644 website/appphp/tmplphp/module/index/index.js delete mode 100644 website/appphp/tmplphp/module/login/accountreset.php delete mode 100644 website/appphp/tmplphp/module/login/forgotpassword.php delete mode 100644 website/appphp/tmplphp/module/login/login.php delete mode 100644 website/appphp/tmplphp/module/login/message.php delete mode 100644 website/appphp/tmplphp/module/login/register.php delete mode 100644 website/appphp/tmplphp/module/login/validationcode.php delete mode 100644 website/appphp/tmplphp/module/periods.php delete mode 100644 website/appphp/tmplphp/module/periods/reportperiod.js delete mode 100644 website/appphp/tmplphp/module/periods/staffperiodweeks.js delete mode 100644 website/appphp/tmplphp/module/periods/tlb_staffperiodweeks.php delete mode 100644 website/appphp/tmplphp/module/profile.php delete mode 100644 website/appphp/tmplphp/module/profile/dlgpassword.php delete mode 100644 website/appphp/tmplphp/module/profile/dlgusername.php delete mode 100644 website/appphp/tmplphp/module/profile/profile.js delete mode 100644 website/appphp/tmplphp/module/staff.php delete mode 100644 website/appphp/tmplphp/module/staff/dlg_staffcontract.php delete mode 100644 website/appphp/tmplphp/module/staff/pnl_basedata.php delete mode 100644 website/appphp/tmplphp/module/staff/staff.js delete mode 100644 website/appphp/tmplphp/module/staff/staffcontract.js delete mode 100644 website/appphp/tmplphp/module/staff/staffperiods.js delete mode 100644 website/appphp/tmplphp/module/timetrackers/index.js delete mode 100644 website/appphp/tmplphp/module/timetrackers/index.tt delete mode 100644 website/appphp/tmplphp/module/workplans.php delete mode 100644 website/appphp/tmplphp/module/workplans/dlg_workplan.php delete mode 100644 website/appphp/tmplphp/module/workplans/dlg_workplanday.php delete mode 100644 website/appphp/tmplphp/module/workplans/workplans.js diff --git a/website/appphp/.htaccess b/website/appphp/.htaccess deleted file mode 100644 index 2d11d59a..00000000 --- a/website/appphp/.htaccess +++ /dev/null @@ -1,8 +0,0 @@ -RewriteEngine on -DirectoryIndex index.cgi index.html -AddHandler cgi-script .cgi -RewriteCond %{REQUEST_FILENAME} !-f -RewriteCond %{REQUEST_FILENAME} !-d -# RewriteRule "db.cgi" "db.cgi" [NC,L,QSA] -# RewriteRule "report.cgi" "report.cgi" [NC,L,QSA] -RewriteRule "^(.*)$" "index.cgi" [NC,L,QSA] \ No newline at end of file diff --git a/website/appphp/data/.htaccess b/website/appphp/data/.htaccess deleted file mode 100644 index 908fc527..00000000 --- a/website/appphp/data/.htaccess +++ /dev/null @@ -1,5 +0,0 @@ -#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/website/appphp/data/mail/body/user_forgotpasswd.tt b/website/appphp/data/mail/body/user_forgotpasswd.tt deleted file mode 100644 index 35727cb3..00000000 --- a/website/appphp/data/mail/body/user_forgotpasswd.tt +++ /dev/null @@ -1,12 +0,0 @@ -[% quser = dksdb.query("select prename,surname from public.users where id='$userid';") %] -[% user = quser.get_all() %] -Bonjour [% user.0.prename %] [% user.0.surname %],
-
-vous avez demandé un nouveau mot de passe via pot.lu!
-cliquer ci-dessous pour confirmer votre demande. -Changer mot de passe -
-
-Meilleurs salutations,
-
-POT Support Team \ No newline at end of file diff --git a/website/appphp/data/mail/body/user_registration.tt b/website/appphp/data/mail/body/user_registration.tt deleted file mode 100644 index 70f729ac..00000000 --- a/website/appphp/data/mail/body/user_registration.tt +++ /dev/null @@ -1,15 +0,0 @@ -[% quser = dksdb.query("select prename,surname from public.users where id='$userid';") %] -[% user = quser.get_all() %] -Bonjour [% user.0.prename %] [% user.0.surname %],
-
-[% quser = dksdb.query("select username,vcode from public.users where id='$userid';") %] -[% user = quser.get_all() %] -Merci pour votre création de compte sur pot.lu, -

-votre code de validation: [% user.0.vcode %]
-Finissez votre régistration en entrant le votre code de validation ici: [% siteurl %]validation.html -
-
-Meilleurs salutations,
-
-POT Support Team diff --git a/website/appphp/data/mail/mail.tt b/website/appphp/data/mail/mail.tt deleted file mode 100644 index c42d41c4..00000000 --- a/website/appphp/data/mail/mail.tt +++ /dev/null @@ -1,23 +0,0 @@ -[% USE DBI %] -[% USE dksdb = DBI(dsn, dbuser, dbpassword) %] - - - - - - -
- POT - Plan d'organisation de travail -
-
- [% INCLUDE "body/$bodytemplate" %] -
-
-
- - \ No newline at end of file diff --git a/website/appphp/data/reports/pot/pot_period.conf b/website/appphp/data/reports/pot/pot_period.conf deleted file mode 100644 index f81cfd40..00000000 --- a/website/appphp/data/reports/pot/pot_period.conf +++ /dev/null @@ -1,12 +0,0 @@ -PDF_TOP="20mm" -PDF_BOTTOM="10mm" -PDF_LEFT="5mm" -PDF_RIGHT="5mm" -PDF_SIZE="A4" -PDF_ORIENTATION="Landscape" -PDF_ENGINE="Template::Toolkit" -PDF_ENCODING="UTF-8" -TEMPLATE_DSN="" -TEMPLATE_DBUSER="" -TEMPLATE_DBPASSWORD="" -REPORT_NAME="POT des salariés par Semaine" \ No newline at end of file diff --git a/website/appphp/data/reports/pot/pot_period.footer.tt b/website/appphp/data/reports/pot/pot_period.footer.tt deleted file mode 100644 index 8a5797b9..00000000 --- a/website/appphp/data/reports/pot/pot_period.footer.tt +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - -
 
- Page / -
- \ No newline at end of file diff --git a/website/appphp/data/reports/pot/pot_period.header.tt b/website/appphp/data/reports/pot/pot_period.header.tt deleted file mode 100644 index 39018bc1..00000000 --- a/website/appphp/data/reports/pot/pot_period.header.tt +++ /dev/null @@ -1,28 +0,0 @@ -[% USE DBI %] -[% USE dksdb = DBI(dsn, dbuser, dbpassword) %] -[% qgcompany = dksdb.prepare("select * from companies WHERE schemata= ?") %] -[% gcompany = qgcompany.execute(schemata) %] -[% cmp = gcompany.get_all() %] -[% #qreport = dksdb.prepare("select to_char(startdate,'DD.MM.YYYY') as startdate, to_char(enddate,'DD.MM.YYYY') as enddate from ${schemata}.reportperiod WHERE id= ?") %] -[% #grep = qreport.execute() %] -[% #rep = grep.get_all() %] - - - - - - - - - - -
-

Plan d'Organisation du Travail

-

-
- [% cmp.0.company %] [% cmp.0.socialtype %]
- [% cmp.0.address %]
- [% cmp.0.zip %] [% cmp.0.city%]

-
-
- diff --git a/website/appphp/data/reports/pot/pot_period.tt b/website/appphp/data/reports/pot/pot_period.tt deleted file mode 100644 index 39077b21..00000000 --- a/website/appphp/data/reports/pot/pot_period.tt +++ /dev/null @@ -1,125 +0,0 @@ -[% USE DBI %] -[% USE dksdb = DBI(dsn, dbuser, dbpassword) %] - - - - - POT - Period - - - - [% weeklist = dksdb.prepare("select dspweekshort,dspweekdates,weekdates,weekident from ${schemata}.vw_staffreportperioddays where id_reportperiod = ? group by dspweekshort,dspweekdates,weekdates,weekident order by dspweekshort;") %] - [% periodweek = dksdb.prepare("select st.prename,st.surname,spd.* from ${schemata}.vw_staffreportperioddays spd left join ${schemata}.staff st on (spd.id_staff=st.id) where spd.id_reportperiod= ? and spd.weekident= ? order by st.surname,st.prename,spd.daydate;") %] - [% FOREACH wl = weeklist.execute(id_reportperiod) %] - - - [% dspwd = wl.dspweekdates.split(',') %] - [% wd = wl.weekdates.split(',') %] - - - - - - - - - - - - - - [% wdk = 0 %] - [% FOREACH pw = periodweek.execute(id_reportperiod,wl.weekident) %] - [% IF wdk == 0 %] - - [% END %] - [% WHILE pw.daydate != wd.$wdk and wdk < 7 %] - - [% wdk = wdk + 1 %] - [% END %] - [% #IF pw.daydate == wd.$wdk %] - [% IF wdk < 7 %] - [% IF pw.timestart1%] - - - [% ELSE %] - - [% END %] - [% END %] - [% wdk = wdk + 1 %] - [% IF wdk >= 7 %] - - [% END %] - [% END %] - - -
Semaine [% wl.dspweekshort %]Lundi
[% dspwd.0 %]
Mardi
[% dspwd.1 %]
Mecredi
[% dspwd.2 %]
Jeudi
[% dspwd.3 %]
Vendredi
[% dspwd.4 %]
Samedi
[% dspwd.5 %]
Dimanche
[% dspwd.6 %]
Totaux
[% pw.surname %]
[% pw.prename %]
  - [% pw.timestart1 %] - [% pw.timeend1 %]
- [% IF pw.timestart2 %][% pw.timestart2 %] - [% pw.timeend2 %]
[% END %] - [% IF pw.timepause %]P: [% pw.timepause %][% END %] -
- [% IF pw.workhours %]T: [% pw.workhours %]
[%END %] - [% IF pw.recuperationhours %]R: [% pw.recuperationhours %]
[%END %] - [% IF pw.vacancyhours %]C: [% pw.vacancyhours %]
[%END %] - [% IF pw.vacancyhours %]J: [% pw.dayhours %][%END %] -
  - [% IF pw.week_workhours && pw.week_workhours != "00:00" %]T: [% pw.week_workhours %]
[%END %] - [% IF pw.week_recuperationhours && pw.week_recuperationhours != "00:00" %]R: [% pw.week_recuperationhours %]
[%END %] - [% IF pw.week_vacancyhours && pw.week_vacancyhours != "00:00" %]C: [% pw.week_vacancyhours %]
[%END %] - [% IF pw.week_totalhours && pw.week_totalhours != "00:00" %]S: [% pw.week_totalhours %]
[%END %] - [% IF pw.week_diffhours && pw.week_diffhours != "00:00" %]D: [% pw.week_diffhours %][%END %] - [% wdk = 0 %] -
-
- [% END %] - - \ No newline at end of file diff --git a/website/appphp/data/reports/pot/pot_staffmember_period.conf b/website/appphp/data/reports/pot/pot_staffmember_period.conf deleted file mode 100644 index 768e43e2..00000000 --- a/website/appphp/data/reports/pot/pot_staffmember_period.conf +++ /dev/null @@ -1,12 +0,0 @@ -PDF_TOP="20mm" -PDF_BOTTOM="15mm" -PDF_LEFT="5mm" -PDF_RIGHT="5mm" -PDF_SIZE="A4" -PDF_ORIENTATION="Landscape" -PDF_ENGINE="Template::Toolkit" -PDF_ENCODING="UTF-8" -TEMPLATE_DSN="" -TEMPLATE_DBUSER="" -TEMPLATE_DBPASSWORD="" -REPORT_NAME="POT periodes par salarié" \ No newline at end of file diff --git a/website/appphp/data/reports/pot/pot_staffmember_period.footer.tt b/website/appphp/data/reports/pot/pot_staffmember_period.footer.tt deleted file mode 100644 index 6f32a0c7..00000000 --- a/website/appphp/data/reports/pot/pot_staffmember_period.footer.tt +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - -
 
- Page / -
- \ No newline at end of file diff --git a/website/appphp/data/reports/pot/pot_staffmember_period.header.tt b/website/appphp/data/reports/pot/pot_staffmember_period.header.tt deleted file mode 100644 index 5f67e443..00000000 --- a/website/appphp/data/reports/pot/pot_staffmember_period.header.tt +++ /dev/null @@ -1,28 +0,0 @@ -[% USE DBI %] -[% USE dksdb = DBI(dsn, dbuser, dbpassword) %] -[% qgcompany = dksdb.prepare("select * from companies WHERE schemata= ?") %] -[% gcompany = qgcompany.execute(schemata) %] -[% cmp = gcompany.get_all() %] -[% #qreport = dksdb.prepare("select to_char(startdate,'DD.MM.YYYY') as startdate, to_char(enddate,'DD.MM.YYYY') as enddate from ${schemata}.reportperiod WHERE id= ?") %] -[% #grep = qreport.execute(id_reportperiod) %] -[% #rep = grep.get_all() %] - - - - - - - - - - -
-

Plan d'Organisation du Travail

-

-
- [% cmp.0.company %] [% cmp.0.socialtype %]
- [% cmp.0.address %]
- [% cmp.0.zip %] [% cmp.0.city%]

-
-
- diff --git a/website/appphp/data/reports/pot/pot_staffmember_period.tt b/website/appphp/data/reports/pot/pot_staffmember_period.tt deleted file mode 100644 index f420a676..00000000 --- a/website/appphp/data/reports/pot/pot_staffmember_period.tt +++ /dev/null @@ -1,226 +0,0 @@ -[% USE DBI %] -[% USE dksdb = DBI(dsn, dbuser, dbpassword) %] - - - - - POT - Staffmember - Period - - - - [% IF id_stafflist %] - [% stafflist = dksdb.prepare("select distinct(spd.id_staff),st.surname,st.prename,spd.id_reportperiod,to_char(spd.periodstart,'DD.MM.YYYY') as periodstart,to_char(spd.periodend,'DD.MM.YYYY') as spd.periodend from ${schemata}.vw_staffreportperioddays spd left join ${schemata}.staff st on (spd.id_staff=st.id) where spd.id_reportperiod = ? and spd.id_staff in (${id_stafflist}) order by st.surname,st.prename,spd.periodstart asc;") %] - [% ELSE %] - [% sqlcmd = "select distinct(spd.id_staff),st.surname,st.prename,spd.id_reportperiod,spd.periodstart,spd.periodend from ${schemata}.vw_staffreportperioddays spd left join ${schemata}.staff st on (spd.id_staff=st.id) where spd.id_reportperiod = ? order by st.surname,st.prename,spd.periodstart asc;" %] - [% stafflist = dksdb.prepare("select distinct(spd.id_staff),st.surname,st.prename,spd.id_reportperiod,spd.periodstart,spd.periodend from ${schemata}.vw_staffreportperioddays spd left join ${schemata}.staff st on (spd.id_staff=st.id) where spd.id_reportperiod = ? order by st.surname,st.prename,spd.periodstart asc;") %] - [% END %] - [% staffmemberperiod = dksdb.prepare("select st.prename,st.surname,spd.* from ${schemata}.vw_staffreportperioddays spd left join ${schemata}.staff st on (spd.id_staff=st.id) where spd.id_reportperiod= ? and spd.id_staff= ? order by spd.daydate asc;") %] - [% staffperiodsums = dksdb.prepare("select * from ${schemata}.vw_staffreportperiodlist where id_reportperiod=? and id_staff=?;") %] - [% #sqlcmd %] - [% FOREACH wl = stafflist.execute(id_reportperiod) %] - - - - - - - - - - - - - - - [% wdk = 0 %] - [% FOREACH pw = staffmemberperiod.execute(id_reportperiod,wl.id_staff) %] - [% wd = pw.weekdates.split(',') %] - [% IF wdk == 0 %] - [% dspwd = pw.dspweekdates.split(',') %] - - - - - - - - - - [% END %] - - [% WHILE pw.daydate != wd.$wdk and wdk < 7 %] - - [% wdk = wdk + 1 %] - [% END %] - - [% IF wdk < 7 %] - [% IF pw.timestart1 %] - - [% ELSE %] - - [% END %] - [% END %] - - [% wdk = wdk + 1 %] - [% IF wdk >= 7 %] - - [% wdk = 0 %] - [% END %] - [% END %] - -
[% wl.periodstart %] - [% wl.periodend %][% wl.surname %] [% wl.prename %]
SemaineLundiMardiMecrediJeudiVendrediSamediDimancheTotaux
[% pw.dspweekshort %][% dspwd.0 %][% dspwd.1 %][% dspwd.2 %][% dspwd.3 %][% dspwd.4 %][% dspwd.5 %][% dspwd.6 %]
  - - - - - - - - - - - - - - - - - - - - - -
[% pw.timestart1 %][% pw.timeend1 %][% IF pw.workhours %][% pw.workhours %][% ELSE %] [% END %]
[% IF pw.timestart2 %][% pw.timestart2 %][% END %][% IF pw.timestart2 %][% pw.timeend2 %][% ELSE %] [% END %][% IF pw.recuperationhours %][% pw.recuperationhours %][% ELSE %] [% END %]
  [% IF pw.vacancyhours %][% pw.vacancyhours %][%ELSE%] [% END %]
[% IF pw.timepause %][% END %][% IF pw.timepause %][% pw.timepause %][% END %] 
-
  - - - - - - -
[% IF pw.week_totalhours && pw.week_totalhours != "00:00" %][% pw.week_totalhours %][% ELSE %] [%END %]
[% IF pw.week_recuperationhours && pw.week_recuperationhours != "00:00" %][% pw.week_recuperationhours %][% ELSE %] [%END %]
[% IF pw.week_vacancyhours && pw.week_vacancyhours != "00:00" %][% pw.week_vacancyhours %][% ELSE %] [%END %]
[% IF pw.week_diffhours && pw.week_diffhours != "00:00" %][% pw.week_diffhours %][% ELSE %] [%END %]
-
- [% sptotal = staffperiodsums.execute(id_reportperiod,wl.id_staff) %] - [% spt = sptotal.get_all() %] - - - - - - - - - - - - - - - - - - - - -
Totaux heures pour la période: [% wl.periodstart %] - [% wl.periodend %]
contractuelles:[% spt.0.contracthours %]travaillées:[% spt.0.workhours %]Congés:[% spt.0.vacancyhours %]Récupérées:[% spt.0.recuperationhours %]Total:[% spt.0.totalhours %]Payées:[% spt.0.payedhours %]à récupérer:[% spt.0.hoursdiff %]
-
- [% END %] - - \ No newline at end of file diff --git a/website/appphp/data/reports/pot/pot_staffmember_period/pot.ttf b/website/appphp/data/reports/pot/pot_staffmember_period/pot.ttf deleted file mode 100644 index df5809e2bc68207c8a13e769de3c631939aa38b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1372 zcmaJ>J#5=X6#kABMNyJTyP-rec4bCNEk(9zS&}8EHWCFvj2LiSL^V9LLrvQ%?bZ?n znL+I>Xn_6>?N+ovr)F({Y#B0m2s(9Wvu13E1f4o`DcY)!Kb4)OM;zbxz3;tuhr36D z0Z8C3c$D9GbFQMiB9zGUnC8|_$LeXDPd^6O1n~{qI_!}hCGOdneQ^Bl_dh@UocIyV zpZ40;uKwPizXSYD((8NV5I^L9Abywl#l4Pu6bG8b?-N%KoE-~A{6+i`@npw3>OsP1 z#Gep1x>l#%y8q-;;=fY;&7O1U(mrVj%bpIN2m2BNzc|_e$gV7 zceXAAqbTK!j{_Q){gBhR|M&4|4o-M_X#EDf`;nPgt<)E4Q~B3&QIVL;8dul?fwY!o zTDn>x+Nd{7Rv3yV%b%;H#i$rfYhF~!FOp8F(P`$_h~{$zN|-9thRIWPg4NS3pJ-l? zFYq&Qee}lU?Cj(}_eLibrf0?4*tojgiAOV;*3#12+R{=hlM!NX-{$r4Sd}zwe*9Z0 z7BiEHq@sxXA8}D$tgo%rx5f?QX0cdWz1FmI`NTPOrCh!&>7r7sMpBX#lV+01xU9s+ zE{th2DJdf=g<3?F*!!jRi>6_iPZ^u2X(BJD%6ei>mgEs#qM?t-(nu+(&!s$R{yfLC zdxDrR7B))LmqxFbQU!H=adEv;EG#O@^z>J@{eh;cx#WmAc{O`&tH=w2m@7=RE|rRm zaa{JwtG+Yn9lF177LLAqM_K*@iHP3{&u%<>-2;IQZ;iek>X~3rj^Bd_;^|ILyC8@V z0wo|`8u6yj;!u&rb3a4CC&9NdtQ;f+Zy685xOzU8)e zjqPJ&b;r5oI9(GfeqEO;+mzb%SF_-f-6h{Pj_JLM9g4a|)7yhd2kZZf&K~p2_+N#f BxHSL( diff --git a/website/appphp/data/reports/pot/pot_staffmember_period/pot.ttf.b64.txt b/website/appphp/data/reports/pot/pot_staffmember_period/pot.ttf.b64.txt deleted file mode 100644 index 33519cd1..00000000 --- a/website/appphp/data/reports/pot/pot_staffmember_period/pot.ttf.b64.txt +++ /dev/null @@ -1 +0,0 @@ -data:application/octet-stream;base64,AAEAAAALAIAAAwAwT1MvMg8SBSoAAAC8AAAAYGNtYXAXVtKHAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zq3RsYsAAAF4AAAB0GhlYWQZavrxAAADSAAAADZoaGVhB4IDxgAAA4AAAAAkaG10eAoAAEAAAAOkAAAAFGxvY2EAKAD8AAADuAAAAAxtYXhwAAkAigAAA8QAAAAgbmFtZVKkxIkAAAPkAAABVnBvc3QAAwAAAAAFPAAAACAAAwMAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpAAPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6QD//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAADAED/wAPAA8AACgA3AIcAAAEOAQczMjY1NCYjJSIGBw4BBw4BNz4BNQ4BBxYXHgEXFjMyNz4BNzY3LgEnDgEHDgE3PgE1LgEjEzIWBwYHBhYXFhceARUOAQczMhYVFAYrAQYHDgEHBiMiJy4BJyYnNDc+ATc2Ny4BJyY2Nz4BMzIWBwYHBhYXFhc+ATMyFhcuAScmNjc+ATMDLAoZEEUfLS0f/oMQHw8BGR4HNBEbFGJtCgYYGFI7O0xMOztSGBgFCFtRAxkbCDMRGxQXMRudCQgILgwLDA8PB2mGAgYDBzZMTDZgGyAgSCgoKklBQGciIwsTFEYwMDkJGQcPKDMEFQkJCAksDAwKDg8IESERFywVCRgHDyc0BBQJAWsqTiQuICAu0gEBHDQXBwMOFTAZCy8OCQ4NGQkJCQkZDQ4JDSoMGS8VBwMOFTEaAgMBgwUHIygnVCorKRBDKhUnFE44OE4yKCc4Dw8rK5dnZ3cXFBQiDA0HHz8eQWAoAwUFByInJlIpKigBAQICHj4dQWAoAwUAAAEAAAABAACaNXijXw889QALBAAAAAAA20XbOgAAAADbRds6AAD/wAPAA8AAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAA8AAAQAAAAAAAAAAAAAAAAAAAAUEAAAAAAAAAAAAAAACAAAABAAAQAAAAAAACgAUAB4A6AABAAAABQCIAAMAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEAAwAAAAEAAAAAAAIABwA8AAEAAAAAAAMAAwAqAAEAAAAAAAQAAwBRAAEAAAAAAAUACwAJAAEAAAAAAAYAAwAzAAEAAAAAAAoAGgBaAAMAAQQJAAEABgADAAMAAQQJAAIADgBDAAMAAQQJAAMABgAtAAMAAQQJAAQABgBUAAMAAQQJAAUAFgAUAAMAAQQJAAYABgA2AAMAAQQJAAoANAB0cG90AHAAbwB0VmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwcG90AHAAbwB0cG90AHAAbwB0UmVndWxhcgBSAGUAZwB1AGwAYQBycG90AHAAbwB0Rm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== \ No newline at end of file diff --git a/website/appphp/data/schemata/.htaccess b/website/appphp/data/schemata/.htaccess deleted file mode 100644 index b4b826d0..00000000 --- a/website/appphp/data/schemata/.htaccess +++ /dev/null @@ -1,5 +0,0 @@ -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/website/appphp/data/schemata/defaultcompany.schema.sql b/website/appphp/data/schemata/defaultcompany.schema.sql deleted file mode 100644 index 1e7bb2a3..00000000 --- a/website/appphp/data/schemata/defaultcompany.schema.sql +++ /dev/null @@ -1,1349 +0,0 @@ - -CREATE SCHEMA %%NEWSCHEMA%%; - -CREATE FUNCTION %%NEWSCHEMA%%.add_reportperiod() RETURNS text - LANGUAGE plpgsql - AS $$ -declare - rpstart date; - rpend date; - rplength int4; - rpparentid text; - rpunit text; - allstaff record; - newperiodid text; -begin - select reportperiodunit,reportperiodlength,reportperiodstart into rpunit,rplength,rpstart from public.companies where schemata='%%NEWSCHEMA%%'; - select case when max(enddate) is null then rpstart else date(max(enddate) + interval '1 day') end into rpstart from %%NEWSCHEMA%%.reportperiod; - execute 'select date(date(''' || rpstart || ''') + interval ''' || rplength || ' ' || rpunit || 's'' - interval ''1 day'' );' into rpend; - select max(id) into rpparentid from %%NEWSCHEMA%%.reportperiod; - --raise notice 'ADD NEW PERIOD: %->%',rpstart,rpend; - INSERT INTO %%NEWSCHEMA%%.reportperiod (startdate, enddate, id_parentreportperiod) VALUES(rpstart,rpend,rpparentid) returning id into newperiodid; - for allstaff in select id_staff from %%NEWSCHEMA%%.staff where isdeleted is null - loop - perform %%NEWSCHEMA%%.set_staffperioddays(newperiodid,allstaff.id_staff); - end loop; - - return newperiodid; -end; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.add_staff() RETURNS text - LANGUAGE plpgsql - AS $$ -declare - newuuid text; - stgrid text; - iddef_workplan text; -begin - select id into iddef_workplan from %%NEWSCHEMA%%.workplans where isdefault = true; - select id into stgrid from %%NEWSCHEMA%%.staffgroups where isdefault is null; - if (stgrid is null) then - select id into stgrid from %%NEWSCHEMA%%.staffgroups limit 1; - end if; - insert into %%NEWSCHEMA%%.staff (id_staffgroup) values (stgrid) returning id into newuuid; - insert into %%NEWSCHEMA%%.staffcontract (id_staff,startdate,id_contractworkplan) values (newuuid,CURRENT_DATE,iddef_workplan); - return newuuid; -end; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.add_workplan(pwkname text) RETURNS text - LANGUAGE plpgsql - AS $$ -declare - newuuid text; -begin - insert into %%NEWSCHEMA%%.workplans (workplan) values (pwkname) returning id into newuuid; - for cntwd in 1..7 LOOP - insert into %%NEWSCHEMA%%.workplandays (id_workplan,weeknum,weekday) values (newuuid,1,cntwd); - end loop; - return newuuid; -end; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.clean_staffperiodday(vid_staffperioddays json) RETURNS boolean - LANGUAGE plpgsql - AS $$ - declare - rcopy record; - begin - --select id_reportperiod,id_staff into rcopy from %%NEWSCHEMA%%.staffreportperioddays where id in (vid_staffperioddays) group by id_reportperiod, id_staff; - update %%NEWSCHEMA%%.staffreportperioddays set timestart1 = null, - timeend1 =null, - timestart2 = null, - timeend2 = null, - timepause = null, - vacancyhours = null, - id_vacancytype = null, - id_recuperationtype = null, - recuperationhours = null, - workhours=null, - dayhours=null - where id in (select value from json_array_elements_text(vid_staffperioddays) aa); - for rcopy in select id_reportperiod,id_staff from %%NEWSCHEMA%%.staffreportperioddays where id in (select value from json_array_elements_text(vid_staffperioddays) aa) group by id_reportperiod, id_staff - loop - perform %%NEWSCHEMA%%.update_staff_in_period(rcopy.id_reportperiod, rcopy.id_staff); - end loop; - RETURN true; - END; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.clone_staffperiodweekdayhours(vcopyid text, vpasteids json) RETURNS boolean - LANGUAGE plpgsql - AS $$ - declare - rcopy record; - - begin - - select * into rcopy from %%NEWSCHEMA%%.staffreportperioddays where id=vcopyid; - update %%NEWSCHEMA%%.staffreportperioddays set timestart1=rcopy.timestart1, - timeend1=rcopy.timeend1, - timestart2= rcopy.timestart2, - timeend2=rcopy.timeend2, - timepause=rcopy.timepause, - vacancyhours=rcopy.vacancyhours, - id_vacancytype=rcopy.id_vacancytype, - id_recuperationtype=rcopy.id_recuperationtype, - recuperationhours=rcopy.recuperationhours - where id in (select value from json_array_elements_text(vpasteids) aa); - perform %%NEWSCHEMA%%.update_staff_in_period(rcopy.id_reportperiod, rcopy.id_staff); - RETURN true; - END; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.del_staff(pid_staff text) RETURNS boolean - LANGUAGE plpgsql - AS $$ -begin - update %%NEWSCHEMA%%.staff set isdeleted = true; - return true; -end; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.del_staffcontract(pid_staffcontract text) RETURNS boolean - LANGUAGE plpgsql - AS $$ -declare - idstaff text; - rps record; -begin - select id_staff into idstaff from %%NEWSCHEMA%%.staffcontract where id=pid_staffcontract; - delete from %%NEWSCHEMA%%.staffcontract where id=pid_staffcontract; - for rps in select id from %%NEWSCHEMA%%.reportperiod - loop - perform %%NEWSCHEMA%%.set_staffperioddays(rps.id, idstaff); - end loop; - return true; -end; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.delete_workplan(pid_workplan text) RETURNS boolean - LANGUAGE plpgsql - AS $$ -declare -begin - delete from %%NEWSCHEMA%%.workplandays where id_workplan=pid_workplan; - --update %%NEWSCHEMA%%.staffcontract set id_worplan=null where id_workplan=pid_workplan; - delete from %%NEWSCHEMA%%.workplans where id=pid_workplan; - return true; -end; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.duplicate_workplan(pid_workplan text) RETURNS text - LANGUAGE plpgsql - AS $$ -declare - newuuid text; - wkname text; -begin - select workplan || ' Copy' into wkname from %%NEWSCHEMA%%.workplans where id=pid_workplan; - insert into %%NEWSCHEMA%%.workplans (workplan) values (wkname) returning id into newuuid; - insert into %%NEWSCHEMA%%.workplandays (id_workplan, weekday, start1, end1, start2, end2, pause, weeknum) - select newuuid as id_workplan, weekday,start1,end1,start2,end2,pause,weeknum from %%NEWSCHEMA%%.workplandays where id_workplan = pid_workplan; - return newuuid; -end; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.getperiod_staffcontract(pid text) RETURNS TABLE(id text, id_staff text, startdate date, enddate date) - LANGUAGE plpgsql - AS $$ - declare - pstart date; - pend date; - begin - select prd.startdate as prdstart,prd.enddate as prdend into pstart,pend from %%NEWSCHEMA%%.reportperiod prd where prd.id=pid; - return QUERY -select sc.id,sc.id_staff,sc.weekdays,sc.weekhours, sc.weekhours/sc.weekdays as wdcontracthours, -case when sc.startdate < pstart then pstart else sc.startdate end as startdate, -case when sc.enddate is null then pend when sc.enddate > pend then pend else sc.enddate end as enddate -from %%NEWSCHEMA%%.staffcontract sc -join %%NEWSCHEMA%%.staff st on st.id=sc.id_staff -where sc.startdate<= pend and (sc.enddate is null or sc.enddate >= pstart) and st.isdeleted is null -order by sc.id_staff,sc.startdate,sc.enddate; -END; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.getperiod_staffcontractdata(pid text) RETURNS TABLE(id text, id_staff text, startdate date, enddate date, weekdays integer, weekhours interval, wdcontracthours interval) - LANGUAGE plpgsql - AS $$ - declare - pstart date; - pend date; - begin - select prd.startdate as prdstart,prd.enddate as prdend into pstart,pend from %%NEWSCHEMA%%.reportperiod prd where prd.id=pid; - return QUERY -select sc.id,sc.id_staff, -case when sc.startdate < pstart then pstart else sc.startdate end as startdate, -case when sc.enddate is null then pend when sc.enddate > pend then pend else sc.enddate end as enddate -,sc.weekdays,sc.weekhours, sc.weekhours/case when sc.weekdays = 0 or sc.weekdays is null then 7 else sc.weekdays end as wdcontracthours -from %%NEWSCHEMA%%.staffcontract sc -join %%NEWSCHEMA%%.staff st on st.id=sc.id_staff -where sc.startdate<= pend and (sc.enddate is null or sc.enddate >= pstart) and st.isdeleted is null -order by sc.id_staff,sc.startdate,sc.enddate; -END; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.refresh_periods() RETURNS boolean - LANGUAGE plpgsql - AS $$ - declare - prds record; - begin - for prds in select id from %%NEWSCHEMA%%.reportperiod order by startdate,enddate - loop - perform %%NEWSCHEMA%%.update_all_staff_in_period(prds.id); - end loop; - RETURN true; - END; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.replace_staffperiodweekdayhours(vworkplanid text, vkeepvac boolean, vkeeprec boolean, vreplaceids json) RETURNS boolean - LANGUAGE plpgsql - AS $$ - declare - rcopy record; - - begin - for rcopy in select * from %%NEWSCHEMA%%.workplandays w where id_workplan=vworkplanid - loop - update %%NEWSCHEMA%%.staffreportperioddays set timestart1=rcopy.start1,timeend1=rcopy.end1,timestart2=rcopy.start2,timeend2=rcopy.end2, timepause=rcopy.pause - where id in (select value from json_array_elements_text(vreplaceids) aa) and date_part('isodow',daydate)::INT4=rcopy.weekday; - if vkeepvac = false then - update %%NEWSCHEMA%%.staffreportperioddays set vacancyhours=null,id_vacancytype=null - where id in (select value from json_array_elements_text(vreplaceids) aa) and date_part('isodow',daydate)::INT4=rcopy.weekday; - end if; - if vkeeprec = false then - update %%NEWSCHEMA%%.staffreportperioddays set recuperationhours=null,id_recuperationtype=null - where id in (select value from json_array_elements_text(vreplaceids) aa) and date_part('isodow',daydate)::INT4=rcopy.weekday; - end if; - end loop; - perform %%NEWSCHEMA%%.update_periodsums_byid(vreplaceids); - RETURN true; - END; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.set_staffperiod(pid_period text, pid_staff text) RETURNS boolean - LANGUAGE plpgsql - AS $$ - declare - weekrec record; - BEGIN - for weekrec in select id_staff,id_reportperiod, -sum(contracthours) as contracthours, -sum(workhours) as workhours, -sum(vacancyhours) as vacancyhours, -sum(recuperationhours) as recuperationhours, -sum(diffhours) as hoursdiff, -sum(totalhours) as totalhours -from %%NEWSCHEMA%%.staffreportperiodweeks where id_staff=pid_staff and id_reportperiod=pid_period group by id_reportperiod,id_staff - loop - insert into %%NEWSCHEMA%%.staffreportperiod (id_staff,id_reportperiod,contracthours,workhours,vacancyhours,recuperationhours,hoursdiff,totalhours) - values (pid_staff,pid_period ,weekrec.contracthours,weekrec.workhours,weekrec.vacancyhours,weekrec.recuperationhours,weekrec.hoursdiff,weekrec.totalhours) - on conflict on constraint uniq_staffreportperiod_cal do update set contracthours=weekrec.contracthours, - workhours=weekrec.workhours, - vacancyhours=weekrec.vacancyhours, - recuperationhours=weekrec.recuperationhours, - hoursdiff=weekrec.hoursdiff, - totalhours=weekrec.totalhours; - end loop; - --set periodstaffdata (based on periodweeks) - --set nextperiodsdata(based on) - return true; - END; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.set_staffperiod_sums(pid_period text, pid_staff text) RETURNS boolean - LANGUAGE plpgsql - AS $$ - declare - weekrec record; - BEGIN - for weekrec in select id_staff,id_reportperiod, -sum(contracthours) as contracthours, -sum(workhours) as workhours, -sum(vacancyhours) as vacancyhours, -sum(recuperationhours) as recuperationhours, -sum(diffhours) as hoursdiff, -sum(totalhours) as totalhours -from %%NEWSCHEMA%%.staffreportperiodweeks where id_staff=pid_staff and id_reportperiod=pid_period group by id_reportperiod,id_staff - loop - update %%NEWSCHEMA%%.staffreportperiod set contracthours=weekrec.contracthours, - workhours=weekrec.workhours, - vacancyhours=weekrec.vacancyhours, - recuperationhours=weekrec.recuperationhours, - hoursdiff=weekrec.hoursdiff, - totalhours=weekrec.totalhours - where id_staff=pid_staff and id_reportperiod=pid_period; - end loop; - --set periodstaffdata (based on periodweeks) - --set nextperiodsdata(based on) - return true; - END; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.set_staffperiodday_sums(pid_periodday text) RETURNS text - LANGUAGE plpgsql - AS $$ -declare - stw record; - dt1 interval := '00:00:00'::interval; - dt2 interval := '00:00:00'::interval; - dp interval := '00:00:00'::interval; - cworkhours interval := '00:00:00'::interval; - --cvacancyhours interval := '00:00:00'::interval; - --crecuperationhours interval := '00:00:00'::interval; - cdayhours interval := '00:00:00'::interval; - cinterruptionhours interval := '00:00:00'::interval; - ccontracthours interval := '00:00:00'::interval; -begin - --raise notice 'set Period Day: %s', pid_periodday; - select * into stw from %%NEWSCHEMA%%.staffreportperioddays where id=pid_periodday; - if stw.timestart1 is not null and stw.timeend1 is not null then - if stw.timeend1 < stw.timestart1 then - dt1 := '24:00:00'::interval + stw.timeend1::interval - stw.timestart1::interval; - else - dt1 := stw.timeend1-stw.timestart1; - end if; - end if; - if stw.timestart2 is not null and stw.timeend2 is not null then - if stw.timeend2 < stw.timestart2 then - dt2 := '24:00:00'::interval + stw.timeend2::interval - stw.timestart2::interval; - else - dt2 := stw.timeend2-stw.timestart2; - end if; - end if; - if stw.timepause is not null then - dp := stw.timepause; - end if; - cworkhours := (dt1+dt2)-dp; - if (dt1 > '00:00:00'::interval and dt2 > '00:00:00'::interval) then - cinterruptionhours := stw.timestart2 - stw.timeend1; - end if; - /*if stw.vacancyhours is not null then - if stw.vacancyhours <= stw.contracthours then - cvacancyhours := stw.vacancyhours; - else - cvacancyhours := stw.contracthours; - end if; - end if;*/ - /*if stw.recuperationhours is not null then - if stw.recuperationhours <= stw.contracthours then - crecuperationhours := stw.recuperationhours; - else - crecuperationhours := stw.contracthours; - end if; - end if;*/ - cdayhours := cworkhours::interval+coalesce(stw.vacancyhours::interval,'00:00:00'::interval)+coalesce(stw.recuperationhours::interval,'00:00:00'::interval); - /*if cdayhours > '00:00:00'::interval then - ccontracthours := stw.wdcontracthours; - end if;*/ - update %%NEWSCHEMA%%.staffreportperioddays set workhours=cworkhours,interruptionhours=cinterruptionhours,dayhours=cdayhours where id=pid_periodday; - return pid_periodday; -end; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.set_staffperioddays(pid_period text, pid_staff text) RETURNS boolean - LANGUAGE plpgsql - AS $$ -declare - cont record; - prd record; - pday record; - cdate date; - cid_staffworkplan text; -begin - select * into prd from %%NEWSCHEMA%%.reportperiod where id= pid_period; - for cont in select * from %%NEWSCHEMA%%.getperiod_staffcontractdata(pid_period) where id_staff=pid_staff - loop - cdate := cont.startdate; - - while cdate <= cont.enddate loop - --raise notice 'cdate %: % <=> %',cdate, prd.startdate,prd.enddate; - if cdate between prd.startdate and prd.enddate then - --raise notice 'insert %: % <=> %',cdate, prd.startdate,prd.enddate; - insert into %%NEWSCHEMA%%.staffreportperioddays (id_staff,daydate,id_reportperiod,wdcontracthours ) values ( pid_staff , cdate , pid_period,cont.wdcontracthours) - on conflict on constraint uniq_staffworplan_staffday do update set wdcontracthours=cont.wdcontracthours; - end if; - cdate = cdate + interval '1 day'; - end loop; - - end loop; - perform %%NEWSCHEMA%%.verify_perioddays(pid_period,pid_staff); - for pday in select id from %%NEWSCHEMA%%.staffreportperioddays where id_staff=pid_staff and pid_period=pid_period - loop - perform %%NEWSCHEMA%%.set_staffperiodday_sums(pday.id); - end loop; - raise notice 'start set_staffperiodweeks % % ',pid_period,pid_staff; - perform %%NEWSCHEMA%%.set_staffperiodweeks(pid_period,pid_staff); - return true; -end; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.set_staffperiodweek_sums(pid_reportperiod text, pid_staff text) RETURNS boolean - LANGUAGE plpgsql - AS $$ -declare - sweek record; - tmpcontrhours interval; - freedays int4 := 0; -begin - -for sweek in select srpd.id_staff,srpd.id_reportperiod,date(date_trunc('week',srpd.daydate)) as weekstart,date_part('week',srpd.daydate) as calweek, -date_part('isoyear',srpd.daydate) as calyear, -coalesce(sum(srpd.workhours::interval),'00:00:00'::interval) as workhours, -coalesce(sum('00:00:00'::interval),'00:00:00'::interval) as trackedhours, -coalesce(sum(srpd.vacancyhours::interval),'00:00:00'::interval) as vacancyhours, -coalesce(sum(srpd.recuperationhours::interval),'00:00:00'::interval) as recuperationhours, -coalesce(sum(srpd.dayhours::interval),'00:00:00'::interval) as totalhours, -sum(case when srpd.workhours != '00:00:00'::time then 1 else 0 end) as workdays, -coalesce(sum(contracthours::interval),'00:00:00'::interval) as contracthours -from %%NEWSCHEMA%%.staffreportperioddays srpd -join %%NEWSCHEMA%%.reportperiod rp on (rp.id=srpd.id_reportperiod) -where srpd.id_reportperiod =pid_reportperiod and srpd.id_staff=pid_staff -group by weekstart,calweek,calyear,srpd.id_staff,srpd.id_reportperiod -loop - update %%NEWSCHEMA%%.staffreportperiodweeks set - workhours=sweek.workhours, - trackedhours=sweek.trackedhours, - vacancyhours=sweek.vacancyhours, - recuperationhours=sweek.recuperationhours, - diffhours=case when sweek.contracthours is null or sweek.contracthours='00:00:00'::interval then null else sweek.totalhours-sweek.contracthours end, - totalhours=sweek.totalhours, - workdays=sweek.workdays - where id_staff=sweek.id_staff and id_reportperiod=sweek.id_reportperiod and weekstart=sweek.weekstart; -end loop; - --raise notice 'UPDATE WEEK SUMS %',sweek; - /**/ - /*if wkcon.defaultfreedays is not null then - freedays = json_array_length(wkcon.defaultfreedays); - end if; - wkcon.contracthours=wkcon.weekhours; - wkcon.contractdays=wkcon.weekdays; - if wkcon.calweek= date_part('week',wkcon.periodstart)::int4 and wkcon.calyear= date_part('isoyear',wkcon.periodstart)::int4 then - wkcon.contracthours = wkcon.contracthours - ((wkcon.weekhours/wkcon.weekdays) * (wkcon.startdate-wkcon.periodstart)::int4); - end if;*/ - - --if wkcon.startdate > wkcon.periodstart then - -- wkcon.contractdays = wkcon.contractdays-(wkcon.startdate-wkcon.periodstart)::int4; - -- wkcon.contracthours = (wkcon.weekhours/wkcon.weekdays) * wkcon.contractdays; - --end if; - --if wkcon.enddate < wkcon.periodend then - -- wkcon.contractdays = wkcon.contractdays-(wkcon.periodend-wkcon.enddate)::int4; - -- wkcon.contracthours = (wkcon.weekhours/wkcon.weekdays) * wkcon.contractdays; - --end if; - - - /*wkcon.diffhours = wkcon.totalhours-wkcon.contracthours; - raise notice 'contractdays: % contracthours: % totalhours: % diffhours: %',wkcon.contractdays,wkcon.contracthours,wkcon.totalhours,wkcon.diffhours;*/ - --raise notice 'id=% cdays=% chours=% diffhours=%',wkcon.id,wkcon.contractdays,wkcon.contracthours,wkcon.diffhours; - - - - - return true; -end; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.set_staffperiodweeks(pid_reportperiod text, pid_staff text) RETURNS boolean - LANGUAGE plpgsql - AS $$ -declare - wkpd record; - wkcon record; -begin - for wkpd in select srpd.id_staff,srpd.id_reportperiod,date(date_trunc('week',srpd.daydate)) as weekstart,date_part('week',srpd.daydate) as calweek, -date_part('isoyear',srpd.daydate) as calyear, -coalesce(sum(srpd.workhours::interval),'00:00:00'::interval) as workhours, -coalesce(sum('00:00:00'::interval),'00:00:00'::interval) as trackedhours, -coalesce(sum(srpd.vacancyhours::interval),'00:00:00'::interval) as vacancyhours, -coalesce(sum(srpd.recuperationhours::interval),'00:00:00'::interval) as recuperationhours, -coalesce(sum(srpd.dayhours::interval),'00:00:00'::interval) as totalhours, -sum(case when srpd.workhours != '00:00:00'::time then 1 else 0 end) as workdays, -coalesce(sum(contracthours::interval),'00:00:00'::interval) as contracthours -from %%NEWSCHEMA%%.staffreportperioddays srpd -join %%NEWSCHEMA%%.reportperiod rp on (rp.id=srpd.id_reportperiod) -where srpd.id_reportperiod =pid_reportperiod and srpd.id_staff=pid_staff -group by weekstart,calweek,calyear,srpd.id_staff,srpd.id_reportperiod - loop - raise notice 'CHECK WEEK % % ',wkpd.calweek,wkpd.calyear; - --raise notice 'id_staff: % id_period: % calweek: % calyear: %',pid_staff,pid_reportperiod,wkpd.calweek,wkpd.calyear; - insert into %%NEWSCHEMA%%.staffreportperiodweeks (id_staff, id_reportperiod, calyear, calweek, workhours,vacancyhours, recuperationhours, weekstart,totalhours,workdays,contracthours,diffhours) - VALUES(wkpd.id_staff, wkpd.id_reportperiod, wkpd.calyear, wkpd.calweek, wkpd.workhours, wkpd.vacancyhours, wkpd.recuperationhours, wkpd.weekstart,wkpd.totalhours,wkpd.workdays,wkpd.contracthours,wkpd.contracthours-wkpd.totalhours) - on conflict on constraint uniq_staffweekplan_cal do nothing; - perform %%NEWSCHEMA%%.set_staffperiodweek_sums(wkpd.id_reportperiod,wkpd.id_staff); - end loop; - perform %%NEWSCHEMA%%.set_staffperiod(pid_reportperiod, pid_staff); - - return true; -end; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.set_stafftoperiodweeks(pid_reportperiod text, pid_staff text) RETURNS boolean - LANGUAGE plpgsql - AS $$ -declare - wkpd record; - wkcon record; -begin - for wkpd in select id_staff,id_reportperiod,calyear,calweek,weekstart, -coalesce(sum(workhours),'00:00:00') as workhours , -coalesce(sum(vacancyhours),'00:00:00') as vacancyhours , -coalesce(sum(recuperationhours) ,'00:00:00' ) as recuperationhours , -coalesce(sum(dayhours),'00:00:00') as totalhours, -coalesce(sum(contracthours),'00:00:00') as contracthours, -count(wdcontracthours) as caldays -from ( -select swp.id,swp.id_reportperiod,swp.id_staff, -date_part('isoyear',swp.daydate) as calyear, -date_part('week',swp.daydate) as calweek, -date(date_trunc('week',swp.daydate)) as weekstart, -swp.workhours, -swp.contracthours, -swp.recuperationhours, -swp.dayhours, -swp.vacancyhours, -swp.wdcontracthours -from %%NEWSCHEMA%%.staffreportperioddays swp -where swp.id_reportperiod= pid_reportperiod and swp.id_staff=pid_staff) wkwp group by id_staff,id_reportperiod,calyear,calweek,weekstart - loop - --raise notice 'id_staff: % id_period: % calweek: % calyear: %',pid_staff,pid_reportperiod,wkpd.calweek,wkpd.calyear; - insert into %%NEWSCHEMA%%.staffreportperiodweeks (id_staff, id_reportperiod, calyear, calweek, workhours,vacancyhours, recuperationhours, weekstart,totalhours,caldays,contracthours,diffhours) - VALUES(wkpd.id_staff, wkpd.id_reportperiod, wkpd.calyear, wkpd.calweek, wkpd.workhours, wkpd.vacancyhours, wkpd.recuperationhours, wkpd.weekstart,wkpd.totalhours,wkpd.caldays,wkpd.contracthours,wkpd.contracthours-wkpd.totalhours) - on conflict on constraint uniq_staffweekplan_cal do update set workhours=wkpd.workhours, vacancyhours=wkpd.vacancyhours, recuperationhours=wkpd.recuperationhours,totalhours=wkpd.totalhours,caldays=wkpd.caldays,contracthours=wkpd.contracthours,diffhours=wkpd.contracthours-wkpd.totalhours; - end loop; - --perform %%NEWSCHEMA%%.set_staffperiodweek_sums(pid_reportperiod, pid_staff); - - return true; -end; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.setworkplan_weekdata(pid_workplan text) RETURNS boolean - LANGUAGE plpgsql - AS $$ -declare - freedays text; - wdcnt int4; - xweekhours interval; -begin - select '["' || string_agg(weekday::text,'","') || '"]' into freedays from %%NEWSCHEMA%%.workplandays where id_workplan=pid_workplan and start1 is null and start2 is null group by id_workplan; - select count(*) into wdcnt from %%NEWSCHEMA%%.workplandays where id_workplan=pid_workplan and start1 is not null group by id_workplan; - if wdcnt is null then - wdcnt=0; - end if; - SELECT sum( - coalesce(CASE WHEN start1 > end1 THEN '24:00:00'::time without time zone - (start1 - end1)::time without time zone ELSE end1 - start1 end,'00:00:00'::interval) + - coalesce(CASE WHEN start2 > end2 and start1 is not null THEN '24:00:00'::time without time zone - (start2 - end2)::time without time zone ELSE end2 - start2 end,'00:00:00'::interval) - - coalesce(pause,'00:00:00'::time without time zone)) into xweekhours FROM %%NEWSCHEMA%%.workplandays where id_workplan=pid_workplan group by id_workplan ; - update %%NEWSCHEMA%%.workplans set weekhours = xweekhours, weekdays = wdcnt, freeweekdayslist = freedays::JSON where id=pid_workplan; - --update %%NEWSCHEMA%%.staffcontract set weekdays= wdcnt, weekhours= xweekhours, defaultfreedays= freedays::JSON where id_contractworkplan=pid_workplan; - return true; -end; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.trg_after_upd_staffcontract() RETURNS trigger - LANGUAGE plpgsql - AS $$ - declare - idstaff text; - datestart date; - dateend date; - rp record; - begin - raise notice 'After update exec %',new.id; - UPDATE %%NEWSCHEMA%%.staffcontract sc SET weekdays = wp.weekdays , weekhours = wp.weekhours,defaultfreedays= wp.freeweekdayslist from %%NEWSCHEMA%%.workplans wp where wp.id =sc.id_contractworkplan and sc.id=new.id - returning id_staff,startdate,enddate into idstaff,datestart,dateend; - raise notice 'idstaff % startdate % enddate %',idstaff,datestart,dateend; - if datestart is not null and dateend is null then - for rp in select id from %%NEWSCHEMA%%.reportperiod where datestart between startdate and enddate or startdate > datestart - loop - raise notice 'run update_staff_in_period startdate % => %',datestart ,rp.id; - perform %%NEWSCHEMA%%.set_staffperioddays(rp.id, idstaff); - end loop; - elsif dateend is not null then - for rp in select id from %%NEWSCHEMA%%.reportperiod where enddate >= datestart and (startdate <= dateend) - loop - raise notice 'run update_staff_in_period startdate % enddate % => %',datestart,dateend,rp.id; - perform %%NEWSCHEMA%%.set_staffperioddays(rp.id, idstaff); - end loop; - end if; - - RETURN NEW; - END; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.trg_after_upd_worplanday() RETURNS trigger - LANGUAGE plpgsql - AS $$ - BEGIN - perform %%NEWSCHEMA%%.setworkplan_weekdata((select id_workplan from %%NEWSCHEMA%%.workplandays where id=new.id)); - RETURN NEW; - END; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.trg_before_upd_schematable() RETURNS trigger - LANGUAGE plpgsql - AS $$ - begin - new.modified = now(); - RETURN NEW; - END; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.update_all_staff_in_period(pid_period text) RETURNS boolean - LANGUAGE plpgsql - AS $$ - declare - staffrec record; - staffreportid text; - BEGIN - for staffrec in select id_staff from %%NEWSCHEMA%%.getperiod_staffcontract(pid_period) group by id_staff - loop - perform %%NEWSCHEMA%%.update_staff_in_period(pid_period,staffrec.id_staff); - end loop; - return true; - END; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.update_periodsums_byid(vdayids json) RETURNS boolean - LANGUAGE plpgsql - AS $$ -declare - rday record; - rweek record; - rperiod record; -BEGIN - for rday in select id from %%NEWSCHEMA%%.staffreportperioddays where id in (select value from json_array_elements_text(vdayids) aa) group by id - loop - perform %%NEWSCHEMA%%.set_staffperiodday_sums(rday.id); - end loop; - for rweek in select id_staff,id_reportperiod from %%NEWSCHEMA%%.staffreportperioddays where id in (select value from json_array_elements_text(vdayids) aa) group by id_reportperiod,id_staff - loop - perform %%NEWSCHEMA%%.set_staffperiodweek_sums(rweek.id_reportperiod,rweek.id_staff); - perform %%NEWSCHEMA%%.set_staffperiod_sums(rweek.id_reportperiod,rweek.id_staff); - end loop; - return true; - END; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.update_staff_in_period(pid_period text, pid_staff text) RETURNS boolean - LANGUAGE plpgsql - AS $$ - declare - staffreportid text; - rdays record; - begin - raise notice 'update staff in period called rp: % st: %',pid_period,pid_staff; - if (pid_period is not null and pid_staff is not null) then - for rdays in select id from %%NEWSCHEMA%%.staffreportperioddays where id_staff=pid_staff and id_reportperiod=pid_period - loop - perform %%NEWSCHEMA%%.set_staffperiodday_sums(rdays.id); - end loop; - perform %%NEWSCHEMA%%.set_staffperiodweek_sums(pid_period,pid_staff); - perform %%NEWSCHEMA%%.set_staffperiod_sums(pid_period,pid_staff); - end if; - return true; - END; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.update_staffreportperiod(pid_reportperiod text, pid_staff text) RETURNS boolean - LANGUAGE plpgsql - AS $$ -declare - stprd record; -begin - for stprd in SELECT id_staff, id_period, sum(plannedhours) as plannedhours,sum(contracthours) as contracthours, sum(trackedhours) as trackedhours, sum(vacancyhours) as vacancyhours, sum(recuperationhours) as recuperationhours, sum(hoursdiff) as hoursdiff - FROM %%NEWSCHEMA%%.staffweeksums where id_period=pid_reportperiod and id_staff=pid_staff group by id_staff,id_period - loop - INSERT INTO %%NEWSCHEMA%%.staffreportperiodsums (id_staff, id_reportperiod, plannedhours, contracthours, trackedhours, vacancyhours, recuperationhours, hoursdiff) - values (stprd.id_staff,stprd.id_period,stprd.plannedhours,stprd.contracthours,stprd.trackedhours,stprd.vacancyhours,stprd.recuperationhours,stprd.hoursdiff) - on conflict on constraint uniq_staffperiod_cal do update set plannedhours=stprd.plannedhours,contracthours=stprd.contracthours,trackedhours=stprd.trackedhours,vacancyhours=stprd.vacancyhours,recuperationhours=stprd.recuperationhours,hoursdiff=stprd.hoursdiff; - end loop; - return true; -end; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.verify_perioddays(pid_period text, pid_staff text) RETURNS boolean - LANGUAGE plpgsql - AS $$ -declare - rpstart date; - rpend date; - wkpd record; - qlnotin text := ''; - sqlcheck text := ''; -begin - select startdate,enddate into rpstart,rpend from %%NEWSCHEMA%%.reportperiod where id=pid_period; - for wkpd in select id_staff,case when startdate <= rpstart then rpstart else startdate end as startdate,case when enddate is null then rpend else enddate end as enddate from %%NEWSCHEMA%%.staffcontract where id_staff=pid_staff and startdate <= rpend and (enddate is null or enddate >= rpstart) - loop - qlnotin := qlnotin || ' and daydate not between date(''' || wkpd.startdate || ''') AND date(''' || wkpd.enddate || ''')'; - end loop; - sqlcheck := 'delete from %%NEWSCHEMA%%.staffreportperioddays where id in (select id from %%NEWSCHEMA%%.staffreportperioddays where id_staff=''' || pid_staff || ''' and id_reportperiod=''' || pid_period || ''' ' || qlnotin || ');'; - execute sqlcheck; - return true; -end; -$$; - -CREATE FUNCTION %%NEWSCHEMA%%.workplan_replaceday(pid_copy text, pid_paste text) RETURNS boolean - LANGUAGE plpgsql - AS $$ -declare - rday record; -begin - select * into rday from %%NEWSCHEMA%%.workplandays where id=pid_copy; - update %%NEWSCHEMA%%.workplandays set start1=rday.start1,end1=rday.end1,start2=rday.start2,end2=rday.end2, pause=rday.pause where id=pid_paste; - return true; -end; -$$; - -CREATE TABLE %%NEWSCHEMA%%.reportperiod ( - periodname text, - startdate date, - enddate date, - id_parentreportperiod text, - id text DEFAULT public.getuuid() NOT NULL, - modified timestamp without time zone DEFAULT now(), - created timestamp without time zone DEFAULT now() -); - -CREATE TABLE %%NEWSCHEMA%%.reports ( - id text DEFAULT public.getuuid() NOT NULL, - report text, - pdftop numeric, - pdfbottom numeric, - pdfleft numeric, - pdfright numeric, - pdfunit text, - pdfsize text, - pdforientation text, - pdfencoding text, - footer text, - header text, - content text, - prefix text, - sqlfilename text, - actioncase text, - templatetype text, - pdfform boolean -); - -CREATE TABLE %%NEWSCHEMA%%.staff ( - staffnumber text, - surname text, - prename text, - job text, - birthdate date, - matricule text, - email text, - phone text, - city text, - zip text, - country text, - address text, - id_staffgroup text, - id text DEFAULT public.getuuid() NOT NULL, - isdeleted boolean, - modified timestamp without time zone DEFAULT now(), - created timestamp without time zone DEFAULT now() -); - -CREATE TABLE %%NEWSCHEMA%%.staffcontract ( - id_staff text, - startdate date, - enddate date, - id text DEFAULT public.getuuid() NOT NULL, - modified timestamp without time zone DEFAULT now(), - created timestamp without time zone DEFAULT now(), - weekdays integer, - weekhours interval, - defaultfreedays json, - id_contractworkplan text -); - -CREATE TABLE %%NEWSCHEMA%%.staffgroups ( - groupname text, - groupcolor text, - editoruser_ids json, - isdefault boolean, - id text DEFAULT public.getuuid() NOT NULL, - modified timestamp without time zone DEFAULT now(), - created timestamp without time zone DEFAULT now() -); - -CREATE TABLE %%NEWSCHEMA%%.staffreportperiod ( - id_reportperiod text, - id_staff text, - workhours interval, - contracthours interval, - totalhours interval, - vacancyhours interval, - recuperationhours interval, - hoursdiff interval, - payedhours interval, - diffhourspayed interval, - id text DEFAULT public.getuuid() NOT NULL, - modified timestamp without time zone DEFAULT now(), - created timestamp without time zone DEFAULT now() -); - -CREATE TABLE %%NEWSCHEMA%%.staffreportperioddays ( - id_staff text NOT NULL, - daydate date NOT NULL, - timestart1 time without time zone, - timeend1 time without time zone, - timestart2 time without time zone, - timeend2 time without time zone, - timepause time without time zone, - vacancyhours time without time zone, - contracthours time without time zone, - id_staffgroup text, - id_vacancytype text, - daytype text, - workhours time without time zone, - recuperationhours time without time zone, - trackedhours time without time zone, - id_reportperiod text, - dayhours time without time zone, - id_recuperationtype text, - interruptionhours time without time zone, - wdcontracthours time without time zone, - id text DEFAULT public.getuuid() NOT NULL, - modified timestamp without time zone DEFAULT now(), - created timestamp without time zone DEFAULT now() -); - -CREATE TABLE %%NEWSCHEMA%%.staffreportperiodweeks ( - id_staff text, - id_reportperiod text, - calyear integer, - calweek double precision, - contracthours interval DEFAULT '00:00:00'::interval, - workhours interval DEFAULT '00:00:00'::interval, - trackedhours interval DEFAULT '00:00:00'::interval, - vacancyhours interval DEFAULT '00:00:00'::interval, - recuperationhours interval DEFAULT '00:00:00'::interval, - diffhours interval DEFAULT '00:00:00'::interval, - weekstart date, - hoursrestbefore interval, - totalhours interval, - caldays integer, - contractdays integer, - workdays integer, - id text DEFAULT public.getuuid() NOT NULL, - modified timestamp without time zone DEFAULT now(), - created timestamp without time zone DEFAULT now() -); - -CREATE TABLE %%NEWSCHEMA%%.staffvacancy ( - id_staff integer, - daydate date, - id_vacancytype text, - vacancyhours time without time zone, - id text DEFAULT public.getuuid() NOT NULL, - modified timestamp without time zone DEFAULT now(), - created timestamp without time zone DEFAULT now() -); - -CREATE TABLE %%NEWSCHEMA%%.vacancydays ( - daydate date, - vacancyname text, - id text DEFAULT public.getuuid() NOT NULL, - modified timestamp without time zone DEFAULT now(), - created timestamp without time zone DEFAULT now() -); - -CREATE TABLE %%NEWSCHEMA%%.vacancytypes ( - vacancyname text, - isworktime boolean, - isfreetime boolean, - color text, - id text DEFAULT public.getuuid() NOT NULL, - modified timestamp without time zone DEFAULT now(), - created timestamp without time zone DEFAULT now() -); - -CREATE VIEW %%NEWSCHEMA%%.vw_reportperioddata AS - SELECT rp.id, - rp.periodname, - rp.startdate, - rp.enddate, - rp.id_parentreportperiod - FROM %%NEWSCHEMA%%.reportperiod rp; - -CREATE VIEW %%NEWSCHEMA%%.vw_reportperiodlist AS - SELECT rp.id, - rp.periodname, - rp.startdate, - rp.enddate, - rp.id_parentreportperiod - FROM %%NEWSCHEMA%%.reportperiod rp; - -CREATE VIEW %%NEWSCHEMA%%.vw_rplbygrpname AS - SELECT srp.id_reportperiod, - rp.startdate, - rp.enddate, - st.id_staffgroup, - sgr.groupname - FROM (((%%NEWSCHEMA%%.staffreportperiod srp - LEFT JOIN %%NEWSCHEMA%%.staff st ON ((srp.id_staff = st.id))) - LEFT JOIN %%NEWSCHEMA%%.reportperiod rp ON ((srp.id_reportperiod = rp.id))) - LEFT JOIN %%NEWSCHEMA%%.staffgroups sgr ON ((st.id_staffgroup = sgr.id))) - GROUP BY rp.startdate, rp.enddate, st.id_staffgroup, srp.id_reportperiod, sgr.groupname - ORDER BY sgr.groupname, rp.startdate, rp.enddate; - -CREATE VIEW %%NEWSCHEMA%%.vw_staffcontractdata AS - SELECT sc.id, - sc.id_staff, - sc.startdate, - sc.enddate, - sc.id AS id_staffcontract, - sc.weekdays, - sc.weekhours, - sc.id_contractworkplan, - sc.defaultfreedays - FROM (%%NEWSCHEMA%%.staffcontract sc - JOIN %%NEWSCHEMA%%.staff st ON ((st.id = sc.id_staff))) - WHERE (st.isdeleted IS NULL); - -CREATE TABLE %%NEWSCHEMA%%.workplans ( - workplan text, - weekhours interval, - weekdays integer, - freeweekdayslist json, - id text DEFAULT public.getuuid() NOT NULL, - modified timestamp without time zone DEFAULT now(), - created timestamp without time zone DEFAULT now(), - isdefault boolean -); - -CREATE VIEW %%NEWSCHEMA%%.vw_staffcontractlist AS - SELECT sc.id, - sc.id_staff, - sc.startdate, - sc.enddate, - sc.weekdays, - sc.weekhours, - sc.id_contractworkplan, - ( SELECT string_agg(ww.wday, ','::text) AS string_agg - FROM ( SELECT public.day_name(json_array_elements_text(sc.defaultfreedays)) AS wday) ww) AS defaultfreedays, - wp.workplan - FROM ((%%NEWSCHEMA%%.staffcontract sc - JOIN %%NEWSCHEMA%%.staff st ON ((st.id = sc.id_staff))) - LEFT JOIN %%NEWSCHEMA%%.workplans wp ON ((sc.id_contractworkplan = wp.id))) - WHERE (st.isdeleted IS NULL) - ORDER BY sc.startdate DESC, sc.enddate DESC; - -CREATE VIEW %%NEWSCHEMA%%.vw_staffdata AS - SELECT staff.id, - staff.staffnumber, - staff.matricule, - staff.surname, - staff.prename, - staff.email, - staff.phone, - staff.address, - staff.city, - staff.zip, - staff.country, - staff.job, - staff.birthdate, - staff.id_staffgroup - FROM %%NEWSCHEMA%%.staff - WHERE (staff.isdeleted IS NULL); - -CREATE VIEW %%NEWSCHEMA%%.vw_staffgroupsdata AS -SELECT - NULL::text AS id, - NULL::text AS groupname, - NULL::text AS groupcolor, - NULL::boolean AS isdefault, - NULL::bigint AS staffmembers; - -CREATE VIEW %%NEWSCHEMA%%.vw_staffgroupslist AS -SELECT - NULL::text AS id, - NULL::text AS groupname, - NULL::boolean AS isdefault, - NULL::bigint AS staffmembers; - -CREATE VIEW %%NEWSCHEMA%%.vw_stafflist AS - SELECT st.id, - st.staffnumber, - st.surname, - st.prename, - st.job, - st.birthdate, - ((st.surname || ' '::text) || st.prename) AS dspname, - stg.groupname, - stentry.entrydate - FROM ((%%NEWSCHEMA%%.staff st - LEFT JOIN %%NEWSCHEMA%%.staffgroups stg ON ((st.id_staffgroup = stg.id))) - LEFT JOIN ( SELECT staffcontract.id_staff, - min(staffcontract.startdate) AS entrydate - FROM %%NEWSCHEMA%%.staffcontract - GROUP BY staffcontract.id_staff) stentry ON ((st.id = stentry.id_staff))) - WHERE (st.isdeleted IS NULL) - ORDER BY st.surname, st.prename; - -CREATE VIEW %%NEWSCHEMA%%.vw_staffreportperioddays AS - SELECT pd.id, - pd.id_staff, - pd.id_reportperiod, - pd.daydate, - to_char((pd.timestart1)::interval, 'HH24:MI'::text) AS timestart1, - to_char((pd.timeend1)::interval, 'HH24:MI'::text) AS timeend1, - to_char((pd.timestart2)::interval, 'HH24:MI'::text) AS timestart2, - to_char((pd.timeend2)::interval, 'HH24:MI'::text) AS timeend2, - to_char((pd.timepause)::interval, 'HH24:MI'::text) AS timepause, - to_char(( - CASE - WHEN ((pd.vacancyhours)::interval = '00:00:00'::interval) THEN NULL::time without time zone - ELSE pd.vacancyhours - END)::interval, 'HH24:MI'::text) AS vacancyhours, - to_char((pd.contracthours)::interval, 'HH24:MI'::text) AS contracthours, - to_char(( - CASE - WHEN ((pd.workhours)::interval = '00:00:00'::interval) THEN NULL::time without time zone - ELSE pd.workhours - END)::interval, 'HH24:MI'::text) AS workhours, - to_char(( - CASE - WHEN ((pd.dayhours)::interval = '00:00:00'::interval) THEN NULL::time without time zone - ELSE pd.dayhours - END)::interval, 'HH24:MI'::text) AS dayhours, - pd.id_vacancytype, - pd.daytype, - to_char(( - CASE - WHEN ((pd.recuperationhours)::interval = '00:00:00'::interval) THEN NULL::time without time zone - ELSE pd.recuperationhours - END)::interval, 'HH24:MI'::text) AS recuperationhours, - pd.id_recuperationtype, - to_char(( - CASE - WHEN ((pd.interruptionhours)::interval = '00:00:00'::interval) THEN NULL::time without time zone - ELSE pd.interruptionhours - END)::interval, 'HH24:MI'::text) AS interruptionhours, - pw.id AS id_week, - (((((((pw.calyear || '-'::text) || lpad((pw.calweek)::text, 2, '0'::text)) || '('::text) || to_char((pw.weekstart)::timestamp with time zone, 'DD.MM.YYYY'::text)) || ' - '::text) || to_char((date((pw.weekstart + '6 days'::interval)))::timestamp with time zone, 'DD.MM.YYYY'::text)) || ')'::text) AS dspweek, - ((((((((((((to_char((pw.weekstart)::timestamp with time zone, 'DD.MM.YYYY'::text) || ','::text) || to_char((date((pw.weekstart + '1 day'::interval)))::timestamp with time zone, 'DD.MM.YYYY'::text)) || ','::text) || to_char((date((pw.weekstart + '2 days'::interval)))::timestamp with time zone, 'DD.MM.YYYY'::text)) || ','::text) || to_char((date((pw.weekstart + '3 days'::interval)))::timestamp with time zone, 'DD.MM.YYYY'::text)) || ','::text) || to_char((date((pw.weekstart + '4 days'::interval)))::timestamp with time zone, 'DD.MM.YYYY'::text)) || ','::text) || to_char((date((pw.weekstart + '5 days'::interval)))::timestamp with time zone, 'DD.MM.YYYY'::text)) || ','::text) || to_char((date((pw.weekstart + '6 days'::interval)))::timestamp with time zone, 'DD.MM.YYYY'::text)) AS dspweekdates, - ((((((((((((pw.weekstart || ','::text) || date((pw.weekstart + '1 day'::interval))) || ','::text) || date((pw.weekstart + '2 days'::interval))) || ','::text) || date((pw.weekstart + '3 days'::interval))) || ','::text) || date((pw.weekstart + '4 days'::interval))) || ','::text) || date((pw.weekstart + '5 days'::interval))) || ','::text) || date((pw.weekstart + '6 days'::interval))) AS weekdates, - to_char(pw.contracthours, 'HH24:MI'::text) AS week_contracthours, - to_char(pw.workhours, 'HH24:MI'::text) AS week_workhours, - to_char(pw.vacancyhours, 'HH24:MI'::text) AS week_vacancyhours, - to_char(pw.recuperationhours, 'HH24:MI'::text) AS week_recuperationhours, - to_char(pw.totalhours, 'HH24:MI'::text) AS week_totalhours, - CASE - WHEN (pw.diffhours < '00:00:00'::interval) THEN ('-'::text || replace(to_char(pw.diffhours, 'HH24:MI'::text), '-'::text, ''::text)) - ELSE to_char(pw.diffhours, 'HH24:MI'::text) - END AS week_diffhours, - ((pw.calyear || '-'::text) || lpad((pw.calweek)::text, 2, '0'::text)) AS weekident, - ((pw.calyear || '-'::text) || lpad((pw.calweek)::text, 2, '0'::text)) AS dspweekshort, - rp.startdate AS periodstart, - rp.enddate AS periodend - FROM (((%%NEWSCHEMA%%.staffreportperiodweeks pw - LEFT JOIN %%NEWSCHEMA%%.staffreportperioddays pd ON (((pw.weekstart = date_trunc('week'::text, (pd.daydate)::timestamp with time zone)) AND (pw.id_staff = pd.id_staff) AND (pw.id_reportperiod = pd.id_reportperiod)))) - JOIN %%NEWSCHEMA%%.reportperiod rp ON ((pw.id_reportperiod = rp.id))) - JOIN %%NEWSCHEMA%%.staff st ON ((pd.id_staff = st.id))) - WHERE (st.isdeleted IS NULL) - ORDER BY pd.id_reportperiod, pd.id_staff, pd.daydate; - -CREATE VIEW %%NEWSCHEMA%%.vw_staffreportperiodlist AS - SELECT st.prename, - st.surname, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - CASE - WHEN (srp.hoursdiff < '00:00:00'::interval) THEN ('-'::text || replace(to_char((srp.hoursdiff - COALESCE(srp.payedhours, '00:00:00'::interval)), 'HH24:MI'::text), '-'::text, ''::text)) - ELSE to_char((srp.hoursdiff - COALESCE(srp.payedhours, '00:00:00'::interval)), 'HH24:MI'::text) - END AS hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id_reportperiod, - srp.id_staff, - srp.id, - rp.startdate, - rp.enddate, - ((st.surname || ' '::text) || st.prename) AS staffname, - st.id_staffgroup, - sgr.groupname, - to_char(srp.payedhours, 'HH24:MI'::text) AS payedhours - FROM (((%%NEWSCHEMA%%.staffreportperiod srp - LEFT JOIN %%NEWSCHEMA%%.staff st ON ((srp.id_staff = st.id))) - LEFT JOIN %%NEWSCHEMA%%.reportperiod rp ON ((srp.id_reportperiod = rp.id))) - LEFT JOIN %%NEWSCHEMA%%.staffgroups sgr ON ((st.id_staffgroup = sgr.id))) - WHERE (st.isdeleted IS NULL) - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; - -CREATE VIEW %%NEWSCHEMA%%.vw_vacancylist AS - SELECT vacancytypes.id, - vacancytypes.vacancyname, - vacancytypes.isworktime - FROM %%NEWSCHEMA%%.vacancytypes; - -CREATE TABLE %%NEWSCHEMA%%.workplandays ( - id_workplan text, - weekday integer, - start1 time without time zone, - end1 time without time zone, - start2 time without time zone, - end2 time without time zone, - pause time without time zone, - id text DEFAULT public.getuuid() NOT NULL, - weeknum integer, - modified timestamp without time zone DEFAULT now(), - created timestamp without time zone DEFAULT now() -); - -CREATE VIEW %%NEWSCHEMA%%.vw_workplandaysdata AS - SELECT workplandays.id, - workplandays.id_workplan, - workplandays.weekday, - workplandays.start1, - workplandays.end1, - workplandays.start2, - workplandays.end2, - workplandays.pause - FROM %%NEWSCHEMA%%.workplandays; - -CREATE VIEW %%NEWSCHEMA%%.vw_workplandayslist AS -SELECT - NULL::text AS workplan, - NULL::text AS weekhours, - NULL::text AS id, - NULL::text AS id_workplan, - NULL::integer AS weekday, - NULL::text AS start1, - NULL::text AS end1, - NULL::text AS start2, - NULL::text AS end2, - NULL::text AS pause, - NULL::text AS dayhours, - NULL::bigint AS staffcount, - NULL::integer AS weeknum, - NULL::text AS interruption; - -CREATE VIEW %%NEWSCHEMA%%.vw_workplanlist AS - SELECT wp.id, - wp.workplan, - ((((((wp.workplan || ' / '::text) || "substring"((wp.weekhours)::text, 1, 5)) || 'h / '::text) || wp.weekdays) || 'j / libre: '::text) || ( SELECT string_agg(ww.wday, ','::text) AS string_agg - FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)) AS dspworkplandetail, - wp.isdefault, - NULL::bigint AS staffcount - FROM %%NEWSCHEMA%%.workplans wp - ORDER BY wp.isdefault, wp.workplan; - -CREATE TABLE %%NEWSCHEMA%%.worktimes ( - startdate date, - enddate date, - defaultdayhours interval, - maxdayhours interval, - defaultweekhours interval, - maxweekhours interval, - maxinterruptionhours interval, - isdefault boolean, - id text DEFAULT public.getuuid() NOT NULL, - modified timestamp without time zone DEFAULT now(), - created timestamp without time zone DEFAULT now() -); - -CREATE VIEW %%NEWSCHEMA%%.vw_worktimeslist AS - SELECT worktimes.id, - worktimes.startdate, - worktimes.enddate, - worktimes.isdefault, - to_char(worktimes.defaultdayhours, 'HH24:MI'::text) AS defaultdayhours, - to_char(worktimes.maxdayhours, 'HH24:MI'::text) AS maxdayhours, - to_char(worktimes.defaultweekhours, 'HH24:MI'::text) AS defaultweekhours, - to_char(worktimes.maxweekhours, 'HH24:MI'::text) AS maxweekhours, - to_char(worktimes.maxinterruptionhours, 'HH24:MI'::text) AS maxinterruptionhours - FROM %%NEWSCHEMA%%.worktimes - ORDER BY worktimes.startdate NULLS FIRST, worktimes.enddate NULLS FIRST; - -ALTER TABLE ONLY %%NEWSCHEMA%%.reportperiod - ADD CONSTRAINT reportperiod_pkey PRIMARY KEY (id); - -ALTER TABLE ONLY %%NEWSCHEMA%%.reports - ADD CONSTRAINT reports_pkey PRIMARY KEY (id); - -ALTER TABLE ONLY %%NEWSCHEMA%%.staff - ADD CONSTRAINT staff_pkey PRIMARY KEY (id); - -ALTER TABLE ONLY %%NEWSCHEMA%%.staffcontract - ADD CONSTRAINT staffcontract_pkey PRIMARY KEY (id); - -ALTER TABLE ONLY %%NEWSCHEMA%%.staffgroups - ADD CONSTRAINT staffgroups_pkey PRIMARY KEY (id); - -ALTER TABLE ONLY %%NEWSCHEMA%%.staffreportperiod - ADD CONSTRAINT staffreportperiod_pkey PRIMARY KEY (id); - -ALTER TABLE ONLY %%NEWSCHEMA%%.staffreportperioddays - ADD CONSTRAINT staffreportperioddays_pkey PRIMARY KEY (id); - -ALTER TABLE ONLY %%NEWSCHEMA%%.staffreportperiodweeks - ADD CONSTRAINT staffreportperiodweeks_pkey PRIMARY KEY (id); - -ALTER TABLE ONLY %%NEWSCHEMA%%.staffvacancy - ADD CONSTRAINT staffvacancy_pkey PRIMARY KEY (id); - -ALTER TABLE ONLY %%NEWSCHEMA%%.staffreportperiod - ADD CONSTRAINT uniq_staffreportperiod_cal UNIQUE (id_reportperiod, id_staff); - -ALTER TABLE ONLY %%NEWSCHEMA%%.staffreportperiodweeks - ADD CONSTRAINT uniq_staffweekplan_cal UNIQUE (id_reportperiod, id_staff, calyear, calweek); - -ALTER TABLE ONLY %%NEWSCHEMA%%.staffreportperioddays - ADD CONSTRAINT uniq_staffworplan_staffday UNIQUE (id_staff, daydate); - -ALTER TABLE ONLY %%NEWSCHEMA%%.vacancydays - ADD CONSTRAINT vacancydays_pkey PRIMARY KEY (id); - -ALTER TABLE ONLY %%NEWSCHEMA%%.vacancytypes - ADD CONSTRAINT vacancytypes_pkey PRIMARY KEY (id); - -ALTER TABLE ONLY %%NEWSCHEMA%%.workplandays - ADD CONSTRAINT workplandays_pkey PRIMARY KEY (id); - -ALTER TABLE ONLY %%NEWSCHEMA%%.workplandays - ADD CONSTRAINT workplandays_un UNIQUE (id_workplan, weekday); - -ALTER TABLE ONLY %%NEWSCHEMA%%.workplans - ADD CONSTRAINT workplans_pkey PRIMARY KEY (id); - -ALTER TABLE ONLY %%NEWSCHEMA%%.worktimes - ADD CONSTRAINT worktimes_pkey PRIMARY KEY (id); - -CREATE OR REPLACE VIEW %%NEWSCHEMA%%.vw_staffgroupsdata AS - SELECT sg.id, - sg.groupname, - sg.groupcolor, - sg.isdefault, - count(st.id) AS staffmembers - FROM (%%NEWSCHEMA%%.staffgroups sg - LEFT JOIN %%NEWSCHEMA%%.staff st ON ((st.id_staffgroup = sg.id))) - WHERE (st.isdeleted IS NULL) - GROUP BY sg.id - ORDER BY sg.groupname; - -CREATE OR REPLACE VIEW %%NEWSCHEMA%%.vw_staffgroupslist AS - SELECT sg.id, - sg.groupname, - sg.isdefault, - count(st.id) AS staffmembers - FROM (%%NEWSCHEMA%%.staffgroups sg - LEFT JOIN %%NEWSCHEMA%%.staff st ON ((st.id_staffgroup = sg.id))) - WHERE (st.isdeleted IS NULL) - GROUP BY sg.id - ORDER BY sg.groupname; - -CREATE OR REPLACE VIEW %%NEWSCHEMA%%.vw_workplandayslist AS - SELECT wp.workplan, - to_char(wp.weekhours, 'HH24:MI'::text) AS weekhours, - wpd.id, - wpd.id_workplan, - wpd.weekday, - to_char((wpd.start1)::interval, 'HH24:MI'::text) AS start1, - to_char((wpd.end1)::interval, 'HH24:MI'::text) AS end1, - to_char((wpd.start2)::interval, 'HH24:MI'::text) AS start2, - to_char((wpd.end2)::interval, 'HH24:MI'::text) AS end2, - to_char((wpd.pause)::interval, 'HH24:MI'::text) AS pause, - to_char(((( - CASE - WHEN (wpd.end1 < wpd.start1) THEN ((wpd.end1)::interval + '24:00:00'::interval) - ELSE (wpd.end1)::interval - END - (wpd.start1)::interval) + COALESCE(( - CASE - WHEN (wpd.end2 < wpd.start2) THEN ((wpd.end2)::interval + '24:00:00'::interval) - ELSE (wpd.end2)::interval - END - (wpd.start2)::interval), '00:00:00'::interval)) - COALESCE((wpd.pause)::interval, '00:00:00'::interval)), 'HH24:MI'::text) AS dayhours, - NULL::bigint AS staffcount, - wpd.weeknum, - CASE - WHEN ((wpd.start2 IS NOT NULL) AND (wpd.end1 IS NOT NULL)) THEN to_char(((wpd.start2)::interval - (wpd.end1)::interval), 'HH24:MI'::text) - ELSE NULL::text - END AS interruption - FROM (%%NEWSCHEMA%%.workplandays wpd - LEFT JOIN %%NEWSCHEMA%%.workplans wp ON ((wpd.id_workplan = wp.id))) - GROUP BY wpd.id, wp.id - ORDER BY wp.workplan, wpd.weekday; - -CREATE TRIGGER trg_after_insert_staffcontract AFTER INSERT ON %%NEWSCHEMA%%.staffcontract FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_after_upd_staffcontract(); - -CREATE TRIGGER trg_after_update_staffcontract AFTER UPDATE OF id_contractworkplan, startdate, enddate ON %%NEWSCHEMA%%.staffcontract FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_after_upd_staffcontract(); - -CREATE TRIGGER trg_dks_after_ins_workplandays AFTER INSERT ON %%NEWSCHEMA%%.workplandays FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_after_upd_worplanday(); - -CREATE TRIGGER trg_dks_after_upd_workplandays AFTER UPDATE OF start1, end1, start2, end2, pause ON %%NEWSCHEMA%%.workplandays FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_after_upd_worplanday(); - -CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_reportperiod BEFORE UPDATE ON %%NEWSCHEMA%%.reportperiod FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable(); - -CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staff BEFORE UPDATE ON %%NEWSCHEMA%%.staff FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable(); - -CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staffcontract BEFORE UPDATE ON %%NEWSCHEMA%%.staffcontract FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable(); - -CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staffgroups BEFORE UPDATE ON %%NEWSCHEMA%%.staffgroups FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable(); - -CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staffreportperiod BEFORE UPDATE ON %%NEWSCHEMA%%.staffreportperiod FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable(); - -CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staffreportperioddays BEFORE UPDATE ON %%NEWSCHEMA%%.staffreportperioddays FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable(); - -CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staffreportperiodweeks BEFORE UPDATE ON %%NEWSCHEMA%%.staffreportperiodweeks FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable(); - -CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staffvacancy BEFORE UPDATE ON %%NEWSCHEMA%%.staffvacancy FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable(); - -CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_vacancydays BEFORE UPDATE ON %%NEWSCHEMA%%.vacancydays FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable(); - -CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_vacancytypes BEFORE UPDATE ON %%NEWSCHEMA%%.vacancytypes FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable(); - -CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_workplandays BEFORE UPDATE ON %%NEWSCHEMA%%.workplandays FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable(); - -CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_workplans BEFORE UPDATE ON %%NEWSCHEMA%%.workplans FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable(); - -CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_worktimes BEFORE UPDATE ON %%NEWSCHEMA%%.worktimes FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable(); - -ALTER TABLE ONLY %%NEWSCHEMA%%.staffcontract - ADD CONSTRAINT staffcontract_fk FOREIGN KEY (id_staff) REFERENCES %%NEWSCHEMA%%.staff(id); - -ALTER TABLE ONLY %%NEWSCHEMA%%.staffreportperiod - ADD CONSTRAINT staffreportperiod_fk FOREIGN KEY (id_staff) REFERENCES %%NEWSCHEMA%%.staff(id); - -ALTER TABLE ONLY %%NEWSCHEMA%%.staffreportperiod - ADD CONSTRAINT staffreportperiod_fk_1 FOREIGN KEY (id_reportperiod) REFERENCES %%NEWSCHEMA%%.reportperiod(id); - -ALTER TABLE ONLY %%NEWSCHEMA%%.staffreportperiodweeks - ADD CONSTRAINT staffweekplan_fk FOREIGN KEY (id_reportperiod) REFERENCES %%NEWSCHEMA%%.reportperiod(id); - -ALTER TABLE ONLY %%NEWSCHEMA%%.staffreportperiodweeks - ADD CONSTRAINT staffweekplan_fk_1 FOREIGN KEY (id_staff) REFERENCES %%NEWSCHEMA%%.staff(id); - -ALTER TABLE ONLY %%NEWSCHEMA%%.staffreportperioddays - ADD CONSTRAINT staffworkplan_fk FOREIGN KEY (id_staff) REFERENCES %%NEWSCHEMA%%.staff(id); - -ALTER TABLE ONLY %%NEWSCHEMA%%.staffreportperioddays - ADD CONSTRAINT staffworkplan_fk_1 FOREIGN KEY (id_staffgroup) REFERENCES %%NEWSCHEMA%%.staffgroups(id); - -ALTER TABLE ONLY %%NEWSCHEMA%%.workplandays - ADD CONSTRAINT workplandays_fk FOREIGN KEY (id_workplan) REFERENCES %%NEWSCHEMA%%.workplans(id); - diff --git a/website/appphp/db.cgi b/website/appphp/db.cgi deleted file mode 100644 index 1beb5147..00000000 --- a/website/appphp/db.cgi +++ /dev/null @@ -1,343 +0,0 @@ -#!/usr/local/bin/perl -use strict; -use lib ('./lib/perl5'); -use lib ('./lib'); -use CGI; -use CGI::Cookie; -# use CGI::Carp qw/fatalsToBrowser/; -use File::Basename; -use JSON::PP; -use Data::Dumper; -use dksconfig qw/$sitecfg/; -use dksdb; - -use session; -#use sendemail; -my $cgi = new CGI(); -my $scriptpath = $cgi->url(-absolute => 1); -my $p = (); -# my @params = $cgi->param(); -# foreach my $pe (@params){ -# $p->{$pe} = $cgi->param($pe); -# } -my $html->{result} = (); - -$p->{sid} = $cgi->cookie($sitecfg->{cookiename}); -#$html->{params} = $p; -my $se = session->new(); -my $sess = $se->getsession($p->{sid}); -print $cgi->header(-type=>"application/json", -charset => "utf-8"); -if ($sess == undef){ - $html->{error} = "No Authorisation"; - print JSON::PP::encode_json($html); - exit(0); -} -# $html->{p} = $p; -# $html->{sess} =$sess; -#my $datapath = $ENV{"DOCUMENT_ROOT"}.dirname(dirname($scriptpath)).'/data/'; -#print STDERR $cgi->request_method(); -#print STDERR Dumper($p); - -if (($cgi->request_method() eq "GET") || ($cgi->request_method() eq "POST")){ - my $db = dksdb->new(); - my @params = $cgi->param(); - - foreach my $pp (@params){ - $p->{$pp} = $cgi->param($pp); - } - if (exists($p->{"POSTDATA"})){ - my $pdj = JSON::PP::decode_json($p->{"POSTDATA"}); - foreach my $k (keys(%{$pdj})){ - $p->{$k} = $pdj->{$k}; - } - } - $html->{params} = $p; - if (exists($p->{get})){ - my $schema = "public"; - if (exists($p->{schemata})){ - $schema = $p->{schemata}; - } - my $sql = "select * from ".$schema.".vw_".$p->{get}; - if (exists($p->{fields}) ){ - $sql = "select ".$p->{fields}." from ".$schema.".vw_".$p->{get}; - } - if (exists($p->{filter})){ - $sql .= " WHERE ".$p->{filter}.";"; - } - $html->{result}->{sql} = $sql; - $html->{result}->{sqldata} = $db->queryarray($sql); - } - elsif (exists($p->{set})){ - my $type = "ins"; - - foreach my $x (keys(%{$p})){ - if (($x =~ /^ident_/) && ($p->{$x} ne "")){ - $type = "upd"; - last; - } - } - #checkidents - my $x = $p; - delete $x->{sid}; - delete $x->{set}; - my @sql = (); - if ($type eq "ins"){ - @sql = $db->create_ddl_insert($x); - }else { - @sql = $db->create_ddl_update($x); - } - if (scalar(@sql) > 0 ){ - my $rid = $db->querysorted($sql[0]); - if (keys(%{$rid}) > 0 ){ - $html->{result} = $rid->{0}; - } - } - } - elsif (exists($p->{upsert})){ - my $idents = (); - my $type=""; - foreach my $l (keys(%{$p})){ - if (($l =~ /^ident_/) && ($p->{$l} ne "")){ - $idents->{$l} = $l; - $idents->{$l} =~ s/^ident_//; - } - } - #print Dumper($idents); - - my $x = $p; - delete $x->{sid}; - delete $x->{upsert}; - #$html->{result}->{p} = $x; - if (keys(%{$idents}) > 0){ - my @cntsql = $db->create_cnt_statement($x); - #print Dumper(@cntsql); - my $cntres = $db->query($cntsql[0]); - if ($cntres->{cnt} eq "0"){ - $type = "ins"; - foreach my $c (keys(%{$idents})){ - $x->{$idents->{$c}} = $x->{$c}; - delete($x->{$c}); - } - } else { - $type = "upd"; - } - #print Dumper($type); - #print Dumper($x); - my @sql = (); - if ($type eq "ins"){ - @sql = $db->create_ddl_insert($x); - }else { - @sql = $db->create_ddl_update($x); - #print Dumper(@sql); - } - - $html->{test}->{sql} = \@sql; - #print Dumper(@sql); - if (scalar(@sql) > 0 ){ - #print Dumper($sql[0]); - #my $rid = $db->querysorted($sql[0]); - my $rid = {}; - if (keys(%{$rid}) > 0 ){ - $html->{result} = $rid->{0}; - } - } - } else { - $html->{result} = "ERROR: no idents!"; - } - print Dumper($html); - } - elsif (exists($p->{del})){ - my $x = $p; - my $schema = "public"; - if (exists($p->{schemata})){ - $schema = $db->securetext($p->{schemata}); - } - delete $x->{sid}; - delete $x->{del}; - my @sql = $db->create_ddl_delete($x); - if (scalar(@sql) > 0 ){ - my $rid = $db->exec($sql[0]); - if (keys(%{$rid}) > 0 ){ - $html->{result} = $rid->{0}; - } - } - } - elsif (exists($p->{del2})){ - my $x = $p; - my $schema = "public"; - if (exists($p->{schemata})){ - $schema = $db->securetext($p->{schemata}); - } - - my $rid = $db->exec("update ".$schema.".".$db->securetext($p->{table})." set isdeleted=true WHERE id='".$db->securetext($p->{id})."';"); - if (keys(%{$rid}) > 0 ){ - $html->{result} = $rid->{0}; - } - } - # elsif (exists($p->{action})){ - # my $x = $p; - # my $schema = "public"; - # if (exists($p->{schemata})){ - # $schema = $db->securetext($p->{schemata}); - # } - # $html->{sql} = "select * from ".$schema.".".$db->securetext($p->{action})."(".$db->securetext($p->{params}).");"; - # # my $rid = $db->exec("select * from ".$schema.".".$db->securetext($p->{action})."(".$db->securetext($p->{params}).");"); - - # # if (keys(%{$rid}) > 0 ){ - # # $html->{result} = $rid->{0}; - # # } - # } - elsif (exists($p->{save})){ - my $schema = "public"; - if (exists($p->{schemata})){ - $schema = $db->securetext($p->{schemata}); - } - if ($p->{save} eq "field"){ - $html->{result} = $db->exec("UPDATE ".$schema.".".$db->securetext($p->{table})." SET ".$db->securetext($p->{column})."='".$db->securetext($p->{value})."' WHERE id='".$db->securetext($p->{id})."';"); - } - # elsif($p->{save} eq "pref"){ - # my $get = $db->query("SELECT id_users,host,id FROM ".$schema.".preferences WHERE host='".$ENV{REMOTE_ADDR}."' AND id_users='".$sess->{id_users}."' AND id='".$p->{id}."';"); - # if (keys(%{$get}) > 0){ - # $db->exec("UPDATE ".$schema.".preferences SET preference='".$db->securetext($p->{value})."' WHERE host='".$ENV{REMOTE_ADDR}."' AND id_users='".$sess->{username}."' AND id='".$p->{id}."';"); - # } else { - # $db->exec("INSERT INTO ".$schema.".preferences (host,id_users,id,preference) VALUES ('".$ENV{REMOTE_ADDR}."','".$sess->{id_users}."','".$db->securetext($p->{id})."','".$db->securetext($p->{value})."')"); - # #$get = $db->query("SELECT username,host,page,preference FROM preferences WHERE host='".$sess->{host}."' AND username='".$sess->{username}."' AND page='".$p->{page}."';"); - # } - # } - - } - elsif (exists($p->{fn}) && ($p->{fn} eq "getfreeschema")){ - my $cmpy = lc($p->{datasetname}); - if (length($cmpy) <= 3){ $cmpy=$cmpy."schema"}; - $cmpy =~ s///; - $cmpy =~ s/[^a-z0-9\-]/\_/g; - $cmpy =~ s/^[\_]+//; - $cmpy =~ s/[\_]+$//; - $cmpy =~ s/^[\_]+/_/; - my $schemasql = "select count(*) as cnt from information_schema.schemata where schema_name='".$db->securetext($p->{schemaname})."';"; - my $dbschema = $db->query($schemasql); - my $dbsnum = ""; - if ($dbschema->{cnt} > 1){ - $dbsnum = int($dbschema->{cnt}) + 1; - } - $html->{result}->{newschema} = $cmpy.$dbsnum; - } - elsif (exists($p->{fn}) && ($p->{fn} eq "installschema")){ - my $schemasql = "select count(*) as cnt from information_schema.schemata where schema_name='".$db->securetext($p->{schemaname})."';"; - my $dbschema = $db->query($schemasql); - $html->{cnt} = $dbschema; - $html->{sql} = $schemasql; - if ($dbschema->{cnt} eq "0"){ - $html->{linkid} = $db->createdefinedschema("defaultcompany",$db->securetext($p->{schemaname}),$db->securetext($p->{datasetname}),$db->securetext($p->{sector})); - } - } - elsif (exists($p->{fn}) && ($p->{fn} eq "saveform")){ - # $html->{p} = $p; - #$html->{result}->{ident} = $p->{ident}; - #my $fn = $p->{fn}; - #delete $p->{ident}; - delete $p->{fn}; - delete $p->{sid}; - my $retid=undef; - my $type = "upd"; - foreach my $px (keys(%{$p})){ - #$html->{result}->{datafield} = $px; - if (($px =~ /\_id$/) && ($p->{$px} eq "")){ - $type = "ins"; - delete $p->{$px}; - } - } - my @sql = (); - if ($type eq "ins"){ - @sql = $db->create_ddl_insert($p); - } - else { - @sql = $db->create_ddl_update($p); - } - - - $html->{sql} = \@sql; - - if (scalar(@sql) > 0){ - $retid= $db->querysorted($sql[0]); - } - $html->{result} = $retid->{0}; - # if (exists($p->{ident_reportperiod_id})){ - # my $prdid = $p->{ident_reportperiod_id}; - # if ($prdid eq ""){ $prdid=$retid->{0};} - # if ($prdid ne ""){ - # $db->exec("select * from ".$p->{schemata}.".onchange_reportperiod(".$prdid.");"); - # } - # } - # if (exists($p->{ident_reportperiod_id})){ - # my $prdid = $p->{ident_reportperiod_id}; - # if ($prdid eq ""){ $prdid=$retid->{0};} - # if ($prdid ne ""){ - # $db->exec("select * from ".$p->{schemata}.".onchange_reportperiod(".$prdid.");"); - # } - # } - #$p->{table},#$p->{field},$p->{value},$p->{id},$p->{type} - } - elsif (exists($p->{fn}) && ($p->{fn} eq "setsessiondata")){ - my $sid = $sess->{idsession}; - my $pfn = JSON::PP::decode_json($p->{params}); - unshift(@{$pfn},$sid); - my $fnsql = "SELECT * FROM public.setsessiondata('".join("','",@{$pfn})."');"; - $html->{sql} = $fnsql; - $html->{result} = $db->queryarray($fnsql); - } - elsif (exists($p->{fn}) && ($p->{fn} eq "deleterow")){ - delete $p->{fn}; - delete $p->{sid}; - my $retid = undef; - my @sql = $db->create_ddl_delete($p); - foreach my $s (@sql){ - $retid= $db->exec($s); - } - $html->{result}->{id} = $retid->{0}; - } - elsif (exists($p->{fn})){ - # my $pfn = JSON::PP::decode_json($p->{params}); - my $schema = "public"; - if (exists($p->{schemata})){ - $schema = $db->securetext($p->{schemata}); - } - my $fnsql = ""; - if (!exists($p->{params})){ - $fnsql = "SELECT * FROM ".$schema.".".$p->{fn}."();"; - } else { - $html->{pp} = $p->{params}; - print STDERR "REF:".ref($p->{params})."\n"; - print STDERR Dumper($p->{params}); - my $pfn = {}; - if (ref($p->{params}) != "HASH"){ - $pfn = JSON::PP::decode_json($p->{params}); - } else { - $pfn = $p->{params}; - } - - my @fn_p = (); - foreach my $k (sort {$a <=> $b} keys(%{$pfn})){ - if (ref($pfn->{$k}) eq "ARRAY"){ - my $tmp = "'".$db->securetext(JSON::PP::encode_json($pfn->{$k}))."'::json"; - $tmp =~ s/\"/"/g; - push(@fn_p,$tmp); - } else { - push(@fn_p,"'".$db->securetext($pfn->{$k})."'"); - } - } - # print STDERR ref(@fn_p).' '.Dumper(@fn_p); - $fnsql = "SELECT * FROM ".$schema.".".$db->securetext($p->{fn})."(".join(",",@fn_p).");"; - } - - #$html->{params} = $pfn; - - $html->{sql} = $fnsql; - $html->{result} = $db->queryarray($fnsql); - } -} - -print JSON::PP::encode_json($html); -# for my $e ( keys %ENV ) { -# print "$e: $ENV{$e}
"; -# } \ No newline at end of file diff --git a/website/appphp/db.php b/website/appphp/db.php deleted file mode 100644 index 41f1d27c..00000000 --- a/website/appphp/db.php +++ /dev/null @@ -1,35 +0,0 @@ -connect(DBTYPE,DBHOST,DBNAME,DBUSER,DBPASSWORD); -$cookie = ""; - -if ($_SERVER["REQUEST_METHOD"] == "GET"){ - foreach ($_GET as $key => $value) { - $p[$key] = $value; - } -} -if ($_SERVER["REQUEST_METHOD"] == "POST") { - foreach ($_POST as $key => $value) { - $p[$key] = $value; - } -} -if(isset($_COOKIE[COOKIENAME])){ - $p["session"] = $se->getsession($_COOKIE[COOKIENAME]); - if () - $p["sid"] = ; - -} -if ($p["sid"] == "") { - header('Content-Type: application/json'); - echo json_encode(array("error" => 'Access denied!')); - exit(0); -} -header('Content-Type: application/json'); -echo json_encode($p); -?> \ No newline at end of file diff --git a/website/appphp/index.cgi b/website/appphp/index.cgi deleted file mode 100644 index 3be5e968..00000000 --- a/website/appphp/index.cgi +++ /dev/null @@ -1,174 +0,0 @@ -#!/usr/local/bin/perl - -use strict; -use lib ('./lib/perl5'); -use lib ('./lib'); -use File::Basename qw/dirname basename/; -use Template; -# use Template::Constants qw( :debug ); -use CGI; -use CGI::Carp qw(fatalsToBrowser); -use CGI::Cookie; -use Data::Dumper; -use JSON::PP; - -use dksconfig qw/$sitecfg/; -use session; - -my $skl = "index.tt"; -my $cgi = new CGI(); -my $p=(); -my $cookie; -my $vars = $sitecfg; -my $sess = (); -my $se = session->new(); - -$vars->{ua} = $ENV{HTTP_USER_AGENT}; -# if ($vars->{ua} !~ /^POT/){ -# # print $cgi->header(-type=>'text/html', -charset=>"utf-8"); -# print "Location: ".$cgi->url({-base=>1})."/pot_lu/\n\n"; -# #$cgi->redirect($cgi->url({-base=>1}).'/pot_lu'); -# exit(0); -# # # exit(0); -# } -$vars->{realpath} = $cgi->url({-absolute=>1}); -$vars->{filepath} = substr($cgi->url({-absolute=>1}),length($vars->{basepath})+1); -$vars->{baseurl} = $cgi->url({-base=>1}).$vars->{basepath}; - -if ($vars->{basepath} eq "/"){ - $vars->{siteurl} = $cgi->url({-base=>1}); -}else { - $vars->{siteurl} = $cgi->url({-base=>1}).$vars->{basepath}; - $vars->{docroot} = $vars->{docroot}.$vars->{basepath}; - #$vars->{sitepath} = dirname($vars->{basepath}); -} - - -if ($vars->{filepath} ne ""){ - $vars->{suffix} = substr($vars->{filepath},rindex($vars->{filepath},'.')); - $vars->{page} = $vars->{filepath}; - $vars->{page} =~ s/html$/tt/; -} -$vars->{abspath} = ""; - - -$p->{sid} = $cgi->cookie($vars->{cookiename}); -if ($cgi->request_method() eq "GET"){ - my @params = $cgi->param(); - foreach my $pp (@params){ - $p->{$pp} = $cgi->param($pp); - } - -} - -if (($cgi->request_method() eq "POST") || ($cgi->request_method() eq "GET")){ - - my @params = $cgi->param(); - foreach my $pp (@params){ - $p->{$pp} = $cgi->param($pp); - } - $vars->{hasposts} = $p; - if (exists($p->{'btnlogin'})){ - my $ret = $se->checklogin($p->{login},$p->{password}); - - if ($ret->{sid} ne ""){ - $p->{sid} = $ret->{sid}; - - $cookie = CGI::Cookie->new(-name=>$vars->{cookiename},-value=>$p->{sid},-httponly => 1); - - }else { - $vars->{message} = $ret->{message}; - $vars->{messagetype} = $ret->{messagetype}; - $vars->{page} = "message.tt"; - } - } - # if (exists($p->{'btnregister'})){ - - # my $ret = $se->registeruser($p); - - # $vars->{message} = $ret->{message}; - # $vars->{messagetype} = $ret->{messagetype}; - # $vars->{page} = $ret->{page}; - # } - if (exists($p->{'btnforgotpassword'})){ - my $ret = $se->passwordforgotten($p->{email}); - $vars->{message} = $ret->{message}; - $vars->{messagetype} = $ret->{messagetype}; - $vars->{page} = "message.tt"; - } - # if (exists($p->{'btnvalidateemail'})){ - # my $ret = $se->validateaccount($p); - # $vars->{message} = $ret->{message}; - # $vars->{messagetype} = $ret->{messagetype}; - # $vars->{page} = "message.tt"; - # } - # if (exists($p->{'btnresendcode'})){ - # my $ret = $se->resendcode($p->{email}); - # $vars->{message} = $ret->{message}; - # $vars->{messagetype} = $ret->{messagetype}; - # $vars->{page} = "message.tt"; - # } - # if (exists($p->{'btnaccountreset'})){ - # my $ret = $se->accountreset($p); - # $vars->{message} = $ret->{message}; - # $vars->{messagetype} = $ret->{messagetype}; - # $vars->{page} = "message.tt"; - # } - - if (exists($p->{logout})){ - $se->deletesession($p->{sid}); - $p->{sid} = ""; - $cookie = CGI::Cookie->new(-name=>$vars->{cookiename},-value=>"",-httponly => 1); - } -} -if ($p->{sid} ne ""){ - $sess = $se->getsession($p->{sid}); - if ($sess == undef){ - $p->{sid} = ""; - $skl = "login.tt"; - } elsif ($vars->{page} eq "login.tt"){ - $vars->{page} = 'index.tt'; - } -} else { - $skl = "login.tt"; -} - -$vars->{session} = $sess; -my $ctype = 'text/html'; -if ($vars->{suffix} eq ".js"){ - $vars->{ctype}= "text/javascript"; - $skl = "file.tt"; -} elsif ($vars->{suffix} eq ".css"){ - $vars->{ctype} = "text/css"; - $skl = "file.tt"; -} -print $cgi->header(-type=>$ctype, -charset=>"utf-8", -cookie => $cookie); - -$vars->{session} = $sess; - -$vars->{abspath} = ""; -if ($vars->{page} =~ /\//){ - my @spl = split(/\//,$vars->{page}); - foreach (my $i = 1; $i< scalar(@spl); $i++){ - $vars->{abspath} .= "../"; - } -} -# } -$vars->{page} = 'module/'.$vars->{page}; -$vars->{pagename} = basename($vars->{page}); -$vars->{pagename} =~ s/\.tt$//; - -$vars->{params}= $p; -$vars->{lang} = 'fr'; - -$vars->{skl} = $skl; - -$vars->{ua} = $ENV{HTTP_USER_AGENT}; -my $template = Template->new({INCLUDE_PATH => [$sitecfg->{tmplpath}]}); -$template->process($skl,$vars) || die "Template process failed: ", $template->error(), "\n"; - -if ($vars->{page} =~ /\.tt/){ - print '
'.Dumper($vars)."
";
-} 
-
-
diff --git a/website/appphp/index.php b/website/appphp/index.php
deleted file mode 100644
index 7b7ecbc7..00000000
--- a/website/appphp/index.php
+++ /dev/null
@@ -1,32 +0,0 @@
- $value) {
-    $p[$key] = $value;
-  }
-}
-if ($_SERVER["REQUEST_METHOD"] == "POST") {
-  foreach ($_POST as $key => $value) {
-    $p[$key] = $value;
-  }
-}
-if(!isset($_COOKIE[COOKIENAME])){
-  $p["sid"] =  $_COOKIE[COOKIENAME];
-  $session = $se->getsession($_COOKIE[COOKIENAME]);
-}
-
-// echo TMPLPATH.'/'.$skl.'
'; -// echo $page.'
'; -INCLUDE (TMPLPATH.'/'.$skl); - -?> \ No newline at end of file diff --git a/website/appphp/info.php b/website/appphp/info.php deleted file mode 100644 index 146e1e3b..00000000 --- a/website/appphp/info.php +++ /dev/null @@ -1,4 +0,0 @@ - \ No newline at end of file diff --git a/website/appphp/lib/.htaccess b/website/appphp/lib/.htaccess deleted file mode 100644 index 908fc527..00000000 --- a/website/appphp/lib/.htaccess +++ /dev/null @@ -1,5 +0,0 @@ -#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/website/appphp/lib/config.php b/website/appphp/lib/config.php deleted file mode 100644 index acd137e8..00000000 --- a/website/appphp/lib/config.php +++ /dev/null @@ -1,32 +0,0 @@ - \ No newline at end of file diff --git a/website/appphp/lib/db.php b/website/appphp/lib/db.php deleted file mode 100644 index f7364f4b..00000000 --- a/website/appphp/lib/db.php +++ /dev/null @@ -1,417 +0,0 @@ -$conn = $dbh; - - $this->link->query("SET NAMES 'utf8'"); - } catch (PDOException $e) { - print "Error!: " . $e->getMessage() . "
"; - die(); - } - return $dbh; - } - - -public function disconnect(){ - $this->$conn = null; -} -// -function securetext($text){ - $text = str_replace("'", "''", $text); - return $text; -} -// -function query($sql){ -// my $self = shift; -// my $stat = shift; -// # my $vw_info = shift; -// my $retdata = undef; -// my $dbh = DBI->connect($sitecfg->{dsn},$sitecfg->{dbuser},$sitecfg->{dbpassword},{PrintError=>1,RaiseError=>1,AutoCommit=>1}) or return $retdata->{error} = "query Connection Error!".$!; -// $stat = encode("utf8", $stat); -// # open FILE,">>tmp/sql.log"; -// # print FILE "$stat\n"; -// # close FILE; -// my $sth = $dbh->prepare($stat) or return $retdata->{error} = "query".$dbh->errstr. "- SQL: ".$stat;; -// -// -// $sth->execute() or return $retdata->{error} = "query: ".$sth->errstr; -// -// my $data = $sth->fetchrow_hashref(); -// foreach my $k (keys %{$data}){ -// $retdata->{$k} = decode("utf-8",$data->{$k}); -// } -// -// $sth->finish(); -// $dbh->disconnect(); -// -// return $retdata; -} -// -function querybykey(){ -// my $self = shift; -// my $key = shift; -// my $stat = shift; -// #my $retempty = shift; -// my $retdata =(); -// my $dbh = DBI->connect($sitecfg->{dsn},$sitecfg->{dbuser},$sitecfg->{dbpassword},{AutoCommit=>1}) or return $retdata->{error} = "query Connection Error!".$!; -// # $stat = encode("utf8", $stat); -// -// # open FILE,">>sql.log"; -// # print FILE "$stat\n"; -// # close FILE; -// my $sth = $dbh->prepare($stat) or return $retdata->{error} = "query: ".$stat; -// $sth->execute() or return $retdata->{error} = "query: ".$stat; -// while(my $data = $sth->fetchrow_hashref()) -// { -// if (exists $data->{$key}){ -// foreach my $k (keys %{$data}){ -// #if ($k ne $key){ -// -// $retdata->{$data->{$key}}{$k} =decode("utf-8",$data->{$k}); -// #} -// } -// } -// } -// if (keys(%{$retdata}) == 0){ -// $retdata =(); -// } -// $sth->finish(); -// $dbh->disconnect(); -// return $retdata; -} -// -function querysorted(){ -// my $self = shift; -// my $stat = shift; -// # my $vw_info = shift; -// my $retdata; -// my $dbh = DBI->connect($sitecfg->{dsn},$sitecfg->{dbuser},$sitecfg->{dbpassword},{AutoCommit=>1}) or return $retdata->{error} = "query Connection Error!".$!; -// # $stat = encode("utf8", $stat); -// # open FILE,">>tmp/sql.log"; -// # print FILE "\n==\n$stat\n==\n"; -// # close FILE; -// my $sth = $dbh->prepare($stat) or return $retdata->{error} = "querysorted ".$dbh->errstr. "- SQL: ".$stat;; -// -// -// $sth->execute() or return $retdata->{error} = "querysorted: ".$sth->errstr; -// my $count = 0; -// -// while(my $data = $sth->fetchrow_hashref()) -// { -// #$retdata->{$count} = $data; -// foreach my $k (keys %{$data}){ -// if ($data->{$k} =~ /^{.*}$/){ -// #print Dumper($data->{$k}); -// $retdata->{$count}->{$k} = JSON::PP::decode_json($data->{$k}); -// } else { -// $retdata->{$count}->{$k} = decode("utf-8",$data->{$k}); -// -// } -// } -// $count++; -// } -// -// -// $sth->finish(); -// $dbh->disconnect(); -// -// return $retdata; -} -// -function exec(){ -// my $self = shift; -// my $stat = shift; -// my $retdata; -// my $dbh = DBI->connect($sitecfg->{dsn},$sitecfg->{dbuser},$sitecfg->{dbpassword},{AutoCommit=>1}) or return $retdata->{error} = "query Connection Error!".$!; -// # $stat = decode("UTF-8", $stat); -// # open FILE,">>tmp/sql.log"; -// # print FILE "\n==\n$stat\n==\n"; -// # close FILE; -// my $sth = $dbh->prepare($stat) or return $retdata->{error} = "exec ".$dbh->errstr. "- SQL: ".$stat;; -// $retdata->{success} = $dbh->do($stat) or return $retdata->{error} = "exec ".$dbh->errstr. "- SQL: ".$stat; -// $dbh->disconnect(); -// return $retdata; -} -// -function queryarray(){ -// my $self = shift; -// my $stat = shift; -// my @retdata = (); -// my $dbh = DBI->connect($sitecfg->{dsn},$sitecfg->{dbuser},$sitecfg->{dbpassword},{AutoCommit=>1}) or return \@retdata; -// #$stat = encode("utf8", $stat); -// # open FILE,">>tmp/sql.log"; -// # print "$stat\n"; -// # close FILE; -// -// my $sth = $dbh->prepare($stat); -// -// $sth->execute() or return \@retdata; -// my $count = 0; -// -// while(my $data = $sth->fetchrow_hashref()) -// { -// my $row = (); -// #print Dumper($data); -// foreach my $k (keys %{$data}){ -// if ($data->{$k} =~ /^{.*}$/){ -// #print Dumper($data->{$k}); -// $row->{$k} = JSON::PP::decode_json($data->{$k}); -// } else { -// $row->{$k} = decode("utf-8",$data->{$k}); -// } -// } -// #print Dumper($row); -// push @retdata,$row; -// } -// -// $sth->finish(); -// $dbh->disconnect(); -// #%retdata = sort {$a <=> $b} keys %retdata; -// return \@retdata; -} -// -// -function create_ddl_insert(){ -// my $self = shift; -// my $data = shift; -// my $fields = (); -// my @ddl = (); -// #print Dumper($data); -// foreach my $f (keys(%{$data})){ -// if (($f =~ /\_/) && ($f !~ /^ident_/) && ($f !~ /\_id$/)){ -// my $t = substr($f,0,index($f,"_")); -// my $c = substr($f,length($t)+1); -// #my ($t,$c) = $f =~ m/(.+)\_(.+)/; -// $fields->{$t}->{$c} = $data->{$f}; -// } elsif ($f =~ /^ident_/){ -// my $f2 = $f; -// $f2 =~ s/^ident_//; -// -// my $t = substr($f2,0,index($f2,"_")); -// my $c = substr($f2,length($t)+1); -// if ($c ne "id"){ -// $fields->{$t}->{$c} = $data->{$f}; -// } -// } -// -// } -// #print Dumper($fields); -// foreach my $tb (keys(%{$fields})){ -// my @sqlcol = (); -// my @sqlval = (); -// foreach my $c (keys(%{$fields->{$tb}})){ -// my $v = $fields->{$tb}->{$c}; -// $v =~ s/'/''/g; -// push (@sqlcol,$c); -// if ($v eq ''){ -// $v = 'null'; -// } else { -// $v = "'".$v."'"; -// } -// push (@sqlval,$v); -// } -// my $schema = "public"; -// if (exists($data->{schemata})){ -// $schema = $data->{schemata}; -// } -// push(@ddl,"INSERT INTO ".$schema.".".$tb." (".join(",",@sqlcol).") VALUES (".join(",",@sqlval).") returning id;"); -// } -// return @ddl; -} -// -// -function create_ddl_update(){ -// my $self = shift; -// my $data = shift; -// my $fields = (); -// my @ddl = (); -// foreach my $f (keys(%{$data})){ -// if ($f =~ /^ident_/){ -// my $fx = substr($f,6); -// my $t = substr($fx,0,index($fx,"_")); -// my $c = substr($fx,length($t)+1); -// #my ($t,$c) = $f =~ m/^ident_(.+)\_([a-z0-9|\_]+)/; -// $fields->{$t}->{cond}->{$c} = $data->{$f}; -// } elsif ( ($f !~ /^ident/) && ($f =~ /.+\_.+/) ){ -// my $t = substr($f,0,index($f,"_")); -// my $c = substr($f,length($t)+1); -// #my ($t,$c) = $f =~ m/^(.+)\_([a-z0-9|\_]+)/; -// $fields->{$t}->{fields}->{$c} = $data->{$f}; -// } -// } -// foreach my $tb (keys(%{$fields})){ -// my @sqlupd = (); -// my @sqlcond = (); -// foreach my $c (keys(%{$fields->{$tb}->{fields}})){ -// -// my $v = $fields->{$tb}->{fields}->{$c}; -// $v =~ s/'/''/g; -// -// if ($c =~ /-/){ -// my @jp = split('-',$c); -// if ($v eq ''){ -// $v = 'null'; -// } else { -// $v = '"'.$v.'"'; -// } -// $c = 'jsonb_set(to_jsonb('.$jp[0].'),\'{"'.$jp[1].'"}\',\''.$v.'\')::json'; -// push (@sqlupd,$jp[0]."=".$c); -// }else { -// if ($v eq ''){ -// $v = 'null'; -// } else { -// $v = "'".$v."'"; -// } -// push (@sqlupd,$c."=".$v); -// } -// -// } -// foreach my $c (keys(%{$fields->{$tb}->{cond}})){ -// my $v = $fields->{$tb}->{cond}->{$c}; -// $v =~ s/'/''/g; -// if ($v eq ''){ -// $v = 'null'; -// } else { -// $v = "'".$v."'"; -// } -// push (@sqlcond,$c."=".$v); -// } -// my $schema = "public"; -// if (exists($data->{schemata})){ -// $schema = $data->{schemata}; -// } -// push(@ddl,"UPDATE ".$schema.".".$tb." SET ".join(",",@sqlupd)." WHERE ".join(" AND ",@sqlcond).";"); -// } -// -// return @ddl; -} -// -function create_cnt_statement(){ -// my $self = shift; -// my $data = shift; -// my $fields = (); -// my @ddl = (); -// foreach my $f (keys(%{$data})){ -// if ($f =~ /^ident_/){ -// my $fx = substr($f,6); -// my $t = substr($fx,0,index($fx,"_")); -// my $c = substr($fx,length($t)+1); -// #my ($t,$c) = $f =~ m/^ident_(.+)\_([a-z0-9|\_]+)/; -// $fields->{$t}->{cond}->{$c} = $data->{$f}; -// } -// } -// foreach my $tb (keys(%{$fields})){ -// my @sqlcond = (); -// foreach my $c (keys(%{$fields->{$tb}->{cond}})){ -// my $v = $fields->{$tb}->{cond}->{$c}; -// $v =~ s/'/''/g; -// if ($v eq ''){ -// $v = 'null'; -// } else { -// $v = "'".$v."'"; -// } -// push (@sqlcond,$c."=".$v); -// } -// my $schema = "public"; -// if (exists($data->{schemata})){ -// $schema = $data->{schemata}; -// } -// push(@ddl,"SELECT count(*) as cnt from ".$schema.".".$tb." WHERE ".join(" AND ",@sqlcond).";"); -// } -// # open FILE,">>tmp/sql.log"; -// # print FILE "\n==\n".join("\n",@ddl)."\n==\n"; -// # close FILE; -// return @ddl; -} -// -function create_ddl_delete(){ -// my $self = shift; -// my $data = shift; -// my $fields = (); -// my @ddl = (); -// my @refcols = (); -// my $refdata = (); -// foreach my $f (keys(%{$data})){ -// if ($f =~ /^ident_/){ -// my ($t,$c) = $f =~ m/ident_(.+)\_(.+)/; -// -// $fields->{$t}->{cond}->{$c} = $data->{$f}; -// push(@refcols,"'".$c.'_'.$t."'"); -// $refdata->{$c.'_'.$t} = $data->{$f}; -// } -// } -// foreach my $tb (keys(%{$fields})){ -// my @sqlcond = (); -// foreach my $c (keys(%{$fields->{$tb}->{cond}})){ -// my $v = $fields->{$tb}->{cond}->{$c}; -// $v =~ s/'/''/g; -// push (@sqlcond,$c."='".$v."'"); -// } -// my $schema = "public"; -// if (exists($data->{schemata})){ -// $schema = $data->{schemata}; -// } -// push(@ddl,"DELETE FROM ".$schema.".".$tb." WHERE ".join(" AND ",@sqlcond).";"); -// } -// return @ddl; -} -// -function textunidecode(){ -// my $self = shift; -// my $text = shift; -// $text = lc(unidecode(decode("utf-8",$text))); -// $text =~ s/^[a-z0-9]//g; -// return $text; -} -// -function createdefinedschema(){ -// my $self = shift; -// my $schematype = shift; -// my $schemaname = shift; -// my $datasetname = shift; -// my $ddlstr = ""; -// my $sqlschema = "select * from information_schema.schemata where schema_name='".$schemaname."';"; -// my $sc = $self->querysorted($sqlschema); -// my $ret->{sqlschema} = $sqlschema; -// if (keys(%{$sc}) > 0){ -// return; -// } -// my @schemaddl =(); -// my $ddlfile = dirname($0).'/data/schemata/'.$schematype.'.schema.sql'; -// $ret->{ddlfile} = $ddlfile; -// if (-e $ddlfile){ -// open(SCA,$ddlfile); -// while (my $l = ){ -// $l =~ s/%%NEWSCHEMA%%/$schemaname/g; -// if ($l eq "\n"){ -// if ($ddlstr ne ""){ -// push(@schemaddl,$ddlstr); -// } -// $ddlstr = ""; -// next; -// } -// $ddlstr .= $l; -// } -// close(SCA); -// } -// $ret->{schemaddl} = @schemaddl; -// if (scalar(@schemaddl) > 0){ -// for(my $d;$dexec($schemaddl[$d]); -// } -// } -// my $linkid = $self->query("select * from public.add_schemalink('".$datasetname."','".$schemaname."');"); -// return $linkid; -} -} -// -//1; -// -?> \ No newline at end of file diff --git a/website/appphp/lib/dksconfig.pm b/website/appphp/lib/dksconfig.pm deleted file mode 100644 index 64406419..00000000 --- a/website/appphp/lib/dksconfig.pm +++ /dev/null @@ -1,45 +0,0 @@ -package dksconfig; - -use strict; -use lib ('./lib/perl5'); -use lib ('./lib'); -use lib ('./'); -use File::Basename; -use Exporter 'import'; -our @EXPORT_OK = qw($sitecfg); - -our $sitecfg ={ - cookiename => 'potlu', - dbtype => 'PgPP', - #dsn => 'DBI:PgPP:dbname=potlu_db;host=localhost', - #dbuser => 'potlu_user', - #dbpassword => 'r2btTTRfuJz4whez', - dsn => 'DBI:PgPP:dbname=potlu2_db;host=sql12.your-server.de', - dbuser => 'potlu2_user', - dbpassword => 'dMY8xGB6cBLzrDGE', - page => 'index.tt', - pagename => 'index', - basepath => 'app/', - datapath => 'app/data/', - docroot => $ENV{"DOCUMENT_ROOT"}, - tmplpath => dirname($0).'/tmpl', - registration_enabled => '0', - default_group => 'users', - sitename => 'Accès - Client', - staticpath => 'static/', - mail => { - server => "mail.your-server.de", - port => "587", - user => 'ksaffran@dks.lu', - password => "FB1ia1ka", - from => 'support@dks.lu', - templates => { - user_registration => "Confirmation requis pour votre création de compte sur pot.lu", - user_forgotpasswd => "Nouveau mot de passe pour le site pot.lu", - user_verification => "Validation de votre Email pour le site pot.lu", - user_newpassword => "coordonnées d'accès de votre compte sur pot.lu" - } - } -}; - -1; \ No newline at end of file diff --git a/website/appphp/lib/dksdb.pm b/website/appphp/lib/dksdb.pm deleted file mode 100644 index 2105c010..00000000 --- a/website/appphp/lib/dksdb.pm +++ /dev/null @@ -1,417 +0,0 @@ -package dksdb; - -use strict; -use lib ('./lib/perl5'); -use lib ('./lib'); -use lib ('./'); -BEGIN { $ENV{DBI_PUREPERL} = 2 } -use DBI; -use File::Basename; - -use Digest::SHA::PurePerl qw(sha256_hex); -use DBD::PgPP; -use URI::Encode qw(uri_encode uri_decode); -use Encode; -use Data::Dumper; -use dksconfig qw($sitecfg); -use Text::Unidecode; - - -sub new { - my $class = shift; - my $p = shift; - my $self = bless {}, $class; - return $self; -} - -sub securetext(){ - my $self = shift; - my $text = shift; - $text =~ s/'/''/g; - return $text; -} - -sub query(){ - my $self = shift; - my $stat = shift; - # my $vw_info = shift; - my $retdata = undef; - my $dbh = DBI->connect($sitecfg->{dsn},$sitecfg->{dbuser},$sitecfg->{dbpassword},{PrintError=>1,RaiseError=>1,AutoCommit=>1}) or return $retdata->{error} = "query Connection Error!".$!; - $stat = encode("utf8", $stat); - # open FILE,">>tmp/sql.log"; - # print FILE "$stat\n"; - # close FILE; - my $sth = $dbh->prepare($stat) or return $retdata->{error} = "query".$dbh->errstr. "- SQL: ".$stat;; - - - $sth->execute() or return $retdata->{error} = "query: ".$sth->errstr; - - my $data = $sth->fetchrow_hashref(); - foreach my $k (keys %{$data}){ - $retdata->{$k} = decode("utf-8",$data->{$k}); - } - - $sth->finish(); - $dbh->disconnect(); - - return $retdata; -} - -sub querybykey(){ - my $self = shift; - my $key = shift; - my $stat = shift; - #my $retempty = shift; - my $retdata =(); - my $dbh = DBI->connect($sitecfg->{dsn},$sitecfg->{dbuser},$sitecfg->{dbpassword},{AutoCommit=>1}) or return $retdata->{error} = "query Connection Error!".$!; - # $stat = encode("utf8", $stat); - - # open FILE,">>sql.log"; - # print FILE "$stat\n"; - # close FILE; - my $sth = $dbh->prepare($stat) or return $retdata->{error} = "query: ".$stat; - $sth->execute() or return $retdata->{error} = "query: ".$stat; - while(my $data = $sth->fetchrow_hashref()) - { - if (exists $data->{$key}){ - foreach my $k (keys %{$data}){ - #if ($k ne $key){ - - $retdata->{$data->{$key}}{$k} =decode("utf-8",$data->{$k}); - #} - } - } - } - if (keys(%{$retdata}) == 0){ - $retdata =(); - } - $sth->finish(); - $dbh->disconnect(); - return $retdata; -} - -sub querysorted(){ - my $self = shift; - my $stat = shift; - # my $vw_info = shift; - my $retdata; - my $dbh = DBI->connect($sitecfg->{dsn},$sitecfg->{dbuser},$sitecfg->{dbpassword},{AutoCommit=>1}) or return $retdata->{error} = "query Connection Error!".$!; - # $stat = encode("utf8", $stat); - # open FILE,">>tmp/sql.log"; - # print FILE "\n==\n$stat\n==\n"; - # close FILE; - my $sth = $dbh->prepare($stat) or return $retdata->{error} = "querysorted ".$dbh->errstr. "- SQL: ".$stat;; - - - $sth->execute() or return $retdata->{error} = "querysorted: ".$sth->errstr; - my $count = 0; - - while(my $data = $sth->fetchrow_hashref()) - { - #$retdata->{$count} = $data; - foreach my $k (keys %{$data}){ - if ($data->{$k} =~ /^{.*}$/){ - #print Dumper($data->{$k}); - $retdata->{$count}->{$k} = JSON::PP::decode_json($data->{$k}); - } else { - $retdata->{$count}->{$k} = decode("utf-8",$data->{$k}); - - } - } - $count++; - } - - - $sth->finish(); - $dbh->disconnect(); - - return $retdata; -} - -sub exec(){ - my $self = shift; - my $stat = shift; - my $retdata; - my $dbh = DBI->connect($sitecfg->{dsn},$sitecfg->{dbuser},$sitecfg->{dbpassword},{AutoCommit=>1}) or return $retdata->{error} = "query Connection Error!".$!; - # $stat = decode("UTF-8", $stat); - # open FILE,">>tmp/sql.log"; - # print FILE "\n==\n$stat\n==\n"; - # close FILE; - my $sth = $dbh->prepare($stat) or return $retdata->{error} = "exec ".$dbh->errstr. "- SQL: ".$stat;; - $retdata->{success} = $dbh->do($stat) or return $retdata->{error} = "exec ".$dbh->errstr. "- SQL: ".$stat; - $dbh->disconnect(); - return $retdata; -} - -sub queryarray(){ - my $self = shift; - my $stat = shift; - my @retdata = (); - my $dbh = DBI->connect($sitecfg->{dsn},$sitecfg->{dbuser},$sitecfg->{dbpassword},{AutoCommit=>1}) or return \@retdata; - #$stat = encode("utf8", $stat); - # open FILE,">>tmp/sql.log"; - # print "$stat\n"; - # close FILE; - - my $sth = $dbh->prepare($stat); - - $sth->execute() or return \@retdata; - my $count = 0; - - while(my $data = $sth->fetchrow_hashref()) - { - my $row = (); - #print Dumper($data); - foreach my $k (keys %{$data}){ - if ($data->{$k} =~ /^{.*}$/){ - #print Dumper($data->{$k}); - $row->{$k} = JSON::PP::decode_json($data->{$k}); - } else { - $row->{$k} = decode("utf-8",$data->{$k}); - } - } - #print Dumper($row); - push @retdata,$row; - } - - $sth->finish(); - $dbh->disconnect(); - #%retdata = sort {$a <=> $b} keys %retdata; - return \@retdata; -} - - -sub create_ddl_insert(){ - my $self = shift; - my $data = shift; - my $fields = (); - my @ddl = (); - #print Dumper($data); - foreach my $f (keys(%{$data})){ - if (($f =~ /\_/) && ($f !~ /^ident_/) && ($f !~ /\_id$/)){ - my $t = substr($f,0,index($f,"_")); - my $c = substr($f,length($t)+1); - #my ($t,$c) = $f =~ m/(.+)\_(.+)/; - $fields->{$t}->{$c} = $data->{$f}; - } elsif ($f =~ /^ident_/){ - my $f2 = $f; - $f2 =~ s/^ident_//; - - my $t = substr($f2,0,index($f2,"_")); - my $c = substr($f2,length($t)+1); - if ($c ne "id"){ - $fields->{$t}->{$c} = $data->{$f}; - } - } - - } - #print Dumper($fields); - foreach my $tb (keys(%{$fields})){ - my @sqlcol = (); - my @sqlval = (); - foreach my $c (keys(%{$fields->{$tb}})){ - my $v = $fields->{$tb}->{$c}; - $v =~ s/'/''/g; - push (@sqlcol,$c); - if ($v eq ''){ - $v = 'null'; - } else { - $v = "'".$v."'"; - } - push (@sqlval,$v); - } - my $schema = "public"; - if (exists($data->{schemata})){ - $schema = $data->{schemata}; - } - push(@ddl,"INSERT INTO ".$schema.".".$tb." (".join(",",@sqlcol).") VALUES (".join(",",@sqlval).") returning id;"); - } - return @ddl; -} - - -sub create_ddl_update(){ - my $self = shift; - my $data = shift; - my $fields = (); - my @ddl = (); - foreach my $f (keys(%{$data})){ - if ($f =~ /^ident_/){ - my $fx = substr($f,6); - my $t = substr($fx,0,index($fx,"_")); - my $c = substr($fx,length($t)+1); - #my ($t,$c) = $f =~ m/^ident_(.+)\_([a-z0-9|\_]+)/; - $fields->{$t}->{cond}->{$c} = $data->{$f}; - } elsif ( ($f !~ /^ident/) && ($f =~ /.+\_.+/) ){ - my $t = substr($f,0,index($f,"_")); - my $c = substr($f,length($t)+1); - #my ($t,$c) = $f =~ m/^(.+)\_([a-z0-9|\_]+)/; - $fields->{$t}->{fields}->{$c} = $data->{$f}; - } - } - foreach my $tb (keys(%{$fields})){ - my @sqlupd = (); - my @sqlcond = (); - foreach my $c (keys(%{$fields->{$tb}->{fields}})){ - - my $v = $fields->{$tb}->{fields}->{$c}; - $v =~ s/'/''/g; - - if ($c =~ /-/){ - my @jp = split('-',$c); - if ($v eq ''){ - $v = 'null'; - } else { - $v = '"'.$v.'"'; - } - $c = 'jsonb_set(to_jsonb('.$jp[0].'),\'{"'.$jp[1].'"}\',\''.$v.'\')::json'; - push (@sqlupd,$jp[0]."=".$c); - }else { - if ($v eq ''){ - $v = 'null'; - } else { - $v = "'".$v."'"; - } - push (@sqlupd,$c."=".$v); - } - - } - foreach my $c (keys(%{$fields->{$tb}->{cond}})){ - my $v = $fields->{$tb}->{cond}->{$c}; - $v =~ s/'/''/g; - if ($v eq ''){ - $v = 'null'; - } else { - $v = "'".$v."'"; - } - push (@sqlcond,$c."=".$v); - } - my $schema = "public"; - if (exists($data->{schemata})){ - $schema = $data->{schemata}; - } - push(@ddl,"UPDATE ".$schema.".".$tb." SET ".join(",",@sqlupd)." WHERE ".join(" AND ",@sqlcond).";"); - } - - return @ddl; -} - -sub create_cnt_statement(){ - my $self = shift; - my $data = shift; - my $fields = (); - my @ddl = (); - foreach my $f (keys(%{$data})){ - if ($f =~ /^ident_/){ - my $fx = substr($f,6); - my $t = substr($fx,0,index($fx,"_")); - my $c = substr($fx,length($t)+1); - #my ($t,$c) = $f =~ m/^ident_(.+)\_([a-z0-9|\_]+)/; - $fields->{$t}->{cond}->{$c} = $data->{$f}; - } - } - foreach my $tb (keys(%{$fields})){ - my @sqlcond = (); - foreach my $c (keys(%{$fields->{$tb}->{cond}})){ - my $v = $fields->{$tb}->{cond}->{$c}; - $v =~ s/'/''/g; - if ($v eq ''){ - $v = 'null'; - } else { - $v = "'".$v."'"; - } - push (@sqlcond,$c."=".$v); - } - my $schema = "public"; - if (exists($data->{schemata})){ - $schema = $data->{schemata}; - } - push(@ddl,"SELECT count(*) as cnt from ".$schema.".".$tb." WHERE ".join(" AND ",@sqlcond).";"); - } - # open FILE,">>tmp/sql.log"; - # print FILE "\n==\n".join("\n",@ddl)."\n==\n"; - # close FILE; - return @ddl; -} - -sub create_ddl_delete(){ - my $self = shift; - my $data = shift; - my $fields = (); - my @ddl = (); - my @refcols = (); - my $refdata = (); - foreach my $f (keys(%{$data})){ - if ($f =~ /^ident_/){ - my ($t,$c) = $f =~ m/ident_(.+)\_(.+)/; - - $fields->{$t}->{cond}->{$c} = $data->{$f}; - push(@refcols,"'".$c.'_'.$t."'"); - $refdata->{$c.'_'.$t} = $data->{$f}; - } - } - foreach my $tb (keys(%{$fields})){ - my @sqlcond = (); - foreach my $c (keys(%{$fields->{$tb}->{cond}})){ - my $v = $fields->{$tb}->{cond}->{$c}; - $v =~ s/'/''/g; - push (@sqlcond,$c."='".$v."'"); - } - my $schema = "public"; - if (exists($data->{schemata})){ - $schema = $data->{schemata}; - } - push(@ddl,"DELETE FROM ".$schema.".".$tb." WHERE ".join(" AND ",@sqlcond).";"); - } - return @ddl; -} - -sub textunidecode(){ - my $self = shift; - my $text = shift; - $text = lc(unidecode(decode("utf-8",$text))); - $text =~ s/^[a-z0-9]//g; - return $text; -} - -sub createdefinedschema(){ - my $self = shift; - my $schematype = shift; - my $schemaname = shift; - my $datasetname = shift; - my $ddlstr = ""; - my $sqlschema = "select * from information_schema.schemata where schema_name='".$schemaname."';"; - my $sc = $self->querysorted($sqlschema); - my $ret->{sqlschema} = $sqlschema; - if (keys(%{$sc}) > 0){ - return; - } - my @schemaddl =(); - my $ddlfile = dirname($0).'/data/schemata/'.$schematype.'.schema.sql'; - $ret->{ddlfile} = $ddlfile; - if (-e $ddlfile){ - open(SCA,$ddlfile); - while (my $l = ){ - $l =~ s/%%NEWSCHEMA%%/$schemaname/g; - if ($l eq "\n"){ - if ($ddlstr ne ""){ - push(@schemaddl,$ddlstr); - } - $ddlstr = ""; - next; - } - $ddlstr .= $l; - } - close(SCA); - } - $ret->{schemaddl} = @schemaddl; - if (scalar(@schemaddl) > 0){ - for(my $d;$dexec($schemaddl[$d]); - } - } - my $linkid = $self->query("select * from public.add_schemalink('".$datasetname."','".$schemaname."');"); - return $linkid; -} - -1; diff --git a/website/appphp/lib/pdfreport.php b/website/appphp/lib/pdfreport.php deleted file mode 100644 index e69de29b..00000000 diff --git a/website/appphp/lib/pdfreport.pm b/website/appphp/lib/pdfreport.pm deleted file mode 100644 index 413b459d..00000000 --- a/website/appphp/lib/pdfreport.pm +++ /dev/null @@ -1,124 +0,0 @@ -package pdfreport; - -use strict; -use Template; -use File::Basename qw/dirname basename/; -use Data::Dumper; -use File::Copy::Recursive qw(dircopy); -use lib ('./lib/perl5'); -use lib ('./lib'); -use lib ('./'); -use dksconfig qw($sitecfg); - -sub new { - my $class = shift; - my $p = shift; - my $self = bless {}, $class; - $self->{tmplpath} =$p->{tmplpath}; - $self->{tmp} =$p->{tmp}; - $self->{pdf} = undef; - $self->{template} = undef; - #$self->{template} = $p->{template}; - $self->{pdf}->{app} = dirname($ENV{SCRIPT_FILENAME})."/tools/bin/wkhtmltopdf"; - return $self; -} - -sub createpdf(){ - my $self = shift; - my $template = shift; - my $output = shift; - my $inputdata = shift; - my $r = -1; - #print $self->{tmplpath}.'/'.$template.'.conf'."\n"; - if (-e $self->{tmplpath}.'/'.$template.'.conf'){ - $self->readpdfconfig($template,$inputdata); - #print Dumper($self->{template}); - } - #print "PDF:".Dumper($self->{pdf}); - #print "TMPL:".Dumper($self->{template}); - #print "SELF:".Dumper($self->{tmplpath}); - my $tmpreportpath=$self->{tmplpath}; - if (exists($self->{pdf}->{engine}) && ($self->{pdf}->{engine} eq "Template::Toolkit")){ - $template = $self->createTTReport($template); - $tmpreportpath = $self->{tmp}; - } - #print $tmpreportpath.'/'.$template.'.html'; - if ((keys(%{$self->{pdf}}) > 0) && (-e $tmpreportpath.'/'.$template.'.html')){ - my $cmd = '"'.$self->{pdf}->{app}.'"'; - if ($self->{pdf}->{bottom}){ $cmd .= " -B ".$self->{pdf}->{bottom}; } - if ($self->{pdf}->{left}){ $cmd .= " -L ".$self->{pdf}->{left}; } - if ($self->{pdf}->{right}){ $cmd .= " -R ".$self->{pdf}->{right}; } - if ($self->{pdf}->{top}){ $cmd .= " -T ".$self->{pdf}->{top}; } - if ($self->{pdf}->{orientation}){ $cmd .= " -O ".$self->{pdf}->{orientation}; } - if ($self->{pdf}->{size}){ $cmd .= " -s ".$self->{pdf}->{size}; } - if ($self->{pdf}->{encoding}){ $cmd .= " --encoding '".$self->{pdf}->{encoding}."'"; } - if (-e $tmpreportpath.'/'.$template.'.header.html'){ - $cmd .= ' --header-html "'.$tmpreportpath.'/'.$template.'.header.html"'; - } - if (-e $tmpreportpath.'/'.$template.'.footer.html'){ - $cmd .= ' --footer-html "'.$tmpreportpath.'/'.$template.'.footer.html"'; - } - $cmd .= ' "'.$tmpreportpath.'/'.$template.'.html"'; - $cmd .= ' "'.$output.'"'; - print STDERR $cmd."\n"; - $r = system($cmd); - } - if (-e $output){ - return ($r,$output); - } - return ($r,undef); -} - -sub createTTReport(){ - my $self = shift; - my $template = shift; - my $uniquekey = $$; - if (-e $self->{tmplpath}.'/'.$template.".tt"){ - $self->TTtoHTML($self->{tmplpath}.'/'.$template.".tt",$self->{tmp}.'/'.$template.$$.".html"); - } - if (-e $self->{tmplpath}.'/'.$template.".header.tt"){ - $self->TTtoHTML($self->{tmplpath}.'/'.$template.".header.tt",$self->{tmp}.'/'.$template.$$.".header.html"); - } - if (-e $self->{tmplpath}.'/'.$template.".footer.tt"){ - $self->TTtoHTML($self->{tmplpath}.'/'.$template.".footer.tt",$self->{tmp}.'/'.$template.$$.".footer.html"); - } - if (-d $self->{tmplpath}.'/'.$template){ - dircopy($self->{tmplpath}.'/'.$template,$self->{tmp}.'/'.$template); - } - - return $template.$$; -} - -sub TTtoHTML(){ - my $self = shift; - my $ttfile = shift; - my $outfile = shift; - $self->{template}->{dsn} = $sitecfg->{dsn}; - $self->{template}->{dbuser} = $sitecfg->{dbuser}; - $self->{template}->{dbpassword} = $sitecfg->{dbpassword}; - #print Dumper($self->{template}); - my $template = Template->new({INCLUDE_PATH => [dirname($ttfile)]});#,ENCODING => 'utf8' - $template->process(basename($ttfile),$self->{template},$outfile) || die "Template process failed: ", $template->error(), "\n";#,{binmode => ':utf8'} -} - -sub readpdfconfig(){ - my $self = shift; - my $template = shift; - my $inputdata = shift; - open(CFG,$self->{tmplpath}.'/'.$template.'.conf'); - while (my $l = ){ - chomp($l); - #print $l."\n"; - $l =~ s/^\s+//; - if (($l =~ /^#/) || ($l eq "")) {next;} - if ($l =~ /\w+=.+/){ - my ($k1,$k2,$v) = $l =~ m/^(\w+)_(\w+)=\"(.+)\"$/; - $self->{lc($k1)}->{lc($k2)} = $v; - } - } - close(CFG); - foreach my $ik (keys(%{$inputdata})){ - $self->{template}->{lc($ik)} = $inputdata->{$ik}; - } -} -1; \ No newline at end of file diff --git a/website/appphp/lib/sendemail.php b/website/appphp/lib/sendemail.php deleted file mode 100644 index e69de29b..00000000 diff --git a/website/appphp/lib/sendemail.pm b/website/appphp/lib/sendemail.pm deleted file mode 100644 index b9d61294..00000000 --- a/website/appphp/lib/sendemail.pm +++ /dev/null @@ -1,71 +0,0 @@ -package sendemail; - -use strict; -use lib ('./lib/perl5'); -use lib ('./lib'); -use lib ('./'); -use Data::Dumper; -use Template; -use CGI; -use File::Basename qw/dirname basename/; -use dksdb; - -use dksconfig qw($sitecfg); - -sub new { - my $class = shift; - my $self = bless {}, $class; - $self->{server} = $sitecfg->{mail}->{server}; - $self->{port} = $sitecfg->{mail}->{port}; - $self->{user} = $sitecfg->{mail}->{user}; - $self->{password} = $sitecfg->{mail}->{password}; - $self->{from} = $sitecfg->{mail}->{from}; - $self->{templates} = $sitecfg->{mail}->{templates}; - return $self; -} - -sub gentemplate(){ - my $self = shift; - my $template = shift; - my $iduser = shift; - my $otherdata = shift; - my $vars = $sitecfg; - foreach my $tk (keys(%{$otherdata})){ - $vars->{$tk} = $otherdata->{$tk}; - } - $vars->{bodytemplate} = $template.".tt"; - $vars->{userid} = $iduser; - $vars->{siteurl} = CGI::url({-base=>1}).dirname($vars->{basepath}); - - print STDERR $sitecfg->{docroot}.$sitecfg->{datapath}.'mail'; - chdir($sitecfg->{docroot}.$sitecfg->{datapath}.'mail'); - my $bodyfile = dirname($ENV{SCRIPT_FILENAME}).'/tmp/'.$template.'_'.$iduser.'.mail'; - my $template = Template->new({INCLUDE_PATH => [$sitecfg->{docroot}.$sitecfg->{datapath}.'mail'],OUTPUT => $bodyfile}); - $template->process("mail.tt",$vars) || die "Template process failed: ", $template->error(), "\n"; - my $db = dksdb->new(); - my $usermail = $db->querysorted("select username from public.users where id='".$iduser."';"); - - my $binsemail = dirname($ENV{SCRIPT_FILENAME}).'/tools/bin/sendEmail'; - if (! -e $binsemail){ - return 256; - } - my $cmd= 'perl "'.$binsemail.'" -f '.$self->{mailfrom}.' '; - $cmd .= ' -s "'.$self->{server}.':'.$self->{port}.'" -xu "'.$self->{user}.'" -xp "'.$self->{password}.'" -q '; - $cmd .= '-o tls=auto '; - $cmd .= '-t "'.$$usermail->{0}->{username}.'" '; - $cmd .= '-u "'.$self->{templates}->{$template}.'" '; - $cmd .= '-o message-content-type=html '; - $cmd .= '-o message-charset=ISO-8859-1 '; - $cmd .= '-o message-file='.$bodyfile.' '; - # if ($attach != undef){ - # $cmd .= " -a"; - - # foreach my $a (@{$attach}){ - # $cmd .= " ".$a." "; - # } - # } - my $send = system($cmd); - return $send; - unlink($bodyfile); -} -1; \ No newline at end of file diff --git a/website/appphp/lib/sendemail_new.pm b/website/appphp/lib/sendemail_new.pm deleted file mode 100644 index 81707bf2..00000000 --- a/website/appphp/lib/sendemail_new.pm +++ /dev/null @@ -1,151 +0,0 @@ -package sendemail_new; - -use strict; -use lib ('./lib/perl5'); -use lib ('./lib'); -use lib ('./'); -use Data::Dumper; -use Template; -use CGI; -use File::Basename qw/dirname basename/; -use dksdb; - -use dksconfig qw($sitecfg); - -sub new { - my $class = shift; - my $self = bless {}, $class; - $self->{server} = $sitecfg->{mail}->{server}; - $self->{port} = $sitecfg->{mail}->{port}; - $self->{user} = $sitecfg->{mail}->{user}; - $self->{password} = $sitecfg->{mail}->{password}; - $self->{from} = $sitecfg->{mail}->{from}; - $self->{templates} = $sitecfg->{mail}->{templates}; - return $self; -} - -sub gentemplate(){ - my $self = shift; - my $template = shift; - my $iduser = shift; - my $vars = $sitecfg; - $vars->{bodytemplate} = $template.".tt"; - $vars->{userid} = $iduser; - $vars->{siteurl} = CGI::url({-base=>1}).dirname($vars->{basepath}); - - print STDERR $sitecfg->{docroot}.$sitecfg->{datapath}.'mail'; - chdir($sitecfg->{docroot}.$sitecfg->{datapath}.'mail'); - my $bodyfile = dirname($ENV{SCRIPT_FILENAME}).'/tmp/'.$template.'_'.$iduser.'.mail'; - my $template = Template->new({INCLUDE_PATH => [$sitecfg->{docroot}.$sitecfg->{datapath}.'mail'],OUTPUT => $bodyfile}); - $template->process("mail.tt",$vars) || die "Template process failed: ", $template->error(), "\n"; - my $db = dksdb->new(); - my $usermail = $db->querysorted("select username from public.users where id='".$iduser."';"); - - my $binsemail = dirname($ENV{'SCRIPT_FILENAME'}).'/sendEmail'; - if (! -e $binsemail){ - return 256; - } - my $cmd= 'perl "'.$binsemail.'" -f '.$self->{mailfrom}.' '; - $cmd .= ' -s "'.$self->{server}.':'.$self->{port}.'" -xu "'.$self->{user}.'" -xp "'.$self->{password}.'" -q '; - $cmd .= '-o tls=auto '; - $cmd .= '-t "'.$$usermail->{0}->{username}.'" '; - $cmd .= '-u "'.$self->{templates}->{$template}.'" '; - $cmd .= '-o message-content-type=html '; - $cmd .= '-o message-charset=ISO-8859-1 '; - $cmd .= '-o message-file='.$bodyfile.' '; - # if ($attach != undef){ - # $cmd .= " -a"; - - # foreach my $a (@{$attach}){ - # $cmd .= " ".$a." "; - # } - # } - my $send = system($cmd); - return $send; - unlink($bodyfile); -} - -# sub sendemail(){ -# my $self = shift; -# my $template = shift; -# my $iduser = shift; -# my $sendto = shift; -# my $data = shift; -# my $attach = shift; -# my $body = ""; -# my $subject = ""; -# my $maildata = (); -# my $db = dksdb->new(); -# my $send = -1; -# my $tmpl = $db->querysorted("select *,ml.mailtemplate from mailtemplates mt join maillayouts ml on (mt.id_maillayout=ml.id) where templatename='".$template."';"); -# if (keys(%{$tmpl}) > 0){ -# $tmpl = $tmpl->{0}; -# } -# my $datasql = $tmpl->{'emaildatasql'}; -# $data->{id} = $iduser; -# foreach my $key (keys(%{$data})){ -# my $srch = '%%'.lc($key).'%%'; -# my $repl = $data->{$key}; -# $datasql =~ s/$srch/$repl/g; -# } -# $maildata = $db->querysorted($datasql); - -# $body = $tmpl->{'emailtext'}; -# $subject = $tmpl->{'mailsubject'}; -# foreach my $key (keys(%{$maildata->{0}})){ -# $data->{$key} = $maildata->{0}->{$key}; -# } -# foreach my $key (keys(%{$data})){ -# my $srch = '%%'.lc($key).'%%'; -# my $repl = $data->{$key}; -# $body =~ s/$srch/$repl/g; -# $subject =~ s/$srch/$repl/g; -# } -# my $bodytmpl = $tmpl->{mailtemplate}; -# $bodytmpl =~ s/%%BODYCONTENT%%/$body/; -# my $siteurl = $ENV{'REQUEST_SCHEME'}.'://'.$ENV{"HTTP_HOST"}; -# $bodytmpl =~ s/%%siteurl%%/$siteurl/g; -# $bodytmpl =~ s/%%SITEURL%%/$siteurl/g; -# $bodytmpl =~ s/\r//g; -# if (($bodytmpl ne "") && ($subject ne "") && ($sendto =~ /.+\@.+\..+/)){ - - -# my $binsemail = dirname($ENV{'SCRIPT_FILENAME'}).'/sendEmail'; -# my $f = dirname($ENV{SCRIPT_FILENAME}).'/tmp/mailbody_'.$sendto.'.txt'; -# $f =~ s/\@/_/g; -# if (! -e $binsemail){ -# $binsemail = dirname($ENV{'SCRIPT_FILENAME'}).'/api/sendEmail'; -# $f = dirname($ENV{SCRIPT_FILENAME}).'/api/tmp/mailbody_'.$sendto.'.txt'; -# $f =~ s/\@/_/g; -# if (! -e $binsemail){ -# return 256; -# } -# } - -# my $cmd= 'perl "'.$binsemail.'" -f '.$tmpl->{mailfrom}.' '; -# $cmd .= ' -s "'.$self->{server}.':'.$self->{port}.'" -xu "'.$self->{user}.'" -xp "'.$self->{password}.'" -q '; -# $cmd .= '-o tls=auto '; -# $cmd .= '-t "'.$sendto.'" '; -# $cmd .= '-u "'.$subject.'" '; -# $cmd .= '-o message-content-type=html '; -# $cmd .= '-o message-charset=ISO-8859-1 '; -# $cmd .= '-o message-file='.$f.' '; -# open(EML,">".$f); -# print EML $bodytmpl; -# close(EML); -# # $cmd .= '-m "'.$bodytmpl.'" '; -# if ($attach != undef){ -# $cmd .= " -a"; - -# foreach my $a (@{$attach}){ -# $cmd .= " ".$a." "; -# } -# } -# $send = system($cmd); - -# unlink($f); -# } -# return $send; -# } - -1; \ No newline at end of file diff --git a/website/appphp/lib/session.php b/website/appphp/lib/session.php deleted file mode 100644 index 4b75c1dd..00000000 --- a/website/appphp/lib/session.php +++ /dev/null @@ -1,183 +0,0 @@ -{messagetype} ='red'; - // # open FILE,">>tmp/sql.log"; - // # print FILE "pwd: $password\n"; - // # print FILE "pwd: $pwd\n"; - // # close(FILE); - // # my $newsid = undef; - // $login = lc($login); - // $login =~ s/^\s+//; - // $login =~ s/\s+$//; - - // $ret->{message} = "Mot de passe ou Login inconnue!"; - // $ret->{messagetype} = "red"; - // $ret->{sid} = undef; - // my $siddata = $self->{db}->querysorted("select * from checklogin('".$self->{db}->securetext($login)."','".$pwd."','".$ENV{REMOTE_ADDR}."','".$ENV{HTTP_USER_AGENT}."');"); - - // if (keys(%{$siddata}) > 0){ - // # open FILE,">>tmp/sql.log"; - // # print FILE Dumper($siddata); - // # close(FILE); - // $ret->{sid} = $siddata->{0}->{checklogin}; - // } - // return $ret; - } - function getsession($sid){ - $sql ="select * from public.getsession('".$db->securetext($sid)."','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['HTTP_USER_AGENT']."');"; - // my $res= $self->{db}->querysorted($sql); - // my $ret = undef; - // # open FILE,">>tmp/sql.log"; - // # print FILE "GET DB Session\n"; - // # print FILE Dumper($res->{0}); - // # close(FILE); - // if (keys(%{$res}) > 0){ - - // return $res->{0}; - // } - $ret = array("sqldata" => array()); - return $ret; - } - function passwordforgotten($email){ - // my $ret->{messagetype} ='red'; - // $ret->{message} = "email inconnue!"; - // my $sql = "select id,userpassword from users where username='".$self->{db}->securetext($email)."';"; - // my $ex = $self->{db}->querysorted($sql); - // if (keys(%{$ex}) > 0){ - // my $newpwd = $self->randomstring(12); - // my $pwd = sha256_hex($newpwd); - // $self->{db}->exec("UPDATE users SET userpassword = '".$pwd."' WHERE id=".$ex->{0}->{id}.";"); - // my $data->{newpassword} = $newpwd; - // my $eml = sendemail->new(); - // my $mret = $eml->sendemail('user_forgotpasswd',$ex->{0}->{id},$email,$data,undef); - // if ($mret != 0){ - // $ret->{messagetype} ='red'; - // $ret->{message} = "Pour le moment il n'y est pas possible de recevoir un nouveau mot de passe,
si besoin contacter le support support\@dks.lu!"; - // return $ret; - // } - // $ret->{message} = "nous vous avons envoyés unn nouveau mot de passe par via email!"; - // $ret->{messagetype} = "green"; - // } - // return $ret; - } - function deletesession($sid){ - //$self->{db}->exec("DELETE FROM sessions where idsession='".$self->{db}->securetext($sid)."';"); - } - function savepassword($iduser,$newpassword){ - // my $pwd = sha256_hex($newpwd); - // $self->{db}->exec("UPDATE users SET userpassword = '".$pwd."' WHERE id=".$iduser.";"); - // return 1; - } - function admin_sendpassword(){ - // my $self = shift; - // my $email = shift; - // my $sql = "select id,userpassword from users where username='".$self->{db}->securetext($email)."';"; - // my $ex = $self->{db}->querysorted($sql); - // my $ret = -1; - // if (keys(%{$ex}) > 0){ - // my $newpwd = $self->randomstring(12); - // my $pwd = sha256_hex($newpwd); - // $self->{db}->exec("UPDATE users SET userpassword = '".$pwd."' WHERE id=".$ex->{0}->{id}.";"); - // my $data->{newpassword} = $newpwd; - // my $eml = sendemail->new(); - // $ret = $eml->sendemail('user_newpassword',$ex->{0}->{id},$email,$data,undef); - // } - // return $ret; - // } -} - - -function registseruser($data){ - // my $ret->{messagetype} ='red'; - // $ret->{message} = "Une erreur c'est produite, essayer plus tard!"; - // $ret->{page} = "message.tt"; - // my @reqfields = ("companies_company","terms","users_email","members_phone","members_surname","members_prename","members_job"); - // my $reqf = 1; - // foreach my $rf (@reqfields){ - // if (!exists($data->{$rf})){ - // $reqf = 0; - // } - // } - // if ($reqf == 0){ - // $ret->{message} = "Rempissez tous les champs s.v.p.!"; - // $ret->{page} = "register.tt"; - // return $ret; - // } - // foreach my $d (%{$data}){ - // $data->{$d} = $self->{db}->securetext($data->{$d}); - // } - - // my $user = $self->{db}->querysorted("select id from users where username='".$data->{users_email}."';"); - // if (keys(%{$user}) > 0){ - // $ret->{page} = "register.tt"; - // $ret->{message} = "Il y existe déjà un utilisateur avec la mème adresse e-mail!"; - // return $ret; - // } - - // my $newcode = $self->randomstring(6); - - // my $newuserid = $self->{db}->querysorted("INSERT INTO users (username,vcode) VALUES ('".$data->{users_email}."','".$newcode."') returning id;"); - // #$self->{db}->exec("INSERT INTO useringroups (id_user,id_group) VALUES ('".$newuserid->{0}->{id}."',(select id from usergroups where isdefault=true));"); - // my $company = $self->{db}->querysorted("select id from companies where link=unaccent_string('".$data->{companies_company}."');"); - // if (keys(%{$company}) == 0 ){ - // $company = $self->{db}->querysorted("INSERT INTO companies (company,link) VALUES ('".$data->{companies_company}."',unaccent_string('".$data->{companies_company}."')) returning id;"); - // #$self->{db}->exec("INSERT INTO useringroups (id_user,id_group) VALUES ('".$newuserid->{0}->{id}."',(select id from usergroups where usergroup='company'));"); - // } - // $self->{db}->exec("INSERT INTO members (surname, prename, phone, id_user, id_company, job) VALUES('".$data->{members_surname}."', '".$data->{members_prename}."', '".$data->{members_phone}."', ".$newuserid->{0}->{id}.", ".$company->{0}->{id}.", '".$data->{members_job}."');"); - // my $maildata->{vcode} = $newcode; - // my $eml = sendemail->new(); - // my $mret = $eml->sendemail('user_verification',$newuserid->{0}->{id},$data->{users_email},$maildata,undef); - // if ($mret == 0){ - // $ret->{message} = "Merci,
nous vous avons envoyé un email,avec un code de vérification!
Entrez ce code ci dessous, pour valider votre compte!
en cas de problèmes envoyer un email à info\@solana-architecture.lu"; - // $ret->{messagetype} = "green"; - // $ret->{page} = "validationcode.tt"; - // } else { - // $self->{db}->exec("UPDATE users set username='".$data->{users_email}."',vcode=null where id=".$newuserid->{0}->{id}." ;"); - // $ret->{message} = "nous ne pouvons pas envoyer un email à '".$data->{users_email}."' ! Si cette email n'existe pas, régisterez-vous avec un email existant!
en cas de problèemes envoyer un email à info\@solana-architecture.lu"; - // $ret->{messagetype} = "red"; - // $ret->{page} = "register.tt"; - // } - // #$self->{db}->exec("insert into appaccess (id_user) values (".$newuserid->{0}->{id}.");"); - // # $ret->{messagetype} = "green"; - - // return $ret; -} - function randomstring(){ - // my @alphanumeric = ('a'..'z', 'A'..'Z', 0..9); - // my $randstring = join '', map $alphanumeric[rand @alphanumeric], 0..$num; - // return $randstring; - } - function alidateaccount(){ - // my $self = shift; - // my $data = shift; - // foreach my $d (%{$data}){ - // $data->{$d} = $self->{db}->securetext($data->{$d}); - // } - - // my $ret->{messagetype} ='red'; - // my $vcodedata = $self->{db}->querysorted("select id,vcode,username from users where vcode='".$data->{vcode}."';"); - // if (keys(%{$vcodedata}) == 0){ - // $ret->{message} = "code inconnue!"; - // $ret->{page} = "validationcode.tt"; - // } - // my $newpwd = $self->randomstring(12); - // my $pwd = sha256_hex($newpwd); - // my $maildata->{password} = $newpwd; - // my $eml = sendemail->new(); - // my $newuserid = $self->{db}->querysorted("UPDATE users set userpassword='".$pwd."',vcode=null,regcode=null where id=".$vcodedata->{0}->{id}." returning id,username;"); - // my $mret = $eml->sendemail('user_registration',$vcodedata->{0}->{id},$vcodedata->{0}->{username},$maildata,undef); - // if ($mret == 0){ - // $ret->{message} = "Merci,
Nous vous avons envoyé un email avec les données nécessaires pour se connecter!"; - // $ret->{messagetype} = "green"; - // $ret->{page} = "message.tt"; - // } else { - // $ret->{message} = "NOus n'avons pas pu vous envoyé un email à '".$newuserid->{0}->{username}."'! Si l'addresse email n'existe pas, essayer avec un email existant!"; - // $ret->{page} = "message.tt"; - // } - // return $ret; - } -} -?> - diff --git a/website/appphp/lib/session.pm b/website/appphp/lib/session.pm deleted file mode 100644 index c3b0db99..00000000 --- a/website/appphp/lib/session.pm +++ /dev/null @@ -1,261 +0,0 @@ -package session; - -use strict; -use lib ('./lib/perl5'); -use lib ('./lib'); -use lib ('./'); -use File::Basename; -use Digest::SHA qw(sha256_hex); -use Data::Dumper; - -use dksdb; -use sendemail; -# use Data::Dumper; - -sub new { - my $class = shift; - my $self = bless {}, $class; - $self->{db} = dksdb->new(); - return $self; -} - -sub checklogin(){ - my $self = shift; - my $login = shift; - my $password = shift; - - my $pwd = sha256_hex($password); - my $ret->{messagetype} ='red'; - # open FILE,">>tmp/sql.log"; - # print FILE "pwd: $password\n"; - # print FILE "pwd: $pwd\n"; - # close(FILE); - # my $newsid = undef; - $login = lc($login); - $login =~ s/^\s+//; - $login =~ s/\s+$//; - - $ret->{message} = "Mot de passe ou Login inconnue!"; - $ret->{messagetype} = "red"; - $ret->{sid} = undef; - my $siddata = $self->{db}->querysorted("select * from checklogin('".$self->{db}->securetext($login)."','".$pwd."','".$ENV{REMOTE_ADDR}."','".$ENV{HTTP_USER_AGENT}."');"); - - if (keys(%{$siddata}) > 0){ - # open FILE,">>tmp/sql.log"; - # print FILE Dumper($siddata); - # close(FILE); - $ret->{sid} = $siddata->{0}->{checklogin}; - } - return $ret; -} - -sub savepassword(){ - my $self = shift; - my $iduser = shift; - my $newpwd = shift; - my $pwd = sha256_hex($newpwd); - $self->{db}->exec("UPDATE users SET userpassword = '".$pwd."' WHERE id=".$iduser.";"); - return 1; -} - -sub admin_sendpassword(){ - my $self = shift; - my $email = shift; - my $sql = "select id,userpassword from users where username='".$self->{db}->securetext($email)."';"; - my $ex = $self->{db}->querysorted($sql); - my $ret = -1; - if (keys(%{$ex}) > 0){ - my $newpwd = $self->randomstring(12); - my $pwd = sha256_hex($newpwd); - $self->{db}->exec("UPDATE users SET userpassword = '".$pwd."' WHERE id=".$ex->{0}->{id}.";"); - my $data->{newpassword} = $newpwd; - my $eml = sendemail->new(); - $ret = $eml->sendemail('user_newpassword',$ex->{0}->{id},$email,$data,undef); - } - return $ret; -} - - -sub passwordforgotten(){ - my $self = shift; - my $email = shift; - my $ret->{messagetype} ='red'; - $ret->{message} = "email inconnue!"; - my $sql = "select id,userpassword from users where username='".$self->{db}->securetext($email)."';"; - my $ex = $self->{db}->querysorted($sql); - if (keys(%{$ex}) > 0){ - my $newpwd = $self->randomstring(12); - my $pwd = sha256_hex($newpwd); - $self->{db}->exec("UPDATE users SET userpassword = '".$pwd."' WHERE id=".$ex->{0}->{id}.";"); - my $data->{newpassword} = $newpwd; - my $eml = sendemail->new(); - my $mret = $eml->sendemail('user_forgotpasswd',$ex->{0}->{id},$email,$data,undef); - if ($mret != 0){ - $ret->{messagetype} ='red'; - $ret->{message} = "Pour le moment il n'y est pas possible de recevoir un nouveau mot de passe,
si besoin contacter le support support\@dks.lu!"; - return $ret; - } - $ret->{message} = "nous vous avons envoyés unn nouveau mot de passe par via email!"; - $ret->{messagetype} = "green"; - } - return $ret; -} - -sub registeruser(){ - my $self = shift; - my $data = shift; - my $ret->{messagetype} ='red'; - $ret->{message} = "Une erreur c'est produite, essayer plus tard!"; - $ret->{page} = "message.tt"; - my @reqfields = ("companies_company","terms","users_email","members_phone","members_surname","members_prename","members_job"); - my $reqf = 1; - foreach my $rf (@reqfields){ - if (!exists($data->{$rf})){ - $reqf = 0; - } - } - if ($reqf == 0){ - $ret->{message} = "Rempissez tous les champs s.v.p.!"; - $ret->{page} = "register.tt"; - return $ret; - } - foreach my $d (%{$data}){ - $data->{$d} = $self->{db}->securetext($data->{$d}); - } - - my $user = $self->{db}->querysorted("select id from users where username='".$data->{users_email}."';"); - if (keys(%{$user}) > 0){ - $ret->{page} = "register.tt"; - $ret->{message} = "Il y existe déjà un utilisateur avec la mème adresse e-mail!"; - return $ret; - } - - my $newcode = $self->randomstring(6); - - my $newuserid = $self->{db}->querysorted("INSERT INTO users (username,vcode) VALUES ('".$data->{users_email}."','".$newcode."') returning id;"); - #$self->{db}->exec("INSERT INTO useringroups (id_user,id_group) VALUES ('".$newuserid->{0}->{id}."',(select id from usergroups where isdefault=true));"); - my $company = $self->{db}->querysorted("select id from companies where link=unaccent_string('".$data->{companies_company}."');"); - if (keys(%{$company}) == 0 ){ - $company = $self->{db}->querysorted("INSERT INTO companies (company,link) VALUES ('".$data->{companies_company}."',unaccent_string('".$data->{companies_company}."')) returning id;"); - #$self->{db}->exec("INSERT INTO useringroups (id_user,id_group) VALUES ('".$newuserid->{0}->{id}."',(select id from usergroups where usergroup='company'));"); - } - $self->{db}->exec("INSERT INTO members (surname, prename, phone, id_user, id_company, job) VALUES('".$data->{members_surname}."', '".$data->{members_prename}."', '".$data->{members_phone}."', ".$newuserid->{0}->{id}.", ".$company->{0}->{id}.", '".$data->{members_job}."');"); - my $maildata->{vcode} = $newcode; - my $eml = sendemail->new(); - my $mret = $eml->sendemail('user_verification',$newuserid->{0}->{id},$data->{users_email},$maildata,undef); - if ($mret == 0){ - $ret->{message} = "Merci,
nous vous avons envoyé un email,avec un code de vérification!
Entrez ce code ci dessous, pour valider votre compte!
en cas de problèmes envoyer un email à info\@solana-architecture.lu"; - $ret->{messagetype} = "green"; - $ret->{page} = "validationcode.tt"; - } else { - $self->{db}->exec("UPDATE users set username='".$data->{users_email}."',vcode=null where id=".$newuserid->{0}->{id}." ;"); - $ret->{message} = "nous ne pouvons pas envoyer un email à '".$data->{users_email}."' ! Si cette email n'existe pas, régisterez-vous avec un email existant!
en cas de problèemes envoyer un email à info\@solana-architecture.lu"; - $ret->{messagetype} = "red"; - $ret->{page} = "register.tt"; - } - #$self->{db}->exec("insert into appaccess (id_user) values (".$newuserid->{0}->{id}.");"); - # $ret->{messagetype} = "green"; - - return $ret; -} - - -sub validateaccount(){ - my $self = shift; - my $data = shift; - foreach my $d (%{$data}){ - $data->{$d} = $self->{db}->securetext($data->{$d}); - } - - my $ret->{messagetype} ='red'; - my $vcodedata = $self->{db}->querysorted("select id,vcode,username from users where vcode='".$data->{vcode}."';"); - if (keys(%{$vcodedata}) == 0){ - $ret->{message} = "code inconnue!"; - $ret->{page} = "validationcode.tt"; - } - my $newpwd = $self->randomstring(12); - my $pwd = sha256_hex($newpwd); - my $maildata->{password} = $newpwd; - my $eml = sendemail->new(); - my $newuserid = $self->{db}->querysorted("UPDATE users set userpassword='".$pwd."',vcode=null,regcode=null where id=".$vcodedata->{0}->{id}." returning id,username;"); - my $mret = $eml->sendemail('user_registration',$vcodedata->{0}->{id},$vcodedata->{0}->{username},$maildata,undef); - if ($mret == 0){ - $ret->{message} = "Merci,
Nous vous avons envoyé un email avec les données nécessaires pour se connecter!"; - $ret->{messagetype} = "green"; - $ret->{page} = "message.tt"; - } else { - $ret->{message} = "NOus n'avons pas pu vous envoyé un email à '".$newuserid->{0}->{username}."'! Si l'addresse email n'existe pas, essayer avec un email existant!"; - $ret->{page} = "message.tt"; - } - return $ret; -} - -sub getsession($){ - my $self = shift; - my $sid = shift; - my $sql ="select * from public.getsession('".$self->{db}->securetext($sid)."','".$ENV{REMOTE_ADDR}."','".$ENV{HTTP_USER_AGENT}."');"; - my $res= $self->{db}->querysorted($sql); - my $ret = undef; - # open FILE,">>tmp/sql.log"; - # print FILE "GET DB Session\n"; - # print FILE Dumper($res->{0}); - # close(FILE); - if (keys(%{$res}) > 0){ - - return $res->{0}; - } - return $ret; -} - -sub deletesession(){ - my $self = shift; - my $sid = shift; - $self->{db}->exec("DELETE FROM sessions where idsession='".$self->{db}->securetext($sid)."';"); -} - -sub randomstring(){ - my $self = shift; - my $num = shift; - my @alphanumeric = ('a'..'z', 'A'..'Z', 0..9); - my $randstring = join '', map $alphanumeric[rand @alphanumeric], 0..$num; - return $randstring; -} - - -# sub deleteprofile(){ -# my $self = shift; -# my $data = shift; -# my $ret->{message} = "mot de passe ou profile inconnue!"; -# $ret->{messagetype} = "danger"; -# if ($data->{id_user} eq ''){ -# $ret->{sid} = undef; -# return $ret; -# } -# my $pwd = sha256_hex($data->{password}); -# my $user = $self->{db}->querysorted("select id from users where id= '".$data->{id_user}."' and userpassword = '".$pwd."';"); -# if (keys(%{$user}) > 0){ -# $self->admindeleteuser($data->{id_user}); -# my $ret->{'message'} = "Votre profile a été supprimé!"; -# $ret->{'messagetype'} = "info"; -# $ret->{sid} = undef; -# } -# return $ret; - -# } - -# sub admindeleteuser(){ -# my $self = shift; -# my $id_user = shift; -# my @dl = ("DELETE FROM public.useringroups WHERE id_uset=".$id_user.";", -# "DELETE FROM public.userclients WHERE id_user=".$id_user.";", -# "DELETE FROM public.appaccess WHERE id_user=".$id_user.";", -# "DELETE FROM public.modulepreferences WHERE id_user=".$id_user.";",, -# "DELETE FROM public.sessions WHERE id_user=".$id_user.";", -# "delete from users where id=".$id_user.";"); -# foreach my $s (@dl){ -# $self->{db}->exec($s); -# } -# return 1; -# } - -1; \ No newline at end of file diff --git a/website/appphp/report.cgi b/website/appphp/report.cgi deleted file mode 100644 index 07775b4d..00000000 --- a/website/appphp/report.cgi +++ /dev/null @@ -1,129 +0,0 @@ -#!/usr/local/bin/perl -use strict; -use FindBin qw($RealBin $Bin); - - -use lib ($RealBin.'/lib/perl5'); -use lib ($RealBin.'/lib'); -use CGI; -use CGI::Cookie; -use Encode; -# use CGI::Carp qw/fatalsToBrowser/; -use File::Basename; -use JSON::PP; -use MIME::Type::FileName; -use Data::Dumper; -use File::Path qw(make_path); -use dksconfig qw/$sitecfg/; -use dksdb; -use session; -use pdfreport; - -my $cgi = new CGI(); -my $scriptpath = $cgi->url(-absolute => 1); -my $p = (); -my @params = $cgi->param(); -foreach my $pe (@params){ - $p->{$pe} = $cgi->param($pe); -} -my $html->{result} = (); -$p->{sid} = $cgi->cookie($sitecfg->{cookiename}); -my $se = session->new(); -my $sess = $se->getsession($p->{sid}); - -if ($sess == undef){ - print $cgi->header(-type=>"application/json", -charset => "utf-8"); - $html->{error} = "No Authorisation"; - print JSON::PP::encode_json($html); - exit(0); -} - -if (($cgi->request_method() eq "GET") || ($cgi->request_method() eq "POST")){ - - # my @params = $cgi->param(); - # foreach my $pp (@params){ - # $p->{$pp} = $cgi->param($pp); - # } - - if (exists($p->{list})){ - #$html->{param} = $p; - print $cgi->header(-type=>"application/json", -charset => "utf-8"); - my $reppath = $sitecfg->{docroot}.'/'.$sitecfg->{datapath}.'reports/'.$p->{list}; - $html->{path} = $reppath; - if (-d $reppath){ - #print "OK!"; - my @allreps = (); - opendir(REP,$reppath); - while (my $f = readdir(REP)){ - if ($f =~ /\.conf$/){ - my $rep->{name}= $f; - $rep->{name} =~ s/\.conf$//; - $rep->{label} = $rep->{name}; - - open(RTPL,$reppath.'/'.$f); - while (my $l = ){ - chomp($l); - if ($l =~ /^REPORT_NAME/){ - my ($k1,$k2,$v) = $l =~ m/^(\w+)_(\w+)=\"(.+)\"$/; - $rep->{label} = decode("utf-8",$v); - } - } - close(RTPL); - push(@allreps,$rep); - } - } - closedir(REP); - $html->{result}->{reports} = \@allreps; - } - } - elsif (exists($p->{generate})){ - print $cgi->header(-type=>"application/json", -charset => "utf-8"); - #print Dumper($p->{data}); - $html->{params} = $p; - my $data = JSON::PP::decode_json($p->{data}); - my $reportpath =$sitecfg->{docroot}.$sitecfg->{datapath}.'reports/'.dirname($p->{generate}); - my $tmppath = $sitecfg->{docroot}.$sitecfg->{datapath}.'tmp/'; - my $output = $sitecfg->{docroot}.$sitecfg->{datapath}.'output/'; - $html->{params} = $p; - $html->{options}->{reportpath} = $reportpath; - $html->{options}->{tmppath} = $tmppath; - $html->{options}->{output} = $output; - # #print $reportpath."\n".$tmppath."\n".$output."\n".$output.dirname($p->{generate})."\n"; - if (! -d $tmppath) { make_path($tmppath);} - if (! -d $output) { make_path($output);} - if (! -d $output.dirname($p->{generate})){make_path($output.dirname($p->{generate}));} - # #print "OUTPUT:".$output."\n"; - my $rep = pdfreport->new({tmplpath => $reportpath, tmp => $tmppath}); - my ($result,$file) = $rep->createpdf(basename($p->{generate}),$output.dirname($p->{generate}).'/'.$p->{file},$data); - #my $file = $p->{file}; - $html->{result}->{file} = dirname($p->{generate}).'/'.basename($file); - } - elsif (exists($p->{open})){ - my $file = $sitecfg->{docroot}.'/'.$sitecfg->{datapath}.'output/'.$p->{open}; - if (-e $file){ - my $mimetype = MIME::Type::FileName::guess ($file); - my @stat = stat($file); - print $cgi->header( - -type => $mimetype, - -target => basename($p->{open}), - -attachment => basename($p->{open}) - ); - open(DLD,$file); - binmode(DLD); - local $/ = \1024; - while (){ - print $_; - } - close(DLD); - exit(0); - } - else { - print $cgi->header(-type=>"application/json", -charset => "utf-8"); - $html->{result}->{file} = $file; - } - } -} -print JSON::PP::encode_json($html); -# for my $e ( keys %ENV ) { -# print "$e: $ENV{$e}
"; -# } \ No newline at end of file diff --git a/website/appphp/static/css/fonts/pot.svg b/website/appphp/static/css/fonts/pot.svg deleted file mode 100644 index 0d60ac6f..00000000 --- a/website/appphp/static/css/fonts/pot.svg +++ /dev/null @@ -1,94 +0,0 @@ - - - -Generated by IcoMoon - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/website/appphp/static/css/fonts/pot.ttf b/website/appphp/static/css/fonts/pot.ttf deleted file mode 100644 index 34377fc22ef0c2db49b7f1d8943cb128c6d812d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18180 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 diff --git a/website/appphp/static/css/icons.css b/website/appphp/static/css/icons.css deleted file mode 100644 index 31870d96..00000000 --- a/website/appphp/static/css/icons.css +++ /dev/null @@ -1,305 +0,0 @@ -@font-face { - font-family: 'pot'; - src: - url('fonts/pot.ttf?ze06co') format('truetype'), - url('fonts/pot.woff?ze06co') format('woff'), - url('fonts/pot.svg?ze06co#pot') 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: 'pot' !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-dataset:before { - content: "\e930"; -} -.icon-check:before { - content: "\e931"; -} -.icon-pause:before { - content: "\e900"; -} -.icon-duplicate:before { - content: "\e949"; -} -.icon-replace:before { - content: "\e94c"; -} -.icon-week:before { - content: "\e94d"; -} -.icon-baggage:before { - content: "\e94e"; -} -.icon-trash:before { - content: "\e94f"; -} -.icon-erase:before { - content: "\e950"; -} -.icon-paste:before { - content: "\e94a"; -} -.icon-copy:before { - content: "\e94b"; -} -.icon-sendemail:before { - content: "\e946"; -} -.icon-exit:before { - content: "\e947"; -} -.icon-key:before { - content: "\e948"; -} -.icon-back:before { - content: "\e944"; -} -.icon-next:before { - content: "\e945"; -} -.icon-staff:before { - content: "\e943"; -} -.icon-shop:before { - content: "\e901"; -} -.icon-template:before { - content: "\e902"; -} -.icon-remove:before { - content: "\e903"; -} -.icon-access:before { - content: "\e904"; -} -.icon-address:before { - content: "\e905"; -} -.icon-apps:before { - content: "\e906"; -} -.icon-archive:before { - content: "\e907"; -} -.icon-calendar:before { - content: "\e908"; -} -.icon-code:before { - content: "\e909"; -} -.icon-coin:before { - content: "\e90a"; -} -.icon-company:before { - content: "\e90b"; -} -.icon-cube:before { - content: "\e90c"; -} -.icon-cubelight:before { - content: "\e90d"; -} -.icon-dashboard:before { - content: "\e90e"; -} -.icon-datarefresh:before { - content: "\e90f"; -} -.icon-documentsave:before { - content: "\e910"; -} -.icon-documents:before { - content: "\e911"; -} -.icon-download:before { - content: "\e912"; -} -.icon-duplicate1:before { - content: "\e913"; -} -.icon-edit:before { - content: "\e914"; -} -.icon-excel:before { - content: "\e915"; -} -.icon-expand:before { - content: "\e916"; -} -.icon-file:before { - content: "\e917"; -} -.icon-Floppy:before { - content: "\e918"; -} -.icon-folder:before { - content: "\e919"; -} -.icon-folder_add:before { - content: "\e91a"; -} -.icon-folder_delete:before { - content: "\e91b"; -} -.icon-folder_find:before { - content: "\e91c"; -} -.icon-globe:before { - content: "\e91d"; -} -.icon-group:before { - content: "\e91e"; -} -.icon-home:before { - content: "\e91f"; -} -.icon-inbox:before { - content: "\e920"; -} -.icon-library:before { - content: "\e921"; -} -.icon-license:before { - content: "\e922"; -} -.icon-list:before { - content: "\e923"; -} -.icon-log:before { - content: "\e924"; -} -.icon-logout:before { - content: "\e925"; -} -.icon-menu:before { - content: "\e926"; -} -.icon-newspaper:before { - content: "\e927"; -} -.icon-numberlist:before { - content: "\e928"; -} -.icon-package:before { - content: "\e929"; -} -.icon-pay:before { - content: "\e92a"; -} -.icon-pdf:before { - content: "\e92b"; -} -.icon-pdfexport:before { - content: "\e92c"; -} -.icon-pictures:before { - content: "\e92d"; -} -.icon-plus:before { - content: "\e92e"; -} -.icon-poticon .path1:before { - content: "\e92f"; - color: rgb(0, 50, 104); -} -.icon-poticon .path2:before { - content: "\e932"; - margin-left: -1em; - color: rgb(0, 50, 104); -} -.icon-poticon .path3:before { - content: "\e933"; - margin-left: -1em; - color: rgb(0, 50, 104); -} -.icon-poticon .path4:before { - content: "\e934"; - margin-left: -1em; - color: rgb(0, 50, 104); -} -.icon-poticon .path5:before { - content: "\e935"; - margin-left: -1em; - color: rgb(0, 50, 104); -} -.icon-poticon .path6:before { - content: "\e936"; - margin-left: -1em; - color: rgb(255, 255, 255); -} -.icon-poticon .path7:before { - content: "\e937"; - margin-left: -1em; - color: rgb(255, 255, 255); -} -.icon-poticon .path8:before { - content: "\e938"; - margin-left: -1em; - color: rgb(255, 255, 255); -} -.icon-poticon .path9:before { - content: "\e939"; - margin-left: -1em; - color: rgb(255, 255, 255); -} -.icon-poticon .path10:before { - content: "\e93a"; - margin-left: -1em; - color: rgb(255, 255, 255); -} -.icon-poticon .path11:before { - content: "\e93b"; - margin-left: -1em; - color: rgb(255, 255, 255); -} -.icon-poticon .path12:before { - content: "\e951"; - margin-left: -1em; - color: rgb(255, 255, 255); -} -.icon-poticon .path13:before { - content: "\e952"; - margin-left: -1em; - color: rgb(0, 91, 206); -} -.icon-poticon .path14:before { - content: "\e953"; - margin-left: -1em; - color: rgb(0, 50, 104); -} -.icon-projects:before { - content: "\e93c"; -} -.icon-rename:before { - content: "\e93d"; -} -.icon-Save:before { - content: "\e93e"; -} -.icon-squares:before { - content: "\e93f"; -} -.icon-table:before { - content: "\e940"; -} -.icon-upload:before { - content: "\e941"; -} -.icon-user:before { - content: "\e942"; -} diff --git a/website/appphp/static/css/theme.css b/website/appphp/static/css/theme.css deleted file mode 100644 index 287ccbe9..00000000 --- a/website/appphp/static/css/theme.css +++ /dev/null @@ -1,1005 +0,0 @@ -/* 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;} -} */ - - - -.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; -} - diff --git a/website/appphp/static/img/POT-logo.png b/website/appphp/static/img/POT-logo.png deleted file mode 100644 index e2c802852b309809a3be2a7b0203a916d8f50b8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20930 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 diff --git a/website/appphp/static/img/bg1.jpg b/website/appphp/static/img/bg1.jpg deleted file mode 100644 index 80c5326053ade12314d27724114da709830fe3d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135161 zcmbrl2V4_P`!2i*y(*9(ARy9ALQ#4X1(g;EC7}k8CMAI&T|q!VPz_-j$n)#~I)FMF(=xs{C>cmefd?(u}yaE zGo;WnV4mGNhn*pv*|i^lc6v;-KWKB_ge zyXjH>enFsp1hfSs9I+=s`zQeL3I_g%?fV~gl>d3Ko&a$2Y*=grAuuRP4&jHC(=ag5 zm$URg7vdikrDpHr7wi*pM(*TUQkYL@ECBq|=H06R(cNb&2R>w74Fg?WHBEK!@&9Z4 z-=6$euK&HU`)>cq@x|fqcLouE^6#{NU;FR0vy}j#zXd*gr zmT4B;U5a#${Fls zgwR0nb%&lIL=n!0$`L~US8w?L^0NP^!>;*HzXlC4+8+Ssr4H;Jg#jFEPXJCa0f57! z6g&g@*L$pMDS8;Q7Bl|ECY=4e$^eNeGnNO+JZrl=F*@h}pG4OzeJe z0sO!o00u|`vVa1B0Mr0YKo2kiOaLX;4+W_WC3{q z6(|E}0262gT7g@@U7#O$2s{SHfJtBuSOAuQkH9*x4eWqK#sd+8h(RPF2Ovri6^JH8 zA94(02C;!)A#M5)FxmT!Lgkav)Sl1%wG{fpkOqAw!U7kQvBp$a}~pJVyXW1VfmB= zO>!-9ZF6&Ti*q01*5kJ1cH<^;U*OKPZZB( zo+6%lo_joOo+X~|yaK!jcr|&=dGWlVyeYi-ytTZ&ylmbT-W|TZd`f(Ve0F?i_+t5P z@X`2g^NsQ?@$K-7@E_tg=6B>L@+b2b@;CCc_+RjU5fBiN7cdZT5FiL72^0!63p^5d zE$~B7R1hV2QqV&%TJX9cL$FV9M(~S}kdU&Fi4a~WO6a-}Q|P|XywG=HF=2IKE8#Q3 z7ln(3JB8W8pZ4(WQQBj==k%VqJ^6du_KfaX-OIOEdGE=+K6?}Q7VqueJH2;HL`+0O z#7=}Hk||OvG9>a<)xq)J*h@XsT$H=zY;QVjN-$VkgD?#4d@^#8_fWFmBi(m=%l& z%YZe&p2F7QqHt}vGyFWf7~TV45a$qA7Pk@)5x*hcDn2FtbDzvU(|!K?uI_8x$KLl% zV!womguet?qDf*>;-{pXq?u%}WVYlj$(K@`QYa}0sdG}LQY@*}{jmK;`~CKl_qXn! zm4-^Aq_NT$q^qQ#NN>r=%2>#R$rQ=lmsyn+moa?1mnyFfhTAkW!b#ZkY^%V76 z>YolP9>yQeK0J8%&k>y?AxCIO<}^e#&>ATkw>363QJQ|5#hMdZLR#ip7qz;yHndf= z{k2QApX-R}V05nN4CwsU)zgj8ZPb0Qr>N(xSE4tq57W2T&(wcpz-4g4;G)4@gCB;v zhEayChM$epjDn47jouwSbkzSS?dTh0d1D{r3gd-ia>u-nl^sn&}&D4PhI+ZZSYjmgEluvM}R zwY_Br*jd@-+P$(9 zoenwOiSN4KNxuTWk7rEIP|m#fH}=o*UkNY{ z$O(8CXdIXu_&(@(P=3%V;Us}d*dSUG%ZT5C?SdJ>e}%Y&G?92o-lXnO(a_+~2WMr^ zo@O%SIW{k(+TNMuWDT_y84HFhCG~cBqKlL zSEgU)@HLHVh1dSN9&r8X4c!~1S=?EnSyS1^vukoha^iB{l?H_zN;mztC|mdTW5l>ICxls~Vq zsOYRzuFS9Eu8OHzra99F>H2hLwN!OR^>0QfW1$9H^MI+xWY$X8-l&7tMc2Kr_oyFh zIMvYAsMc7~B;J(K3^YeKe`xV;nQFCe9ca^UYiw6)FX<5LAa_DKV>{Px1>IWca_f55 zjqV<}ZFIZij`|(O-Gg_Fd*D4cdii@(d;hu@cWZ|~*TCF;*ZUI>93DJn zS+gEJG=F%1&~)(LBjZPRhYW|hhxLbVJ=T5P`9$YQ$B52I$5Y*>ouhiAU1J7gx1Sw- z*2_N5?jJuj{&2!-;_;;I#pld8xb3SZDxLv{KELE{dHi=ertZ4w7v6<{9W>U%@6$_ zgFjtRUS1v^US1(S ze(+C7Oi)-5{1+2}iR=M)SqV5?LRLXWT1Ek-q=eGZ)G;&jfc*b0;IBSFgqJ6i3*dmr z15gnNhX~}a2M|!eLbyQb0B*ZFWp@Mb#L30Y!^_7nuor+rI5?o39ALFU9Ro=K&jFkw zT%rdxOu5Aze0b!;VVcR=6}$>3TKeJGXX}buz7Z*W{Nnp0B&C#;4@beFMXj zr_9VPEUnNuM<-_&P+<9;@ec?LA`l~^qGQgTkBz&Ons)h0`c-mHE+sF&pswMPVO50n#p4LrN;fk4mgHdcg_>!1d=sHp>wPq>)8W->4AM0Q0>Kc9jY zb{*~;@r++wQTw&h#%`1TZqff)gHrylTJ*05{i{8H%>sfP5b%X@hycfd-w&W=WW35r z2r{TLDTW_Wnal-qFyTVL7LY-x0SFn7C@*JlU>N*B^xx?ptxn&6KWkEPKM&H>W_mhzZnOr7M^FnLJRg(_rM+))O>DT51QC>$R?Roa!~i zo>QL9Zqae2y2Mj!MjRrB+|u;Izb@9avH2eH%x7dcJpDyYA99jKmw$oGw}k{fi{<<5 zgf}sovMG=Yq&~@6kDD-%pTICmgtv;7##X2+igyq7_zy){eRS>qfW7*x=hf+8P3zvo zt;o*?gZOfGPNZA66rwoiMPhW$H^EoeZ~`AJ5O)O(gxm1iUpB}T!P|V|C zm+qTQY8QSBi5)RIyW*@dqRw?Niv+u4!tA570JBTx&u{?2L|gC@$%te{j(LSwRi*)qs zln{|ox=~+W9x(SywnYh{WQK*TlidroO{#$8R}FfEUy;rO>{WU>j7$yUbZRJK=@CXu zPsxdx8~1#8jz7^p$%=8BV;!NNe#j-5N)9=v^{969@S|Y+Y7~zRvj%wp`pZ{c?PhHM zM=uKXwn)t6j?hNj1LLY@nYvBA2O?>Abk4gF8@Mi}9Fo#RESHfrPCr`_q23{|1`fp4 zIj?;$I@X~%lPB}+=Y@6Wjb6t?6%tL)o)>%z{tEwbcKvji`dA?Q9*z{7b}a9W)rHZC zuS=n>KSfC#JqY}*w$cgCp_-PP!*hf=)WiGpCHrPGAl&l=r-Tm=h4lGFWgbDtTYfn1 z?18OOR`;FSe_`CR&YM4UR&}4j&ejvmCzWMVg!I!__@Cq-c9d7>A9JpmMbEdEscg%l zU&;ZOAUh_Dy@joIFAlTsDxA#tRyP>;Q|e{7#2SmBX8(p}-_@tx_1W2EF)P`%)6M;Q>9#` z%H?qKnmN8Q5boH0h-_lZcJh7jm61O5(fLHOsh+=ohB5JxJ@PAM&?ksqnVhDirkf>T zX{QbH6pc$cm+Yg%r=1k8!y$Eo*ro&ZZ4+_4`F_*N?bDXf<;6B9b03Gcok_hc$P~RL zr)>iD!A_^-i(qv9;B8>*vzvk9U_c03S}@CGtNuy}WGdsP_YhzM@o@YWzg0uYnW5ww zN~$M)cFpnJT5k5g{ph3XnvvL4bELMF4Ck$c*!tK|t5Ka&x2vNa7VT5`)>T){<+@MG zH`|v>xx^7k9ORgJR9JhL^q98G+&Ij)-j8nJL~!K=7;A8K?(+=42JtUa2U*Gn%=cjk z%b0^KBk8Y9jS(Yhs;Z`HIJ<<)_Q*w)F1vZ};%Z*}Kyd_qexy zyq=KHyf^GB9K7NMpON@Xdn4hO?8&$v`vl)Eot+PDz4T4q174>y_IrL@@k@hWXg7Xt z#v?FI@r(8&+sN$GSKDOjZcn=$xzL(!Bb7Di0)@u@3i9vQUrsG-*Lo6A+&uZaoy72Y zACYBCS<8zI)R8;Mf`*LFtywisUB7SDMpjigdPw`IV2_0Z-pH8ApF5SCK3ecc@qOK~ z;=?l6gE#D0W4ujoIm-RK#tx8GD@)m@aw~ATUTGIaR$09b5mi}=`p4Rt>iEY`m>)R? z5S8TZ>j2YNKRdAlZhY+LZ-Viq+GE?_4b*jbdp5ipZ^vCCNp8cxZ>%Rjn($s>!gpk7 zjU~uDWm4qr^TSvD*vGL_wl!%KGf6dyx`FM(>Z@w7u)Rdl3ng_iZFe8?IB)He1w2b@qvhboscG>t#&5__6r<*4M=Hd)>qzbB?2> z6CGVk>(n?-zY+N7y%n2-?7J@a9|?9holiSv>bTAMd*Z~t+2UK&u^FpoY8GO(dR6Cw zzc%wLvl)h_hR*ilc8kxhc4SG^aRu?&-tYF{2XqW@?`I2mg5Ho%j@4bV2+cdwa1cj@ zF2^%?AKn#sz?RNF{Ubs{%w<&eAc-yViSV0-j8}afqVUS_M%>Rxvs6`;ukZ!DHdmwL zo1O#>#$YGcPZyg`bWIUxwyRgysli78O_r&w%6n&Z|^e#tPgWQ56olscL8$QCB zK~zBx6P%anvPFb z&p?2w2&ospWh==lA4Yi*RSie^xw9bFW-xJ>gBkFzy)vf+0h#zGMY|7tt>=JBGC@ZU zsXYwxRu&aW0mRIdU?Sm!cKaZRLG}1GU8(>d86QfZjkoz(Vk0q%5Qnx&^PHN>n7A5t z9F`Qo%mdaei}MCF-cHi(krS1LSNIY1@)iy7-i2HTtCy+7P>wdt$Pp@mXmVUf68sa1 z11Qu+%&9ZA4N5BMH;c)Yn~rvB0e5@1)XG(l=2^XkGOhGwK8m}S#f=Qf=jgmG3Kn-S zwbQw#Hm~I><|#Jc{bEE^Pw8%BTyWb*w;M(Y#H+p-@0X7q)b6fcm=w>x%1}c}Fi|Ys zr?GT_=fXtaD(xsn`4A_^;~`^WA&%Pami~~Cgq0XYBXU@3KQ+G=*Xd+Wgo~>_7Gb|DGb=En$3&{;^>svhw!R}P9Z&f*`ws= z8_8Z}^J?E|YU=a)ud>4JmvdV#sFYRdPCE?i`?z}t^g_O0+|c;UaLm55*!#VuNIA{T z))Y>7Av>)~S}Zu*;K^q@XLFN38DMbM6+>7cS&0keCH=5uX{((EPoeuGYS11RoSq2l zGf2nsoJDNZtUK%1w7plTF*3vb$P<$<+eyr3k807oxetGy&mZtAXklG2e-YD&^Xk-` zIWBX}=Jom33Kgrkvb1|5+OLJaUXh7yROla%HKf^?9~tN^{N7XzyE!K_O8nt|BFn7C zqU^IvkzK$Yt=fp+iwUDI%dU)HjY>aqG1a9#M53uU5#|v~wek21;B8_&GdFZ$!Yf9O zU!@H2d*+=z+o8-x)d$8n^Vx}z+inm&a7%vOE+qAN)D#y2A72^5>?|O82#jjO;kq)z z#bIU#9Y*1ir2X7+I7^GNkL#iBiN{l?7rh<|9Uq5Bx@E%?sK3ZMEn z#|G|+C5j&ZWkdQ?c`xLbp_ZR)0$1!B@!7juJMGcM2H;aSCB%?RaRL-Fzpmidx;b+K z`W$_DACj}2(cv*`rabFW5s_^h=g``;Rz<>+WuBe%KZqWi8BregsECS)BmY_IQCU%Q zuqb`L_1??oLvZ^3_g=amj&E$f!asDcEdFMjd%q=d-P`4^nJg?ppEW^#^gy?YHgDP`rqS^c`6UsA|tLZ6VL&};~H6UxR`L<@L;5#zm`8? zwHmfurk>JW+?quvtisr(dE%R><(OB*6L+0{Ut(8jl(u)9N1kJd=&^farn%qm|LAp! zcqQbJY~Gi&owg^5?d(a;vfDx5WjTcr1GH_5HP0D2QXzHmBH+33+T z4%M%tTS-)}ZP(W)G0EtTHZnnaY`EJw>jtr{v$&JyACC(|J)8~IU$E!YKh&W-TS5*+ zK%op{WU5mNH?pvtU-S3)>BEZ`uGPk_ot`|-o0#|I2ARg0O&xi-X?dxqn$b#6OK7pd1BJ3v{L=S0=7PoSqp!(`Q$t^|A^tl0zV!&ff9;B|!x13%Ob2XqMsN=^6!Kp!$)i(Um2@I<-EG=HQA0}0`z8Q5|YGtL&wk9 zI&IfB!&9hB=tnos+)`pvY+p}RgDGMc`IYe%PFk6v$B!r&Kj5;vOO z@wl{!xjpI{<-RAAsQT_S=GT*b-Nq_8)wy=PmxtL5mD1zupY4O95v|Yn*KITUrLN4X z`f~2Ve?U#trE@|-p^g9drSCqqw9c%XGy0N^>G+ZBQtaTCtq&EykvkSPjxC~(_SDqv zR{;^0QZkX8@L_7)dg+T<%DY+^Zu^2$LzN6+$Dr0hfU^A?`8v+2LUNn2%JA{1cJ$3X z+i`kk71_@vUDa)(WPNM4ktD$&RppVFj#Rfb$-m;b;o!a`bkZ>NHNhv%E3-M&4C~H z^#>;_7wsKgC-0a#F1YlSaj0vZx%$HQo~c8k11qlf*oUutJ!RS4vz{Gca*R~%ZktdC zUP8>|%O2!M+4Hr{jl=u75a^!P0)KI67CvV9wkV}RT!0c2aIGT}BtMF)y7x=gZDrZX zA1xbq?z8PkisZXVcIe;7&-ZiR4Q3sa%& zAHN*D#XY`&9A3JJ{+gh$@YwaVg?5nM;TpzTz!aIKq#QrGe&xQNS8$5?i6a)o-{i4_ z$e^U_NiMnH-TO8O-;cS<{5;oG(LhQKPclZDA3itn(rWfW1p)0e(td}yszT{>xYgmw zF`G+Lcc65#S9Kyu`W%_Q8T?B^l(mka1_&|4!6m4At!@sPhI}sUj?HWb>1RQ2HsqR? zOwY&nGd}Y@DwF~nt{abCZH2Dg@=IC&U2NVba{9rgWVihMgL}~P0?ByA)s)pMBs~&- z&eF8j!5`moGMFPIfOX(xoNISjla;uFV#tJ_ez2E+;jUijkkkshN6(+6bV16B(uw1j8k@n)xVedejBM_> z+`i49Sq^H-PXTaRf87p}KZd35P_#oxBmM>CKcwQ|x=79I#!OoDXBV=xW3Kyfz_9X0Y81_r+&D*SI zXym-^?Qn3(){&_QU0IWXIe49lH8q3nMv?#C(Fle;^x5Bmr#2Oc)~51RkNuqiGs0bL z!lk4J<3&{FYV#c=YDSuwyTir?11bXH979g6BaTw?<~fD%;#@n|zM~Vr5ql@?xvZ?r zG|K6;%H#}8mG%Hp9lBghJwenY0Gou=300!}_wrM37c13KZPrdwXcrTA0;&xiPNuOZ z_Z13nsb%)ECl67CxAK%8!Efk1->QFc#V^!4%V~t zhuOtFA@C_zymZr@iBY|q`SL@ql>NjLv8O2XslbnzQCM}=XI#aJ14JLjVy<$btB*`< z^^FZfPbCPW-q{*D z77J+?=^@h?slSK|Uc~cu#Q2IxgV!%oMZC%mNc_^5GB_hJ%D!j59ex_VA$H2WN7t?( zODGV#FGGi+MtW9uiQTt8U;13X9Ty&Nms_ma_DA97Ol*nYZR2p;VaPdCkBYYIyAh)gV|BZ- zKO+ChIR0pgigf@X#=*P$OTqQ1eq&lyXhiirg}ZK5L&CJz3h%}IYf7q)! z{R^_P_US9W^xQhe|3;8p6UQYlddwS*!|dMR^}sZ)t2~c6-l=>r z3QEu9Url?d6U`JUCU}ahGB}r;enf@Tb_{o0_#64u&Dqh70z0HDB9g9O%d2W5W57`; z#M(A(25*F%Lq1mz3|TIC+#p0DZPNo(+O!^T*C^g{=8^C0l>S;xc|#ZCni=ZN4eiUR zI*#^zpMSrS|NV?ft>A*xNPDKo;_af3KB32x5}o`>@-i@7W+mN9%eqvx?Ck#8H~BCb zfH~m!{*tqqXJ-nliKOQ^h$B)vD0 zo_tApc@yb+P9^owCJpJ_xp=L;p369CT+mPF0_h;kRUJF4Vg6*ht~iz^fSy0uZO_nV z=fx%;QZ8=IORKPKkh3G+X{BQGu0-U&B4Vl=N!rC`ptIN>2mQ(2asG++;ch#U@@#i! zaclMcZp#L}v+#4^ag0DoOojh4bFs^z;&AcJn?I-9DI+eMVq?y>)E6>EBhTGpQTh#i z9bt!Tk^Gacck=k3bvERI`i*`@B@aE}f4**xpgZwAAZD0gUSAolDXYalY-m)v%g2nJ4TH&+$umIuG5kDD2AhiF#~c=J`_J7F}bN<$Rpd z=)`pI`D$+g;qcR@j1#BV!%KrMuTrVQh~GEBF!a^YF;LWj;pIO&9a;eU@L%#SYYZxe z`Ip$s8sqp|_0g)AQ=(whOscszs`wEqM^ft;D%Yx%GFsG|XIKtnMaZRY)yesi5dy-M zIb;_E9&4thoyxugv8v9sQLa+6LsUta{Y|BvFrK4=C{h}|NRj0iJnwRg4o^);X$aOWy&+Y&g|myOoW|y^XV`7wH_)LFmhv+yKHuzmES=dI zX?^Lv$)hAjNZmo?AFm!MFgzOXbb2jIi17((_E^%{|F$zTU!QfpWAH}QcgFL8(_J5( zk14&f4yHeOKY?s|h`IPsD&>Rd0iEO*!IBuJn*s(FIy#@Q&*N6_H8*ML>GE0*@~@)r zY8(8E?&%9ukGIJ~AHC}1Lh5vGHyd!epk1u8l{0$1Y?1M8E)N154aZZXepq(f%dspK z>gr_NPkBg>w~6E}?KoB%-fO)@s_fXj8ro5N%Cn>^^Cvd7fdIE!a6IkRq3&rBgXOc^ z{9XIq)Q*qkl+|c2Le2$;a=wqqdKz)fm^Ao&mp9SYOYdHFq46WF?+8g>+0Lz5jB9-PP@ZV!R;d zEK%HcbQUryj4AQkO(Bjv9r0D`jXNW4se#SQy**~bt- zE5Edt@;fiy!fx|DNEYd7hYLms=|6FuxaLOx^mm&Z_)`k&r>zoTLMq_}7qe&*;Gk6%A+Gea=DHQJojgL5iyiJI-n*7mfZ=1-0@ z)Ds?l_H9=8{x2UeIvlfZ0239eO0?%QzLAS>mTz9~{mb1+QLgSgl^u zt~Y9}kj9~%dfEqQ*yc|-6%4`{wLFic6I{;NYsQ&e%bD!w?8@G zc+P69NFAc$bqeF#7)d6}81G$yr(D8z{j5&#GBbkt_Plutj;te}mviGT4Y{hxzo1BBgZ6OB^#F}WhgX-swg@Tn_T0?q`m2FPR%@;}&-K`PtHWLd`|~=NvWd#=-@F5< z_jBHsd~uW+s$FiqqbBcnP)FozHT#nNu;2z}Xp7F0poc#v9Wq#?khz@c!irSgpSXcs zXQ;g?v;kB^&0@23r`qOEPBV`f=?{tT&;^gzFsJf|eNa9JI`DkB^bu^j2ThC)y61jl z<{wWlL}UE74FO9%yvK7H$LZG>Z+zt==~zV+axUMiN^r4r&u}?mNd86pKD5wzVzYLI zx!|H^siUOyZNG}XcD&pA8+%>q1dsmyw8X9RVvg1$ng@yx1&v%ZikbH>tz;;Yh`*D+ zD=h}(Pr(A8nvCkqpxM_~jw-$&J^wArMNWQ>P5)i%3PfRryhJ89(}v{@vn*U5#N!?$ zPO#y_riQpqDUb^WF5p`9vEW-Ni6tjKfe{42A4x|%)_VZodCz1HdM4~IK-B@$J(XSas}(wUNry%#3# z!Z`~B=Uwo_VG%8(UPb+g&ylP|*qp~)r2dhkoF#-hPKNB?4H{aoi*@# zGgoQ*?X9vxKrisxxE9l+Pxm`{RE`OCdZmi%wC7Tz+yNEod%GEv4nzoj^TVHEPs(Nc znKiTm7&pa?ajBI~d_J5x+0%Z9@PW%XB`FUKC1+K^%Rm7~+8@*m+s3Ze6$j0kB{5pB z{e2Q(G(T%?T%!w^z{pt6x;eA`LD1@9U9gCk?XLX2o*Gqk&uJ=VNz0)JA02f$7#=)| z{<@MbJ6WVuV_ZjWko6mS@cPH7w!5?PEw!~H7Vt?m>I&V<5|B|bJRenBvs9IWb_s|- zvf!L$!{5pz=fdZ+Kb_Du!%&J*^N3j_6|7N6-5r81Soijq9Tz~Xa~E0rD-ZW{=8`x- zwWm!#J%^bk>}piX%Z`g+Y$tB!QPn<I;>Y98dRCmmJik5X%Q<9g;!U>(GF zir?(aORDND>TH5nlRz#bkMnXMa{6c*7%JRNKD-tDuRQ!Mb=4f`T_zBPoP`70OVy7>}Nk-sn+x3YBmTfM)LIJh=o zW`%k`|Dz7&Oa38hL&>yJ-iRum;C9WF>aYKX19n+^2Nynal-~mf>0$n9FF(gfTh2@J zg;2wRmOf_6j$`c=DAmMqbHuXc5B$72F*?%;^bcm4jvw+uEOK$2iw*Ljj+=u-ijupd zY@R;4{pwhaC|$sX(*l0vdhI~Bjl~)^{lg~RR^b=1+bkj}b0Xz9k?lHSqrmVE89tJ7 zBzVOxeO}!9qon1HLxd(KXKejV^Zrn^m*^GwD*_b{oddtbzBw-Z*oXN@H~VSi>G$h5 z+;gV35nrxbbRMJ}-&HXuYE~pExJKj0jQ&~Vda4>JzyxD#ys2SeLUaLDu z*uluDkmz&H8rGdT(9T(1@T6}I|4z`HbGS9x#906hbGp_}s#@lXXfGyCA?D1U!#lwu zG9Ae3T=7`%$%gjgpjK!ng5@@6-C6L6|9KVM4@P1zy#FpWhV5Gj-)58QB&uK#?%9Ao zun3klv?dd~Dw`Kbk|;Mz0E>N!)Gz_p4CqdlV0}x=UFOVZTgW#2St_7scMdm4KpR0+ zb(-ms04ESr4J6v!nh98Y5ROjTEFftC58SNwO5EHuc>|N)g&SWqWLW8z#mH(MI4F(31(q&;vKzNM;N-fT0!C(L#_ep>@@(ics|pV~*{3dzpu2(d zB^!YwGN8DCs|l}GIxbeJ>>?e7a{Y9{ALigW6^H<5>XZI^1o|XK`9DF-M^mO^0JxYQ zY$~pNGcwu9N7E%2juV`evt6cD4|Vg}b1B)Fnb~t-pqDTsP^Cj~J_GH6i5D9t-+Xhe zZda<=iv3GC9U@yi2(h z_Uw#?hMnUO6FSi+#xC4TS_aqL)T07-`*Mtk{UIGqx?OAC-A9aE$1HItxg znKwFjBm^~46ILOOqScPub(MzAEt56mB@G!{h3&e>GBzzc&R4}E(yv#${;vJWT65++ zJpm2^rfiV2eH%m$pl|xsS-NO}T0B5s@&<>_d2?gbTeap+9!1~UN9OiqnuyZ^WgP?$ z>Xj$vcq#tvGr83r!B@;~&adSF91QtpB)8_)P*sV+q`dFZG^m$KkqUE)4tCL^mEd^luy->#0gII&bdvfstira=ckdn~1 zQ47@H-s=;8{Aqy`{Hya6H*Hkp;Mm#;sS+hOC+3N%KnI-vaew@rtpK{;w;3JN@0>!8 zK}fo)8IkNd%Q~-dG2Q*uXWPJ;Dh`#ke^6MsH;qAJZj(K*T_AGSm>bq);0oxD3t+2K zI?!HZIBpSC+cNDRa$&xCNdX9!71>708B$1NS(80*%_6>;j^)_JLJ{8rxH2-_WcRob zT=ir@*1#@i+H*$v(pbBL{#N8-7&s5yVvh2_`X)(|Z5+EmhzcWE7_yB$rz;&S)&u;m zf~zAn(2saqtjGnh$|O0KGB|1JTeuf2bq51tPTJlKV~%p&yO;|%fE6;Kf>>XM{I&M4 z(B4^0M<93yeozKDYglz=?e#4tw~#eJQ9VXrf z#8_4X2RJOD-Qb}DF1Y&SsPH%NKm@<2aV~Ujglne-2~f~r`0x^Ryi`eR(D!$PS)8Hy zPYJvr0PheW_6Yg#NC z9n9dfk!dgo`#unoCNKw#a*}Aye~I+!TvHv%5PN8@ljjG$T)2zi%Qz>RGFQcuv2m% zp!UabUZvW_RcmVPKk|rnO)?aa35H&{chXJloTUGaw*#@xnMdjt+U2jOHd~< zKVEXfr&OZq+*@y_vAemw%P5+AF!QH+3$3`S#$N`(|cki&I)=KvVh$ zZ*X?m(gK@WH(+=^b6mt`SFDcZAxv%fO^NoUlV|;psu}b7dxLHdRAsG2X5N(b4sSI} z@#{%AWHx!z4t_r2aJj!qseV(?oV^va>#hCmOD-1uQ?d|O^;@ytU*3DUd`}!|ce)kTu{SKa{~< zwkKWMy~b*nf%M?Vkf7X-Kz7yXS1%^1tbsnzh|pEepGGJqE+c97MxZwhchMaO-EN*G z7*VfPiO-yx(rRqjU6{=OZO@Gx=!(v{x~OdCLHwo{=+cpqpZyk?j!GinVg-10{t z0-yY?ZVL%B)nm}z6>T^SQpat+P&j~PA8Wuee`?i7cO0Cm$%b1Q=ol-(9$r~DJ3>Zw z2xTHu*&y~Tfes65Xlza4VoEgk(a8W}urW4}8A1@fBrKJOu8@o@MsjE^TaN~F0M)S?G#QF6WKXadE#zrE{20@&*-t;`-X0H ziU_LBJe-a{j)(442p^dEkf(2(=Y0^IMoe~YKuJe2^N()TWgO6{JkgEu(+RS05kF3B zZ<%z>pgf2+9CS$qKh~Tp_aW*}Po6PbbICVsZ`pC8VV-B4l2 z>WLz?*4ul{g0jX5WoZXQ?;cRQ`O$DN$?BcT;nz>=bc>j$6jjT!2W_U`7d&XbLKcVdSa)=^5A??M-l zZ1;hkzh1KjUl7<~D^7E`KC#M0YOf$ZMD`QNPg40~W{XMs{C+LG`1AMzSXcR(^K`(m zivh7b$_CEn(?nyF9Lger(pW zG9$x1d$)^%{kH$b-(JrH+kI-+KOtEAME*vUI?|JTUt`x%`DRc~f*=4rnrE^&Vh+2Q zg17@c>HyZd91B&&F7CQO?p?2VwS{=gZkzfC}`pJsGZ42%vI8gxr*!q^Avz zH9$oLlD+i5PcP;d(A?4Z*QOrdnuh-ZB>s$#(|?G+I>OT!?D8016L;Wl=g-Utk;~k- z6}<=U$sZGrkNWen$gij`{<_vjuUb6jr-wz(##t4nIa%l#DH|91)>p&*lkG;`5f4g@eNQNgGY%7mYgIx z6cvK?z1epK%+z89oqRgu4pd$>e7nxIS_G?g8$`AFlL0b<2@cSoG!gn|RR#G(xFd}MvF$T{ z%L)_^JQ_vYU-E@rp9It?e-m+p*nT#HUGX6xw4Y1}3LPm$=_S^8ftp6dWErLfn+?cMf9RUJP~sNb@hr?(vZv}O8&pKN9F*|qhBaBO`sqBJqTF?;CvrI98q6B!u^C$*SfE_x>&i~8|Au;U16-qqE%*8}-C3=0oWLjW5VFhIB27kPf_H*Ni zqI&o(`dRDwOBokrLuH9tdAi%jo(tf(bWXp#UvBUL^&OsJyHcAife!Uf8++ht0{%gA9MY+g8!OZYWR_AcH8VbulZr0^#qpVMX(T^XPgGlF^O$g|Wz zak-c`==(S1KzL@}0GHu_?(#(Q69+q%IznRD1D8bqpP*O;172W#%XYop^}TB6B;oe?d_?t&7jFp5y?efQ z?40uYkTY~PPzCk&THjXFXz&{G=Vqj0o0e{5&INX~d}GzOzkn?EuTjEA!GpE4r|(ei zt}3X8Y0ciXq6dVui6&qIhm5Qg3?90^eM9D$Mq0F;-^VJz%QgtsycHU_S9Rc$mx$a{ zd(9pyU!TP2$yfQ}{c5H27Dp$`G%dE= zg7vd`3>pmA_dvf_zj7L{$X4V*?cwhEq$gO}#^jL{rxM>$*tmD~AsU61H_hbsgIa(> z0fzC>Ak#V6g3o$4LO2eS0{kTy4kkh@2?o}lBisu784nD2;y_MN0yHymAe}%cdCFio zF1Q;`5WrL5yDlTQ94L3R~|C6n0& z#sfIZItfrN$g%Xmae){1pnfO>^#iG#{{fC49Ij`BwBZlRfmW0zLdtL$Txs?97#9_@ zyMRDDi%X}_IjZ$dGDc2DwcN>sejUS4D=F>p(>e1=T?1S{+IXZ&n=(K&M_W8Dne?3y zv(L3O35!6LgtJ89W_?eI5tDAS)x+=SoF>F#xQX>6ER9#>(O8Z7%PgjmM!!zBYF|JF zbp`n1F~XWzfoIalmfhjeQ{6?MZXBJoYBZeE($Z)opjRi=_|8yTYH6ZG?{4O)XdpdL z%h`#`wg$Cm;pEflEJDt+cfOL>H)5&KU|8q{A-r3=6(t-fL6=^K%*Irs11 z%2Dx7J-dW{Py8uj5W(sl96T<0G00j*DDW0J%)cKH?)ZN7jTbplZUa71?VkVK?&T=_ z!TDDnwG7IpVjbq+hrCbDvP|h1QS5pJoDvXhKd}ww!Ejb#5ky z6b<}^cG6+)27%y$%TCcDaGk5SX+kCk+V8amvR+a5@4uSplcafp|M$qVEs0Ow=FXgZ z4VvB@A2_Yh{j9@PT_HlZS?BkGU)r3On1 zMX(IPr=@g^3tQIGo`;U%g1Lg4J_!;&^wdA`6~gE#eIBCj0+c zKW?L(1SRT*V70uR&*X@PA!*RZ$fNveIO)<3`SJt!1UK=nVSE_0*#5Zyl>{3gz&IyP z?FIrS{FoCXn1I^)ue_1QxO089SZ)nB>W!`%dT+)}o}+Y}faQ9uwVg^28=R**>iF9SG^)mrTaqXb;+;Ck4fTnW;eMmU zXBH>W8M3Gk7S|{J{px%TCr@3*DUkbmCl1~^;dTXnjCo$}YWHgJ!o8~pM9fmLh>OLg zTQSzoB+lEVWs83S>G}B@R#%fAUYK4!exvvBW35NoBmIvgz@He6?vJ~~U(jKiO*)mDytUA}Xe=lt^a!#|qrQr^!~y-}KCI5Q1r zPFd5s>(``PJqEur*RKp_f6%oL@aW_Y{whDa`++wrEfex&tFUek$)!BsA#)(v_0XLkS&41OlQWB6U**CDOZ51nE5@p-b;5(u)WRNRcWiAkzG< zu%CB4@A%Fb=bRrQ!6Y~FF7ujmuDMncBs6+SkIcgijn0$4qA+2KEQS!-yX7r*&_}po zo>6#%pY$bL{%0f7BH9n3*sgTr*cVql^1CF5k&6VJR5pQT$gv{OGQ$tRxhV?;jM>fvzz10R;KT(k8PMA~8DOHJ7M_Ln8<=P0q_*C^a;6@@ zVpTkq3w1ktb1rl%)CDezg4gBD$wCQhcBc1)$msB)iM+c&!36?CdYwA0!;%^0ICNNJ>XKn0mB4L zuPCq81rFaujZvB!=R#X=OGv^+X2^3g5nv$@$uE9GqYX8^0rJ`jp#9AVoG1A?33Pz! zj5vjI>A=ST`4NU60ES6qHNbOsflH&D0RQPXFxx?BFoW%XCt5yt&n!{?E;)c)PN97K zILpFcl@jgpaZmvOsglB{`!+fZXb&(O>_uN57TEAS0>t5>Padh1QyfXkv>v`byL zf5qK}^;h&3^^N4X<)xQN{uTcEl^C{5b!tr>f{pU<_ndDkw-w7!cisviYgiRaY0evo z9%>I@dJTsS`GqThJHG+_?^BD*}apw#eU?r993ib_hI`G~v6uaJC`61DYkR_mcNA6$iV=QsCI<^Zc9Gb#e1EfZIDeO##WU7WU) zly>mu>0k>>+SZ7ObIM(aFMef_8$IkuckJbznjDx703fIQ-#BTtpFZ@ z8vY-6AgRkG%{+53h_WStJ{Nin48VtGJK7MLGx4sF3_S!ohCpCQfdKLJkFW@M3-lOp za0rpNn2@;@E?^<}OSAa&Q?bwbSDtK*QzEX#iLL2!P}cops~@)|tZSmVXK5dNVQ)`Qq3UDru^HB4*sH&+RU#i|=h<;$nJ%G~{lB31BlfBZ`ceFaj9~j9T}B)$r1bzcGiIq>AA_#ENV4@FMf`WwYL+VK5xDG zN*cG>F^>58em;HfCQ5Qm|6zzzn(sM5cg=O11AN9Q$HByVyW#Qzti?b5%AAJ|m+0UY z5ivNp+=v^1f=q4i7~nhs9uyB&8{n`IB^5#kJ_Gz)BCIHoNh1I%2@?-G!hmuC9B(A# zHuwP;CvgEGA%I26z#K9SZ%@a*;n0>8IRh+$6?slNl-QFC`sY#zU_~n&)?glS%98^= z5a6)D1_I}Z50r!hY7YJ&04QMd77URKn(Jay<0!nQE6OSIj6TjmXx7a`xB7~#E3YYt zMzHiuCu!aIV0C2H3NfLCyLX1a(AO4AxuSw%FoNfe(iD^G(o#{DBqO_D3nx$;qFolE z+>5rPHNw7B38i=sC?G;B9xSgXWBXC$)k3dUI5;Yh%j>0K>G0?J)`9b(KbP~Vl zS{Is4d14xS2%S)_sT`kL=qqkFV>TDEvRdl}3Pq|C{hs_`1z9JjpzouP`6Rt~qjLsH zeEmA2qg7&ezERTj$9easx;4|H`9Yb4+S2W4J*D1? z7!vGa>hRaV#4w{aV&UM!BaWJvfIQWmAyY714=i`-Py%726=`GR!$wjEP6SZhqsu3< zog&JS1)@VjgsXo5Z#uh|5PKs~=#-WYg`}7jd+8BZO8`AYj3UZ?=o&zqd_de1Xhw1ETD%5D3WT{ig`0oV5EvWsOqShew8IB!*?+y?p5{ihv4B5s=LQZ zC4+(Fj&&G@`^qjYrNs+$h1i4l-!6A}sI$18zfaJp)I!Jn6cyEdZhyB%(L>8LshDSC zy+J)e>%QASKu;$xmBYb3hx+O?1(S+LNmtQH=GwD%TZM`rY4u&AWq+Uq-oD}cDcS_n zd9v=f(Xx|duY4$>ycTqkPuLiC!g>&56}3O2#N0+l5yBjxQ|w*nsO`m?>U_fw|NZ^G z+rc1Zb-wMivDB{wh^ER*bg2=tToS#bjaiOE`yp&yg4>FF3nzq9N8WQL`0>|XMUz>& zw4=-_we{%p3P*^@{U{F{FszLK1MM;IPD4F^n=KteF9L|{X?w81nFNQx=(FhNbOf`$qq zh(Zi%WJtO$uW-~$V?#(T5gRPVcDUpe8?8wCT)bm^Pp|xjuM334G5#-vS5396P**;` z>}%5v4an}ML*mi(Am<3}H@ImUZ!uB`WlI(>v&Zj->f>70eyhq$$+(4L6e?ZNKItIq zyB%zB^JP-c^eYH7n?y%!NQ#yoI*r!8!;v>2hr20H#)Nx{L%EZ>F|nG+qGX+ldKbcc zU|-$}zkvKg$aUbBwj>*VS@m1O`SoA41S~GUtd#rY>?&_z{;K-p?E6ZFk1!eRXg>T>eO7shkm#5^p;(7OZpfWzE$>Fupb7PM^z`QP>c)OcGto{)My zbzF1^nIU9UY9Ow~RtW0sW3Syvr9fX`iUa~nTge1yfC_B_Eo9);tg{w1KDAlUk8%_} zx@`GWS~LKAc;xBqV4YW)pld@oWEClhU;MoAyF)+roM~#BK&{uNBd-eih13(hpj!vF zo@J}QQlH*!>wz8b`>nU72QU>A3x_#ko8FR6ki_EBOZN-meg@-_@p)Ivd4Kc;+ zH>fMHqQS%RL)%q!hVn?0_@*mw?FXmhNx$lQ=YMW=6*~V1-O$tj%i-R9lc4pqHaq)t zHX5*7X&VbnU*>_2`t1vz8wjk8o!R<1p6d_mfIy-wqI60F6-JREVyOdM{9<7Y@F}3v zv|Ddb0`C+A41k^@+A4q|7ZZ7QTBg1ReNHBDO+@l@LIJ_b0jHpHS}2D;F}Mm;yr~8a z@LsaXbJDO7B-qedzc*;}`L`tq{Q3X96ZA@+&AlNuP5$>mT|U?<%YWmqA|!d16el_F zxkzQGE21*`spUqQ5Au&pgIMD&MqOH}L;Wkm{dhe7ERBh~zHLb2KzqRX;`2l9s|gI> zY_3YXq;U;SC4W4AI{KALcvv3c!{tUDJC)WthnD-+cS)$~Yu~E}!R;lEPL2`km#cIz z)O?8un+tD_CmVvKcg9zuRIYh=aX;qss&lRO(^f)|GuvoAc$|`4b-iB{Q4r$HOREy- zivONgr7PvsTZldEK2Mj^l0Nv!cVVMJr<5Vn=l*r0V1rjw)gg!r7sltCs<7AZx215O zcnp=Y_ltUc`my-Y4Y7W{L6rrotpq*%HPAf__9BO#wmP7CaEu$ki=-?)H*l!~?3Ka# z02qc6z}4g5eq z$IzDQdtEd(=+W$SuISl_>H2l^#i$p3pO|Jh8nZI9pznNq7u1>TK8&!0JvDvx2~V1& zWNP|ck4`2pE_XUN&C*vq09UQ>TBYWV#z4xGM}wZT9@Luc@XOCXLsL9I-#SVzd{i)u z+r4`~ej!(4A~9CWP_K2&dB{-15OPu8{spvbTuT?qT!gq}(~Z01ibJfhuiG_^58Cvj z;C%J<>voGtY;ybJi=#;@xDIQX{_oVAz~Ov3J~dxX9#wwbFqK7oznpzxzZ3(oBd%I6 zs+U={WT6KXSKNf$l3=~W!Yc~^h;hu*Xv+dn<|x)E%>ODHQX+(0YA{+RBp&m9NE=8bkx zeIyZxt3IOcrLH(M#1#KV|grGmcEBAHVR9?Oi6w(OT6QY5&7G*Aj(uctWa6M+@n3$36TDd0r~e zlNsb`9Vl{Pm73Q^m(*I$*NuQ3GUpuxkBrEf$Iu0$ZST2qyF=K^ zr6A=?X8ID$lTX@4^2_m;8Urg6ua`hb%fk#P^I?O5uW)XFJoo{=kt0O}1sxFp1|me! zqj7~OYlZ-)08Bs*GHpXFJo26Sd;b!M6mV{W$ur>01=N57S_iIaqD;R9t2XI2HDG)Y*nz{`X5fI`?xR;Iy1T2nYCeqS?1ZQ7!BT^K=flWxA(vmVY z=(~gvhJb@0F(N$SAnAHGJe{T%##L?eF)K;fCe(5eLWB-j`ehXiU(Sto@XtWBz z{$`9kRUcCk!+)O9hSN0pR`~HZO6{53#-suY^r1b^mXP-Sbo5SzrCu9VQF-D>v+{xN z4rfOvj;Czr1N&RLnBRE(#RQo+w^GA)Lk0ZrRck+|Sh;-n@kD4+IY06z6@RineeJ|Aqzdja)A-v zPSTR@sB@gP+z#Vd!x%ib>j)v|39c5(v1x&FWr^xxx5|re_f+J1`p# z;Zsh)JpgG3;4091@ZB6K$nTQoa2cmrwM>FJjNiXp4u{&=Fi9b~=vR(@N&T}3|5UFvk4~TXm|(Wi-~P2bl8nD2?-V0;SyRwvYojuU zVt#fjm!+c(!K%9&XhS-_6LD1nVe)jwoK3!ii-0Vn&_-e-;QI+`WJJ zB^@?SNNfmaXVUzQU%9nkb|5PcFV5zv^_IE)PAZ&isx8gLkV{80ln} zVUiIQ)%>V@w_2By|0Ut2n#ksI2rRCwOp~2&%pYIaEO)HbxSfubbdrWe&!m3a#b7i(FnZFlfu9SVr}HZ`t^?6SdMYebN-$*{La85^fBc+})h_44~I( z=P>P{gkVp3H}4A8*2P^Hlu6JI(QJ8J*d12%NxNXy&c&+LG`WwoNffo8@`vkpPSaPT z9s#@LmQNwikFbS&X6v-=o42E_F67jDM3>5D1MZb~l`jum(r-Xbr=cmET6{h zUIsCt1Nq?wmnuPQRm$B577;Ff@{gnp`8x(2^>(bgC0A77{foV#z0h%+qy|PE(Ox8l zaypbvAuZFSkpc=?&{(&=az2_}Nj|!GZOHcehb;)%M2no7Z14!~a?~7-{Su4ajnEQr zo1(mm*@Tx#YHK^Zal5giRQ_A05T1eHTgUn*6>^4h#`H1GcOv+1;f@1${z7_;+5B+J zcC*S_0eq^ZOU15fXz?wpEVFAx>Fv#TQt~Dmc<&x`?BjNt-~Obo;Dp|l0z(GU@<9QN zX^p`qaMdo$Qodu@s=jaQy$SZa-4*nuva%4)3TN-}_!U!^WO<6@XlEYoQ=eMb^0l-$ zPOj(Bcpd)wnPD7e%1An}H0y@nmHo(_nlMq9oh8j<@lW_M<0p0Wp$kQ(g zqWRI|pmFWp zwJEINaEu6vTMm|nD6V)q!8X}ZBdDP>h$Jt2Uv%v?xn;f--iCbe{pD%nxp92-L$T;@ z&wlR|-{yPZ<@h10Dc640CS|{>+cein>Yvi1_zAhGEzd_@ zT0z!y2wFnBPtvFAAbrgry${3h3-A4OUHBo#nReaTDep$a!1Vyjo(hS8mJSe+b2#wm zWUEc+?T2;GF`9mPhkHqH?z}K+n`2`rH@I)W4ZK5D3!J+HnDV1OhPmiA5kH0s^2sBd}ndBHCqS?(g2G%DZQL;~Sz{n%uO`?hBkNov^s%lty+T z^|;NhRD6VNOd58QdTcqQQ#k*A>QO|4FmDEa@m5cO;I!k@AKACNKiS52zpMG<^}ulu zI@$a2Sv97op+V){FT-N$F1ZNorYdFp)?)yHDEAjFu=-Z{uU{%%UvLx?4cVJ|f8^;? zt_kMh@(GozmRfA()bsmAdT23i>fLg=XD}zlwVyrVisdL~(jIiGs6{+`DT(_;>vguW zNYJCv=Jtj;a-WEMn0Yri9clhK<8!DmS;Hf3Y`1qMHq0TXkqOR0 z0v)~S$rvL)!0Dm%p6{ynE3wk;=67rBthnDiXg%zLFoiCEv&R_WS*+TIazyO-P@do3 zO;OpExXH1@iH}Rp8k*&}?R$*t8uQ$9hv-_{4;8t%Xx-w~k)lHA@O|3*(6vXR^p8o? zG9y3?G;|2Qn{8I2VE~*lt=tbSADFPI==`lZaHVT{dkL~jdXVi-(uI^sxpIG}Rq@Z4)qbgM8Q zlV|bu{fB7ew8W>+r$Zrx>FGa*kDe>6GFUuS72Ey`v6|T9vD`vzxnMZ@1e0-n@0#lx z>--B68Y=~pyeEoW-aL2^aMGO^TRY<;jH#D@@MR(}np7t;;}s^S&Q|QvQHOfv?aqW!`~GWQ)3xUA@_}xCRRj0??cSh@{z4k?2U*xa z+mU3-mTbSj5T{J>ibXAKSjx z6|B@6$pH>Y>HPW$E2_%>am`i^KiSLs_1|!91(~?Y@55cDr8%ituDMFnzR+nn&uja^ zC>4uRH_jBar8nVD3?o(f{jr>4L|4J9qUd(nXDGD6>B|sT_4t}#q0#J`x|iotNUT`D zPPACwxjSLiMpYidqR#lvHDo?B;L8?`wbq*%k~LY!@hhM>JP|CieNt8|CGo};x5q2t z9`qFxq`#+veUQrerQc{LgzSW|UR%OE++ygK;6B@#TqLA?LjdO!o|o+gurG8B37;`@BhGoCr~|M^_9g{2a>g0YkdXq4 zGLZ%t2muLl;*H`a5icW&mp1@Pa1(-D|IW@m8R_@CoelRT(d(Z0jVCB2*bfVx1*SD` zomlIQ5AIsB&kWrLzdid_*m16f#;;_RO?L5WW+6N5=T%Y~%9b+5X@Pm3Lad7FgZB_w z{z?>;s@R|VJ8EHpIcvWa(wS4;X5w^h7Gu9j>ehbxr6lz$#Wr7JVz5E6-&5@cc4k*! z%2-e)@2TExzHqVME&E0XGqskWt-WeNuho1e0DDXY`~Hf4NBhTYY*^-CKfbP>9Sge>~JkX9vtfeZyLxUbWr^G)3^ z@P8o~P3E6jPxyR)<5w5VXY$ZJU)h_vru|-M)kiMSAzwP9vz`^gwPc=jQTeRQa*tm= z&yimiB5-grP1ECr>hhEuA-^t|97B7U-o;CyVq55!WUIF!_)vx^=6sB6Q*hid>?G|k zuGXmqN~PcJtVPmSA5wvUZlWKj~% zrZ%)T7sd;kCkf)Y<#Q6pR@r$<7P8Bkm_;qBkqJUZY(>sDLByR8nIgf*$(Bb1$jFk) z>o)_;U%P7%j!}0c_@^F{XnY{U>4# zUD88R{5YY!@#i~R`55n;53Ic>nzA}5oILyKZAnWsBF$-=uwAceHGxe7LbQ2KASm0VXhLdMd3Jyy{Bgiu;TLs_TE|TAJ(LH6&r|sv21kzw!D9@!!P0 zLj7Lt?_)S3dLJ#WV1IJ9ZyEhqY$O-B?b}EzQt`Fp0#EbAo^7DM-+Mv~6`4FjVFbBh z;ohF9WMtGQR)g`=ZEL7~TFt&$&gUxbm7t8?%4$>pq;LEt?p%`*EJ=%`jYsTri)%~h zwC@u_X<+mm{naADM90Djn;?_!*X9th;iX8}@OymX&+W)NLG^16a={q&2A;g$wn!m9Et9ntvZDgyupMU+n9hh@OA@G%mabBW?P~ z)7ihGbiS0U&R#Imig^aTe6KtHQ?1eX?osWVNT<}v<>~CZJ@SXU=FC>^@Y(5pwS|pzx~<2WeNIwZy-}M;_6RN2kdKg%GT^G9N?=H=ieYv$^0R$eV!*N; z1*(z7L~065zKcpk#m>_`VpdE~W*Z5(8Wh-&PHADpDkYL!AuYX{G92I#fEf@4BRW(6 zwzv}o|Cv<%55hy>j7ad*@}3y<)p-;NIeM;V^X9hV+ksLm%_#CJi1OqvQ$KZ=KUK`J ztVijpFWb*p919k5%gQgEWy5*&jD`)vc^SA59>W+H|jb9SGOU5&d z73E4;vg24!#4*CNWc7_PG%TV>Uzg@*hKrGys3)gds9FV55>I z5t04u7}2}Td=|uNa+E8JkoDbt$CE$kwXFJ8-7UXM-kG4| zRY+Ykf?SEM7sR>07A`L#R_b`GwZoU3n2nmvoWt-It-gLhK*C>88HWLs7ZoVz>sJB{U(a>YFRWChqzy+s(f6*lY9ns((A}bwKK`)$~ z?`W{-+B})Le~pFB(KkH=$}`Q6pnAa+xC4Xk%O~T@MT~gdj)+3XqE93`S*tU z#^HXq8It(;BGw&J{dBx6Zj`-RuTq&&Md;)e4IB-Rt1riUx8!&6Cupm^8yy3uf(Rr} zjxeEOLdkR7#((R(*q_4_f*L>--5A(XMS~9nhiWWg2VkKlSI{iqPQ@!A4U)Aqj+JdQNK*1q2iGHA-4#q8;;ht#~ zBIkyVChS1}$Ucb6deeEl{NmLG@)|1BiI!md2V$+w{0Ht|Er+(|lBC*l1;|lJ%dri+ zN@AlAkopU8#aW#*PkT3jGR0z>Mi&Mn9Xq~Aw^VC%ugkVi@_Q=JhJ7^gc6gbtaDlPJQ+8#$dHD*faV{ZgPgMr1Ig(b#c%KMg zNE^5aJGfFw!Ies!FZ=(z0rw7sJ~BZ!)r=2-NNNMrFaSg$WtnEH{Q zNhijVj&(&V`?q)e{j)+Jrn>k!N1=6597fb7dnHqQtcKKLwcGfoKL`>o(?7pxm2*Y3 zb!*6Xks!=p7|J(LCR+ybPV{V?>^Qyea^R`Cr@~>Oal=>%KSV9akiFcJ5CXzno-2{> zY(363`m;6^^Mt9;o>siOTykz!nI>$0i1%aTn&L-MkKpD)@k^LG)sfMm-4Zy3gjXhT zR?aj5*cZUZOd$&RJYr%i?%x6{puof;E3pJZqmKZ&3gEhcW00S10FDX`7Xs8;xrkdp zfIWE@goh9}alxT-yh{^RVv&&Y0aOqB%N2!?6l}L8y2C(ALzhZ|XqgG%h@#Iky)D1p zAIt1C0L4U5OEZsr43hJHFuhwq)GE?G5)Hi#($Qw2#SJ77V$6Gqm&S}q|V z;Dn^%DsRhiY?7({r|*u;&6oU2du%qQqssk8*lxX*3fAk%!R|EmK>LvxYZgg2XiBz) zMCV=Wj~5f!FKFVY9Y59XW0U&z4S7vp{I(On+ug!6G+$aiTFv2kTQ|1*N2F4r#&BBcbwGid9L7h#Z-N_?=K`Zgs-9Ul4-r#Tj>)I zj*#;s!qOql={eH(-E!reiq=%cT9I5`%5FCkT#Q#7r+nLczd6!RZF2kTAD13{-Hsjk z>=)jCZ3x-&u?7D%f-}Z9n00jKLgnS3c%!sBYtX94d)3tTO2j`H%um+|kC80X*ZpIu zt$}U-IUh-g_jVKcRL{?aEAmb1o8LVzg2`5Ye);pYw)eLyt`+g$(CcJ%Ox!!+Kb>~q zI3ElR3{`r(g8rrL$dhaNnSrOI$Pax@G#3^=mO{}zG7MM>(hFpGBWi3S=e{# zp2e%b+Qe_B4uwe)7$x>?QvVw)HSJnaME`uTBQU>TIPb`0_u25=9Tq9e9#h<+V`IA5r(^X+ z|0(|lvxj-RNA!F4@${wpk9^OYiF@f-XUsul9V$T~zFBZbd-uNewBF}5|nU=Sse`hnO{tLwoCxKk`y&! zs>yZ}3)T^)X&V~~V!Tg?_(LI7v9(%}C}gWGh3HAogl?F2`!|JgOjwtjQ(^)$77?zS zwuTFsy&U~=Y2cq8e~Wu}1NoG0+1BV%9JasNOgW9A+AI0h@0D z3j~7^FnEYKOqz!MnZ0_)&N>w8hgsdqju zmXb#GbS^qsb|6(9dHY*bpGT{Du+22)A5_`1jQ$XxF%};oBq=?*mFDySp;nDb!oJly zTT2Z_1Bb}_`d~S^bfPI%Uu11R-=Zt1j%#-<^3%6#9^MlReCjM}N(>?wsDnA+Y&Uio zVm+a6~~I&fVGEGOL>(aYn5b3pd+s0fFFZkxh`3&O&Z^0yT4 zrZu~r=9aHmGcmcJ1kG=M?M`c0PNo~~J?F{wxbSa$w79w_{S1Xm@CR6JpYLO@q-=q9C06f2~=n1k*gQGBuXD(g}JoJx4Uc;klXqJ zRVWGrJks)BzwYkd-J=AH{$)b(v(_hLw5yG1?$j5m8I5`EShzcq3pjvapyHVlA%6V!aIeNRZ^m`|I|JqLXknvoTDea0>%TN5b4(s^$ zT)=cHm)anFV^~|of=Ac!^_Pqvd=%G$zH#8!edowr+XC*fpMds# z(NnF5GtZ8Ke7+DN-T2cluWf}4TYO4Zf0MFd1MKo}ZfiyP^PyjlTdr*uoqjKNR|G%A zLiZDZok;h8;UeW((c!;zE^G?Cfc!uIcovfTe|g|fBS0tEBK2K@80U%`*90*q=JpiHJeU0^|0_xYQB)^HjVuL z=UJONjf(tyFUwVZLBl2nihp=PA_xgF5k1W2DX|$IAXsp#Dw`su5%ds{_ZvydUOSVI z|JQ%$e_T|ENZxCjL114 zHj~1*dw~X2Au%R>;c`o(7?Mw#h1H(YfFH<#HZM6DHVqx>3R{y=f#-~{sW45u{Zdv$ zsqFH4rgEV5&n8*>t;C|*{&M^BrN)JgRXselk*ZZf`U#_BHsh8j^Ht|!NZLN&}D$3 zs$x4;`#-khvDG2etCPwB?}eIPe*7&hY)pQ?lM#86S|(wpPiP^eaV%Ifk40H>kaM<| zaes5(7&Q!vl)Q^}bqS$j05Je^<}q`h!`dT<;6cxMdgpbVb}^^tdtP~SFV?K@9zT-` zSeK3Ue=^Ynga`k?75w#d-k?W)|&2wj)z#WZTP9WkTLI z*+uD}9n8nfg5K4WpHkI>HcgyT%f<4r<(rn(qR3xKvAgKC2b{1z>+@>W`@T`P z5X>BLXr9upW6kaOZU+|jF>!k-*+y>Dc{~f^wv4Vo(Bog5_8HuFIh(*3An0Ve_j996 zi`)iv%TuV|v?IgU&H{th&0pS*Z<~2`C@S(@p~HF{R%8htfAUB7w3FN(%aSz?eS`gO zX}^axTRrb(J*yW~qezb1+bGc*@c4(LPi&~zXWQ1ifwx+34x2Ff>buQm_1?P&x_mb} zisZjjw?+CVN5qs3qGV8r0&iS?T^bcTXheK-QuU5$+Cs&5r=CUI-cXYX`xP zG>)%Cbg8j4NA!OPR}k^)<$r^F=R58mXP|}A!FZexNj!dRYM&mhqWVv+#}x&$&ipjM&oax4Eh_5*@qTF-cucD=zAcgFV!~?oVJQn zZOTI?c0);~oElNFs`vaaoQo5as#UQURp~1_DYmT-G^&-po;!rT4u2X-n^tezsFowz zcM(`PiCSlo7XpEpurs(Dm0$GYb++3d?{Bne+i?Zbe<9+If6zN^3*vtvo{k}tE~h>x zaY45qykZ>d{R?@;2)O8%$)7&YM*l(#v;Iu5I5rs{6)*!Hdtmwzto+tvKCif+3{I5g zcKaeD_V63$<|1E5v`s%qjGqOBaM88Z&9*Dx2K(TvjKPVP%CAvO8{4x_cz^b(rv{i$ z9?5mhOr{j@t7SNl zTI9RHZ34kFP-LY8j3fIs1`tEO|9~K{qw+YiwT926&Ht2Rz&+4k8)vwPLJbiS^}m1# zwnI+=s^4^Q!kWmrXe`*6=saN1q+Vd9pyf^sFQ*b79xUf#D=j#r(!-P@EZtg@IgSs z7>L-kZ^}lGQf(gyAy>{O7(V6>H8mm) zg}}#%8ufo}s3EFMzm|3z^{2ZYrRR>EaU2PyVsv}>C93^r2Q;NYS9eqf$R!V*H*9FU z66#M`{?QJ(aUC6XY;@qC>-WC>_q69C?Yf)+^joTvB7c2}7J50pv%&YLY?AM??cOil z9XfA>!`{xV`QVnh%g|X&?Y5N3VuvKdCsq|Ek2XxZyQv|U4${;Rl!lDOkzqZs*Vjbd zzWLrS$xFHq$&0&^IBtOuoFj3pa(vsf(LUWd1uZ~nR+`I8h@(+A0q zu=a!MFl;Ognl6u6r3Mo;LjCV;>>Y`ET#&4*9jo@k(W@}ES>4Rzop&4_d>llU?dOe* z`q=$ZF*jBNBC=`Uot$Tl*{^IP7vtm)h3P;@8}8@4Yw+_&I*gPqzc|WWjI&X+_C7+E z8x;m8{?rXU_%Z(_enC|ru~Q*N;5A;RnX`hWwCm>NNl-xz?k_~P;^B1A@NDpd1bEo? z<~~xKk@DEO%9U~3YEhExmgx9TV7)s&Q7(*7(Uy~Gw^WzfxI0yG6}jUxQqr}|jXf&6 zAd_~9o~GUR8QQTV*e#V=hwJM4ikKo=#+cYq;{HW~jE`fMTQUxFLe~MYHTl#xc)=#C=C& z_Z)-8IUn$SmS1QOZol?>^ik1M!jv>r5w?3V60vF~N@66lWT10Gy-H>I zPT*bn@%rKE!JqqY4$h;U{Fu}MmHTXZ6~Dz;7JIzTq5j48s8A&&{_=LN2(6hd+oS^K zmOpn|JHnY}u`h{E+X%tFp4ctMEAM&7=M{c?nlh`~2E|bD5a4CfvFhWV?5W~S79z>h zX(q>f^*nf%S1_|+5}bMx>4ze@@ZwJ09AD3pL(JVb%|^O|_&^0vh)+vFf7uGqC>)`+ znO7Zl11{ZJmU$Y04J8g9h%$j-0#T*|6ckYKjdcLZ!=eEqNdZ9yw7sb&aa0*Yo3@Yy zF`rD#oB-nV2*ebKW_(_@;W_XODX3TvYizXxu0+~KbeOupn_=Mqw-UgEGimp~?!i=C z_^ydXJMrm)M5COrnY$u#b$R^Z6~tgayHnCjB9Hk`3H;1nAX*In*NxN!2y$X87_prI zbR`o1PeRHd_)F~F0D&0F`_OGTW~#tNjySxhkVL!H0Mr@5q%H`p55%kz=&~*e(0IsE zwz_H2)?01^k5IDOfN}9z9wWjmA7O1Ik>R%IkRs4S?X&OU17G(-#NRZ~rc?N z^Sv;B^6@LllEOb?+voR3w;j?SzHyi8EcNE-V3M--$Q)ftPFnZCkM&j4T>9t2%De8G{&=!-O5N)BWw2nQV8xxmTB}4ly#pb37-|X!UM7JE=>XGUx zlWq74jgZccUHl?;waV+_#|PalML#|>no0#Jx0p;xgn@;z_|Kz5 zTvs8OHL0t5B_LHzFNV`cNTfu0u(`!~Q}9cWUdzW|5_qpV zHZ+PQWRp0KL}HzU4$--)QoEC-M}x200}nnp|AjQ?f;B7m2Kby_7ry_SCjrid8BNje zcpECG0D37VcOd?2Oo&#e~8o>Ai)WTNXiT+tgOC9wHxHm!0Exfm)lT6{lCpea1crb^Lb2Mh_+3oz6Ldgatwfmv%^H>Z)9&!z{b|t zB{p^#Wurj`(S{sUC8RYT=cL7W12VG)N>bo!pdf^qp@080ndq*I0=@(PnFU=PF5GPz z$5o@pJI&#G2lt9PGP+>?cGK|kx0k8sg{Xvak8HF0Ez5Iej2WkI zMq+RMxP|?>k0R!BzS0GMyZ|E%HFwG9AX52~l$Kk#)G>pf3Qe}<`^E`V4)zL`9dpi| z|C|(0EIkoxjt>zQ7ZxV0c8%xv{ZoBB_(9p^zMCpW)Y$GM@FcMXL-S6l`166cO@nZ^ z@40&dyn6lVjo=ll@^WQS$4r zSGq~3Kdk%+I~IJkmzPu0{T1W6?2mf(`YL|DZ~bKAFGMGJ3ts9zo_J3b!G2qb+zZ`? zm$ttuTQAeM{B~@Ib|PwoE_U57GZFG`>3pNz}wZ8JdsL zbG!TL3g?Zv!pj~3ZKkseZi3L$3MBn9F5&&mR)b z7stD|8BHB&^Z`p+;u5H&s{V&+E;gXYsOG_X(=Xgn?^v~kPyw#0#3W`e*|y1e?fg8t z^PGK%ZrHmaXWA=tzZ^{k!a=j%hhw>eD&HJ;rv(n$PUkUB^&_9(sz0%@w)}Y&0(Ha{Mhh+tmJ}vhX<|k|Ca+*e zgT~xd9bQ`f;^90LEq86wO6_k6MX)OJJ{2E1Hmh&v&y}nZh178vQPw{$94D* zj$dwFc^x;0>6=(EE=W3q!_f3gqwoBtckE=dWO|p>Us9qZ zIN3jPI_v<6w`7wj)e@2*NN$~oZ9n^l-b5^1W}TU_ULBQV%S)^`7FVnOv)GXTds^j( z>brr@wXQEmQ0ULsaL9Mx{F;p>(e)=E+!~fDUVC!C>E*E_rB+(EZ>aIuz6PRa$CJal zx$b68<`4naG1`-n(XA0bi^rO!A0%1AuMpM5@9E_zie4tPu`a z%}sz~;L8AsAw4MJ+wev@`*pv@Z_TKoH>caT{|TIfSm z;_WrKqkOgMSl99{8`&{Vl6Ny@;Tl;fRTA;#-&}ZL=})GXVlpp{r612-xtT zY(do6t=*8f*z}C5kY&odgOWdq5>TU}lQ91hgy3Whkue=X+^0Cf$##^)vCD@bq zk-vFpCZ=z6YZlu(%aSwG<9Y9atd%7V$eJ z-smp^qlUL59cq9xDv4HhtMO1L#s~LEW)~esh zZTiPelm-k{X6{u@9O!Qc&6?2~+8SBZ57+q*z$r*&Dof_+71J4AOp+7$x@4_nLtMTu zc+v^7!Ssbk1OYfd)vcZm>yn^e3BN;lM%V~TY&6`h|BonqeXiGMR?s*s|S3anaWGZ-6fyv^H0!Mc=>{qofX z_Z(w%))E^Xpf(Zb|y_hQniu3Nr& z+QT!Q%`c>1JA6W@GpK+>GNwHbek$*swR*nl?Eut0l?7b+!^b8kfV~i`GnutDlHqF`;55#Z->LHZO40*(v!EnL9GfxU~k zhrz{9py$OcAEPP`ho%6n?-@-nfTWCroH#uM4wB>aCI1Yj ze}9atV~N1ySb{;|RNjjdnxNT>=dA!lrA8!QsxUk&n9@Qk)r#c8-tI#cewB|W(5Ggzf>tdDI}6DLUohIu>{_I&k@KHN z$;^g&*G#@$D6r|1o4>JHmQzZ#bvy%f_dUca+w7QLOX}%eWQ!C? zOi(syv2)7XE1Okwn0?vS$SNvQUoq>}R_fK1&RaRO{WJOIE85PC#M?l29nx=7h}lSX z;p=$p7~7vQ?$B~I)RQ&xNDx^trdDD|lH|7)F+pRdSo}~Q`)>2Xyk*7aeEZo?vDZI$ zH`}xK60*#Aj_#mm9O#iOe0`U91kMB{($DJ=GR<>l?Uk%*Bb+)HYFWG`yG3`Me6~#2 z8k2pKS5}4vb&2zctK+U~)83{K_?i*^3v$M}{Gz-4%9OQE*Q>RsPbj?~Bb*LW+TIRa zxCbHO8hx2`zi_k_p*)u7{-MNZEKB8D--(d4@62H@x$T~wQ&>t=4IeJ^?f-V~_503^IJ0mrRE2{Rmq<>|S)H%l7B5hc%-Al@o9sn6 z5G{u6NH)Lsm{`P?%a*wd+>{B-EmdK8p=p*S`vzX$mO&$w^yRWKtMt)35_CB_&&MnD z*yuQPy|i)maypWfNUp|Rq9bJT$kl6ulk5S_TKQw=o0AsYQZcNkeZh7bAEv@>-cODx&NG|i( zk4}b?M$6t`y>`w=e!$)^>&!TJq&>H;VjH&FX<^C5$!{uDn}!9*%cK;_ph9 zd+);!W!ztO=tsZb{Z3cNc|}1)mf_^Z$+@Qlo1@PjJ)jvcOd+_UC^pDoWNLJ^?dQSg zl?2P>*@W@^BJYF~tL6-_`1@g)m-E}Ykp~p3!K8|w$Ellp!LVcg5ed6lgJC%cUg(8TJqcvy^qUvdg1_2iYaBvgw1Hat# zn^g;iSl>hLd@z~{^g}p@u-!)#)AOMElC%r?kiYxUdF?X5EgQ5q|Ni$uLxax?*b`-= z5CqUc-dq^zO=NH)3PFSin-~P!OyxN%6l|miEd989AVVH`JrGrtkIh-+Odnyqwme#c zFkTC6u`h?Ia?st6hWikodS>9PiuD-9q13JnM85VNy~WpF>AW`b@#G9M{l#L6vmVfHV60X83t~A|$655D+7s+NuYv)-5q{Z?Wzf2lUa(+o@4KQ9J z^4M>*Qpl*Z?>oT==SZros0@Tv{DO#m^-4q+gPz2jUPlo{CL6=#NC?5G*uERKakuF8 z=tkvLs(mlhC^dLQs|~Hfcg9yUnZjQI$81a7AaR`a3t}_r(5cmvj}%cx<^{9Aknm_| zm>T{WZ4j6G!xSbo{Q8MjNhQ&B~k+GvsVFr~ok>9?e76gK0Qbam=qlI^R zO}$rB^0?Bs6ShORVpX~*?)EFgg~YZe6;@id1YU4ke~kzf;AyC6KN%P?NeE^<6Z6t7vP zjSipBG_JMJPLq9UhxL_=a^V{W`NSA3M;mt(6+j65O^`QHBcIFyq_5o76FXcU$QfX@ zF|DtsqHZ}kGvI71k@@zm(l8VP*)G?MD^H#W{5Wf8|;N=(9K_qYyYWz5_Rx#*V|Rf&kKzs@O>d0#;KEYgGV3z`*dGi=!uBv&fOPZ`$-Myqh_ z>FG19p2I0wkbpzbju7`d4@R;f1%+d|nO;N+h$~25miPRkYCJhGS{U#>b1dkA03S3V z)SW)UcWBG3p6f6?3D~9$jTSj1PK-^AbXA?$j|+NWAqXHXZzk2Hb{6`9onw}jmR+Jm z`o7{~iU3OAOR|`kO_av7jUg6^yeI_!w-3hMBxmCG7$@|1ewqqnug*>d%{x$-E*nME zbTPe`llaESB(z7@X_Q)qrVg>ME$a{otBH3rE?YWbDJajC5q-)z+Q95yHm_FqB1!dp zRSN6nkaW_$@|0B-r|>z{wP*3!C@w|kd)-QGUul|4!+NZA>uwu|b>-<^#G81fKBu&G-sn1UMCD-UPN%&5Z6;0EetP5rfzP2_`_=bN>w`7EjvqnA@wJkLGSi-EZ-OD@KT%LvZ zzQl@z4E71-!YRQApA@#v%dUWlZcv>aoh4bHF5$Nxam{M5ie~~g>7VN!DFDVIMfOXD zp|Z=mNFQtRHQ@t2F_y5N98^(leq&u!#}E0u97#GwAe!RMB+AWBC4oT_(D%`kQxl35 zG_c4;2wpnEi=_2?Py-J(I0t%OuT0|=CC{Lrzyaa@r9)n87RF%4;{Dru284<9_*FqX z!(ZNPxL1e!)-Cr%VG2iony>WwgOvIHAo$hD-oXI$S#%4BRFvoO_NIQTH%V(Ejq%tx zmyI74iP#FtKE@77%jFmZfk5bnitvmi3yKwQ!zrj6*KJkDbvAZQUlc=01M^Jqv%KfI zv~w=&oNK@Dt!~*i1WF|cV9J30QyBEyaL1G#6msXlWTzZ3pv90w?D_arkeP(*a6!II z;y&xVbvepB(4YHV)cwX70B8I*82ob-e|x`!NnBxh{XQc*DIknj;DuQR)R6VyXCPoi z?YZDAf};p@^xEJg;M$SkJm&&J4_7Jv{hgu>Onm<0d_j1H*7=qS=fR(Z@PemC@rSS@!|8}2se{N4 zuqZ+ZrHud&3&XU^*>kgJqpUAJ8>EyNB+CpC)ntesvh?GCjXUOR5LBoU=j1{0B*fSX zh?IEo+a(x+b2G{O(K>QNetm>~14GUS5Tm=6APUJy?H_NdD(*+jDz95aXl;mDzD;4u znMVVrNqAnJ#MTswrQArs)tF!2gMvngnRHj|csQE0x%^Ycxbg0z0U1u~*okq4Xq!!T zAw;-C=ca7sU64X@;n(txUEEeMk|B zW(zcNuvv(|`*2XtdMzBp7dLfFr-L{<|K8W--#B;Q51|(4oMYlnill-4;qdu-p~!B% zPeS>PQ5oacbifqvT>6_&V`q4VWQKdRj)q24ET2>qQwvmlP3@Pz2-8iwslnUs*%@%c zvLDrc4g2M@(e;gcXUzRGv=Ka$v68F$c?v11Uvub&(`{|799^W~6puDK@#MO=MprI? zIZ;_-EHv8G<~2tAYv8MJT7mCT{<3fMlC#3R*0qGiKH;@e1RdzFzD>v)H2tX@x?Jz>K+EGzi%8@_=9A(1{YIGy6inW3Ahy!f6*!0!rQ zg%1qJ5E0@F0TVOop5AfwU9-Lu&gB8Kv7+%+A%&-feoZf#p7}a>o){b0atb_eIRy*u*7k}zk~Wv_Y3PZ zH|yKP<6bfN{ja|uixYWOTU7_FMJ&>F#&*QJHy@wpxdfy)SLf97cE8iF(gsG`n~`A4 zS7qmYs&-lNY<@UJRWy(;ral(fUmmhVmTz#$c58+k>{7+!8`5>8T}17h z@0tU_l2NV=STL@HrtrqOUI5%-g4!GSgc2A-sU4MpIft?((+`Wu#WLj?bE+5L$xWVng8XPKaB zg%^K-gp%Ka4kCvh_+19i0Jnh+AZ0KxYz-2rT6}QYolK%0;0_4U0uh8b7-SR57s&V@ zcQS47|I=+r&ZaxDk8%MU7B$E!Y-$f*5#SRn<+7Z|4A>7go0NSch-l5c|V}s#6 z)LwzuXv&2UDN)|!+oniNr4$0r_whLHz{ob!g)JPodGwLYvaY8cij;o6CL_FgTy}+1 zYjhV|e$dXk)rU6$HUl)r7qW!|6YrUt%HRc((AyM|xgs&q@;l`Val5U@$?8E43s?nz z8{dj6tk*Qy-dDMvu%9#^3k034m`ynRg5Wu93!BcLtol0cV?oSxVV3{voyCRI)0@fp zkW#aygS5)^+#YCOwX+58;G|_23Ff0*t&`y@f@02lvgmTZM*1UJtW)zS3+u>RMl4>a z_2>DXo5JtBS7%KecA2qsjgbq%Zqnr2Hcmx0 zn8F`O`m*AmCchvAjI*pw)MwnqTj+xO8SW7;U$h7*e_L8I52!8(-4iYiiDKPe$!=3+ z=j)rFRbcGair&U6)2=XH=&UOIp&J>TJuepz&f}4{szeAXB+IluP-(?C8S#EsRwBv{ zy)y`|f;h;{-i4=k?m@eM)7aX9qo7^>+WF?{WbsJUuet z62{SBas~i6CjT!grvi4183D75?)$w=lu{-qGZzO%d4S+Zvrp`mHUiAl^4h^d9rID7 z42&14Nc{$FZt{Z^1^alqMvV`d?Z*Uu6-_RuMtO(7KuieM^op+~hd7-VNbGh< z#n>`Q23Mq9t?`CH29#h}6zjR5HUj&SBJjZ(Mb;myH1SZR3b=qFkuVgp7@RQKSnBbY zyB-bu4s#(_FW+5=#klB~>!M>5^WPGsvHOv8)!CDhyf-qyl&HdOGl6doYEj!V z55dr6!NlJX0EeW(O~@LK;8TJoK%iJ9A{i83aEew8DxAvto)XwbMJFd}$5zNEtVA4x_|mQ%qe*{Z zBn*P7&Mzd+%_V&31ix;_L!HOQ!bb`e+d6)cp^nhjTX@#F^CO92e^IHie&<6~e#b%F z%U}VWN3=tDd!(X)M~*N8c3=gAWDXWdxn~l>;z7vcg(l@xf-s2_TAoe}|A{C6x&K!N zfdYpH808ryq$FB{kup16GnBjceR{A6&cMCHWDgl1X@ak zfqHoPM1D4MHV_**YyA7Fnt|$>B!OxL%X8qh1J!bQg3tA*=lgtk+@%)PY9qA1(WMW} zv%<8@12b+-=nuo{Z7vZ>VA=+3KAv2V_Lwm{yD!>SRU=bs(>G!K&Qy`AK3V;-ZIA82 z`f>g*h*gBZoLSJ<#3@*q0p{jN+&oe3&qrQ?2SCVBW{pY@E1F#1+wCRl!IUz+u5Q-T z4qbSbn>%|oKMyzWvz^I zE$ge%(MKJ;yg}Uu_P2({&?oql5IT!h@<-A(EH8~ZJB{QPDSE-aUl_}ndYe-4#qAk2?4}z8Wdyk##tm_&wPti(%ou3Q6!3bMC+A^kL!r~cC1nG4|;t2;3%874slwhrg_ z*4<{!2-+Rd%Wt?(iZT8SOu34~?@x477cYL_GBFg1H9mUjv~Kpo7kYGQrj)~W-B=@% z5YELXD@rq_=wuc->RaVj(e}IMPQ2*lATjNMCw4ErDr#0Qp#*e&Vs#kG^Y7Hv3K7@HFLY1 zC|tC86Z<&fXXe_``p{$^m?W`%u}!=K3M4l27ekn&EPqOAa(osk2jJS z2g9&|5+ol~KsZ97i61zSqMk{74-BQiz#0p+_;-NVK%jU3+7qp*3XU}f zcTWFvH2<&936MkDa3XstaMj?%*Qa{!31IV=+NawR8$X~SbedOwn+9lD|10BwAOG_? zeml@5C4p0RN|g>GK(Zx-b;l;lD*>|8KL}KCr{4gbNcrnDC>7B9AU`{Z+}61A%o%4n zc<#1)zD}+-B|bYx4o8X3Lk&V`0z0(zw6{b+nmJgAfq3dP4Z*NVX8=Jl{MbhG4p}pL zArl9>!~_-iw(+>3AAk4OA#6fyqhBwqdmjqlnmZQprCrjSbqTZnfM5vs&KF~f+Us;M zI`+<&5-6k)p)}V*p{9ClGAvaij`cpCke~w$cw!~b=H$>>a1zoq6Y6>%PaR`?E#)7L z%D^_)(eKsPRmR1Z!OT%S^^s>I>5KN;T$6)(v6FQ4X5J%nnsBh|VI@{NrwFS;w#SZ&3GAeEQv4#*c=?8k%44jNvByQv-Bx(f^>V^Iq$b8|@UM1`2iFj3(yu05_{ZDlo~x22Oij|!R< zzPs){0x6(xXyfS8obe=yVO3p#f}R31l|=bU)vo(~x$RsOrP1qDdVD_xj~-u+on7jt z-cZk~XFE$HlJ7%4TPV-fQ`|7vs?pxJs95X0PNQ-cTgW`xR-1Du7%aC!DrVF0aNiJ1 z-rH6qR@cRLMT1sgIp`kT=@S(#awB3{CwvBVJ`Dj&7K>PW1nBD`2taM|5N+y#-0Wx? za--`5eSYBTPWtmk|G6i%23J2(Hi*7=oRpB;z)ehr4>JqKE>*l?eRyj5+U<~w`KZ$w zbX=77#|czGJ*E6#(aZl+*l4){W|2M{q#ip#NT0T&dbZ!4duT`HRX7nDuAqh$D@ zHYBJuH@+YqX)y6n$Y!w+@ivb&#BTBH`&h5i{v+0YGe@6+42X+t(3GG{gsBM!Ho2rs zxX(rS^~u&r<>tDCva;ECljIT$7eMy&cmH{1{@mZtpWTac=_PiL9R$V9!`KT%ei9V* z&E>1MGgmu$F3epGX0Hj5s}e3Sexdx$cy!5jzporELwaO7;=}CT@I|941~r)^*d{sK zw^P=wjd-HGwCkPRu16bQpG)^`*bPVXs{opRwvnQNW61}$*`8mBp12&-ox>?z>_%J) zfbX1s&=Gx(dV$R-_DefM+z-~|sO-pvS4H(HPsa^LM4x5mravz*vpGK!UH7KD;04*` zP6*ykdAq~-h27CXXJ5=R3)H!`ww3GUy#VmE|jO(<}P1cPCWZfUliL znO3O4!&qhRhmT@a-h)dfD+qVBszW1~Lc1T!_sGK`J|9oIr|B%;4spCjJs@o&?<|l> zIA*Xu2zS$aU6UG+Il4JIn{jq(X}rGjs|fImqzPO$8~O!V+rvIr!|Fd@_e-UphZ|my zUZh*$Db_UWWo>6s7sxR?toSl?%(AM$pH>H!VBE0T@#wMf)Ccd_U&j#W4;Vbb(k7M2 zOrUt_*TJRFJNSPf(O>t3c>wR;In?S0-i|P>bj$-kX80v21~R~#cZ2U;CJCsqfQ;-e z7>v$-NeoaX?$>Z=%1Fo>{M0xf;y0^^D-wTmlm9zw_zwVUaS{0Fiuh-31JSP1Gq8ys zPQ(ND5nO{(Xds7~uUMbK%LNhQ{y$IXUmp|20dC`ed9+no9o7xuqZ9<28C3wWpAX26 z)2W9)i5#E7LK(pU8jm-sYZt#x}9uG#hq7<7w-fDYa11c3PR+ zSfLNRtW(TzU*XKrmGZUZLxsEUs)o+S0MVQ1JfM zP}!*Dam_m8Ea-c66GPwS;zaS_5B&k3xO<$)^E~($6~H0W1{hTZBC3Q$Qi2X0 zFAkUbATiKqpvCTQfOB=gMF;u64j{;M^N7qoTmyg@WhWEe#~uuLf5NjdciPq9LZOfn zxPnbH9SszZ845~bZX5{-N>X0@d!Rx11X?=K0|*#RjK=_M8UP9% zHzSa>eVk5)rYj=TumY`7Ugos$GDC%qaSh>xg2is9B`;6?t&n1*{()(ZlZA)<=7jP4 z{tt}dB5zX9%9nq?;|KQ<_8H5l5ZRAX%V=+4#Q?9Rv^Vy3{v=0FZ#T9Gk~~i#p&psj2BZzc)6lkF$# zEc>u`TyLy2dowDe?3P07hf0)o0vq<*TQB`UpOMB2ha>j!XX(6~N8H=j$J`LK6k*D& z>C;<1wVwLl!q0sm?BcT5?F%TO0&6idWygHyKPAkk;X4rQzfzQrmAfDQ@yQiVP9in0 z(Yrb818)-^U{1EydSz6{R90sl)CEqS|5${3cO9x6L56%Tx))T|)QxlhNPJVxdHs6Q z-Cqz7FVE0@`|7yH4+^!+{jsstKq{;W4B+aiTc*y89x3`VR|ciVRz!a8_0g^&3jd`}+0d9wlEwNmU9 zEA7%Ia1g__WfxMoRL!(L?HqVZ*N zyJ=hknlRo2qm98S~T><0kDwB9HKOdif_;*WTv>N4Wgb zYh=b7-raecYGm0>Xl=fx5x$f#aFOHXM{6(T*~zK#Nois4Ypl;FijV!9em;RD1rH4FCQM@t8q5oWDPA7^YutkT$v>KvV@j55Q1{y0C-AB;e#w zsGQ=@zhbvR&p!*ucm`3hi3eAH5&-6CkdlZUuss1m*`d7L0BHQ30`YOVmEavS5SS3L zfm2S%4juOv_kWGS)s$>6LSKZYC&3~5uOSNUncGV3nehUEqVd7=FheLCGH0b=I+lvFJhUm zchF+#mx|tx-J73uQ%p@QRQrP7Y*?)-JgVXlJqzjDF0XAk;>FZvq}2ejR>D1ci&bi%NQ%@`M1loIKKlDx*xg% zBV`jvH0j#c;fyYpr>hSfMZV?dsip0t=*4ZRq6>d~Z>9EcfNokQQ;5H{1|xS$3Wiao z-qc<>#t8fVq-HJQaDAJ?bv5e_z7l5EhqK)%ThKBnoK~deUMy~>K|Y*q&KDSg>`maJv+ zm_LC(YV#Fsx=DzE;oGGlhcRW~QD45zd~GeS`{exgmenFNU%O;{VROFzM0&Kgf2QVO zCB%FBQ2goL#?7cOyG*ZeqX{8>y+>DNyBmvqN!?>dbp|uj`3M02rsi$C?+~gV3Af-n z`$S;x+^+Ke&NpeP^LbCaNa>@NO%v$(qj#TpmIs|YPu9AUX6mxp7}m8Xn;pdFhnz1g zGglqrtPV0XI16{KZ04H#G&Fc?DSsgijw^hUh+u<-lsu<<;-Mu3eEGQ?$)R!=0Z`8M z1BvvsA%bfb{2e%O2~!Ec$kRR=U#_DX*oL#kHZtK@W>QB zDcLe#Bf+nL30=z5%K1ERUUncDz5C5}-iOAY08;mqg#q2m4jf-?ps5Te#QYaL;~_Xe z^tkN|WNra1aiD%F!2xJkDCtFHbs<=@PO4P!zVJN&&g5UU068TrM+wF^+94tUd_Y`4 z;}75O5^;uZ*aI{aj~5{5v+dFvgiSy>vuTYtbIO|&Zp^Ds@*6iu*KFUSb-MZTQ8f>cV&?m!$JsK3wq|FZnhO>etLB@C-Uu3zcz81J zDY91{v3lqXcCY|kOH;@0kz*5$&#Zb&h*es|f2$_L{-pBg>5Vc&O~ ztF=>Uaiw{w=}6^cXb$E&dSR!H5aaAiq@M(DBp=rwiDMU^A34l=F`FaO9!5SS3ieRg zKu_pba)j$+e;!Jl^f64g%0h3l=)F{a=VDy^#2xYr!f-%iHc}q^R5j1`KrB7y{^JVc ziMBTiD^Ezpbe9!W$K|b0xW`g8;^R}fvCh69Ytu5J3`REvdZftTT!BB0z~;=hXM`R} zI@x3K52*$t6L#^K^i0~$0Lxzw$zUppI#}ixb@$2|Tg&i8I&Sm*)cpit0^d@z(_Y$k zCsT6Vv6*g8>{!`nU>g4(Rw2a61xX%OF!Ux`Y94j+P%Mq*hiXIm_?$=-BY->aOSV$& z3_A=wcXgK?j=v2kITu}X|KPHplhS?_s--`e_F(i@&dR8f#rCzcN}BVJn*sw!%e-LP z2(&W@!8f8-YWZNm9GoMv#Gf`}A;I6C- zzDaZU{M}8suYnnv&n2V}f1jOwX0ov-WfRNufqMFJ4AW>^1NTAtqpK=UBiFrO9e}g!(S}Qv;8HSSE=j01;=9%!-VPAOJTIjnb_6sNek|^YzWNtP|JR8- zC942H#ldhQpp=1Np63A&&bF+o1nNIBm}V#uIA`Bma0eI^`P?{w{<{hEyZpr;_^)j4 z&+yeX={{cA_!(AJ1X@ECEKrRNh@)47#>Z2*0{)-(EN(d>y=97mM|KR3I&R{lWWOgM z?v)#%dgwQZ%!ReF-jMQERwkdZ27%g< zFl5HND*c&$cVL*{InJ7|<04tktM7Ql-AYuSKTjvL*s9ukfE^f-LpYH#*kY>U&@bf6U+0gX5*P*!a{-K<=n_`vj=%WW*{C+aSv|Hw~>(sNdLB4{c z;)7q*FN-SlcQM90-w!CMJF8ewa{rPW{Zmz}NhkfaoQYyMRIkJTuY&1MKEMw>HaU)M zM21BXt@JH13^&_x%wic|_l`~Mv96`>{Jf>6#}CekfRWSVgmsr;H{n7A!qryikaa3O ztzg`A{FWnOF_%{6Ll;Rx7J0fdgzt^%*Nf}o_q@!=Z1>D+XD_3j29E>O9aK&N9wcx@ z7^=xH+466fyvr#uoBev9tjc*fx5}*0ib>~k<%0l$&<^x<4=X0Dh*SXSlI_o5kmGV6 z{3MGwlfipUUq2Q}%%_fS!&Xs0eCgbubQ%t92-zzF= zVOv%=lj9FWyU%daO)XZ!nbxe4i?L#`{eygqO+?OVwPJu)%k~64%BQG(fEk-Wa za&waKypYTyMYULU=aJlh z>o9k(yw|3Jq8wVZ@>rgbVI)nFtneyoBiv?CJJ8H&t#`w>1vS}_gKmaBAqH+CB$CAS zqHLoxZfjB44S^(%zDmYa6+cqLs412VqvMfRb;{X#Bn4%t?UA^sR>8VR8?h^?MwrA1 zMuSWS?Sa_pm=VzLDTd^yV^#pFZwJmc%*3gnw1wOq7)0>qCjpg&?r93erP2T1#*Kik z28i6O@qmm%6(xja>d<4Aw=`?Kw_G6(y9d_H!kuFgl=%Wl~u56gNjhh4s0=Vej0(A6c3 zRg=>HD%=1)+5>)`(rztc$(*QR!}4j!ZyZtt&Df zBS;ym1Uw^Haq)eMx3VVG(jcrLMt&w7rxb7PbYDxO&V=&O2TNGJ7U85G;%ar+Alz7QJY@{sJt+2fqJ3+LymUPzn~d6Eu}4r;PK<)NkS+XWnYz}dJ6c9rp7Od zyT}Rqr^wkavMGr}>p9H6%WwRr4~GwjdJL~c%R4!6iDcJEC0KB>1r9NE ztu_90&Eh>7S@E)cu@Kb#R}ao?V0ta#5Mi{Rqgu6jQt|klw*SqxkG`Y4+k13JANA$4 zZH*G63cr{c-j%*~R>FN!jg+Gbt(}PVY~N_qPA`?QRYr1G{S-ayifH8(yW#WXIMLoxptTvF)~r634q@P3Ld*gTtZ{2xYUk5w7<>x9d4m)boF1 zr!TXNppNwsI)c5zIs})kKMYcR!yFMQzi!s$*5*rW%W@9OJd)vYMxp;*GiShc8nZ7Y zSOI*}@{bwgfiv7u;dR$ zyWN*7z5?+{rR&D3wS(p8x9K9Wx4#)GeWfwb-4TwB*H&9D&gnF{RgcTc`8o$?_i!nIs*tgJF6gBo?9+43tEr#a-dG~@a!F%;5Pmj0vCdpjsVt}-X z-PI(Yp39*XSKK>G-82d+pEc0?P|TJSqf+&XT_#z_p3({wh)I@nZd!$uRHku^Y)olj zyZz${6X5h%Zznjp1e~i<}pN@jt39_xqQQ`PMD(n1y5UK>lfd(oMTGvOwn+F3(#}a(Y z2;^?y%LC~B(+|*E3}7n(AS=NT%>Vn)xIg!o(n^Jx2P_=cfVJi2=4NI$bJ7KQc`(sb zh~C2+dCP@UrdtiaP&tZmT|5zw9d8&;ppqSAkvmAcT^F?@C5U2WR8M8(S=JEc*J zD=rBshtIM~r^>eol;Ly=Ss<9=FO(Zjs@pk&*=^vP#WoYJOKwDlgbnJeJNqh6zj5d! ztt{oB6xo`;cD8`te5BF5)CxE(JDIhPwti={0ZM+l(&LgKVCg5?On3a~=)(R>w0lLX zo|~pxNr%{!=zEEUdJ>!X@4G-hvG8=4xlYixxa%->Bo25D`zVfX>+sG7+t|$Cz*fU> zVVg5MEfkrV30{5N;=%tn{xBdZWl+|F!WfVe#BtW>5b@~2Welz29ge*G7`Ydu`47+> zNpirV1X0MB@5g})P7qOb@IHbDBe|b;bLJWRG))364MM-c3Qf!CO7OO23u>M(pkF$l zo3}#1E!V4yl9ww}>(w<ru{6C<9x}%t zifl|mVx5|>pL3O9{zx+|`N*l?v=DoyN$Pt*9l|YlMMFgS9CK78*PYGQRa1TAQxC~c z@f#ow8nob8w13>FP4*qJXUsMgLoe@mi_B)nULx|7mRd}Z>1Zr#4EP11m%f3eZW$Tf z)h7c$KIWusbe62j$&?#jo#1@ria2l{YHc$xAV zXgqf5(WrW3|0XA?MG)Fh)qbLk*#!XtfpzqII@p)*!()yZi-7oO2 zE?>2BzC@QYPfhrJRC7b6au(pSngUJebRAKP@!E(RN#pO17JWuD@Z;2L_e)_GOo3)&>K#2-#t&PrZK|Gq+#eHqf_UmXJ3QcGm_s4HA+ftF_QS(fJVDy~ z5w-X$6%CW@gQt;3V&)8=5)Mp!W9B+y<9Bk)U*8Zar0IUeSqTRn#jidctjr7oIkTl| zUkUB)lD}k~d>1<=88Z>UZ}%n=kX2trJz5AsZgZ# zx;p5mfo0(+JGKi@x4hgNe6P-j^6~qfjvM`}lKN}l2(Yc7;h{Ca5)VnnQM7${p?t`E zFiMvg2@)tykPM;X!<_CZ0q_a~n(a7K#8WPV2&#>MNF}C#_8V?=37Ay;4>J9We!;c$ zabF-%%1%?3*C&(GUyxmYCObE}g6?-RLyI_OJWGd#T zn`}&R3S+TT$b*M6^K@xu!>sMTV@@qK8&R@j>ss`~WD)V^B$d8m4bq!x#k1;X?=J5} zzk%7yUCLsq3_l(-+EcgmbY8raJ8$XX!dqM=exe-ipf}-PeZsUWv!hzc>3mh?nC3W1 zMr2}NyKU3(?gS0;I$qZ-!pHT8-o5161QRNHHF>%`$!cY>9}*WuA9n!j$)?pB7Ie1F zsFC+h?JY+Kc4eAiA;s^>n(o_OltGoHf8SGfo6rTE=rVHAY;mI`aKcbzY_MY2( zbJ~5faCmiY>xURx>(j>**QMff&9HOI&;rf=&^Ivwq%(oKt99$-+CaJK_n#L9Z}0iq z=%JjAFQqgB>U3Q>@9uk|kA{cu<~xrNqfS`<#AwS2_d&+6uuazG zq8zTdSJ}g*5djlFv$AnmOYumTng?Lx=1Q@?Qk^s(iwm5 zx|PtKvwyGZ-a5Zk*mhTm)^x6 z?{QJf*{IXGH=1F^i^X=)9$Z`R+rCB0?c!Ifd~LCK70lya6cbgIs%2*ft>Gx_S9!XA z#j;@rD3h0{US)@BhKHjd0?Um-8T3cmGbUOCs${!OZ;C%qZ+1mW9tkX{ZR5jF7YFC? z$InWPt1Rw%ZKljkMa-K~8%~dRUsDSFcn4UlFdTg1BPb9%3h?PMyJ&wzKlhmfWxjho zSSLn#=G;_caR!C$ZcW0obM0&vF$DNGC|!rbtq^Jg-KrH5%W9e_=u1ULGOO>F7Sfc2 z;B;+~{YX*ye2vevnus2H^y9OGHY)e&E)zmA<9zu91^?{?gXSqfVsh3H9Q_GKEpT-q z48w3bfoabR=@Ar91MrN`NeL$|z|Azl1`9GtmvDGY69_jz^Ek5)4|p}M;dZpO|J7Z> z0Q(Y6+++wGC@=uT|6NG_);Izjhx-Cf0Y3ERuK>=<1Rp1uZmJ6*BjBiiWGcH_egVJ|k$Igw>f8y|}zK zZTTH_lT<@suXYB#_Hq_198x42$s(V)I|FRwNX8pZHltdjsP}yY6I~rUMAQjJ>Kg=H z^f$)IAmoLvXkv(WM?bK>SXo1j_&*Oy+5DdA4=Ul)a{)2b-iBCnW0}@&*T!J z3c8?-c64bd`?qNy89f1jDK$THl*xe9sEhT0)ZozLu&W0%bO9ACIUJ}Y$dQ#NtiN&s z^pGwFx6vR$Wffw0+U*frXZ#KLSuIO-Y(@E@i;|h04=9Dwg;E7NLDJNx5qOb2nKjJ%ie;eRf90<(Wjzul%_BU4+RJTW<?pipuQ)3Z1 zI31YTZ$H$SymAuTdQ*ZkpBQ#_7Ue2%1@hS3Q~UT2-=85LwII zq-evh@@Eo{+v;}X$! zs2&&vk8W$N8Oc(Bn2Uw!rM$FtkQY)vFdejU!{-mA2!_9H8Ha0yJPz?DZv9sKN)5KL zWsus4OMBrj>+~~R-(S)&89J70KUR^MZoss~&>Yqj^iV&i#+h#^C?J60(0M_*@plK9 z{Wr2A{x6d9m(XY6Owqyr2}D(4ry607*R%=zVZOZNgEiUrfA#RQKE6mr{oH-FN4Wm+ zf-l`-Y%%eW2dcOAk&3FOo`;-qAn@%O_kmvL$=1OBwb!>DzrUCqomh-4W`-n1W-Ux)GemfgVI z8I6T26f+#y6Xa5Y+@&4(EbV?_kJ=M945i5*Hc9r3;s}7&sy&+~20G)Gv7d{L^{)yN z#jNCia0eRDv#lPwG=dbCOrJ6Jhr>U9YPH5M7 z7Sd8+P!9nxnhy3ju_QPL2{rV<*PyUTi`4;(>Q8{3Q5TJY1yw^o`bs#Bx;zCq@=~_c zAZi|98@dikis8W8p7)=>_TSG7x&gK)>-@aP*_i|T1_;3bt_w&*?%1dtQHi-cr9eS0 zNoE^|KfWeP`&s2(H!C9(Rx3de2CaC(6MS!?g?zcJjPCjK*eU^0F>d(9^!jtbM9Xxh zI`Ue`sY$8|)g2KvO!!}21;PoAj@#}|&j(?4Grb09*rwVK9%{twvDforIE z^&1_#53jSzx5O@-ND@j)ijJ+&!;9WO5C-*Ls;Ck(J0vz)@B3ZL*5iAs!fGEQ2`ZON zyF!`UMn!^5XPr!LznF{wZILG(=h-rR#^~NID#SXDlw%po`YT00_Fe1xR?1)b>!k}< zpC4ZLqrUq{~ z0w;=@q|4njr8Wi3YpNQ+p*5qx`86+6CGLTumeW%m793spYuM8fT&29?i3elYq9Pjb ztT=sdn3ZsyaGjBT$;$~WN%-eiM`dj2cVztCckbAHafxqoYb`@$Cc{@NV&ugu0yAh@ z#3qkDAyJQH#y_S^3uhnEp|-S7vc9voT)UHG0I1Y4tZf!eU`UfW3B?Ypd! zyKZuwW*--xD4zUcNT7VSH@-|&zZgdOb?YSfa{^J+XF2~w$x@I>K!MJY-!s}3*mJv< zp~@O%SZ5fd8h_1nI04T7^Lu;Pm-OEFj7*l@iCseJ zknXivhF{c8XT>$V6;|+!!}tTE=8V|QO208!0~`vxYdB~wpFy1YHu5v&$zYP@GIOOd z1&GycjYYxrS1uWT?AP*VWz~ zBaNHMzo>szoRH}!)TCQRA3J23OL!e8&hA$7f~b&_PJCA3GbCN^w&+Q8rXCpKd;z~h zyQAneAQ%e|%JKw&p0*MI_zQGigOFHGV}g==imWYw5mQt^oHz>*zKi$g@4{No2rPN;E{yh8I zd(@qXAY0EHc5qP(CC^05zTzJD7}|u0U{hZQu6s#epm#usT6XH-p4KU!m> z16PWobXIpQ7h7v3ewQ8D>C@%zpOI3gZaqq;!k?)Whv~EHP(#v}{wPMSC3c!S@luA2 zA{zrFTEp+a9_cktgp$s#D}a8J=kQ4dbM*G4d|&1I%VTNu`fVGYYdWtNZ&V2}wnc4Q zj<7|~Xp>cEMsgPw7$%v@cJ-}v*szHWWNC8gKS}zzejvJ0P*~wTfibOl0@sWh=rm@G z#E2J&!0QsJ0KRSV|L2m&5dcGwr@T`fctx-PfPZ3#J1fsw1cFHjDx7f)iGgDc$6%&h z#OUz|o}q~5)}VoME+LU~qjQ>C?vM!oP~Z zpMSc%R%I<#52uqkDyre!5a{*{^}JGRorx{Tc_5Uevb&s)gw4e0Z<{^VD}_vb)=Pj+ z2|7q6&USGeRpx{W2j3bEy@iIls3z*|v+=li0)~^R?^mS*Oe+(qh?{+6s5icrW8LE_ z9L6NWwbxd&gm`iQf)Z!wUixtjC|fE>%U1}t7m>`!E-L0E)Lv<=iX%6wRj^K`K9B>I z7LUVH!$jd}SwY2?W>9m5QSECfNutzTU6I6r51ku>s?q5yYYEO-Dnst2saj&Ysy&?C z<(TfW|9MU@pL1^yhcnR~RmNoBg)QH668_z%-s}~sSB!qvQ2A;D;WUwQ8_uGurzv!z zkNyMMd)Bo;A57}BTzT#Ftm%ikZ#T?v{HSU8RWH6?;Gm5TJpG)!UA%?KKcUpgt5xYr z4VCmG%SjYSpr;4NHs`rNE*Smaafr|qB&#$snw2I!c#us`;&ya`b!rqkEXsIqBxCtr zl&$Iy4Qz9T83^63F2^5;CACF0$7xqXu^}l?Qv@MS2Y*}srdH76OS5EO_ z`eNeWqnXlvKHygBZ6&S&dE6iaXAaVH+|WLzTB7<5_?1%6H~A2`orM5p=ktZy1`|Li zic_Akp>00}#zd6QEX-((4ql7FWm3BU33d)l@w8!aXF~36I(#fTHFpAr5rM9!fqwPv zcs~Ow)?c@K>Zk9hFYSjUjBIgn%n3$vK^LVVAPOI7?uq%w4^(wNx$oysTIR1Vz9Nj5r`)L*w_fJmHq+P4zE+_5prN@ z0!#G}A+LXV`V^LC;98n=KUPCxR#K+&NTMX6)I7ZB0 zi?QSUC+>@U9R`h{C)NKeo5cJVB4L2v*%Zx$&v1S%D8duZCn{w zdA?+^QBF{r31V)fX+^9JGaYXFO!fjd*%eUY0xBGUtXtmJ$*};Gt=HyM65V0hII24Mf1%NrBqR|jOxi5eB>BN z*oZ&LRpuy!ZSm2;QF%aoKsQ6M9#*!e>5ai&=yHB?t6Mj-*jf`S&pmNk$**_t>5=zw z=U@luN6g;lx5-JMGk1H`s}}C_Dsk_39haPElUvj_phTa!;hk|dZBa69kN7f^EQ5r| z4Aak=?%dp^hO4CJRIYcj3O?AUtgYN0J+n}Wj~^H?NWoa3xFpWQ&db6ao{j(D4K~P~ zS)1+;+V)}cOgO96kz_pjjb)L__0H+g#rNy6wFpO1B#Z+wg#Dj;_44!fN3u45ATzho zLHh25+x5MtGQj5kwx2cleP7tK?1(Z{TVcF%yrPdydBF|&4qQLP=EK$GvCT4(Z!}u; zgFzzi9CmVc(@#aFH^}Pag87`{csGAJi;fZ@YAd|gnHgBT0vO^#g^-5~ryLg}X(zv) zB}7Z<7<#Sjyzdtyq2C%z;QZy`#l1u_Q+e##gm$W^C@bhW@b}hz^_yg3MlC>epGo@% z;|k2cDM%E4*@e>gB};vtPpMvc9Xx-=S-1Xu`&eoOQ=s|C};%!H~-S1(e}?>h$8(niM$DJ`W=+)!@yos5O9#|-;UAB#JFQEkv(wuJrg zRfm89;>S^i;YmCV2ef(_1QXLo2tEVr9vF%+yI<@mFwx5-0sIyN zXJGP+0A{5EZU)GVE+8HuTWS`E<8s&3H4B9y_DL{bi16ipi=h;0IXh$ZbZ|C{F25)! zk<(iPUsYdq2JCf(7)l`%1Yd*m3#48DKh5MNQK{wRM3C!<5llin85yP!b#w#{FuAQQ z0@nHF5zt=ldwMI_$K0?-n)YIq?s*FC?R~}2>6y8^&k4l)5L?Rj9~=_HyCo*z@b9Jg zgJQocN8u^DidKP_Pc<8M+8Y&oS_fg2=BCP(aRx8W!-lt5i68_e zD6>j|JTR2sQbp;a`%Md|`Za1pC4oi@!sH&8Qz)E&z}xa#=tvGpvIW|GS)JQe<|^-x zC7tSO?2Q{geyh?mij}W3)z+I!CcB47rwxx>$PPo*<|br58u4u zgNe@6^k;e1a|fnL@!V9p-S@HIx=oS_PqB+!wT2Ju5U^1W&Go+0^g+Oevqdzwa6VihIy)ylTG4L{BA3dW~)b}>_q$n#-0vFv>IZJd}hot=mFrD&B-9Id9 zGWoc5KG^6&RVKQexbNM3*}`Wks^8Cr1si>YJ{$Tc<)1)441M3UQI5n?gwwv#qQ6VFnL#hG!7%OI!Ro-79 z2z$4@lA;fI(o~p1YF2XlBg^;^7pN31&)K5+Y{|ph=XPA*SB(veOrQ``5eO=MQqpD_W9Yd1902UZttM4?ais6Ai zVg~B}erSOFnOILbh;Z$UFNWI0p!%wESVa$0=5!z&-I%hr%Lxr*thV43Py?Bz5Dk#9 z2EoqKD8>QAfCNUMngSp-K%8EiNlFLa6)47YMWL(g42S_ta%WQDRLWZU@^MfABb7wv#$-Gf+&vXqZZwk+_Atx> z)xc6*DY5sZ6_mQ~nJHp+_8TrEz(8F)ULy_ny`@K*Vm@x9;Y*>b=Lnj73Rse{8UeOl z0`esD!mrmwhdI#iRf7pq(M?Zq)!=Q;(E4uT-tDg%7p&v187{IXY9%W<%ggN)&pRrA z81-CGRv~>%2PL0J^$I^OAl1_X+@%CKHbUN z4Por)S@58vOkRORfe{GNQQiC&(knX(zMZunDJwKEw9b}6Mnw*^bC zwH%EGw}c`h9Xg!okfA4$1ERuN<*?t9aMJHEi}15WRH9Uq6q8f zdBwd1&sS=N*P*J4aPjez6`ah7P?fAI#OrM{oIs?s0BqA*)y~2L4)acx0q4O|{ zkZzAxDguXy4SU?9ij*%7blK7FqH=3Z9Je>k@LF16TRdwJqz0Rh!#f8i6w}gL#7g_M zZ%z^^x6%~vh+nz)U?rdPi1O@1uol|2(x0UJCe$#Wl+O6|o!&v=fTi>k@W!Wq(;fT` z)w?(!hhpulh7Oc591;#Yc*g6ZM*cvmgQfZg8@0(=(c+VH8TbmM1LU7mP3k@h;GE^5pDAByIR2iSZG3{MfhHtKw8mDP4H=^ zUDIXeupNM$3qY~c-(&C8_Sg^I;ky_{WlHl%_EBo*K;t6Le0%v%eE*^@^D)E^M3D(A z;AXD}BKI1~A4Xm$sGQCDid-2tnd@B|(pp)yy@=ll46Ct7<>ab8&p@Yltgi-4>KE!~ z1@ox}1muj?ag+~oH~hF|sCQk_*$7ATo_Cexi}@&ZkkrUrSWp@i4pjO&m{s>ODffm= zT2k!D<+zIZJp!jIoD*GB;Y_MS%z%}!Pe)Mag=1YB0t!Gedo3n$RaNf#w$i23=ZOF^Mp_tRj(Jh&VDqB{I~3- zQV%QV%eYh1*sSDnjrMXtoWQ~cw7c%8ygcc_(mzB&=7oSUAb37h*fBZADGaoBP=1A% zlKkZBW)e|DOBq#%b(H+n1QE>JO#8C(8}CpmG>XO*-W!pa11M3mnAY_^X2^ea6*!e8 zBXCP-G($r|$7Jyzw>T_Grrt=XeQ>Skqj#d^+q#6H$JL((KHdO&D>WVgu~Kd!v>NKl z%K%^!F*FjOUX1}nbLEvr*!l2zjSTMdH!Z3~v$jmAy?3(EGePS}|885VbL zGaPxfcN<+jMOsjUbd)}~QsO@u9TuLlo_S~n$<>eZRXm$nq=VS@>y97~6fLS2NvIe6 zjVx*>5N-^N;!3OZb}oVX-=73Y53@2Tc&(OchVEyVh6!$ypTg>2tAs~QRUrGB@Ivow zUI^^fWvvQEc0)X~@7uypMvX}g^sWn5jX$d-oX8hDI-_BC2Cq%u7G}l4;w%EW#07#N zNNfhQJE+PDIOf3!Fnrhld|>jn@ZN&B0?}|f6>uHP18#(+SOmDG&0tSqwV3nxC6B%@ zLV+uv2V$*~<#NZMB5|tP?!K;-cz|J5q1qOkR$Uy+Lt%W;E>{D4mbwCMXOJdQ{z#DA zV5nIZVi57wrkFU~Me+{oi`H5~;(+em_u?WuLcFSTLS~wWSg&7+RnXQ>!kVR^%Yuk; zDMO8yRS^u^A6n~se!5RJym%F5aW~((b_e?6xphB+?Fs&@bQuf2Vz8(-8mX43v|*Z< zoq330wfE9u+ql!WZ91YR?GpRJ%Fk+rv95}!;dr@z$E((FWZ-H~Xx;eiaFm6wyTDOL zFXh;M&OZF9ItwK-X)2lo$~ub1ZjbkB9^82`T8dAURB6g`Zd{C8LJ%zhxgUy)K9wR& zlr;QThUNR?TK_*r|eYWMF(|dzxz!6u~&joT{Fr) z!u{pf^pM?ZzLP_M@-g+`TSCV&&oeGo7W#i3N^^;X4*q6}qR@Y%mPF9OpeWjUzvbVv z=D$CmOPr_3I?)YdZ5y6YA-qf#S~9UsferP{ooOc!cFKL+a-Ko=N%WqD)LwVq;FGF= zlN8Z)kLD;|CE^hN;D{b ze$MDE)55s!ljB6RrSI2e__3Fs<+X+WobU;w9sJ#>Q(-1z^EvczS6bI8B)@IeFMdn;RQ8@698H&rG)a>!S2D#%E~kQLp0$|h5ZB^Nx`tQWkpW^WA}5{{5hFKT(D7&k6!*hD?H8`@h`Ajj zMw=(xmPpIacE+#h;!b#Ip{rnDGV>Rb`*XC1_Nh>d(O`8|zKO-+K(E!HkhBn*82})% zq%~-DI01DEHs&9L`A7na6HcJh`X?O(P$^hIgfPy5<*A4bs1S^(?~WtDFmX1C*#Xq) zso4#ZiHY;l((51;GakaUm=0nvpZ);idx$Fy=Hxt_19_(qwfmT=Qp_BC9q`9MGx%5M z@;`eFa9m-ywZCEI_ohUvxQhFP$6=MW@ z=zE(|9CU{WoiYapYAOv#U(;zgKVv2s%xRG@dc-6pZn5pYFB6z&tf4JoSZGklJDMJ* z6uOQB_jQ1N0iJ&PwOW@eBP}<}so{gfQzLB_Zxb>$yW99u1K!G7Tn7jPYgj)shgv4N+0aA) zB@%Rp(>e}|kQ>PbM6X^=wg?JwB(0W!A9H7T_IG>U^oS&B^-r}r5>ZZ-xbgL{R4*WM z#S>xr(t)pcX{JU_bM9mjnVmOI{-8>n=G?_ioIp%A&YGUHZ+jQ2OSVW!!&3j!fnr?Z zbpfb?Q^t*Q?3Z?V9`{TeItR1i_BotePtlf-d~D04wz2$*Ou)hqw<|t0bz)Zgw~+>$ zcUFE|{VUHQH|&aNEdo|tBTAyKcvS@2{tNd9zTC8DOO~L>OhP?xehytGS2y(ZXVdXC z{>d}9irg?PkYv685Ohm8-4mUv|4=Mu^n=i`ANw6qnVfGTh2s0F@@ITYAuS17aq4B#qkG^8GG90T&(?9dff$qpz1Urk zH!i^R%dnPq7}7@){NO@>u;HTY+%V;w8m3*kxBd%VmU}PIg?Z_E{_txcm*O! zP_|LqQ|*Axb*h|38UW`md4OYr?6ae*ucx&mHHZRErHX4fPK(je!F;wMes+GuLoGuT zRboEAVqAluNb}Hc&vb?TsSJOxXv?E-`S03*t?#W}AkBf* zSPY~xe!2LgU@06`3)G`E8^MAD5(iSN$C#1=*%IW$%7sBdw;^^)`fT17DSKq2=pwT3B|ruF}S_X|@8-uHs3dciK1 zrBPVoVfo3q#(AX-!SGT7S%10lY)+MV6)%NHeBi~Eb{=AH1+zi(so0X{x3vugg$OkX zVs4WO;q9`3+^mrUv}aYTD&~@qi>;Vc2&!H(v?&VoKZFay zEIX5)Vww0o*}VI>;1MY_WlZRya462jbQqTAC!S?#!MT8{sP%X8Do2$c)0LFCx^U@9 zEx+YFKa|we*Up~zPg7Y{C@*+KkKB(q)jFeT-cx?L)(}a4Ojmq279Wy5IdI+|pnCo} z+J9hZ<5-3OSZ}_5^;+>5);d}Ma+lp+Tf4hd1E625FPB|ka1yZ=ChC4?IC zUg?^x*RrvRjRC;OCRSJ8))8FK7*!X5cT;M~I$@l|*z!|JNw8}aw49uZ*yI!`0EQsK zs44Dqf}%&AI}e;$xG+&cWO9lMiY5T?4d;6Q?lTvP5{Cz3C$Uy@JHFmLaFQJ==QXZq zoKy_mVM`E+5)Ou^g@0d#e(|k{7>5reUfneozG6aYkS@J-z&Rv0;5lBWE@#{N#{XM0 z;SwL>%2k}gKvTD`T_S_ux)aTOSzwxTsGz>Nkj&f z)^S*K5KgR7Q}ue{b~uO_GuuCqN%IF}i$t^s=8Kf2O@OME9wQaxJ~owBQ)2o8sdhx-t^qlOF>h zly;)JQ9CyKTD&_sw!h8L3wz!sfGlXdyGG0t`#pPLn_lJ3Y4Iqsq4IUv$xn37-fY)} z>|Wtia_IvZ59rnK-%GDTkosrmieY#EKuANG{G&czaI}mbsi^gn+lxbfv&Ehx?{B!g zOPL8y3Ooz}GQ{jU37GnD>32Yf`_f^i%>VV_dqIs7tyvoK8rC0ogI>#Uq8yFbj>=@x z34*P1yo=3z1b^aU4MMCDH0PTBCT)zNqad%Gb^NDjmru^N=u*-6PYTbwAp`XLl9iNa zOJ|yB?`7F%7eW&)vgHb7Yoiw?6b#8q3tq=89u;bg3Mb<9dC9iPC=Ua(HjJLJIaNF_cRw}iiTCx;j6k+zL247tIwW3NqwCjo~ z(~XU^UpEFAOt5g7bS?G;U_A(N{fw6zPFG92g#m4B4FCHg=tCqE3V{;_!-aun4bZ*; zcs1;JASJ>Fc!4-*<^bXK06GW(Mhdgh`B)u@#CYjb9b&+}#R73-UbdoO_)P#MV@7D8 zcDxD)iz*V+_-B>}!~Oq~QDSI0DV$}$u5<40Hu{$F zA4^86w#;PW_!CC^>?rT0G*DGa@y&Rcj-aJy|8+d!I_zSGEmjbIHgaAfLpbf<+=)yl zm6MspwafDmU&%BikINCJ=e)S|(Mx$-*V9Mu4a%6GrFE~}@$4yMh!Jg=pKN{qw_Qp@r6oqSZ!Y_|+!Oy`>QakHI)9ea|rONGoC&mBp@mdpCEEPI=H#785&1nub)7Q}>J>THO~3)39I~vl%aEu8+00m3t>04IMjl zQK$1?hOsHiheLYRHa}t``k{k19%v)liaJ$qgOtY$51Ma%Ed~T{-(fdsmjLE2HlAC# zj%r}8xCTPY71=^LMeIkuG?cuc z7DJu+GKyvhn>!I?m#dUK&n1lI%0M_K>Ikld3w(3A<5>3Amr`*oTl8s0Q{M(7FKsbuaDV;~V3kg!VJ%y#Kd zc|1VZ3<($OHjR;^BOVDf;As&1;(t_n&x1p)M^9zMWgy9MD=7U z*6Z-N;`s+J;R?Uw1KY?zl<8=HED;h1_sqAK6;%<*xi4g{;~*Jd96(ez(#5&laxw3w zd>g4sv;y0To$t9WI`K0<^Sy3%WE&KHuxF}@PFzxDAq3GF1H*P+%3LdG>OT+7$`a;Ahin)2PbBmG@_@o3X>D0WZVT`EzXuJ^W^?&w4r zsJ}GCe+ZM$%Wu*kOGxwL=4bIAY$ei{ELlYX&_W&>Fopm{$YvD!` zgF*V-<2+SHS~JhQD{nz-UcZ43u3UPLB=H>x?zU@^-#rrw@X3BV_$;ODK2r!;B027Jjm{E{J?Ruy2i>OYh)8I?SCH z=atTCC4DLfhJ<x;?O3X zD(#I{F7AfYL`;Spp;PS-%=r&)8VbGT4D}h%Dv*WgR0LHw`XyMkwKlItu#^A`N5}zu zN$QwBDv&=3G_Hy?x!CF08Q=?bvq{#mfwoAnM__hDT6wTWbb~hlsW`pi^|yezYZ8nk zV1_Le@#8)$GC7+JMYh)*9@A!KGmp9Urr$b0v$DlM?QEwp7ECIz0wF15pNQ5cPxqz$;%=f*`EBO22%GslI>1>lqq)=kdXS5NLF&E9Yld$h8KQ%fJBOb` z6QZQ_9ZKX`@rSl2-UNrm`PKzuBbY4NkqQ}C$!)t&P|S;lun@owb6HS%(VfpH30x|u37^b z+huhS8y<$C{C7{q))&yz*ThXs)P=+00KGwhqniK|C-&*#BZEjTL4bxM02;0YC`wSc zM%W9NLaGd!Bo*GlXAlmZOyu&;G%^=9cy>4VupEw);rY-s{-~Y{VA>|aBDUfwjQLVV z0s-zF6|HGC4ss9oT(UizIHk22TEp!ccFov6;i;~`j!g&M+Ia$Y=csSzKv8A)&ErxM zyHsAEtW4#7Gu7*^d+)+Cf)jCqqXig(&r!y4Xc-K)+sXVWbiyJ-Z{c1%;m19)=eqyL@krD2)Yp1m?_Z!qAgAtDyr z?m(Wy-?h~v2#lJBxKZ7qWfz~BYNv{qOm=;U?YF;-Js0@Ml*1md>OC2-N_$qGYVgRa zoEoR=`pOhMegG3^7+>s%|GAba46(>FmoN{-s81n*N`G#%=mHp(&@ z!AoYxS9`^5pE%@cIYD3L>b+xk^k9j<`X^85p!g|I7ao^3B>U*x(Eq;qvxj4@YpOW- za-fe&q1-?%bV_=cZ8|%IQ;poGaC|9bbYnS7lcMgU-@gw6Hm$29#kkz{!lEcO;3MD^ zQgQ^dx84Yjr;?NAJqqB01JocJ2-3g-$8^dL=&ZnCFxRvw2A~jqbxd?HNX!R;SsUFT z-ooZGC4!;>n4a+1fZXFcxM}~*5ljkag1b^+kekb49*~az#CKqKQ|Rivv~$wo7x}$% zsu4{40af{w_mfUS-KXfckG&JWa35M!{p3k9exuUI@&b@|H^!WM_kzlu{NNUao=%>0 zx8FA^=?V0ee4ni2e4I4-g#>B1?7F;DjfPy-bOG5W87Gwnp;Jnlj)?D58Cp5^dGvUBb& z+d)3H3-|4b7MvAL{m$%LwLpnt=a@+aIb!HQlnyCDcYaC5K4J9MDbq&Rep^{<>Rk)- zn%aLRCtr4i`q{w*o3V^*;c@cA{n*w`#v4E!?`>(pij61Uo0>)KyjQ6v6hB<-@D-jE z>kYc>Z86>fl|m~z&0;;9)NoF3RpmfGOio-b7)ik`iV1!Of*GeaOxf9GuPKH@0&ZQ9 zH2|u6b~XRTmjl@^ZfpT2B@Gl*@!S-Ea%iRp?qlhcU>}x#x0gZmRCkfT>t~1CJ{7*> zxUj>)Z3Us8fbE}VQm9wj^e4y!Jz}A^&asjBS~<}0>-^$nUdf3KPu}h3{DBzQB(tal zQmr~rzNIf_EqqjI+fgR}94Fh0+h=!VEyY)Yx=_l~)T967S|j!MRl@mrZIA1o=A`z5 zFOc#c3M&ZLF7YqkW@dWv(k@VO@e|}@lOc}mDBQLByo_Rz^{E5$aMcQ!xX0HacPhnl zw=GdB+N|jAtT|3$@*bcV5TpUY;oQH=LA2PF`7m+0$A+D)f_Is*^lZE-ooET}|1ai)*guPS#E|=C@l4`{-w7Hw*p7$!mLx z?%Kd_9Djh<>@qwMyxyAsL{R9;-E`#z znP{wV8bXy=(E4*jG4wDPAKkyi2eZI!Lx-(cRUk>RK1K6O+rFK&g+U)}fQjn>Ucw+{|2XYS~Gl>mG$IMLh`GF2h^a5LQ6 z&59jzDskw$bQkCvueIr;(Z>a2Uf6hd5 zroHG+KJVBxnIZ3u;}KX;61tOEk7B(ZQ-omGQnlFJrty=%df-+*wXuJ~kyj;xd1tc6 zIKY738Kgo~&Rb419Y;A4NiY_Q&qGLsm|Ei}(d_17F-NE0ZW`3L)W6FAv=qTOIjK;2 z`)GOrf#D|LhFmH!!0~u_AR6nd^cCxB3O?P z$b7dxug7oGbAn$zpb_Jomr???X9x${r0mKXW(c_k&>K*qY>$sW~$sn730 z+bJwpX7fB#M#$2isXMKzUnm5&ELUABMf9t3o4xab8T0Q6Dq$m`FQHM9sXOEB`A&Vq zLw>nE5Nz^c2^P*k0i)#IDmx*>m_OEJ^*evy*GBL+yCW&>I@MDy1lP*~yD>|d;zL4W z4v};xkLsTC>++QO#?3`Ro8QRv?8BXiZ;sf4!w%dLoX$;vXid=xhjL25IKyjo75M?9 z0PdGt7+VM^DVvW0-&k;^fR8I<`kN_KuTyjtaWLCETQsPcj_?IBN1C~p>mCLzx>SP~ z!J)+1BX(eRB)1XdBID`+Q=g&@m*6EHjAaaqh&E$+3p8nNbr~#%v#>l6f8|ZqyK9`( zyKDY5ajmN8CCzf)N6+e8{pH7IM#^`Mhba?T4os@b-te~gl>fFRB7RKyt~}Gwm9nbC zV#ZDjFQ9O@6t7yqVpB@4w1V&g$$VHTQ_k?_okP5YhjJKnm>DN(rpa{HK_P5dB>MIP zL;zXSz3M8Js9q0FZELjtYwxM#a3y8!ZH34Ed3H7=YF}&MY>66WjUfP;jMzsd1bW=| z5gDbj=E!>Nb&$AiN;;V7z0m535*OQsCJx9|G}L6P?Ajz#A0xin)7v+c*bfKJz~r~h zJ->G6H%EGoz-Qy-%_xL|kn$A05JOZTseOVVx^A!e0s7gJ_~GE>Rj%*5Zjj$^Q?647 zF+TO9JZnbRbk4NL_@3_a={zkst`TlamW;JZAOs4&HXa<5*YE8_;psf0 z)N@s(_f33oz09+!UF{_|b%&;NEx7lz(C?hQ4@V*Fx*&PCjC8Ig@=WU@5dgQM zzMw~Yuk>~SZN`#u@&%cs7=@W>kCMA>TtIBX@2&hFt9QGGuttrAoo@afc5&T_O$-W+==cph1O(&AB_6s<1?+a#19jylaV{JGQE@! zm-rk%oT?wm7QL6JI9U#sMaY*-E3@#6V>ip2CA|bz)O`QiF&FzQDYWlFg5_fO6vtBmjo^Xi?yIfU9{H2t)ERlrRoe z5Qf7r1NszzE&`mPmxazLddo=wVyL z=GvQO$v3D1KfLjD@g(b~FEL1o1>`bYSgl{jOJItw{=O95*5!H2F@v5rVAd=LclY?w z;l9oEZ=t0v5T$R97hZwvoM&zu@tx&Sm@=8(h97p@(j`YT=$Ov(Y-8Q_Y7fW9gUV$xA9mW<10sarsm z96>BR6T*gvanWIh!4#n0(;H#Fbko5=12-4~?PS2(OG^73_TCvRyH%8=l#f6pKcrv~ z{;soD<=sv#R@%0SSMMu-#4$8)Q;t66{hkZ9<90(L2}|Q<9$0#l?cO0wh3*jB3m)hQ z@jmFQ2wj^KL~8xse8?b3Y%SuIxLW^VnjLn~+|Xx#&i&1u2cMmCttq+~y3gJ9PWgeK z)Cx_n*g8!yKYr%E(22ntmPca4%Use844#{20*(2K{IcgtInDS;m_l(ZTn`KXw_(Yb z;VMCKDce%S?c1C(sn2n+L$*#DXYkxt0Ee5ej|D4d=O%*%s{L#dsQ@+ zR+7MeU1X$-Ps=4-RSks8-goC0t9U;6HZ~1lz=jj#AW^@UT^sROkzH$Yob2v!gsjuT z^oi_Er{PM+5v;OV<)UHBLNZK3*KQI@HbpT;$d%BR*9oXT>+nN7s)pgvJi zd-}D4*{dR!fOV#-q$opE82_;2lqcBB99a9umgVk*vwYB&mQ4-qgwEX_WsRCJLXqzc z_69zSmXar)AiGfz-X%o}zbFsAdZt~2l8JDV&?+~%qU0t2^S2Q~(x~uDo7kCp``~W#cQootpQ0Wyo4;lLXdrd9JObT937jzPop$>@BWu z!Gs-Ej;=AVIoK^}Y6F`?>o}jyqqM7p`x5b=3}t|%wrS|hFio^lxcUa=LkC2dMLT61 zmOpDRT;si^6aUNBkKO(-+!F8erGCcTNxtZXn)FC1N-~kUBvr9(?r>9K{iynub=JLO~~(GCG_%6_AdFAaV~iaOleOzCsLE8Z**TtOG=j~0!>MB zVCn^sEezWFQ42I;0w5N~QS>kFh68>FsOm6i>;UFQxIDjTL+-WW+;;?L6=qZ;m&a_b zJIab;M@1vX7)QvZa|B?z5DM^%7*bHY^*UGUlYbE$#DLrm2gg>m;seM3oMHbTSzjF& z<<_-52!bFfjg)kVbV-XtcQ;DN03uQn5(r*uiTl$7rtJm-1d z_xt`BnV;u)4mkH-d#!6-@vY$VXc)P9FvLbFK0?ThX3gC3{=>P!Qd+bAQL?Zg^P+)K ztN}vxC;da>Z{_qwA|2EC3h6cYxcOrdy{%?nQ~2CkT|`G~dLgYox{P1R-?=~@HIw)0 zP(t&Cd@ll=QPC4Ml~aPF^#MAcJ0uO0rsM+sP4?^v4XyKqbKXk+px#jzlXB%!#>TyX zF=H*#-5;fyaw7lLgfo+CK#%&yCzcnv>Bs$W`bZE~M@vWmQ{<)E#xZF&kaRoDC+V;@ zhri%+DI3iM=~WvBS@-moYpQL#7Ept7fZhLTbS*dk-8%^*TP%FUc<}Fy!RiiMEd}mp zoQ{=*7iwl23%H=`6NHlODwDyf>6FlZz3o0rb05d#XtSbzA%1Xg+YMj(HrhMCb~}+U zOEMVZ={tf>B~|7vOivd4fmCa1YQ+EEvmA?p*NNwNMact4S}Wr_DFWF_ecG1aqgrP} z?tge)r|o9PBxp*>HluSteN{RmT@-h}9-ZbaUo227?F(={*Khx{<<~(r%3n@Br(7#5 z8OE9E8JBOs&>?{|!`p^?M%xD)c}rEVdPNJFqYime=MN4_-UrwR{8&Gmj|v@JZ>a|e zGW(OE;)dfmO|}``i^I);P&Z5b$vz=c#k*j40w!5N>*79U2BCk>M82B+PfolSJFF2C z>(?W12Tn5dXjbbt29KQ(&09pI+;Ki@Y20PKw3Dh&YW(r?H$(8S;UELeCE-czd{lU` z5b^=Lqxa3u-0A53smbl8$C09hk@XS2vlcG>=+Tgag%*BxcI181?l*7#n8`aV82(eR zeb}&x+;wz*YekuCF2Bc7;~A-1*aLwGgiO^ehF5R1<=`BGI=(7R%I8UaN@KF-kElhO zA3fJm$J7cs}snEbXW{v%|e!FHjy__xkSM`OT8*OG0$#IKRwILAtO;D z;BldoyK1D&2Emna6AtPQdi1#t952B!${hl}Zc_GMzyk!wJv#?fJrxs>Ne52e)$4jI zNGJ#IKp%ExoQrPQfK4U`M$-Uj2VPNw`v_QCg5fqF1%jLL{@11*J&&U6nU3zmGFS%u zu0$GokYeJ`&&AT#%qUoz)B^S1%n1}cJ*7ArXCDt}+Z!g}UEO~NG<;dtv=JI{>%f5| zqeK>bxBsaEAZP>%Vax_khO-YLC(y@Y4}jKw2nuwY@8f_K6TTDZN56rx$^zt>N-(Up zLET`Hz`!fi3m}ISfoR_Wbh_UiRNN^rXbc~=(QEq%BQZnQ0tWzNm66}XLqQ)xAv%vo z^J_whYOInNsv3QXujXz-~bjS+5A%s+qgOIVU#>* zsGR6&^BH4cQ5>xEhUR$Wx<83OcPNveO()NIuD9f`ZvtIpeD237fd7rJr$?naEhtik z>lOBrf1G890$iHFN#X33a4(~DMK*1=kD)#@HIGIHr+AyA33Zg(7zb!%k7sJj>UJsDVwcFp9Re{JUUt2t?g^Oq(lfu zK&Kc{ype8^sq&T&zj81JM4QZi?T{ic%gDaX58W^SO*H1NI?b$8T~Qqtz2I5|x*7>X zLCb1}3f`~d+fQxw2$P%=iJzIw@D+Y~vuL^+M7JjJK;9(b>k6g@5zUoQpm4VERm(1 z8)R=AcdLX~hgE7ln2;>>Czp9YHGfo4?p9@PEd@x%87!A)Iv_*}y>r(oVkV|1x&}0{ z3M&=?vlIGw?4!qZ@X%q5dj*((8T6pC3we-j3SyTij~q_w36|p>v5v)A705pAS$;S7 zV+CgNp0)QfpJhA&T*10U^2xV_R3f>%-EJur>|(`+_KJD|4hg^7g_KrZscdMfT7BJi zLVYEkee-aI7*PK-?H?O|6)31{lFBksKe~4OAXnOpy?i|w82c*J+Ism<{B_!!!hLTNaD~RV{+S~K1Dxn$q=%kbXX7YjxaD~ZWfN(RXt8bAY zGaE=#9-y`K_~>~Myl`*N0PGC!HdGAmgb9AU|Fl}fIy5FK*P887ztq!`U=Kk8;Kw0? zYuqGYlNXw&1cHI|@VS1V8QCcS%D(PUT2O?-=<6n4fv?!TLu@Xow5CX-KGLd{?X}uj z)p{=$iIXjVhQWFtM;p7fP|^GlR{mY|!|v0J2|>|w?(f^kMCJB1i!C?8`N8U&8yZv? zCx(e8DOF`dxG?XBaJkNcqTI%8cTZxHaRX9LotORNeaY-asj?RpQjFTD{yOv4+B*JOi_RzKf@yzgh0^%qB$>EMom{f6Lx$TYz_g?! zv_ztc?0%;Ik2Y*~rwz#~eA{Jw@ zugklnI>5dps8%#mQU>s?CBE|g&M_KQfAS3rYmV?)94{bY^WgY5R7_jMu@X5dzbsjZ z+Hc$!PZy6B1M5LfTO8w?=wp9edTbVoVtzj!~)Mny+o$?lSV(j5moOSMQr$ z*-J(#$J3x)OZZ)nX_|?3+=uU29t8pdF(JbI*MxaHquAG#HOs2m&wXv3MZD<)#l^TG z2J~|5uQVNYGI{M8td7r!4#WysH7o{rL}D&9SFMr}-JfesLrL17b8FO?*pIJGY0C*s zcrbzkF{lN?0RKUdFHXS2xUBy-v14@-M9LEirq5+B-0(|Vj0VoR?19aEH zFaLjlN!*ZT4(M7`{x&SwgXm!1DO=E#00dY^>ki;T15U4cc1B>x0N6qP+g^e(gM(OC z3FH_)Ra9@41OeNjfPhtq{So@N5Zpksv0C(Bm{co*jsVhYTeNnoGSMLk32}9Uj+W-U zi;SOCW~g}FN2zN(Zb!;Q>`+EtFJ#nXQ~S#prTuZ0`_q@oshrwD@q(DP8?611)B{Sm29CwYsO0$mjUrE z9wMJPKJFa|<4%8BYlYD(Y7od(xW0rBZZDzWvMGudQ)eUD8)FQ;8H`JNDgxpM$VFyq zW)+cRq}P&ov4^JQ;hG6ahg(!vEz@@sJ4^f^I>#5(-0-l@_TN3utpM35zT28v0hbG3 zt{@H(?v!KW-!a`);Wt; zwtJh3_Ag7g%-z*|r75Dk4Q+$ws~i8{oByA$WQMCUoAYO~>lT=!PEOBk?A=#B97mJ( zi(-ZE9pVI8rX1dV*0J6+7i2EPtrE9gp{bD4^Fr_wv)GS6kYz4kZM zY`e?(e4@nd;r7P@=aV-WUWl%zT@1DQI~s08Z5HmmY)+^=P9fW)C7HJO`N-dmwdm{g zC6MnWLvMrkMRo&5-|l2fw@1$J5A?Ld9~+Wg{hjZoew^%>ozXtl+`}8Kr^?E`S*^P3 zr%fFDB|NpR_V|}H85m^VOmPoMvMwam-`1`|h%&a#qxGJNgF$dijoicJGhttss=dfy zGRj*VUxHR}c6L;$%% z7WemTa-M_eO?%M3565AGz&><0&!DUh01veElMv9P{t6<1as3ru4jIq{OC4+pBr9YP zfkl^(+EWv{lJlZ@09T;8&Y-p|2HAJr)ih6P5GZ_|CSHa%CIt?b42AUK(;M(36gZ>}Ni2(Bc zy2`Z$5}@~0!MlYX0bu`3lpql#OM%=DmamEA*?!ej3#~}@r-GaW8>5O`vd0e011zY6Svm;qd|UjJ;6(*O5sKL zPYvV6SLhUxp7S7dUMr*llB$S`_8J>*n2DLEY`#O7OS{5qfvZ>xK<@;c; zbY3hoK}YpM_*Zg(as%1OInmj}^E*lMBMTIWPd3Qx?pK%4Z^iOW7taIWf}M2SyP^w* z%~50kc=b36LQZ-c8nh61xzP?(O(lq2vOMm;#4amQ(97*Q@@YLb?*c9Q%qTGb+E?Mo zsENSAyCA>#a4Bi#McJbL!$PH9qc-|skj(RgDH)`{2cC~o*Zk|RIE-UZn&MB}l|PDC zd!Oq>Bwoy}-k;9N&z+o-V|0%vA9=lgqeFOfY;J7R?d$>6&5kIf;@$htO%POc)Qt8y zOUhz}|JGLlb(-4uaJNOfpFbVguAFeP5YvGrVgAfq271)Gg=_5&YJOr#iCJ%gSM z5G&CW1G+${f>cnzD?wYX==A>+sD~aTR7`-B9Qq%3Z$QxJ02Sun3E`hl^6C@4iUv!x zf&){7e=dQKMF8T{McYHOu?2#@KmFf65EpL3DX4TkYX>wdVAuZs$t!A&!|W~f?9%I0 zX*4>per)un0zD%9*NFn%*nsZ@!U_^kUx64usL0iHNeq9+c@Pr#egZ6zsN&E=5Lh;` zh0t)ey;e1iT;#|dQp!PBH;`ov@(gtbK-Z8E1IJ8rbQcIXCi&Dm|19heXock?+Se4WTSGnPH@=IL?KU;o zVnnA-{gu|OM+t-elWw9|pUMwq>hWM@9Oi5XIZmk!p{;}EEFFx+jo+i4A5rcdlGo1-Q2TgN?FsgF6|Ynu6d?Fvfffh37RZnACase+Sin9~Sgi`u5$81<^1`$`X@V`>M|m zZ|U1JktsKrOB>58y*eMLSE3VPG@O$+>|;3_vs2UWdI_k0DF zjmL3u+Q#^62U1UdDGxK&qV3VEfoG)3WqH68%kTtxkzMsf@2_=L(8zhg-ubqjw#N5O zj_bUEGUSJrkduPj@NCPO-6~2(@li)7`aeQZ zIT0&>9>~L?1Rw{?i9Z-X7*}%!Ff{%9Mpa&&6_}F}H>2~ew3w~|qR0R_E?V6kiZo&Z z!R1=E1sWAa&G4KJ04%b-G@u>8n5eBX`JQk;3FDh4C0n_9Don=}N6y@LSA>WbZ#nw` zmocoHaUoxoia8rb0=LG1zr&yB9$gWhCdX14llS0IjJxG4`bvxU&r=n zgh-Y?OD>Sa=+`N`E)itf8qE@>Jx1qnE=cSpX~2Q?Vr{Uf&Bxzkh{9_0tr|=34J6eQ z@oS~bzAh7}_mLU3lqt}WJ}*-e^Nin>#$}=IGOeD(w8U;7FfZmU!yxaW{vR%T{y-`S zGv{809;iRRJ&is8tvVnP+3cHDQZTol8*W&rprh(&pgCi>&ePnfjANv(KKZ_Bd2&+5~{!SS=j3Dn^P3R-G{kKHb9u){vOjedy z?jvdy0#ThIFf`EdZ-b&_Z_hz<8%p(e zsfaFCfgX7FfD{HyaL9DzZ@~%vwYiJDdWJBrRt>~m;AdqC1$%@tFg;)yGGz!q8n)5G z!UAAo=RaVgIk$O2!To-0TKI!fy3;XkNwzOD{qljLSAfT zck{ZVdmc^6-jFm@kSmB`GsrGX&+NJPh%wqMxTgjyWn_Jf*v63A1IMDGSxGD3X|-(B)_D1^OJE_Z0h7ZlZXGN@F!#cMDHS(Q znn;qy2B~_-{l;j^G3@fJ@%0I(*5qMT7Tr6F2Gm%5tpOs9G?$bXzz;Tda?{#YLU5up z5?FS6u5(e=aJ#<@h%WFQXw$QIuXCT)n;d914w#&pA~h<0Y`s3f5^GPZhMp@343z@o!n8iovrE3 zjPV!|2KNy0=G@)Xrm;fu!;h1f7OnOdhnKLGfGi4+O`n%3!yx(Kdfv!x}N8@4;TK@p4iJ>R zBptx)m3Se@Ut0701OG}m!vg(6BXS4tB&OYLFs-&K?tTZnDRM3xzFkNzR#0Z3seJGI z&zvbsmgI>a$BLfH8f3}bp{uvxW`<3?!oOJY+4$)SE^)ON(fVwLL6M8>UV@nwlmy-llLa!Jfft>}} zD^5Wuj}Qj*8a(TNU+;jUG5i)S9a8}%3Jpxcb^qSx1Uu^4*;~K^AS2;*80aWKP2phS zM4^)N?m7Wb^9tWUGdR%yZ3y@dZVlZAJ5L0FJ%<3)5vT-IKZRHTGPrKV#XML9B%HG3 z9R=Sj+|g{P@3u!pze(Xg9_vlRFyj%t4$I3?SYw`C9>xA%KEo&>mu)Uglfl;TJ>#Mq zVnsim=nbq0hwNpnFe5!!Fpb>+V(>YJliv2_jVD$(gEgF1M~lMilp;%{(Pr^2m^koX z>xynUJfFBZX2jOCI#IlItxl@A)aQjva{Z*OF2=|nlBlXOavWxHsSUXg#av}kyM^*) zB=c__D#K-QkUGz97t38ZxEw>BNyVAf8CVD%bwsfa$-ielIzlQfi5(;3lD{MFhh~W* zt3RFYnZ0qPJwSHY;2=HP6eXia?{q~7i-om1T#K%E`1M9PPnG6#`Bwr1I_mJw*QV z9y8eel)l0<%i+bbRv7^)HkH_gV?ypWTd_c#O;$3(Q%#*MYWff4`pN7!1{6;7mlEug z1lZPLA*_3i=1t}@+?Mv%OvJ!j7t42-qPvEn=X48>7nH{3j*i{RBDJZt%_rtWfQl|x z8~`1ypkvk!-0q!UNMHwXCs-hBwQlUxIT+Z!?7UHTgT0?T>6WX~4=-z0gDi_m4QjNX znAEGl#o*7f^m7>^+z&1D11~03H>+}^&(DTJxGfC^J$Tr4YReib5+>Fs6e3}^I>nK7 z#BxOr`-FjBQ<)*U9pdC?=4VWogN76)@l|hy^V{R^=vBl=id4zIIW=4W4lBoF6oxLE zq*ns*uUM|!1;G}|LWkjiHo|>YRqgv*J@hQ6ZJ!8F+M6%lG@(h&Fzcc zXF0mAvY)T!Ezcbf${s|I#v8e+XKmL?uim+5`{VGTP`q6?Q^uqb7$_g=dgm+U&~t{X zn5gi}76B3{a6BSm6pD*O-B3Y8w{}9O95hy#s%mSRX@75Pw2>Bo1VCF5^NM&7y^&kx z0fm9!n!KAvM~=3f0ZW$9KF=5^ckY zy^3E4YkQ;-ioj||vC78Wgv=e25cfusG=4HCG9mP6YQR1rzegR;f6odFv1IpZZp?Qr z+Niwc#+s1^CxXq}ueG{!5wV=BM!GdoFR+duYv$L2>C*aK19#n-!bOLu4{Qu^n~>ht z%#!W}=?X;7m-Q~wQzKINAG9zQGA&Xy4n5xQJ7hw*VKIkPis^*|RVoGI?LrH($k;nc zH+hS>9Vi$hrwq9w1}m68U_GgN$7g3wmddw+bmR_nG5h3d6Hd=<#V%>6XZ%j_VMk2M zUiEb|V!7jzCd&!axy=T$y_@Tm6f0*Uhuw6Up;=OjrBa2*z3jaLj*)x0!9ug7C$7h8 zwP67SdJRuU+{WO{D*L zie{e%D6iQy9JF7+5@OY*5>NLQQ*kE17Ckb5(dm{_U)bHsixPEN%qi21MMlr)m%z{d z{GGea3j>`SVvOO$ib$X1=BUt1rd^p(WQDrGeDtDoqTqh*u>pPjamDPn5?o)`k?o4U z8x95t>CC%KPKv5EI%SD{GcjytbNox;*1|u;xO#dKs+vCBxvA-Wl$)s7V;`A;)VKq~ z2CvMyorrUZm!8hvus4(HKa~cmJ@9?pb|&f?ED6^40!^m&)_PpeXc{{%7j1QtCRBH% zFy{kWk^`D7xPZLk#}5-xdMmr1(Slv2!1zpH%D?}3EET_~&N$7q)f><0%qd^otKP@0 zHGs=8&7p_#W94^+tva8vQ3mV=wv){H-cp0@HgBQsm|N>J4<)EIv3|9=Xd4pgG|;>I zWvz+s>RH60maO^#VNYiUT`Smd>}LF*8I7nFdyd0$GN`87t8RL z{J;qtc_bfHjKnBSt$vdC(@_{g4{JPesj1mpu zXA9@U#R29M&uX&P4LXIhr*zwz?<_uVT3Is<;H0IwRP>cvoF#{8Aagb-MaCtu-Upx8 z8qQeYT$D-LpAm|dd-uV5u+SoVz!8ltab~>LrdI{s)}RQFD&eYM9s8>Krq6*&qzXeK820ONK(hx?h*01*fuurfFG*xu&>mU+_-GP5BYN^G`%V!ctwpV;r?9|3rTu8Q2KpqaLvauOxZzzHc0tS3NJjbfO~sR7jeEp@ zAjH{^r)t2ht2>ii4b+)g3&5uZ#1Mek+MGcU=Yj$D!yZ7vWTvA73|BazpxHt%WR;;T zP3Tq)lpCco-9+M&wXm1V(uCwy6UI)LRAroymP@JjL zd?JM6eyOFwz|Vq4kI}d-K#;T2?!QwPT35l8ivv|ybt)XxR{pCPabTU%qX4*@U~hw+ z$@Geoub>Esf(>oc@VzPFUlCmE$&UB*vifPw_6)e$2wuc0j@JChJSsx;qpbJ}1achp z<3{Wlg717P>bF7seCD(lJ6ca@bRrz=Lg3nUcaT@NJNs40+F`LPY3WB`=JzQ$Dr^xm>=iDnINk1;ns88^>IGE$3 z12#quG5m<32Q|_aso@v)a^jL_^xPgSHiP%Etb=+Sp?7eoi=W|iY#>Gz7S~S49z@3~ zs*-&~<}I-pa^HlHDqpQ^ z4!4J8^lw(x(HQuu;J?b+e`=`-6c|RFZXbGOhigt4jdVchPfQt4 zcRMp)ijC)AaHnMV=-G07$r;*yGw9GmU*fm;2SPd%=0A|v!>uyEWM}2cx9zu)Y)QKA z;PvrhYx*T(pQ3$viyA1c8alF_zQpIMzq$&{FAtE|2Fh^J&L#}%}7Y`XikWZ8L3w`qx)Si-Qv zi+PbK{G2mS-o-Yr>lz>H&0EOGwt8q}rv8M>&xT{OfwOSV{*ng{dJdgJJN2oZnTOW; zCvtPVB(oOHIp&?24%$me%5eqT44YMA$K?BV;nGxIE8nR76g6K|vj41oxAF!gXTH^J zYsepJgay29yd`7=@S3}sWbFH5^-F;Nx&Maso(k>YTqcXwD7lpy5DW4htKpe-&TOBPieYqEt=~v8m zdDdB*t|<$(Ft-?e9A zaqDamoy9y(yYr^H{jPf%afB*Q>KC1)eVJlj002HfdP9tU?1G&f@xW+e?e?o>TIFZg(ZaO`ncI&hD0=y4@VS zayvQp^;G9~Rs%%$Qr}kB#mJa651+OX>U>669Pobr@H%S#p*W;Mnhkw4qP5Kviu`(^h+Ot)@rb_;Yz!7QzOq9b+_y_k#6{ zNB?R!hF(@}m|McNMv(?~|8W^YU#`Kg1hbRHhRoe>mN2&+f62E8RBo5$!v@;gl$ue^k6-uf|V?2k`#{^ZN7TzK!&q%)gutAl;_>PI1&9)c*)^j+|C!i~X{GX>xNt zZnjmtdsN+DadwQMlA+DsIO-^)*pCcfcPrp&YQ*T*N{4~6$KiEyWtOQqF%d5t>l|@H zEUowKW}kzfo5nisi^KX-ikuw$(46#W^&}Oxag>MLCiB1|@B3+)Kn9jTg?Hxo`fOR3 zvj)!oK<0N&IM`AvS%*>fAXS%C;m4)N(OA$Q$Wx+Vn%&R<2P7)uoYc2&Y+p-V+&peq z2`QDi9xHH~3SA{I;ygUseEQYiK9|cs;7YhPCHJkvrM<#G##j8JTGA!+uC^oJ%~eV~8(Pstja~nT_p2u?=~%S`grzQ* z1GMkF-q9%OBMND(2xtzV2+cH?b1J67Z{?qGTZ-*aIlFmU^>br z=CH&d2 z*r6OLJJ3G$b?jP=YN-FQrOJV~HBN<_s1|7ocY=$sI=!QCsrVx8D2bXKQ$4m9pG>x^ zZu6EIIdgHlnr(WI#G^C4r_DIznJm&Hrd_=nMDqa&TB}~sak;Tln6a~mU9)HEMDrIu{g7nz^txC8sl@gzUaOkmEn&@5m<+ryn z5AAzhXUf$|ecx}AnkSVOe_wZOvbW_a^I%~QAa_(->J^0v^Cnw~%dY!@{#9JV~>kAX~+8A~3$!R#r7#(+I-Sdi74*j|{ zRp;d(`kU0@U#+bTf)zDT!r=*U$M2hmQ3Q@NG^5+@TPh=4+mC=2j6d~3L)ww>S_8pe zNvNb~zPxwN42X@sCM&~@F%Ca-Rvbg|P6&Q|FjYj6!ZXCgL+bwP6>YwhO4X|4FOlWj z7a(zJaGNsZr8kYZHHd=9#iBX46X|xLlGHgyo#gk**fY#ZUT>p*;g+Bh;oz8f&*Xr$ zU<{e65TIsx{Zh!@LS%4&#T|YrO#f7T<8tuKa7+psz$#6)_aZmlkpdAB-wYKJ;I`Ee zg?QtPj~&GC1})@7ES3p}6G69VR|u;P2~+|O zaRQ^l>vvGH`aI&eX3Z=i0)AB5fO^_z6BQK`+)^E#At(eSEJCkSz%o95$1!{1yGkD< zf0nxbFehU(*10Tv#p%|v-MUO$z(np>Y3x8Fil5JRN?&}X?gd;J_mY+4g%4Yzd$-$; zNttJ*k`vjV5|?R5xy>|)H#FAO*TlRGn=v+v>1}6;JuI5&i|=0a++Tf=>FM3zd@mHC zoE7~}f`VmVxd)1H;(6+UjmGZrIMu0yAaUq)pnum(T#Mzr4a}1of%K>IrF1RD_F` zkgTZD7>n@B0cnbJ*InmG_wk(4hVTx(XKzaJvyNK*v}p_Gh@k;^^b~s^LM4Usq24)` zs?J<|;s#A(hleGrw~xFoN;d(sM`aH`%-Q=}R@OX-7TXxzNO%eB6P;Y(t2I1cn^nno zx&-Y}C0Rwp<2*T!Ys$Anz`BF>5SboiR6Tw)q|TN+bX$c}Da}QPpOdqltP7}`Ifq{X zPYCRffQ3hnURVLs7W7=jne&Pw2m!1v`Q^~$)(K8^VD1}X{!WJKaa489Vol|qYnoTkyHA{q*4VY{dNQ{IJ#!>-^F$;QiaI7rcDpm%znXz-$^b! zkH?U}9(t=+89 z7grgR$5e}C%Y6(c(*jgATwX}ASMzyaUb0a{FY9Z6FN?}`nP@nP)TnTGiV-oOHlSiW z#zw`|{#tFNV=eA;4`5X*Dv|@nm2fBjpv$3DT;|=GT94%Wca3Ih1ehY3-v4SZE9rw5 zcrXiX)xK~nf7nYXP&K^@KB$T^w6z4}o;s)aI$&P@_3QYD*Ne*5*Z(`|LS-t zf>aTLvbUJYmpryCHDHL;b5?)S4|3Jb7N-73U&nv#M=?!&Ly}TbU)o-n-q8d9>E>#f=0!3Ys0!jAmD$xxw zQF?BrU1CfPi6=69yxO~>@0=>Aj1kkjAGGb>hNpNP(iN^WlGvyIkY*gd+x7w~_=df9 z1)l9BVMl(_V`PwSiV%G>cWIw_LE2sBg+In~>8R-2PsdCn9rp^4q)!s8V^*3CJsCJJwmw=9ops41`+vtLL0p((yo=<%i3cC^ zQGVeFq>SNWu9fmBR(vsE-nOb(_TWDK1C}?`xkHXa(!?qz&+LaG^H7mwIgwj{0(Sio zx~IC1R>Kd2`xy#iX0x+|AQQR@_8gqJ8e|g!fLW{Si5Hd=p?LQ?cY5Jx6&*(kb5o7* zMlIF2yDaD<^81!f!SP-nQy+kBo0;2DTZ*=g+UJABCHqN11wG z1Gep&Z8DMc6ej^0%5HwH4fa^j8!{59kIfX@ccM;-nx}6)7%ciQm`^NA#B!P{XW7-) z!W-JawpZEclDGaLid%v%EH$38R9m^H#aYn?<`&#nTGA*fwfo_#2@9;!M+#+npEyX^H+d;s zs+cJNtnp_w4;1$k=Tm>gE{s+)!%*T@3Nk*LAK<5x+86K6T>|Xw=#b$epXI4;iTnP3 zI}E@4FgL_wrA5IC@xkk-82AHm*EgZ~@os$7Ej-(J&5x<5LM8#oJsuNV(Sg zJzx#agAI>IBqfk*pQ*MFe$Uy?y?wxa_W6TG)%(Ypx+jM58?*S53`Lnd%h66E3evDv z)pu*WbptPJ?t~mo?q2rOkLp?1au{hXI@(9Mwhh#NB7Ypnm2I4s6$2hirH(F2 zX3*!~SRbix=~wxz$jqFN#Ru#L3Zd8Rg@z0jw{|ug&x|##r7D9KBw_|)Zru!#l7O@| zrY8&PR@PTW!m0P?sjGhxyK`U{6KCc10IR-;~{l( zhmYEFS$TkY2{`8&u@z+7=zuDNtKsKrfFVmv1D?<@AO#0DoWP1R2Po;m;kwe6TwQhu zdv%e(_h9vMwV(kwDH-uMa0$w*ivVW}6f0QTv;d767Axz01PqIZ49^6M6&o%n+Ybnz zDp>t*^lbD{gB&bxfcCRR&kL>hLOVC2#h)g5-6nvr0Vv;Ji`I05Ox1uLFT_=_b+pvx z9rl+n>mIjXty=v9T>_5|3bMVB`OHk^iJTPSRTkWMUV1C9%>_9Mc&UVA4LQx`p54*9 zZ^$aia?AT*!y?HA!Z^m`;?xdoBuG#;-UnrSL&8cNJLiR2DTEEveuV^M&L)cvZJkqT zhN+LWZecJZ%^x@QSyZSu()DCd}Qm@aC$4Qcie&$C6$3 zG5Ptdui7r4EcKC1+n49_2b#>7xvDu$x(Aak)bMEiQ+KRwqK@F_qx=n4Y#> zG)d*FXa(s^+KjzSCds@XZT~D5cK$viE}T@^-0q`Nrg)Av0>}j?5_PY$B~>9HPdJ46 zO+o>2I3wBC2Ly{BTHJSP1IycoU|ySCvj>V8V?0u!eVeZiF#Na!kuIH;X0w(v+*t&9C~n%?RxzD;xOtGX2n=)7DAgR zNwbh0rlDP*>Q?NIEO*pEFc_UQABmsbTyVOtG}dgNtJd|x+^8&gIOXK0DFCQsEE)bl zYNme|u#N!G(mW>mih>@4S;{X-fHk$9&o-Jy@XA3qoGW2!}}stq3c32b*A zO>ieUeng1R#mlpVHeWZQAKCh4ZgDJmsB5Zc*4?NVfC&~^mNx!FGPqV?Z)K`KxW()- z^n__qbIL6=YvswyO-aMHL(XX`70J&I$G>R#SFf`hQn(Tk45q#=;8albZ zg0!9NV-aKtZ4oF1d{Kj~_{r?L()ZN2Q`70=d*~|+Jv9r)o!z!Jrp<-7@Y;379D`d7 z*_m1Lnyj~>Zv0}BaKOgH*|_$DmuFg)CGQ4(I1zUJ1KJhxy*fn&ffAZMgQIA((M#LR zv%dAdo8^gp*L88&Js%jp^*0WPm9lH5IoyseG6MS7&zeqL9dBs;hKBY^)~)BO!k?ZS z&l3phzkW?gobRz+EM_YsZ`tWffEwFO-85dzsG=!(%l;vR!J!iCcy(PS*(;HPeSDFQ z?PB7Kw=zS(g1<6tUr2%o*igWl&U%VbKQk?P`hMst!#^Me$xmJFb`$CD<1+T!+#(Svu}pI2{=18Q1ysEZ}Nc-?qkpdXI=@;+J$j$f}!;IqyR@dvUgs3nMLW zDvmzW`~zWCJjmtwiIV5#$~$DiTPl&XpLdk?y|5URInK7+D_NG&If+_y(!7-Rm~20! zw})KnFS}XJsI>d;i;i?&dMvBLT?o&sjY^EGPMNp(X0E%o@sfVx@zKo=Xe~c|Hta8U z&R2Gqb&tH*FwbE6ys*WiWMXXI@6}`cF-kQFC<8-c$x6RU8-k^Cxo&Nb(4Hq*>{Ri5 zQhEq?t`TqOr$?Dl!Hl7{=C_DTiA;P{ZTfr^_G52v*N(p4tZdPf@~sHNqui6SfNDiQ zx>DvWm{dzdrcDfedIPYdeFY$C30lxsH1?ogA{a)!LCgu?{PC=K#+b#9W!GqFQ~>_oTD)l8@YAsF zw1;#fLD09sSP-KW(5EZVQ(s`;(`62n48o%1kfY-b?c znk)uT!EO)h7$~XuyiynWlos1m$YCLB*q@4jN#xbsK7o31Y8&hQFya^S3!viZ4=Dcw z+3Z~44W-d>!9>HHB6K4&Bv)gLyK{%V(E1vN#zF%8UGfVchk#O&2f{hB__CU^Gm=}a z1ky&;M^l|$ZgZzSQnNkGb1QL)S z;!lNZH;v+SmSa#5}lKS{ihz3gN_;rny< zFAjQezY@Nwr~f-jfMeD1@Utj>T9D-oqi~7kIKZ38xxco z0LizU5Y&VT=PS?bEV2qE(AWHhfkB|!UsfrH5Sa3l^I<^T%4sjCk%p~}9@Nn&h&>rl zy@N73l^&PF`6TqT>jN-vAN(1Rfq(45P84>u&%FKTQolLh`a_*Qv5I!~6N; zfG`f%`bOTK?y&o zx&{OzDxeV`6JbLv|O)K{2kpTe{M`@pB)KJe5r)be8i&Bc=z3583J?39}l8kzg+&_#Q9(`+z&He|tGbxrq67jLoZ$VYK4fpZtZR_vAJIhphLG zr@D{-xQ`K1Rz^t3$T%qDWIH75*kojuJwj$SA?gs>k(IrVz4wmnaqJng_a4{%(RKaq z-~D^sf5^zFukZKsp0DStX2hwUeP-T?r1@*rw#QPvw@(O)waT%3FzU!#W^y=XCCd20 zD+BaCT==N*{s#5OkrJ>)@@*HR32P{8sLrrpT%I&zxg|>QE{$Kq{D{r`mG^}~uyWCG zR&`a3l@yFy zsN70n;;2qu#&)O-`DV&aVPl*DlFd51iLK?UdN!8Yn5km7%QSQEQVt^6JfsIK)aOm z;FBfTNv?wTddn2B(4Z?kh4&Huux{bf$I)01rTr<=?W`hWbu3N^n+=K3S zQn80yDS_R%19+{mPDqjSf&kla&TZ**x|gHz@LW5r%Xg<9i(hD=*|6`fdf7Y@e13wA zqRj+a z#I+XuyS+Dssay}qT_pxSlO0MOe!0WyD~5G=1#Zh7qebDVV88UGo`A330q9Tb$(3}0 zX)Y8x1S74b!q~mu_oO0(Mt^*DE3}GBGJbOAW4GJ>q;Iv-fA{3$64~!F$5kdMyVpack`OJ!%GP)pzgnl~X>c0t_RjQsTjg?CdOA^;7Lns3 zf%~?3gqQS+rd^$mrXbk)obbaVPyL3%OjFiGZRA`~U~#mlT0Z~C3d>l!^-$~u4_`=I zG1GZ`e(P+Rw%L#Um{cCw<8_rt7p3bAQ#0HGB`^RF!$lUQs6MWIoWPR*it@KnH1I={ zmiQ{M63_D>OXvF^CkGg_{WtnO+3~zu3G&-vERk|@_t|;m6>X)nxfR%XHTM*t&tuY} z$-5)uC30tS@(I_+hZf2sj>)RL!YLknAJE+S%rIzFf9K8P)0Ta&jW{&2O*)z5yS?r4 zpyw}rsa|Ru#FoMFpl+?eY*}UkzWY!N_B^I{!r1woaZVNMOdoVbnzyEcu`EV5F8Ve; z&-lYzVgxK2-=H$4yja6{Zm1G(T2Hb1SoyCrIwCe)ve=Gch{N4eMD)wa%$b;YXEAH; zMUGOgmcIOr7DYKO15+Q~-E^>a2|Y2s3?;*~KC(X6yZTmGXX-{#n%^|IR{WGTgnK3Y z3fksl*7zY740Y<%$s(V(DpkB2787_&R|7ro*{uvL+ai^#C@K43ge1eyO~XRY-e&%V zP8DGgMkt_jd5Xqqcn!Amnj7d}9dwd*U*2Hgpp^qAL2xAxzchvjoP)m8xbUI0rj^(k%Yy%qiB zmnv%DA2M)j33hIH!F1^u*=+DwpZ!?!_|6)+L_bNjK>q-G#SN!GS7EoG=98?+>n2c- zef=JSI!U1X#ek)iO45{CG9U*D~XHG=+zIG z1YSoKrrMAh&*{I#Jw)9fds1mfwRX8tJCen$%Yv?Vbt!iV&rAAE4FKgyt2xs6tG=#7 zf38C9YqMcz<(}{L5nkHp$ywpiSNXr2J8>IfyO-&)Oy}q<|JsDP2+3b>i^^i%_)o}t znc31&HgpUp_mV=e?uLXROrKbpM1Jd1>HM*#VwR!x_VwXm`ec>>9|j-Sj}93s)a$`~ zf>u<__aIHoI^FnlmIcN0_C=_MOG~T<{h{Ed^+0n64~nwVx|VWu<=DYmmorRg?^&#) z4Wr%XSnKz+<>t-YpJBJ}yQ-1C>o50CztlU0iZ18h*RiSQHe@Je_|mM$<=Sa=8B-MR z^+2E2iuldfbflLMiQcz$9)m&V`b`6hT+fI@xR2QVOE`5!be5HMPqb#&xeKZaW*1PS zl=lWpG+VdooP3@qsZFcHu(YH~&OJZ~*rGma ztz#{$O6;l;7h&$MzogjrqD;-om21p{UA3CM$#A*4V`NWf@gjn||AFoM{~p z?ae8UI`4dLU_?Jwuh`%Fts44COoPss{7UHb&QpBu}H^AO*l;KuB*|a56RRVpFm}) z4|mU99L6HC@{6hE;Y zf=V$cch36WhkKKe*sm{lxOj5Y#_AEgkQ`GvznAR*2zqjUHVgrHlhn+x|>_0Qu&)Kf~7 z!T{cV3iIl_(Ed*7{Dx1!1ufb4AmZii``_D$e~GnqM=5H z@19-%KwcCL1mws`8E9Vo>Uq#=d&R>$o4d|i)~A;cVa2C0=Z_W{bn?fYtQmQo$EK@U zDdv#AA&(`XFVHD9?Z<O@!VJ3UAxa;QSR8uBsk|BPND zFsfJ@or+%%)c^AR!~!TXr}FpgX$)J(UF9cN$c#-d*H?cTQ)V9&U0Ltw^B=43Ieoe{ z_Jhn&BL0X|_!v>a(P%yPFv=MpI-K=&MJ>8MmVJ9tro%`?ZGl=9Fnm`c49z%`V>5 z5V|H|EqU_7IN~;!!9r0o{KK@C!`Svuc0(-fi*=6q+u5d{T^zzsADZv_EQ+q&)e-S^ zuOwd=^4Uc1F|68sD|$}I8`B3pZc@G%atkxw4o3)in6rDV|G-hOXLM>`jD>vZ37JM? z=|^hIW5sLpWzD#Y$JSh}Tk$Q~osaHkxNC%MhNm$4JLdM&U;kNb6jwZ{*YuK{tzC#( zj`|0(+~QqOy2LHUxEJlR^9{kjMizcR`~8CdQmD)@ej@#7+A;pf`pHLcj1pGkA^Pch z%IwFrF(bm;nO6nL^)AD$3v7)J9|g{(=pKDqybE%Qsl0Dm(f>didWbD_2x>k&jDm)K zlhFBTXOZkcMkk?-`Ti*Lr>lzdhQ8h!S0{2^EAk{)uJPH#r7^aVeW-QquHDC-OSwg1 z0_KO}}j%Ayb({LVW1@VfvyryT2Sl!y7 zs{hrpoP*@((HW=mxS?P2okJA1t5~aY33`eeRKlYQB(c`Va=lE$u8pN8T)= z=VX@BBoj}*d$j|t3S-fYM)gLh@)th`itk*7n1EEI%_E}JNIrE83ot2EQP(z68z4}{ z1unMNlz(OgcN34}JTQyG2|GGjPZxr!P)nVQPd*$eKRet^W)@ylF%EwWS z{e-2gcq^;F;8kZPE#o}9t@2U3Sa;FQ&?G-G_myBcv! zm5_GKO|oL39vZeIGe(v$DCL;+=SIfk3v!Gi(3-HM2N~Npyc>ECc;mm9^c2XjB7liQ zo+SeF=KFk6|EUI_#ejWqSG&@G9)3w*EN19FN!&q4&9!%q-^hZV@ z(<$$revSv5?y941jVJBHwQ8|{7A!Khc-K5My06dIqkg*|Kyl` zKVpAf*)VQvP*YxVY3D%%ry*=V?P|$T>vR=v?g=)GgTuaES^p_nb(J4k=q3G~cJPRA za5htNaCOgQ(wf%1{vr4iE3BhV@;Kuvf=;8d8f@tn`0IBRFkkr*nqfsUNnW(poS-`G z0uAq#hv94#&FU!h_y?-EGBjrN`zM#-2G$v7=sc>Is)Js1jr&fJZvi2oMP?R7b;L>9 zd6JXO^TJ}_mT(A<54&|KHRdTO@+`84M-qEN&(!3@!B0bFd&6Qe?5kp?q5KM~+9O?? zMy5R)gy=WwbD1T>&6@>ps_M~#ku~=`X}PKjER$ct-HEqPXwVD&A!4|vK`r*vw$%}W z44i$#%Qc|^BpW-1!b0l7D__vgHbh1+W7erS*u=JXrQ!9kAz}H(I8*4lyeCnjse-xa z7tg_LPs722ZRcC^?bWYNK8-qH+WwI^BtL`Lmh*k3(C-vjlYjOjnL zJnBtk`C)Mni+7r(rC{3Q{9g#yOys*1f&!s-6q9S~$469w%6j;%qE^4T27gx3Xbsft zw1_IrHO0`f4X@mV3;(~N%!=6r{0>{AxalQSJWIZ;;A_nCi^>BZZ!3R^KF((32D?VfOht6jTAgRI?)&Kk4ww{0B}*fqhB&#xVW z)QBn(VW#*+iEP5`;ma$V=e$ErOIGv6QTAj*4jC|}WL+oWD243i`NIO&Y=8XOU09?1(ym^ za_&D%2Pkw+F0#}9uw|afSREu+7B9iD^aXq2Hb2@o(@)IP>rbb~N|Mzk-O&WcpS_g% zIxQ8=)+^M~R^A({Vms&B`Roi;zj);!xS*D4GX9>I2m1&#$z;T9*ea&_<`%I4o_ilzn+DnMYwi_OmVlDgT}47asYHOcumlW8qDL zy^aU;+l8(u(IVjMDAW|zW=%-*ph;7SPD$E*EPU`psEol(Xf1|f@1yn)@pnQA4%TOW zR}q)A4fLm_nXw9;))z}1(lUtaI*v!$DN+8 zA}4)DN8v+S{4;6Xsy9e5lL~jp3`9Ad`?;9!aqpp;VrdCZzZ6*7el(VwSPh5{*rONgV~VoR2Wa)i&|0i&hn4< z`1<3O9iq&z+hF6ee?44DJZsbfkK2Ds(;BB-^aqH}0XG3V1<0=We1THp|Kb#G)LK9a zOAS#_w?bHgz#Fw7`>zoTTiH4=${bWmPf33kHHc)T{2!DCxOl8g;5%Xv@I|dFjZi$h z*;E8k{4YzK80;l+LddAuSnoXm;rlM)P1c|UhcAF<6aoJBzn;j70K~1ykXJI=!cIYk z5!3UMNoNA!bILG&Dbk5T?`gL??{|P#xd06o6aJLITwp_=rg-laVbbU=s=MU~?G9d@ zHltiw44g~N8Lxl(psVeavoVr+Z)bXDQ@fUc1 zr?SGHyp^-2>TD}%sC1cjd3#0XCsqg(aI=Zu;<~X#H>(xJZJR9o;z8b?(bLZK7C%~` zkR6%bt!kM$Oe&WLa~{8v+(mDBEh&n12)lJFmUCBs{&|kJ&%GX=6stAK@yRIMN-w5- zJv)v5{Y+5@DWx*OBCuF1R;lF@=^X@Z8H|;ollEd>oN;_U0?a?P)iC8Ak-xj;`muMt zd#WZ`XEkEkk6grGgI|j#J>&72n)zF=an{U97_Ea3e!m&hN?I>JjDGz5MphF^RyI9= z;m0P$|Jc_8ZDRx7Gi_w}ADcW>;h3sYZ?msclEE(-nt@U0@#*Y6}~{0*yt zFTjT^Plr=IPk6Q*4K2&yAZ>>X;}sKYGZiD_yZJB!>s8*6#*Hcicl&yG`Bi~`An|aM z-G3m#pz18n(zIK5{hXoUtdTERVF( z;ApKCahxL^+7RvCUgA}z%tsMHERYk?rz~lZ9j_vqdv59LlC`Oj=;UT)xwUqx(LPKG z+7s?ImQ5}o4m`=Q+*JLZ@AlmCEqA-+}yt<5Dy8*%khjKnUF7?{6ObN zx2wE!J1|*mj2bTcHQaC@!5AO9pL|R+I5fPVQ8#{;6+Mn#AO8cjLUu!cdJ84Pqc2AC zG&a=A=6;H4oIV;+m2yaa4pQrX8>^r-tql&j!T``SRnZ1D$sh+P|1tyk`ON&-${#r( z*iwdbzGwrZIE19E4IReym>7{V@g*bLm;^ThukO$3PaH7^=owzPOD&Nk@_Mb#@y)}X zz#{<~%o1Hh)}Fdy8{Oy4h+%_~H|i~VvT3_U(B!u-8tcift)JI0hG(Qk)L@ez`E0Hh zG(_&%wU$C(i?;kY=O^F);tu!S`CYu{9VX=UyXI5a#d=v5mrl4>yhwg`vY6rLuq)x{ zdd;j8w#=UmW6zFMtWC6TF9^jefJPY{oLm(~! zZZjgiNykPA>2X71XafKDzhmi}*9e87!FF({D}g1c5*g!-t2k0gYo&B(vUBa`#$5ba+k;Hg2cY-lj8?Ri&o~f@`b-+R@C|#caIb zJE&A=WUBwc0H(7yTt;yHnV%vfBK*JtpETgFfR?kO3|b?1&PjUZg|Uh};C$ZyjtO07An{evZTTt(GVf*GTcF72&X-|L_tcs~ zfWsXfYehmF6xPuYIm*#$OL-2aXEAj=NplSRR8Cx&Sm~SG*%?k({pjJ*CD|=kNzaTS9xIN_OSV8n8Y}@4pQ_PG0D5C&IYY*@e0acPt8fjHk*TUM%=} zHa*M3bQjnbqP|os_`-9vW%nqG`vJ`}iDt^f!f8?M_Nrckdo#`k7Tr!G1qJaFg+VEv z(z`g-^FHKr7Ly@9bstMZMv1-6F-Z)2lT10)Sn}%FKgiaMaZ%Us; zM1kY2nx&SO{gi7OBKR4p>^oaxA1vCloi)R#2KwFW;)N@t9i^g{0oOvbX{f83 zcDg}m2oGL|+d~2yjpwQw^!b1p`wxU(J;y_?;+%iHVJtW)%5UI3`7q^2-tIzP1LGu$ z;5GF-8ixf7y~Pq-OxKXqmZzfSpH%Jf{6{S98h!?NA7yZ!qgMWnQj z)dKkZpMRBDQ^Moba#62Pp(e+~f2UJ%FR|i-UQX#`Vo9M*#+0~z)UkTYXhE4x3XFb2 z36K5VEiP6P!b!}L5u*!5!#&IKMtJOutXy)U78m4w=Qz7WschyoHPdWeg8aC@Ya~rf-an1 z*7J;dF{+;7uUq9_Ivl}T^HkDnCA^=56=Us01|z_qfv}R5Y5X5V)Q#jFg8&m4xRR1p zr|}v2-W|5I*aEr?@DUmy+W1#u0}@w2CXf@i;N&N(&tato{U#*fO5gAs{zXyZA(Yrg zqR761c^WJ0-_sCqt|VCjL>J=B%!vbdSvSHQRXGU`o2MgzfHePzA&nsmG^74^1Nl3r znrXpv_B>9AQCHGv7`ql??NteV3Za$){MTdTR7Dh2*<3K11ZFc@{rsmp5;3e!urQb@v zRMVT=pd^SQB9-QR>+#L4Y)DKC%`v7;N!JP#cAl1L#Hi>$x5>}xvZu&r_V@e^c~2{q zUOkFjUX9;nn0{P7er}~fz3ef5`Kvl4Jw$Z~n88b`{j7a!@gxa}z| z=AZE?z9P2f(8Nhq%9&QYEb6}l>*huiw(sBty}!RbLFZ@x8%F*oq_7>b_TX#j=Sy2) zW$m7Pf;}YFsH`tdO#RDU!bM(vsvZ(~w0E*F{l$8D>aoZF9-|vu;?F1aaL#6@DXJlG~WtS`2DI91XHi5dB6O{5Y>0k z%`BUoJvs5sr<}rM>pBu-#_}}Ji3Tth=`vX1O2iQ(;*LddZiJ`>Zi-6qQ8&k+@ zzpu+umg)<^`-UG5&eRd)Ye!iIsg-#vhH?M@1I7wgyezt$yTn9FN5n+bNVB4He9XOI zC~zEE(O0(*6`wzW?T}tKUj!ZK%r?fj$k>j}oT;ow58lfZUN9Gyi78w(_*iw-Zei0EdDYw8>K>UBZ-8T^X z8x><3*(Ah1eGB2PhX1dnR(ck`4#bobD8MKpV)_0DI|r~WU!8 zqM`x~a2VfTEG0ue$xW*CDVtKG1Wf0#M1k~sEDr#x#A!B*SBf&i3Y>>-=+)U&9X$^n z4;~2?j%lBdkqwTNS;e*f3UJEhN-uEIy50LmHvN4*jpDF?@F~uN$vQ`k%GYw8RwuPp z`&k)onOXSX#z_op8N{~ElVWIH+>?3ND+2t_sLw78OQ!?ALe~qVIe33#P1Y&Ds=%hx zIYaDS_UE*AAH(5wxG>lM{Fuy_Z>a0G_p0zYwgcao<3e zc?0tMKQCa7gB7DQQZZxYKmRg-imgLJT--9_ZxSk`>X@(C)>V9i$U5LTXx&w>l}n$M z&2c6X;Zoucvo|#N9!rLl6(E`}#dn=ldu(`aJ5$nA;l3Ah#{mAFL>-OyFq%=LjT7d_ zU;cpvxa`9TTt8lJG3?cqo1XSuf0?0l zp+82gOdXeAB^6vUXFvITDM)dJe^n_*?NCty7cstmRcVKqx%%25_{9HG*)qkzio@xP zO5yHCSgAf;)Kft?+ctP6&?WCz46&}L?k!gez1PvZPO`{7-p?=g|LTfM|C{EJaeTC9 zp&Y6CAk@-cUS9UcQ#NiTz}RSqsAu0i)Z45WW$MN9fcQ$bsh&;T?ELyPupyxE+1vWr@B6E3+k(WMydd-(ooTcnF42j~QgsHPwUx zVQ)gK$&f1S-lf=J;Y8`9N(uUHO8gS)~lxf9PRvGvTXA+q3{vxRQVoXXf7_tJ2>@qRilX=CV!we zxurFShgmfa@Jjh`Sg>aK>*C3;J$qDA14XRcLC+At`@kheUgLW)a~kz)v+)A=ohCNR zvUN~#MZ~|pVMQh06ks4#1J&p^fVad)5O6}6Z<=*c>k2~ySlnPs%E*^k#nOTg(yceN z`27ZoC;cyy=>{DEd6c3m%L+}QRv3!E$!UP?Il%R?VpxLQMfWyn%-!nxlV$X;K`@45 zuTUhg?f^(AwohyX%zv-%-%|{OEnR($m6w4b_5VFy_SB1j1`U6cJr7IkQ?|AWj&XsR zY;{4UPU@nspk-SA?brero)lPL|HE5)i>peD)oYRDQ{DbJ)z!lVCd2%}G9(UhxaDr! zX~gvCEIpLYf}QcjoDvk7S|e;(%i9Wric2)D0;$Mxj&-a3upsIOjC?*c`nP*xwN2|o zX|IhHZtj}#a~hH3k+WEh(z&WFL6*jHSIx@Q{H}E^Z1m{)m*Q#Hjg8BVo}K(a!{v>k zI@g~anlb|&$}^S|1z~;4q!wYe%YNtR=x9`^7Qvm^^=~A|q9JW+2L!Eu zQ_5SwvgGEBxhdRgC%+D0A|=N{N20*_B!VS=HzNnZpCRKf-Z8Q#49&yxBao@ckWdun zF6c+^e3+w48@UvI;_s=Vx!%3Vcvtxe6DD_AzX&iSE`xveCIxTZZ`-U5G11ZEZpEd04&Yrl`1hqT|VdzAvX9d`GrV6l>{*6 z>7e@}Lb^m0kOW5x`b+OBJT9%)3y6F9n*02GJ}Wpt`1mrzqx34 z{yxk9f!&ch*gjbAeipYH3!tWx$77fD?5*yd+MbIiy&-t3>>z}^d|Eiw;>}pUd);W9 zJtg>xb6E?UPVxn_r5mlZabThj`%BP(Q#?@jw$AD|z9{w6a0P(>Jm-CMGtsAGZ{A&{ z#B3RcSl1{7#-An!0xwx1Re^~_0R;tavPWvdayAo3$~U;$QsI{Wez%xlp`X+5f8R;D zfzxA*fGvS^Y_mF<#h}o#IXqVx^-SG z=Z#(meGanawb8mc>my=h(29py=nf=X(UTx@xyp8|=wI!F7 zC4hjl1VH!MT0&HT*D@QgVhZjcm{v101KtgS7pSY5!7u*icYH&OgHSHU0dr8Ddr0RS z6A!+>ZZLPj)l3No*iMiLk(Pt6? zE#PI;umrQCV!M2(W%|u#z-@99WWc~JO>&8L%c5K*R_f`_aBCdr!XydpQf7z)DT~hP zV)`rN#>n6C)o8^e!JMY2%4-JdF7ISJ zZI8C!f8CxI(h6UX$#Q%LUENbD-cpUuccaa)tc!s33$E0yZ~xR4aXiy1>dQS@XQ;hTXD>^3Cbr*wSm?PKbCc-shpN z)bBVD@H;);#X9G#2j!|JYak=V)D2ljU z*ANPZfC4o_c;q2{b9xRN5n}vcl1hq;fQyyW(5vwX;xKusYmPTFYzJYAI zFi(4Vb*$KEWyX4}j#=8>!SGrCjV#Fp=TgCe^=JB6( zkG(F~f#HWs>%3EA-SWngxCmK25`Xl=ykq6|b9kT_+*2?}y<~rW?{V^di1CxqY@Z3y zdgye>8M+*)Wk}=YBW+)nG8wxIv`!I?`*6ED#>GTvn>%yN4`YG&JD)UVr+w}fT^s)> zJZ?MM|#U};1?;=U|tS39pX1iPAap3%4YdD z%$enW%?p>pdjhE0N$pzi@5XFIxuB-K{+BYZd}HSIKt_m6zWxw*0~TSsFX zuYNX`|2a>t8!49tbJ4hsGYMSV*PksGs5z>dHDG6h)&ox9aRIzh9OCvp?$7? zEr&ROC5uQW`A?sq5;pK2|6XM-{OKY=Hj8?HdW)=@0XaPo>+yCfNocWNW})Bji0J-l zqx=x3v6=PfXzdRtS|Z6!S~0hnK5Q5cYHh-I1ij%&9XL?+*|TU z^+?-Q4R-r1rKiXeWXXNLzz=dNZ=Zz>4a(kJIe^3@YjS=TgCqtiGr1-RcmG1r)jfu@ zQ@{%NV&dPEksv+GD3n|Lwo)cw9U~>AEx=(1mazfj{HD$IUtiwbT}NGBLhFI7#g5di zzcexM13*HI0IV4u#I2$mvT<}E5BL(|Hc(x@CL6xV<@xZ{*Z_SrDl^6xV9$lgs#0(k zzq!8*{ANK)r3hoqjK2*HR|(gY%~s?F*mE^PsQ9QHE?J=2)5VfZ8tMr~WN(zpLnQ-e zMp%D0uf9o7yW>zH!DAi4&jTcS(Ia{ZA?TE!6u^zv@m{njl#25ie{iXYwTiEeE%X;E z_3ndr8XR`RsY zS4tWWt^U!h9ol7~c%9V*WeY0ZxpK!XllfIDh_@R`?%7r-4kUj9Lp20{^>^_cerRW8 zzga%sRAkdhq2`8i*J~N9b98~eZsC4USWm&5UYqcUTc){#5BCz@dbZ}d+D@7Yr(w<3 z$-mmAyR~QlLDdv;+>;nic3=HHL^$`>USFkvwQPG>KlIaBVzo({8eI>wleekisrUL! z*QCAPub4=d+2_zhxW?|Z13&kw*ysxXEMcG$<_Cj%4$n=L`6;cbUL{waOLY#M)5z1j zXvhYYiV`9Ineb#y&!#iLRwaS0v)o;^V>nhi?6Diub-R`0+0=nZn$07GYuZck zQBQ)U0%5IU<8LN7vir}wf&$f#$Y=129HIp+Z`)j z#h$t9cE)gbS__75O09S$DbZxFYh5(CBhM?Ut<)0*b>y${pM^vMXQKAUY%L`i7#Taj zED<9ky_XXccnew(NE5Ohep`w8P|OOPLi7+I_+gz==)KQ;pPE1j<>?r^PKIqow!2|x z@_%Vo16{>wO#+1ya?0En2<|97lSsu^S)+7=sLlF|ms9Iw$2D}HxUk2C1_T$2q-don;xCuNy`&#kAG7#b>3b~Iw`Uit9)o!_N%6i zm#Z~MCXQc_hrQmWmo8U@o{#3gTYnc7Gie;z)iC-}lI^99{EXn%xtjT9uJ*Ki7G+Xt z4m8lz-omcx3w@tX_=f`%n~A4#&Sn~tl8!FRFU?Qq7Q;RZZA{O08<$IqNtHyF;~v3Q zX5puw7wsNcm#*uSPsuYDPgb9)xMQptC|EO7$sNf5uJvigYp%$667eT6UR5!*Lg+Sr z1#c)DMfw3{w%)F=R+%UFsp%s8p=%6Uao8sAr0RgFvpaY?Qi-k7B*aSNBfG7Gi|je{ z*z)v&*B)sH#jxTXt~j&xlY1ns^Q*5T3b$dMm z39ZzBmHvWa22KZUZ7E+YcTFb_#Nn5gb4Kj@)`( zn0BZIl~gBrBEwkihnF-e_n$HwK$GL#_w-GI$BI@%{la@?CCG!=X{i4&s}PuU@h0)A z^pdpeH_5_Q`NujVk;hc2xUh~{UDEjZJgkz0Fx>jGv(FE&ph4BX5w47|ZT^@v7UcYs zw|iaW3u7O{bP|q5LS?BQR3ZwPi(b0|^BjAQhu#LGUkA1rv5<@JgwuF`ad8|+aQ8u} zQlMXfltw#g;B^B2N+CUMav(J3ow*4+t@m-R+tkRYq?NdcGmXzjmwuZ+!Y;=-w~85Y z8?&r>q7%Kxx(;3){*DooRvxOV{la9j>v*_WU%eHly|jCn|9SJ|o_KEQAD!&@QO4G+ zLCqH(@bjau4fkr|DV)OSv4-mF3zViwko7jXqS5)`XY~Hz5kguo%zmvLo*27$`n#pt z81EY=StlmTDwy|d8C-c#oat>{{8DsqnDkl*9Ua`#DX+kZ6mu985q#L2N3TaLW@v2q zR9~mZMz~`>P~DHfJ4oJSD}nIx0v&j|)EvvJTmGBm-e6b)#t7lj`T{orqTkGwa`OqF z+fvQi^qHP$14~8uq&}T^T{k_s<3p?C~#Ob(d2U)mxKE0QtcMh^-Q!irk$X7V297-IwPw(H-`#vK*rzSN85 zwc_4*EFdwtHSyjYB>)^^UZ3yW3w< zEHx*+znha6RajzBI9SH6gd}xsJb+@*!-XI89y(BS3t~ z+~9wDON7<2avwElhvhxfATTr}P;M=|6ZKBd^Nak93H$iEVOvUO>}2NAMckFB?MW7T z@i_Lv`}Ce{+J#cGGbxQN7B>F*LGwS5veniwk|w5#5zGTW)c#i=>X=w3!{Zn#VYxoK zC4c0_#0iYqa}M4y7o^v;yLW8JVUxkZ?4=E>)Luod~F79LFjJHIBn_G#S_ zYwpVKc~anQW&IDNBDs0%8HL3WOSNs!J#*N;ITAjfa{gSr6)~_J-gTx>;0tH(?PfbU zl;SXD^JI5848H825wu+lxu=bP#=EGsMY=oJOxy({FklqG4t5h$n>XMncoku~37JUVC}l@A?GnZ>-)#uQ(Waq#-+^XkUW9>>Cm@RHjO z`(2)aEE3Hde!%;lPC~;Q`?^2r{;6X+z2B{fV<}p%p1Y-V5`Umu?J8-M1v}mOl^&&m z#ECk{3@MWaJeLD+qgxQCEPUrjg)aRsoH=iS}Cw+?RI`dMs~A}fCHL;f9oQ=o4>s2{KW8+O#;hkRs?A9|C^Yoir<#C z904BJnTfI%zyK1wulkH#%{5ytr8k;#L_6=66{Bowp2mIh)Rvs8Ou0z<{5T2GJe%hH z2}nx1!vXUf#J9&aIWfh|N{W(vGQte@+WaI(g_%+-rRiY|#SzsdUSUEtzO?p3RXw#F ztH>j_t%LX#v&zR+EJ`QBY(2mBz6UeNErpKu$-UJG>oI6_w34yQc->=iTafl>rSD7J z1XYsFvC2FAy;t|C-4iYwKe{VVJd139G3M5<`a}^XhM`y^HwbHl<=JJe3q%Wb$ zjn;TZWv2IYI7h;2CyTh=Huuvdx|fcBy(08#H__LAipyAFHa}QrCARtrG`r#KNp2z< zuAZWNeFF1GDAURkY+o7oLjrzz#f|7I;3UNV_@mG^OVBGV%5haL;r4DX6B z-iNn%g;|}pH0Gg5Pw5o)D1tmP=fs)(R(SI9ew(Ke*-tjcqdw0O!F;ezD^BFDZ{)%d0xjA1qHP(mzYm8FD>^C8n9NrLHP zamZ0_v^BnF9VyV~zcmrSPfw;ttKmSIZi%M9yD@-e!09>9_l4AmqofO@c=)-+l~pN4l`mv=QA5Ps zLkR>pMLBBfRu`NR6O;&tNUgIwz$Bj8MEZv^cu>D(`UB#)JpkBPFzMKEf*ceS1t8=} zVLg5z53_Fmz<2i$M%V=!pN_MMBs~f zg-6PSZ53LpTt)_rUynM3sjuIQr~(OZt4{tgbz(@x!HafTXGVc-R;6B+G-InVfp@YZ zFZ0i6jW!$%Iu4aqs|Yo9@S)!s@HN)Z)nXO z0&CUcyYz{}qVHr2y^#U!tR0Bn$8~*xt$FWvUEeSFh>nu&xlAS&v7<<7tLeguN6(=q zUl-d>_~HcGb=pi_MMe>U`4)Z=iJ@$4ciAKuGx)(o9`bu+Pq&Bh4O!$SbV!71{t2lo zN+Ymeet5Yme4Hp+3CAOHvhfGq2YB&Ha0(Ou`Q`2R?|ok=@O<(qu%mt-Y%@Wl!F^l# z{~_$n!6S7xho0u6}Xc?tN zi$W=3X0)gzl@LWqvfbbF8g;+#_viQdJbr)7J>AkQuh;XObDis4=bZFe`P(Rc{ZShy zXH8|_@_qlgWKX5v5yRDgy)mtvb$V3dv#-$h{;C8Ul_B$ZnF1b7Cy2TFw#=u!UTZ%; z=QryK8l+NGD0p&AnGtFfeM1ww&&9FV6?;1>;xucU)rQvX9+n$n$KPcul#nq}hm!*Z zn3VwOVTAM{WF> zn_`ek0A^N+kW|bHk%X)pD}lrdm|>vBmYQS$>x@XUr2RNlBYkHEJAI+&3(pMCX0!pT zth-VzHbF8lfcZ51Gi^X0w4lpmHh$i8dAZCDhVo^O8^d({zROxI&YVYs+h(6^-en!t zE}c7))^kZOW*0ZSGS^eyUrMcke4VrTUUNw5p~`(*e1Zj>6A@mn*>^MQ_tgaLZ-`hL zu6yp2;59xtxlXt}-Dt9J81g9WA_K&1gY>a^dW!{*cJ7H;x&^mT)Bl!L?X3ublvvLB5d(_#$Ity{pEUlw$g zDcJN_xO~Zj#)*o_&x004N+p-jmR?ulazn;O1LtSuwRG<#3%}wgKEqHg8m=p?DBD~` zzv(Z#aj$JrKcZgzjk@yT;Il|mwfJQ7iw*Ae}zmVX(+GqS5r$#%`fdG1LG6V z^P9U3NUFrE`DM>#6EnY`<{k|hTGrKht^19~TlZP~kjJj?lk(r2^|lrt7}u$M*@ANp z4Qk#nysL%Mx71*GWyN0gT8_}g6jj2`UFchJ2mLoHVC`~Jy5g?-OS5ur9Zz|f+mP4r zH;OvwdlaU!xx9;>WxvoqsOqmZCKn&ciXyz*?uOFZAFQ*a(*8zSP0c!%shm^$_Sd{E zTeiHiTVm93se!5FNsu7)qSU2*l+>Xg?@`3%ZH?3f^IWX#MM^iczShJcJ0lh#b2t!t z0LC8>4h3eT0ucqqXNYp-%x6)3{JMOV`#N=pexwvJu!laK+_e3Zs=9%Q;k5ajM}=E8 zc4Pdl9T~2bZHZFzpWWU+mN2yC?rl6jeXX}M(@UR_L7!ujcsrwz`|@kx-qOkUljNzm z>R|KyPxn_B(i=8yd3=BF_9M?fE;@Bv_0aRW=c|-UIa}@cQ{Rr2jzbGpXv>0&AH4I% z;_oe0e>S)yZo)nB(Ch8xY<%Vs+l*O<3+nDkg_o0`4DYKA9`_nMGa)~=ik9w@thP(Y z)ya$RNy-@PxMMgOKCvXyd#E?v<%pR`YwLIUUzer_DIt3D>X7d{@6(a?`?Z84E~V~aA5)8l z%^0fAT#HGHtTN53N_%_hRAqiz5(nyVqft_a4&L+89oBt)VB9Ci>_JlKv2`1|k9dDxUT6El zopy)5a*`Z6O252#VEEgEh=m<@4qEFDHQt+6sdn7otl#-^V>BA&F8Wcm-7!rDRs6*; zm98IQZ*I-K6wT&b@rai!MhET$w1;>~~Rtjr)S%D4Thpl#DPnC1JaJ z6D-!@9B^7V*xMSqnRUvEz-6B=Od`9ny_Q*1x)E<1f_YEUj-5qZ6%>L;w>jeIu1LSu zZb>}Zsop@Wn}TEKA^p!#df=1b@Bb+^hy^9!qZ4D4Ax_XyJXSa!#@B%hMCNB?)p<_s?B%b@CcJ;B-mO|b zcDhS_R-?@V5uQXbY<+#cqbst_(PrRO@5X0J+Fzes^JNY&WGnKYOdAg|44zFd8Ltxb z`V5bie_9|D@%+|{LvdezEfeBv6w0@&7p?5Mb*9c|;j>BiN*aT;v;6he*X9e%RBfrf zvK7$|zE^$@oaY=ex2QH`_}>z3laNp1EPrKtXgaIiS>bsGKibxQ1IeP)W#^@D?)ThZ z!lbtFS=+oHtZ3a_I`>2Ll7gNdf0}X@INlznI{|p}2yqc$%yxGl8 zRpw6o(bZlzF5XV*S%lNJ5ch{Y{}D2wAGs^O;kLrnxSqfE4q`SKEzd|v^`v|QvHmo@T1B|Ds#%}ZV~3!WLm+c;>kNFe;q5hH1}SX#`V4bxr(;x8-qlI>+>twR1#|eH6lITJ$T}X4bE@*a zJoF`tZY<3qpC0vC^{w&-GxE!;WNKUoE|M9%S8aq$O+a%CizyAUZaiiJIF*9V1pc-ToQ9Aol{1fnEy zpZ*oYt;mWcR$ZCNvm(QdJK3C_CKH}s&d+z2J&~3)?y%k{V?A1Nxhx2sc|1&|(G|Bv zT3%HbJ-G$<+R@mx4;I@sdI{OGn*`l~9z{Jh$M&^Nq_s!uPt$di->0RC%5j=;Ms`Y5*ECpn z3ckLQ?UEf;=1i|>3u$?=cc*Pg!iIUSufIx8oE}&E81KN7~mq(M%b< zqNr~lMei=PdmOao9<3gd9ko8Jc)P0m#b39q4{ZMMbL!KW_ZOKAZeK?T=fG(8@O>CM zN5)`L2kus8sodWjG_l`@*OFbZYt_A_tA<*-ies%M127Rjc`7yX)n9UDvZnUE6>^U* zv4F7)C7HQ-uh!_|oZj5bZfzeiJ6p|(W zp=j>%%rm{OW%iA@X|wuYc4p)QYeEmv{jtuuHwMOw+p6%<;Xd<*)l+U3ZhpJPS%-P3 zy*;*t%oH)C^`^^vIkv|>)IQ0*@iKRFlpg23 zzUTf5r;gw|j8%Fxpi&lg{8nlFL#RQl7pGkhAgpJ~(O}=qLFEiQMR>6i50Vp3nzW%F zjwoqQFIJOduRFl|?!ag`s|Zbrsi;20wmQLv=+cGh*(FlI;gJAB=sHTnD?RH%s6xc_ z&|)Bqlqddqz=%51XQC!-n;PW ze6Qw%f?}nXmZk2_J-MX9C%s#gu48h&P?Tbo@?Oz8FZpG`(X|p&{i#6`W;X)8@bS-9 zUgI*xpPmW#JG$q}tE~^(9xtAq=+)KEo^H3;PCvjXzL+JvVT-yIFrjp)X_d13($gzU z8R<5?I}a-Ka;Bd9e27S?9`_sa9t{DusN&uAY_pr9OW)l-|CAqyzxKU~f3K&KyHV%e z;^p7__k6b6tW$M!8)?%;49a3@*3qNE=9aDYo?+SbKdd*_lxz&F(q8E0cqxv=Xwa8( zRl8l@EFt2b@*+AE@-T{XG2?b_m^Ay|!t8TrJ3vPag5vNQH6PHzC>Yp-+;q6f;=2!i zUE^-4HvdWLVa)(mQz7qTb=W~?Q6+!Sp%a#&J87kDQ&}=^W6zxm-)+fXNXf9@R`-y5CyfOUJRgQ4jR4e^vCV*-#a>A< zAg6gNh<4JKCMeU6RnX^qWU&K7X|d^i=k^1bv#Rxsv*i~!8;K4*+vFD31~-1Xd)WO}r9>h+Ie)`{)H@Ab4DFAkYmJSr>V zIu~9X~txSI6gUeBSEU% z5!a-@m8$$crj)>wph!4g8YxWA$DLxsAP+lni?Sl7AJ)|)ypuR#!O?-VL-u7MS4Z*^ zjDSW>OB*rPWzdGUoYT{n&@0fE+Z;c89`2jT7b~70hu3p=5=kPmHi7a;;amUSknJx0`Jbx|vvgB83@i2avpl4`OK&nSIw827WdF4FUQe5(E z?Q{;$KT+!t&p*$NV`7Qr^0a`OD?o4+V($oon7JLANFofe@((k;7u5~`KNSnt~lUfH;LpCE@Z;VOx zZbUp&;kpb?uJjVAUh;-ky%Dnj^V-8ei7DC{^ipZQDm(q0(tKL&Rkn6qCB?uatDLiO z1s2<~vqZ%!Uf}{UP+D8xy1fuamS!iK6z=cNWBP;=1fr(2wdMNjD`U@O)Km6fU>Pp? zjIJ%MO)*&K_)R}{>%vVP^=ThOeYxLZ&34J+zj#)Qgz>aAUJyT+)vI~@d_{NCxfS!h z?J?oALsJZV@b!Dr&iO5h^==PRso#b!Ijuz~C2C@Za2Q={vJ2sEIBWyYbInPBL9E(s zOq$yWqNDae3y>(;4-Fb{bC6N2@EUXZ-YayX_Fpb<3fW_fQ0nH1Z2(O>2DaG`dN$B?sZuezdS=cg@u6km-k2)luq`dPAq<_SX#J%jMoF z$b4#i(kNp6toD%J^GT&*^_Rcw=UOH=RW`p_Hy$~WSy7=KXSUvhJsV}^m4NZK+Er4t z10cd5VX1S3{3#-aBBqAL#~fUyoGZmY&&lD~3kD`e*eA!fW6`Y0j{a&PmZ`A>dH07U zy=-}$q9(pywx$WvIvonGFdsMu3fUzeYM7KZM|7$h%~eP+T#n~^#+>8A)fFH4KmPLf zGmsQBR~QUg??C#T}(aFDp>;V0UUcPI@XzC>H;mqnQ+e_I*7v`blwnAx>^`D zn#=~b&(1_xVuajNg!lkggF|Hs#e_I$Fm>@iiiIQ;vbPmH5gic|I7?wV!e!zdOZA;W zt?`6vOzBQ-m0C}Agfq@o7~`dR$?@jfd24E)W1eL)Ftd*_PcSbAnP8Qe$2LlNcI)3% zkTA(msPw9u?=hcR>Ttx++mAN8dUG~s_O~^>?M!}Mp#hcKbbTwc^0BvL$q7!ANuGh( z`-16A>6|CgE80tn%KcY7J7$zS!d1DMe0h`hnkC*Yvjf!i<@_s3(r-|VGjx-U zX$sY96+WI7ay27cJ!45|F6OM3Xq;Z$%9L=c*DRGb+4g|TW*XaRVzrr6=reu6qh2AP zICu&R<%X@-we|oVlQs6fdJ0I|Fk%4++Ib4t zqFNNjgWe25)uLOxrn3VT4FTI3ZsiL&8VLLsBVX8asRtVQ8gQHQ+uRy49g1iK(;|;l z0fpr)ft-#QWJdE{KbiDAr>DpvqRFgRMHc1{*hd`7MB3+2Zq>db9 z`f}MLSmh`*5Qb9cyRr+_P9|)scc3pM>M2Pm9ZvApPHl5!R@PM+l{l8Dvg+7y7{J|; z6qPP{q*2qDNrIiJ7&H0PECIRR`O*i$#mc}&3B9Y!j;oi67|h$H&6M?5&GFs*woupg zO>tUKluhFVgblKB9`hf&gffIp=0Oy{F``0P$DZZL_W z7O@p9_cLq(V^bs{zM2$3UmCD0eAIOg9{vlshdm2SJ`gnUztaPNj=wDubaT*ZAcE+& zVi9r>>X_o7P3IZNGv&C2sUr(9{Bwn|bWCQy^LCRs+(^f|i%m2Nju$(pF#Sv|WxE!J zA_%ibH3KBw3N94)8m>DJF;!v=fsPM^gatl063Re_2QLk8^nW~{arc}%M>|HskzS8M z#bpZGkb7=u9;5C^M1y)7*w#Pk3rs~pUMEBkHhS36o&V?-R^$8aonnMeuqya2d{qzW z)tG*)#90nRfImY65U!u^p_eFt4WK$ZG5xL{TA62y1s+m6kQtX$MHC^(MBg8m7+Z+O zaW-U+Q+(q12nqXv(rcvm`cpW^JW<20c_-Z``#phAQpi$iZSJDH3jMKQ~NVo@=%R zNQCW{;lcoHjPJpLkHb^)Ghy0`D%AA=g|TzYy9#$GtFS zS>YKBWxFnhybf_BF=sjT(D#JO>;Tw1Ghsr(6__LFwA7Wl$P@PQ7nrk%P9(M*Z0at3 z2o^kVKADxvOiqwoufp@^X`i#(A?4|>kEEyy_1ZWtk!Ij@nR`B~Ze#4)vb)Z?hH4U9 zbvJt!50;{MTBy=?23pjQOMelwu{()+k*>C`yTH+snxK7L;V%vsbC(7Q1F^2awU{Xd ziG`XoN)aUx(ow~sP8%Xn#!hZC1= z_2&6olBfozgx}W!zNr{IEB*U&fZ>YW9`bA`BP`*t*9jtXgbIOU0R0xak_$26+@2h}bx3Iq z`3mSi4;Dj|7^B9(yI8Eq38vejVnl%#U_ic|V+xDt!gSr(Po9G#lwNYc#oWb>6(^LU3Lm`Q4kerOL1b6^ z1ERQ0|Lhoy0*w4Tx{{kcJZ1Ab!zM;ovcxQ6ZXKeA}}a4Hs6( zsvs0j)R~zH^>%Wz%uGWFj%c18qfP>Qf<{wkgw>{aNR9lLfBnyeM1xaBNFZ0c|DY^g zuVej&u#j4%6vYLF@LH6BT3XwyLt|ig@hp_I6j_i1Gd=K$K+@tf$&ScX1B1oI052;< zuo6cCF78?aG;jvR{9}K-k>Y=jg~ZJEBZ#7qOxw>?HNhdyP(vNz;9ZdjtFY512g?4& zE-r-G5MTu0UPHwLrid6ms>9xm*BzI7j#GpQjEnno-~K$O3WQFeGAJfH%C!ByaX5$; zF{(_M+>#25c&l}d=C!#H#hQNIWW*lj{CM*z!cfBe`Q+|m#2&jd70y6A%)w=^T(0u! zp=h?97G+T!3m*nEguUBrLBVNqF>Gon219m-ejH0UsJOcHJi=N2I~ctb`=SuwI-Ms> zfK z9S6-z6c}pp8w`oPgP4J5Ll2Z3^qfPSgkd=l=0R!#X8>?B9C0Y#a^O&9r^gxrsTdbh z@|r>&CZe_LSK`JXyEIbRN*#6~4B(++o*nzbnT8v|ti~V!OBzE>a6!S{a5mo#evHXh z&V`|cixp_jWI|l7q826-)o({!0twcBL`I(?s_BN5)t?ESqv-TAm@ooDYR0H{q(I7w z3=IISBDY=_U_E@ESr|$xQTJak<W;vA=!(6E$9*J zi}(`zib`?ED+1{df&Ufb|MTZKFeraWHcXK3oLVQ&xL|ra0z3*&DPDqtbn1TKC~&~5z6wLpZ_eLP@ z@0&sigNp>VNJl(Fi3AS35sHe8Y~ZD5Qt9HQ;YgQ}7(F8Ph=elavUtGKU^QuJ1cUs^ ze#EaSu8h@|^2ZsRyUy6c;u81-UJ?)lAxI#pk2D6!tJ<7#MvLHNL9cc;6F#Vm)5Qgu z3S>7P5;%?Ea>M{iDE5!tifH|GFUc2E<`cSO6>w0J14dGSh))i(AyEPM04@1k9tHZv z)`@HP8j6npeSBbYMRts#(2?707)UpY!|B_{cNYC0-UT_* z(60gq0V9Oa3QP`!1;i{8R8@l1|6P(Sv|A4355~h?t0J{t+Rxvk_Kc79ubR#2BZOB)j4x*_fke8qnrFjWZq% zHet8IM8I2TF%*&X9|a`tKBhyKCe`Sll6jrW&begj0%UABI)l3kA(u(IC<_k;U`|UR z2?qfei3qctV2`}S3l7LErSaDR3rH8HjDX{V5(-M(LN8T_d<6m1SsEq7q=lfi-orG7 z_7S!|3yjARWx+=ltC!;3|JC~Y=b-)1X8>2OJ#kw!h-l_^O>Q$LFjYQDAP_*V1YCG* z313Jwbld}f0S2IjX-a3&=hZyqv2Y|~2!h$*;?#SQ${U9*S*;3g+)!7A-6{bBU=(Co z5UgJdOSpkxLZ1J)H{=@S0>6esficcFmOr-;v^;7^PJye7QAem0bKp7PB*0(KL3BgN z92%I!$NlZ|0Jsv^ew`V3{#mv^wF2k_lSgPkCTb7vP%*_H($N$g!-#lr~^5z)=EHfy6?h4uR#)&bS8neegEbsS+~jnXPLs zG)q~uV1yKu9cOt*jB4}$8W?7dF%p>kkfR1}+uk)>lgp+E=EQkGET0{s`Pr?ADc=v@ z!VY4W6I04?b+w@$eIbfouT>lvJG(F+GH_lF(EC!Vg*m{j!23ub4M{jfwD>Cn2Fk1^ z00_u!MJ(*@e*-)~)bzp(n9A|zF2OUzK=^*h!Nnj&Y_Y)WcU2Y_(F#Zji$^Z;43>9t zaU@Ev3v^$I1hLK$;M-I99Wa?h9$n5K zUgd=ucod@Dtn@C*c&v74qK^Ef{l{k)N`!&Mis-IotY3?Lr>;dQFm4e`nh$lRK5*|3 zr8dv)*&uc41^rQDp7{;p8r!>5hJ|;Os@=!1zH!<$vl!<)UGrX^HQWgjzI*nQ`ah5C zv9=0dV*7T1jBS<~_V(YX&{K`~q92z%`#SJ(dc)wLVU&a2MAYQ+BgY)B-tkTv^gjR}I!?J>(8 z+@I#|;4s_Pn07bbenYW*gA-opUZxIN9zv)hzBLvw3a@kO&MMO$OiQ3>XQ5)xUueQVsiWNzcDR zHiiOl5{B^A$^ga@Jr#{h)xis=!H_HrDiBaGQq6(}N&$lW02an9#PfwNg!;myHbMd> z5s8YB1OgPJvt@$2gD)zKDj=S3MF`qXHdd4~3^9RJJT%kY6i%&6xQh59DSfjF2Yl>c_f4Y#p$ zbr2)^9q{TlLf_kPyX>azYbq|n2M%^p-d zI=tl4RPfmqM?^VS$hik9C@ulF=O_7RQk-_D$`ogp&ze!OO5OLV{I|Z>jvU-Ab53UC z!hVBa7rl2{t7STWNMha0$6xLU+Ou(&zTw{}y_WX1bHC)&PJOORDigxN@cmuOdNV1DG}YdBi4n3BU= z1Q@fh`y%4h2Eff|orK7URz6F#Vqulv6A|jxK!#yVw2V=~>g5u6tteA)@=$9DO`Au$Rx?0ImkZGc*FI3sv%vAPYghm$K{jsNzhNIn7-HYf!$`I$gs z0&^e+JM#pv13PAp2&twB8H^*plUH#6kiLN9#vJS05MfW0gfj}ihd?7gu~z1v@c1W8 z{(qlwVG#FMVa8Jm>{cjh7FCMX1r-L<&;dK%Hb#m)c4SV?Dd#$7TFn zbS8{rRG0AKpoORBhYXffhl`h5!Ji5g=Oiy=u)AFFI(OZ{xK^mMgPquN+b+^0JCy*Us;bp3AO! z>}9b=mQ{xnF>aQOZ1c^r_;vL1&#d#4wNsHP-#4YYsd=Z~I-dUELxxXi=LPF;M)v|d z@7=4+<6CxDU~VpyU?!K=mrjIjBuiT>)b3^Azey#lo*hB$cz&4mO>^vGo5~qCwhrs(XFzTVcTrZmH0BQ{q^RRTbs+mL8Yf`T-p`)(kZj)C$`mDr%x5}Tf-YRndv002wV8A<#d%p)$`2oolw62k`QA7&WQsx88v_Z943rjU?d}GMOSx5v@Xtu#Bm6EGiDU*|H4fQfBuXk zN_l7@<|3(_1W^IYR&!QFt8a)P0Kh#?5#mHhaFRlR31XKe zWI{b#2t$D8fq{FV)m(+8Mp(7k0x)bVltnQW7e>JQK&UpZX$~a&^t{tf&U+zEPIo6r zN1NZd>OQCwX^JNU48lC zhH`A_=S9P`m#>`gm**+XcUcH)6`Lk;Q}I96(gdB~ADpS!wK%4s)A*dxQKvrNioa2^ z@X-s$rclzC)G z*W8z<-r2?zf(;j}*>zXu@ZYG2zfp-1-t7m*m*(tMaU6V4RL>%4aQCwV(=Uey*%Ys1 zZZS}~%lh;iR?fL`8yyaADELW=(wX#`Vnu0ATBkGi3^X^#*cuLK@(;mQv~cQ=s)5}} z&rQpFX?sco)>gdXhuNE8($wu`WG~576`V78^&uG}6u7uexpzH@n}aie?ZP=zr}sv# z(ru`HN7pHE1zC|uv1RXDgZ_f1I~v?;haStQXkR+=;@thLulq-jHo<89jhKG=lebrE zH{F%;E{|L@cJjg@`v%LXssP-EIL|;-m*uA{n}%E3#SRVnqUtr}9>uiGzGfd2uU$W3 z=0Ib_!K6toUa;~7^Q{k5GnWkR>5s}9$eMf`RcEWryEv>ft#a$S4YB{rRj)nD!~vVa zJ4K@1G4ynr%_kX|iVgCDlCPAEj~UZDLv+9Efd5|h0y)JCvYEIOfZxR03dkU!qC=EP z^)N_*ZV@du8*(yfKb$4d;Qsysp_Q-?t;XO_QbGxM6Q-g%BOL+;wG^R!(*tJgNrsS`C7(1m6R}i@ z;ddYnTZWRDFb7C)7MQ2t-jrh1A8?yjVfi(5hzu4+huabjPMTW1$G>p?Wms z&qjqJ)ycNWgJY+UystWG*;&4Vd)}0P;PFepq<4hr@b8PmD^zb!?0Qyeu3vi3LBXJK z;z3s00;U&6Axhrt{Dz{jh4(DqCRsZLa2VNxhV@Tk3F@dX?iZ^*-|y16M_T-@AiiQ` z%yY+$jJXFxQ+({FWP>KZO~p)O>KW{}hbq6kKKy*QU-gPL^Q$`jewa-p%1G~iyJGjX zBl(_-elSyt#sc(8t4K@kJVX`GBkI~7RC*dwSZS+fPio;pDV9$?`3P2wz^##9T)t_K z)}arCrn`w!JLU!d%A4X(qn981abnWG=;g17ou8HR=0#q7a(GhGd*q!Dd3fR7@zqI@ z%S&NZg|_3$Lj9u~NBzDi&KYFfc+rtVs|Qy(*K};>GMT&-gO@hgv03CH_vG*pxnwsyw z_*7>V>=gLcJkONia9F-Q zn0SFUSlaF7^Vq1!CdK|e)DIF6?!E}7SZpt~++u>+!i z1O*f?2BH#M0T^B*1yiD~K}-!8SANWY#Z)AzN0>jDV1m@LAidUwe}uwWwSf|47JMk^ zQG}miW{x)!`=w1W;}A`u`eI5jhT+lpm{ubU|11}SY9hO7pCh#LYfGiY*^{J#bGR-V zVfm11Bz#p$nwTp9Ub&__JrgVuI58~|MbeF(jl@kfMR)|^p^-G!1;RQ^%qz|7#Vvp? z5~&0gDTuBc+z0JA?Ap6(G=mHRk;#rx zp%)7RswHdq9U)eoF)wa?n&sP4HTdzpN~M|MYT|+qb=EzuBP}S_bnKU0DVrGY;qwzN zhpv*2ykE`yqD*PieQ&Q}Eq&_a`)`#_pDjc0c)fi{Ngn@U<9cIRv!JLy7pE}mP|c;4pR=hL+yqvgy5r`lh*Or}b(hu_f9P z8|T_lMUOg3c^I5SmWo}73g@e?&?nrgqxp3!Iz`bWT-rgg5^)-IwUvoK|Ba{uE z`#^1)^g`jp>K3!8(y5-y?Zmg|Wg}`)G;aN7@|JT89woo_{&H<{;hhIYv;IacWVk+X z?87`xkxk;%_&f$vfKcX1<<~u4JGRNzxSO08k8QS&3 z0w=1UC@k1IFp7v?6X8f2BbIfBP;WVMQE=(9H3Glj6a;`P1T=aa*#-W%FHo@^_A`73{iihh!(-WoIOCdpKN z!|GNi>-op`1pl}{s%X1w?2_d`OP(LLg=ZA}&0#^)OY|L*t$)jc#^TAqi%bgYMxvv) z4QGdEh1#yFW7%npLXv{#HsB- zg#M`)0h*baz841)Rp*EkG#nOII>AYo>H#>Vi1^e8fShL7Y~FhoR&P87QWCw`QzT6_ z(?J(PVgOL9{;|@!5FTdw4}draL8^1+3gyk&60jGChFXJ&0D!Upy^0k`4Gkq1yFph2kghn<0xe9((bX9AY)ZTn%UQ z?3B--Yxvrw825OtgJac~J6~+H|{~s?-th@2V4Fhr(fZ=gEez zdz8nYt(FxPHw7COtFOLco_w8lEwAO_qd6o~GwX6@d_3*knWFu#m_Mo#ruASZ6JcnY zr$N73d-4U$O32j^+}gP@<8HZ~PIA^o2Sv*D$0yFKiS&g>+*aBio_fbv)auiB^_o!) zz31e%P5ZSHiF*U@=-c|=NlG0nx*JMAbImziamC@F3sJj{kGbEr^zJV)%e}VdFS9pW zEqer^KLc+%TN=MQ$>sR)tC#ZtHO9rvOQCm!LJdczJ4T*cziKy3;#M@=8MOM@Gq13% zB<;o}j!(ZdLJw^^{RZu#t&(lmdE0qWkKZ*fx^Luia@Ee&s}<%>UOAN@+aLVvh3D+9 zg)#25ap7pnSZ?IeVVBLK_xqluJsLe?_p0esO!U&~Z|<~D_utevSL`yFyb*;yC761& zJbA%7rORuB&TDfusiCYsEM2uqpz$Kz%vODWoI|M8ha>8>!QW5UMwLw8V+CxB4E#P^ zUw!PU`^0N6(MY=Wg?e9w=ZA&9k!e%T#cwp6(^<9BmX~(%;+R+tQYe-}XyrPv5HvjO z02L{s5%4SzJu(zE1#n=9|NX-a!-Nw$Tc#%iKfVhu{~F7^3%oXzO-G)<*=)w}<#1N5 zI7Un^847oD2Nq=1!jHBJK#(B0*u|+c)^%MQQP-*;>J_>OK?m=M2nWSr3@Tb$oMvPs zZwzr2ROmcNx-v1dJs5W45Q}6TNWPD-V>2+x3CtK2g0UCjL^h+9<4I3}{bpe6Vag~X z0Db_yg6P0MaNdDWA0l z!!R&)R@cw#LzM}Y#HCS>_O&)`__=dQRN&UR2`oE%ugZJ4CBE8SVJwF#*c1s53K zFFQ%GFUQ}nJnS`UHkB4>KKv}}{VKUWR()>SqcDX_9{b3bnhO339*cKENirwikM5r; zGK)U0HsJBv`CFf<#lkxGSq0s`q4rzySL!KYpN}_NtkJ9RGB}Ve@S#uF#G-_sns_BO zA1?U0XxbI%`%ms2wqK&6hh|^Z$<1&|qCV^?S`mDqU+r+IP^Iis24!WKtGqjH>OAau zI#hqNF>2XS_MlL-OSsB6iD~ux>!-PDu z=H7cdVteSgGtJIrQ*DbAg3A2F<{-{b#2TnS*7ryR0iuY22)WG^SL&)3rp{r=l0{^q zG!oNh9+`o$(yLW5*NZ(?om00=1r{*W$&L%tDhzQwIj-nzCL}Ooj*nXm$^k2Z2#8Q! zB!RDH#2kbmitwWU@O%_CuqZ_+-lEAVxKIL!GkVU{BFcymOh1TYpyUm&C4OiY!yk0v zQ^-3p!*wNlWm2i7iXcHe*K8SckxvG7_q;X%2s|B~|Kk1RE}<+&V~eSblk#BbdA-L+azf@87wSu5{c#qXP9E z!aQ&rcJ?J8YsJVX74Kr&6H#=Eqr_H9+vcR{Xjor0_t?Jru#oNvtb7XLqHl;s`0>|a z0}*PI+UeSh(|q5|O^(EI59QqNNX$Bl%I^H4oGdy`79C+u+uSyr#6F8sKlJpw^UdU> zEvGt~PiJpB*%jY!sn#B$ZgPvwdIOa9lV7Rp6utM?Z+lI&(`q&kn^)3Zyy;|5S$w?L zv)!}RRxay3o$xnG#X4YUVspw@=iA|~r%ljdi>uBnP0fkanYtXcbgZ(Y^DQNpaqR=@ z@$&Jjdq-(^vdmMn%Z;~M?&HK+F%xetC2dvW^?MXt&Kcw1+Sz}HI&t%2`^e|s1zUp8 zeoRiZUnV1^!QH*rmo}|?%Xm1Wdqd*c=$&JU-`;E(Iw|k_aM;(bFS@$1aWO@HSSLMc zBu(PN+tuHuo&@o1^aVxohZ_#uc~mss_kC@>_u(Rf({|L)s*lS(rmjX=xTvge*F4pp zt@Nm>U~rex1SfyNP71Mlg*$gl+aH;NfNa(&7! z(sin6deNA2hyBqD^=1!cLn>~{>*^fPgiSz`%f^HgI}g2WxVV)uPRlbOW$52q{8O;1 zXtm#f!FQSN{_ex7AF|$@d=#jY@k^xpqQZrXi`;i(+OrV95ooE5J3qZ(SVWx3;msVK zbf+~stcsfM#1FzX6)7LtLt)IMAKZGYB_788GSXH_LK(&n$MyXdRec)M@}H&R-%a1q zT4G*^vZ-;N-t%5{yTN$rRN_dlVU#@0u}E?4>o1>PFHv}A<T==Zt_<(h=l;#}F%bC{(sT|tR zkpV;LTUQn_UUuiiyL<-2W0UP98S=$DDD#`84ewX4!kp`7qU%5=-A6<{z!%}w?C!BG z=kSE!NYJUm1k9ZGbg{URp9#(NG)3@Qrch^);B!0}M9Bqb5QrRZ0#VqfFg<0&11$`7 zwiKRVZ*zg`5a{9k@XpdGnX%~ZgNY>W^Dle49(QcR{wmsQ-(Or)Raq+6OgXT#!EI&l zw04wcr1kS#s@*Pc45(M>pJE?A(lDqB^z{gCq?x|<9^Ey3s_Wn}n`QLDy(O=tYY483 z98u|}14m8=P1B={CMAcx?@z6xe>LoIS=adRhNsn%1LGRxE&S_LT6Q<<#>7pHxtF_h zuIXKPn4}U<&NnbmI%XW^o&F;8Vc*6lNugd|T?zG4nOj4G(stfO7p7fP3#w!&1*hy< zUSXfE==h>p*HMA9i*cjT*74)v1zR-al$1i!Z8(xb{E;btwLxjoyv6YPyuS zM}X#%M6cev<7(e7c#-hUI~OSnz37L#C}kO>d!=o6F>U#rR+NU!ovPC>O*c$G9aDXm z@ZNNta7pyl_Q|-$?9_Qy&qt#tY&NegzIR7<{TqiI`M*)OuU9O(zbfscmv^Jzt@Gq* zmmfAPAh;z(|4yL($Dd=7VD<-){syIpq;ZBjQ|-)y*6cJ6xud`pFAp}Ni&nrna>U10 ztoxE60@v$7FD#L&hsd@Ys$2+1ji`dft!W@ea$wNKzb-bwortDfEb#{+F-%{j7a|g; zgV2ILV=*%dIN5Ljj1cjln;fJ#Bv9fzAeoC31gRM8F&w4ur-W)GITek03KZp>*Bsbh;=5SV_$C-%qL>;vz~zb%G8OV0L1so zP^XR<`x^kZYwA%ZXKGi%LYV;A+y?46JZMinKO*b*5W)otQK%4DQ%HN=wf4 zHge_qtic#*K4%c|9T6rOj5k)ML(97VMhz^|&MAjNQs*8G)1z@=55Jyx`%BXIRFv+J z`^j5tOWb#r_8nBdvi`5nIy*zhMykH-C^4)1+^IO!c|AnOGUZIj{uGW;w$V%3&)f9( ze;hVAT=i}Br(+#GUPqt*(x{tQ?_KTPXg1|Cc5PI7Y(v?t%P&qezT{2 zsF(>ujSGBCu61^p-((!9P2Xv}`qRVmQKwhgq0v@RJH8PIb%1hyGD%A@nJRmdiXr=Q zGN$V_7Vi$|-2ZTSizhSO-`3jOyx{Wk#>FL^m+zi!D^^J-Zk<|F)c+$wXPTbxR2;04 zw?0x-QzfWfJ*qkO{$Qw@3-8qygQYtTKUY{g>`U#l9dfJP_H5zN?wWb&*7eK~{G|toF4yiz2&(^&Vxi7cp-yp7vh-v2e}Q z&ks?1BUPu8Z%K4L?7G#iP1-_HvDr~RQPMIY7k#cuuqh;Duxoz3S|PTsED5zXrecX& zqWv+m%(5o0Eh|s%Hp86$;4*sqxm(5X`v;9*9&Z27boZJIAp&P}6KKBxW zw*NV#iXU0ux$7^T=9J62A-F%+XMbADIlZyLD{q6~`v8@_)$^OFu{&!woHBoVxl5oa zQCrP}x9Lt!tqyq&YQBy7V)a{TPv5|-w`TsE$T2K69u~;V?3+A0q5v@YKr`mM+}H(z z!FWYlATu%Pmj*LVgyHr*igv?p!TJQeJd%VyCv<#trAD5q8XzJLK#eF@H2})z3gTBa z{5fDEr~sXOK!+v)W>6kxmIfm)IaG5sS}55(Ih^~D0wY1}-Nkt-;2fxf39cHbDUl%x zV_8U@G8-N^Fo*GMSMTA}5zg}zurh)Wxl!qEu+zI?x^PVsUDm72An;PAKad^n(9y^3 zLZwixPCaV?!5Zjf=P;m8XwLG_j8Mj^<=iIRj>ELA=O7}*N`bzQOLr5o_avKqFZ}i(lPqWU zhX@r2#~G&!+!&rWA^pFV<#1o`SmkHG4}V^t^K0X_=)`bcF52u?7J&&_{be0h=@o@3 z%Y7YhE*!(U7EAW}Jb}*i5?OQoe7DkKA}93P@)a{)#a%i3?1R8N**kI`Hyi!Zs3S*x zLTctFMsJd^1FsiTkN)UiYbm~MeWJO0d9kIj=)+CKS)bFeY$qv+AZ7O#@Dl^bSMPwTjG zK{TSPilM#QS{M?&gFTeB@b!)M1Gsek{Nn$XHvjYe1O!(QSEMAp3uJi`BfWDU44lmp zz23;S6D`#=u>psGObrM&m>b~EVHrvh-U&)hp#Z2rSNC1^P}xbqpgYb{ATnvf@`J*# zP{gu8%9Zh504EHLKjrw-0Ra=*YoM$0Vqs7bV8&sB*8m0<>{9#hY&7u-A`=772i?Lc zt}F%F3pSiVFhilGE@^WmMld_$sm|OGF@Zf3`<^k8He!G>RuYbBV8M?R{Hy{GAKldj ze0a7W&ujZzN5M>CVS>vis2>_7RB{Vf;UAF`X zAOT#mOF;k^Pw)zAq3tu^g7wnN+HygXf&6b#`W%A+ULl=LlxiZXpoRmIvCFp4Qh-ary zcFd#Z)cA(GqfzJSUL9z)FZO{-B??)Mo z3WcnakcSg1oPvU%3oS7}inQ^QQ3<|Ktiv@U{~;1dAA0|)?|83O>IYybey zIlo6m5Yhl=DlaVo`1tQv{Jkm-@&wUYM#l|O%luD~8n+V$09fE;CB)Rd*DedZy!98` z?}J|QPYM4SGOuPHZvDtia6lP>$=lMyf`)Qc>pI=tqTYC+Nj{)`kf-V%&q~e{mkAa< z$xa*?!S~vCoZQrGB9$#Wb^G=H&c|sc&q*~YIh<)Ik|dhTd3@3K(7SACciFy-r7Ab> z1I+*hRXV!e`wDU}Fj?yv{7s7NQq3>w;gPe#w z3c@^nu6EC0N1!-Tv-VWEfPMNwIeQ0n)Xm|r0xO&Od^YriysNBy%P=7Wm4XP_nENkm z8Gx9<-o4F54RZ5)aFhqU;6=l~xeKI)qh$o?7zzL^26RcZV|iIqsCKYAjlK42PQ@%vY_c^&e!=>;YJG#@JF*bnWo3hUZm&J)oJP4XUckcWl;&5 z_=^`g_euNpF}qP_grhw$z-ChcQRlIZs+ihC{3g zTUYbvQ<)8jG$9L%%Om^_B^TOkIbiDbRK1mO@)9oif9$y=>fKJca#5|M9${p|- zqN<^+GzY~N*k2t=cxbV_bp|(v9c^zHH_^!(%lpxUcX;&gb-?AIR?TZwY-LTOlwVOt3Q+0 zw2ayK6jvqAI{h!MGO6;V7}B$WldbHo$%JHHQjoht+U_j38v&X zUWqK8&*SO0l%!pE9F9gDc~e}YI%<0J-&06V}oO%+nke>W*J=#M<=PhVB_Vd(|?E1RKGHDmY{LbSPYYj)dNj9)8uqKXQ6mee^=z*jRnZ1o^Etq zHK*e>N*_m3dYxO*SZne0|tnlghc zsnltFL=clr3Q(dl1eyvb`?q`3*@yW*(I&hUh|bZR?^7A}JtzqMxpK#*d|H>xV$zVa z%mj7)xg~bYNi)H)0$8+-;_W=l)SEx`Y;O2i(0CcTVe-g-JR6k#5?5TVak|=B_2Rkt z+uCj~qMQ^dQ7ucY`V)&=wjjT#KYinHTCy$3MA9B*p5OPkyO%9jH6RdL*F&oMMP0_5& znLGxYAN^Dje4ijB_49;{I@1+P$dXc(3zseFUKmOW{9tTELr350?vI~h3X-7(dk&P?{AGakH)Ty*65z8GZRANq9lNeai_bp^SMM+YrJi&OP^_kr&i~p7KI?M! z`!~e=GEbEbo*l5!e4I}u?hEuFjUYIppz`n)my2PgiNy%(v&rcSD3&kqTDsc(czuQy z-qM1nrKu^|!w6;D2xR!UiLjf=1-p-6$(U;E^#@gD6tUQqQvHrQn4@_DW20~Ck1aR- zqM}>mG9Sm5Oy~QOA{rS>TTMT0w)Ut(%(pf+*V9q%XG?)7P*5iwz7)|~yD({YFZ zb8Lk?Q?Pq&_~Bhg$xl>?(Px&%td;q7xhl3hNQDQj4(r9bS{y-4dqHLK{YJc~fQK;E zT3w754@@wfmvAK=5=4m+v82R8`#GkcF%;Vfrn`Ixbsyr+@KydmSQMJR;iH0fXu7{?ptD`o_@m_Q4hJyc zV4snzkQ zPSE(|Gsl@f=7`Fm8!T2fdtZ2w|2}SI79Itc&@Y5!RZ2xhr^eM`ry`vYUJOANtOAaZ z@^Fhh0dG@DBC#BAGxam&WZS)6f!MA<&FAFXKl!Y`NS=wkK)>>YGsyxjEhk(#lTBE5 z1z;-=5#gt05KyVQvH9Lr=ZU*N1<1>~#EEv{ST8m!QE9;SZ<~7MbP}FQkZU9b|srzgt$-%yuBw zy?|nXnI<89KOTRmc5?W0_xLYH)UkiWNb9Sr#<|kPZn|=&!|pooXJFs#QkGt#F$U1d zlHaK75-XopZSR^;!(w{rli=NwlsIDgmBa~l$kN5#^^`7N$a0baR~HAf-A1vs|8yBm5Dg&o~MH$NCZhj4B?yXusEZe#G8Zicb*B zyB<;NT;7*JXQU^sz2KK2CW}}u?;RiypLg$Ka3D5Oq+#w zn?rQG-<*wIcr_bty!xWI+R<65MUb8@ih4<5sC~@A5lYkb#WOaBjcqzX5~uJF-*#m* zB@8c1UvRgYG?8q>9@~y`08>-rh7@`FMmN56vGvG0x@WJ>_Zc&4FAx;_u#YAvj#ePb zUt(8h$mc#)b+G!CS=i%Jl5Z-epifNEYBjcjxY170w_wnA9ucH+6*$ z?v-AC!a`-C(;LX%INu}e9Cy0d^~~B_CQhw7Le^rm1TM2_J*;vvoHf_+Z?s(6bksNh zugl58LjC2?yi;H+%hl*T|HdzJvf#)xB_lUX&$t)~7k*vs{lf?0k;PM4?<77%oF!^D zd+Vy{0^`kv66%F1MK@08wMfT&=Z~G&w03a>bq$lbjhLxw`WWP=XiMc6Z!PXTFOq~V zsGhWXB4ik4jXze4th_z*2K;!?I1JtPx`b|{|7O@%F;UP)a1NcPEjZcfVxMqB!AVJ4 zT8`WuyuQqCF7hkz8V1C+h(AZ?<;I+=Hv&~?dEz*jnVWW@(`uXD-_51)EQfW>Rnh|g z9la4(J0_+LZ6dhW%bP8NdAE$ceDP)DsWT24rbv!~SZFBsdPzI=roNJh$W}?xbJ#yo z7(%H$8tS)Q@K5?UJg8;|Dgi`jzWXd}h?Z$PmHekvdbr0F<>}fiw2s z*;C|Z(=VS34Eh`gzpy(3a#>fK`{Q)A=rilt;S^OXNlkL2mNth>Z*sSXxP?J*PMA^S(Mc!i}PC)3WzoS!aNt4I(zF>{^G zE{-ron<42&o0^wHh}TXZPJV#iYCE(g)4@|_lun<=LvlNxYyFg}oNsXyI(I)1IEsk^ z7|HmbP4N|GG#DoWwKs9+?C(fsmp0+dKX}2%FGA^b0EQf{39zKt$Kk2~9#9{~Nz9Wl zgL9|L z@NaUVs{aK7A<7665;0rb_{H6AFFq7dG6tzxHkRTg9^oQG2o(`I3Is-`IA;PTvt{D~ z=){iYJ#!ZMu)k@DtxwF(u~b6dAv!q?DrdAKGRA!eyYTEmh^O!Lci^)ZwKM zJ<9Y%Tf(p6Nr$*}B_oi4P=U3>^t1|u`GsuAVM#O{h^N3fy!&-DOA{lMC#mRdkp)2S zU_i*t5`x`tCmL#s70>k5gdoO;lqVW4HzR4Hj9vtrO9;%31~&v*mXsJMW$xbGgrLFE zHXUj53hKp5=FaOm7sFD9O=x7*cVv?b(8FM<_bM_@Id99SRgL5fDg91KplObk0_|-f zxmsSaviBw?K6~{~ZT&#JMgaG0NsEq>YB79>Lm$yyuzk&W5vpyT_@IIxYXtrYnj-Oc zrzAqUxo5?ihW*hlUSI8Ls-_m6$!7IG9Heuuub#wgP}~YT?ki){&V*RiQArqzRgE|J zl^u=LRcNq$mq@h#Uggx51)$;qw^fElGuTayV(=2>q{C%FdWj2``#thiX{Mbhgeh>f z2ca;k7n-e{Y6;st-y7#5bEWVq(TXB*ZeA=AoV7F3GB`x4FcdXX?N1B}NCV%03cTK* zK3sc$%4V^&*W?rqO5TJ&dpuJrtSlKG?%(hoFHR4Ng?k|Rs0b=LY|b4YlW~QXmebXD zRB-Gk?fij^Qn^0$X7tsgm^|dj%)q{(wq#+S6HIg>MMJ8AdD3G(Jo5eZt-am*6UC8{ z@_?07wvvqsj~_bs^>LO~TSILo*~h73Zc=v+clSknmS>GTmw`x4=x2|))hSxqc!uIq zF7!Jc`gGUU_f{Q+@+ul(QO1a!?DeQ|GO*#s*6*li?E+E}h2b%8KzjXTm@F!TR-#aIwuQICg^+ zD;~UBuAH6a=x>zzNc#4Q4oH);tHPT>#J)G@gWzxbBvGele+kWS2&&2!r!Q9Y;wsN? zYAz`Iby;YC!#wp>0E~d)HCc=s;aKHiLN3M-=gCW-GwbZgQ&-=hrQ(N8r}Huk^7u3{ zp?vnDsp-wNPTrB#k<7T#GW z!XmF{H`8Z_<+llVH?$F>ec0}fuG(G^rMFL(l%Z#u*n6I2`(dt%eQ8bs6r308kS+TT zL2&qX8k^JNq5b`chfbi?nYClDDXwN5Vkg}X$eumCZ0{ArJgBHr&Myem zEQnJfQ*%1x){r#WTM_U3TQiJvX!-YPi#BZn&+&Wude#&Kjxjxuaa%(nIYwEtSN$y0 z6)$@Y|wR~AZEt0kwb*9tqLUu`FpwHKm{wL@Ojy9f^ukJFAHBOGLUOk+gZb8=a ztfp#-y#}c}r^@hNZ`mT=`KFLGWZY8IwEp5efmqkZ^%D^r0av$_H62KnCe*Lx%wNy+l;&}bIoDnez|@sP+*AiN^;`OKg{NA z4V+&7CmAmvZfJ^vU1&)J)&h+Ivc4c*2t)#0C~_Xdxo|7cFp!n~oAi$fUgVhUDBmJ98}QKf5V*1)i*?SGWN!#UxJNEA2fkMgq&+@X$Mj`s;LEMq6||C z7b8-lc3F|@+nu#6$25_6Ry|?>QlsDwGe>ZI0_Y|*bi+Meh2Qdv)aa^psAs>FncvR? z62}4tiw8H?Aq+>SV9P9l5bW9J38_P?()1&3h#ReCcn|MUs~2_>)_lpi!uQ@M^(SU` z2`ad5L0+ww4*Wv~u~xR?D?NM#^Qd^PhHNoC0i7B;FC0Q-R1s2LuLjM6 zG~V?p5gxFj)Vn#4D>xZuh!Api7sGx*Om#dtsN|=gnEsKTQ>vP8V=3Lx|H6%>ykqPJ z=v1Pc=J}Rtm-*TJrY@*I?Z~VEva)yFQOFQsLXCk_jbZ-~wP@XCUBIB#QwI7~Fm}b0 zEJzxYt38VEH%|0t69VvEb5M55C4ZU9Lk{e zUp1TSPm5+FCzv;Mvt-^2Q0NR%bkhzM4S^>z_T(+5xCDZ_F%8=gai^3lBB;4;L|Wd; z8{#@aK@0YgpL-GW40`&B%E^j>eVOwmq39=DlvV7%P=m;e5o~kAE@~c%{;pE-Jx~M- zMG;l68NtWSv)qazgv`<$nju3dvoIJO#Fc5J3^NjH&@eL$msiB9>q=g=++T!WoHE95 zi9^3TzS5z*aU&0GFqp}-=)@DNs=(T8dDEdqG4y@q#Xyngxq6trLM*y?qT(CfJ^S12 zdnfEa@Ys^6nwn~RyoWr3xtNh|y%$_lcA>!BO39UDOc0h3^&Juz6n=xH;;U+TkioX= zAc+;RXM~}wXZNwkRAY)YL!>hu*39RLkf)^;mZZQDn{L54fAC9P`b9j@jmkh%(mdjK zey_YdpBOzEXM^$#fmvicR!nQ`ciskOOi7RSbFNBzj!n-3Zq3Zy8uFx@V`g<*s) z-Lqx}G^5shnGws(1%oXav!)B8hwDeE)gc`LmFX+lI<`@y6rvod8Mbdw=<9U>vcC`$ zcJw9PC4GVnKKDK>hsa)%K9I;Bb9l++q}(U&|2?CvLgJia&dtr7WlAs&@9OL69&%<( z1fF~g!Eml$m=xLGil)Pm^Ojq5WN-7{GQagDMm>`vPh->;9F~=hR!-7!|!i;MV(Gs8L+X47w_pjM{QN^Y56b{4z1x4 zxV5zu!?TA2a&oR88ftU0FK%B*`|%8|k;SY7j2JgV-p4KMs+~rw8=TG{kn&uD5vFj` zzMX)>``0*Y-2Z^^3uBJzg3Nwv)bIR(Iz>43HJ{5-k7J!LXWq^1-%leLsgt9Mw0!kM zc`@2s#G24{`0w9(haAFt5)n$>aG_65Zf_pr>TJ&cj!2RsQIOZW4SyR~ATz=mNB;dr z>XM!&>RB73WRPz`y`q4@bcuZS>S4j8NK%5C_D(FxWxqfC(D7e9R$6r!VbX(lQ0}ta zekaqShg}#GN0p2*f;)Dork1031z-t`GOP|wfGF=O3HVtqB25v#BdUlT6zKTbV8D5g z+N|f-BA!x(>)A>9gKVx>8TI58$sMOl?mk;euu)ilgT0y4&<3oL zSv4lt5_XTdx+9#IA!nAm)va$g1W8~FJ-4(_)=3GSH6L_x8g{lK&=+qMrW3}ytnMC8A*}230Ir|f89^`XD#<_iz-|+k_-12=}eYLJAUuthSjn{5dw~4N5E#iyKpxU znP%V=710_=u=^Q5$hSX3RGW-qj(kW4x9M&ow&C@;=Ft1=PYuNKO7m=KgPWmoomM7p6 z>Va5eiEY$-?#fz6Ojf74qLuGTdyN>u)90oJWs!6A^8#ab2kq{<4fR{w_XX>Hgg7`H zj?&62;om>Jf^GzR(RnEqY&X0Sp<)}|)-~L^jz?g%!6n}EI8}vm!mUd8hjn+&bTxEr z>H{H52iRcgR!-lpnpFUCSC_6Br3q3>Ic@ay|uFxl3eKqnQ;Cp}TV;VoP=q=@i zAgM6Mny?Qn6Gv%xoGRD{g{fHO(CfAVuj|`(I&DpM=F5QqmGy(YmybUdTiV~T6%}`w zama@Vv84}h$NCLt9_L>dehK^O4l{=XiQ~~X)qkYc)X?ju>d)62@0+k~`eu6u$eC%J%#KRT9fS8(V-x^1)J*BtoD2 zG3EPVW`y?i8Nnaoe9Vy2_Y#@~wWphcVVuf5EXN+`VkA%Q=chFz+sEz02KOh_LmPUv zn$<(g^>@(PX5WCLoVdjCZpt%H-`&aG>tRI_!e0*l2CS=I7pUzXD?}THjSx||F>-^ zu}u{d4B%-S+(d4BoY6xX|5}$UN|%biq~j-gJhz-*hu9Oe9wg+8E0tvo|yH z;AHFXjCek}A8=IVl|iiQxHt|W6CP(`>crHPm|yFxt#rFP#Jdh_+K`bYq>7U&?IQhAF8?1*P8Rr&RtnFe=$7*(G*IWagJnc7u4T%V z^3&CV2eCaGK6UIlj%WmK(@4{nwdE!h`gRXb5oB4kcN*=EZ^yEn%+&)e`xPewDUzeh{o0er1hr;blLQcu=jsNT%Twe$N9Y9}Sbyzib`#)OW}7h+(o+&h2R^jf z%&4&D2|*Br478IrOz0%uAGfF)ue&)J^&4Naf-8yAfODxd0L9ca+he^4*2B9_eQ~MW zvhDSaCKwLTkau@(2YJ8$_nc9!uXC8Qm~yU@@&MJea%~)31)1HxVSasnss#6!Yx>R| zKi+tkCihcyUc(RO1uYPA1FXn=TX?xP-)ulf$AWVb60;{E- z$HP|Id#*?9Gf9_OY8%Z6Cd+b{nTpjZvLf-01#O?G*kR9}dw&O#xR4Ov5R8S&4)KJK3Q0MxN9(sw$^zVBr7tl6+Fr z{&2Isx5mzq7aYe(>C=w@l`B;_G*YlUbx2gy9eSIZzh8uk0hcZ+bxiQd;27zqQ^P^< z9*n#=Dqej5J}+*3aJ4|g&%o$5BG7H336i%ePbqSY)p7Wu!B}7o8^KMI#5OjtX1Qh9 zmUn39)mBy;nF%iI%9F7)C~)SKT*v|T1jCE;rb7~uC|QPi=&zEX=w@ROY*M*j1Yge* zEVtI@Vg!n*6!s2!|4B8op=kg+#zrjC@|g=WCw`g=ND|P_`<}>g+?NFjtavAi?H115 zz>0Hqc&KiA$0w|#w?Ujt9xaW1+c+5$4SY>?wg)_X7eN9Bp2mKA+HDBUr8XI7`ndxB zQyq{U#lRB7=_UU?FHdrWma5`KX6rana z#mYF#QC=BD01Tv4Qu)=S?z-1mcaJ97sE2IG+^f!uu@Dl`%PZyYxnUmHYk3L{FH7&W zF$^%-MU?09qTgrP=dtC1c`)5*85<~^6;HS$cq`f3=4P%j33J`JstriEZJ~?qzCupa zx*%}2D7^wXe&z6?05)~!w6i*MN>t^P#7r^5pG85NI7!qqkA`U;=SDeAf7DZ^0g$4$_=w`x^FR!%F}r1sdhr%Lq7>G#fwYRb5#lFCJ{Q_k#!fU zU8J6kl)T`eR3V4Mq+C^Yh!vNs4U3)gVa{hygl%KYRyCBc5wpCIuvW_Y(H-m-DXQ}G zFWwJJm26d0Gr5=qBFn0UGqkpU(MhQALiV7GiXL`Rc`N)ZqcT0w67hU&88Ovdv*DC- z`!YtD&lXR74!Awg1N)2d71WtP0dYVLeYx)RK{@}}_s5qy^YKJ_(32hSc zaIw^I4t&77v3a2tng~LYsR1Ggk{p1>gX(^RuvXu&}eMvvYxfKoA!< z6XXg6T20O_|9?6-IGNj6`uzWQz|FL_gLIJkPlKD2rMs7js|7&T!Nkf!(ZtHe%#NIg zm6w%|g`XUvl8Xh%4be)j!p=i(?e6XjVq^32@?y35Pa0An(yUIdRvVF*kO2Ys|Ba|_ z?crbw0!cWTc{o@&x`RN<5K%V(d(}rT+y5c+KRQ7mYYQ7IYj*%UKLyRXq#WyZ`=WWO;389%%q-AW3Os^OV^ zLbwDD$gnNG_5?71)&>J8>CW;JS5V4p9X?rB$Hz-!%=oH~Icw@!yD13??Fzdk+#e+n zA@4^32>gZB7?%hwf)HRSWF&+MDTMbt#$%V(hE1C)*|dHOvt};lQEea^rfbhq#t-Yu zA^QyH&)bhr>8a`T5 z$CfQgNEwhoNFpqOEVK~96>ei(u{8eV-|!z-Y#S{Kxx;`l>DjxfD~OPV2wMmdMF5UA zly9l#z4cpo@10rP8VS**XDJiM4dUpDV>o)^XvPogi>0K02W+1V(x?2_4__++7z2)J zP;aCVBy7X1l`)?Gyqf2~sAAsAdUVWj1wJg15sAzbX<^sK6}Gm9@obaEipEGURXIRDgj2+RR|C>CP6AsyfiQ@+o30vuLv9#pJp1^CT?FBv;7-MkEHiU?T+!eyn%$~E1 z*)tb&`vWgCazsDAamXH=dgR_r96uzzGH7iu#vs+#V^!$X1aP!Lq`fzSiaLiUKd#_E z(<_*jnd&cLpR%b-1#N#=!-`4Jp#m_2(Lvp-wRumAoc#~w6}3r{|X zDU-(#30aK{=gz4fbt(dEEBNm&sO5JrZRGVYtFh}Gh)PtU`^s7y>{d{11g_Ht;dzfl zL;S#%9^6OFiDZiZy*Pvaz48fT#tr78 zlMm#)6DQHVw9tJOtr2uCB6JD@G!}eE8(#RLnm@c!#=Em?z}AR7g;i|fXtPrWtS{_R zGZuC1Uw_o$MHkf6BGqGz#1G~B$<_;dcSLA@yK*NsHd#_?kTwgXCnrNC0I ze($Xk4FS6ydpDm9LJCw#0mc{>E?C8tUoPdh|D48o-kxr za}||asxk4TM>qwM5W-UFvDg_xKtmK+CsLSLf`aZPoO{w_t~%#vh7IW9-9x8Wr;dsa zNdW%~_GiHN7S{61r`PlDm(>8MJO%8SyE2_Z;COKitOCWr9uf8&5M{!UeD)rg z$8b;J^TW9d_|Cn%p{$~Yqt`w0FGHfA*aLKTP zlR$c9O*xpldh)s!asJ5%aou;1Wnk~Fu4`BuHnu!V?*QA(y~?v{S*e!xuI z4yLA_!k(r4XzCGMb?z~AD=F|+S%Z?hXCi1VbQl6OR(ERSn%}>?k-J_fqoyi_Do`L= zF8IEB<7k74YtV*Bk;TLj1su0mF-MInVvhk)qM@z7RIS|=NQed@-<`9c@uI~3H`kP_ zvb?H}&larY^%)C!)fHHtLn4xb1nWut5B={=+mzrN%|E;#uh zEG2Oq-Jz23Is^gI{(J$i&aURNhu84ck{Gf;AuN&hb>|A@C8_Cz14)BbsF*mikg1cp zaO|E%4DS`$?*0ZmeV29_AZkpCZC47d4fB_+=cNzk@Ztw^`DE5Il9ja(wvc%dq~|kQHhQxG4TZZO&r6WKRts(_8H!xR)cm;06%rXl7g~oo1Z>3E6wu$O4SiXU0-ui;a zU!TdGc`G52g#0KfY^8PjT;Yz9z^ScAT8i&YJ(A!2;3T@16kt2L-3QXzEddoqGkinhpjlrp^W5BS!+a_>uJ2qlma*&=mENr83@Cgu<>RDA28u3Ua>5B3|94|slj-FbyR z6B?5N&xYBsxtd3(eZsxZe85-pSArDCf~eM=WSJ1kh<$AKdr$7B2tiD&ldC%2)0zp2Iby=aq3{4l*P-?Z7VF zcxoTU^^d0Alt4OFqAlThOB;SSyVsMnEqsrVuOc~)X4>?5-15(9%$PABq(l`&-F%`P zMMhZ)r!J1N6gOXf8rOaI*tBiZUR0uXK>%OnsZVNt_|O_2e5DMPr!Y$7Y>+7>FiDM0 zXeRDi%pFtvaqy^ubkNL?9keIh`JXp=`mN77Y{CeB`Mnc}MnY{)1YZw_uWSz=e#Fk;L= z9>4u!_8B#xUA$|X-raUw;h(Xzj!8Ex;^VnBSS2Cs9Nn8r35;!U>NRH_)15DG8^cA1 z`w3enUE|xH;LkS;maGL!5$;+9g?Y?gunK5jE?1?b8zb-x*o#j)n7L2>k}H1j4U{oB zHTABGwV5T$7=!INs4hi(wPYQKp7%SRdHYK&C9$2BN2Oa6Z6Y3SJ*sQ$KJiHe=wNdr6Jd=)2Pn3-NAQ3YByclwlx?-D*gAi ze!%VF3%TQHN{jNj^NKT={>aanc))0!idux$$Q)*J$97N!QDTV{r(gCL?tJ7;EG5xe z?{s?ij$*eHz;``bN^sAcn>q82r6e4KjHsMkoKgy;0lUWL#Dlu>#c#)O`u?TqDlXN= zo}FBgOgUQ(N_#O1GeHQK2nbg-+IP%AKK$oZ{O*_M5K#(UTaRU_X2;%fG=vl?65`5V zKg`v4Ka?$SP^aXAB-9-a=;mV=(@n(HX zb}V0h$WmL6%?>AQ?_NkDP)fQkQ2{?Y_ZU8Y>=*36??~+O>YNJewKixWuu2NKj%!OB-?k(+pf*x+f12Q%Evd4=AaP; z>4NQ!B>U+X0tWQ%0`VkHJPEb+4C&Y19jmr}z81cUtHT?VlKkN(r}5n1E~lg@-!+i8 zS>>97?P#oS#XR}+`Bj*XO&nx5l*VjqZ5HeN4Z!PR#^!yWfLk1EPTH|m+136@gW<<PUwK^O8OwgKGf+efU7|^>*y7^S+dt0y_ z2TLg)d+jsMx%xh|lsS>WXidn#wEKU`k={zsoO`vUXw|FvuFf?TDZX{*GHPQEG9+^r z{%;)ImFKS-Mp0CvbqDkB=Q>8-?k%&wTEjk5Z)L*NTN!iuubDP|Ub+=aXM?2_w(W4% zl>PY6?=MDZ4PK&MCb$iH6)D@{yld`f`MNDA&*j>hXf*=(?!A;_IQP%XS+*vQ<<;$G z9~@WsPd}_H&s;Hth__m_^UQ#q#?60wfu*yS5{iV_yt<65Z+|?!;fb+lw$s8_|r*S8I*Ri?DX>X3o9t0pdv;DVsN>TY^>-Ghe5@>OX6F=Zk8rqUICZ z8ic9>}AHZLJ zc`iB@$7|f35su?vl@##dhx54luBQN6bron80{Btcf4;kgKfSO4Rittj{u2)D!lRcB zPPZ!Q%);Lo#?AinB83JmI;+@k4NEC(NAtsP9mb76IRmGv4y&2v-nJc7mqPyXuh;m` z%b&QpNI3-8a=}g$Kx;QOdDg0WE`M+}gmcvSYiy3(w}hvDGL*0qUO$`G8|aRPuY>UW z@RR9&_5BmL@SLNtD{8TtNt@6Hh*(_y+ecZvs;t%Qft@0N!PV6hw&9ZdS5aH*pe&hH zhgC{o*E#Gns*oqI7)sRJLGkM*{9h-5-xdO|;jl6M{f2Wm`lx-dD{E0IGYO0_sBnn# zO;ud>n@8R2w1Uj+6ajn&-tfdaX3VX@Do|Oy7*YzHdWXS%BK+^_VRZG*|GEi(0ME_o z)j|CG)(aRstS?S1j?AJCIgZ9E&gZo^zu=CCUPB0xQ=U;a>@Wd*kHxFAtNH!^HX;kN z>-|E2PHBn@6i@ziC=HI`)kZ?4NcATu9Ax9f1%;Uy;o@e%w zwdris9e#!#`H=Da{Z;i2S3I<)*`6LkfG~iD2Y)!2{f6YHb9(}Oy`j9i;Dh%X#_zBE zCe+2VM#POVsF0$rs*a!j{s~~`RG}RrfS;><P*d>ZsYme5lMlqHtjiklbsUW<&gadyXYu!^-rFfvsKo^E)s}Y_)bhty$`A$F zRUf~S>#QTX@$-{=r|W?O1ZWI@7XRyY-)6}0zBu*CtSf=m2J*t(^tTsSzqtxa$sG!i zwTJ+I`Jt^1*FLfqYdt z8sY%$9e#l8#6$Pshi4y!u4+yda-cY$`=5M|8FQBJP;4M)0{DjSy2=!{KDz-TvRS>K zdWW0O>dU0z1%c5UASd{0&&@wNnV}>5XH|s^9%Q`{@q#L zZa29b#5obbPjjBNs-Azmy%`EJH?a}|99vUT65@~F>EG7l8K48gS7p96WnWG|?f`Uk zteH9hx7zAA|Ck1V6uE2mxt;0B`fbl`AX(?66W5x&pb!w({Q6sc7~Lm|9YlHq>;!K5 z;mPE8DZ)u*4v=ZBkp+2t{OKZ|e0`=n3Fo?(L31ZK+RgWQZ(%KueN=(SlJ20STg-mg z-o;#YY)_1#Q!N295FO@-3 zXLMuw)l4cP`Q6$5kvVpJ3lJa^e1X66{A1`pv=2@^nROLV1yMek`4!K-^@V#Zhu~ON z0%&jcpT4+`=Vw+zUgp_fDgkv4mmb}niNo?e7Pj>eb{quj9fJ?H`&K332&3M?=cank_1&fTYb|AAiUFd^2lnMgsVG75{u|3%bt1QcZh) zqyQ)3Fk)~%mmbrj;UNM9XeIcoz}d$iz}RtvvaSMJYbc2F(g$;yvt(_0bM#DTk^p|x zcYS4w$7fVPp3JEG3n3t7`04RIDTqj~#dUxHtq0+4%8?%pbNRQA%DM^|Vk64X_L0dm+Db(t&j8(+xYB#US?jOg{3`#{e1A_A?s6k9=6}=KE*3ft0T2=lnyv z1*y&fb_;yB=D^-vIQ__dAQsPV4ChCA^V5YaShhaB>G!tSiU8@9=ZX|BeOV1r+2mF= zLV%Of6n6>nokP2&A1*+ET@Bx@dBG_ML0%-IpWgt=k|ZnZc;?N|fu=X$+ll~=cf!kG zR#UM#oAK)=yq&af2}62@gVrVib{qWOpp*9+%Axy?gjgbDD-~l5ge{(X>r1zSOl_YZ zwACkltNPi`Dzn;S+8D3|=Xsu=00DLDIR!P6lJx;C7s# zF3t<@&UTNPj0AB1@an8;YARBh)gS4)K2P1h6iW(hCvbfR*uC(p#(H-v=7fXy@YJBp zE>Xf3FHN84+PK@OL1_Z`>d%W`RAp3u1n$OnB42UZ0i|1gEX zRcTKR`f|}4W_`5=*jf#eK)N&Y<{FzBOJZJ!=cc_sBsBXB&S&pIdF};*l;<5pK!Kfs zKjR<1-$(`w>V;0EGET;pl29GvwdwPLt-V3A@qtg4#@M(y>27M5$@^m)j^C#kAgBF) z0|eL=@YSHA{3ypBI4)~s*ciZ)ygtJvK;yK2cLnf%d2LQL*an$lc5;k?h-AthuJPMk zs%d}#yA+=IopjiqV5ugx7VswcNSK)mRkO$P5z(lD$~ zgb9Q5)5ij|9)jU)8GM!Jz`cgit6z6?CU1~2sE|cPStT<(cc>o~mOg1#ZcZ|9T>?T) zdw<--H_gQ11r2G>!8aD54I#YrhHfPV96n)0Ry9bt9vt5ObP>>?^+Woyk@$M+@K#Ws)YBgqXj411r{TagSk;z94_HECw0M9^K``FtB@=5xpbs zv9^Bm00C&2h(`?U$sWV|K|Gbg4gh5->dR~RbpA@fwF9ISP+se>WMjfLfSXKzaP|Lv z2IUhC1^WLkLolX01b@ragZ3N>ww<|mmD{|EPd!5zJQZl=mLwa?Q($G^rF_qUZtyG6 z|62h9wj0S{V0Q@qupPY5aFCgsHv92_Pv@@!+=*QRe7Q0PiOhX}jC(fw4si((OjH5d z6MQ>h-?0OUWU&LZX9p};zMk^xI;8Xnuy9?%HGrG=kN_OVU==8a^ziimK>rEQj^GDm z2leU3umL?Xc8xH`fTh^DsghOe%K=XX`f5YMHGnhJ{^A&V6RVm7D8^otre!}fEY@$sl0}=@*3po zElJ3t)@Wlu3Ho*kc{gh7SM3}y+Zs~_g2i>mA%yGYiH1WA>eJOLmTxjA0xZR*sybG0 ztU#{blJc(5^o0$867(##+WH+k1^hHzA#lG8Z``F6!8Wox312-Q+OHcp8FGREDJ6DY zoDEy5ycNKhjKwX+01~*B21;QFTR9Jcle zuswXkcW~eC-u_%!irbB0<@$1Dd99uCMBh^p4oeE7LGka-z;QH6Nmi`e!kO1Tz=rkZ zs7MG5D5cQx6zBZnK|Wu&nvkW^`7Hrj0#}av_v!+c%G}i1+g5eu`f{v_m;;i`F#v7I z3o9Za(dZTdz#TJfOtZSXF@}((nD)_pre1v?m0PN?iVLulHrNg*iIpE=?);TZntChu z{`!0_IB7B|+iCYJt`wr(^o8<=s&}{ItONi+8`f>A#Hy%sAj`hL7>I@hVXNgYnYFEY z2ZuIp?SyKkEr!+xsU)v{G@ny`_$LyMCRCJ9s-l*>ZbkI$){XM27&T=TScQ3L;KHBX zhrw{+Ne4Eh?6zZQ?KV+vjjwfQWX4zH`*bVL8Vm3)NO@HqR&882rz#P)Bq7zZx6Ag$ zX)m3+qY}XwgA{_ASc3OH|B8)Us=e|&P0CYULP{cpz*3Us>$Y&`gVRW8jSN{}J6wOo z>0ETmL3An3Csv=}>9@Y*7k_$&s@gcRAj%JZ^)L&Tt!K~S{al-%m50hLa?&`Cc8kPY z@Hude$%1H@38M!xZde~r*mmwAo0pkpNap>mv^XCt9K!Zi&~4w%U_eQ>RK>93sb&V( z^@6roSfv!i;z^Pz8{5&I_eo+|lES=5hZTP93IA8C$~fhx_cDL(@~yfIr1hc3@254g zFb^3Hp<@aDb=yUpd*UPMNWmZOd4AV6UfNl|tCSE4 zanTuva?iDA5weu)*xJFbR!Tu#eUg;zU^@;Nuq=sXDGKr;Inyf|4pER7p{lA5EV;=)=mxB z?uP#k02kl*F!R6o3afj`)(ux1Pm%s1@0eW^;=G+q}VLLiK9tcRLY!2RMINv+% z5bpWsD~QrUtkS|=8ync!aW^20;eq>JWYoZ(Ty@?tIND80Ytdyq8My8*&++%C-^UoY zzrVj*kuh-2@dxmiYtG8)b@C!1@}ps@Dr&QwEQr-7kqK`F$UM$onsg3>rL`;kvlg%6 z=XX3w`IaiGs_Lk&j!{z`qpGToy4rdk`qyjx$J@E1xqV#Q6MR9RwP-c(f4KzFr3lA% zaI|jt@zjdO$85)IG~*bKK45hEdQu965J(|Vp3odKX$*ucv@x!VqIcnsvy(qsyS;IW z@_G3^xA|;KV;PQiQx@Kx`4zYQ={YLPYpATOP0LJWWgRuub^P`3FY@f$U%H=Z#zPhk zS>#1Ro_oK^ZxW=SE}q0{-rFW{978T%Ipgh16N@J?DH~br7SM}E?2?wm5l~%Q-)e%n zyOFY;^n}r(30gp2G&n3RJ~ z+31vwu^m#iaV8zU7w4Qf$@@$P(SK<8a`zrRkTC;$Ve0A$hb-5&$@0_KQ}n?XO8~ZW zpZc@f^w~?@e0C{NQZ{?-w*FC;gxY!z-g_9(@*tkSxy7-Q$8y@K2VvJIww9TcLn;<$ z$_W!W%Lg#&9QnqPwN)iH$ZRpiC#Jt~)p<7|@I=j|}#j7?_ zQ5{QL_Qtp~+^E65+$E|5!Z%!BoiU$NfBaYK%WDvF+hU?^20mn=3i4dN))?OW`xP9y z|ERRk3(uFnbj>Cvo%cI7Z>dH_LO8YckhFKBk<|FPo4=z17P1rvj33MyN9{vFUc?i?9eYT>cmLQSeKPz#cbU8b;Nae1S3f#~6-k)tBqqTx2Z3Q9R_Az6I^ycPEzmfG^e^$Et zvA4P6)<=<+VoOyWCth+F6Zad%uzuZHvSt&XeYq5^HQ~Z2$+9YbeCap1`|59Xh>4;# zCNv@3K-RXiwJ$$H=H80gm>g7gV^C6I<%K16^_c<&?%h+iA)aixx2C;EFn0$2wwt*W z2npcwvyNbJpKhGK=FXpO&Y+BPmP2vtZ1mw+MS^y%-Du4wYK}Yj^w!C#cIg5}?**t!D=W1ZXXYW_}OQ68N7s;~!^+J`?^wWqorSv$d%yS_H3T!u4#Q8ysEs99y}sNd!1m|4fnA5f z;(Yq`EJ5}z4bihClyQSRXlRczceR_tAAC(a4u4kaS5gRx6rqrUREjQn5eo97-dVv) z&{FuqzGD3r)|Xei1ZXk_Ai#0xR$SoP0D!ykozqM*lY#l`65d4u>?r))p=-W>0(o7F zh;OL|A-U%JClC!==?bX;ErUO?ELyPigDawz!>CmJ4L^AFW1KyVw z63kmuk2ao4L_mZcfuBx2W#Sm-JoPJP%vsL(VSU+aWPeZH3>uK_2z*)pWZnwMGKshw zzT50EtS^8|fN}kzSvSZt0G43M#snLyQuHYe>Q*=0^8B)W�r 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 diff --git a/website/appphp/static/img/favicon/android-icon-48x48.png b/website/appphp/static/img/favicon/android-icon-48x48.png deleted file mode 100644 index d5beba1902ea70b981c1c28ee32798c8005b2f89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3489 zcmZ{m2T)Vn7KRT9DovV*NRbXoNeBcXG(ivo;sqoiTtOfSAsRyqAfdNVq)LralqyA} z3DPWdBm@+xf*^s5AiX2)#XE22-S=kRoLPI#-s@ZcT6>=}b9S`ZO+yaW3#0D#{uv%y@G9ysY_VyF)s|9+k|7bVkISlo@1REiA-D}vPnJD#OSl;)+yo&ueas1 z!zNlAmY#dd-7l!o!n{T#xY#84m6VR4^PVx+m?b{C&ZMMU?%11pwLBRmom}6y|F-Wa zi6@GwtF7YKA(EQun==;>I61kpqxr5!`7xIs*!Vmn@fY-{POFQG6e+patg=ILC#qxz ziav!t`pjaeB62VvR8iLuPf2;mDqJj|c_o!u`B6q26G6r{n7 zNXknyi0NSDwp;bh%i;I&u6#FSQlt?IzN!S5>?}cbl+IvmWxd)e^5v5RcyZ@R4*Ma< zMeRF1-3_W#ukFvX+ut{sxf|l|S-GR6Zz(lqAWZnpY!ij~lDK(Yyh*;^eljaU?gO*& zqHvyKmdl>f9aS@h`i1e;k5gU5zZE)|OXa`XjliEi_`ua1plv(mr|zE{?Xx2?i$ZE- z2kP+fsFUHEmgXG`vq1?G5?I{nAEc?UJdtc-Q5H>sfnBW27*gqkhxB|*&Pd@4>xDFR z=y7w{DOcF^rfc!)O|9>$kM?&6e$|=n+fNu+S};sP9fR~OB0bb4`aY%kv%YOV@P+qNHi+r&}S(=(PjDK>OZAh7EE$&f_F zAsh@OFBi`$QgY5fM_o!=ZA?aGg6q?>&LzG%7%}fjo*?N(NinZ-+MzA@(A@Eo-wnuINQl{O+FqUZ%&mwkNiImnbjA9@$2)k%*f`@=wvpOn zHhbSW;DejwLj6FD5bmJe!CaQO&??RS$X26AbOJ$JuqJ!1j z2bL|Z!O$()nqve-mO4ugve6@Y2nkOFXl|{m!W#BTGSB8i=e!9P148dFNK_w%$e&AT zizBY-8r_vK4~|*qvC>kz*q-mUs?X~h;Fe*+N!4Y9ng(9h@eJdV2mLYqVHAGXXGtj} zx2w#yA-HNTXg?kv#3c~6ExK#a_ec@9%S6c{v)NEc6Gpa~B1cg(3vfUe$lu zy4J2xFoP-LVkM0>?8rW^AdUA66n+qBK_%5=tQeiWxYzyP7mCUYczutH18bsmt#XZt2QOG_txJealD^ksVIL5zLgPl>@xx*nrz$Q%~?f}^<2JOCSWz48ITwGFY=uPxWbaX02 z#~xlh2;ur*79LfYFsiX+#YXOScX+?{%j(O~vonwN7o?W+=1+c)B8}!>N8}I>#i(AJ z;^9+2$ev$RYb8u7D%Sy@zMPm%KEEgvZ3anrOH#JJ-gvtj>a;HStS$mYk>*P-Nqp>b ziiJ2~|D{5Em9a-^?3mVwXlgDZ87^PK?D^nDltR)~S7f-R+x*??y7iMk7p$xX9q{6 zqRF{ktZ^}Y&dWI>h(TUOWdlr%{++p|xRW?Z& zGlDAW*YpYQy?O!pjHvuJWigqEY;90P{rvEvV(i%l$Nrz|p6w&~ki6>W65%?i z*luxthet}tI-A4}a6PLbq2Z1_@cGuXx#um)7oYGSKL*_P2s}6>KikpTQT^tAXj?|7 z;??b~Q!YQ}Pr!4_BsqP*p)_JHe_9$)n-mnOjsQHAlP@WBiQHmSsq-3GUc3e^rsSw| z@5L9p)BgaQr`Ssb50S=GM2D{-$TymSJhZZLvze>eDZ;JcD#|}XUmA|TIYjb9J1=PA zL4Iel80;_}_9qQ|1-gpeFW04ZgowKz+({gm3!ALTv~D}2k_D-j%zEI7EWFc{6e;fO7G;lciV)Y4rwWUxCH|lpb80|wvbuTHC zVg(*QLrIZ$mpEGRYG;d^t(u)euTGaNX4s&^@8eY{XBT#p-nxtlgAVi!K4T7!Ql z-}>Y(4s&?IMzZa4rW(J)Y^j1!$wr*^KQ6Nef7MHVzoxS0_U*|+-34{_f7jzOfvg;)5! zjLw{w`K6s<5)#oIfB2`b&oj5iUsUac7W0(KeYUBSe8lurFTgJ`^?0;p?4v4dTw-M_ zr_7Z`dqN}xpltAl36V1PBOjme*G?^NB|c51Tnt>}^6Aa;X#eXy0<J^OU8Fa+al@Rt-M;9uI4p$Y54G^ zMJW4t)B>;YG~7S6d$`FN%H(ggf_#7$JVkx@Nkuo)^m|%#Wm$tnoVr1!p&2Leiv`(B-<->25fm<}cOWp6h;TqGA@I@HW-jP*nnO-Wmg=^#` zE3dKw<-9Ac_L6%F%*iOh8XkkF%pgHn!^PidYTIf|(3ReI4tizc7oOEOM+WPJmvxFMgh`n&;*Jee0^$a@>ppSSZe9`U%=*ew>kK`+1R4 z*rwz*b6Bt-DX6-VSNZy>qP32QE1*@zz*ExRwp)e@blbs+G?d2r8;&`o2zxT}KNAdf z#$+T=ACCI>w|8&o68$eck2=4q&d}!%iiAE=Uj21#y!w~awr~kELe~OSc8<50rSe9O zN_>G21x4Lt>_AH=l;A}WFN?Z(m<7(ULgdHqrWqlvqsE3r2TcRdT-lvpcez0o=nssw zneCXqW7{x(Hlc6ouj0KMmnem@SHi~2P>Z#%hN;Ior}!k#JQXeSpkI`w2nM$aC`SSs zhV($w9RL9lQ{0Q`X?25sty!6NUAsw!SlR8vqFrI%Du07L0jMa`8|MO_F4Hy8-yj4^1fWge@s3)LQbleE~ALj3xFqjJ( zi*X?UO6m|!z$1dr@c%>S-;6aDMR56z43vqTrXvFXKuoa@&;(yMH1KyD+c83=#53X;ypqCc`+bIHHey{GZdnXghHW^D{4rzn!2*O69npnM5;Qep%v*F XiuC>_GTDXb6#%%wP5p8`htPikadT_3 diff --git a/website/appphp/static/img/favicon/android-icon-72x72.png b/website/appphp/static/img/favicon/android-icon-72x72.png deleted file mode 100644 index 7c7f324a28c3cc93777e767320e582fd5c45ac72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5250 zcmZ`-2Q*yWw;v^#h+d9rFa*&@7hN!F z)HmOMy|v!=-db68pX{oCK?*4g-y35nCGeCrfxd&GMhZCSS=p+XKP@HP2 zC>r_B{mu^vG@i`-*1L)JC>%sxakB$8HHcOouROsaHlQ##dZ}97)Y4K?Tac`4%v4@d zD>WSZq}j`vxq6bcWHO$Nh3^p`83j?Dfm7h zjwR3kG>*dSn$PB(YP-4EBbQ~AiMBA6M&g7LM!WCVBeRvgD^4X3`Dp1bD=X z4*{5J9XF~1f)j@JIm8}k8Ek86k7z-6E(EyO%id%$#mrXZAGqQntP00h3?56aK#o@g zTe3SP4G&7%`6K0df0BpdBiV}HN~+x|#72wLk&FnQWlmzwc(_z7Q1+bP3{vIO{3bBG z0`#aYZ9>}gqiSV+4Jsy=lg3~;kJEVvZ{^v~?J;tqRL)dSEAq5kJd#L){JuBjY(^xa zI0Qg@APK_nhUtUz`r#3Q)s+pHBkffi!jRN-G*5f1CUBhDO(X5(Hz#i?kkll=ym@la zB0x%Vj6q?duk^dEQltW3s=f`h~2a6OZhiJnIQoo+T^ zU0u1XLY6_;T$b+Q1wzQFg~=w+n-6R$l?k^JFX$S!xA#NDrV;cLFuR-_U#r)4HFOt9 zLG|fKfiL+)!-_RZ2Oj3;*h2i1lj1m@te57v&CtAZCMX^jQS09pS|^J{w0BFqWT|4z zXR36z2{9+(f;2N#yS!_hk0HmkHxJ1wW7nc=e@N=u=}x<3C6iav^ks#sVyGH3m+bvE zxGt*SOHNdmk^`ub^t_E%9;tdy*fNJs)u9+zZC=)E$7m>)U*MW-B;EkglVtP>9J$3X zST4w=a=m;Z7N(fi#wJt{(sTOC)eJ<_i4r-%53<@^i)&@{^Dre`EGqNS-OC3H%}3by zAR$q#A~-lWSYMgmeO!6A^92A4|7FI}I;ykWc}(>%-QiuG!}4LhfAVw_Vm2R`a|uc! zROTb(-|_WBd0XAtkR`bYf+7i3CvsBLzuL)nAqS3mO6V`e&4M0%r~Bo*vL?GXXgFw_x0h%-x+~2tJc|FTg-*n+ZWSc;!jbYS9(=O;iyk3bW&~5cM+TccRZ@> zpLU6tPYHpQFM8)dd;}ZX4^gFE4@_#8KF4Rv7gfC@vCkFHj!_S8C4j1f$rk+XomDK( za`l&_$X&wV-_38mIryi<)_~FFFG#+YBF)=HBMz+7A{Sn5fhCLbl3J2oAH;`MCve+| zod;*!(K@8}odC^;^CjZ#CQ(LU3B@d;Du#jg#utG&_leccpC#RWi2oZA&ND6Ea9zON z^)7vVn8jr+yA=wO7J9AlCI7zhguZdupaiHvPt`bxaVWSO+3P%4KH7jgOptq(Ex5eG zY8f{W=qhxbPpd_B*vC^V)BZtHDVcK_qv?I?YdTewhNo{n{{u>xOhFV)P>b4YQh6JU z0BY6cN8u>o_Et4uGIg#Gc4|A0XRX7lJ%PCDMLZU zCfSJz8(<&%)cvjApo>Q^+;2MxXsUbpD*giOLy+FrqsFs9X!qA`tF26+0JM? zF;o!8_x)+JTV1LvU0;rg^$Y=i{%nWTbZ3^65p_1rlMBC1JjX#dfxE#|?O~k>b(O4H zkJ9LJt4n}2+e|?C;>_5HwRcMlU2ZA`e09)bA~(ZPHe~$)1^4gw#|fQv+>5T0LBv2S zzuuhl7M49`#Y|K%_5wcCQvh4hs;-6&Jhl`WlS3bf!`fai-U~cHN?s!M(-7@J*OzzT zvAsPhup%;)PTtYZI!Uj$1o$D3WyoiPCm&qTN=i?IC*Sct_OYFaXMla`-#r^HxHHx7X02vl&gDLu_GowoW)CXGj7!fu!nS3k6_q~m&(Br9 zo`gOz50_4$%uRD){Np1DZ`)YK?J-ELuKNVZy`gEYnRj2_!)Jz{9iRP4KFknoW9#p8 z@t}(CnO3g&0TebsyX`a8WPPN*XKXdEuMN#U*Z#-36)?>1IEPlClP+$qX2iik;Os}6 zGvBf#RHDY%pZ-Z|)+(8TBEiD1NZEo4Bmk$Kl*&{uh4D`h88B_NxP4{3@;ia7=ltwG zvrr z#*C@|=n)(Gg*VD<_pqk3^!aUiblf}iuzj(M139h^RfaK`1Kf0uACE6AjyIO|c{Kct zAk2oSPCm4%$}`}mf1FUgtAI1WsC0bY_a(o3r$v&6ev|Q6XC~y>bFm~F4X)DHZ5`b; zzK(dKWZ9 z>;80dWZrS^mfZ5iynzz?=0eouS_P1C29gW*FeQECB{ho}#=L>=Tf^%b%}A6p=U0|w zNLDTr0AewIjtWNNt`n`gzYjLAN0;L%$zgMqKacF`C~E-af}{ zhVKgHeH|a5dnLlx)a2u_+psBVW-#9y0}HS19Qyn9mrTP%x^Cy>)FP_j?ntCF*=Q}c z{^$orI`?HNacD7pYzuPxAtjtG(w*-P#~85_nxlPxsmEVD{rKs}oJ8%sR9QB6z_40W zvALb3)qHr>_W1nvnOjpwE=OjPeK}A4@h3L{ZjRhaV7JKhiuQfRqxHM`G(xi8gj%$^ ztSA2cy;`YND`)q%+@yxp?nzF){%Ne6wslg`c5{=5LlB=4Nv|fc3d++-9DMfB-CdzI z<-=Q8F`#oGGM~xA-FEJe!8W40Unv#PO=&_DUF3OHv*msTJMfGlL4KlutB>f4t8Ux~ z7CzINUoH;{z|+J{F!;Qd3~$!K_xShIbP5ue*?s59bnO@`wm!KDdjpI-~H>l8guR&g827#q$N z@i+U9Gh=O~#YT=BkvLcZa?~ckTzC?bc2c^Tl1*Jiqew}3EL~Z#!G9S=F0opilac*l zzUZ1FE4J0EYf#Ux|FB{fQQTGa1{=w5UT4*tSFSrqoH+I%wA&1^*)HWr3&%qL!V>$p z80nOs=rQJ5JrSQDuvhygvem+HOVRq4kMf-OtXbYGnA^1qbBma~Qw!3q6%+Q@#(7?3 zE?MM++`UOjjc6m)-q1vj&@IT^W`y|ibn%HTV(pRDXxpBLo7P-(m=s5WP#GZ1^=Vdefm+SCOex>8_@2ck|i8PKG1qAs!~- zHQc#`b(-%%)3hdHGj7BEH`O~8UIc%uR=ZsY{nls2+R(wWrR?~vFNG5hET3OQK}M|U z14q1bd|zoYn8&S{>qIwSy+ogvGwk$)a|Rh&e(mPBDsOqu(Zx1t2C@@KL3>R~MqF(s zj*POxH{bam#lJ_*UhAU9%_%|H&EdW$}I+vS{O zm)hi?P*F$MdzVIg4iE8RlwFN==?B-h_|kmn2&v9}UdfRJxa+_!D-)1L>2Pt%@OHc2 z7+e0trluF>_DztXsmBjv$-@CSyBi zZ@%7_Es_zipV+jthw9&~fg0<^l{+n#+?k1h-lqODfo;T%kDl_)qU$2? zIf1zBnHMv>w6wahd+)Z0WqJTk;B3S}{IuWh+RcUX>-E$ybE-zavn5x^;>n_>ZmD&U zteFC!FthXT`Si|gVCmJm8#RMjA|+i)tH<PwUaEY_jSgvrO( zJGC`SCeO0Jm1`xD^EM1OAM+f4NvVTqn>;JjJUAbt_8MX1Uvk+<$(u(+zXt+zY+4z3 z8Q_~|?LbRW@%VN6wIX=={b-{d3#plw1Kw(R^w5SZjfC_951F)qSQ^zH+T%DdxUDqy z%gn8d0?W@8?yyvwHAOnTTBnT(jH~RokoyMW>BHFEb^LWUH=T8$&6C*iNUeC-y^wek zPcbuDkSx=yHX~#5&~Z>0Tfh`I^w5Ni0*P(CM6mUT9%?O2S`d1hcrC}OE)2szEgGO% z9i5;5+yAYWsp@!Jxb%4}E{G9g_=>uLiTi8vN03~9Uz_L++&_Ff(L+wDN=>IEeKZBE z@89$`t${(V?saL$m}WpWoz7$*l`b|TXv!oFI_LE z(8*3IU$4&e2r;>9+48=Vu0V;$3Ns^S+LZ02Pvv{v@TXCU2~EF`3H>fJb-E6x%6~O` zE}z~z4GbDhUSbKN@t;keEd@DxGJu8hKPM5Fy%Bq4`!k-EAgPGRK*3HuRp%UkC6jW=czO$!PGwP+Z2so&+MlI{5m5%ZHCTl3vt(`26u<6q>@rJ!~;f z8+v814KqV3JHmx2lFPSvKza)3dP_SHEy16RA&{R>_H3-J$-@(q+nJB>{A*;Cq(Ku? z6*m#cYCL(e(|8CpX~0)2Q3`CzO#J10A0xt>FM=fINqWT7A2#cG+oJoR13!r3T2WD1 zJvCm9HO48(Nc6JuHSzM1({&MV99I<2w2EMB%C|y`ZzKIY8hY^%qZg0u(9h}rrQia$cXaUk{}pJnU`|*CwSO2q;0~TXw(bysri(2UqGJnnv~yw; z7X%ARJdtF>Qi?tSiD6mU41~qmV4j``DIp;rA0I)-f6&;5MGL~+q3Gy+tU&<%KNgK( zUM{bsq*UN`UM>(|d50stOhO@4a-fHNlma9{`kfKveg zV*AWiWE4QO45!Uj?UPjvqCT0Fpq=v0N0sy46vJ#?dZhwxm+zr*| z8eWBWm+yC&TGE(hWKjJXqCoT@GS_vbHB5GM`_X8CpUSWoYnIPKD)879Wr5ey>_pblm7z z$%~K&#wR%>{?3>CavyezAc zN|%j@q~n<$2{RhrGG|K6$&&JrW1S|#*NOfxl~Wwxl8cgyDw@bO6fVc{7?E`(yuG27 z94eQAUG$}!QVj<_jsXW=n`L$`3Ri5+-n~XZh(L1*Fg1h+$s#J_3BVP{OO5;1oiyFs z%)}R1FTuhTXqzkSYe+)lN2D3oYi7$!T~k-lB`R7F3NerKqZ6T%I6HfVH+r2VwGj>$ zqDItthSNDre^+H`Jo+LwhD=!!uEDg6X|h_ctjlMF*gLbqxrYp4zd8I87?E4vJvh+o z^83VUT_ikGN}7iI#}aB$3m`sttsPI*{)VrFD~F+^!$6Z}s3ZbeF?s&-rN{upEs!FR z=-6yI!4HX|R@ALW+J_h4v$;Y?fRD(n9vSs)%eZ^YW{UXQeiuL|LDCXgMM!Jxl#=bC z-IM=q`p^utaZOU6wWLKqjv*UU(7)b&e70Ts3Wm(7ABA(fu+ z8M1U8UBqC3_Q?l!NztnKG|u-~k9Jx8W71#K0Owm9oxyn=w~ zxbLK*yk)K~MN$37PmKRgt9)E`jEfeGbto)+g9MHhERIXT8AoUu-+64Bpab&O&JRpm zVceCDjgNF{)~zd{>myy)66L}<&PI8eYp{+M4#eSBovOUvAnN-9V&^}r1)bLt6i!m- z=H`do@}8Jn7b0Xf=6+)&Qk>i!Mo9qyg@0&5d(F6Licx=4*IwQUs#8>+ zL1}Ffhn2x6*@UC6yZwn-rp?wp;xd`-wO`RQTqw5rgmng*u^G6T_CNM*~t_Lyw5`QSQEE+i5l+at*=91S%~Rc8;srF>qRe+<3IS`;+&*WN*gCN&Rbg-EsZ+)u67Mj4yJXfHBqn$zs&92WXmIA{ z5p=)$*)Q?s)3>Wid1H|>=Ak+(D|ZKP$_YQEQBO%u&~O)iQ(?7r1mTZLyG#R}=uglf z+$<@k8SA}7*FK5#`|d2KwA765#44}8-_Oi%8Y>WGd)6;6H~xO?KEA%(5|^)$x>;5` zu0eJ5AbdIfqoc275PC?lArB9Uu0MP9oY4l+w$4II_`c76B}u>=3~I+9nxu$cEIv)V zl}YHE+S1xlqzWG0-quoPgxfBcNnn6SqhNj8yL|)l_TokMp4@@PCRGnso%OVWUrcN; z6+6@Kbk=slr=N1REw>nM$D=4L7P6@Hy-e^YJMZ6AP#J{k;~4%LdO8wBzw7sw=e#xq zK|PV)ik%fz@M=_+46Li-8*p?B)otD#>sgxi-Hv}cLgQ^q9BCzDh0v$_oL!P%=@iC{ z_gVj{yOnvP@0+_4PNGEc^MenvRZ^O)JL%90_jRk#!RtrUT|TSQ8czbkbIjU4gv(8L zh$NZp^z*KPtGn0JMFG$9S(m)^f=~Y6RV&b*yW72P_T39#7&oaH76n= zAuMb04aYWrb~D!-M{p?o%Ds0t-9&uW@dc815i<%xiG1(=aDBZ%c@lZ!B#Mkk*nOD8 zdp7;er6H>d)s}*~U$vLa&z7KJNF>!{}q<|n&t4M^;4-DV5k90r)7R~q$WCdTzh#<12vMnxNs1RPdf z^gy}!6N6HQZ)OoQG zA3<^6!`-tj+HhfOe)z28{yd8MH{Wia0kI6;a*YLOcF+`0Q6zL})L{N3uK>MHtseka zzBoG;PG&dA5n=e}4D}}umy3Nwc3nJkAd;+u^0Mowb855^Q6B4M|94d{pWNcv%lF7? zi%q9n(MvK<8D2y)PWj16ILc+ zu@q+{t1MXPRpaJR4Y@%q?Sx`$3!_cN29T|}h-h%Ao}}X3(WC;COJv=%-7&_3#*|!zP%d6^B(nsNq4M?V(STV7kF~`XB{-K zs=Al@!g@zC+|dcmm)ORKVwpXA2afs-zJlQHFU*g&BXU|{Bzet!qM$=dvBWd%nGsiZmsfq<_Wbe z&!foW3-QFG$FY8bNoNoo>sW^3K}{punK%{nzI*EDv*ck>oFE&oM!8lu1kst3fleiz$E`$Y@Ka2e$G<-CmWw}aM77quNh&#s+sn0AQh_RR6%xs{RYKXW*;6^&w z7dYt;lO!jL8S6qrNfH<%%4~jd*V7QsyE_CQ`!H%7yCuLK8#W5}Iv`iN}C z<>ez2^J>9cc{&_FIp^zS>En6BDDB>(lElS@QS}&uIE}SxzgDwX<;)UZ4{c-q#F_vg zXGv@%)4VRxOmi$oeM5+rVzRP;uU)47?JXLt3Zv!}eAJ_UXfWfOkUnA9w~Cb%1K28T zlU8GtPt7o7>y2kh_jNQD{j8l3)qT1580nB(;Mu{dgPR<_B9>+dGI*!93!`PHHoe|4 zRo+U8;%*Hj!)FC%(cKl>tJH{LrE)xP%;LlA|^@Qp+Z;NNq*5KMwscg4>?~zh6IGJjl zp>Y|=P9Ls!kKY9u`C$`v_l~_klsD~xwT3Pl3{f1i{X9YfcV5a-v`60IAZuOrqA z(}cgFW;1)8p1B0kkf^zB22!@)4HPP&CFUuq&kZdYR4Q!~kVAE%z?kcy3${7b6{tDz zc!)u$>Z}4N;;P2?!yS=t-3 zAIu1~;&v>e2oX^dWsz4I6ae5+b#@W&jR7KuyLw$G#Bpik8Rb=S(tUx-5Pgp;MGe-p zh(ThNN-@+UMQmTawnWXpixKmO%uX^NsBHy?!Z+SiwR&UC>v7RV-c*8q6A;} z6EbD(Tycu}$IjfEhKzJ~fKfEJ3GW_2R2M2yMLfM{vp{LvzOFnYhGPk$30=mbq#Gi~ z`L&308dB)}lzE+tae`?tc#xrU?%vyuCDP6VFTkc>^$_NVlf;ANgDf&wjiR|SSgE{X zICzZyqs*_qk7R3I7THu?9fx1_u>V-q<0ZvMqL?lZnIJe!RO$K5_-&#|&CxwE_JB$FO&~vma#_4~jVYQdYx;-1h??xk9SvgU(F3)j z7+eSfJy${;7d~dbj=^ns;G(=!6K>b zPz^5G#SF%K$)gJvFYSX?x}>FKKkq>~ONS8YY}5-b)v(wanhZ=3ejOdyCI>syar%ht z>CwMC2DW`Uun0<*S8G{;mQW_5L|Ot;KKEvUq+_ZSN8j=papmzfV(~yqW_c^I0)nlW zYU;B7zF)w!uEnXoWp4VGcgV?9#jc2V8$p)|`W}Ro3+-)wWEmYM2!*H@y%b&`k#fn= z@(<1@c1pNjjth#T>Okmlab3g3d1LQ^D&LzOMM}wX9(evyfOf#)padTI_sXZ5&c6Qd zwUNY`%@LL7_b*~tgc?vaeS!dqvf$v^%Rko+ZJ4eKg=yivWAA~#)=+C*47mK))SZfp zss)AGug`5W*Rl8|?T?$+qel1n^{mYO=E~Q1hNt&>4%=nV&bx^e=R8mzJS+LFms}Gj zu?Sq$bP!>uv?jL9Aja~c+^@uS7G4A`?*^0@od9nX=kB#S+Dhi-#eK4-H|#H8|Gowg zg%V`P|uy zWAdVSk}^dPHK0hsTH`)&i-8oZ;g7*=)!tq+{(IZ#S-n_UWwGm2)24qPGx1q8*z!lH z!|d{TR`%(Z%&;ubao)M6G+`L+Y{!M%GotbYogLAaW{6tT&g3;0k~aKGjCX7RgP zfzwntTrJ|?bkflvsH&C@rW*IX+xjLrJyY`*X}5PLYw#YHK2grfM`d zVAl)p#k+bkG=kqby98((KWnah{!<&XP7Zo>By&o6dDqZAJ(n=KFO%_J>So<@LkP zzGg7t(-POIeQvdG0hE!p*}GeU>V85j>ft1K1o|lP_(z$@$4UCVtg=qBipv8MhnMbP z;wuAqeQMZ|%ICqxh3cIKF14glcarjl>$CAbDQRe1r!AKVooV{V7FMJ(Sq)$}CBc)C zlaTO}yg<>{henUR6vt!Dp+yThghpFJq^#w1DNu#<30^jLi})%D_! zRICbChtp+#A7^>AX(=9jFL;e(+nwzBkp+#lz02|RrOnMI-#=Zq)UO;LmpnHv1ls`t zqQTBN)H|LmuOlZW1zBOj?rPvpPpE*2RQ`4IDHX~bNj)Amdzkrl#k;;B>Mi`*m_}mo zok3O7#YmyYk#{k%7hG@%1O=;#I%8$d{M6Ff-OYVY?B8H0b4I)kv;WN3P5F1HT8mVW7}WJ_X{v+<$wZcA8^RP=E)q1yzFb?CdZK=CUP zBa{XkZ}1T9Yx6_?zRXLluGC`}aZG6+MU8J2NS~TIzEsQmOfn8q9W>zGPK46~wmZ_CV@Uc4U_Q)rek#r=r09t!wFBdDry)A06CQ^PNALs8qTn zlRY)c9U8uWw$In?J;P%gp^r0}=&;j&-C@~m`^_pZ?-74Q@22Xc2Q8;1Pr25IU<0A% zq^qrkQ6KXvy&dhccmRCm-!*PI>-vN_HDDhtMrUd z$D2ase|>^lnWVqD$}sgy!7@>myWLCX_;d32(;XgJ6{AJf5Ie5P=N~D(gtiizw{0u| z7KtH?Ekq}&RJ}*-G6{JN&-zq@$JeU*CYzTCl3rJfv@R52g~XM)dwnC?DS+xl=y~5W zpW}1=vc5v-!8Ljol6~z+@93-EWLsOh1r)jUC!aoUsx#<^O7z%p9j8-LumdR*-VbOh zrehV0O^&cgU9W6E-! zdkbGQC~s1in8(#XA*eSV--8xIpsu2`B2%{#+<6@Gs}d~anRv52On<-Lw8Q0TtQcGM zmckynzIz9?`b1vPclA%#sd;_ny8T^LPIngEc+N>bSvz#&xr4rXEa92WqFxN~*+m6bH zIS3I_g3YJoqU3l$@8^bA>WtsnT{#s08h&Jy-z^Xx2@WlP@BqBB z^Dp<6$c5OU7|2mfBZ~*t9>||HY)q92kECN3ik}t`Z-M+$x~Nl?jfg(r>i>g()rQ(i z5)jdKqETG;_^#wyS>+U#9QhnP9vie4QvzhAq8@MAU2ceW(f76^M=Ic9=#xl@$CLL^ z!O#}RlToNOZb$`YTm@E+Y`+3Bwn*zKO~+ede@z&nl3GwxBd8hJ#L)~U03c4F02>g* z1_Y`Bxxt*AU~V23*qxKpd~|C5|5329Gqr@c|Nj+;QY@@s3R3?(IN3pc#X5nmO3)H9QL;6!nGQT|I3bo8jJz} zdH8ra`9S>KJW6HgY%m1-zwD@5dYAz?#l({GJ|4lkH2$kgT}2iEv9vaWO`pTY7HVy0 z&H*uUu{5!>b>jHH3&UZ=58^k1@PN2XczAd~eEcS6`~qA8#vmSJ6BAxzelvEM20Ltg UE14J+Fb@D(NkxfDF~flW0poslUH||9 diff --git a/website/appphp/static/img/favicon/apple-icon-114x114.png b/website/appphp/static/img/favicon/apple-icon-114x114.png deleted file mode 100644 index 3d448dda3db640d4cc0e3f9c3866714601f07e67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8487 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 diff --git a/website/appphp/static/img/favicon/apple-icon-144x144.png b/website/appphp/static/img/favicon/apple-icon-144x144.png deleted file mode 100644 index 6aa79d8f6bec08a6381a56a5ec969b936f722ef9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12179 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 Msj92;LCGrQKY(HNUH||9 diff --git a/website/appphp/static/img/favicon/apple-icon-72x72.png b/website/appphp/static/img/favicon/apple-icon-72x72.png deleted file mode 100644 index 7c7f324a28c3cc93777e767320e582fd5c45ac72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5250 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 diff --git a/website/appphp/static/img/favicon/apple-icon-precomposed.png b/website/appphp/static/img/favicon/apple-icon-precomposed.png deleted file mode 100644 index cd3635a6dc2af2ecc364a99768424b12fd7e69da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17158 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 E022prDF6Tf diff --git a/website/appphp/static/img/favicon/apple-icon.png b/website/appphp/static/img/favicon/apple-icon.png deleted file mode 100644 index cd3635a6dc2af2ecc364a99768424b12fd7e69da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17158 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 E022prDF6Tf diff --git a/website/appphp/static/img/favicon/browserconfig.xml b/website/appphp/static/img/favicon/browserconfig.xml deleted file mode 100644 index c5541482..00000000 --- a/website/appphp/static/img/favicon/browserconfig.xml +++ /dev/null @@ -1,2 +0,0 @@ - -#ffffff \ No newline at end of file diff --git a/website/appphp/static/img/favicon/favicon-16x16.png b/website/appphp/static/img/favicon/favicon-16x16.png deleted file mode 100644 index 09adf921a0468a44a6b36a4ecf986dc550b74afd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1251 zcmZ{hc~F~07{(W&S_%x}9|fK21V=kmCnqF?v<89!f&%3#_9h2kj-fy%d=z1na98==8E>ePoG@ojWtD++0*^pDR};Wy-4N9`>bTaoU}~=2a&% zr?1s5Xf_OU3ib5d(z;f6tD@ypT!CysrPJ?-OJ(T|ifzNrALH_lfhmJw=Xzv6>Uvj7?sxE0%Dk>l%r0&A4$rprj*m{y zGX)vU)CrmL#k_K5cxwJ;`J?pG=8C4@e{Afkdf1~>YnIfSDY^1fL56F}_}r3KwYok# zzg%>$J+Hd8rEBC-=g64Lax2Rg1TU5J+rJu=~uI^M$&Aa+Q8nyRB4d*48&t3!Au!rHd-foJt>EE7GqKFKg&L_f^rwn|Bqt&ZtYqu zB^Y0j`?(hre6#Oe7HrJLtW(jj8rLk~*%eNQive#YBiL?`$A(`Rm(M|X^D}ZTFpYfg z{9$^63B#Ua6F>;{Ih&ls2)vfWIPDp7BZ+aI5n%36Q}fyf!Ow=sc1{iTj71b>lo$PC zl2T%0>Yms-dbxGTvWL_Jf^tGEhbfJ2sf8^mWtnwp)%izLuHLrwe>~AK((meqCv+Ct zQ_X59PL@6ouQ)Q9BurAJ@bwBib2HZv$_)mcZg2D3@z4Ccxoj44@HmgndSg8MR$jK% zTm4_@mG*p$jFd~Ibq~U-xE=nT!Gj$mn z0z0E)urMZqOQSKPcrg)3BubfX;f?FYbwoU|k1HR}20UCNsLR$ z!6~_u5ISU{D9I%bmAfWGa@iQ{PwT98I(x0NzV*D%`rhaF{QvL!e(POdq65K7W{=7q z003lctZ`0YR^JIJ2sj3Yg)MK?VTu#S;K9cL6|&m0j;>3>F|>wpKV`d*`|LtSB9vk!D%D27=l8 zM_6|Fnt~MC24_w@-&&IqZbw{G;G3;>?}jKJR^644IwW`7ohnCiZ9@+GjHH#+1aoUf z`r9I_+wu4=e|$Zo*T2`QvLR7GyTo|co`rubAXjB6JDejawJGgONOaO-|RvsB}i#ViO1CwWb^tk#eyZ)Gk&rUYbwKaFuWm@ zwkkIE8%?q3#P|2Nn2xnm(u&>o7A}8xxbH|ictC28w~G7G5|#Y?o-^~Cjx^pfMcXPZ zPwoYeH~lFX{YRJNCDt4b`FLcr&MKmyNV~j=B{$scY#kun#lavV#GVM(LNkI=F*o^o6`b6){*6f zK6A?z^S!DOVxL=X7VDp$7ZxIMKyTuRvH6Friz}i9`a{N(wV9Wpsv(yoP`xu#YA#qmH#vT? z?zkG}m;0B#Z+lKp9qd=oA1mWG<=0k_?M^$$?~gI|hNCN-Nxm zKHzIqaruKq)~PVG+i*%)O)HjNl1rT}w91Rju95hFQ;{*O9yMpot)^!leV&bKjaIO8 z{8uyMrk?c+%!w<>GK^xzGt((8 zW%(4fy;oym@>^`*lu{TZqpcqGX!M1S{FFoe`fq5#e*0E7T4&4`Qg7(w@F@3DT(Lsy z@#;P+<>d)#5sX_KCl=2my^+$gryMkyRMpUlDmjot&|o^MRE>AZf7B|zk38(Mo+D-% zYjNSMF{@e7B{$4WY_Do%O&clR`=#@|S^4FFeZyzR&`yF+o|B(6ZG>tvi_^_H zh3)jv)Yk#32ED@yUZS|)THDo?Kj7#b7k)&|8t?JGH5>Di(6OZ ze^!@ScU<6|x^vxH`>+~3r+8l+23D_Nq=kiKd`aJ<`S#P+qKtwo|Lrz{Y5#foMW~OF0pPQdz zel@eKd7K&^eB#RKw3Mfb5!^^sx3k|}YeTkDoEKB#n;*8MXZ9TWErG`WBHoR7T0FnV z{?>1R6s|8wh{wOe_RcjFXz?pTBURC}Iwc;tXJ|vMsngq#{6&RbioZA0~>Y$~eo&f@MRd<9Lsrzs^EDRLN<#P4u zJ2V&|tG{R5%@{V-4x3XUSt5b%>^1Ofp^qR3Pf`Xt&5j_@Lrjl57)eXv6xT;E9c RzN4T6U~`6mE4A>v`X}I`=GFiJ diff --git a/website/appphp/static/img/favicon/favicon-96x96.png b/website/appphp/static/img/favicon/favicon-96x96.png deleted file mode 100644 index 38484ee8da626ee794ebb2e15086d3cdcf756f14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7086 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 UE14J+Fb@D(NkxfDF~flW0poslUH||9 diff --git a/website/appphp/static/img/favicon/favicon.ico b/website/appphp/static/img/favicon/favicon.ico deleted file mode 100644 index bbf93a15721c50068df90e9538c6847d1fff4d17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcmbVMT}V_x6uv=ky+{v1LD6GxVMJjNl6mT zd!_uXlC(pTqNfPaC-=+@!O%s?U5=ba3BaK8vZZCLW_uY=UyQX}zb-u&X8>cZ@u%EPAS>MJod^a77psjf_Xwu%r6A^0xi{{wX*B!IjEVk_ zo6Z&Y|MT09^6W#f>CZzRHu4yupQx?v#{eeH-Fz=bJ;Q6L>DSj%huVS*VD+2Rol^7p z9_wXQ1KXIH^8evyeW1PXQC>Rr^JkuCugZd}saQKB3PtOadCM@YBRw1ZqJNCl#V{1+ zaGXu7_os@I;cP16nBey=Ex^4nvkCi9cOT_B$%ur592c4?YXLZ_GN~7jK^|#?5?Vo+ z>Kc?i2&^n)q^ki>^3#bo3u{52dZy@A=CybEzIVb_nSt?}dk`FYkDgWoicaoE&7E_w PXj(FzMIFTd!2kNcGpUjh diff --git a/website/appphp/static/img/favicon/manifest.json b/website/appphp/static/img/favicon/manifest.json deleted file mode 100644 index 013d4a6a..00000000 --- a/website/appphp/static/img/favicon/manifest.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "App", - "icons": [ - { - "src": "\/android-icon-36x36.png", - "sizes": "36x36", - "type": "image\/png", - "density": "0.75" - }, - { - "src": "\/android-icon-48x48.png", - "sizes": "48x48", - "type": "image\/png", - "density": "1.0" - }, - { - "src": "\/android-icon-72x72.png", - "sizes": "72x72", - "type": "image\/png", - "density": "1.5" - }, - { - "src": "\/android-icon-96x96.png", - "sizes": "96x96", - "type": "image\/png", - "density": "2.0" - }, - { - "src": "\/android-icon-144x144.png", - "sizes": "144x144", - "type": "image\/png", - "density": "3.0" - }, - { - "src": "\/android-icon-192x192.png", - "sizes": "192x192", - "type": "image\/png", - "density": "4.0" - } - ] -} \ No newline at end of file diff --git a/website/appphp/static/img/favicon/ms-icon-144x144.png b/website/appphp/static/img/favicon/ms-icon-144x144.png deleted file mode 100644 index 6aa79d8f6bec08a6381a56a5ec969b936f722ef9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12179 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 diff --git a/website/appphp/static/img/favicon/ms-icon-310x310.png b/website/appphp/static/img/favicon/ms-icon-310x310.png deleted file mode 100644 index 12046d8226215dd6366efef3ad25f62253736e99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40744 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%0AEqn2kF3l^WN68uoPy=|T%nZtdCn+HDa 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 XARymT7AYgZ0Z(07`&lK_>dk)vWynfh diff --git a/website/appphp/static/img/favicon/ms-icon-70x70.png b/website/appphp/static/img/favicon/ms-icon-70x70.png deleted file mode 100644 index 5135560d8b047318544e68a5c3242ef7107f3c32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5051 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 WaO1-kk~8BX0ALyh>h-D)G5-ZLkvOsd diff --git a/website/appphp/static/img/logo_512.png b/website/appphp/static/img/logo_512.png deleted file mode 100644 index 37e2068779f8f5eaf709c348ebfb46fbe6d6a2d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31456 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 Sp|^nNkBXv(LbaTE@c#jenT=Th diff --git a/website/appphp/static/img/logo_512_xx.png b/website/appphp/static/img/logo_512_xx.png deleted file mode 100644 index b82da90b4d4f1d326c712fb74a53447b5740ec38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14719 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≥9&7dY;y9ztAGg?Ni4*XfGtsluG zP-#ym9{3gC2KOI{XzPE-f$m4|hHgDnz=?nT?fK?}NM+{>mXeMA@Msih znvnqkR;U!S1>k1=y2wHd?AhokSE{E@}0jOzi$>>66`f!m9&w}u2O%60T&pjdDJIib?Hm6{9 zn>H>2QVcfZT8_ii7YwLh1=gz;bAi<9lpV6R)#v9wHw(K{egZ{$7Q1vV4M^MA^+zo4 zIR{arAb`UI9K%5k094)vH~*Rb+HJUKjbyKnH017r9AO#Oeo-=lvybEv|Wzx#7>i5&gMp^B*d7|q3C+ztqG1L zlaNkcy*rAvh&gu8wQJ8T`{yY( zv-^?P1;mQoG14ZSU~t19yZ@2FBZO)_R{FKw8L`5qOd)T*QxU{O=X`Z8zyCUWIP=nN zMy4drG&Y$TZAEkyK1W@Vsv%7H!$vWK+ti>la*&(?FLsA=>6Y+xSs25DD;`p->3aj{ zh~hDwsz_}kgRv}O!I)5*Dypqqloyl|sf>>%_&FJBMJf9R`tKKs81da0te1Q)$l$jDRcaL3*+gtBRn7Bgb(Sh63|b>p~1GGaD``p2tgTR<A-%` zZ^)=C(dhwgr+Dl~`e|L&m(x54qg&R1$2;QRV)m-m?pMh#p?*&o(k=^o_QfozPDy&{{6c}%4ZE_sfUl|m;Jme%R`iXe?334A7Y|SJ zDGyu;WabzBwxmjWS6u%tC)jrSv*;fIpE5RA@tC){y#H5!w{sCd#(FUpUcVTCj@FL} z5(Uw8GMiby%sij8qod7JGzX$KOREd6eUR9}RKav=e5Lbwxwp=0VQ6|?#VhkKD5rzT z)7um|;a6f%D?k;5cFBe}l)@GzX`h8(vX@MhPP-6S%!gx)u+$vLAP!s$7Um#@F&O8Y zZ_TI86GZ{EbB;*+Y-GG5YH$`&lx`s*)T~Llmb|8a-JbinA{tO;s+2&3il75)1g!eS zl5xQ&D^^;GqF2%^Wo zZm*|2lOGp=6Ba1hrDU}$9iUW9+A_v01Kzz@F~;1^m^xi15D180z*CBjE|P- znQY&^8fLW2cRN5v)D-%t{gc32a7Tf}4$*(g%YABev-X36Qq(5mcZ(3Jo40`a>GICc z>E|G=N0D3O6vadF{$~=pE4q^oJDMH8YWSbCQ?E*D6U}OUL5cHul|c1u#>rsDGJ$ku z?Tq+mr0O`S4s)~!#mD^L9~%CbxV$|x`k(xeLblCIS5^8;fQuoutW*4MEB{$)uC8uP z{@E`P=LRJoK3uImm9484b#~#9s>T0hWP~JgNK#BA=WG?r{oOLReAV|J*tbVj{y=K# z)z;J!PP|ST;{-nxkTC>LHL8Rm?rXXjTH$9x5v!K?q)%nY#y=qo@lPOcJaL=@Kn3Ew z9M3e@tHie&-IX?p$hxP$t%!&7@&%tMzMQtKk@Ej+B;TQMn>_{>`UF?+_iE#k*VsLd zr`B=fz^KYDeJJ@^QKN5n39USxqLa55AskiS#;mNDDOdvDW=%tBD1OI1@WHyF2?VgC zOgxZ1?qFriWFGDgS?bK32wWp19#QQaoJuufHiF6b8g4^$e} zus~ea?JnL@o)y7F8A~1g%C|UyX#F2ZH;tmK*T*JzZLyBRz3!a9W|~e47_XFOTCd1^ zjI``_m~cSqb`NL=(x`A42ubxq8EapOXqiFtNDY2A>YQF1S({I>)MC?8 zMd!BuBHLC2kmV=S@*y(r`B`0Cn=7a`W^y>*idWujA}AEf$l?x>w1n3qr~rZYr@!4z z!I7M^#L<0%)8Q2uZX;mFolLIb(}sZ-3aNqY9Q{fSvUM0AEVHR^S*Vc zBI;<;0BZPF@}AH@Gcr1sU9#2+SyzbTW@`F-y^mK+b^`(d4J6fQs~c-a>fZkUW#dkF z#fhB14f-jW>QrCZ^=r(&tsGnO)4RGO`rQ8c8Ocd5mo(sMX^Ifp+pas8Scj+-+<87D zaZhju|345aJN{$hx2eeAd4;RbI>UK`ZrU4Pv|G*j6A^UO<8=AjUjE<2`Ap6RuK9i; zhRv+u|3J}v-fWj%msUa6z22exskbwS5wP}`e*?!q*}p!0YxIE*U9@tlkK21Vr}MdM zr0>s!Mb517IzIbFey*B~ZPe46p?y-1&_(Y`vw5Gn;-gZ<@{IwumJJc?$hV?zm2yEpFS~8{k-=pk0wqKaUlea#ztzHA?>T`tNOis@hKa z%-@yg-1kp>X@$h^m;E^Cij*pN{)8ymH~z4^5(MhvwrFO)&=EsM#KsBftz8#`hI`Ly zdzcd~)@<3u*Ys&%+}XnV)I^}x={O`e$gX-U)Z{eDAGU+5kjPhEF3@>EYbPF9*I9(~ zi>$Vd3P42uJ&I?$Gir0aGc2jy8{LWm20JjCei4UBzy(8Ijz! zoGB8`>X|Q?6nFE%Aho_Fl<5CJ0KplhaX?E}ZIynmSxvcL-suV5vyGCdmsC<=?OG{x zbLia&AXtdUx%uPwZ1eI2|L?L1zA4B3#m^Hg+z%B>?Ne9y71^1^mR;7vu}m9r)7J5= zodKBWl+CYV-B7-;fooD;F2b%ANJ(uSQmyADBU@aIa^QHZmB3_cUvYqWukreuHvgbo z?D<01y5>s<9tGtlFJ;8DrJHIiK67+;C}H~7v2!tBlEZ$aTYsZn7X?{Q?9G#Tu3Qb# zKCZ|}b7O7-1UV!2kl@JF%Gi6qI^ zMP(6T3CG%R%@Uj&8EdPo#xh>>wF9r2y+3~$WJMK=wu92;Rb-SDzn2;b;$^|D7T>G!R(Xv7RFtLgFLhJ8 zaOvk3u@&TQK>KbqeKul5%2O-E`rxxaoo8%cM z;Rh1J7|zUk>NzJQ#`N{wgiyNIOE7Zmgt{oR_CcWL>HE=3Jtj?3UQo%2fy8q7N>z6q z&otpCpQj{3HZ73lU^wC0x`(bRj*Ui%0f6?>^fA(Rdr@KM1)^Rzq6eT8+HS)GNITRl z@RB7c006@Hv^s;fsaN@MXc6rwiuID-%4-2*;C&?dXO8iJcAIjh-vfRCI2RVmZ(DiR zrezE!wum4ABIhUT5x8?uaiGx|A#WZ`x&y@)QhxmAX2~P;GQ1L>u4+dzxiEH zib{CWnV#f2%7eLyw}%B({QR7L=E1{2DF62nv9R(4$(!mnt+3)v)1X8 z8l{MjX+Q6P8@^pR5}7+v@4UOTjecIjX{OPKj+7c=j%5>S#??6}Vh^KJOm)6qMdIuo zUQ|Abia%4mm2t0mN71sk!NYc{TT-VtQ>tup|1jvQz~2iqPk*O`?Gv5C6`!d~49YUj zjNwfpZb|KG6|@&Ko+yS#%6@&ZK2fhVF#(kY5`p}naFw6sO^U^L9%k&ZD)M-CvFpX* zYr|D$mI0)Yr~$f@uCwEHv6%E-xMj|B{3em#S7 zZ{mVvpQfz?9iICzUcW;d6N^qy$^6H6#nU2lxzl-@0xswz1NfQ|g1Xzp-Fo<1 zEBP-4P}fRImkBMhj|yi^ojE$R(sNRE zDc3Ww&l>sZ%^+zn7_;!r)%MKQ6sE+^S6(edIijy}85gcTbUcjB97TuwSC|3A+ z?hno=9Lpix{;OQ>qMpY;O3!(4@cG;_- zy(~a3@?$KJ>sINAtg%e4y}E|=>!9fQgOg1)r2k3@AFBM`H@_J6<;LsV=ROWr%FDm! z`T9SQoojzMwodqbPk01$2KyXH;%sMrv7x8Q zE;a2@{@UXA0P7VAvvx1o`wj2Uy5J`dN=wZ{o>A@yoCu44bz6G16WBDXtn@(+g#RU^ z{_c^C{!|Y>(s^{HRoW)mjsNSXx3T6QQjpVU?+@h?_uM~xy{_|#O>DtY170SY=~eHR zFd9(E0S+T+uG`#qSs01-!@6tZ-YpNN1D|LNg631>u|fN*Y{{+#Y{t|_OaYF zN9s3V7{%J5=73VXP(__r;0dUE_sSKlCX1vKcUh?E^#8}vd55$0zi&KdP@{_0h*8w+ zu*HZ_Gn5dssx@nt8l^_fXuAbk=$t)*B8A4DJhXNZRY-*4Gj2WI(l;XDm9L-FTH-oxm378;@_HCU! zEpYxKU?v|af$|!uFuPHZaza=~a?y6^#4y*P02U)z-Tz?#OVbu%vS-A0e#JHjFfCLV zTBSGAD9r)H$fKN#*f3c{%p!GoZiQ0ti^AR%&Ku{S3%w``sJvG(-aVVM$@g6iG{6GM zXd*DbV0DiZ_sS&K6LI0ohBaHFPoh#&f>cco0UNCoGi_+wg}K<>zXB9BiTk$hBBf{=V$#2QCN4m={87uaC)+KCwcl=886lm2Y9%(0_kV z%FeY;v=3(4ew6D(0Mx>}bpINpc93KyZ;uhU^K;JasQ*Ae_7VG?hQmcjGcRF{1J#A^ zZ6_^r8DxX`$3{H@`^y@)zJ>>^+)Voq^gUw2V;A1}U7%%W_Fe6!1+4d0)?6>w+!xZb zx8aPV79`l68zS;Fp6P;75sDTtX zGt)92zeD+boP9Lml`%o&`=A=pqpR=h`?qxK-_`U1gezb*fs)|qYF06QUw;NC`5cxn zrRog1Lwor_a_{{;-2y*N`eybAP5g-BnUy~z{kVAc|3)Ns$3AH~TJpm?`swj-47v>d7;~b87T5D3970R*MdA9cO7I@S_3F>=-y<=zc%bx2M0&o?7O~ zTS^k_9Fr4dEjV+g-S0$PLliofVF5P6_AEtYiJY;Tp8&XSkiD z-X&KfVCTYDOWAT3#+RPge9eDTeacAechwV}5Yy;LJcs*Fx$dN3fA(cBC^f@>NruM-6Bd|Fwj`+0$E5OJK(7%ts1JLnI#;MCB=I>fXV#x#mD~qj53+rqg#}J7@0T8}}K|HhrA8gD6##!6^tQBAklo#XV_0z-Z zzRF!U4a$H)wiEYH_ya;bL#I@lS_N`|eD zS#TQZ0lWGPujmSuN^d&s&2Vm3@$ooXzd;-wuJwK%8(yxxX>(wtX!66j-RCOgV8L3* zg_to2=s0YDS$dzV3plP`NNc9(sCPl7+Am-9Dbt3JlMPi;ljB}D{ZlcE(oCp*+rn+& zQpH{_OCTly&F{fZ{G+WRH$ThB_WO!kg7{P}-01K0tRfi@tLCB92I!o$YXQ6ZSLap= zBzsQZm1y$O3DwBc68k~aL%;VT+Ybsr3A(V7_?kGqvt#*tKv|IxY&R|usYV*PMx99G9#M>!)f`1`xO)KolBve491j&&l{JH}acUxdF!T> zK8E5}MF-*={}8JdAfO8Jl42oAA+)iy{&gZ#GC)3O>k{h@KEjpoN~(;fX>zAS*SFmL zfEr!dgz+NK5=qsfp|Mg-6TOlHJ4dDHw%$}yH5Iz}2iIrLffIu6PJhz`&a3{#$;*?5KZSgc^hQ#=eqVvdnj>3%c z2)6c$Au00F!%u#UtN`#T4rr$<0f&hhbv0Yzk(dGo-#Xg<|5oeDMi)R2+i&2Q0s5*@5zQZ$QAW^X7F6Ey2-d z0T;5VU=}u3t9`vhtY)Ii*IW2>I=GVNUl>^y&wkmNiAY_wwhFMg!PN)y&!a*Uzv^%F zdMQGP@lyNIh?&$T&oO_hR`D*W7g+m5uDrqhNW;|!ZVCdhz(QE@B34%J$q&a49F=iu zmq<|F?@uWKg_{rh#j$7mdNoF&Zn!#;K)|h{{sCx%EB&Uc#!;b1%sxU*d&&`B?E`%l1wJZ5VFr2hypkdwc?H6wStqew z!6NTmz2sp!SD>dI=@EA>*AC$^uVfeg15G&mRqgo(!>Mle+^`In2(^&zJ?fVU6l;dBLKayjBs;lnKQU*wm^TiPznlt~Zjq|yZ83a8 zySTV-x=`iH68XQPOR-Qizqa=OI3u$(WY3D*zOALJ_3;C_FBocU&Csv#yIpr(E2F-C zKVv7`0^al|f-@zH{UKE8z9NdwXyx@aw)!?|GwcQ^5L( zbDQor-kp1$+z$~?{?-}9bnI7-9_xpXCq|yGd@pVITfh+6nQjsj53*`M0$JQOOyBx> za-%c+Yj+}J&G(uRk-Sr`h6Xhofiu~Ql?%x&CZ5jvVE=|>4{8fc+Y^U3vsee z#ldkD1_KH#5D1xuG$~)*XC!dd2+mvx=>ic&~{Q%;NmD2y3ui7c>W(K)xf822+d~{OhNb$^nkb%LP>Fq z-{TOh)S(wz%_Vi+Rfp_n`3s$`VDkkPP#U0I?3Bz5&sK@O&q38F1kMM>fe1P%D6H*Q7X6iu-ZLP`Ndj{Tgy(h_ zl$g|Tf>lXm3A;w&{Z0G{>NP3y^ktsi+z}8*RVu>gUH$3nmvAva0v3adqvV4Uy34Cd zcuqi#UCaqBjj-n@HZA1V`k`Ig*g>3GJ{NHP@S#PH8xA+A_frD9^lreHjFpdp`=x=3 zdYPMcwhssqMZHLr0`*I(DH1R&=t~b>bvvh}1KL(-1ozi3!|HD7{|gvitYY`<{U`oQ zk&39aeyObrq3V-++d2k_9A~qarBV?k(0*600m1CqhB_uIoCoumAK}~>o_?1$a9~+C zEU-`xN|95P{q~oeBgMac*u#TjZSlE9?)i;5Iumbon;_-_ z3EeeN>eR^XhlyeI;@lsUV7ooVA9}MJeoZFk;rZWI6b~C;WlvC!d#v%#{z^!1#wS~M z{&^C-NYYv|(DatNs=p{qVw3`~1@-4h(ZX+=uA#=HD0&t?MX051u+8M?@&e&rR{arf zFclDvL&C)GM|iWSwf^fEp!yF~h1im$3rp+1OuwnrgO{^IUH?h#l0U%l@P{8B2s6yK zYT=9V?!_%KUI}4Gvwbm(b8Jy81 z0b=Rm5;K|4J29grkrdjb6ZZo>Sy>s04CD5_!>`6KOo(Z`nop&yE*(cGfEhg+> zZ0hH~cpk70!>`4B3ohy~j*xYNP3cR!t7)R1zWG`BY*Ud4sQhZvsRRcqB^k*kG4x<&- zf5&J%Jls(%hD%{4uPqyVqVRF7QXmk$sNZoA0O1k#{$q-lq`oW(jvc z5kD9qZrwZh9x&O286E1l+5h))b>Z7u&9LmhYSha6=u>{jK-ou^fB)LKs1(H>qt5>y z0*T!g%89V-&Y>Lcd((K+@oi;yCt?o1le=pBwAiFO=%C8^^;BL}vyuI^6tyAPleBhAXz~1}4fd0U%)h%S-ph1;*3Amj! zDTD*gjthBrF&1>vk)y48x}4xvne-!`eMh-v<0(h1KnHI;v>1RN)n+KDUZnvlt)=^P zb722OVti~Kw|i^Dth{AU%zeK>TxL?A3nXJc|8;$R#l%xM6~&w_p3Smu8t{7hwb{+D z7QXpGs^+h<<|yKP!PI;7rHzlTMCW92hgWkJdIy`SzZ526Y7cHsEFRlk3SoSnWf3Tf z=1UnG3tccW?MDOqSaVL$67knXI5))s_Z6ooC~u!iBj7{xe#E{R;VbShc(x`6ayc~} z;H@#@qE4X^x*I%LU-T~j^?oGEF*0>lj!@{rEB;4mdp+*a7caTR%HR+bhteFe(ZQ$V z5a$c78mwUMq#Wa-ETo_>a`Be)1U4{k#rgG!Mh4^dL~C`kI1YyB9Nm$mt_ge%2X~3- zfZD-|1O35;8%N|4l{)6uZBFjQ<$tu&dPcguVdn=g5!c?oKeQ8fZokq5S z3Rv4$h~Dx^08}EXkwVb^s-e>6V8Mrr`wMSSdR?lHYD0v^O=M3`Ni{x$upj3;#~6$P z`5`6z3|-wgr_eb%y0+E<^d%r+Vie@Cv=MR3J|N3iJkQTGsU5Y!Sro$&pu+~(nZ*3= zN6APVO$9D|?)iuI%%kDU8cd;uuB7cqXahOI4}w4_cJ%-kf#5Bn1Myp@(NpGaqI|*f zkGJm3C%&j;BZ_k1r%yfr^_O016@zJ5c7Gi-marAcgHR1Qv%Ke5Wu?_+{wF~>1`_7K ze0)~hFYD*6zFrMs>9PD|dr~jxi zL+U&q8naS`!d{K4q!o@$yUUGaW|^IRXb27u_^xHu5!4927=m2-hah*d`}4gkt6__x zh+CZTYSGw`zMROsv8#KuEg6vI6ZKH_$~TY3g^kNzKl$~IWf1djW#ES5XXx+ebPv@z zse-b z(ACCSi09zdCTg7EgN+WR2Kk0=CUO?->w#OvaMf=PHQh(u`uPq2xy^c3pem#Davt&}EIVq9DD4W$?ir%bt; z7O?p$*N9wif`^{&n%rRTZAezwh)aCQK?Ub^FHobAqzDNF4LdA+&9O%hBfMyp0SZfY zc5-olVCg+?kdmr}?2Kc|>>Cf-kR?`Gl^89spEN@r3(Bpy-mp9&&Y({9V5MfMSu}!P zZFuhnS`B_8q_b~d_o>bREBve;-a;K7tchR7oM;068uH7k?wu<&MH7$(9+YuXc-zg> z#8vC@TNUq6UKS01E|hn}yO6Xeo)7(*3{@{bPq57V2`g0w2#7D^0PF^kBz0$5cKz_f z=zTH?@y?4!Ew{6+;#CI_;ta(7{7CH<>~yS3-cPc)nS(9#lH6or4C^0}{)ViyZJpc+ z>vd)jP)iiD1DcwVwe>%a+>c#;FgI_%_4n&q!G+vhA`{h+008mE8@Nkrz(!&7^q$*a z2>(|ttp@5~$g8rm(N)^Wd0s{RTC3a7=BguD&s+Q-_W@iL#Br5o)F2&?G`=?aHzXxo z)#5HHolmBWWV)D#81J1tj-q!f z*v9`t!Vb!H8GaFrDo~~A#lw*BY-DugkFdOO{fM#GC8E4w7`SR4#flf$9|iuBoPQ7b z1ULu}NAc=T+pi}_UWirOpeYij5*Gi5JhMs7{!v9b8|A>R@42f93{~X6k@b99ulP~v zo+Pt*=o=5D<;S0HK}A=txME|lUE|61>50SMN^&BVhhy1B**Bu3K;%-qI;~OYe;}M3 z$Pa+I|cUVO$PUGLlVHFK#evE2UgLo890dx1Xn>WSb*5-oVU*;hjNsb z-X|q0c#KLuC@g#_E~!|+iS|f1{5CNz$6N2x_7_H63)G`(%yG2i^FJ&9kW{xXauoiD zSbs%js0)tL;n zPyc}+rejB70LEi$;x8oZBD${bpv+7o4u!FtZcku-I=LhUm(hQ={W(YzFmM3BaPRV% zgS@60ASSMw)U{5{1r-YPdrRl8Bl62I*Pe9nY5I<@c59Fg%|#YW_u|WdNW@KRsfUyI zo6LL9fbpi(TPAoH=z;wE`E`IE-R;TDoVLs6zb4TMIb$U^AV7c_o-Vd#Q z+&yY}0=;tcl(<%rZ2RhR;EAlKZO3m%)t1T^AFe6{*WUT#dBQBQy~#G0xQV3y9YpEX zM7;7CANgBLN5rw5a=Z zPV^K}UulMBCe(F292m<=o*kWOK5=3~Tij8}R4gIncNsCer#+Ll(ALiGe#|~UlBctd zoTlf%b2t>h)r8BuRhB>V|5t#DDC;`6XMRIr2?k>gD-q* zt3x~|k`Qk4aDJu0^kdVeMWUQi^5K{I5FgYcOsV*9dYU8Fut|6E$)MpGADe|sq8J3g zvl2KR@_PBR-3M#lH*3F{i#{7%tTciJ_6aD-mD6*Iu?0QfxCW8Y+~#Tf%u0MlY8Et{3-nHLUD;HxYKK`l2K~mJ1$( zIRECz8`vi$HsG#3miZl2*fD)rd|V83yOO$opYWkKsw)e465crkn?2q$e858`3Zg)i zVIE#>E)f;tj~Dp0;|;EK_lvp^XLL%`$L0;cK_6a-PrU^E`_=4N3SMS+>!v#iApTAa zEm5zD7x^EkvZ#MP*UK&D=h9+ati4?6ANrmytKQE?Z1u18aX58x{kdKJao!T}lW!rz z;xs)ksdALI4HDoCLEr{`*B(-8+)IvFG3vR*3Vmh}1ZBrJ#T{hETTP>>f5zND86liJ zl0`QF#-J(vB9T9shdxBLzDXJz;4Dc9*b{H*mY&HZ!h-!vTO-sPL4#?Kqk&*=XUE=E z1N0$>a9w~@-X!``E}NDHaqRY4<`Gao_31vKdudSS)@W;Kz#4HriVhDL{fi(}c#=uh zTwK`Jc$W)yT)kjuFu8%9k~XMM9O8tj{VS&JfUJNF2`8swzDWJRWR@`o`_1Iw!H{9^ z#zjnql+t1Gg8=r3VE^J@zDgx&%x+C2%*edYcPpWM^6DJhVL<>5lr^E%9dqA0j`mTi z{*Ui~2wRAXqA#viiSGw3Ry;s-arWKp=@L1RP^=z!fC-~z38o~e9%8M=7%{PZV*!vn ziuQKg8*rV-R>bk9zOh3EJ?o)^_@v)KQN;Lamo*h7E};AGBQBC)xn1y3Bn2=%Mg$wz zI$E+*VNeB1dDjnC^%Y%`4S%b1_$8VkC(--*rQ-uw!^nhIaZ!gwo+L_Thr$Wvp)3>! zG~asB+Yy9g8pl`Mo$=Ku`FD|3)$K6%EW&k;l3sjUH93{qrMq^*$Y{xjR+D!>XDt zj$Fx;L85KGp(?2dmDfq;qw?1&>0V{L1^>wuYl{M)=r)yKpKDgi*)u(AT5C8f^eHn? z9iKeT$N>)>RY5;?8NRSqx#H$R6)kwVCB5C+e90k_J6{&BWBjV*o{inpH)9`nR!>L2 zOq?i>T;(xtX4H{pRHfL&#QxdP+BJ@=HJRIWJB#0SUHMdaJE)sK3JB<>bSX_hHpwHhr@#C`hF6%m72wm|`dWJK+>!HC zP5d(PCdr2cBo*dOfBX4JUfW|c@1*K?R|j)cB>xt-Npyv|+vUB0nAV>Ivx1@3PxS(r z*fwg{usei!jfS^miCMf=#jGH;Pg1~985QTY=Ju1pg13v;O~+6Sc$f}KW#114t|M}a zK4Odx;`u%^V!XjGRf&=8E*NTs1jBn_wb|m&Zuwl4NUJMhp?x>RfKCA}EcBpoKtFHN zLB_{ixG{z;M7i|E-Jc+}!qME5{ch`*ufNF_yB~jY-Aomf9zpQD*4XN9qgHj~}X>Z>kMVm}tr% z8j61f4ru7P;p5WcX?JIGkW{OND`|Z0oiYUEI_QLCd}dsMSF?kLa3{kB1#4PjO*df#`L zHMrD<`S3B8I!D}H?tRR~T8qByXsZjX9kf6AWx1J?1Hm*ctmnVz+hh1Ntt@JJrK7ql5GK=P+d-Gpk zGj4zCOl;>v&f8}4-MPTZm*op9GsTVTjPtuSQX<|S*){_+j89Op$Bf`mM`O-5swKI) zY+wKMfI*oB>)IsLBrba(3Gghtlb;P-k9Iiz;uPuQlQ9n-x;G=VSM}zV=`OfyMmVj$ zq_kJqiCq8pa*K6?HTY6~GmQI$Vj+a^)q|}lodUmg@?pL;ige`!bDr7pABbL6JfCjj zw_!YqDzl~BK>XMy>c$QSbCr{d6?tq2*NNm_zqEPheA|-+?%I4Yk-S!NoVi!k@aon% z`~-<~U2b~w*uj74+kc>2&ACU${$xK}XMABNo!iS_w>F;?3l+o%a3Pgj zHxC842t6-QPrhwfXJUDU+MSi1x!uXqkec=FkuE0{WIo`3C(D|jlaFRgdKdZAr33~l z!MwZVf6baNC1pxUcmKDSKOBC2-&Nm0}XDo$pH%*t0>b&Lj)j2~zjoyK%idp>}nC+6xDwxik~8n3(pJoD;4nyA@Uat3ug~=^>Z|z`+1d{Q^%$`Pokq&pY-5$ z{+25wdp`Aw9uf@WQYHLaHndq*b#Gocad#^h{veqd`jJ-3uhsM;nlxm3@6{t5evVkt zZRu$JMjHyqFjJnS?;hB{br*_Ok5Zj(y?7VpCHj5MCwq38>2U?(_LYKOW4J zkkXw`T*d6V>^#XY{NtsnSS(+&lu7?CWjL{3$5d^&r690*&7+H0=P9w!eUKwnWMzAS z=eqE?o)FLPky9!&byfHDxJyO=m&XMQYpd`>xt(?FLSDKRJM?;f;v?uD=YFN-l`K8% zStqvb=hIL8=n>eHJ{$l7&IJ>#AX`AWiid;d7I%Ru3+W&w<1?UCgx=axEDAe@0g;5m z5{h29lu*^FDlv_A$u7}kV6Q}7)rtRS?z%=n>szC(rU5|I87VwP2s=`pnYBY0S(Y!v zc)ms%g*B1CY6=mYm3ovG>%-56+I~VIKnI39t@=N2uu{*Zb5WM(_!>CKWp`MBz zm4@?xZFf|8xtvRmI6v;erCiIGkPu=bRsJIR+*mtF4C2_fd}flx(vtfO_)o>Qd~%Jl z!?{c3hkPQZNO^g@XE)OL;A*+^=Gevrj^AH)w=bBU${ow1#U@z7{sVm~$*VRV_wCme z1uQjjG}qO=#>dK~bAlD%oiSg6)c2R}5YfQ8&sCyyPK>t(d8Gr8Z;IKxmP|Sr!vo~` zV-L%qFh31rpWOXZ;(*d6pk_%>i0FV@p*um?9?|Nv!5BQ>MGVb9NQCr6T8avvo2x)% zM`3c_Cu(m$B#9COACQ~#_0@HEDpaIeH|ijv!~BI5lyk9iAYIBRPkZRVyguT%PenD9 z1*=#Es7trSfzxH1UV>a z)z+PfzE2BTDOHf3C1PFux4YDT=g{|ZlshpiLoB{N6RB5vt2VU^|5j+9Mk*F;1BD5l zXn&Jl*wi)PlJeTGcyvxM*cVkRzzta*ASL)f;5At5`u_8yj2*=ZIcQy=kjUdZU)mWz z)Mb!ok2e#-(kBWhpb#5((Z4yk9o_ESo#YddKCJhs!cEV+U&0)W?I9Q1p>AG_-jr=u z!zfQ$U)+P>pQ~ni%B$a*6^;3L`LKo@2*9K&`@Pk9&rDrRhk0v72WvZ2eXOMGl`Xz` z<{W0~7|Q$;jjJ*L2(Y+Io^bYj8tM~`Q8+A_;U+B$f|2pduKYesbIlO|pU4QJ}Gij~B!o!^9 zE4g{^nw!O0QKAo|tci=uCj5&o{O!6e<3sG)#BWbE)pdHqS~PN&D$V|ogJk~xee=}W z14z?qq408KM!0`0b(lXPzTLkn<2&~{-(vtjRr9kcMQBTHha5ag zEc?pqhdCBUV(6##q*<4X|1NVX35`T~i__Z^vj8G0C+nnOb8yy2MsFp`h@ZQ_q{Z}8 zF}Q-ly6X$*c);C7G|K_Q+cdx-v!}FV_GUpG|IB#L5t5VTkfT959kPo6iF}@zQf9!Z z6|9eBStdxQnk-$)?eS0v>{|oQShL83!fqr8k~@+QI>Tfpbf#F|Dnk#z2i6~$=DK?` zYS3oap6wcSl=39e(z;OyRmn?;aUJ980gKX?+i#;_Yg$YGU4rQ7e%R_coIkiPr5uq3 zp-M$#9wdD`3n+@NO-&ezdAE8>ydBfD6$k)RrWjKWmM^YuU#b`(U@g)~!HZWzOO?kqR`sUR9n9BCCivlG{lawFH>!yq;zR;pqO>=}J zR_>+LWE4k_62v5WCh4wUlp9kkSWK9^W)tJ`!6$pH*nkzCTXBO>SZ+ionnc4$!HMU$ zG1K?;%l%{ejzsN~1$f8C?4=cVSx-#g;i>itVSZVtP3WzNfd;I|n{sf%w>h%{zKmiG zPW&s=H+oC^+PS_j8Vl!K08on39BCa<7wp%kYUe^;h^dAP4E#wg|UfeeiUPS$uBk zMgB9*>IEI~Qa_9{ty{}m2zQ~RAnKDGgsLYW0qyBB07OPap+a0Cz|B|wAe!7>VlHdy zO{;oTj?QfzV2xfM@r9C90cbJ8{I>Lr<@*$3&B4$Aav2idvbPj4}D3~&~Gr6TO> zduwbOG;nq?(Y8}LVvHY#5WD@NnDo@;h|N5lJgG?YX`NY9OmzXSPNzU1tC7vKj@MmDOFfoaC=G@UUfI;!bKRuotfS5qTV|y;c2sOP>p0a44GC3 zqdbMQulPHfMYqGVALywavWX3_FPlD?m|*U}%k4-H5$gvd#He4d8S+ppt>o6S;pO#L z&ibeQ9oRw-CG^+{03f)4yP{c_^A;++$Q{g6Iu z4(9#-hY|mbd^Z0{V$2WCzl|*4B)cA-pH$K)|jjIVmgpDIwCB>GJYzs z(rpNjYbPrBBp+MyRR-b*zc7C+nbl`no>Xb#Z>*bwQ%)QDo7Qn9Fy58N zmh3rPER92BXpcCLz=_>WZns9NAaa{WW@{9J2(<{7bi?59@pD`Y5!dy~1szlI+dS*D zaO;C}6($y=6`tn`$kX+EqC31ax32%MDb_1q+iGX?Mu(-TVm4F0&7N0frjOF)Rya2J zu;I;t3Npvpqc;M=_8Po8)3E%lF^jx~+~XV0F@JYdQ9vDJS|M`iTrjKu_cfZ1;LQP| zIw+r#g``@Ts~5PaninJ(elIW=_vy3Z6ht%R{nG;BJn{OeK+P39!-lIV${~qG|K&W& zRs*z>+psK`A(uDIO0+LS3SyYxqPr!HZzzEG8^KUO)tt_B7Gtul6IhTsh_&%#UUNeX z=)1@Z6!jVkYtMX0`+J`@d+Q#wh(M2(`(!`}5SJdXHX-g7RG1(l+5e7KKnMBK*c2;c z+jHyU9{&gGY^s0J`%d19acl!?MHvpUTr8J0xKf_n#Hd8=4+dUnpB8eN+`@ziRkbZA zzb7AS{cVIu4d|GTr|n7Zigw#lh6x2)nj}4P+gl5WNM)M-yzSZAkhlD3w9Xax`GG#E zFZBYuE8NxVrKyI1XNNAH3r)_z6Y9oO)%4xszVJ;>s9UO$xlc)&CziVgKS%%7xLTI- zM%8sKa5|!ym%cND^El4$?0lRL%bvT(^d5>k*Phy5nXyTqTtT2g1z+x|ONt{D^Z$O< zC0s!kQABo$^@%!OQx75fy1}_6)Wg|x(!QMyCKQa6NU@D1XftIQ%M#@^zf?y@4t}Kl z7-v+Jl*uOdqEIedg+Pd16siDI7EEtHVCs`(U#b`Os-^0>`D{pdp%^iis+x7lJ{Y=o zr!xa_n0K#nAxIAUM&i1CTy!{Xiq_uY?HelvccB*&$*F^-a$|D%aG6s-vl*|pZ0A-2 zIQpT?bmVZGM48kV1#54~yB^g|9UQ&x!OQ9KWmAuBx}H<|1MH;&zLoD1yRn->^DVN% z)_2O>P4DVvoyLJeTN>uA#g0Wprw3(LJT={(;@IZKz2h1oY$eTCN2|w1sb4+%xj=PSwUr>@&>KXD6?s{@Wny`G0uV>?{@!0dc_#h$+{MCTJgpI;2W0|xRT6=n zL}glp-}-9DWl#x6Ko-!bBTFvz`aR|#(Cb-HO#&ZM;x=Gl&R+Z|^&rJwbO&THB0R_4 z7{}Go%NvBBkC4!}PD)RtN(di#!0<6iN;dJn4|%{k;ELm!--V%wbSglN4bNi-#YIzl zb}KtVLIdS*PC%zm_@qxUWu8G#eV^`mIcD5HcN&|oS1hp0@#y_7`ov>IjW5nqZM9;$ zav?s;j`xeVQac`6`r7M|9TT7HH?D5;RDE@TiY%Ep_)Y8MM1KwL;uB#^P9xLjl-!Y| zz8Lv%hIv=Gx$fK1s1KdLfza}FyAExLUS5uQS?1u-B-vd&pC=3JZ~ot6t!)0%f?D6QJnUkw|WrCO7m6B){|X9E}--+R;T?Xl_k%q zL!mQbiZy4a;jF>KG3TnH@srF>qQ)1kbDNOQGYYj{II&q{kKf<<{xy456x|sqa{l(c zK0WV)%E!AkwJx0IJs?ZMN6Qgo14h$nU7ntEAzh!Q-UI6WQ_H03!0@gQYPVaP|El%W zPrTM2Ws-iTEtBPCZqh6G^<{%2Rz;zr02bipc_;slP#2>#n*WozCBMyR#z}+r_aWiG z^6|W=M`hwe`BNNEqfBFMvR1Njprus>9FcHSL;|p($!$071SyAx53ujC?~d*PS}sBFQ@@fhfOtLZ z6I{&ki}QwL#ZjWYXJc(i7_CPpzQ}NZEX1t7J=(?}BZEN6PvM^fEgWC04|*f7PO%8@ z=pN>M^<3)Q8{;Fz^?o?JxtAv+4gHn4Lz_`glnvWMA(RBX!3`jbw18bfisc9}oFqJK zWij-db@~sTucNJzUtG&`dup2)#!x*jAQV04_`k4IMMD+RH~j2SK)@s?w*u-p075x( z&YAsqu8E;D`s3D7ZjpdWqMctu~iZ6zlyXuCkmNl zu^nJVaeKJrgoVV>oFOKdf)M8#4R|Ik*(9PJLNF(Ef`k%#%tS?DT@RI@WkUer&n_?Cwv~!JKO{xyx~!ll_urxlmC$$-}3MSr|C(`3-ByxJ$9I zibrbNB3{W2e`(-;k@$=1wi4{!Y3%$+!IfM63p1pWIBc-Hi#x4a&cSwC0+Tf79AF6h zA&TSJDCpFBroz%)s7-BZr2q&tlLW_19z(6x>afN#YL_Z~XBL>d`GzFZt=JP(G+{7> zekHq~La0^l-FnH@ISMrK*X}k3#T+Ovm}1Fy05ly7EPfYjUqv%G-oXFXSM%(s)>z#{ zNc%=YmU3DpOyXMuyTGp7xxtAgR9s}SMk^hZ$`O{@QFNz_itkgAl&J-JoYqK(W!XYe zLD|&omiT1k(C)SjCrTVl3k%#d!Ye@* zlKhyIZp$JWWetTfI#2wvUKWb_KE`tvzkU2e=>YfU$|y>{VeBl zrlx*3ZpnAGdIoewbeeY38f`x^K@>if@QXLlKQZx9(n1 zJp$yA_V{(TUl&w?2P;@9t3lDmFnGpRB4Xa0h!tz+>{6tDL0$zp_~^Z^V}An`ECMmt zih~?dsa^(GzUfSDZ|ApmX2C7$v%uVZ)ypfleT|E>jfx7UKk%;3YxKLB`wiAz)5=(F zFG>@|WQbiEU?&(MvGNXaCwOZLwYq09(Bl3nGo_nWCZiRG1d53=&!?mc{lcu3w-fE} z=tzR-dRHF&6IjWjs_`$X7WQe}n!Cv?CNvs&J~?&3^-zu2JMvZQbVL58{Furh4>QFSz2ZBOOi^O7pb@54?>irIIE zpU?OIO{RX8-36Q|U1+eeg~eBqa5T zM{!_E=M;;~Qzht>5p7uOdcSk3b=$jW&)WAwjQ@e;;%8$Z4C`{X)HXHN;v9q)~E*D}|FJp8(x$5wCa4V=zI@QAv#!QRvFj3E4 z9o4u2(O`xPYQL=Cd-zayd3^G=MEF}@(wd>kkD4XYx)I1CtK$9M_p~s;pO!^rk*w1ZCd}9=_#_vSg$}5Du^%xS_+V zQ~O49#7rvo=r#_me-eXPreb-2VKf8m**?hjuDjB4bRqG^Qf}jg1xlO7(sX#ad9*`j zqPvM^V|q*%h|%ozuHll8A){*-h**QbV~uZxYGOQ9l4m00ESb7iGUHOAMJ%mdw;JW0 zZb4BAu3aXWHXphr6t~hq-CaN9Emz%yVNPRa^^U_bFekR1x0oU_G^kM0Xyqg35l1L( zw7yu+y1r8B{c4H?aiHgPy89zWfj2#tDh{^Vx@zEK^e>Yk2rF!=)J6NrLOs+Ep|j?e z*H*i0Mg87Cs_7h?&tmMu!S;T0Izx^txa5V6lm4A0@UO2)pkzi31ZMRfWLTK#; zo@z%#(1(d&%xP73IJYXteBZ7?acJpk`0~W$HHA>FSU~tXQ3PmRqVaW+!pdQNBGYZ8 z6_0OHZ2G>oR9QPZ4Cn1lg8~NW=)u`S%SDx0}{axj5 zFGF$8kqJ&BeO065kI^h+zZf#Jf7!I#UsG`s`_uYu$ohKg{nbf&u3P<~tT+D0faP>ZH2g;Y;=!6Y8fS*>7?mkPXAq0&VBFqUX=OF##W$QmTI#L=oH0`=?EkLu1SZ1UQOG3e z2-ztZ14$N+{Sbb`3$rAP-|y~M^9o4-V)utvzLXY$jPqVBCd_<-50=w4wNvrZLNC(+ z82mK6nCn7ZL3}A@z?aT3@z38sOcdj_PILQ_-AZT4Ncx=UB5>7#yuEpv6D14a6dVE2 z^LF|lgmN_Ce}?KGUb(loow%e|GK@5q857_K+Ro(#OjaXLj>$A49aEv<%+qULqP{Yp zc=g~9{sWnqmU??D0+9YzCMCtlDVAq*ES1t2Z%`#27Z6(NEo}ikDNF9zTs=)jQLJ8u zXX~>sW$_nt^5+%#u;-?Oe{bisZo{1`XQUHD-!u5zjk<9Df0p&*ntr%} z=cB6P;Gj;?99c{htq@MyFvALnjg#d|jw%li77 zC>JYH?Q2u24|`08?u0Vel&Df7iDVkR!2WR4gm5;q$r^>Y=YRG$MLU|WXTm2`-{frU zjao7~rIDtqZ|qc(V}Rj3ar6*tESuA26n@(|3n!eKBt4r*GXC@^AJnc22|x0C|({0*>IIuU3bqZ44dfN;rRBW|-Co_i=a|Q8AfNZj&=N zg=XL1r^oL<5A5;TKA-pA@7MG7dLDbiz-+cZ&76yI%?U+TYdmZmF?kkk0xT=>;+a4o za?oBdr_(|P4MddWr_3Eltn1>0m7Pf8YNNNJ*TipPK1W&U6*YGvyX0BB-_p|{Cs3Lk zaUu7gQ7zH=z<_#?dTJDBZqZ`t2%QtK{0#t8X6Hp5#Wr?dt)^i3eX|VR5Lm+BY}y&X z$S>l$>uL(l;-Sl@!~lD&qLmikqx4Y@pp2@rBKatZ(CC{wEBw8Ye`W>>1P^}z55`_e z^Dz`g?{4wtQ=IWvG3>6&+?oPY7o*uNo139lm0kqBTh| zVQlce9Gu;_Q;A74sFOiysm)xdt>%}!=LER-oafe$3X_|1vLeWm;$N!g@)^C2&aDb@ zHK_+dW>6&v5+3atkH9r$aVzKueY%YrXyb;`or%+*0 z{^me96Z|b@tr)G!MM&BA8?ovDr$|Arll`703Zq~7%CCh}mlYLN*c_Kc0!iT99qBYp zz-zimXNuya%EmWnLhg8N7mtu1<*yR?{=k0k!#%{#1rLjEm4F5cNM3-41BrRE;xMZ^ ztSqTFoJ|Y$4CLQ#>#=%+GdmWbGbiJ_@DJj;hkDsD{B?y6-5{b73;>z?^Xb9*lsj=q zUt~CNJcg8Nihr6v&(%Jia}gNA*kWb<9*dgbe<*fp58;#m3astG0hC-LBSu!&9y2?pz4f(YEJtz2C{}e?7VA z%!+Njn63D)e#@_S&MK!xZkHhaSkTfhV=Jzm;S~M^Y7)nxQrW}fXN?f+ zQN#uENsrE@1AEXbYuvl@T2$m`fllVVS!RR!?Hq=tRR;26k;tcac{_>Zo}k9?q1S? z@{^nPt2>UHo<6)JZE}N|f+vOyK@`m*_Yq|-`D2K^S<;odx(seH9Kr0o}Gf?uleIWSAwmJ#`7Cu0b~18pWDeF zz4Xc&?{86Acx(i|@b6nDyl^tI@5M%tUg@$Dfr-mfD`2#!kNU;Tkg?WS(AwKj8aM7; zgY;p-a7Pb>+xGL7`hBuY(g5x5XXpZWRl-M_%XkuF-h`EO zA{TW*f^o!bMf{wdLRt}ERPigt8@4`3>stQfB5WzCdnVFHhwv@-6u(hs-x*xEQT@+O z4Xolh&+Wqc!~#Jw6+D+~8GpMb?(AwkZkjsM*wYy; zFR>z0SJI0RFX;R6F2?+z+!Sp=NRpffR$^yiTV;*)BPoyad$fCbr^w zu%M6YyToa^k5Z|V9a)9miu)myHz`pD4VX_2zYV<1NnQ^aPA%VxK3HKiZ-GHR?AWW3 zXOpM3lpZ+jR~xq-iu(zEH#e_-gz@2zRAy6t$-9UDfhrtd9ExgN+8KH^90s+Jl3wWN zqbu;mjP0biRfiOheLvh`Dkm_oG3L&49XkHx)Y}Tg(G~Yg;3mp%5}Q7+UjOys!O)*8 zzN{BXo6U)<(i20QHCJ98Il}*{_nRVO_S~i>+s-A!ujEb!dWiVl%wY^_EjXcdErGou$JEEV;I5f&O1e z>4yr0?a(o3>uc|G&v@}o$F@<^$pgLYuYp4t43NR2PLGJ_-vcC)%9_UF95_<7*YZKPpV+6vxIfk!fXnGS>AoY`gTRxUye}9T|R5#J!?Ps*=$QS#nXn420wWW)qiIH6?c| z^e?9mGi@9$OP@xRANJrHubp|#iX%nepOaNu&rYmYKW9Xvwcl!eFY{uVvnXum{DvcG~b^OcR+imhV84HKYzBDRe`cLyaJ@RIooNOlyvSjv~`UqevXOq z*qDfaCzlfLbh{`>Zg8+h5rxXbI+)b|r$_RUJZpRX;q@@}G2|$m%Ot-iL?Q0#d$qoj}!}x=5)XPbsIk;A7cKlCBvS&IeUc@{A;QFf5V7ppbpd z{!wxORn}G!`RDAl_wR<+D8H7c{`%nTF3j3Fd1~E2kB-F6hmTIAMtwhmKlDS{D1evy zx+&gMMb0*ku=g$gf?}YPaHJT0qv*zo6<3^s2}l_G8nL&gHteJ& za_<_anfCB)ifj~4WV6R@1jjuYDTqDc^2+b7z=(O!S;71Nf#jXi9`1m$MH)43g%|KK)|0V<&e2$FO3trVyt-5-2<#r)X2~{| zQ8UM_>`w8gPdSnTdcVP_G(8%$Sxq7l?Sa)#BgJjX=I^4aqx{-5=BXQVTOg<7^|}`! zHFAlYAm(~p7s?5}tw3cJB3KAR)}}Hk$!ZrZJNh5U#E!f9qOa1!xTP5MhORg77~44F zuyHBQVgPWSaPs>E>IUIGA)6rQJ4Y(du<7yaSfDyJuGC*^HVi_&uf&W#GVuPxw&S{3 zCcrO~NbPfpI}ahr1$@MAFZ}fY4EBKmVU=?_nYxLZ_B%t?fJ}mb@eCg*g(Lx4isR^P z%9@|yWKA%-Oo~a7PEQJ%R1il$+19F+s^P1MxMCubeyfmmY0M z3FcE{3yaR7X?>`HD#if-rO@2tdMq6v8Cs(;V@VNSaZ4n*Ibu-UFct;G5CrPU<)Tg&{$V0i$RmVb(foJEVA8%mw1EHO~+6xyV1hGlL zW3rTFM*=XU#;oh|;&~f@AO+maRBH$zbsoa6iEk@`dr@Nlu#6@nDC#xvCj;Cs+d~@Y zAvTd)Ze?pGjTZo4TtMXcz5hV2>UW@%QIS}8vy+eIw|47R)7c9e!bUB1`|zJnK&*8z zThrB>th(bPxi`o5gFNzuc2P#3# z4YiztJme@714XR8Ud6R9jBJ#^BKo}mtsoCahcCU>ilNhvi|7|+Scmt3n-V4G;SZQN zOJoE<32m3rgE<_%cb!@`n;D6*<9f3eT`#P;wa~#W>(?w3JDb1hE$piTZWI^j;?>gf ztpZO2;`3!*i zfen}Y^&Q)jUfV~0m@V&I*s|47f7*~Kn~%BTVh5~XsrNR{=Bcqg=;Y$kNi|7PvULObZ}~peTk2)j%6rzPNnQc4ty7@;~3vw9Rq(B>>)*ZB3Pg&Q;kBzXI{o&iqlq_dZwR*3d?ekpLe*F+p5JawZH+ zOj_Z<{xVI|2h%)WHdwNV+-ZEpJX~lVSnP1WU-E}DEAxKkH4OQ5Yx{mZ>I&qQT0+u5 zlM>ANDeQjfnXqE0BH2vcgIxT9{9(QDIhp8ScvkYR3oho* zQ*iVKLDnM#^{^&gyw8Prh2P6{pSHWTui7>Ta=lU24aRLXUo<5&8)>Im^{7IjfT|BB z<=kD-l78WQ9)dfw>|lQZ*CR5(SnH;tjq6TBDnd)sEEkqc-~-zo@OG$5+<2MwA5l$G zC{+Tqy)y*RFhd-XS0&7q_OajrqyqP4J@`6oB0jNlZh zG#_Mi!;#Pv)yd{T{y(@DEG@xAUiHvd#Xmm2f!yHri;r{=(SuSmET;*>4~})JIhf1{ z1One|{F2)*%|a^~zrTE72~W{D$A@j(RVzHV&MfaRvjcf6W6XopPH5_qNo|JSUaeI+ z)!~YTRKeL2>%LRx3!>n|Mp>t{38pmEM`86dT!h$;gBfTEdHj!JE|apC+{m}VXgbV! zO~@8hVOyO4%d{dE$o}nx|1<$oIFWuxyIt4EBgvsl=ysL<%uah@Gux~lmvg{*;7*CP zK+tuaW~ax;4L_>^lZZWm-j4F1n;Gx6@O4}dP7Wi{SS}zD-bP)O+s>U7DGl zo~*lS`dbd5bGcY9QcYSIuFdO0l{X(-dn-2on-nz}j0LRR;CcDWDa>pa=+;TCkKm!_ zeSA+U`ptka(21QR^XmMCgZFaZeM6-wvAQ3xX5!7U!0%k{%2@08QG1$y_(!YNzVMQr zWbF4HJUdy@U2Q(Sd9~GC?NRUHwhEgB0^STJ(%B+%ehuIQEZup9A-}XEC`N8}*IcUq zs-u2H(CaoWkzG$%nfreG)FtE>m8X|2&b5VL4~$*ux|!T>^Mt>dI+tj9(rpyCl4Hnni_SI@_Q;1*96u;zOvRd(rszyBDsG7Ds z6ygG9>#Ch(aR&&b2wd` z{N8R9-*VdDJpeuBlq}azbQ7@m6Xq+oJ8DL^FukTojQb*4@hZ-j)W!9u zEO)0IucEi$D&_x_TgNs|#=pXvH~7-Y;0%a;#Gv<(KmUvuQ`cI)C%cJN<zO{<3CWnN}Nv6y4#z@KZ=Tn@@r{ZTC%P2_qt1q&|QCJ zFSog=&ehn5)$p$4J6d^m?#cw*KmTk7`?>1f@yx$4*lE_a9HUb^J*=vzt9qy7Q;WQ% zBRx9#wtW8fc*rFf9+;ju+@yai>qHW|Cuq@0bmhuxj`&s4O_gVMl=C|;e?MIhC{{|e zZp2&1%gCDMvhJYA!3`Z&*=gLCO^O1Z>qk3F#zO&CWnek|}L6wq3Rbn-8d?Sv+!^!&vv)@)7J)ng2i{W$xhu zV~JCYjUM$EIUSCKXAq=$_`V$%)aU0G61(@!&x9cf-GTyj(yczX5S2yg&6%&5F*m<1 z!}T4?df}rj25N42;HQV@p)f;1(bajl1SW+gOY+$zrjI4@gW}SVn~X)ctBGPElm!M- zp{3HzHR-bXn)o*7PLaT9(&p->+)umOLol%>(q0JXIbihG&6wiw7Q5Wpkfu_>^Ty(d z(uqB!eSOaT6V;am=S$EksJW&RJ`r0WmTXH`KSh=aQvc=)eJrKLiL0xv*8nK#tL%4Q1er%M zcG68wV-~g0N`C?Cxxum#*&ICaKX6PRf?l z#jnAf=tp_0|0F>>?MC^4#HU#j420J&n2K3?I=@MaZU$cM8MsMCtSj7toTwU?Ao88v=M+@V=aV_sB5D z2Id8>#vWFadwB(o*U55-UeV*+FBGbDJmji{eQSX#DE=jMNz&A&dqlvn9?{)nte-DZy&IZSkfkaWw zY!V170w5{Z9%*q;nD;+hkJMv4b8@*XHvB)(Y13#@pRr0ov4N1HO#8o}B&!T<`qb*4 zOU!2XK6c+Fj)3C_tPSU7I=y9E-e5`0SFALYE!G<2B!Z^1r?U+OeH5v?vyTE0b5KqL zlyPo^y(i#I3T2=_Z%}!!eqeJNM1nfgAUjU6Z(y=Hli2NY;|L$rXEr=97KSzarr^ek z1yYcfY)85f`*1ek<7dv=`8ojQ7;hDWtK?;9AH8H$y)M+g7lt5;WQ^W%PSf`k@HOl&Pmwj)Dw!KBOUEYt?avT#zdF{^%FxMe zTcX$OcF0?Qi0OnU)|>;}LX@)~Saw+J%la8SOPHM5bMivW0UyDJ46wLkV8TK=@RPhi z*IMKg$%3}p!DVsH-;NGU@4b&9h2eTjc>m}=09f5cEHIm%Pv(Dw#F4)pj7yJ;CFXch zX8kmixyCsGeV)xYmO; zZycO~!`k$Q_$p~`kQfns0TavA`Ou%xSt$>0T(W5h#7xw*7zYi5e=d-4-)@?Cq;Pc4 z9uF`FQodoZj4&!07{I_n_f=mso8>QR+UX%RDb|$*Gi>^Lg-sthvB3cJD_ZA0sh_|k zIC1NX8H?VPzc0QfjSJ(rXg`xb0K+)4*)y1BE5f|BSNqaXiTP)F5YBIsCGSHRk70~% z(OxPgtuVlav!x)|Y+Tp885HL2D&~VZDv26Qn~{4~Z0PO4SLXN1H%8Ba9NGJP9kw^x2^v?CX6DyOj)Ns_hz@`ABCskL=l4-8Ir9K- zI$A~@?ti6|MLuv0j5@2*U|6?RdYGTPBvcZCD3UCHV;`=2hPCRx87`Rf0{7@Sh&)h` zAlXJOqf78F+9k$lZn9d| zmb0!m?oj<9Bz4UHq7vX{=M)c}ruM+?w@<0w)Tnw>1Dd zh;|QjPJY0*?0o&x8QJny>oCw^cub^Adz8@aDE^nS;=%R+)d&zZ$q$CsIbLi&dd)x3 zvA^;z;EosHzE#+&Sg4frD4ipr3SDv%tfL9UbttWLWA2W6?l~>X-!DvZ%rFMiRJfbf z8HX-?wC)@a#x+fu>`!GSS}Fjd|3B63rxhC$KLP%Cwq62yC}-2SfM1)7(<2c|cpc_L z(Gwb{e_S~+%{uh4;1zPcBjR|ayFICO{@EvK*eBrh=iGP6#=iadmtcJeL!AF4GwLr9kN5FQ{X*O1+?6K6Xaers#cv?E~lybFv z2`sJ$6xpBNMUBL%n#2Nul5IEAwrSGmnu=O<9LICd4mnyCY+4bB?!4eCo6a8zfDqZi zDMF~nP*+3D2}~pxFY5Fs`$Pn)G&p1o@J+{rl_-%1$n{mUa!c)9r${FlGtt_P-|gOZ zi9${=UHlh$tN&PiPF#az>1? z4&Er37$Tmyd^2Niu+XQ&A^f7s4;r#-j`*NCj?n!4);0I)4G~ATAdlEfC&Sz(1<7sq ztHf=7-D~NBNLKotwpe2Rcze2ILj2*esbWmoV$w_8v#)YzycRZU(4Fsufvn2o(=x_7 z`p1(OzQW=#r;g{pi(9E#a+$hI4;f5cz_m`NN}D&FmBJMsAe~dvspPun*#fvs2<$Ze z&aO-9J`zi9_#AZLTd$MhUb!%ubq!?r?%29)Mfcl*RiHL)(4O0Ft0^%3Q>ZMh*r_#da%O!+WO4y(y()xr^OHil~z1nFc^Q+3=$KlFS@iNkohP`gj%*Y zM?mk|umX9uU|t(D10|L`8DpBA7N`W(H?@d*O;;QULgn$^+7q}^>?wu^Zegs>#-TN1 z!>zXE?Vd}v>z@UM14Xtv&Uw{wcRpbGEzl)7rlqUh^lE!RHRPczBEV~LHF$TnWH-S= z5%;}~9aA#ko2)wEwl)|HAHnpuY;ak?A1)G`_7aPA+g_1VIq6EjGq-d4Ki?I{%^u4)Ef$jo9Pac+9Pj_F_}buY(8Vx>%F=kckmww^jL|GNz+?_^Yc33JNyv}k zr@<3|fubRtzQm-|xbr?wTu&!O8?`WRjSLA=qAWe3ee}vHWVsI|E14y zJ>5eN68UR^`tlW1Apn?8u8$}e4LA34t&&lD+nO-)0R#)S1xTEh1{TklBV>e8r`Jk- zs9?YfLa|OR9&yBwK%r5C4ofydQgGt~YyVI}h}Qr|wtnMsEeib~=!)jB?^Rwcl<>gl zDGjvs17uk{Jy6@m;a!}iysVI(C7?V?Ax-|%P1V>WfWSj~E2@1Lj@}k)W7C=>0oIJ{ z{+s?on2C)7KcV+HGXskA*76=v9Nr~F-{ge+@+v@OaXm2SjizL8lw4_EWxRrOb#+*t zjR=hFudOzhi13m_Z}?f*=f4gHfOJXs0+ao>KYjNbe;u!Z*MhZqq?GvrJ|KZ4zRtmB zDgV+*xIceD(y0EoO37Iep$ld0hx;wr2%7=sjguM>;4OB@l^ip?Uu-bX6D^+8Yi89K zqVpJzL{(`)d-q>1j8h1>tpd5|dYIURTs%lwOOsOS_tzX%1*DTRU{2Nj7J96b1IiYg zUhxbTN4aD%yu|QbsYVpb?JP*!_idPaW=Dh$pmX%<_u2}oSg2d4i z-rfu6alHHDo!squ=%iBOEPCgl_r-aUU)wCXWeN~x*nexuT48J>`qtx3>1dB=iLalC z`p48ekO8j$c}^i{wqgLBsuU`|PxWonozE-n>(|~_ zGX}O4DU&}5X2&=u)|c$Wu79Z3?oWYD`VjA_r(m{ATu~iMcB!Y2eP${#U#G`)h8MRP za*@97h@5knQE)P5NR}P+DL|##f>_`Z^#CA@%k}VZ%vt7O45o=-FR4uMUET5QGnh9n zF){Q)`a5=77V$h-9e*rO1{~e$rL-9`{;rr_ze+Bspj8>e)~nIK>A6^)QIPg{Ubp;x zT@xv^0rY)3k?A}i>^$(*pfFiGB^a04??#pex3*X%>UBVY{yz5!Qva&_9@ZTLMm;ET z@$do-Y%A>5#mr!KnYiVmQY6jxE)IkD$AE-$O5KN(GBll5WK19v{h90!4Hl1#7l1BQ z+kKt;h#o^sy0MuGVY@*07zCi_5qw7$h-tKLm{)DFAYg}+4s{Z74}?mb_IE%$pI+2C zJSsd!`*>Ir|0(CwcL}J`%&o#!h1@d+w{pA;1=7+)#PgaBH|;!P+d+HGSS89G7n5FA zM$~@!O|Ri^M}y7^qj}REV!~%BG42FA2#xh+?|T!eVTYMZ{fSexYt; zQ<48VuGRg)bTFMezmex}zm~zf|luQ0ZHG| z*>JD(Z{y(_CyM*%Fe%m%yvU0ZC1a2K#p8Yy&m(9-6(hQ$A41(5B9A4xVTccSwe+Z` z3u&6m4vo4VRf2lcBz_scw(UZf4YbagSK5&{5EsGT5C^yHRlDhki*R`~nxd-1q3<$> z<2ugb5Iu?&=8u11h_0i^1v+#-*j^~MKVj?e1u@!;OL>za(*!upG7E2ZiWp^OjYy@^ zlL@lhiNWP=Ka__E!6H*v-J2p?MMn)p1^BZ6(h0yORydGsaNX2)>*>?H+xN$G%Hv+4 zRp!-`->mBgD2!=YtfSDM-je^iJ<mBLIiuBl<(fxds0r*haGe+-D~A zygX#QWsyV`4sO@jEIjDdW1Xbt3L^`lVB2i?;^TyPHqDY23)Nu+n>LdwAA_m7%BtYx z2P+!>PcQgl!O3>bML_c_$dcCN=36{X4hB@V5h3NrORgV4wJ5_)6tdp8r}W1rKUnlt zVjjtV+^(Vn?f{Mgy3zJop*Z<|pORDKzE{7~P6{i^J9#?iBwvTQ7Tb(o6%k*_{1o1+ zMieL5T;~(V*ragT>;PId0b2nl3x8v{$Ms|g%gHPGUW8{(asOPh{Xj{u@yO-WB85C6 zR{ZPPru#_X?W8yzHX#sf$a+P){ZeL^k`5S@oDw?QqV9jRcAYs+9P^z7Xlj}+x}J*3 z2En#Kj@Oc@@6obfef;A6eqf(u+w;Y&hVvp-I<+0=-9k!lY507Rtb-q`>hz@6n;+;0mO8icY$NF489}*R` zUtJ8_f5udo`&x`pnSj>xMV>sOdfl?i<%#ACzQk;(+}dGO*8M}5+sX?S+}{5N>oF#8 z!_RzuICxpsxnKun+kf}Mc<1{c?_nu)fij;z50nTyL(ji2)V)7wA$PJ{vGtv?L~A`r zo3go+>g2xhQ$CkMR)OvPtb^;oTU_N{cas61u#J1jPc<_3=8zq&KSwU?addnfH* zYVTf8hkD&*CkZF?7c7{vXoo!dw}3^CLv;y+jm3nsNORz!W(k#X=Yiiy;IX#s_2v5c zBe)@YN_#V$_|${YPSZ{DhuukmTo;8k%uaO61!A#x0BGA#u54GmqW`nUK9kF2E< zz~u5j6tkfj$Moe9`KVgqc?bjGfX$75PgyNt{ZKk59&PM>;2LNS=EL4}ia8@FC>Yl% zvLQ)(kQT-h4VCNm>#(;%s0=Bs?=~p+De1bfNO(GUy}QKKBfp8QNuhI>IMN|NNN7A2 zehaE3QjMbN@}!gIn&=gB>&0rtGa##_HdNn0f&LaO(u>mP5(Cl*Uu6K?qOX{$u4YMw zi~(g`{FnJp5rEZ09J<2N*|inLY#2425&`0436BX*MR@V|yRN?$Cg!Q0CD; zpk3=Mv+9?Q#X>$ouC`e1+g;%bL?{C012p8px^#(R(HHrJIf4Q5njG^6bL{JX zA0UY;N^Sx2ScCkA+hHP`I~PKwn{s4Z{(9}rW~X>jsk_s0BPt6VtKuII5&LDg(h)zZQkfa~2s9NKX)BD($;x22?E@ampp)o05TSpdbIJZo1zONyEjUB zSdyqG0RD0Sb+e2T*>Tp>q0rAwLD-tjl3n9TIZt2|litaXnp+poN6P^gWh=wbZOXD*uciG>rr8kuNFhWwn}`>6V&9?EgTDXr;R> zWHhDEvD;|EJyPL9k%c5xn;U~xkL~Kvu4U}*`;JBe;q**E$74LRP2c@f)Wlj?VAHHX zp>rFY`=;kK#^^seW~%LMV7!HrL82H9@I8wAMP4`z2Rut)#Dfgygxsads$Cu~sS|Z3 zdC5_>O8+bY5Lmec7!*(d->|mQSI1X$PFair%A5o^X|5GWgff2n8+b~juf1jtLITLw zoAxS(@%z}$)G_P_U^avr)R*kbfAoujRF~sPfcy&)M1S z4&^|9dlCPe6>hhraTdFK%%t5wgYD8|@ z*j(6SVuln*Er@-;iTE?Wtk3ZU02T)RyD z6S)5cMM*}9&nML0__xX~f7(?p6)^knVBcsjrjO0pFM50UK3c#gRPb_jNayXQT0IT2 zGWx^njaI{V!aHqYx9Jy-9=3XF@a6KA;I>O5pXT-lYsT$vef4R$V-795;gYgys_}Uz znGiseKm8@gXw2w&3t#=OKqkQzcCBlFqn@y1AEX7~_-}2y zblvr#_R~_WNpB@?ZPea=W9WV*xLeieB5L)t?sk6tV}dp2rO)jEx?5>=;ld@&##VcE z6U$0|v$pWrVt`avB4qaX&-qMJUzqq|MBx#QK)GB1Yg3otw*;HM zHTdMI+f2(Sz7MDT+LjkF%a+a%#n@%5lq#05 z3XC@B(CNzj=I-V3oHM^W;m?Kp~F`43HlsQ%$Y&`69@=pTF-LW2b z03mGPeD)z73HNyXM9YHNB9A(2o#z7+Nb(epa4-nZn8~o<&2bPLO2@%tV-+exU}XL2 zoZ(*nl3l!fNC}HTjBT7#Ea7|9%Lfwc-YR{OvL_WErlO);e6cs2p?iAT{1N5Ng6(J! z=7NU6!1?QS%RSl#2BS&Oeu?NRq(xAANe?__AuY$cJM{{@x|fraL~IFr8+hGBd+bN*I^osv$`+~3+a*6f%+mYguN1J>si{=Tr}Fnv zJWAwDPu2puoxz(E9nbDnc9$9rDYvIFflbepqDpha;afL^iPBVM%x!4|UNC7oAMgxAOB`r1RN;tyO*<7Pu|&DP7Sz4$lr&@*SbJCU z@ADLI=h*3Do(uX_sp2{V)kmqwMdKFQRFJ=C6HBMt@wH?Oh@~^d@Xz*KCI)Ddh}XMT zw4q2pHcr!AO>*T}thRc*>^9+nz9J;3ZzS34E~xH~i2L-Zw`Ni^#<8tG0#L_1gnri; zKF(d?-*N;rCuc9HglI5m3m1vYr1RyPS@b^<(f2#9-p&q67(14VdQAndBbPc)v#)pw z&hm_%_)gD;j?e62+Ss=#=cc6>KHJFGCC#Pmz98*AaG%ZsoXN%nLTHQMCl<-anI{hE zyf~mzfOMmn3=F~cO5f1r&kVlrKOr|hdf#Z;h{e<$o{v6|)gRY-oX!(JXF{^h@W*boWfI6z5uumn$z+GH^7Gc{>zZgDr&|PZt?4aT6K`feH^yA`^3f)rWW9nv1(5?2 zP7ee$I}C7o1+$guBrdcJyntdI>d%wsrM+w(wcw{sw7r3G_I3sp%ZHRn-pGry6SD6$ zyHIk;?K&`~f%Ta|q0|9N8q*rCX%St2#;(Du_5fhLQ?hI~@8?n6pah(f`ZBUQhgSuxpUC3@O=z8R2q?)>MfyWLmW^*p96_);(|Q4z^X1kY&3Fa%RgvTo#)l zI1qYFy(K&SQwRbAGge34?Z5vi?@{Keq@Ci0=#u_;;_P&M28M6P#u1h;^?L-niG&4? zf6!xq7jMs^j~$_g`&pPD!v zhTCVN>zZ1!aNc?4_|Wtwx%|`jBXDrab-;!o^V`bP4+U-~Nj|Z`fjopmk>yd}0P}6> ztN#Ct2+B%lBYUhj%-_eozNqxuRR$&S_bk9SYx2QeiFEJ*N_Kkwv&(CK80Nw?OjvN+ zo>5}Jb>^>=TRUrDajuekfAV|nU|+te4ztJB=Gx@MCQbzV_g7~fOndn1n${%#k2yDm zR@3zM*xJ+gLU5-Dh#ZWI+)?UvCTko$a~{C!8-nMd~e%Yg2=axOqP zC=7x+y{SmVyMb^Bu&5dk=#4!PR zhZ%jzhVJA-xgoNtEAJEpTEd$~zr9t0fRRNW&P0cIoauaS>OeN$TeD~^u`fcl{{}F| z)toobS0KhD_8D;bJx-Av8Gfcx$j!`bq7N1s0^DccJ0uz*B}iC*{~*|jo39(RPCvJA zXY~lwYaU(1R+IL8t_=h68VHK4Ia|5~ot0zmrQ4fb`Mw(lQHk5Rud@L?jUB+oYjrs2 zsc98#%TgSKtlB42Sg$bn0cWk^S|wPD=tkqUt9JITuTy?+gYj(w&r+pdD0ZVl2}~g1 z5Ny9&8-&>jVRw}XHhmCX?gDDaG;nwOWKcL5JP%jC-pmgM+JE}M+@Vs)vLg#<>!=`G zvkU?aW!?t&iZljWRxm#C=`E81F^{Q~EkypnN_2}+472U}0BaG$5f6T**K0r^>=9jr z;(xr264{bK-+0WY8G{07f{$Yvim>1`>~Hr6_A7226}Fv11%5_5Q$v}1OY&&^KpcZM_4&Xbd!{(u4bch~(DcN;5 zMqW6o9l_SN4ec{&nqkq=~iw&&N%H6 z%FiClA{FW`n}(JIrEf#_rt_FgGD&3K4*XK-hFFL-YthM9&vWd#6;S11DBQzQZHX}LPo*x2VP)->UT55@!YDLBLA-|Q#4 z{tf#2u7ggcOrZAi5=ZAt9RPe5(DE!0aHU=XR7TVCRMOrVpvQ=erD0 ze`47Kos9|hG)dS(kK@uY0~3z)0jPTNOmT3U6@Y*8fr!uO77L&|kXFhy^B17EEjbH+ zz?raV^T_zla1<4|@nn~DTNp4n9HRQDNU~a#pF-Oa-71Z{3%2qx2pKHH%UP3djcM2M z$UF2ulCC_E>Hq(4hDDBqLYN|F%CWM!<|y}(t3y5|lq1O~XUvff&D;@dQ)Z};B6PW8 zR7@;KR5HwcZiTk>d-eVO*B{N^d%dsMA6H$W=Q4+j?SSzX!o6U`5Mby zqj;G`7;fUUJ+g_Q(KoB8@e_``4(bkPGy%2##eL`SqSJ$;%y5~0TX}F;mDKDU6yH<4 zC6}aycXf&`gV&k`wp1Jg@xT*Do_Ru;?>MWEI(zEAxn+9bt$*ak z>c-IGej*xFrv5jK4{%?i$ftaNLj_X^Qq(68C9%7%BY^WdXT#dHdx@n{)%CK&!_WRb|Qk`OY(r|3Z+RfPWib%T)aGk}O!}9Nn~RdGrECG;R`Gl#y3CYxneir#-bxSLvzbl`6}+WMZP% zzGm~cv4?|XJ9G@KDuAO@0eg{SK2koeTryF33fjl_GTLzqEsuV9n;zFq|X85qbxh6O)8!Mm(`q`%QMq68+<&AyXC+L;YHNDaSH)fR&Z-!mN0hKU7Dot+Dh|&ex+nA zF49ih%ZH#<7Rzs}R0~%5MIS5(G}F_HTKxT+vPoB2ojn;*b)H#+{MjJiftI!S&8bjh zpM7&8Y&zq~zP2<~;oRWE3MptbY)EEh93-6#^xZW1N|d!5XIDITRV~7~dIxaSVW#Q9 zdtP0mUfGO61LHrYeK03_&z@)3I!raqw8jIgFi{3m^sB#Xy)pb*S7=OGY}NGZcukWsDUI3|u5;|ohZDL-x*hHH&Xz|iH@i#@A)lzl>9q&Pn#3y8 zA}7#$_6e@F%+Yc;qGVa#gnF_4q}Y!LcU&b?b~5nX(6ycB9icl_$v=F=E6ndQikiz~ zT$snnhIL!`(nri4<)3Zks_k7OE?Hl5Pcy0%d#9f>7j?^}K4*4lS!UA@andx=%Ux;D z$#?g~7n#q@bT21E{_L8&G&3qGWGNW@>tk951krd4R_=GHF~!jY_3N}Z#q6&CG$!M) z@Nd(t#%}wWrmj*Mx6B*)^|QN*qV7=fqb>V$-#iBlfKsJ*Fvaim zowDKh!4F4FmqWfUO;uhAEX3Es2I}2Kqc2jor>5sg=-B#e=sed;QoxnRMHwbL7&BBg z8b24s!UxF?A*2r7n>7x&kSj9G!L(Y__F7xy-C0Khn$n>4jMkGL4NJGs9QQKteA>Z6 zrq-6nxeJJNExSy-9p1uAgjjb^`sHN3y6b9ISvr`-DS1t)M#oI#4J66+7^%4j5iTE* zmMQ#I8eUrD_c;lqG$O~aKwP(b*J}xy!xeP7FW=KY{brJZmgS-a3@P>fMp}5wq6IbE z1>tb{v;YIUu9N;Zl)!!G`FBueDuL=xvWaXolfmgeeH80cV*rHrderg zV58zrnLOuVhP|jOa-e6gSuk9c^hH1oo^I{bt97H#z&9fJhN#)P(-@jV&04~gP!%U0 ze(OO#lRaUj(PMQ+_|cE!CVkmzQ@6@2e73&W7RWkNTj`+#T0Z>-zFtR&Vw3n2P6ZaY z-G}e!j!a6}KX$b0O$%I>Ubo|DeD5dCBBZTjBv8 z_2ATL-xYrGl)$z>7k+&D;fW8&D9Bc8sM9}RKI8qow*J!H*M*lKx_x@yc#L<6d1!ZH zzp}zJ1MAXJ^Gbu&>6d;Dg7Ks?D>c2km(H#tZgT|V|9q^nn(CE8N3xHeg^%le;~rW; zbjCfVe7)JTZ#XMb^BY?EGl868q;{XI7wwuX%Hs#(AF{l7$hOcZFg2l}>4ty}wS)rycs_ z_sQ(3y1UnP9GuD(VZUw6AOdCGFOJ?TZ#Un`BVX4KREzjg_o}0fsf~*cE$4mC`EjSF z9uRAiw9BFQCNzJhnJ>P5wTVq$&S2-;^mE2RX#J)ogz?t93z!vQd2#>b5v zs4b}TjO!;`26+zaP;9ry)&=kj%PApVtzzRVE|DY8fSB#6plZ;zcI6~C7gCD#QmKVK zqn~3$T0mF`Cx|3lJ!|Tc_?{IM`u8Z$zVb%IRWI{Di5_5+nC#-i+JBpVwiHuA&D;O( zxbYea#S<3}e%Px&#`OL)r-Z>F^xa7LH`^Y1| zdm1K0>>O^Rl&5(d+cH0c0Wrrf&1XB~eE&ky2R`myk~C$5nR?#~&tcLdF|qJ)6KOCo zu`qDy6H#j8aMKQ+j#@NHFa~h|FG*dPH~K&1F!XB<+k-g!=u+%8vOO+#MLr z9FSGLkR-SZHFF01nmqFq?zrzHY&5&&mzoFUMCej4aILHf6KkKLM@JR0+$33@o%*k@ zxWI9YB5x7#{i)Z?->{l%Tc}AH-NVBR78+Xv+2I!3@uZf-Mgja%H`wG#^VJym0G$~2At|RX>mRv8tHyNL~LcQSVKV?3d z61g!=^>iaf0}gPjt)QfHA%Lv{(1Xccww(1VZ+f2+ko}g#aYU*Yn*IB*K#Q>i8V+i@P@hZZlk*9C} zkcxuhE8xK2B(uv@A{?0B>e{m;VrCiOq6=!FDZK_ix7Ne&)Z^X3+J>YJM4x+suffPa zg`d`acVQe5Q`$YO&Hgc3Gbv;M+3{f;j9n&btF}(|a6M3(5{{a)=LZZ(qT1HE%_^FQ zY*5+}He;)FdB9%~wy8*Plj&0qk$uF-A499iP&wwha&tbU6C&w`M;ym>lHviF200Fu zBCs3_9;QmATZ0-o49o0KdZ7>npu`HlsZ6M;Rn?q4q3^i9g8pp^&WFl8!8jhVT5_P} zC3XM^z~=i(z@~nPHmNnPrzi&7;y+5+Ar_cB02tO?3ikAKAb-Lup^;vK=yK=i(Byt2 zKFUyF1Tt%#ntYe+L#A<^k?|7EuCwmf-~jBIX&VBVM()h8sZ;Bwp@AQ%2c~puFi*nR zHx5VikOPbdAhOPmYkeDlZ-UNGoCIU)>^P3xBD%+P>RnP4wWlKIWZ&%JShD;TB&WPW}WF|K8)YRZ>ACgnc{zWGB|+BkM- zo;&B<1YyD(>b1VLbR&K`%-k~y1Kz%NV5axzo+iRIHv5EKwQ*tqQdZu+*cT_wR?go$ z;}TpbN1NwIx{L8J7=HcUA6*s_@rs;EgP88wdFS(;D04Ea$l_GA+2hc*2@*&~Z!1nt z?FQZN-M^_7ZFn4c$}>$jHFaRth4w+Diy{YZ1v=AJ#g~a-&1g2|Gzmx26t7iUs$8Y0 z`7f>8)4(*KBIw)pA)@3!x@$2UF-T#`%0nVI*d=%G{7`0$yJ+^J7VT`0+x9Wuewa}g zwnYgPfR{AU9bCObC+vtoRAhhx2rM5OZamX&;KXXuqH1@>^a&MM=#rr$49zAFK4Woez z{tFSZ%l5_yszE_Gu9UFD7xPsFnCocpct=%OO~%de}|6hPBDe@d9X8ZeJ{Cz7+#gE^&=rZ;`i2SW~RtX0?`%N&Z zr02Yj(vb0uFih1M!4saBvj^*T%k}t<6dmhBmrHeqh_OM4pqI!;H};MA{(x-9B1(pd z^3@0lArr+&cY`pqEsrP;?^55}TM2eUYD`nF{LMH|JII`!{Ji^)5kX%(r^35-By+yV zLN9?=d1RuvKGS2_yT0UIqOzH zgW?o2Q-`OswKCQu4EB(n7;{f4SaNxlX@FQ_{vj_`b+FElF3M4#KoUpe6Fk(@T3(}{ zOiVKL{4MlQedT2G;G?dyv6Ss|lI8V+ny3!7)@=b@OoWH~q(uBgp}jg{YSn=Thzbs1Fn^5~+f+}98ZreZ>H>vK(D+}b!1 z5v`SJqdSyd?B~Dbp{JkK$iMnUWFwG) zZfW_e;zT+7Y3_^dd!x3LgHIfRSJ}u(r}j9BAby^S+?(p3+@DN$a}SS84}$eE#whuu zN8`{%4np9nXKXZHH^$0lrf={))4c>d2w9%6~3u~MzP{@z{x{We+b z@4^es2UCDFZ)`SA{@tyZ-%=_cyQFMlHDo`I#SmoGEXw|bh3$Gn{e2=?ru)F?TYEE% zbW6>F#?@P7jokCFZ$}KAd@5KE{X4K9Ud%-IKXi>f{BUvT)tl#$rkmf0Dohkx;0@V* zHHv&?-}@Z+b>92Uu|Jn(KW1p0X6*0zHegjl%MP`VqF=%=y_tj=d8GZp_xt7X@(2|AY)T`vD{H>>X1Vm!ixWZP;0$o1u- z^UJO;7Ufco_&!VKVQ+~evKBI>MLvqx%IM~tgKeKhHD`hl4pCpznocx6=rO^&y?l`V z{6a~KW~W`bqNpVvYgz0vOOTh5s9W%`v7EKE|L<E&Mv;4j$J*z<77$lQEB3ED7^e29wU$ih6*)z^z;d0ReXcD zQDMdG&mkNWRESnTWFb#MQFEP_LL3)_>mXt6Q?O&&%wfW?5)XCGx?#XFwwj zG7z9ERnmX$u`8Cu$j;&U`xgUYd(L0K856SWUJm?%v;1GWMveDzY zi|HHXpgh*~2C_3pNk8Dr5*(WQJ8BO1!?fWi$hB^t_>u9({%u&j>ZKsu)Zmc5x|v+& z{bq&Fn#0~N*aMvy`8Se3$7c_NMxG^G$4l;N*Fo4q+@Xm}Kd;F0`@S1|!Dr9b(#p;} zYtbhgM3{}OU_@6j+qp)ow{CYCM-|RPO}{z+sjz)FJr7a}7%K$}>py4IGB{`MA3mKY z&}VhMLgr8Qy(|4MBK{M#ZShVlsM)ydp%Z-hTE(~57ltp|(4V{x$4H+$zj5Z*wbw-2 z!Pk{f!3*W%12TQDd4@Vj(@wk{#8+sjeR(G4{LTJvF{gA3e7S9zy|3dhT?(>M^;B-0 z!zmWs+JF9#bthMAR*8>e>1$)X~n7wJ(_~uf@pisb?KAAb2mi`)h$}&7IT2FB>&=vyYk;i8(WAmBd2s zC8H*1okwE6;cw%k{z67VuAN1z5Hr`gUI*Ju5>>M|nKH~2&z)v^ajeySMM_UQL%)`* z25Bb{`9Gv%OE*!ot!`|cu;r%vNfJa@q8(1S+WBq7&+{V+w1bx zj-^4k0k%(HiMw+IBH0=oNPkxBWTrnI;gnvSbM%c^76csP-eB4Rmu+F2f;jg`_wn4$ znAv2W1(KU39K$o**r{E8|D@IRH;eEjLt4$aR!bPL%tvc%)>cAQ0wH9o?TonUWy_C{ zM2h5)OtJRYFq;Z%M1G?=G0|6)XoQFd_7l=mTt4z(WD94OJoV}Uo*-M!Jnk7v7zgg&8B4X0Q4QcG-fV2b|l zBg0@hqdj`#*#8Xr%7_o8C^SoD&7zfG!5lY+%q(!ypX5W<{8EB(*o;jvCP5{fsa_P8(9?Iy)IiS`&uh znSD58tH#i8sac7QW*C@jC;SA0HK5}n_J;dIU&(}z*4T8v!Q5zKE8?`bOTl5O91y0^ z;h7fq3qGg6d70AH!s2q4LR`3EYFiSRVwsfLcinvvzvZWwD zP?7IfP^l&vCX6d{%WDuCYcH9nUFTCtp2>ZD7zC#syiK1d=>*PcSEaDscp!HxDdbqf zwk{B!j^HGZc44+rLxTmN~%Lm+Loq!Em+{5S9m#H(@QCP3$fJOe0{aE%XLV zwUD~2Rb1R(NOp&usc-5M*rqBx8hEyZX2~mIco&PiT43n;PRs$(!fTTNZ2X0Y8~K{T zz`r{90WE{P8NBPM(Rnnc>Y)DT z7uky-Y@k$bT#}06UDMEEj1zvaWPI$OWI!ZRVZ(`UHNWu(&71kJ^iHietZ}$AFeL&` ziZAmeP5tJg57Czes7H5w)Eo}*OR6x9=H`D}_+gv)_&9z_{%2BIc;jRRy#~IekSDOM zGvSZqwC1J@RE6xi7UI#z!_h;ewf13r5*= zp|EnGlPgpah``jWRjydfFaDzd3yu7j@FX;1TpaRLrM0!!27_U_?Dv!y=3?4FBnBE9 zqx=_AIFVF#6H~B>?0B(fICazT4naC$`795I#Xy-Fa(QJ z`Y*ngUIz5Vkz2Sln}}0jMVqOYRQ3QRNB3wOKJGV9$Z=E+=Wx*yG#~NnMrCg@HPGM! z<6V_XLG{?@rZPOv$Sr_N`Ylq-$sfUVtV=Y*(S>v2#H)WHh?4T9TBJ(imQY=?yakg<@f zq;@1fg}P8%?D|d%HGYxYGD{#AtW%%;Q!rLIj}=^!;w!z?>WKNrpjDZL2SfZ~0Xu4m8j$T#(z$o-x^3lFD|E- zynBRA1y5V^y4Ai!z^hu$_GjrphsxBwVar2YUU0lvG?fS)%=2HTh=&--14ti(k}Kzq z%)0r{1XK6gAxlYb5@kvvNr`zoY$ECB9E|gBj9;55o_AaiGrPs)3lI$H$nMav0TTOr z6VueQ$;4J>prJXe?)FJ*7b^m56xHzn!COPNJwy-U*q#J;B}VhX?X4;?(R|HbLp zN}Ilfkmm|ye0rAssX~RQ@0=YIWpL!K*sVrCS7iotv|*iUkj+-o8l{JQnOSbSPH8>} zSM*FUMpPYwlQw4^=dJAgmgP+Qg+e(K*~!1D0!)}NspOOpwnyj4o=t|fjlFtaR=XlE z(lcwPkRZ<6iXxHJf1q$rbO6J8F9FUxmONan`kk`hZhn)o=cY>}FGwT1wcPL83A(cf4p%SJ%Vj)*dxmrOK28;-xROJoU|Lo#sY*9OP0L?e3c3FI?u153JI>-Jf(Xd$pKO zDjv5En=D~AoO5CLYY-Caim}-}_FXN)xhJ)ZO3GpKhxcXU2kr=ZY=Z>C4(H#$Oc0dD z_r;iLo28<8+AT1}{uw13?(hT!I7hM+MMdDIpP%^q$8^zM1j9k%j$HRm2jhXT z&h+h-=j4}NXqH9KydV>g9g+G6XVtvq=3F#iErmV$v-9$FW}cSXxCFKFb&XV8+C90E zE=B#Hm*_S1@%NJrdeRo&!l!)JA7>AV?wreXel@u8Q%y%+F6u1#0rq6k6uabcm+HA= zb2x?74A+iVmq|8jYgf0G9st$18o!!l=2YXL{!*Cv{hJh3Ufzs(edk>FLX@U^$`?{D zu6p*@K!5qRDWqY1@b!sYXq2`4E)oX%!)<)lX zn?AVvAc~BZ0G#o~u}BXnq5h~C-OxeL*h{K+NpoK^@sIl< zmJ6%iA+AV&q=j1KBkKJ~u9wf|2PNt|b(c8I=0LNLK_&`Fc?w62H2MpWVq2fH-P=@K zWdb6dd-j^92g$t=J?;`DLoK|ak#1ILoE{|vt&phu+^tSw4rZ}sHN(t(osk}Qx~Q;@ zBldfH49gD1iF7~AX;83Lop+tc$s)zbWcy9J^Ma{a=_Pg^97;EJsYJ@+X_`j5gEc|x zX6mspcc*o0<&avn$f9t6`;xca656Ktq8mpfy>GuX?Aayka>`TP!meWbxR-ifKzd&C zzRf%k%Osp9+7p{=7J2%)k0zWHk`u7d6V*8VBA{tLz0IhY(zX`QtdB9e%RdlvsQt{~ zy8G!cVeF-_qtA1f;M+I8oWAoi0W#EFS%X>KeYZ|m^jrCtYnlg`t*W1{JgDV;Q7q#2 zt-3Dmp7?gOXIExek&kYc+F!_-@RM_iURT!tScSA+n-75m|YL_|^ z4*$#?Sw7hqkn6+P*%QaRH+&~d@`Y6XxxsfcD+TS&u=Xy@3wC~e==ti4!j3mF%SZG# z{0aCA|C8Bf`?qXwk9T!EGxt0$ zAn7Y}wTgYm%L2rY8sZZJye3rrQ+8u+ae7=Hx0k4n=F_Iq@8i5sXAcHc#1eKV*}y|Hr_%3ryZWB8KP#j7Cz@;MEYVmBfN@KOmO9!6%~Ip&tOCFi57m9X5w})@mxwo4Ac@x5~JYq+RQN`&eY?6^dSt; z6OxYvw{F{$zYVf_Llu!FlawT+k%EDsfAh8L1d}2g1Huh#SwxQjmGPY-8ggm@0PT1k z2(Ay8!LNnC#Vu!PhLR`_vIMINjc+cv9nOyRL#BG?-h)4Xr`K?xkH}o{cc>h|2UbG> zhCHV8sCq==GyRhYy+keWhdT8mBnG9l2_t_XH)g)ETY!f8^S4ahwNnhce?zWug`B(N z@ld&67^`yfr=t6At$&JbYg9M=3IJ_lW~T;Nf&_&iw-IQsFEwd= zzzVKVj?zAke+FwnsjjLV7YxPSXrKyPaG{mbjTfxN8sYD-+&h*2?od??!Zweg6-AHd zAA}tf>`{DQ_v$uD&5>V%{QJ}gDKj^o?}%v6^x&&gTg`-H7q;=O@^m0EzUFDRv*}ik zhbQ$Ffz>GXVZm-}x!G{!^3Xbx?Y=u)&TQpPW|smql#QuCxaeCOvrQs7O8h2@_%_+q zT;i58=DrLEA7vpC$p`jb!H5XdA~Dfa^pYOx4;ac{0!_n3500Hb?Sp*{Yd#MAO`eKT z%mI0xp*y4{=P^W?wk3+^P1w^DOE;xGt!q`ppxsw|h?%VP<8N}u{v2ZW?0d52skoJd z`*mE43jyY@bNsG8q#fL8GA>YcbD~u6h|PHHj27kf%fXnjCXjF{kV0aN) z6p1-WCl&x`<$}qb7F^r44wpx@a*#>?+8Inca_tPB4~8Z+>6vD=*-NqXiC`}^-K1*Q zhASUs7AqF?uF(($8yBf2znE&0*TG6#RoxtG`DMnd?M8kk5)US()=X*!T|O<|O~JL9F{%TQ0Yji4L3L#8yvjRo7f78+qF^Hlay_g`+Q;$qL(?`Xx{` z+}m*C+1NJ9v21Ih?5IZi?_0-1&M4ibNPyqs%5s+i0XHvWxoI#JQlm-&np^q$BZ?STEYuaV!Lt+=a>9RL_My zcnAKXQgZo)#(5$~zKqii&Ic*d^GKE$3qUC!&r&nMdy+;+jjj&`mK#(m-3D!4<~tdY4Qv%_ROa0tM{kf+^^uU{lVc>pT)$t1O;k~Ygc z&$l450I3Uv=`JIWr6umpF83F1qkYF@Xe8>z=hAR(`RU69GB+tVw zX;)lVO4j*U?#!I)TTR_w6xWXLb@WMX>hLx8LxL-g&JDIV4P2YZ6NroCCsY#J4u$pC^92gHDr1oN}kT`N@X~j)Fc+Hdp98O|Slr}Rn`Slvq zkk-8z*Yypz(S|9PRvL^=nUTcYf5Z%eLatTnDHK8205`Kt`(zJki^3ADxlatDUKiCp@}Gfs(nnT|`- z!bT{p!Cbt**(**Ziff)%zjxuN$f7G+DR>M}!PIe1sin_(#XzJi_Z3i|o7W|Ymb~r6 z_L_X|LS$eX`tSEZ_OdF3iwuP97oAc2a{PmmZ$cg`Npc{AKI*b;tD<=PxB@PFMJ~@V@nP0oVOk>{g9#aQ3KKPJcuchYtT~ z(BpPRj)s32n$SqQek}GUeP{41N=Tcd*7||O%HIKazI^q}k8_5i2_7@Jqq}moAb(D} zZpZe-MrBl<`ETSaJ?!U0lG;6Wj;*}#TZwOX+~|jir5CRvi;RV6vRLQ9hqEVIJN$-q zcCB`3(Y*1}9VTy4skN;an)W;EgH@wD6k|KJ54%g&l-I|lJ+izvKXh2-f?J9>@`-}4 z>O++I7nLQ`XL9Bbv<%nC?pj7k+my`ngoLo)Gpr^AM-Bd#&d)+dvKNUkFu`H5bzOJ+A1ayf4XiqhA2pbM#F_ z@c2$tH$}a=r3(tW2wI5Pbc;`=4Q3T?W9f0H4ru2l#m;v)?Dt7-fDs2EYSCrG-$9#F z&Jpst1IqSX4+1QSCzDNH&80T^&E4Z-J$;Ay@{IS z)bV`uvPWhf*bU54%1*RXme9L#c`{Nph=y8$WV5{W50gDEU z-MK|C2%8n_*)7vlw|S?Ta3}p`4;T&Ep=t^{W%TOpgW64s*pD$6SLUqyWcGlZ(IZ>? zZaLZf==jSaBKMBJ8~K=M_2&EX`{HHY60F6#Q{*q_4(yw-#8)tkys zUp3jAmK*ot%hDU?z28;t2JzSN>w8NYFP*webZ@;?T z`njpQ2#@aa(GBnUi%@k&aA0n`czZyGp4MHUxZBksZnV8tt*6gjXq?t zZ}S$T!SXa_gtU*L)-&~c5G+FtM@5s_vG< z0HgTK`Nq}h=1;8kvhK)q>fyKhp2m<;$3^_{_DYYvJ6#QXBS9#7Puw@^osv_}-?d-U zgd%}uA{6)XuIg!hj}*+ z0FNZjr7j5{O;Pix4RsRDKc)it+}A%$XZUc~6jcybPF(kVY9`o&QCzok?Qwynho-IS z?Mv?S_%+$@3+t}*f8O}X9d0Z%ud7SyGYDB| zHM1ohJ8WBJQonbCa{pXKQ#p)|q&wg|EVUQTGKlMr{Y8;Q;!(pset5BqxvGPiWkUPI zI}U2HWG+6e6`AdT14HLvL9=(T$ZH9K0!8ZZeMK>4bea46B8hH2ik#B# zq%Mb^Tc|R@RJ>;_8f2H&J9Bi0gXb+lIx~2a<<^|is~C8-T88}F);%#FfJ0pH8M*6S zb$ehD%(9+d_q|IM<`=nGZ_U%&Z4x%I6*NUx)vk(kga2-ODNhz{>U1LNBvaUAgFQwG zCuUuav_!Q@mfC@Qn9a(GOvRWd?_al+eV#N-nE8~2!9{=?XL{R^s!HFtk9FMpPoQtCQg?* zYD=$=>8(vDFRJA8E}Z+%%P=>J_`&l>{|syf#6m3G-*y?1}=h#P=1 zRh5)Z;HfxJl^cxWuR{z#&hG7fc1fOXgm%Tmw2&W=aamfOYl)Lv0S9=t(iaFR7Yu@XrL#*+deP`*O*AZEBmn z5B7xIBtAZyJS5Zd@K&{%UJN&Ly?in`2Uo&(w4kj@#1l$arYc@27Ebh}uCbYo{6|?f za%&}gTXrk|>ZBkn1E z+b}mkkLy=081~ln^*%N@;0)NaL$ECDY?orS z3re&DR9_jNk}bE1?LO|}s)p08Ym*^_$8ZosQ6b0Q-RX^CV*cnl4AaaK-{Mx6XPx&x z*+wDgwLpvoF!#POVF(Zjk2v_D|JnV$+Ti`#q zHJr+KWg_(`Irv-z?oe?R<`Oh%8;$CTWp@az*wL8-Ytz|~Zj^HAL(IpmfeZRQbu2aM zQ39sQ4(=;qaz2t<>*Qy9LUo~R~_ z;HvUrKRO0D>V-1OR_jEfR%1onu{iMad7Q&BR~Al-yRRaA~clz_CD$D*09GpDwo_V`0Sfeq*8f~zc_ zDYuOCaPLpDc4wMv#@y|Ahq=|l-}!o1?R^Cu-chkF{`dSYrXlWcGYC+2Akaf|9B8s^sxk`FHKFP`f%ZG00w-T6)}9$9wr(4FO(z zT%I`3%8dR;FMAWbGVit#{mAIfb)D+DHD_vF#CPxi{zI<%w7hXReJZ@YM(N4YWgWK{ z40iFJ85jRoDd;@qa5Z@vde-xey#VIc;k4^do&CerP)cHfW>1nfjH}6_Zxje4styg4 zr1t^W)SJG4UT+?EczsPe9yye~&>oJK2YHAfiN#g*2hc=XLDYP)Gic@tQtZ#42oS-4 ztfO_Y6<~H!KK)YBck-iIqoTA0{(oO>B?Y3zy%K+W4nv&-1s{p0eKvxot)JIg_g!si%^v7Am}ZKjEq5 z?N^T*$9^*Zb8SIqc)OwGTXHq75_z8dpa~@ZG3{)9lu6C}TDyo#B_)&WWd@W7DPvXJ zZvjx&1KIfwloUsM(7!EnUvMj*Y`0Q@cEZiyL~e@4ddYK?DgU&x+lhf_+I8Rsb%oyY z;Ugx!U_rr?*lyJ|o))cS&hQ5y^j!{=!ifKvX7$fAxI_GBC6^a8HEjj`&6>L@&^+ZI ztd&Yv75;q?fPWFvX~z%C36UJ@)5hr zKR1MgjL2zlG5My-e|R_~ zS$CH_g0=o=!r_xO(I3NFr}Rp~YCxWlH!{nzl+KJ!yuCR&;Gd)?Z-Lu{P_Np!bV}B5E@8mjR?lREW#T;y0X(1g$a(t4=T<6XzuC_mbL+L^ z8DHgA$k7zZ>zwjRV=)x6^&Qlci09XF zQ$%`HP{{G1mk+V}nck8PZoM{GXG~_jfvxYjXAJBi!aLE$23RVw-|w|Kx;4VqWD&Be zaqe;c=|TNnctRm;-nrLs*#jr82OGjIQwku>wXPgr*{ol~(AaZK=3^~tXfvr&^@ z+LO7>bk^}_XvBv)=d|j`lP^;yXGx^Q&kjG+z*X(o=AN`a&KZjmj^^$mo@@BUR|stkKNSw zsrmh|;3n7B?c5vhgnr|_HYZMaT{z#R9V?h{=|t{H<2dDvJtrRfD;7(RtXl!Z*TC8~w?tTIm>g}LQ@JZ?p&&*-R6E}l^=FxogSy{#Xl&MtHiEiY08DcfODrWt3p{ zuFg=3B-!-PLS@S@&95C4x(dMwk@K^TYn3SK5(<4*N26zL|8om@8=!iP8fVFL?ztJ~ zE=Jg7KmH~i1(}Sb)t`b9i1Ccmu=Qn+-Log2W-T3CyJzZwB}9=-Jj+&M*|W}F=;`OV z{!S6k%)+%VhVFpNJwB~b=GYAa7yc7Uu-zrNYT5GVDb~RT=wpvTrXL?_Jj}=pR;P-Z zu*)AyXxV{ni*a8b2b!dxUL27;x;jxJW}p}1`UYJY`t@UDiq&p;#VvPDxGAar)RSE^ z`X@bwS~~XZ+wq3A9KhI|bvCh_@BT#v6(WXKO>x67S{Hk?EJAj)NV!5L6^r)Ns*M|2 z1@B3LdmoSK4Y~I9lF8V%8x~iY=|_A$Cog8jGbqSn6&AAnYYoKK!N#?~tRiT{vd)6S zXjdU{PQ;EUh2?nRB|W;gM45+79Vk+Q*V$w3xop|o2MvK<#yfLAD<>^vS5Nzv4wXeT zoZa{G#`CtD9>Z+!wM)F?T^+0k#fsyAkyt!?DS@eTYEu8qvHfH371eZJlOy|1NLLLn z6BKk#n`H*Q8w_I!enb(#CMh4c#hHq0PJen}$CYabY`2pOc`^aSA=zJ-aqgFga_`EG z#NIS~=RroMEFh=@qC_r-RCvttrY`3DH4noVeFziG}T6Hm{f|| z8c69cib0k4A^jy2wLBFPg_IfU7apJQkYjz%^XF>CPZwRhGykm2R%WMxkO^$C_D-45h*W1LW@RVG|>+`=PTV1 zw?vn`9b)iQJ{*A+yS6Y`Zzn!TL`uSxLh{?(2*3K!D{i?Vf*G+(z= zn#}j$O;nG`m_n$&qw}((9iVGv3RzVs_T+%G?!o`+6!p`Cril;JkU1gVyGoldY4RNE z64I|y>Z?Rj=+*^RQ%4Qs1TZ|r)^^AD`(?XfD>a9tbnJH^hoSdlL|7!oU2d?MOX~ncN zn^UeHiScW?>@pLm@14~JfNl&T?YinjGeH>*oEeXr6#lCej6L!GmMX7F5_3=c%bhPT z*vt;{POj?DF7hA86B!qkbRY31dw_E6EIH%)o{1k{G5<9iSU()eFjmIl4(=yrp8tK4 zQ*+PMYZJ3;zy6akhjJ->3zW$;N?NmfOKfPo3Ouw@0 zPe<~9f}dCBduldroe=sy@BS{o5q`B_aZ94@-NP07!tV)_{^#>2gQ@Ssuisuh+%D;K z(287riT$Geo#;Sa{CVLA{#X2^x51`?-y_o7XQ{60CZX3)Wn-_>U?|Hzv%TFy-vJ#&^pmt?W9AtV$PF+ z>fL~k>vC%iO|-^1WuIzzW@9YV1}Vi$el-6EsdQKSmK8bBXl8z6Fr@;$iKP#KoDkvE zERoP(O!H=Ut;mpFM@1##6rnQ~JWrf)L2C94mT?Vp2U7;MiNs?^iA>(um(+YXR&@^d zK3(yyU6PIEl{_XP6){j{-$-JWEa(37fF*vn{eXsL!7&!lhlP076#bq4=ES4L)ZxH; zA4a}nXDnghYe9O;nlMu^o4%<_?kCml`X@hcQ|d)& z@Hc;RO2b?=Dp+dDhO^l&qRrprIdW*OP4HAgw1n|>;I5-o3x+fwj3T{lq7O~&dytxi z?o6=Vn0^47IN^-&$c=T^J;|N@Z(yyeHA6Dh>eWW)bsv7Cu*;We| zO((a)T{)F{T&B)EzJ@LEps(od%|j{@dw5`@!WMUJ6Wb|5YeIa9blzw1qm9;VWjmx+ zl%<2amP9+g4MBiBn%U9z=BmaI#muh5_FYTOU5V&Xr?$y^UK#`m$>vCp1wZKVSkPJ~ zqdykpUb?s0iOee^3L7bV!a7CZoKYKWt4fZU4Q^kEb5&-Z6irY7^%s(qZioG^>sR20 zC5oAp!1E?r!c|j8O@W&BX`)+>aDp9cHb*PUx5A5$>r*%>%h|Cb-1;W^7yop~gWSvs z?rr*v7NM~ho24hBir83{FMrJ1V>^W4`Qjd!%()?~lRPKmQhCm%r2@iZ35MiJt>v|9 z1Gr`PU&v0)3ucfhGW{DWrst)I1tnuzY&rn6oT;ZD+ zZz3Pu+KCzYz1iIH*!)Nql$Du>OPco}CU>de! zMXrC*mtgUK99?@n)8GFe!;nlxp)oZPT|PwF*o>4rb1NlDk!xX;Tw*Svq`4OhBbQl) zRHBQJ%cxvJR48nj`*m}f+4pz){g)o&@!tDfU(eU`g2JciZlz!jBvk_@q)Tp7x8bnI z^1M%-l*pkt23_d_Z>Pqnw!#qAWM)0a_heec4i1bvD(S5R0<2KHydGP6#;)3hU4K5p zR$K^=Fi>RGve=^l40O4D%LtfTEfnO!HYk$AkJJ(KyaE`fA@f)L*+%xf>?jeA^_gwRs zlhjRa2V-S_Y0>e^n*{82q~iuhw(0#=CY6S#(|0%ty@p?trl#puensQS7J|BxpQ`fi zup%DNy;{ZK{s-A1P|Ha!9F^mxAX(e30O7Y={htt+qm-EExoAd%@ioR$LlNwTb&4!X zIwrO8UqVEJQ9ua8ws>PabDI=oR0dC2lue=?nPP10Pfy+%;kl(l9mr3VpZ>5WLNc}( zKHP&S2qG9#N4FpHP*7ct0_!}$IB*P~F7TwJNs+`6T!i6CHZ}9yRA<*rqcNdYNlF*nbZlN-JddyIlTCP z{9g>y>E7XX_yTt>cD?4+27hn;WNG8!HVJj15T|&&NF_8G(BiE10Sk~bA3x?Io}gKXtzlPpYmsI0mHl6Qo%~uOquzwzH zw4xKxg8WyY)?XrzM3Q*)a1r(jzzr)bQZfaAt6f#7;|WlUW#5w=Kz`q7EZO^tfu!o* zn$}5mv5A8z$TQg15QMaNHx1A%nx&AJDvsYncL%Nv_nnNq2Smr9D_A&(i;TuI2@3e; zlxSqToe{%+9XwB`8drJJ9Y$Rd$lgg=iNn#^5Z)4C?f2yacdap}J9-1Lu>;v=cs9?m z{g)Ac(lZ6Z-eYF79gsgYBnh|@ zPHB(#H{xB46S~6a(zl}Ji?`2X=B(3mn3V^o7%1?IT!*DWD%fo+eShdSy0XX-6PY5R zXf9oB4>^1)Q=t2M1k4!2tb|Zq$xwMXg9Z$!PX0tQWTD*yX==@6vs&5VmE>@AmyMb} zvqtK5V(c_}!Pc-2j8_6Wv1~DTyTwVlrnNGNI1@w5%oLp7rxcR>N{=XyP{g%qIIAe4 z%M9-SDnixRUcg2xQ$H793Ga&Nf0i|SDi~d+HBODQ0m|EtAq!6TG|fK%f9Zfjlz#V} zLv;>P_Y;i>7zDG5*m`q2nS@;7osj^@iER#ZrLsH6OP5ApKHd!>hFirmsd>uP8Qy5suq#b)UWSKghGdFR7ni<9*@K6VJvl3)hRj z{<=`ZGLFc(bT4y|tk_^+2oGz;>M-wXumU+&!xvn6qG|j}(#Y{2l>V;FfD@6$Ym}cr zCq7=wytY=kv&&0FgDtOs?0Pp@0#p8er!x2ZRgZAu+3)o;IJnE}dS9QfNXPpyg{e7P zJBA9iPo9?6QULpF-7FPyaiYWT92$ksH+daOBLaOvshYUq6N=03UZprOEyLH1@_0Zy zcv18Mwm)O{oyW0I46i>7gUAalJu5$Dt5Tq29x;5S5`N8*{H-9O*E0a^<~uZ4srg(j zzZqIM?aOi(C>V}EISh2Tze-ps1@Sfe&Zk01x2Cwo+dHQ0bG1|YoBgG2bsT!WCl;8O z&0^5%rD|HXFy;*5H{q}8qaOrfu&KD5gqIt^#KF6|0BF+m(E$KX_Maj1?<|6-jn#7ZKx3H9ng{x-BC;IWx9r@D2uNgZrP| ziy@{v67ADMdZ`)u(jaJUq*6FN@Ak0M>2O!i{$vX_AlVYzpAoV=&cGtFjoS`3d&CNC z&LKiOt#qgS#h(U;IOa4i*mU{1nPW%$QMRW{2{?`EV-er?z8~^8ueBb94!t$}^Z{69 zwA?!O>^ZE1VE+ZlsL=q)5xza3Y|jp-pZ`TvjmM85GTovg$F1(k-jy}27sA%AOD=zz zyE4$bhY~KVfS?(y&;zSAQwYfbc~a z^eg3ggAM1x^nq4|P{C(dgJ426k?$cD&m%DT>l>agf=W3HpS`b!(k>ro0L{BPWiaHHiPT8shT|Q3Bw{Dzr_04kwWzLm64O^W7 zx^~DRDTd{(=>98tjSf41jXM;?;-!~~stMBtH_N_S~;K1tochR#M!M=Wziz6d`&cP>kNF1wH zf2lGWE&TYec|$n$iSp5{Qr*3TV@kU_Ya}AJ-3viLHl-_g&YwOWT7NLUuyeQK!-{=( z3XT*Tx}t{sxP1Q~Se->!EARf{ch9S*WDrVK_m0XVfwR!K|2$Rv_TI(Hn4K4F5H>*# z%Nyajp1dcEdlt*tvj(cszUzcBy$2somancNJ!{Z--*;av;zykKK3I9=l&c(MI&>qwzM9WgA{XWN&laP+>TcTKM*6!$$&1ld5@~7IdKR6I@883a)mZ>87-0ZgW zF(C#!&ne~@XBf93FK`mXKU9rmF;~=L3U5G%{wf*P$tgZ4Gdg1%T=Z_S33#l`6?%%Q zM2REIG}|5iMB?wEI3vkUP~wL38*?^K(%3&u=)K5j3J*R*Nw;T=z*bPmhnm4OEIElx zSXQHyV}8Bmlko`q;C9#eCe&dJ0^Gh*ciH|Lvp9oNE+kW}&!mh7o5O0Yw}Oe*zwWRS z{s;MJEXaMrdS6YGioT*P7{Ks6DS1*t3D{fPVmHcVCx(j^0zQ5qXz)1e!At!z6 zdas<24K@R2VP%CIW({HXGu=nh`oLe6z$8$E#jSpjYipI%(eeP zCQa|ynKw>{HHt*XRfztQKBhhF37^o2_f-wR7YPyz{f!P!*Lh*3=lbvqihfTDoI+<( zL8lT3ITfbbr#M44hiNG+Dv|ni{^<*Yb3{#;K_Z%s+Mswfy-gL_1kD;z^ODLSc)t{~ z@4ERpWw3MQ0aarE^Bp!t@nN6%>-gWpFqV0FAjC{nK)w^31c zqPrDWVN(}npPE`+LqtLaYU$2OvhW}nN4UU=t4_0KF&9;PcbZ45;v^(PI;3Dz$yz03 zSthuvZ-rRMBhrd7Y)Ht)QNK$$ORr-mL&(uINV>S&&4T+|QJejBWZK^Px`uLMrCuhw4Z z2b=Q~PunzJk-A|AJT+@K3mq~Dm&(rZqAbeFhCSVRDe%SPmo4ncrqR!u_@{AS-a_oq z5D%rKOYL@FOO}U8uY*XACf7SgBcc6*#DYS=C|+#``?_M!SsBmtm@C&T>f8nI z7b&Rd{bfx0o_nmlO-ks!0>T@X+CoVa?f4|v2RiZr3~b6xm2}3$K`%QobM+qgl?_FY zSMx_rZA0cm1ZvqtGP-G2r*Be&0IlN#7*4j>Lzxjjd~?h9g8fb7I&%2vt#%~6JR2gC zpcD}U@*KTIJfO5{K~7nkI6D>8HEuo{)o%mXC~U|KS9iRyAO;C4LlcX(;S2~=l?j0d zYhO}czrUKkezVN4g7$0c)tR>|)>p4xJ{D(Yw@nYd`s{D$&R0E~Qacv9D~Y`EM?L|! zq+w7MQ1b-+mRa&j8jsp{bG!C%a~)&9d4X%SdA&!vmgI}I%2_S-k5NE6dh_w#vmWM{ z1#+%R>S7he@IaXNCxOO?c*`iULHqC4ryrgd6V1b6r#wyGD{RugKZqpUt7-lA`q5jN zTz2}vp$j*mH&!}6sWeVT7JPcTeyO>$(cJ+q$nOz^>VigXcVlZPex1SnF_8zOH zA30rfBP=ixC>|OTejPqE;qz@;M|AJR`?ELIKlZmnA|jkwf7<3yroDh$kj$`tZRKz7 zf=g2$Ik}Xm5+Owq#93CmLqzC}jS9*mhc=k&jHs=mC95_)@uBP**j*y1W*bv^XRH6( zJG!3itFyLii~!JE;J`sZDgF6*c0(Pr`Qb)u#0;=MR$pN+brO|jUR=OS`0Q>y zne%${YMT&dM+%!<1M&*nHXM#utJ{UGY#{}of zy-Z>h+Ep@#fy3JNG_jCb9dg41EJp#g1ZpzH`y#tP#YBSo`MIbrG@{^6w3*?^v`3xP zP9q)yA#hT*Jw^f^XuVH7iJ9Hk;4D#t`{j+8NeMvRKYkS5*bS=EfwBx!Qww#vI{s@< ziAOnx!{EqXj5iT-!~AR5k4h8V0O77rw$O8#&JAfZ4BaZUM|!eyk@&ivccZZZQV2{C5J=99ck>kOrr` zO=fI{DIo-C$WQ31=`TjV1@-7<1$6+~A(u+Kq4IqEmJ^o&#sB-=oF64hg()cS&D8kAwztg z<2G>+l)fN1ZJ>@Vi0TBUI;lX&f0=4R4ZwdYeX##XaTTXzBSrzm6O@&FD$s%#b^p6m z)&^+L3?(~XzETc_(Z)KqG#OuoxvOPb8>u0n!49O)TH;VV0q_ZWWcpIr5ULwUW0T6j ztjP{Eb&;BR{odJVu(7n4r9DQb$5Olb6XZ}PZtH)LQZ@4hkZGh_c(d>%@%<7lj!3b| zarv{{7xOzfXhpt#Z$7yxEmEPJuuR z>B2F`iunTBPo@z)m5P#biCWt=w)F>x&lye4S!3NZGy<9n8&06hV&F_mqc#g32RM;S z*rzNloNZS${vQM*$dbW-K=bkWm>70UFplmdP1scg#;I-wo&wN$@4XSPU}ztz*@qOoldU%8m#X~CWLJC z#)Z$Ue@iDHbWcQ30hlxZ_V}vmDF@{+92llj6e_m&e!|@@V5C@TO6s6@nN^%L@01*m z*xmt~nlT^l1=MaEv^q@ADEAiw{bzdc;8+vw99JC-x%h+l{YlsaRrnqg~HwzGw`wqPn3((Tw8;qT!;ZM&zh zOrw>o`C_N?ohx}lh+8F!l1^+8yLzw#>2P3}r~#n< zH-v~gd*qu$LSYq_=U7B8J+sf9++6EPTwk*NoE~GYn_MzVxs~C>qJFyX<7|Jz0~;6R zXGB;d>0e?{w9M5gFC=x=y{LJa$$z6bieVpC!~WF3&gZ3&+o9aThBRIv|}fVA2tOW=XsU3 z1x5BpzUs2Ely~qrU>8n@fb{_)>G*hooz z8;V77yajUqgY0rGdsSt1!|k9#aXhy6dP;63B&VqDR75K=Pbh-`t(pA;lb@fbN^hS9r1#8f#&p6&JzVd)P5xc>?tB$1tc6%k zKE7FA42eFI^Oi;J9;mTEwdMPEzJGOo;YVBbr+ZTFTP^Z(8FD}G;q%Wqxox+Ebh1vfJ#GQmy;y_;gICMfP~yY+H&`m@1bpxiakVH%j9kM>a^?^jl-etgqSe6FuLq z{kPs5WQ*6gt1Ikv-aSsTbe$-`ARJSAI;i<1tqDtBROL}z`Fax_-p4Lt05q?F{L zG==FzPsFC%RRr}D94!c{SIGUJEgp22%5zK6B^|Wj!L)JTgYvrdnhI1qSaLuFt1rZM zwCA4R_^ncGa$tq-j&;Wurjw5`kd=0!%T#9|bh}s8 z(=8F*t&FJg%yi7IiHwcA0%^TQwKG4mPT3?_EpjVr-d$)FIkCw2)D#da178=%JVy*2 zaAC9Y2@T$RydLn4>Dd8gpW72jfMp*o{BdfrHimOuT4?tpnu&)p=H|t|+V=)hf|^;a zp;m~{9$&0?(N^fh>z!&xWx3H`LB_Y@>kr)wZ4k!z1m5bak+9J@Ix-(^}!$U z`p2;$>2m^G&Fk^oV+&Z^Rjyy6?&GWO6`7eS{~uRUrUB^E5u6#GVs&in3X#jW^f^uQ zAYNl5wGc@?;uvLvxpwztK~e^$2_WXlxo3zm7$~0&0W_sB2Q6Fef{-+`2~kaDQvF6K zZ`T>Ro={B0C=qo2a!iAa8|AyiLa0qo+fy_cCS24aOETb=%sDy^h7p|Vf6{bIgAqNv z!f!n!hRTCPnJ!HB^AQDTygk2BaHBZDsJ$CBB3>c?nkdaD&NmJ9akkJjZ?vj6cPrY% zcE_9GU@@FH0=`D7(EF<@Z5Wff)VbSP#+@xcH<%7^&i-5n!!_J`2a+d;jwL_n4lv>` znTxBYtg0(DaQ2xP=}iE7UKF}}^7Y71RnJ`;|AQR+uGYNvhPoC5c>08uk^`78A(I6B zSEpIq;xj=O-DT!`BLv$B4kywX$kdf1mM~j1m(7C`j=YviGc18moL1Z8UYx=%#Nip+ z%q6Dkkk>f8W#6#qlWdwXm8DpE*vw5#9~dyX_Ff%%t+zK=d){1$wDgTXRg&=&D<%EG z8+cUda(|(RCD;&Yyixyn$P8I0Gxdvs@1cyIuSd-pC~z~nLDGj{FzPEzd_2h#9ju-D z1xx_z;t3X+V3NMIyW*IGJU#t0+YlI}nhU*fUDk*H58~tW7=V}XYoidtq)XO5hallm z=?|c{@A^$GQB*ZPjwHnrfD%gIe*Qwkk_RB_%N>PAgiuYkTpq;4HZg#~tE5qzD5guO zi8YE4BxY5^2K%L$)D}myYU(2ltQ?0QHKk2zIi=o43RFq@B3cQ}2yY}AZ{jd_1p{oV zba)k_b&VLjJ!57|^Q3m;Dq95HdC0w*EtpZyH6~Vo4WNrLKgTxVsyDWN1-hlCAgfmV z&Nu`as~~NGF`MkS%jZ+EYp}io(yCvOh*UPWV~RKCcl6k;6HzbG3nK|wDW)W$ObB1@ zXxaSAB=_+UxdqJCUuja>282N+yo~7a#x^}TqiV$^%pqJ-Vr~#w=y%xMTa~R&b!BZG z^N}D&5PL|QD!nXeiK&@CD?_%B9esFP()v>mrMfgR63}7yR!K#>j@#pDPo}^Wd;Ic9)%Du-w@xD}&|W3RdXOk1wCp;mzre(x6YNEu_<>O(LGW)h@!Q zOQuVj%3&ckIb;aAzDT=H$jYQP<9qsI3@k9+AI&DTG=6R$^xu)*gdF$HN|yjv>I?jI z0u=QZMYGk}7^62u5Xq5H(C;k0iye(J=fCT%yVG!_n!?3sPjdY`4`6g3a;&cSiAiV98wndMo3f?=&j*7D5dq@|{s2Q{aZ*lkj z5i;uUA&Ms^LuPS?u|6o3TYy8HXak!-#dmZ;x=1R%@&&m(uq+2O9!07c#*nO|RV2|Y zDNind7JJJTW}}v-C!`2u$y+pI9MM7lF)=DqKO z?`FQfKnmY@ylHpaq5f3{UUKS|>4}H?)JhL~Z~xmca%V^1t+T67kuM3c&%f$Z?|Hp} zYj&(!9ge*N@iKKY!!nO={28y0jtXh{)m5SWWn{!kh5f`^5)V1V{W7Nd4v3Ss-NqI9 z9PT*$LYIE7p@3bk%Rjl;e-_dKlEpmZ!(J@cZB zD}o7_NHb8!AWN3@ruh|9GsApfpV;~3B#)8mbvJmB!Yt=*vDPOVN}`5dD0CUHdzQ#g z8mLOr2YNrAxX`MfzItib*q}Umg^cF=KRL_$F!wearybo1)+4qnsyG2mR{rZS1)=E*ZJanDoTA3x>Ekh6C_ft1F8AAt(K5{mrgo= z$#!#C3fY33_CG~2z2X4{Wpzg>169P=q4x9$DH#j$1i~=}Od1iG%oW?ciS5I5;r{8K zz%m5|*Nnp`vu6v>>+h8|XM#DdFH=$O5f8f6TVb>~T2(*}o9`>mLiJJTv)d;_RtCAGPOUfKWuy0+IsKRz#YNX_R5ohF2E5QX7yQ_9whJ z2Vuv+s=zAIH2H%K=`Xb@;02Jc1zvi!Fm zXjcR%&SxYqBOtcg034Z-I~F&b(7mxL_S|K=gJdco0IaCx=P9E>JG{|BCJK#%5f;l= zm&J(GK#-SYb@J5Xq^hwz4&T=dn@7D3R=XJ_*qjIWs_{i2yNdL{a{|66n%5f)Az%lIe<1`C}rfIVc-RI^I z{Yb!CuypvLn*N8n(y1q}FpsB=nf@lIMkB|4-jwcZVHQx?i{${*&O>aG^6~RrkyP3` z)W+inb%p1sY7Dkvs$ZZpmJM7r>i1Vhkf>~{JmG&P{{;tyO;Q&Bff7Qg3japK=a<BCF)NA8uR7YEnJWmdv zRH0j?q}kqoDXZWEb!EY#XUhk`%j*Azg&5yGm<%H}dH_kn@5k{4Nz0{(qtc+drw~&Y zC(4@Za$xlqnX}-30wY}Wqzl2Z(KBkaO*}3mtT)1qbKBs$yc2K>rR27hM z>`RV{!7urxlG)r&wEI#XvqptUsTLPkFEt=CDc+8QQx4t*elCh05=~;o9{u3(tD}dc z|44Qh0mDU4=<&d5Q)26II_v*_+-NFRP-+~HiAbNrhS={S`(1%!1+obt?Q+g9DvAoe z3?eIn3=i~H1itPls!PGzrpi8zY(1#i7!6D29E111x@z=O>X0S5&N7FKIzGHv6cG#apQL?KB&{z=u3gEcyD2E9`@UT}TsLIGCB|DhKs)_Rq`Uuw(weivI} zV1d2wtA4yTwP@Rpvo%wSTBoIjK~~4t+2{hoW#oUY7iJA`7vUT55jIqe3r;U0|c~;}Hy%rahSKaqPzS zPCZRxe)ERYot-rGhD(-@e?D+M`Qc_6AlXtRlyvf9&`o|JC}MZ2@A<@Tq)7bOflbFcfvrD;aYFZ8qJQ0nf60h$L6rO>-83{dhN z<7o$RaOEtaeU}+xc}A?*_~AY+G~G%lCB$eaDnnx^e5SkNRCIs_Yu5}24R~}4>$yso z4GOB)|9-6ias@L{;;_LI$lg%O=6XJszcED+*Jm!39;nAFLh;1(^VO~D`|a$HSxCxy zW`seU@A|)+aeLLe`}E5K0|oe6YHeY~e{%l&e*A2){SK^1%tE&Q&?>@?);uR%TWkt= zV)eF5B_$+vH77!Htm4dUYUqQ#2Q>C?cfR;;&y}_Tf&1bhwZ5L z<=osnD(609fjUMA^y^u4jvM@vaenya`-OLP_=s@$B3&?9b*o@OyF|-$e}b4Cgdvxu zQtK^x%_^8kFkW5u<=qzBcJNJnvjsmO%HsLJf#D1Svr|~hywkQ=DdGAP?CMA}RF*3{ zYC(f`?onHl5u%WmOWT?8X7V%EN3}*Jvw%{!&Ce~bcf0NmGvMj5ON|0yjZ-O})iiYL z0ep>yLRrcWX7A&!5Q?3?*UNYRiRbe~}VxxO+T0=R1 z%7{&~^i|#Qn@Vo5RMed?0ysoj0ZleB<44!H7%k54m{2J~GT+kLO$Q_i(O#4?^2NHd$)f!MHVR!n zT{gO@IZF;LwR=8ll%#XZGRaxP+==W&tfH5>?x!E+KkIQm*A82syLEi8-j{_lUlvcB zOvGqBd409)@{FBsj+{MZ)hr%1*y=QHm)gt9q-JR9_BLhsQufDE*-(NY*pM9JC@j0WAN8zn~0(EKj>~Gh1 zf|4V~O`8Xb&a3fs3SeUtOs|W~?aZpM%oaD*kIwxy+wTAT`68W_p4p@7&tM%I<{w&A zZ+rJi_0fIhbU!15N<-fq(ksQ4jqwI6K5CKK%#)IQ=k{2x*!yu3;l$X|@LLg3_XkZ4 z&{wvm;OA9UtN9X*mA6iOzTdxL^$970-StjJ}?>tbL4!~?PF7eN%ZFox&^9HD7aWD@f&AU$YHk4)C7Vv z#&^+V)JB_(J$gn#r=6Ufe!*WPu=r7l3OQbaIsL1+_vi&7=qXVh|X`yA;=pnWuxtk{t(-Z zm&PIqPz69Po-i!V3%?PW3#GMkhbQX%WC{z3#|rx3G_k8V}JlHcOg-p){Arv6Ro`Pv*u zKz$@tYTP<%v=N~!Ex}+?(j8Nn@(b~)eX=(+5-5${wK0W za(AiP-NY`qgZ>S5PUrdNIQ>y_MCzod%8|jmmApm5Adx1%fwm?7fKuB@E{X>NwB(0g zR>R&pZrNDBg{Cn3gYao|i2$L1{CjP99lK-7=Y$qw;DjIzkrK%-J?R}?dQjd@8*BR{ zG^zn0Jz5$P0kdY+s__0kA!}B23?PPs;A=5cgJAu&z(LV>PKBbZ)J+xwaMGpV2a;;P z3h^amzrCoHM{|Gu`J$FNX|5w}%$_zwUIaO%ChmyXNgDXLVirnN!CQf=4%=`tld1=| z#HV*!dEUJxv~o3S z=+D-y<3la&8neJ0p)H|O$!Y0tsb8a?B?qv8W8O@hnV^%Bb;tZv(%uGFaLPDp)g3sQ zSr7xwT=xPdU1Nk%I7c|Av+kyXAq^K@@|~mfQ={v5Fzj-B8xFJ*?1G`u=TuV%2WZQS zrn1DrZ2(w`wf5>3O?68G40By|y8UpdDniC=w0R>&qv24{IlU?r-=gFcGyxHDP*CXf z^#Wu!E@C%&%f{g0@7Or8P|(`mf|S*Mg>*&1K#~7NF~jl+iw6nk#o8JqZD+i>09`q* zk$a@&OyDv+&@tJ=V?8&V%RoMM?1yH+|Hctm+ii{IXTS}{hh(RDKcHpbUZ@Xd^mg&m zv?wS#S)mF5!0-I;vpEBAga^R3v@A;oEdVM`Ntd+zpW?&jpH>P$nFEr2TcqnvBWl50 z_L51vrNO(7=C7Q!H5xr(kll{#P5hiLenx#h)zt&vt{9HP;Hm55lt$$`yem)~hq=L} zV4EtyJ;9Qd{xk>{5FZOX?*1}Fc64x&spt|f$C#EVT=ZMD^xz2Tq&z8-ibl+=aF`@6 z0yxr*zFSFD&TZd9m$Wl*-67r6QFMFQQa`N^~@-veXg0fs|J5!@> zf}73;B@C&zEp?5=Yous7d5ZwkkKX)jW?DFK0GsJKq-`#VQ4RS6+F+-{F13<&Sv?6m zvEC$12oFcRS*_j)Q7t+;m%=Z9>)|$&a+Jt#+|s^;{d4~4`=$N!zpOVDZSPLSL=5|> zRNY?QL2?<`nd13)A@IZJmycfg`WNxHElCSlnuQ*K^|;bz|Xbpi0Ng zJFO_9<0Z?1sMiJ>9ah_v&qUegB#A>rqCl}aP<5bpT)!&ixRUW*pBt?wPTU{*8l)I* zz)L_rxLKg~Ju$t=%`IU>^WZrTH*81AJ`ZEYS+!ItpP6Ex6QRNA@H1Af7F2Gg`K@+_ z`rG68f3@un{jL<<10&A0Bio%kV^c;!xkjfOb%h}lwRw^!#nAwH#gbg)I%JRj2FC6{ zP91G7=%Y&2_~VHDizP$3mvcSz##OAEbZ;MCS1>S#?D~i%bUqA`%GWPjoZx8OZPwS8Z=a9RE_vOT-6~}c*sw1p#M7M_e#s2{Ws&R#S(k>y%f1N8s|KL>K`IUY`g8zvcBVlGC@4WUyCxbz+Eu*qsmq<%08nA$$(pukb{+ucXL{sPJu*RP zoSdDtbj>DcNOUBn@kdB1gd?50n!E>#(J#7!za6xmT~V$+)0B(4E_sW zqh+bf6ozL}9t4q+sEyz$oE&=2HV0_|yLjFAdofMyk8qAGFfq5oyQBn1kWl&0c zgxa0@MOJw@`Zj><%!P&<*nFZj2Hgc46DZJw!07-1Husss>{{T~=$8gpiA|}UFk5Lo z9oy7~mmzRz2N4h<9*LWvp&G^P`@^>}*ya`&)0oZ!FON$%hE^W41@MZGP_ULZ2Pi`r z&y)@8wrmJ#EvUjR-;cTMAE3;fl1#V;pCo0QOSA=(q*523sRYQA??~gjg~^Nw##@ZQ zD<{aDwQHTkownW)-_8chv%;$U_Y-jjgp|21DXjy(HDHa%3u^^Mfd0m{iG)8X8eljQ zcAxAIV_-dd^EeFSKm6oC7!{y5gC!E_jr@P`%zcP=fjDY$hSwYSQ$-r=ECm`CAR!l^ zAe?d%d}a2aNR1-#pG+b~8pJFk9N)4$YF+MbNR=FvCy*K1Xbk-<=4o!6 zPql>s2xX@4O~E*j^8J z<2;2xp@lq>=2>;@8zTS}xjZof)b@4H=+`-}Ebc6L7DZPLT*E%wMqJ21=?{+K>sA{fKWFHwu_yLY=hG`^K+5gL@24UFxmrd}scAuc&1jNs&+5 zqG5LrL{vO%P=vfn_YE`SbBuGqy!r4UT5g)*L>$WS|GN37FaUz_G`(r3d9|A~kXwMy2E}pFa8|2I!Ehh^ zv)Fc5hnl_8Ip}hmmv=6H#h`Sbbz3WHSz!A~4JNd4zNpE~X++`4DyRxHiqVTZ56)a@b_6_|IZxj*NkG zx7*?GifjiT#&GRtc<8iEh*O67e39*(PWM6;v-TdFVyzkX^+E%PPX)tJV}c9J2>iTRY}< zJ8B~0+`CR=V}n~qT`i=15i;AW+q580&0%Occ?A~t*`Z(W;02Mx+GHYOhybHS*kQ(t z9Red$pp-mGYloB&C$F3suY9t`hi~1oxX;(Ce@PJyk^#TmNi zzSWC#YG56tX}ZB-WhuR)enc$bd=Y!IGATyi?`fFJDf^n0?mICnFI#eJ&IT$gDC|?u zah2-vQBZO4C^dLc0h9JwFlNe6q~!H#?jN=9NpTD>{+(9kWsY7e%exZegXR_;t5jj= zGLr)>qqIx(&~pP>WPJywJkS6f?r=#~Orv;()3wtHc6(~HcBERGv>M*mF8SRkW}~0m z?+ET1gHK=dDHTL~>k-KQr~Zo)0cPIG>>Op^W4I$h4N{G zox9l;dZgZG4~3t2FZ4dQ*nNJZ)%nQ68LR&7TCx&PR>yh^!yz;0U)n6Q&iW4rOU(VI z+_MTfQ`V(fY%3Q2d{4c|itC=cx6ePBd|1YGXh`fj8tr>Qv_3n6`iVk*5?S!zzz@jZ zXVmxoPZAXlJakGvpx~?Oo(!X_%WZIheBbsvw6$=m(;(#j`>J&Os5Y6vyd<;!sLk!* z(ve=nXHN;i7A--X2L$)@D!F2!$#)!~m#_yUUdi;XHPaTpSHcwTvtrG;AwZCDhkt%4 zo?*Curz$V@)oXBYnAR9Nqzn3P`u$w2YQiJ@Ei*a;C|8Sv)!u)8tNcuUBbAxFdB5p@ z5aHVjrQyN##nZPWNrNLmpXE4Ry@=2EoL)VBBDM3+w%gbx(!D&Amv8XvQ!6(QE{`ey z9jY3mY?40VUsWbZkZruCZ7kixYh&aqnmAsnI`GdQId8swL!G{L6e53SuM^x|V*FiL z5&6I;(;a3;5P5#g#EXZ|A9-}^21@?$9iU(Ly&mWbX_6VzEXO+tsl9&|dC*i7wz&uZ`r09K&t0}KQq%ODI9^giFN~wdxZV}<=x9x^`0W*LR18Oxq^)ry8OE$%Ykb^KCfQ#6hpb|t|9^%K8&WF5L z(jP_g!$_KFCV~f;wF9~aqIXn19^xYNz%%#W>C#SFV*C$MF8K(z!TZ-zcMy6X^Y0?i zR&vU$(gKw?%A$7ME0Tenh>=F4L4lqrB@RjNp4mvw&eAV1Ab$WuUnpxY^IuO!)Jx!O zwQ$6^1HyBMPl}qyR6^R35Apk7=ZMr+5eIq4QKuu%r4mJBhxL&;OY0#7;lqoCdECbC ziQV}xmbLpD0=Kdp?jTY!H&y@x+wnk%+P-1w;O4<{WIDb#EymnHXodmfc^}`ONrnK! zsja|A$CV@VZh%YYZd%bTWQynfA?oT~WYYd8jb6x>@b*z)#O1Kh;4b5~x4b&XC39~Q zUhjKDOO3_u7nfg}yX%K^bM{jjJrK%lG=|?q6Y7Q{ll})e?{iourcpo}?C(2rPDmxl zoY7C(uOZQ`u8!-%;7ur*+ur|WY=I~IkqiXnv?~0jHvQVkgDCuefhJp${gK8fvI`v*$n4XPdEe3Cm`3?IAuA{j}A2bTpqp2=3Ot08?hbh6Jc*Wq`6lklt;u! ztCwbMyM8Cl=iO!~)#o^BsGR9QcZ0z|`N%$wb$#VYdJVF8dt;2daXM-Gf<)>!bqFvm6a#|kh1`$6fqn8vBTz~!OS@!4r@Hz~{yzxgY_5eAN_Dbc}>zkyX`n#L6ZP{wZUdfhj06X>MQ5J>3g^1OSJl+K-8j5TGpM5|4XXS7W;d- zHaL&NLIC}W6UUY9gJ!WoyYLOg3fiA1{Z_?Wz*FGUN6pQkwU@!zQBJGf=^8)QjArI> zc$t<@!{kwmj0X3E21z0U8VZ1~vVS2fgto}_Dvd1wbal>RsUPvEu zeWBE%soP{qU_0&HANfN9MF)3KW4@DF{pBJb72OvU!~@ip$~sl@iZMfOu31!#rg zq_zLGbQQW4IP+nAjO@Ncl6!nq4%(T4Zm1m%0enF~TQS3CA8Q#lCD`tmA|)L*dkkM* zOh4QIV2{7Bm;pDr<5xkf+RTwN=-=7sp>(2iqR~`XDs3 zk6H+dh^4Begrfmi=cgV5{LK!ggF$JIOciD-`}pi0XZxn>*e=r_#o>E#TFDm*Y{K_^ zI;V(FijYcOt9%mqrcrQ+u6W6KYdY9B_*T7OT(*8~GMW_KixjKT{XT!&zSsr#br14H z@%5d%Gc>g0wd}uNSg&qB&e3bEN>PTtTPKzM@KgL=kuP{G^M-Qh-tCOfC3mh4n;Ijt zqdsCZ&D1e}Uy=?}CjJK*+uO6fqfXHNa?^tKW%Y)%L|e3b_Dv-2@rc~%NVMf4ulb;} z(YNm1{9?6OsvCv5KP2W*1{g;YG1sUXLK}pT&Pds-vDkE~tv3Iu^$V!_q|nsdKn}1} z-{6s4?hhXb_&<)$J)Y_RedA-8koO@`@PrUzV7ROUTI{h1jZVdWql{ToelcF zki+VPcT^0kt0Ijqzs}_BxBiAT`FGY0>9-j#o0+B|y2K4aCCSINZvDEDyfqKR?6*42zHf_bW5HqaqPbNjL|lbw=_nfRF)ji z{=&z4NH-ssLP9v;KCup#6pmaCk~2X=(CuQn;SppU_1V$Uw6xO14;(h)>k4H} zW>NodhO!(eo+mK!i#V`#&zI$wrma$al7gT?6igCv!p1A38}ema+&9^XFGE)en zn`Q`4TE}c{==a?%)nhMgjXMqON=fr0DH`HZYQ@&3@TIN%g1%Td6Fj|n60jsnT}=UN ztm>s4jSw2M@NZv(dEWv$=E0ota2%Y-e<$D}{HmBi16pRtQd!@l0;O{|7I9KI&m2D$ z@Uhd+d~2Vufq_8!aLG0=W&;#W@D#o7v{Sm{U&z@{dz)@D%#lLqLkP#Lfe-M=`tB zkTD3Bgl)h?_7sRBC@T+-;lIO`XuuN_UxQHwCYSHpA3I+xNt~h$=)+-ObamFMW#QOj zoMyppeCzt>1DC9-w5={$nFC&9xlwd65$FhX=XB&Oy7@q?`P0g^(WipKkIAlPPo+o;QV6*7%9Y27lmMQi`-Ncr99=`pBGZgDpf|Z zoQlI^(9Ge2@hHj%TGqYzj5HG@Wvx2TX7=B-40Mb31_ZXEOHSxE&IGs4_g7!cM%V^J zf8G4{r(%D21l6v*PA+>s)yJ5m~<${lHOS=KcGMBDiFQn zt{3aY<*moK_AHJ7T{(MwfuA_PXKv{7-N{hAXt#;U{Oba|Z4E!<>UD$blJk9|knbQT zJ=WiN*UAZbOe0xqNZxbRjJw+IJT57|t z8Ma&bmBXGayrjyykf{)<>e70nR#a{(*KP-8wH7Kpz~J=HoqLolR{?9lg=E*L%gY`Y zeJg<1St}C}qPm!k^+F7eV)3N~cXQ$|<+S^+&Ch6zWT50Yw4H(3*OrQIs#(EMYvn0{ z%50VQ8qb>6Q?N8U5b$YHkrNow~fXdZ9FjK@64N&Kb1FLM!MjVCNem{w3M=s*1vL_}* z!jFf%itVV*!H&9mPxoE%Lp#1Ze_mrz>R0AYfu+8r=2h&&ha1*o=N_0~Y7Lf>3|ciF zKaIx+6bhQ0;*#I{4;(dqr^{xwRjh(eMe~7St={^f#fz8P&dF${jKK6^gqVKWmsM)4%t^OrDt2 zoAsfkajqROrf2c98RP6M2Qy@a8Zj&Xz>u*s8{VI6UD;J_pmaRh|h&*iL&jn2*M}%odc_?!N)G)VN!egqp6&SnMPR zZ+4TEG#<+IYp5D!ulJ}~>6gq}>B~1gf@`$Nv{lY$xyx0j!usXAW1mfgxLeh@!|4p`(G@q@aE-u_&9r*X+ z7^^*=r%YevZ8o-}m~yg{rbjlb#+M|v?$m_b4ph{>$ooqfe8T2lVd;G)DkMZU9I0vX zvv0o2pQiu0Bo&aurLY@xmZ_<4JtoiIeeHhFq<4CYseJoZZLmTXN%i(mCQV73_n3P& z$^VvR^Mw=Al;X|%;{+$JCeCmRWp&%wyzXMsQ0=cakUAZU;x20~F6~U}^}On=GXFaJ zL3pZOaPW33Yo=dEh%eXB#+HK3a@>fymoHwwD5a1$1__{S6bjn=P7j@pV4eSjeo1~8 z_1&i4yShZaW83)1OE363`s0UZiDN)&PA}cRyjo6cYRa(V()EZZCO+(iC&@J=fsE}G zTvVkFBSM<^ZL-<#rZf#@N}MR_p6gs3>anOAAv3;RzDKc)XyyM`fAdtCR6z~|;859! zdH37Hrb`ZKG}dQ9eNAh$w+POzAE6;ic*TW+^J=$y>Z&A?isWCAuxZY~e1rMMfLOS= ziA!5Q;2Dlbe}d1JHvLD2LcM~vSVAjzqnxZRkY zlI(!&Vz9IvR;k|YQB$B;bk0qgk*c<0%gTL{-iYBybM}N}4T+gSi^W&yh;LakfyUT> zfx>IEQK{x+@RDPF0o%_7v@zIGZZn12V<4Jf4M`*IR{*B$WymXMhij% zisyyO9Ia@(slvQx3e(Ou}SqUQp0NUkJ0x9pk_$B*7H zZE@PqI#79!UY^l1+EHVlYJ(;y_+caU3~ue52}G!vjbhG7Xx$Kg1dm?YguBVy>+Fq( zD;dg~^2{nw-j*<5YZPTN=!^%-jj9S4X98@E310W4(mN^OES0(00KiG!^yP6t^(X zT?@!Bgl%wFdb+rz8OskO-}NAvLdi5LyG?DzC1m8@suCJO;#(}gL*EZc z*>%4=z?jWcL2&lsY;#2nTh1GuUE4UnqASjaJ&3p8--Z zz;HrXt+jmDV!UMQ21t!>uZN1S!Bo(tn#Sddu0%`$Xc+1k;ZdsoMDU&mvhq_I4Rmgr zO$LEj7{7`>3aJDJlD!?{_s|1<`h$NXPIm^lBiM>wtbt)7>H8!Dv~97lo%Efw<7nhpBVIwx2VZE5eNwu4vY?GsnY7P-p{& z|6HHyeL8Rymq~(@w>l=8dNEc-h+VJqEqqLRJa<8P{9()pRP3ozkAj;OyE!>(Vg;qv90><(};9qP8tY3Ov3i<(xEu< zgte0)@~VEzpns!Qi|$4-)<&F4+Mu=FWNSW2pI5mnidZkoeXemKMNVw6y<3h6_ydzq zoX;H zCfeDEaTu$CT%x{SzrvXhqt=*TK3cj;I5CX;B6EA~@K(3V?`KJ$hpE>ig``h?S+>hm z4HXH;3&5ZzceP1=-X347`nE>S(Vo7&uyRyuXY1RAlb^z@BDCMYD_iLDtDkDeZx4i0 zY8z5;Aq419u+pLawKqm?8H)C*_^><8;>)aJN!_nLk8wMv&UYm^JrMxY@%#htw(#Z} zSI_Ji#ikoDeVQ6>k*k&~oJx;ZvA4?JKzx@;SHksrC2oAjy~~?z>^W~Cf3)Z&im7^!}m3X(}z!m3BBSj!tu6w5=o!Q0*p-y#yR!9X)8J`+$;#P}4H>-$v($gS3hKKkSP7RzfXlx0k?9?B2 zk_|oHE;?hB@o70gH_!V4cYMbj9v|nn7faQnONSjqktjBK2lInM?P%%m9Dpabj%YWQ zV$H?Yo!^JGUIYes$EJ1x%4tFvuC^8eE92hU6gx#}qYSKYa$TbQ1-v8~gUcYXQ8j;K zrGo-`5YpUQH!EKhGldVKCHp#rk>)^~-|dSXq*pSIBl)39KlhCg!8aCc95upmN0AF) zfAB78E>N;Y+(u+zU8b#Nzl4$#8;P?{c{VC&FCxE{boUnRpRIuxVqYn}TAYaFL1er{ z0k~!xX%8gQG^2N z88m08GWVoRZZgbx1I4e-iC*F-6|h>N*_=qm+QCA%XvraP6H&WKHdeB=e&|XOiSzc+JC?Lb6Chs7NU_l*VZj&RWK1)N_KK}Ilmu1{| z+!QWd4M1Mm|DI-5N7n%xxHy6Ty!zf6^WUIGMePxvM_8dm!|bHgiuNOMd_S%|M1ZXK zZ~vYTC~gnmVPcpUpNO?SDFbFL2hmev_f8~Rou0$-A|an5@HYQUO#_`uQ;a@vqCLZ$ zmpEE^xz)ss>WlmM08gZo=FjF})M-FuX|T0KcbBUQt||aVrhp{|r9#?b*U%-X<-LYX z?qt;|^KpbXn&;+uFj`JBhCyI0IZQ=?woB<@_0kW_{`9qujrLyj0b7PN%7lPs{!E`G z<8t@~tJZTkJ*QN#;eeY~|I3~Ef(i}ZL}tFVh@p5A0`L~C;rUC&|7;Pr1xyTy4V&Ks z_9=xK@!x`p9YQdpVT-GY{hhjlv%!6`dtizahr6pUI2BmTKr?G)An&mG3w(QYIoZMV z-fqek=&A*04tfDmf|cbvLjV6b4ew%CaK}sGr{>;<07>FTw_>|Iz}B*>_lPaysPhg` zBn4+(kF5>+q==*bF*{jyr(Ird z{qynM(n*v-IVvvOIqrlK{Xe)qAk?pOr|es`PL+JX?yj74ITal97B? z$*{;PlJCQmxtR>urF?x>S|5VNmXSEnDi7{P$N29KGeE&X{Ft$n&$m~Mzm(xd#OfyE zs7#FTZ4?K)#&O;iLB)J|l$)J>1IUw2PcxnkXBHsp!%ewMU8w|2Ahk5^4C{ctht2;U zu3*$IjAVt8V|++e2GnpX8S|`bajpv{eQDB^P_F z+t`Wt@PpX5D|MOYjyUa-iU3DX%+*Wo!tGH2Qbl7u3x^q5LdqNUvyQ9IkmCKB4WvIF zP)R-8*rlHZ5QoE~1(t57*h&TO9Q1(Lk-~1rTI7>GT8ISq@-DJok4tFmWJ}sWuPyT{QSPned-dh|@_;ACLw+o6ut+4n z8IyQyQx~7xrZOvsHZr(Y)pNNb|7oi$h2UbPz8*x>G|cYh41R?kRy{87GQ-Hh*>aC> zZjArvOSrB*>Lj{ga5=b7V70P+(sdoR)wtxH?TMw8Q}$M9MWaJMN}{+SVU$h0@BuG; zT0`8$?%tSZy>)wpy{*+zv!xoMivrBXN~g3AN|jiDXoq0Rn{%i1iZyx;cTm0neBXT5 z71Uapv{GGHkF_hd$N3i}cewPa2nujR3M2-1Z}z8RP6<1BDWPVqAykztZLI!bN1eXX z$B$AY=(Dy8iXwW>ON?>@1zk~_t84=uU&w+L5(pmQB4K)Kr0{z3Uq=cZ4(uYhF2^?G zeA^!CSBKA%LXu-~&N`|$82TS=#)j3<7IabZkOlQ>iSr{Wr^e;L56e7?X(#MgZbZk{4f7_writ# zRBw@jY|v^xvcZRcNkzYsL0mm*-f*z)Euo^~@+nM%R^$4miE9@z0DMZbIG1y`5v*y^ z1*ZlF;p>WohY6j@@vh0mzBIEhgwP*{8OtS}1g9hITQz0(Fi5l^1 zWp~p|4x2>GTB((kV(re~$#P)7?URyus%>?RqCXmbm}$(el6mT*qaG6Q{jA+w@MB>J zJS*C?31XNfT5WPu?E$R$04X3DUuK~m5;iqmYyrLUVwZr`it`?UD%Gem_kBw2j}kUn zf$|_?>y0?H2q)tw1GRrR;z*sa$uDvqz4QkGqZyE?yg11#XA0Zg?yk4_ zJXm=eyts@pV7%Ad%$ztTY1vad*Z4^paYQVk`~1uuD$_?Sre!_nM}5oZvZ0;&#ycM+ zs}^iON&LaPVm(sRjJ7l&?w*aiTrv9l*XLj{y#KwAX>3>?NFl_584DAoF>h@tO#G}B zBABT2Y0YiBhvUI~_hBuZKsHfH8ZC7*tm=&ftbgem9O8(17)-=-J$u}rm=aqUt&&uux6b{uU)%KtW$Tln#=V$rm%q46sFuu95-uoPLy zIX?kEry1eMS&@BWq#4KpTd=;yw-sHhzLkI4f6nPuil2SWBUqV`q-kMYmB0m3FcWpa zh8N-Pems_sT{Tp7hP8c^^$E+)6@D>2Yp5Mk-Yv9^P*x=C{8Yc{>=XQ+Hf1i z$ZU2~EDR|(8oNND93mIAQ*j z{`<5jI5D5l1=LP4vo5lsG~eK`Sy-6PU@^GVMIRT_#g?Lw{2RI=Ph+>A3{fv;C!H$o zj1IN#l>?=AMNseY9q@I2*}xzZ%&npwEzF}guATzoWPG?8xL0D-lg}G-i2TDeTfs00 zl1+}~O4#bYO*L&*PD*gO`s|3iR_^a*d9+tntX6*BAc)3W(XVoSK90D)Dsj%y_1G^t z#aKm?SQ*CagX{J!JTi#i}^YJPt#`bWZQqQgY)t6_r0W;7d%p*+CNBpYZP)4D)K1grtk6@ zzt+#Pru(D#Km>pu_FOyiMzIyu;VZ{z09gc8TkZS<3qY_E!Muk0u} zzM1>wAiYa_29>9#N)@>F)|Nket=rqDR=DXVcV6l0QSAr${xo-;ynSgSDPV%&e)$c{ zsN#e#z}(AnmKe`w4*t2d`q`lH=B1u=r@V7)O1-_NuyL}a_T(WXpeu&X8sRyv&C!M z>*fhU)#&a3(&B}&1E1`|WAS<)<4UiLu4^31*s*Ad;%SyV^S@qodur)^*KDs8KixT9 z{V`+aL!X$JQkb=gfN~1=GwhtzqC z2Eyb_GNJPwvO9uCHg9=vq8YXwRpgic*HFytJyt$;Md9N)9`LDU2yj1A?_dk^(Mubxyp+; zJ(&Aur26~^b#%3L)dcZzK4=bxSh&#Of%Q7vv-eZVWtF9)dZiWU zE?1n2_&7kK{kuUo)F3+YL{|0`6KoJRS8evnNmeFC3-C1BEx)D;aFTJQ z!H_Okz`r>g;iE}c_h1*T`2jV-Lj*@`vZ&l&DS3`?^?mn?tyBJCqo5yYrC?*6VZQZH{EQb=Kvg05I9ycDH;MFN(jIl@8V$A#>oA=jJ;Bt)4Ex$qm_3f2c?C_1SI``s&YN)Y|Aq*%I`!($MB+*Jk%MSlo0hxZ&z zd@I2vdLgFmF3prc~uf+&c?N~E2{DNSEX!(75fGXILB zwMViwupgn8+!O?ky5dPIFhqvEj$5?4{>{7 zEWwg=;AU=s-^H`k>f}aEf`ViD zefr%=KIk03mZx$Ia#-h-+Jv7=J&SjOD?X{fBdP2L+2;R2&TiJ#blIrbeJ@LiB`d9- zTF3_H@Uw;r_WrvYXt*gVMmgsEnfN0Ow??i~F56^|rt!#K91l<;{bf%6_`%;d z{Pe|jqIIlx0P`{VWJSbWGt;N}R{G@oWsB0r{nLp@XWcEmu`?^g3ic$TLIQeUR&nesIdSu<3Dj&E-h?`h4+_kSLjC|v1Y^p0I?VE80bQuaxIztchY#-oU0=z#Rh zmC_H*mlaz2zr*LNmb7l53rqGc{EgJsoq-!Pf0K;q`W7n1ZkQbkU{&DF z!t1j>39ZTnwly$MP7-fXZ*g&x*9XH$Z)OEgkO_+r)dO zXJ37b?N%*Y)G5-^(46m4aL$XlJk=XWY0R8jzNr9PGPVe^9$(r2rj)oyf7z(IxYfoi zPN7a}eKoeqOmG_SdQ=>;&&5xb@uely!Dg+&$xUDx#s;VUonP*MZ$~+~&vgzX`dFnD zuDxwE1YK>l>0*;u=`VG4WpmNbOeh&k|Htd8?D7y#>p0N1PNlsw64y)qL>KxW#Lgwn z)bxLltG@ZX^D;eelVt+8l1^3bfBw-NY5J}UUEbp$gO^1gAWUh9*sd*r27!~^p;$Ti z{~(xlT3-PgJCYH~+W~YS+udeHm`OC}V}W>n@i=xAmoE7Pqn+DfEQm8r3=Y+K>Y#fz zJ{7a3-v{00fD=bdX=2+Kkw8aTbGu|IiJ{Y1dV_*?pdjM8RCy}K*P67_2j>H&zhY-{ zj4@D>a%9%kN!}<>?0NlA6?}fRb~p~~HfyzCWH{3FY}{Ip0i<`_v{mW-xChVp3Y-HzgIL)? zfq3jzQljS7V!vr_IBY8Tp-a1oPB)6m1m>_f@%R+Nl(0Q}XU;|IDG`nzC!n-V5gKOF zPMNi7<*cuD^K3{;)@zF~;8)e(-#>!g;v^{ta{BbBPHe{3rH8G|``5u=)+gc+!$W_3 zJe+(SenX`d$#1GajqfG^d0JLYE)Wl+b1jZDj0Ls`{C85}Q3|CGx!qKjzPMx>sf@ZR zGj45K%Ki7qV#vB^#A>iO7OCpL4gS%p^c$!y6-YUF;&F79iVmX;@i5SecA39f!atxpU|7?wu&O$4~fk@ZqiccMbuT$C8 zB@^+SV&aN^-cG_+W4rn?nkJJi0{SdKIifp^{6REOhulD z<4mWe8u7s`^6oKp5}=#7fojR@our5kPgwqX=Q?%s=jAoty?bvkkr6VxkNtNjtb(Qf zELO&6mx9OZBI>96=xg_tjfei2+U;Ik>JtB*t|ilA)soQ-hjP|9j?i6FXy)ouiGzyX zT1P@o=2B5nhaP8>lW~#ZHp+2DVO}VcXHGcB{wrmiQ58Ti&C%!K2Llk>6a9 zxr2|3s#8AQl&us&K?5v^I?-WsvPvCZ%zs>QAbK~2Rco0V*oK-cX&qkxtK?XJK{n!l zkaOV0614uBp*>GpUfUx{QmGP>O!iGgi3_fn8{#7f zwTOw+JMXY|&+`*&i8@QpSRydo(yPaPL2#@7jRl*u-)LeLstxTEXTg9Ky?_CP&M0jK z$gPS)4DgevCk^^e_5USvQGD+oCk86NnivHZ`61nerlh>B7@q@7{&e2D8cde@W(Bmz z+^gAzx^0)@#er9B;F?#&Z_98M1uB!qs`1>JnY4Wk9tPCEm++8V2g3B|+{wyzF4oHF zP=u*gke|;z%fxUDtM2PYINH{cG=m-CW_gdk!Zk3@hP_J{|D+fn$*%TGng9K(*yOlT z|6U|`n8eQSzIHCTARQ*o)!(0B8}&!okM$XrbJ*^Z>=eIAH?1`0v(;vVgL=!v<_{5u znH;}a(uQ)~hqdYYO*g5jzmnZ^AmohMbh&SIQsfECaZSB;hI&@(oonCLeI`t{|K&p| zy%jgMnAo}2a_i)Y|3PM7r6F|w<)6y)Ic%lo^_R(Lurzpa)6H6FLqQpdFVQ4Kryh6y zeZkYPA9uzQZVwFDSto&>T0u>(4Mz+~VO$^uap95NkQ0uUA{N#*(BJ)!TCw~HXNQkh zH3g{1c{^XrK{R9~pzptJR{u(zYd`a!t-i-Pk@Wj}vEwd$dmF8P)N3G$ph^5jiC+aP0 z(!MDR3>1ZRQS`;7UIS%FqVh)VOY5rmz3vvUGWF(z_d_2)NrgsFSEE9S_fF+ocs&Sf zHwpeCI#rbEcXjGVdB^;D?VMY{)jAMrRdqH8<{8kJ)LK!F-OOd3{0zN|!T9RD9>B+L z*W<`ig4sChkw`^^1o`xIJ;C&zA>ZyFQ%jr*K4M#~sIB&+f0&ydUp!{RVm= zKQLv}gWzE^$`SMV7{Zf!|EIg%l=!90`^S+g)pKK#ZUe_nzv(&E!$SHw2$U-Ah(FXh zZEFC65AlZCMyp(MDe~I>KGI+-nHaoiRK_UMv5i@B5P9UeXRK2Z>&z(1EDR|5ops7n zCtQkQX|Fu*pi-()cD*JbuY`=X7tA@p(9cFyswM9zKQ8dA*rswJD~zJVZV$k?oXszC zH<{^C+fhC=S(0_r4`!gQMsmIInbE9IyCtg>yYb}A7tcNZDfUzojpE{@rp1DDHg5z} z`f~&|NX8Ls6()0cRq7{MXY+HjvUx%3fB4NOq~i#q8X{7%^5}afqv4Tdo{dug&7AKP z_^W)3e7G_0{?4c;e|jxW`FGE+)$BL3(0X`yu=#b}OBPkuX8PlFjY+#a^H-Dm<-Z~N zg9es1lm^d^`^%8g$+o*z9!*WnS02^fem3Fr?nwP^Go|S}%6O)a_9XP@^Xd0;5rj7b zY{B;jR&WdZChF8;^lz*FP?PT@>6l3ktbUsH5szt^ynff%vfe<^tzR(aRq~c2;Sx-H z^M}>}+YPi`g3rpE4o|6v`-bu5;pjiV25xoy4|0t^NB@{~WOIRWA=p3T2hFzG*Ya!9 z<%|4*Tg0!j%p}>(iww*z&F(;w+&>kT($l45L2x3UUzS~G0xIT`_)x(E$6Nr@B;=-K z4Pmz1gg;21zIQ8vMLn}jzsf54~BJIxsZE z+SI@Gq0eK+{n5lo{FQU#=O(j+q5iv+&mcCs3`S31zb-lcWS4X=lDb+St)><$mHu{T zWzcic8{2Y6RJ5q~%d2o3qp1;V2J?H1BAcwH2-C3p+En!2Amu}`-AG`p3~1222gu1v zh5VSB{q{MkXO!AZHmNL;r?<`dWzjrK&C93E+r?wLp6X%N=DZjImd|h>)o(xu9 z{%3obldw-)1BYm?%pW@@{(UiHRjpWH?zB|B6Ys?M zsmw*t?fdgC5Wf5#njECATrpSA%fxCap)Se;6g_?M#AtDj9@R{W|3zxvCmZqd$XP)3 zbN~JV_JA~2ya%;qwrG*mm+rps|0(FQUU%CrX__u5-F$p+|CO$-myC$FeDO59Q-9VH z-N}H{U)LqSU3vl^(@=E=OKFx)w-7sSBtTdMd;ivaXKsDfibuz~YUl;sUo6)G!Q(rW z>|)1S+K>&8V>PYi)w%21?!yr+{ttfF_Ut_T;e@gft2C~d$+bWSkB}vkZh{7;HDomQ zYBcqFbyPpISeV0rL6_B@e3F^ckYlWXDTSJk1^I(Y)ZM?{MlV?&_$B5vJl%S&YVYFTB+B!!eaRw5 z@EctBw-IE+^dAcYN%AzWXN%>#PwF+O^-?Rktb678b5i8jQnH)R^n=DzMNNOy{?a+C zaA?cZYH{h_NAkP>2y%6%(#xM_?&mju{&*q8qk-x3%QwKrNRySjUs5JY_R;I+*Mxhd z#(~-4$m)`d*MhGj9tgj^B4bT5ae#{It4`AbvUA zYc1a!2kuNm`-4WUF!S7$s!?-!$aP74+GoK^O!L{P=ho7m|CK!2!D(>$<8UB;XNO98n+AvpN!lyDs z>F_R^d^c)%hYEnKu}z!W$j5OvRRB}Uuq zOjwAcT(rsuZ`hnhWi7G`q-j=H4Sq5%eH&(l*%am9sJCsD>!8}@&ldCVnu)_mHQnIv z2p-)l0Gxv<;<%arcp79~qa;u;Jv*&YiE<4Teo6Hvt&Q2EHQFKmYe?uyyQh1?u9K39 z?I0Pt%~;ZCB7!HOwWshW+&_DKg&#gJ87{d`ZXGe+)NeLUq#_2g%;nlmOC@a1MirdFPyL z)`jHZ^1wpNhWkq64W-jK3r}8-noGQWaaP}{()Z1q=WcHBJewn0XYSbSS7_`FGp)q^ z{j}v`w$x!lp)VV(@+cIvm`P{jtY>IL{nMjoUe5k}cI2>?4{=I@Ej!PbTxrPQdQ>$} zKZv?~Zj_=Qnt{5Q6KUg=c_3ZwucUhUs#x}}#8oWknV^Bmtv?{TJmmPNlwAB~I~OT) z*#^$Z1;ytiVYTYwh1)))nPi>pNbvUdG&Pjn68K%MH$vhY9;TvWSaU!bd+DrUl3@*z{2%0N zBnsc>fMJ5~{EL1I?atwdzW8x}F!`k~-8IEp#BG+_6z3ThNAxjPwVlO%FNy+7(>?yh z5OUXT_~qm^fLxGBh@4y+4xCs|sjO zM7$RL)uZ#d?|&F481HqwOViCcFZ_PSwEDdy?=fF8CgS63%X@V*ClLNEcYh8qDxb?Z zVrrxNX$hNlzDAvN-iuoDx%$Um3=ThKgc$i z7q{^e=lk$`lH`(l-XDE%YV+QeD=N=l{rLXukQ43O_V<=?OZ0wT&+vAP;tp8a2>#8L z%nLRZFG94{Ugze$I85zHo2T-7`rlf$pYaNLfARx!gTpW*y&AF3I})`h5g%b&p}Gby zem-Mb>2W*ZfHPmD@r~+(4{h(>UNUF)mJ}-8YL3*uXS5Muvl#iyq|f2Qcu%~Y@PGAx zt1~0Ie!1SGev8lIN3u;Ewyg#(zBc=+ukho+p>uo0j#K@5aQ0hd)GS^S1vnvG`OVME zA39%SI`29wNGL7N{p7p1y@)v&=&`5x#UJwycO>eWOnxQZFV}+nI#G!^-_SAp_`!rv zT39>457qCcZ@-N)Sm%pmo zK7{(Gk>#rI_x~t7VwhKZpIh*&ug9u*+FBrPS>qkYB}Z7zjL@O`T8kG2Qey-?)OoUthamh>akf3(gFb?GOA~ z6gz68d^#nk+{|>1t+A8(VcU$o-gCN{{nta&$=mN10Iv>$F{Rq3luM8_pVxJ2Y$&50L;#X%UycH+1W+V=nv@#me1G#2ukh8_?m-53P zlAGg*WwlaKwmb*tD4}-XAzRS|1C+DAN>=gO!qTP~_K1Kg12Bl4Y#}DMl!o{jsn!o) zRM5EFMKMrX%hrNJ2OsfZ4zo65dxAL-AHml*5kgOTruk*4YLs@HplS zme47do!hbmoy{|fpm@eLo;WH6#58rTg+4>QoC{8aqjFK4T>#SC)*JqdLE8MW%ZkP7 z`UlDVS!>yAC_SRC%4Ai*lpe05Cv1x0IzazfJE<)eebfp^<2Z^2j5A3IprPTgr9(4j zlX0dJmY9jz5l+_L_7OWbiEhAT?Q_{Uk+e)9Z5ixufRS1vI0021kU*8vLKTjf+yMxK zaGgaPPPOUkCK~~NSw&i@`8owW3|c$IZw}onELwFXyWKbr$P1@2N8XC(82ORd)%U3h ziCB=TLn&8$cO3Wee*4BHe{A-Rc{(?^BVsF%%dXBd^o^iw$(IG1aQ+#l#QY;=gq7LU z55NTcz2)EB)Kg8D93!ATmQJ|}Dd}+A_)YmDDkl}=OVQn=Y)RaMe=|ygx;Dm=OnA~g zrl-~I>DTnNlB1Jj2aEci<}9FC7nAUMMOTBzMrs@CHwm`iCr?Le{MO(N==`Y!*1Z=3 z)SrzvaJ#NV)3J4%q0_@-X^1A<8Br*yOV={qqtv{1b{NxnA!vS&_M6d;-L(44TP|M^ zN&2Ax6>l&T?XxRkpU|yu^k+K-ksd5LCU0zD@c!$f2c|N8q0QJDui?yTH#dyI9rB|% z*;7$zb6D@-$(x2!ci49$<+Pi>@7*^C5rg`FJ}}R2@cQ1&Q#hA7MO%8@=BkW5{e?N; zyW4I>GV}V=Ao?rmT|z6mb;OCJno*Fg=B98JrFL&y5sg$Tj>n~Irt|^7)>?zwChn|8j6(9&Vd4BzC!NUOVW3&8MiYaeJJlEp+KGdDJlgpyRka zZoDm3awq@aCZ+bu8uolLJA#V#^v`w^i-Aa)e>MihWnfk0u;0XuOW8V;OmwJQ?5Z1X zh2K~6KU?#5Oy`K>N4HrHDiC-QvFhyp15>3$Pe+H?ax!4G8-i70d+Pnz-2KkRj@R)n zvE*Ra$ZoiF7ETV4(lyU<{>gZC^9;C~Iqrjt<;!{7%+5MuizNp-%8*^N7({g0{C_XK zElH63rfC3a^|rNL=^x@x?V*^xu8X zcg!uv6N{GS-1$Qw`RVGy{AU+`b;UM=rb7Y#<3n8w9leVhLyGA}e<&^~b{$k`*1CYs zNu{wj`z0-r6jC#+Ps~gz!d&pCYGOzj5^!ts2gSGhh9KCY(>4;vXj?9<4tDi(r2<-0 zgB{B*`c31>!o82hqovdE0}w;ztb^w7bo+Z>96l#+^;&8QmKa@n0LBc;jvJ>&{HimT zKzIiYJ4l%h+|6d?Xj%=MeMzMLM(qg-@B-u%sb~VwykiX3D2^B-!d1FP9r)a zc~@9}z27x0cZD}VGd6^!45lXC?){A){4c)YG+W{0KIaQD7`s^1{ljlF-&Nk+x{9{_ zd&}`kxABhH-LHRY%f5I~@c!0Vpj<+tTvGGA7=}H4Pjz(n6#b6d{+CCR+iJI6#YF2A zS3C!qFQVWQiZk*gxMRR%hCp#ZrA+9-2g*OZdbD&=B3KL*Ve1$%K)dB_a@bEU*is|R zrut{1S)yXi{HAl(X~|%$wUoZ2v$bWf##rr6rGkk*mPcRIDM>CZqR%<7D9WVvLjLn) zF>g)dDfVQ^yuI#gF^tR)6(zP`Z4EUfU?2UGJF;@jjw&;Xh_igv7keq*#eDK1Ikq}< zcEO_aZRQUBesc!0=D*$$v|c_jBT=pDlfgQYsB>Djj3>&)J{9#In|`vtRnJ z0Vy7G^MP{oXR+~zPx|q(Q`rAj#~?6+-mfv|aw<$V8;A)PR^mHK6@&N8alO21L1^iD zFY7J#C8SU1kN*l1rL~u5>|^PfZ-Xb6q(^Z2af z!~MbT3%PBWhbSeG@wVLXuxa5Kzy%BxdU}E!TZg1*`P`Rti!so-puYQrSH>ROHlwIK zZJ50%N^tRSsNZ5E9>(z5H?O3;vhViwPrv8(on$p`si=PN?z+>?6;Awbf;hCg?vB3@ z?YJt#;O*_Zl|KWJeaQwJf$2$znb$H0O-?#wboq(cT`%Dcb@iOh`9bJu*vS=NNvi#0 zQzO&=Y=roWOUp@AQAF?GzVi_wlAuvu$h>8D zcpGld)u%zD$tDqim@ku3S3GLy52<~a{cP~KLQ=9n{WLsYM%eLvv9AjR>2KOHn z4M!mgyLlmBDxzTY53J8d0x=*)B7zs}8cK%D58*!MM~l7@?UM42SVY&>e)J8ifX?$} z(xSsWP>NezWbJL26ap2|4-nN@`FtTJi;RQVBag;H#sf>^dBTT#QAqiX3V9P520j_^ zZndj?yX3YSsS$itS1{--#2T{UoAqa>C0kQMEsp*`P9-7d7k;KxKeeKLm}uwwy9_`o zQ;PjoxGA-UyH}r6!SzGKZD2eMGeKJ;MVK5F&KeJ0>LdOsc3$vnhblIvaad8HAZatF~I}IrxZfE=rDAJezNlL(n4wOLc) zW%h#yqUx=W!adJN-?s}a{cw2kigib$_afco-HSA=Q3UxMs3ZCs?YsgN;#h+#n*s0T zmkA%ou9KrqUsxg6#;ZQ4QGG>Qn9lp96+~6uRk-y|tL{1B+~&1O?W5#t&eu+V@_a`b zD%*CESEDT!1{fTT>*R^V?fsL@JLV>ij?%4tQq{rXc=qc{`esg&D^{6zukshJ{!)313(@zya`%5eIa_--M@wFRe zWUi7LUo@4)W7CU_LbjVOYO#%R9fB7yWd4bt-Ms$M(^Vt8!o)m}f~l#6#)h(yV31)> zM-0&Ox%%IUcFXR$@G^ym6WeZIeJ@wFskwKPad%|rH;ux<&@l=OJT3I7k7ZVtygBd) z+2yR$PR5lr=xwGT6ebx_%%VPc17%O<;DJMH5qU!}>ezdX?Lru9bNPlKJ3 z{ZCJ&&>Kz{@#HpNJ{b)L)@QDT>VN-LHfZC+1z zd)d>_Se+5mW=`}<=-HFN+2!KUR&ucA&Cl}t6H`WJ89jDWtYk~Grw51YJi3FTj8;FL zJ~^qLa^Ur*2DZFof5vm#ftWBun~-vF14;9_<1I@!P(*ZkT2@`w{S@FOCQZp~A zgz)pFV>wqwtiW*L4&Gbwd>Kg6&p5zhILf_A4k_65B2}Y&&ZWz6d4^yl$EkK zN5e>*RfJHKmA%QG5lZLIh%$0yoV_BWa59d<3EBJP%(5Ns?)&@n`_Di3_~0l#sqBy`Aadut(xvFzuvmSPeP+|7E_3kj8tS&a*%r}GfY|YuZH`mL z2=|ST@$?Me_)J7s*tj{vb01hUtb?cb>`syQeeGwgV4bGpe*!PQMnODj1QE|ICj*pS zqQ_*V%iTKPiq!bcH^E?`ZOCHo~iq!ErzjwQ*$?d;D$liwJ^Gw;6!bi;)& z&y%je5lw*6?tE%;qthTK$CAVVTntkN30#kMeH1^qI|4!`DY}akK(O!q)Y*KGGVkm2 z;l<|!ks=ms5-a+A-3C;*_{SnXX9VSYEpchBfB-J%KS8S+br@@5)%}U9ag$78wP|_0|C%KP^qbZ^w(3|lj2d8 zegy~*Y>}@i2xVZ(0o(WtyX@YBDY*o654MG^&Q?+8zS*4ZZvOnq)0vo9q8VjPMlHNn z1=#NglG0xUXTO2KsDN+D$BwK{oIV9rYO1PEN6yE;1ho&o9S>c~vVB!4{PyXU*D+-n zQ`0APZ$P1b`X?p;K!y>>T60sas|OW;01;KB{tn1e_w8p$6;2F-sM}%j1Bp*Tix_ay zwOb}X|0bi3mllhA+&l4+xs?ioT*pzfZ3?Z@AvjZ@obQ~0;RT)!6L4abk)=em^SFwt z_(`$qq0(U+O7oU?ZiwxJU(Vg0GS11mQht;peMC{4?0+EVb;-X}|3yKYh=Hw%^Fu;K zwzyvMSi%ruS@8RT=LFzPRjTA2`v_Y$$^NEjrTI|{I?FZvU{Kh4NC}VMmr?^jwWlK+ zRvlPD#j_`lH64o{9&a>8AlKeqoY(a7$7G{v>+71Yxq$#}?FXVqV|@->qR%MFTOVb= z0upiiMlJ38k>qMp=65dI^zek}Z}DMazzS{TI|_WZ=a0O03#g>Yd>RGnoM*~;55fLW68;|eefN(VHE8HU z+R=N2c-1ms?F0?<-Lpfk2wRM#`RX#eu$uU0S0ZnYP-|mG5KhOeIx|c{6#nNBBtB8X z4#E~l00Fbw;O7Rj@Dspv{X`5Y?-uk~AqL~9zXmF}5*K`4-N%sT=cZ?%;X@u{0%b2ij6?w5q+IrBN;m8MxtJcsFP4^YUEU zl1a>z((#RtYe6>M$u7kcjVWh)&WB`q$)n{J>V)*esCQ|3+CsM$pn~zA>N!`N3$!D? zx+|A^H9izI8)xbf+CRW;b`OMBUjT)k(e?n<*w^;;##nm;_ zFdH-N$e%#+FyeYh`ocJLqeW`qyYRH9N1Pj$pCHCygS@zRy8dt6?A2P%a`XY_npCdW zt_W>0O;i*00M>DNcOA*~S3N^hZ;+8a4P)&ZAQ!+ z%-EqrDDPbPQvd@h7PYjO5%FymVg2PdCnsmQl4@?hl80|eK%7r34L_51uNc}G_48Ki z5QPx{0+hJj_+kcLMahh{M1fkuK^*X0B^A{rPL7iwKr?5g=Zfkz|1GC4*H51b z)j-MA0le$rgDyt`?|py1>RAGc(oya}!3j?Ahq7TBc8jIheqv(QR#U~NL(@d|XJ6h3 zkYQ`LSe10vKlN`rtkU&T6bThfK7JC}gvE_pPfT6AI9jdC7CM>KS)8w(5czBIwC0kK zdMXh?!EG}8qo6)W%~W&Gb~|a`0blACxI)Lhb1jT%+K*$WUuBtpjYU00huT>9gx$aA z5Vq*XeVu`6Jr-bL8M~et_xk;8?aXl{Aojf5rW2x_0Ufk>MP7cQT>wC4H)9FkdFhNS zA;(OXmtptzH&axp^6qBYFIx1}UC^}H>l?lU8jJ=&<*7TsVwt^%hmp+F^Nq~<*4WRo zog@>NU4;WDLpQ(_*3fe(6o6!5-5m*<97VeH(9(%>dz_5mT;P4~T$k4cF;I~AM&3V9 zZ4jcs`ks7LeSWSZ`xpWk?lso&ei)zj#k_FZ?z+mN(<9~rpfCFpd|H69^ZY5rUewcG zaufA9Gew65k^}w+3Ksn}S4cu~`W|QAzOy2?&qO_CaMFBUe++1{k*6>%y41mGJUmt4Y`QIcu?<`IKIm>w=_WFFT@{4+g0 zRkfaWK%t4?_p#Md2l{=Zxbvrf*HHe+Al&!O{tiQX%o{iK3W0d_h-P|gnj~cJ@ezt1 zX$lukJxZk+D+rArGfb_V6VyvO&#wP3aC;TBqC?d~=9ZWQ9YWt11&UE|s|lPri$Zev z;|p}4=dZR)32sZpJK+?)7xn7ZumXeE7%Xk4M$G`9Oz8%$NEhYUj=-)d?kE6F^j$^ z^azMLG52%5JD;llk?)2Yc$?|iGL(M>W+L5fyZ9`IYsU9+$f za&mfd#)hD&P+rpi^+AoBTyfdd_c3&%XzN z`0M>LZ^Q?*2+ZE8e+f?dlm6hSAPK$E=jTy2$*YMX19Qk??QW_&LCYoIEj=@Ke@V6! z9%fd_2W>Sy1?DG3^#|xgVYXmJ;ChwiKk#ax(5caS7Gboo^zI}sEC8?;@a>V&Z@)&(wLtB|f`Q*&GiVeAyu8M^@eyIijsR~w zESZYW_vu+30}$@#LJs_Z#aY>9qlrteK8g=ktI~Yo=wAKfUKK3D&-ah9$F;kv zreLjj;D%p_>bO{I6qoU7Ll&0qVJ~4Ww^ONQu>L@KUdW9i=-VCg&;9#?u&UMol2s=Z z=yV_vh?bLKzkEK;!}~IOAAow-zWexT`#oH zWgq!P)TZa`?dSt;7L)OfB9{P1mg44r0iucbOu(SjO|$d*kOL|(j;_~X%p@k@uT*0^ zd1^FUmB2@8sK1}-oM`BT<`7(IiGA{7F*j7y)QD4VEkatUvM34hJ1nOF=)`_dw9yb8 z`s5F^`2{7%FI)+qPT?|wIs!<7&g15HG^Zq7@n7n?nJ`*b85IPJlj=SVFnD&UC2w6i zJh`9xL+2Q<|2-A$G`mXguSwO)z!J#JkhI}({9-o5?vxr z;}Mb>j`C{D?~T0ns)G6mzDET2kSU^SmrC|OsHQ|=hs2*-Q`j!bl5GgJGqsx9$py)4 zxpG-~c!{g_tZ2FS**B7hihzDROyFkIgZ3_2h{1G(zI%|W8uV^tipI0lJ}~C)hf@It z*3k;XLuo-I;cdfi7L7nfI_Tr#gXb8n5SWclDctT!c4uUm=|{N%{T68vTQlXH@uJAk zZrHcV7p))jK>jo>snk1YJ0TT64b%H4oRVrx!cbhjHT$J{kbe4~I=tMkCL%P^aBz6) z2NO;aG|lOc4$sU$UOOx%2=8{O3g*`LyPNeq8>Uc%yYRWB zP(4O;$*bZFhf-8PCnhfecyfc}R&nveLHeyo=RegQ=es?c7vV z17{vNE!Mv=DzcsJ*7gV<{}1#Bc8_+>cf?9R|L%ila~&T-&FAhmKVzPl&XP{W9zE7( zys&}eIT*<;uOL`Bq(M0XRrALRhKqbYPZr29LI3oyn6;_XZfwndJjTRtUP;2#-DKls zYD~XS|7pJ)DX@SGn7qML?sWZ&LW$iDk~Jy9y%`&ZjoEy}tEv2mlChD6GH5ck4diwL1m`dt0vxmcBY1&GD2 zd1o9`!aKzwc}eXw8`gfgk-kiOxA=ON?4DG`S+}Nk@yU0A@-GPCPg1epJ`TY5@*|X! zb9cfm@98RjiM?$XX1R7XtyjhJ&X#1HiTW=WAkyCI=25^kh5f%~{95NM++^L$Omx;K zi@M!-C-0W-u%+gty}Q!0p4pW{k<_A&^Nti z^HSM&H%9t#)`V3F>@Fp^3t5-g%!|<-&U{AZwL(foJdo?9dKigl$FE#jF61`-T5FKh z86zW_l%QQO)?+VC%l!&1JgRZ~UGEW<&DUzpaQM%pdw_#0gxDn{*7RUxU-FMNHU;Dp znbRwRmf1sVbkYyz89DQ22J_>&E;Cpe~Yo^S-fH$ll)7&sNWUS3u6gmd|ABf)EReR*+ zVmnS?O)RN%-s_>)e=L3JJD@gj%EnT)mjrabl&5pr;*a``$2ZFL>qxLM?hXGKI`RWN zMQ&$)dzhLKr0s><)kN?s)+<&=dh+A{j!_d#88#GXFq@!GX1buhDmB)yJ5&^ch=5gG zkMfZF{>1=KScaubnW{ir)_ciE%gG^PN!r*Y)_2T-S~}ub!pMl-=TzNjg(yPxI<*AP z0)(1m55IMGPSV$mXgugsMKSDBnSt+Z51scnAUKat5TQss|z!SeG3pu0fO4)z!zpeL?shon+~jvs`Hp&qA4nyH&rT!N0pgz=TVWRlX59YpXe!&Fnf&{AzCrKYdD$ zS@Br8(t8iW3AO|Hm-pwf{BM8EUz)mN*P5qQ@sT}a_ctIlRDV)iP;ax6UI>3AQ}GMq zQ|GT#QJ1)@(TO$$QGtxMLVFN;Gv_~$9Q~!an1_IrlTi;kh2DiS#Vv5<~CbJ*vD%);9Y) zq5M4epyyv&f4V5%W<#FmT9GbA*8`N#Uk**_@e3U7Q`>Iax4xyGzgfT5-N`j%YSpSA zMhl@-+U(5fY;A-*RH`uNE94^_Yqk9?6!Y!o<)Jtf%@`J~DO>S%*w}S%oF>RNib21( zd4JW4fF>X$*KA51CsvvRls{86BR+1Od8)R5HtOLo6CQEg9dCY&&tK*w1vG3x9I6Zgi6VD~yJ#lSCHh@23{Qp$!zDuNBL`az#9ITB^+0CBp)ST6TrMDDs~BTNXYtC~zZ$`XE!F z2{Z|3fDa<=EOsIYi@p@+;fY{C;T0Y_&GAIu#EG~52g`}BeD=42mZ?g z2^L1mO3AcW^D*jswf!pTc`q&s)ls8e%#;ih3M9>)?^vihvzD2GG88l8Vs?;}?-!X6 zU|0XdHQNSlm7+o@Z*pz^1AQ|rpVKdX^HJbvQ1GCVf_I$T>AQeJpF(`3-bwWSdTU-r z=&SytwAztyZO@TT!yIpkR@ zq{3C~wSt_|2M(fJP7C5)=ivBRkp^$2-$S_M2gifd-n#AOTrI({?a{Vynd_UCp1F;m z-x{*jlqaj7za<)Zi&3tgAGo%%TAsWRf7R4W`C+U zdhR+b$>x&kI$;E}G&hvb%ApD#!@)8$-DV)8pR`42rGd}tDZYZG-x=CQL=xZms#))l zn+Upgu#H$}-i}%EFOn&TKkt0Wd6iW|@v8JbXlc3fLd0!AWv0*X^b#m-&7n3x4%g9Q z7|GmQ_TxX$$B{54z6RGpcv+M69p3$t!2dvT+JAc|q7C@SfI<3skL5>RSK27Q7bGkh zo9!{k5DNdYUv-Iw&YsfV$^-uPZaDlNUD`p3B7Dwb(E+n>o|iIFQCED1{ED|PmH%8f znd-iTt@+SA5wXGB`L$j zcxVNkpO#fMLp7l1A6fVmHZvk}_o?R~(FpqwJ%sgGTr>yhaG#!)$o`w1eNFWNO@H6! z$iE8;MO>mF9~oZ_pQ!ZG>@q|U1^Q|}K|o}2>|=*}5ZWTHN?fqTa8k~puYwxsp80bA z#oY5uU5bH0CHC3Onf`zvg;=98lxH4Itr8h!GCSV0K9^XB`>Sl5M-uZt`cv*H<*S|b zSgw87GY^q*(!=qnz81c9B5wq=99L&AH{2XrP5f;ag`#CT9b&|&7z}=t zxRFuO9z5@AtT@JB4lDbtMw5Od@(&}w3FA=AP8p5Q}49&kTAMbrlfTZij<;1Mzu)` z%89{P0A>WIA_eueTJ5$e7VjBn*dsWO6gL3_V8a(2#aae{kW|Ze40?;OH#N@g; z1fGJ03bsW)hO0{}D`3NWp32lY9 zM9}vg^?&@)0~p+_NvLhW#h9*Ee84`=M>Ij^(E}Dwo2zxJy8y7Ngic)SA6|&lKaH{k zK^PJNr=*&lV)jwUp==&OezgKYF=Re~F6{RCa^t=8Izj}@ij<=@L+Wu3_H}Mr&+0G$ zn{-*gnV2wul$9~Pg3XIbC=zP|m@p)L-4p7>tVsqtvnB5hAWI6E#D(|&&z5|2`wjpo z*GJ)10Sg%bS!OB*PEl4@O+Wt>jcp>yWGR3ts+|A;K3Pw6f_8gg<{Us9QD4|)3qWX| zB#uKG;Ja%QqSbc$D+;u8+A-WYov56z{|JGXqgixdX6V^@1~`Pxc`Jgjb2;_5<{=RW zr?I9?Ge7R_6~#DgE6#%*kqjv?5#1vzoCCly(@Y9=L=u}6$162!2o}Jr{LMCQ_sUpm*2nd89Ats7gBn9kGDl8l=H)gdwJL;;Z<`N38Ct z?cxnuZ57hzFhY@BYal@2tHOi@Mro{HF<=1v`yYbrlAMGjE=r#2T%EucgHAwcP%dexiP}2^{CNK2bN=}SZj{L%*uKB^=Sl)p z`S$A>(E*h-{?3nqi;!?jiyNU1zg(i!McwGlw zZ%wvsdPG-!i6j*?O-9dQ_DgQM^wW7qsa~1tZicyr z0HTfY8Vlz5ZTtLI zW@bAf9kCjBHDdt=>Zn`w%AGpt)M2e~WW3@IgD^TQ2AKKl!|j4W*dMT=eDOGOaX}V< zp6R7S&-FptV+$2MSKu)6x(WWMaXuIfOa(VSQzk-yaMwpqA)UysK~O%w_jdz12J@?FdO1>*` zpSphAZ>DD4m(KDI+yLY$C}`uTnC{YVo~dk6NgTks8U^Imt5d0jo#hX0F=Oj!Y@xUo zlDJ#=jQ3`W9`fB0p-}1740iW;C^b17iaRhTi(N_bE^M&Wrg|f(nGy>|Z?_`46TM&jf*~Qd)mXQkdNG>`>wr3Z!tC``AA- z3>_iaBA1#&Mj;bzT(ji#b=!}J8Po<~|4b;{P2`627T*u^+zMQ-ZqrWY>%5By<<=o8*s{jBn1m0c_Nzn#H!D^jD0ws{8tg?=%l&vqtZJ690JrK{(f;7h z$l*PJDpJS%zVlKozFyOlRW6FC_^Vfw#3LdR;mVUV(4s!_CP|Iy$WnMdYJDUaM;2%H z)l0lE@-|JC6l44i9qDgi@VCowCr3Se#B-$JRYNgTFnqUPvv!`eU!pd37$UfK?Ytpz zHNj0JQB?4C2^ZW9em1Hf{)H)OtVQ1IzGFBbTG!ak`Q;i-5KEp-N=7RHAGoMN0K)sb zUDLv!PFyhVy(Z<^(z{q#aVJQs8gw!uFQ>(^a4SiTXj3AVrDr1X{NvY3+3+zf-^)=S z>JctZk*Yk2YTrmLPsQ_mtz2M!ohWiuMQBcw$EnS<{!hiunaX-l`lj@LthUl zXb-WV4n2g=U9aa=k8bf~j@~;T7I%xVQ#D)_FC>z1usG|Z+*NK1mf|=Y4C+9I)dJs$ zVztPU>A4?L#mV?i>cLGG?ZExxgbl>Sbt`F}KUqTew!SwUXuS%-4CGJ5o7tt*Ca>ww z6-u<0!IO`JluHPFf>P~jy`>iq(+>|GysPGP%27&=Xb6Itr1@p+4%v*SUj49c&`5Km zPn6wD*456yk(2NJH6dJmpEg-d_un*3ICD8I@v?GQyzV_{g`}3`IA5W!Y|*?+!mZJF zY6au0>iY!*u^|h?!_qtB!SyO?+!@@{C#+T%Zpx7}B~hWpMq&5!tl#-D2XuHL)< z>>b)z^v-$zt9t%synO4Hvu2h;OH2tt&%FKbwJQ9zbbb%=xaiS}Q;JtwnCu6b9Ph+g zLHk!T^|Jd`mYSK=G{Z)(HROjdiLds*cn269pf>$wcKW4L-usFd_Ad@%m7ORz z;N7jf+g6*riy8+Zb+%83AFDCCbbhMdC;xUBZGE=&H|B*|Ro~pir1KanoalouchZ{F zn;#oT@KYEH^Ycan!C&4wX4!hD!1C49fJTnm(0Gtbm#z|!P~eVZ*|lf^8h7>5yVTeS zxdmioSXa*lkKnRr8PJtMu50A+ocl-{8pj}2#Hq+8^kRC_!<&e`2Wt$f^j(J3qp@6@ z)q}x#F47yMcyWIyJ3SBM_UEZmQL2+uJEPI*&r6?L%VSSsR^Dhr+&9|pRSx*DG zzin!BQ)(Okf9(z~)-LFP48S4gdNHiBNbF8Y6P|x1EP%Y-Wfb;y5U+q|f|4h*b;V0a z00DBS^behD?+;Ast)t@}HI(LichN)lW;PN#GCw3Oq6*M3_xB5>&K&-G8r&|$H;0O7 zED%#@(~9sx<|>j7F%GyRMaP^Nalv@Xv%*Im{7!ql5V~rS(U&y|W)f%#iM?gw1Y|rz zmlEW5_S*%0W2m1jcpL%U_4MxkfFy@Gy8&tYfW|KM7{A{0m+otbidKaI@RLA>C7KmW z@cR!Wdy2zsBJoW2c1rjTvb%se(ohU@k94${Dh1~gFVbasS2V=S$G5~qlh6&)3|I<; zIcyi5&o80h0$`b<^SRjf0o|%%h`XeZg4DzgKO*cN`I&l%y|1MCigO+uXSf_&wlw zTZ5Py*|35%xrU(*%Wl7I-4+_P-$RS@tOR=x#Hj}TiW__oY%Z*lp&-3r&jmkMA5`>s zD=yKw3h+6%I(hH4CSo44w4EZYa$xuwx`n1>+9SfpEkvt&vgweqb0@a;DhE|BD~y~^ zUoY%7Jn6Cwtg@xOef)Gw=#w~1xfFj6SLZYc8EyQrvoMw~efDC$%_HKMpawto2!J!O zzt}2jRzg|-Hfep7|H&=TC{p8eTu+qH2J-IV#m8S#F@C@WCGW}CTln4snpJ1m$qn8y zho`lF-`K+6iB_?7V#9u9rFpi-idUR?g^PAeO^;s<%9Yts5&Hn?Lr#*j;X6Q`yabQL={%&L4flUk>Gz?Q2{7lci6R2Mo zJbZ)+}v9L8|uzlm;tMVreeU&V455?H| z*iT9K4S-Nf$k^z_lj+?fgQA%G^=+n?TOK<3RT8NL!29$b8U}%PwP8-T;HV0%~uQu%kFDw<`oxv@~CxGfi>7 z)Bru$cF7UwMxT7x4!A0}WQ0XxCgzAl^>Hgm6N~FsM`M4v#U{T#sTyvCz3)||z1L)F z7)#<C-!4B_9zJYQ2R?=>2o2Dy z5Fy;>n?MZ?WAx+8Nsy>mXe9IYYNTs5XOlStSi8v!xhF-LT0A67K~FuZ%y{f1cu-QO zSW0}AYcU+kq=9+t;8NpQkS@JuNZ!BPb{fd9bv+MzLl<@o39NsP3UnppDYd8;6(XYg zpS|-3me+h$R~~6oV4wWS$o53?zW8gqT6x3o&0eBRD1l?7*dBxl%>Wx5Tc`qT|A-r~ z*Xgo`SEnM(jPsY~y}c}87@iaK%^LjKq)-rAZtrU2$H@{gx_x}$9d>KgRe$`~n+x=7 zAwtSvF6*_ONMG8>y&e6-ve_54K02^?HE608@pv$R@^hXp_vQAl$jyP3DM-}nWNR#g zk(?Ohphq)cU+Gg@-H~X9U%1lp43T(avf&%!-*3%`76{)v<0k8(#{f}PoRl4f_x_=@ z4aO5MXvb{BZY8w>6gp-9rG>l3cp@o*R=1rKMQd3Q^fq#ATTQR+F8q|($3CkgxPH_Q zb*pWB)IQ`9s`ncRQ&SP9U;ZL@#Uz5QYn4=IU?}&%tJBxUHRa zWIG=bO21Ql^geE5%7(UY2~4zbFcNub1F=)!7O2%&vO+g0<-(_oe3%?A(b`Fn*^#!T#7lBueK zQf*x)CGpX7CQ;x?r8i{}>en2zryJQ3c6;|S58s4buKgT0De_rD)F7WUf9dkFG z)>Ea?*7K@u)_AJ+no|yM6>}tf#~fyJ(;^S(22=8MCPVRFG>l2OS4rIVIQpw&G41Ba zirW+Avp^VQw`vcKp(;_S4b_Y;A>H1>MK6B-+N!hshaT+Y@m%y|{A`0Sbf5v|>Mdxr zP!(_G<|$veTmZ1C8$9Ra<4sFghwsZ+9sZeo$KvlWdz#4zg9 zw>5?;{Xv-X$e1SS7Xso`o5hGY2x{F$<|j~bQLHmUL``s-?E%N^>9KCety_ybgklXW$6EL%sdX*x>Pc2l4+qyt$8aX? zbvr;90)n1cfA7z6xY``N)5exgw1;{tt8__#ae=+xlgATQytY66^;fl5QcE2jMY!(F zajspQe23CJ=j7?jJ>G~l4^E81T;@vq7y`hyX>Qy;prD z(|e+?{dS7N*A!X%H;pl|LK#&y8anG3fGcvrddh0qqCq#IfGtTcw4Dgv;bysn5kARw z*%Keiev|qwkc{>}V!Asgu@v=BRCa&m6{jTVvClvIn#DU;+2Q?jz{#dy%*tZG8qqBW zsNl^lDi`LmFQ7v$B`SYo z3RkI`d8R#pvu|+f3H-(8ApmO@L%0aT0781Igg=X^n4joN-M(k8!WLWfC{;(14nQ<9K&fk!uMzC07jXm|eTg?gegy-t@_yGKX&I$J9X31W|yr zuz37>90Gw>QCJ_dhV9Z3McE*=Z{!sPY7~wfv%X@82Pot^tmR;&eKvxRJ09}8IV>9( z0-g3=kkAJ?fR853Msc>W@DL4*F5W3%y6pyS=M`a%RA{2bKkm$iP#gRhk7^X}5~|t0gOx1W=|cLo@ef8wyaH*9NBz># zKLpyOA&y&&G4_}eHvz8_*MqV2n&~^j?S>%Da3KT5D?zrkGj`)W5Jt6?2t>x^sKaKL zY&02zAB&+}we1(R9eJVT@3X7Vcs5bnjr~!smXp~2xW_E}CE=VI1%MY&ir}|Sui`#d zXs^4k4c(s2EByR`_<-flaP>p|<4)*@a2yy#9*ZLGR*6&I6xhK(5|Gc@Rx>TJ?vYW^ zH!&YV1o1R!c46$}-?nQoU})V9hsO`wtNzeZk-X)zG1iL05PzDG8SZUaJk&qRk} zd_}u()EZ#Gi>lN!fkC$~$Dj>FSKE)ne#VhO7$Q~T)^m(d&NQ%Dte2<}kOXQ1$}uMw zNWc4`Bp=PX510V(7{6xg(LSQW_Y3UkKt4~QCexr(+mYgMOlm_mGADBAi(up_FTXR# zm~AEg9;)2b@K%Y=A#oA#_LyrSGDC3y{QNR1agRI&tVVk*I?R^>xQy%eKuVxkV0mVw zi5L0qDcxo@QOA1krbvRl{sWmHyRkjQ$MlFYdD|YYnlHYBjWDcYW&ATY|Ast!$|{}b zrqO$@(5K*GHSwcgEGN#LJQ}8lf_jMP^1^Hh{3l-Fz$eJ=_X*3(i#jigzsLMUhaqle zr)y-_m0M$x+e($CO;8Ea3NqbY=k$iIpdWm{%Sh5LO61J9NQE&ByXQ2WFk`|^+1-CoyT5#H?%=h)3eg!~<*9u$4{MR#Z-k5|9ws_|*RKP*-F z+#m#~BLEgQ?CxWGRWKutUuHmmpMIY~R1`$lb%qq4OvqAvAt7Xcv>Ze{( zE^s3*Q=EP@FlDA(b%<6t&NP`%sVNaFev_^$1R(tnH0=4$aF#f&16?zRq4FyUWcl-i z&m6n>3I`d+SSF^yUkQB#BaQgyKd$TYPby69R7lLnD%5ej*nN;}={u!%jIhk!CVKgA zT14nS26c0ov=k4(|1}hRhq8ki&^oJng-TC-b$e*Yfm5=Oz-3f8TAysfGzbw0x;=dh zEqh0GM~#R(S~Vl%=ED$*TdLs6!f{u(ZaukdAdbi;$Rr|kRaX=O-K7I2#i^S&Z!w`& z*l9@OP(EI5z@7h(=&Si^;?e%`sI9TD+&78)#938fssh1u${s%yT~U2jC2RWR(G0eq z-*a(r@BctnEzjQYfCFCEtas~>uwMJ6QQSh)0RVth`Z6Bi?`|8<{Dt$=Ibl+UEO0x> zc1~SfH>VEsvE@BpKA~*OiC!RU>Vt02L6MQFX4zE(Y6;^FapvLIc!HqYLd~GS;Y-<% z&LCJ%kseeW7nUlj`bW!cVnCin;qJ24VQjC=p)VXy408)Sn=SB+x|oqa?)%)?*Oaln zT1)CFSxdnL#4_)Hr#yb+Cv4ZNcXX|fHbeUb7W`Ap|`*1%73jppAQWSA=91UA%m zvv6vsne#iI=kc_VZu$Jw^m6C0;fzcd_;dL1QUA@{V*wwc`>NR^;`Q4Te7J;HkbUm$ zZn*oI=Se|0A^O|CZJmB`U+bIdL+o`p#k@Aw@e@W*J3BJRyv4{V}#uV&#FNJ2MIz?ga?cGyMtSC7;T)@7h-x&S%^y0^FBc#Ja z;apML+mr6ro-G_6aN4w1^n)|44ad-HeQQDbhfV{hkC$8P-rS1~%D6P(h}cEZvU_m2`U?(IYfs861?N1GK~;EtzF^~_gwb8Gt{ds$KU*vMs*`$_?XS~jI~*` z+-RX4S{->~)o9w8gNPyDE%lL=JA$rAJv{Gd$@Rl8l)oK7l&iU-`2GTMz?OYc!x-Qo zw98EMkq09vKzTjXVa%1Cj)$TF1zpK$RxtFvCfza{A-YAc+mH^=2D+>J=4bQfKNJKW zh#_r^TVxxLnJ`0d=e?E~{>d%Yal&?ckbo8Vilp_mNEc0I1>k&DPqs`RZhJhpQ&j5c zpB=P>S&uP4#k?y}tyRsj%iWnIw-K@lkgW$x!FQO(m;jZLpT0fpJOlL=4h6w@S1>h; z`HzW1E$B*ogob$qY>#ERtU7j=k`Tlc2s$J{=iNBR6X511zC`ikp(AG@5V;5to+TZ1~?;J3C))um- z=h+Zos@oci9}5irJHbQt><^)iRJvNJZCbwmlEbF0C>G-SDs-v{!k*Q}hLI&mULVfFq=ZP>h3BOO2qsp5-#&1oY}+So8nHYH(+QDbP-%Wy^3=6$v%md0vR2-sX(*sf>xS{C>PQB` zf-|fxf}BpOhniz)tK~{_g7&kH^+gHi3P1l^_*1a#!p!#K%}ZjX$CTzb1_%jFq3(EG zopQ5Zn|rmmk@F=r>M9c(#^*F?i;0IRX}q_Gc+;OsuiplDLMM$nv>~HchXYP7{`%wi z++^`Knr}SNc>Kz%zxK2(;-bkLQUz%4q4ce5GPP?H12(+E$pfJl<3qv5SIsfZX45+MQ~Me%PdyZ$3k;cVpw4h+i1nsp6t^Ag@8$m40I`8x@m2 zVfZbY*Y3QD=Ex7budh#`by^=;b<&x?{DM9E!6JJhobkis#@-tm{7}Hy)SVJD--aT@ zwhFIW)v6p{`4N$_JN!K>ac=8kd)2IUz?5si$~89kCvmf?{5p2r_gVF1!;V?$NV-Ib z6!J7>%5rF&Cq6X&C%|nJ`A&Z%?Rvv4_S5W`e5}3^&(k{0inYWKP?Odx!3c_=WNhR* zp7=lvsoEOuB{d6s|BrBRiiacz~IJ@mI3l5Na(%e`x(^}Lyjyu5lP&ZD$S$;xHao#a?Tc8+xN2rosg_5d3IDxKlAHeqTc#qC4&g_2{W zuvFjpW7`}KL3st52f)(Aj8?z^7ms4|7mZG-AS6)*IM&A;3{pSfmm-k(RC|u?93}6U zvp1Ll9`bpz7Q>1zQTI{6{bjTbV3`8ZW>=m|XyrJ11)xsRY@`~CoR&nSt{`{XO%Ah2 z9U7<#&k=2wp)F0h?WEdz4#0p)lxU#;adhqRO#T0Vt}Dr1p)ob3=t9WmHoCZlx$ELm zQ9|S%bD2w2VslAKY|5R`g%G*qGK9(8a%VJ`+|6ZX-{1T5`+twK$2sqF-tX7z`FdVt zZR9yH(z%jz>xPaORNwH_Q$d zCFd;3_&F1Pr~e6xr$O5+JRf9J75M5pYCqfI(=|kg$kf8;u5snd%jbC?+}F!3bW>c` z9yt`X6u*9hwBRn>HswdQh-Ssy_$6>rA2Oc`XeD>e{ZdF9E9oW8E%b;kYF`plL_z7` zoZn(XKA}m@I`VejPi=i=!Y|MBS7gE;0{}zBEhaTav(F#FW6ja1DI6UI)%1$=tL}xt?>nM0r zWiMa|Sv72D+I2Y{{OvWp);|*c1z13AH>EThMm0sZZK`?u)`p-IQ%<+HRQ$GQ9gF>I zC>Q(p=ovY)Wc|s>*eg}SJ8^6ROL`i~(wlNPW@E?gFib`qZd#$yC7c(XDESGY$Z^IHHV%;Y>R$DVV+Ya?_7l=sI!)J2Y!hj!vb3Ht{IDH9@u zl;R!Uf2W&e?{*dx?(BHeST+u4+_Q;CP@IEo%eqXrgL)p(sOIHWF zl9IW-yj2KSoUAU*aupFg8=O~L!b8H_u_;}XC0@TXJiqld6`V_YkqyoFvaQ#<3=1tn zNyn<}#E8%K{8sz(wZAzpXMEd;lu}=@$*(rSXWFgP?j!u@iNLW^(H5v|PGY zef`ZTSkiV+p}cfe@kGUP`pOjU@IFuiY)+Q?y|YNR#$O{%(-DY zt};6EZCPVWZ7e?8f36+pPy5-?@x^P86uub8tZ%75JjC@z^|leis1-L`UL7UmmqANb zoJ+M7@L}wl;dB-0PBEq5bIC7ijj;>E(O0|x)&ExoVL7qPOd`r-t}7?AQIAG^#+3Ry zo|C!x`$AH2<=ICi0fES5pK7+_-aEv6dmh9%)>^Vvm+#;{kKq%pZg1SUG+Nl=6Zfi~ ze7rX<+a|Y2-*Ybfdidb?%FMDLS5v_hp7KF~d@acvrx)2vA>02*Qn;U$HOKXwi_MP3 z6UDKUQakyyO?4?!9Ahl>(qd4BO)ui->fzes-GZ3fX6N;?l6seSRWqx$)sG`gr1F-> zPR0j+(IwejkAy6|GrZ^`SO}(OzyYb0u5T~?h)?ROSF>-p`Z8e zxFzdEPbKJK^+L|oh#W-!Fl}&^-}^C_vvTV?J9A{Ek6uJ`_w>&Mtj)3d2fwn_e;yV$ zTN$MUNG$Lkxf}w=GMl!&hJGd`bx$@i({~Z z(PYqfK6CZl(t}s`t2+u23F8&yXSZ_y4o+h$*cYtp5#8a^vDMUyOariQzrcSEzW8P4 z0dk_v%s^V?hkudGA;IQoR(t8uMyZgSL7I9ouXbPF<!XCM;RjEgj z6YPr{EM_3{DmIVXAb|ZB3PRZD=1Y5GpZf12XurkWWrdQ%t-1xl9;f8)T!qDt0VCUr zYOX+mhA>?q_>S{_VDA^d(XJKd>jv1-27mPc8eCuzv#hOjfPMR64TLXW?(~){Cr;Ph zvRUT(>G^h9oU&o(LD-BlEQ8K?Y^-}JvRoj9#)5qK#|z2NvTF4KRjjDh{a7UlfgNta zxic}Z?%#+Ci5dgGD;;m;A_VJU;kxD#1W2M0l;jL@1}Euw=p#;aq8RDI+7Y-t;qOCh zZWjn@0mY6jj7U~^awoX;AapmyxWH%%aLl0SEV27LGZ9!{1BTdNUELWG!Ab^i4#yDw zqkyI;mCaP`w`j8<_{5X)c+B*;5W7N9cC`87rv+zG+JbVR-VHn0_bJ?l9;gW;EnK?_ znTa~U=HUDU)6t=^TdYhM# z&D-m1h@yXH=e>&HXh6)N8~ENO?OzPqH!P@gq^(VYZ^AJ0U7EanhAZ$x!A1^=&XYlM z=(&vecsv*rV>F0U8g2_{TK1{n5`-kIa`yZrU z2nhQ3=vU&W8yl)Gi0a0>2*fAx#VOzF#T|Z-w*8A=KzCb*^t|YnV789ej+?7zt~+)s zezmZ!qWa=F>V=gDm1+F(w+mZ625N8SUCN&tGwXzvZ*><_PJYL;`{_h2qw-7)kTmcq zd;J{PhPOOc-ZfhM4@RgyZg=fI%C?dJ;OyT5LhIrfQ;QEMwHx*8NLv8sY4N>E> z%F(dTp*g}U@q>AxLydA+SHfQpa)lGrab%%)A^q@7pq<}_AAf|}k8X`4j@}bXd_48d zHEqq7<8H&)hzX~)#&Mm7V)gAO=(wM>Lrj?likC=3?oW$wVguPMF6&J;ND09iN15(a0UGH%= z)1evRIaunEuFS^N4GIQBzqJT~@YvX6|9kniM3lq3{Jb058V&AC%&!cTPgUa2+XOS= z?26mk2eh>X!Ib0`L~k4Pn~Qw5r`;MGm8TXg z49PC2?R0u@J8YsC)Wt!^(7aL^du-(;@lJ`q&4U)59yWYOKm-$5oNUbF1Tw| zB74g+8!_7s|0Pr25!aV~y&&zW<_q@R{4QU?VzB!7F)@0nA8YaExv6-U)7=`3eKYqq zn!NP)|3NY=&*j`VaE9DzxdON3DA7G2L!z&~Cp^Y%j8b(`TKpk_lpb@}0_sX!VwB)6 zcwE+xa@2i*xj-MOYjAYLy&`%JRe|5 zG%=qnT(j-5$-R#q$g%ycF96YbD~T?-$-RLepZJwuA|=rI{_rc|c-pzX6vArpjCb(d zfjl~X2%VrnuqyLAiea^fM*l5|q|s{u*wdpVo!40NW_Z0rFz!T2*V^jCzLUV&X8M$Y`r1B#j^ zLjoo3L1=MIdqXa%zlYfxSBOa(v=RAX~;dFU(w%LVa!R=idy3hP5;Fk5}Ug7s6ZVp~gKfr6Ky6ltrC+Eu7Le;?s zUL5b+j{{X|BlqtrF3J^i+T&cL^q;mYjPEL>fUYJiu}Jt?9A&4)7DtHqkZC4ZJ|je~ zuF=xqKo0*8!mSroTWaU*U+KvsDYG{(^0ZHv-=L!&{VlArhkK=JeN!{~dS);RYYWSc z)ebIc7c68cp0Lb;@x2@JY@hQ@Q*6}sAk^3ndz4o#_Eu|tQVJRHb-fyBkT%|G7E~s( z=9yxDGx*2k$?vYR4DsddEIM-DUai?eTtWXz0Lue!q3K5Cnfwu`E!sSgCgL*E8Tw+Q zP5D==V9($}ezcc#`HM%V!l-WR!Fq(XpH2SYy9-_0v70%P`*5IAblJz}&|2DY^ zE&lSQgACh9gClPuTz=b9iMd9?c5HpFFx=?%C>q*3Xf&UmC}f!TT`cJtVmR^1bfv)y zIkPHwjOmW`p=d^7nD+b^5wQmmsBDDlle{B=M^&2!^J!-Hk$I`8?htd+ccb?AvgJP& z`ZabL#77!We$Wkx9xv9+=^WUpO4yWGrU zBW)y~RTdlSyk`)EF>^cKD;s7zDZ-sW_R8O<{R$U1l2atP{|Yh-+?vT)g$~rYuHjnC zxF7ONhtR_Oe|VNCpAyVQkKJPRtl?VVQbBLuI4Nc-+KSSH7l=&b3iisdZu1u4&*OA!wzr1A@H&hm(}0#a3gK;G_A? zb55MjegPQ~GZf~KZsj>+lAx^ni(onVch_}z(Zhfgt>^S$2iKVHmBQI_ z*Y)tLYu;BM@+Yu2X!09n#+8-$(?44y^_6_aE1m|=;3qo1)`(v8^xu1E6PPc{&`Q}E z=!thmvfO{lbM=-yMO$Ka|2?cZbApGj{#VIu;p9Ku+tax=_O8Qaq6-Q~lNMmDa*TKdc4GvMyM48+8>_*hNuOr8hqk{U%0N1sM=)_(`w+n*bFEI1jdx^0s_b0`4k+epAFO&Cacf!L$V3*mR! z15B@ztGTOJw!LH@bmP7^NNqU%*=|{XI3T0=rJ~8*?(c8^o#0=czLDSe`@3(|mF*X7 z-VInCa^&Xuc;RkZ;8dzz$0ZbML6NrdC(u+o{FGtJPbpWb>)zQnl-CP-&O4GI?a1uy%xFN_J$wD1mwC|+;(t_J$h6@@a@GJ#TRB~(|@`# z*j36O1vth;mNRenEQZq?_k#J%GqhitfF~_F; zWZpNIZ3S$JAml9WR8ldIl{Jr@Z4;5ONJ$xpDti zhvVaQsbeX9E?6RZZOZVdd|r4h=oQVpF8Yvnw{AInrj>@k*AH1KEr9fpaOkQuGj2^V z{+->F-Ag07hJQBNsryHJkoFoWe}l8mV`n!^y8b6xR7Bq;@&uPR>LQZseQBJOwZ3?N z;n($*E&s0`q?hCH#%YP=lk)Jy ziABq(1EA~LFPl#f?0+zyk*K7Ed%a-kEpU;8-s8G9a;?ROlN0Modd&V0zX;~O0EPK) zZcmn|!Zs#Gpn!TDmPFb=K#h>w zr+9&X94)|J8 z;ef~gD4apBSK?dp?8Q-%{8n6W^}=Eup5NVRlVt)olRBmD7ZFjTh-3B71`3CNGgPAi z0`bA%ul$nhRC(pv1HwoBoI{I&u@72RPSz_DF`AfJN0mJ^Na};fN!h(SH4?Hq;0K!& zR9{w~Y_OY8Taupo{E>C8A9nr$HS@v=?LLFVA^Ll(u5if_%-M@As^?w^r_yxdYom7u z%}(i11=7bS;*=ZPt(uK5*mU7i(4lPAPtlE+SHB66irgx%$kB!EPirkBCz*D?`J??( zA-=&7KXsm*a#X^=u9{R-){|Y9{LzDW?4T?8wVZo#97$ zhQG4pKd;#H8C&EkdZmXKj9a|AZ>ueqve(^^5~ZF9&h7p5dL5ic*trL*W`wZRuDlON zCmwb9;k9+A>o0$yNy>VoP+;tGzw8zI;UaI%4!TT;OG4%#nWM@;62b4oC}oPcdzda0 zz|%f7;)eK37-G-Fu7%b8^Km<`OjtSZm*i9ssqVj9&ksnkWo?u{B3A!{9DMS^8pf5^ zY%~MmCT8J-%LaA*C{E3OOwz2Qi)x`wAn9+2&9PT!Y9_`Ee*F(pekm>h{j^S2=0@h$)14XOQ!?<7q>7 zQt0uiIe$U^hr=ei|2~(;oe1W5bN&XYrd?j!;rN9nc5CAN@D)G`_{HG)QVGkZcwR)w zs_=GBq6=+1(N(d}_4xM?yZMQT&7|BNc++c5GtcsoheHsR#Ap-*X4k@2*iWOUw9s#^ z)<5UPoBYI`%nn>XDSz_A9XqZ%s*Sqj-G5^_nZL_}3vFH}v=nQGk$cAZGSw*0>y!sl zJZ=x|YG`LWYsRB%Gr?5mFL}y5G;|eMF&|PJa>iWrc-S)PEQzYrZ08#E!UFmoG|0+q zb?}*|YK^|D@Uq*s_W}^G!%0lXhU%OOHTeaHdYHRsTt}n zGRsW!6zql%?U^UA&P`wU>VSqC9Z~6FC_3E>HBP=VW$^j(m4zplwiKXO=xtoC z`K!@R+^m!FEX|#jvLM^Zn2P?C{e$lk^-U6!MiPy~JeCt|t^2}d=QR9-9{(%I?entX z4OA&hg**bDQum;__YYkzxi)NCMkGJESjcC2TeWO~;65C8`AkPCL?*%;{o^`IKABe# zlO|omlhZL1rN`L)${JC-6Q)9b&yMJ~|ND9`k(VFo?X4l>xBI$KNmt^s5;l_16mh1R zxXZPm%uLPq#*DG6_77k8nmG_Mll1R4SVPsKw^|o;Vz5};;nQv0#7tmVy480lyN*}z zn;v>kO_lo(QuYYf=zks^*$Ax&!T%)KT>6Gfcrz@X6!AVTgR}9wa}xX1yK{=~y*mUh zqCqUTZG=H+hCdCtFO>*^wCZEF4MCWv!A7A9+3Ass=;CPakg0%uAqAzaLZ1EE%a!OC zWyGLtoHLcBy>Dk3%;kZ!v<$dkBr|E=D$Gdkz!g{N5Fm+rWe($+tpg|M3)P=u>%2Zo zAXw65)U|$>S>hO@dBa;0Q^mn(4FaxFZbpqXdC(y2*kem596H?g)lID6)Zu%W^By>vwaJgOb%?1KuxhsMP!ldsBF%X&y`ud`Oy>Fy89Yx z5NEDLGt3LxgF z(K|C+jasCxm}6#0s1~>hS+@w$p-SlBdrDur?pxHsJ_Z@nV>#O}7rYIK+c~X3XFC|Z z8}PmuQuAEyF<|1igRqc-p`29>P}}cF*|vGnhz95~&UcONY*1NSU2CvCdr^h3!4Q|U zqH^t$X8O;};|;ipf(*`dBV_x&AFIo}*Y+r65~7b2Bv&Y{S1*zaXd}he(Z~jPqAaQT zOx|k-Iu;xL=*$f_2)8pNLYo(i93DfQQJdU!X1cl9I!dSNe-KER8)ZF0WvN>qmulKB zA#T(Hfx6pAAT zbYNZwDTqFQFbBbqJ+rVhK(O|F?lq1HN2g7?(PaI}^}8*qO45d?MGD~Er5*dEH$R7F z_RAs}-Foe`dWLF)p!q?DERGR_Ty7NvZ1%+yF(%Pu?eFlJ!Gh-_TMX5MAv(AJUw=u7t}ZZIBgdAtG=PvLD=y7QOcKU$_C+U*`WH$!Acl z2bS1j?l!jetRHv`xSgjNm3JE@0F;}Ah)dLJqVa4Y4mY3iNkGj zSkNh#UE!H;6_h4yP;!x?Dfs3#Mg?m=w+#V+Nt^ZgX3>=>?#BX=}$e3-risBZ? zUWfL6Ox~>gB-<`q2@61X_6rSuJ?|`Yivbcp z?*HJ*eIZG|sy)(UzgrwaG7xUR1{R=h9?oEr@|`+TBBO2uf|gp;=*!dHXkiK!$<7`i zt?!Qtgw>ZGmbH8z)F?B=CieB3O+z=p&-7>hombL$vdH$)L*NarOzbjp?Xlsc$uql> zkYsIi`-xPBCa~^`= zF8Ww9#oqdFLj*GX*pfx-6fx%%LKbDm)@RRt)cGDQ1N?1UvGSkGFJJF=2Wx-b4YBZ1 zwNY2;ApeSIEP%~Vbn$ASiJ_bQXY#HzkC(GMZ52+B<15p}?tzq~ydy5B<7x$z!HX1D zOpG9b@0!mZ_JqEm!FH^WL|;PEfjg&EAnXrae%=&Ow!65=>@A%J#z@=y%El^vL}LDb zu&vqTi1QVJrNPx)Xe1R$uixnv=h6yy+P`ZiP2MPUzIq1|PNMz~(r=1lXyHg!wg>nD zSj^gYhY8280T1ejub(9)wb2Iv#S9-7UVn?=%>{neUGQVZ;v2LxsFee}W=5}GPR>N` zqoqpZ=8x#zLCy~{<2t)ook4unG&EJNZ|z2N^`j$aeT~55Fi*6P$xrwECF0K@|3{q8 zxh~D>Y$2c^8U8FqYlTUH3EEDt4DM{ou8nM8!o6z}Hk`SRygqE4g144{VEwGA7N_!# zv#PzL%iBp8S2$hTUCW2O4yRXutjT)JYR=-QpVg=3<8xtPLYcH<^&FUWm{5(t>%@g2Wrtb z^6%jD3O{L4i4l`lNyjq!YV>Fb?Te?m0H5Iez1aKKc#`oU5ShH-g<3K9Jk&1BadZ8{ zvtrRcI$j}ch%>tl5qEbq{MDvx=5t2QF*9$au)`{|l9XF-Z)-F8a&)2(c-Bt8+wk1W z37E7=4w@g%R#1AlU?kKap$*(cTF{aZ>)XdF99okumTIh}+ZRP#Q##zdL1kpk3~Ftk zP0@_K5%;*`0IfvjFSm1&RTej=S(vGbZI(fK;6iXdZ6HIi%km4c^}C38lJ)oS6R$)@ zdmqtrG12%}nbDWe3JA`ddohZ+`8RfLY+t-sA{bw}_TWT8n{viu{l`J8(T#b% z52^8mLW0wBemByDt{!?Z4CnY9OjN249xXa%$#I zMIM+i%NnR}axfb{cZ+87w&PmS<$L!8lx1gc57$WR|2}^=`2;UG0_fr!*DG3nv^r}( zh&2;5xd@B5Jttp1a!`(neyD{mG%c75q#B}oPw*a#{2#>h-tO&<1;zK4rlH%bd(FSc zNB@k*%V~6dI{PDenIlT)V|_>6(>4)tXs+AQ51(fT^Rh27)!*MY=(5~Y6Tn8f+tVxD zs#`Uqhp5jWex}^vs`=?|T+Z#2SSyU4QH|I}RG6D)N=TA=c&e~-+$WzwaY?S;m`^97 z)l2S;UedH3!B@QWK731jkHp39W#+y2n0)zAHqfvvfG2LIRNun-(`AEu25P&%CrMEB ziwd{1y-dZ&=S9zq=DzJWJD{tPzMs64Fm;-BeM;NPp9QNM9q}ny{pfRWY|m!cGN{h z8(lWeiLXv_-XayX?q1I;x&tvk~Sw76_$mytf0cfRoK@udS zx5!xnSQEAAkrDG(-&GsxW{K_x6?gnNATD*B?38};Cj!%{UBB;t#&jWTT|dn2sH`g$Y_80rfvE}k z5j5>u$9EZCzrkpX&^Im!dhWLUZ47-|2C7(#;50~@HNPVD{*7}X88A>5R7HG! zjZgrbg<0T(&3(F&?CQd&E&{&F-NBN1M_m;1dt_MPBu_wBo+Efg;1ohmB!}Pe)r`Oq z-F6ge&+{T-07qvW)2(uDl?Z4c&yL4`DU;nt=Oc4GKN{XUNH!DP$mbU({gRYm6}Ut+ z%7S6R{=xjnB|Owod%y6aE>w$N4c$!_3$48{=fkx40+Eo<(g7ID=2SeLJ8&7Dd&*Ff z@_3_f@O9AOH2NuU))Zq_F!g&mog?*kbC?Q*f#?5@YGY)hqXh5q3Qi4Vh%KX=$kMo< zbw;aYOM+9GzUyPhuJ!%%Jb#{BXhF2)owFiLL51`3Yc2lmveGwUlNxxH$|@$G-9T&Y zcQ5UWx+s}i20Nh3BfTG=aA#ZHq`~Fv!>qK_kr=}U*jInfin7P&{yi!^?{#XuWa{#| zCXB~shUn2%tLYq2>}XK7AoR*N$L(7QuvuGGH@e}sM_&koiWgBWFI6`Lo=w%X`bglH?!BQ$db@0KOK^yq))BcYV36|uSRHkE{mef{}66)$fmpGw-1yWRY}Ca@olEN_QV(Z_dM~b%12tq)TVxClTv~bX_K)SOA0^CdszLXO3DXpOILgy@0d=+( z{V=p@tj_!dbl=`(QkB3m$SNBcQ@Q?$`tjVye@g?3AwjQ^_jC_jv!KpW=ysl-?<>CH zj|E*-`Vf)S%GVkZ2)ScThDMgtq#Nn;UDg@7ioa%D{Zo@J8A|-q6s0W2t$L`1l*QjF zk5oT&L2%@1UBqZ-H`X;-%+Y!g z^%te@k1!0qJxF06C|Pl-4fMgn2G*JxpG4FFv)1oqA%{LFe^s2CK*H?&;YSa zRJYU*=mVCMO6LZ#UilBwj#M77HGCty%tw>BV*p~-+lv8UKOqKIx6Nti!5G8C=4`>5 zxT`Yy@Zp~>z{-nI65jNW+g~RG^dcsHRS9I7cLavohg6zt;h9@z*DJ?E5AJC`OfSvO zb^D%|Qw+l@IL>b!$@;APwauh^cTPXB;Gg13jDq2e>nAxG;-9i~Eg?Joom85`!8CVA zBbm<+s%WAKDLns!M4rd|2-6{RNg@~9(F4`J<++Rb?~9+rhp6o&ao}6@1rg{Tt5|hk z19?~ysgD|X0l^p6Ai2*`7!k0b+_!GX4k}Ss83Lq~81fVwGDu%p@+f(Uau1{R#vhlUd9 zaWC%0h$9k&29Z!6# z6`uDBDoc}#xTp*IW4GCx2HQ9#aIsF%_3y>Y)MuW0`sb1^?DN*K`sTR!6V5SE8Pfiv zzDXr6_yt%1{Fhi~=~xauIr#3rpH-2RL03IY`d!2SAa~m3t^3ONgleO%QcvIQhUz(8 zl~YD=n{yUG{3ivVCW92T(22dr33bwL5oN5W^gd~9=xZNQ;zYB7G4tHk<~<1*;SDnk zqxNy4(Q7zW#!-Lo*ZP^UTLuBHK93cS;BO48A5N6CzZ0E^M3w#h+I;J5y8QDBPvyqL z_n(|aJaH%p0vv2AhvPvT<`nM2cg3}rTScos=h@m{`w=hQ-M`h>$_Avv6h(c~HnDy|VBfQU48=QtzF_ z=yTDdLv1DTh2K)MAu|jzmPOfrTWkLPLd!ADn`X!R?}peSvT$`z*$8+-I6hPkiWy`h z=Hf3M(he)VOF)i@FC5ecp7QU@q|ck(ANE*ITI^nTcQ`57dX|}B9o;jTA;JN}t|~U^ zsI-1zDXzJHJE-B3U%2o_TP1y)yFpGMyX*?NkIV7++K0#TQwA?b&H-5FkC=BuXfwy4 z_}p(??X$w!dyoI+&xIb{gWuF#9G9=Y(Qc97D6<^Cq4UpMFgLv7HHV%2n!E%{B967N zpX8tV>}UGy-UU|Z#94Q54c#AKRQiiIZ(ealAiIOx;IWX>12x^*>JxK|bpw%rwq z*)t7-@A);jT2?+&$7;Tf;ClTu-Vn)^r{YMIuIv&>zJ(>83~BlKVef*IzWM&^P@5yg zlScl9uww})CbOhFMMK*{Hc{f+Nd9cuR0KYr7k%6*VuFk1TPL;?lRs*_^W{fN?gaWm z+L_%OAO~tlZI6B8wDF`&?P)URa`t#_TfS7v%a!*_HugO+SGR956VB#mpJ||{%I~H) zU1S9wmXEwg?Kj)EvZX$1<>e6RR2R_wr#Rn&fK`Ui{6~ZDnh+^znRs3&eXF1?rTMxF z4fgWkExm1hY}|sW+=NTFn)sQ^m&T3RX*!9=#h>1Zik^jhLUKj+7w(WXF_VIuVjQRU znxjHo;@K{i5fYVrKEwswYtskB=hcfS^hNCg0rdbfPrca<>pip4qRmYwww%;~M;sO3 zx4=mOLM!bHAsb{_(x9rGOX%JjdP@HV?Rp3*mlz^#)*Sn}K6*C!gup-Pp$>XRpxQu? zXyf&%k=sp|vUTzcCOW=2E{O7MoH|`&eODz$Z~Gdy#}1+-LDq6*@u(*CeZvegKdV_j z8TARR{N!7ll&HO~y|={3v9U$%8nO=VA1o9Fv5(A2;MawZI|xmlC}ij5-hh?{u4)jg zkmMN!P6IB;zM-7+f~mGHWvqsfu6(c529>P>~MzH-M#<>GX=wE@Bro- z12}{Z95qR?Rzy9P-u6;@iX0>uZW76gIlh;(Oon-(*bg!*QInesAk8k>@Jm8`s@9$; z>HVpXccKIikh75R?Y6w+4&X6SPG+Xx;Tsx>PFB)|Q&m@d@bcX8cv73cuc2K(TDO>Lvy_&Pg~=Kw1AydVnk?Y0|msJdAgA+1aRk8@f#?+ESnKbJvliz76)yi5?Jts6jo6g4_>|ZpG2^ZMYI~dWO{eBY zhA*&+c$H`bQYRqF;CMBp6}#-~!aGu`mQ}n^ToMx9=msl^$V@Vl@p$b-JZJM7$v&Du zx7vs>y1M|(_QWygq8jFQfGWf%-bKk*38UK-<vi5zSV0vN)boI`IxMh+^khL=yjKxp3fh-WFb3^{EO|*;h6f`EgLPTgedJneL!( z8a=TKUySpbrMubEzX{53}4~#{yV>HZHGRM2KgRIuB?+;%B%LjmU#6A9Hn!j+A&BVCB9$3q1sAqz`Vi*qj?F z$2!X zQYW+D$>N4Ved>!FiJ94wC|=+nUXxXboP&T*+R~ZuW-mGX?efEi zq6#fuNvnkfOTP(fR;B$LFGaJiMF>6c0@^nz{Ab@OBXLf za(a_`x0lrC&>Psb6Xyl?m81F$qo_^vk(%>1~6dP%~O|~LXy}4Zsw{&CWZU^X!oQGw(lD za}mtZ%s#J}zE@v1y3{4K=&RidAE_s}s>vu?eSXPax%hae#pB0!8+{MrH~~_GCK94oDaEyPcR?1XmrD_I_{H$iC$7% zbW$aHAKMev&5c&z-v-8dB`0ctal@kd=gEy-z!W3fMIg-wb-e`B+O_2Y*^-edXj_f|6F`SrK3S*kA8aaxL(1n(x1 zeyx6-seU^asLwf*Y`D0~S1BEL>R>ytsNU-z<(O}WrdYo{o4AUWdY)`Vi`-nej^|KEEZ$`SgcEvS6shDk2Z^ zW(lWq{Y61nb9U1TB`9JYVujj%CVV3`_wxC*^~9>dm;7;=D*n7d0>wIW9Tre%2rbb! zbYx_C_>A~!Pz8|x-2Ctyg_jB)1GGbi;T!Q(*vktYAc@ztz6=kkX+ZyZ58=$P?9vnw=Xa1sL7G zKROW9s^iaSK}>_xpa0{2qI0iM@%$BBEvoE8={>|eqfBe?QA=0G=jhnhnFjW8>RRbd zM1^LK!_Mu(Uo#VKCoI1dANs|=MMNamCxj;rjkgrcZ>9Y%?N3+p{Lx1&-jPvU8#L%E zRqe7JSkqyN@Ur94Qu_w0I=P411Kgi&A3c4c#MiI6eo-jw7^(F$LG}L3&vMwjJgbIS zbo4z%dcoUU**t4ldEQb)#ldhb{iOL}O|DbvKalfg=vzMwMWL!wo70ItW-!-NZ_}?B zsU35%TJ^I?m9_jX^<7bE>tnSQ{zC=))Yln%#{1(#(`Dk-BYnPy!;zsut8ag6Jyz?p z;Hl^r8a0S)NXdE0pr8}Ne~-2XZWp_XLaj-R}Jc zya}#a<3Z+uir1J4x20KSt&~F>lG}~kcEb-x?PyL-f+FW%O#eC~{n_)$%i#Y(#!{9m zSv;RSwsd})uUgMdk;jed1n1za7T>{+#ioz{6qz$!SPl=ccZPVe-)JxikrG;O^sY7PNq)Oc{69 zIPf3Jn6WOd$D{eT3%0#^QSxwl$qf)$wFxGleEO!!BW9X@{}dXm$o4?~Gj9U@JQs#* zFEqnWvH|s{U$1D$p*X{52W+8Ntj@@0h$s(!+E+Mv7hg^Gs;60UYt7to24l`eKD$0U zv5S{@{m6MZB2ZhzOFjFGT%@kCAH;KYD`DuY7^SLJ6d5Lv&q_~Jg2wL&p_{~-&xR90 zGT&Fs)yA2WUBP*ya^tFh;J!i8u=Zqh;^?^sN6{wV3;~@7Rnk5Lt;NYZzmXi%ZJuX_uG zeKA;9Wmsz^3r_7T>sOxqU~c%6u{a9sWZg!5dBuP%%_4)}xf0On-ix2-fNhNAV>&He z4j7Sr*kLNhMK#`Ht{`ijFA%i}j$V{lRr?~zX(QVDo6yrl+=8EqlW) zXOmh);)7$nbB9)oiFw~WhKbT@*$=Jv=j#y+tJZY0w|6IhDE_p)v{3&zeY|@>R%fC4 zDnVVlkJE3_NiY7sbp{bNNne#6OrMiERvowH;AEXD-!D&aU0y$4@e;Luhns6~Mcr1d zemddqW{JS^f~w#p&f8?7qnlaVU?D|5eJ0LpV6IZ_Neu%TriYu714g`Vro)b}ex2Ke zecVR;H54={3i~TlCBDS%!q{fAp=#uv+m{`VU9Bj;C@II0Qb%Q2Hb#*oxrP9$4czMl*)i?AvSr(#Pca>c>8!n z`}1K#aOUGDt&Fb+IA<38QC;zy*M4ICt=Hedz@qBDq35~TbbVy2kZVfZ2K=d%%{XaN zTjO@(uYdxr;g~k(=)Vs2Z`-<&+;&}OrZWv_I$vc{bN|?n1lbN-r&-p%5)b(*Jo>5Z zTm;5qP@E}P;cR0qVPh_KdXl3-x+tTVsD!gs>68Z4ywXbxAEPgE}~ ztKPheBPMn4Zpp*3C`hB7RU_~B0l50PK6(^xC)*KG%+gSHAG}3*R)O+&Fs8rDOxhht zb9qAKgq&mdCb}7ScQfCT$G(rD8@4*5blWIqn4Q15SG@uS=#@^tB+K4S+}xRZ)T$1c zZYze}t^|u@9-Tc25taGNL64_n>su>J|I7yxwm)v>JV=UMDDyipgKM~E^V_}as8%pd z+o~HU5ahDg09g&9Qd07kHDY5S-E?*R9I5POVC-Oi28g$dyL@&0)O z(JKVACt^Ew{t#}923~+U$*OYFvte|d> z44%sZ5K|NWW7r8`UIJ0<_0;C?(mNE%>M5nF3}&CpS=8S|&l=yPtmI1Mh@~3K0Jbr@7h&4?ay5g7+IY7{>o4F==8gH}Ze)-f)!#yxP3bVAN638SBvDn}K6JWSCMHK8jO43@jV=`=6Y!PipKv z9sCRN=WI9A_1!c{V#uTFYkS|`(Ch}L@Q0fVMp04%!VN>%yqn_4rJeqCl5zMj*T?%| zdi6YX<)fV>o`#*q8vnYchNgE3)BOK?-FLJH9_Oe2x*NHleZA8!({4Ri;*G|YspOE* zZXF%j2;>_#<(q@yi)mE~&X%j;(O;C(of{g-3@$sBG5rX^Q1CSElM7!R2-7JXPk25?8;-BivRI&Q?Gc;=p#kpw>c|FeurJTtP*m1JxGIHgiPi9c00{YE>=6u5f zbX6@SI+rtzARI&nLb1a1jHAh~9ywz9!fv*WQTUAfrAgl{h*LT>^L(6vIwnuR?s58a z`E?0aZuY_Ddq!xUHPJaA0fvbCSr zLLL-9?i|&hUEhTbGU%Gq+N@UZXy6aw9y}V^kB3t?eb0{jr3n3@Zb~2+%bMy0e%Rt! ze}v~?dp`9Vd6({B{kzULio9nINWYxN*N)K?P?I=n{O;vkTk~FHW?o zpL~%u9=`zKFcB9&J#{SzZGYk*5?C+nL#K1~7({2s6U&RFnjktdO&sI$R^L)1@?Z^n z(9}3c~YResp;eQZZ9AuskHij5*UT*9jf#pLP+@ZS&nv>wn zBynVS#=a=EmZiZt6%ZVn36YTgz;V${E4h4%7m1Qz1MyevMko~e(>peYba-AzgcCD1 z`q(!=M%SNt)GtjQDVGq#4@yCn*z%XeEhuZBerl$UFN^J(V_^`FG3FdFN|woyZ-~X@ zIcD;sE`7?m!I5>^Irwo+jf4N-08C54O95O0!N&=~A?DKR_)h029v~oKfm8e!o}KFZ zNsTyQUmOx*Cru$u2j;3&cbsp~S0!I65GJPx{mzfWpJJo?q(V9b^fu6|oMlv#09v2W zv@k);aXu)~+OJ0R&F4TIGI8~IuQ?lygeHB02FFNqVS7aKyl zM|NZNNU-`)@!k4FV+w6J*I1^2gW{MxEKJ+A#3-y10H*e=mWFshYbc|a3g@Km=ry4+ zz0AQ(f`rhoegpjE@oetHkaVN1o;Dz{dkjI5rI|b1)2Wm3gA);6rFQQmL%Cr4?Rg|hlu^S1w`Gxgg8zMMN==OGZ~4|@d~BP1!`;xLiqcm$c&>PE{#%(0?x}DF}4`t zMH>rp2;XASCw?%+IRy*Lv2h4mZqhINLy?jIOsY6h6Omb~7-H^-W%aq#$(Pq#!r9+A zF=`h!Cfa$q#>XcWVY}JRoIb1$bGVgaO1{-P{HhIpF3H+248y6lD1x7up{eW@m`lJ3 zF>w{&Mop6Ez8;LG!PzzezJN&%OiiihHqS7GZ+)qgy{ur*9Z$X?M0{fPIgTR>n`Mzp zU;&2Bp%YA^J9ep?jNgni2t4g_-*!Box=XafWeVBC{)2ezI^oq8Ex~@=f}h@R@RqIA zIZ#{<;teG!E&5v|g|=2!>%Xo57ysg?Cuqc{6;lm;TG_yG;gpI`Bo7U_i0>S%jn9N3 zXy1z@7ZNl8hi3^lRP0|yL6%b(-v`_uJPO(GEuzXv$hoTZ^Ao9z)ps#v_>Z=ng4_<0#Z_f5JZFIAh+W+G zJWYtmcdYoU=!8s*vAfl)W)xeOqooQ>738479Tg=(p=NBxJ7Iq&r}{%{Zs3#j3M3^~ ziR%ky-aWG{MP2K0Jd8iPh#Ml_^AeV0L2SCJ<4ZEk)urzmuz7&EdLFXcRa;wb0H=5P5JKq z9n4H_)wkmfUUt@lAyvRx=(^ImA22>0_-!!Z8rw%j3_=impAu^jPUrr2^cn4ag4#s5 zt(ZUP-j^=yt#Mx!H?$#aj>H;GrV!x!w1vBlpSMsXu z5Zx~9;?ppQ@4s$vyL_FXDh!~@O^|h7KxqN@!*Kl142f3g2#ZdFbHF^0=(OjP=%KUl zFAy{gZNb_`kSb5|+GH)5ODqvIEC&d7w#1pCoVM;RUSo0@OG!%cIHF@0c(4BgeD;?1 zC$A+o|GCv~IYG9W#LX?zfNnZ!HNBB@yHSM@`*^@&bvIV*Zx95Bx3Z9E$N8-jVwy?> zRIwE6RHxTQt%w*D#Y*5fhx0OZXaQ|ZG^lOjL=5Q_I5j7>3*{>`g99|4I z|MMRN`KQ$5aERcB#^%5y^IKT6r)LVPqMwc(J-nzFZ>{RtkBK_TB@NlBLKP+%E|y8J z=|=3(%QsW9B-hMKJ1$9lA^aV_ zDanBiN`|Gya+&6s_{w7X>tlOEeuv=$9j_OaM21)eGmdZ9^l(lo;R-n-BPl_4Xow>X zg=#AbMjdRu;(&K4VcI3h#1DCh3eSnyF~vFCJgU1ucBbULdx$u>VhwTVxx&I_w0}xv+^n|F^*gEV zep3dk>bWsY>3l%%!d?ofx{&y)F$f1 zD;=8%%!L<4VV0M@zjcd0Ne=VL4CvswU8B2pv+MTK3$+}Lg^hjpX>x7yeUdD+S9>!L z-1S@R!n8|b>WgpclhIC_HZnt#?;`w>XLmpA$o!lpc9+KIR=f=3qL;#Rv*Aur;wMy6 zdK-C|Kir($h3A!uxM5b+iK;L&>g6i=)RC0?p&7GIf`=l}GVk1^EWDlpwc_z21durt z?|PKUZ;7iz^Jz@y-`nEdBSie>mew_{L5b-iY9g^lOTl5Rp#fNBJ^AWrtqQx58St}h ziRsI9d;%7MCySli;KD!>Ibyk@J@5+MN-0=n&Jo{PP9mx?)rxnMT7Rc*0X)ZZWR}u( zD~+Qdb9_kC;5hZK>$amr2|-o=7d(usX%t3tllZM+c)Rpj=#~yr*3TdFhqgPYKGwy> zq=G*3I@RtMmHfWpK1;9c*P>2ZXoQdYE5;3xS)FHiTb);0WIW$iAme*{qbT9J|Z>s@DjdQ#h0uKiMO!soR zBqfpQyWk~jkB0AKVaU085&P$@(|URqark^U%1GZV>&7=;ER7Mg1-la!s_fsg;AJ%1 z%-o@}lxb;r<#l44x@v2TvP*^}OpYh^7i;NU^qYpulSKX7&A(fq^G`2#Ji@?*X(_lh zlq9WTS5r`klr^*g+bEZGX`CE7+3sd!C!YoM3=TwqK!D@OHI3;sw%QVz;Y5~Cj|6>CpXL!{lI)g22%zRDF$T92*3KkrnGZTGAAK>cYM%1#Y#fad zA)4@KNcpE&5Tyc#%kZ)r67Wp*%jb}GN3t1GWTxH2o2PlSBf{NWQ(w;YuOP+NZ%I0u z3AubYy7dRQ*$M)BKc8swylaXV?qC^JpXofhw@`H*{B8G{t-To?yVcGrdM@V;K-4Cd za_IRVm31$a<~TE1f(jRF+k6L<)k)>pIR%fA;Cxaj42EzbjOU)h_eqI}v+Ij7Q1{sl}r= zDh~!~=h$>AZWf~X`_XOsF4HUXZL8Nk72fq}?gac~Ckp&FN5h$TK_qrHqnq2Y`s`pmxW~DioS8R$F=Q~7etB)W*b#igS?irL0JVfxgCRKt+Va9T7O>n zDqqrl$DZlKMt;qY%J^o6Pl9p3#+hEf8Z=!K{o)OGFbphInG3&n4Pw?gV!(2N>4zA) zTHGOI;X~|TDUSUwq`51;3yA6_nEt~r5=XGh>3FvDfH``bd^TffD9-{ZM}vn!cU^AF zv33|0duXr7iqBNH?_qi##$iYIch8!{hDmIS28CEG3gh<7+hvZ_uC?5&>pMPd7FjvP zC*AW^Z6>?5O+I%yIH`7si3QP&N{QL&M6b2-JldmMVYR`}PQe`qT7T5tRCcX>G-&_! z-pU_GozF`AVjREePmzeXq_(L@&>Gzhh10(39E!Swf7@D9&T-1L3wjP3UEBZBJ-Nn( z{)5D6-JG|5A$U>8da!PcPvypq$@&EGcGE+Zfki(RwcflU*Bf+GcO8j28&TvMMwV5f zaVxb2%F^hw`EUTzAL-K-3V=KKV8TqW+A7Bs^%j059ac`>{H&7@Nt4OJeATS(%5{VG z9LqR6II<SeVCKAqeUhVBa3 z<>~uY$JlZ12AB|fh@L{6J!8^}L*{uXXB&h@uU@7uYVs~L5Umg5pI~NB#riDu!12_M zT_=-NY~nv6g}>&;1#`JL@OTpx{x{|zWK!EEGbzeGaLk*Re>uI8t*#iyJ986FF%n+t zv$@y0s411H{aKQ0rfTy=Yzx5Ozr5;756B?D5g)Jd33(JyG>BntvI-2g}~;**v41PHM>o%ieXVq)jo+OKXzr1wY;OZWYrTjIx?#g*|_Jv?IE zzgbR^24{p?{hQpG#O;UwL6S0FMV=hpbX%)>`oiD;PI7Ph=CY__rZ}9({vaLr0Bn-m zzXedHRZi z6GAMPe`3A#IDLbC!iic20v4SSM-SJ822Pnpl;2$3g=`yK|NGJceU(x=N8LL9@uvYA zr*aAx=6pMV<^CW+EeTnzmWiQ@*q&~}ppc7voZE$=t*{1J?tgY40$KSpF_zG+&w-&A zgam$J6ge#~r!(sZ)XfL=|AWk%WW(1JDFv9XT87`n*39QHXH))nJ~1e2G(^`27i(Ox zF|z%DA+BK)IvvB^TPs^%a{1vVrgHsED0`hTvY2Va4krfjbNs&5hNxdKo}?mox!ldd z-!J_95*!jhy851&gL#YZiV=&9#Ry%GSRd=TCRus63PCm@;ewGpUJk3O5Tp0c346&`^&ojYS<+_nXypM1pC zp~Pz`lb^*tT!aL3#2SvH;us&NN~%Ty(}4k%#&k$ddps9R;1?lPC;!o0uAxQRQ0C(t4ApP#KCnf z1;HjXauZ7DeiC<0dHfLWPJv8|&Cr^J;7rXeJC6MKY_wbuRdS5DZlKtzDhY}uvSz@M z>#i>fxrvzmq38+^flXryicgulvH>BtP{ew)QD68DFpDkCSy4bn*yBYwnj9&TfgWPM zWjHrF!8T@-jZJ|#N+n_9IL}`)<0@G(Q%gOZq$KFI9;M>+U>NC6+_l+A0cV_dJS(|M zLCJ!roXQi7FE8yxJ<{j~l(sojRbe9`92LQSg1H_Sd&wX;l4T@z*hK9EAxAEpnJdaw z@j-IoUsvsG)d}z*nY(yx(z183*!s8-F|%}rdZI-X_`%xQ!;RsYkxL`2eP$N(5;7>s z{~(9UA-}sNDFujLsMWc$+50OYwrY&&Og>e<)|owgLas!1oSorw>RON33)@(yE_GGF zkvr)rgj!D3VF<)Pd|;2nnAk+hIZL8XYg-3=Y#E_#n&l)f8Hia>`76}bzwbItarF4EvwK20ObJtwCFZL0N{t?oa zoD5ASx%pT45kw~|(E$X5PkvW8P-v?0DT~3mnkfK<2=~H*K*R<*qme~s42n3X#tD}~ zK<^PGNegCmVf39K0+D+igbrr>vh7!qd^!ced82&NW9drx#kTtfT(I4%1-#o=BzgnQ z<>xqYIHy`2%~^s%7j^tLU{}OfW`{+bzEjo>Yucf)bKi*<8?neyG9*Bk9pc}Z;{C?? z0=ks)*S(sr9i4kWQ%IicjN$gU6qD2c?#2ogLh*(kg40yG1<4o)WkOw(E{g*vYBd6S zbvO5oDxbvikTB<+M)n825%}`*g9#ye5deIt z3}`&|p1=#CHO!hBcgyf*+!o)0J2L@#H;%K1u!I{iR4ab2U?E|B@WE;?bPq#O zOW-V)y_F`5^iZKA@&GV%c-=Fz7Ml!U(I;jQ6zylQ@T7tqbybw;#rdQ(peJ~77nYA* z1OpG3RFu!WIT#A_hpfaz$*=+mP|O8KM9fsr)2h+)c%^5JJEjG^yx)l6?ArHX;T9Ku zoZ~`{0p+J?%I>7gHA~o7?$t5D=(ohY^yk~W#O>?P zJ#K%8%XAA#B2|%>TTYWCshabt48kue~RQ1 zn7-eRK_usDcG@@>1E0NQ4LOLCWYU0Q-gf`S`oah+h4-&u0<6>y48-|-sP5%u;-z0@ zSB@oTk4&&O6dUFI;X;fB=Fw-TxZup&21!~8D_y*}aO$RJLPv<*E`}Xwx4=g4km3^} zS>-tp!A-y>A>xWu$r8(y-DS%jSib)Vj5+w2HJ-Y&%;tI(GHynU+Av2+avBSBkAEA- zK}TwKWw!R)zSViJ^QiIk%6e?rxLejPJ&0xdRWj+mvsn zS;{v`E-;*2hut7wm9alX0VTRB^FA*Z00*;eoedgk@YvWVCjS!|YcCRbrNIDl&+j2_7OESC;a#j0S1Yef@P?RUzK#|MPH1oYZk+tQ)lJ!|5c#zaef8AuR(bGA?rd}Dkl;2u zpg07ZzB_$4?($tD$X^uLbs0YX53&g+(<)nsu22B_5|?a(EDSdL3{G>eS#JGv=S4_o zz%m2>cY|v%!xtR8R6cQy^j4JX1B6&kOEFT*Ac1tbE$8GGpJj(~7%*>~1@5^#ao*U$ zO`!F%Kv7C#->H&e4Pan7dL2$R&`mk5{447T4_t^o$w%2;-P$R=1-VUugRgF{u+ewm z-j8^1SJOZ*u*p~J8AVN(%0tBukFyoeHfXIrdY~RaRMxhl(@RrntmvViGRcNN^zIeM zKVCbM@*r-UZ&B$8#4o{|G4yc2FGMd_rRs}i7~IypG|(VfKQVQvI9<3|wW(jtUFE@| z;N6sL9_+|^xf98qk1P2h!*ywihX=Uz?4BzyZ-$@-3SH2-weG|PHshB^ZEI0_bFt1y;c7qm_C%l9KLSYNm2 zNx3+du9hotNS$xNN@IyJ^e&|GkeJ5Q!9Z_Hv{(&lhB^sp%mT^W_>y=D00yJk$Q z^v3n$F2Vfp=&j1%Us5YW-gc3K_Jz6$Ko*8SC_ZWW9O}lu{%-XMHa;spPPsSi zq0y^HrwxSZT78;-!%e~spD-e(wa?SXn(}xLd+dKpsO`o_9QzLvR_o>KiIn?n#pFEM zO`1$IL4`%#pn1`w8P@8Dbk+7qON1@viK%8254I3Sb8hZOT5}ifSq2FEIhJ^S@TMM| z(K+tCTuQbgAzrw{vRts;$4Sz$Plh6ke=Xbc7P=zREc0{sVeQ1e8z=^R+_X8gBSrWD z6|%Xoh%T!gVFl*ZMrfS4gmXPLuZn+iyE@xkh6cQfoJD&mz*gWSBTD@v=3W zeduq->KV0KW@_pW1N)ckC89UuNT>aE+`ba}`CqpaYzo%i2tPGtNx0P%@PxeE%>eFp zr4}V0zx}aIUJftFho+wZwrpM{_B~C`i3H^n;qP?)2y@@_f0V6f$MNoSINR0{POo?s zC9!;=S@7{g<@CF`AuB$>9rj0we%APRWvq5)a0vf$F7fgf^`B3Xfc-08u-FyIyT_;vQWaSDTGBRZI#*>F-t){e2|ot1MLwlq*AJ$1XoNa%-kVS~ZOxdFGx;93c6&g)78f~?9@4rz!_fy+N!Dy+AkzaQx^Oi9N$R(WHl)>rp4w?0 zQ9@JAJXOgp7=2(#Gv3D69NLdul8?b;WI%u$mC`>iZ;kw2{BtKYOuxRlni_uWs2-0Tl>#z zFa39Zl-ejK zsltZ&^CI8!3bZ!O|JF{9#h8B{8SU%jK3~^Oe$wa{^U|p!bSS!HHLgz_(l@@n z@yw$7=;$fBNZUrLzrp92uWQ_M+apuczph~)yfZM{xZvM}-ZG%+qfSl5xlw$ZC!g;|A!>TNiq;M5n6}B-P{HUGiAwES?DNwn^c>7(Nb;kF zmqw1-Tnjm(rrkmnxgIwfp5l6;8!h_h^{!}s!f`lpyY|xew)j(_fV(j3>6JuB{JnW- z^c%4+2YRA+VskXgFhC9|UtZlRgp!yHhwXAX5;ZZQr}Fp22^ z*im51=&kEoX)BYfp;wS5y&a67Txk=_VKt=yF%Jd3M(LZxLBuoAVN|aSt1U*gB;OG! zm=Ah%cKcyo$;FDWD7B`XGr?8IZa^m_YAhgSkduaSRJz#gI0)y+&w9kg>XW3zV*lbx z_Db9!9n$fDZF2I)%cVrz^Ar*5j>c>jtmKgTT3%ywkJH&~A&&kAtn z`UxEYqVMwhT4^DJbWD2@8Et?OUdoL-Y727&?ILyKWIpdS#FL37&gO+yp_l`Q{=7E zzdaONJ>T8w(wRe+D6*tHGuKs=F5@O~%x>Te!|D8gkjSjRWLAJ`@@u(hC|k)hn`JJo z7ti{vlF-48ZO>@M#}z(6L~%amW4AOzf>HXR15~;uyRuQwVh4@rPN_(GcU)xl;SC<@ zBeh2uu5*J4owyKu6|6?ykPU1?=FvQd4D|eWom56Ut;){BPvYo+599ur*E6^^7Rge) zyPVB} z**K=R;{cBkzl1Dp9Pc@lpCF8;7GMU&+WBAy7=9UZ0lbzAtVXtmrO;Gc2iIkR9q5Gqojmn?B=wRyflL#S~?w*&jNLtng)1!N2=@JxePxjPnER zo+noE{iq%AQ!n;3W+!fu2R{WEJpA6SZLAk>|4%|$k>rZrX9=wbuWk@-H^_(vK3Y2uOfE+dt``B%MD98X`Ker^G|R!;Lqv(2_cI&A$Z~ABQwt>lHl?GIz9OVvNLLWbY6E^&&m|V( z%s0mD%1%ZhI$MO~?|s-wt)v`_d+9nQO&F0@0R-1Jx7bN;4Qba#DNq} zk#zhxZq0}%ad~K^hW2cF=WffCBqOWlywda$;QPPhbcXO~;58DDWw=j{(^XidXHDf=Vd6Ll3MhO1I+{fhNiF3uA>t_c7*T()g$~I@+ zojho{1FIRz&2o-^aW@7$X}^pLA5eP9EsoLn*7BljvqtE7BN!sHFQDnZ9<2h(S?2-Q z=t=O$(+0udMA`n9#eAOFYsJqSIR#56n^@3f;jw8hzYdZOU2G%a8)O7iq%_XlIF+uP zfHw+g)sc`BzLAbuAGKEW$)1l1-JL6`;!Q3O{_TNrRNLwimoU9toM~YY>jWg;T*~>! zx((DaW)A0DQamSjZmpjrlmuXd&CBSs$(Rxyg%Cbh)<4g_;|2ZUh)YM9af+Ywb$UBv z&Tldfm%iwUe()|?7JhqDgcVn?A)!4E?YE#!JPJrj`5A;+AIxBdR~}Y^jGO8DWnyv) zYn2aJba(w&edO#5z%8|I*;?w4_pw)Vft;eSXfc5Hl z954Q$lF{-wK`%rNxLrPzt5L!qj071N7Bj+MYZmHr?z;u33?xp-5^Yu9>oh%n`af@x7P3{#=R}<>u}8Q2qUT#C6(??cA9`iL@4))3kw`E$02pSr z!$5js8*)_*IG%_COeroiJRvrbDPUx^rjFhLpvD!F=!XR39x@8e`szIXzn0rV7F&|Y z-7Nb%C2z?vb~ZBSy<3i;^%E+49*X7F|gfIp{+AOons>Yb2c6xjAe!u ziuv3pU+N%!3kYuY$*>E7P3kzu{q@x|X5Hr)IUa)O6*D(5<;55sq$Jo*4Ggy6bRS_3 z!RVz>dq|T2udXkESd>i0C+qp7B{O7LSuT;GiHVdD;r}4wPMZng)HUSpO_H~W(Va;} z+D}fw(Wo;M!QCqsZ1sIQlAP1|G()1}(5oWOV$0U%z^F(apLX>P`dVV^gCA{cMJ}rRN zQXTl{L^ih@GE~R_-Aee1N{wR&FFAApvWYfX6_J!Xx`*9{hWyTS;|Gudik? z*DW{T&_uE{raFLEozLFhPV~I1}k8c>jSz zJ(Wdw0J?lTsS#$-V!BPbeOQ~{%b|6Uvb7-C1*E&EBBQZ_*TpSqIYdK1kIC*?ZO*d=%xw^>EaEC{E3BdPBZ15>wK|gKD0-2 znS%LJB%v}SI!4-<%NIK+6k>kIcUK@987AAVSz#16NvDF-ub>yc-MYNI z>wryjF-|auxzFCGpF}2+95~|8FArYyLSW_kv63g>htPS%zKF9Jop7=Oot+o`i=I) zQ;V2`c3YLMA96B}r{%G0MqXDOZ{rf2eZHB$g2FhE#iPF(6+qOZV+r(3<>wQ=PrB8= z5^pW^RMdL3$0>C|(EYHc3S?>+%UBw(#3f0sxm4#q`>dnc0h(M7$%!M*hMqJy5+ ztzVBpk?A-%cC_037PrvB7z-M6;JHfRRYd)l84bR+dBED%aI5+|mDaGl?*TkNbmDsr z#F;Cxb&*#uR_r5<$G?o}a;VP#1su9_pGqpRQd=6ywFe@9&(iA?hdYFX9q5_`w9#VO z@ILcqRV?|FGWrrzF!<~^ZG13A5!Dq?*hJneiPeSLcs^#P%HHe3E}z>-?2(729D&5( zoH`WSj#pZ{Wad*#uR#(CME8r$YOUqEXRJ)_j2!Rq=Y28YG?W^G8;sHqHupK_^D{s% zIWQ}-^afJ=v|7K7>d@77iuAm^W-+%JT3kwjuKB&i(LG!amU_9kbtUjrT(r~UGu79w zm4w&}S!$9DUj#JzQgFVnVOjRS9}0?Q29#>A#3m4A2o}emp~PQ@=HB9pH`x2}G}Sjf z@a;WBk~{a|HhrwK#6im?x4iiDcNgQRiPnO@oHM539IdC5sm!CJk54PB|Br{gVxX-3 z+-hW~H5WM)f@Qe!4Acuv?Ydn!88!WyCMmPkzjC`OU1siBb{p$@HbGxB{!%-b&|SDl8@1-l-$}?u%{A*0dyU;$pW}(J|p`K?fr4=`g$%RZS=c37>=J&&wh-IbaB^M?X$axZ{TYh6Z z&PP(q&H6p3Iu z`j_`vrVgF&H+8ADGL3)@zn!^+u2M(8N+%@eo^rY|cN&7O5nU(W^InJD+fq3VssTb( zy$CV&B-Za%YsyZKJ)DE8w%RzAI3~R~c+`CI@PqP28R_+XRRfOC4(p(vYE1Zy&c_xV zZ@GC}YA^b$f?xbsv-vmw!w#c)XEFD%Ue6~GA5UqvNR*Zc`gtstf6NbV;O|W2@TguN z=Ws>VEFYB$7__?cTdO{mP`?SUVQ-APs%UBbTnPE7IUh44rJsO{#&1=asAK!C7(pn~ zV3qKrl2mVYjX=`$ttr1L7VDMFaA{Sw=vf#8@9Dtz_n<7mz_1kxRwIH9L(O@OXpiy$ z-BkZ|@B|BF18E|fOj-;S>+YV%{_8}_y9N`4Ck-&VkLYkN+5FhYlhMMnz*DA|bW0$T zY)C9D-w#mgSUEqCneC^Y#ASz~r4ny_dGbb$0-Gpf9gwn=n}mZSOtWkZW@>=7KCK>g}(AU^Kz`TdvheM&-2K#8tGxiy<6D2!}To<*{FV~bUs|@L&f`S z&o!^#*H_g>ALn`u+0E2p)ILcqa(7G%-#Z=2rG*lE6buP{J;TvrbG=vp!XogKV=>&y zyYJsNX*bk22n74&qBTYyd*e&+=E0to!vhu)BBv~1{>U87DmOE@=yBF`(Ho{eE z`d%|9H&+=)cO$kR-tAd?<~b_dz1<%r&6Dt{Xn*`*D%)WJ6=J1$3gukMK& zLMRGnZ+{LOXsF95|Ln!EiJ?tys->Odj!+adESPI4x^-aU1TFb?bb*EFFC&JW-xXM) zIBVw0MPvDdeX)P<92nv)Tr28u^qb>5`ujs_XJ;6h6iBVCa)~NU|6-T>@M5lE8gfoH zYZuR4qS>WYdavn>i3D%!5?+K9L!@>>tAk^Lug|yQ=&~Hl@W*r0+k~A7!8>jO6^A)} z&%0ox<2w9&-XX%hs>1mGe27yk87wC{Bh4Kyo^5|GJ=(xz z8;;r{!q3Ud!wfVo_E30e>j-vWyKeDyg?IR4A8DUrKjJlPg3zNH=`Aw?vAX`Hcna1b zvjCSMjKX9XU4NhzBRU7V+j>G`Dwt4)ukV$BNraGjz%97i zC*mz-9($;s?1_vo{Bm3Jxh%Q$;Ro7jRD{UFMxk2*C-_LUOaCl#=wM{cZ+wylyJqUy z-BQQm{~%XQnj|?~b?M0^w#QC5Vl> zr^yhA1;xulg6YZGtfl|;NX0?G(~D0+2dfH!$j~Oz6GIjd+?ErgC)O93-&->ODok!s zM;OYi6s%cR!PZ!-Zvgu#;g!L<#K?T(F_6Xr4uTGk9@L|XYCzLoyF!0`v4r#0;DH_ z6`)DLPdX2_O_H|B{p|AnHuR!h13)inT+z3e$qa{XeJUm%)BiX~|B0MTbIZkdXKjv^ zyg{RYREs%Exc@OLKAR%JNyw3^>BY&Q?V% zke80w(=q^X>j}QumSQehQv2y1x zO`3|NlFknJ&b#K?74+NPp>6#(hGPk~IQ;!$`S?vC!{;>4J{!Ix$O2Xi`<&G||J7^; z-a6N&(l$6!vR^k=&qgZF;NOotZK{K<5b8oNrA4&Xds8+p811K}BGrh^4dM)<5zY%8=-a z-t(`Cz4sy$(+}Geo0aVP{}XyVpi?(NKn5f>2t-^)%F3{am+?7)o=>)A#sSB)vNQYX z@`x2r)TnhFI3 zlSlbOanK2UoPTxnmX?IQ1&TaHWIsj>KgpAjii3NLW-KanSpaf*J&3(3)>J-B%_3Lh z8LwC$*;OoszMF-NdlGFM=YNf7Q4SsYR%`fNqGkx0ewVsV-W_eiCi zcHa{NoT}VW&RzZe)u%s9Hbb4xG*wq#&iV<7z2no8^kKV(Ca^NP(mppgyr?1lxw1yE zJ92dWMI}bftBLs5rZ<~~_;xpu?L4B8EESRm?3ySe&DiPV)Jyw^X(ZD>ck?#}SluH##?eGyD;II`ksvbdN;^DdVot^bSN^tGiQo zmoRCHJ|1u$|He!&9z3O5h&zW2qJR|AVc;Ix`H`VLZ;URU`mz|I+9t=ru%FS(5`b$; ztjGHp9p}810-p6{aEfxn8&@=i^HQ;#e-;p*Y^?a?TdWVM!)kVtObmSq!jqUirRO^7 zc`eWA?w19X5>$ny@0o7|X3j=_P_fv=Q&M?3N0?T ze0b>xpXwCu|v-Pl;Lx5@30kl2fID@z=K??*`%EM zNKXd)AEa~e*@5hlEz05#6CrFj5)2`~lH@%Rvx%*=Z{-%=dKs;>T>&$nmVIy2)rg$# z?*q8xUer8fAp!GrG(xfsO_%-;lIM6jbP&Rfz4M|uph*H!AHxOkoWqDO50mHz({p%2 z7gE`=4vs67^^DROz)#Gt=rZbA?ZRhj=G6lJ@ zj3`jSrrws0$=DoKsMS-~7oBLR#-C|+JOjkFRM5XYD4lr}B}oINb^4W2L3R%dhHta6 zZ8(@Lh)bmGO$-f)JHt<-nc>^e?~m7P&qE2I6r==@eSs5D1g2X{+Uyvb;*-8S0xq4F zf(dGj0cw3G*m9`137^2*aZctGPkIacw1E?9=d<8LlTU59L@V3=DsYQOuo|1L%W2fy zsH`C7Wn9*co^+JHdr)m*NEEOMk0zMTS|AOg|6P*rqD{4gD6sfx{8sn0n*wUZyyoz& zyr&LZ`kYDyZfk86V9~Lj=6%o?9ipzW`c4nvLI**1QatI9(G0k}Ra?j7WXGP#|67y2 zwe3F-4C_7$v!a5-kD1Q-VYimZi%Q~`BYEI^ zK!*CDJYL@)waw%I&-A#iQu!t3S%ftQ{jZ`sPBlu%`u`tAS02yw|HsErk9SEVMBtwpgZKT6*&0W&k$T2FR6e=NQbeL?KGcua{+_0H_fA9YDh<1EF z@Av!jdOcsygJj_|V(|X8x2wMcOu@kz;wwt*rc$QEnO9@4*8o;yuHa(fE7;(adfHgY<_tJr|FGvQnUmoxk zP^EarP~ERgfJkjLy)iERayZnFfQSXIm=GI1q!)5#gNkK-nNwU{!?R=6>tNclI>}lS zL))>KG2@J}c0XZ6A?9xcd3khGVJ z2J60I&49M=$)(5tyLY?O_4@O5a3`4mY5($jaNP=#K)T9j0D(^@;AK0Q_=$_91xbna z!`X>|cJ*@C3IF?+%8BTO7Kunya&)EuUIJx~;uHo#%u;Zp8I$&3)F^@}8q$(j@A{e+ zDE_D4Z8gFm@8EI|NPX34ak!F2{yxg3?C9 zslU0>8v%~-u?;QTnqZoUWst^X_g<%(4HGVinCn^k@%~arIn4;Zrj)pK(&f%2L+N)+ z3o>PiV;zmwn*ok3x5|5NH-MO0*`*w#HF7)}etKeOIY-|NS(^?kn`=3+?lU=&!PH)P zc8iz#S@O8tw48ODm|&QVRnMIw!Ydzm8Cbx|-W^lRB)8g(%5*X{w9vW(ghi=cJ`4>U)DT2NmrzBVcx9(t^>_mi zX`qW++hfd@8M79`KZ&EFaoK^^qa-(Zj2^6bk>5^QNAuUKLnCqi_MTAv0m2-%u{}d! zo`afSxr|WFF9FKwUyILQZR3X-C-%(BVoKtDP190|Eu)V7niV2z+|~lzzBdz;F@16unKY_uv_L8p7JJ)fIStCsC&Y}3B`$3mi`y0Af#k9FsAUiE zy8Lr)zjwOr?L+Y&Qf=nH*et|c0!y|NwnS{PsNC=<Q}AOVsUgoSym^Y~U6gTg!?xFC)ffzTdPq7&&-3K!rQoODoG5L)U0Nc$ z%pChE^~Fv!3z>C*uIjj>m#&DhV5|@x(x}E6Df8mCx0;{w%?L!%d$$1X4x@281{Cj- zoJ;85Bg*TPLhYnPHqiqz%2hS^ScjYM@1{dW0EHKfR@|_zuxj6O;2ljuA6=o?v@R{rkIf{9YX_$l3Y2 zwmi;D{BKq=kmLnL)-OL?F#fmBL|kb ziHg9jndTm{W2Zj&OeIz!R)v;gki47vaj%YB>@lG%1%U-w?9)ueM4G!-K%!8r&DZCbB7 zY8}6rQflHmG}J*NQ3(>)iY9rP##%XfA@dfCSgKNR7>c})#QFwp4}g5%5bLHTea3sZ zlbG+=>2MT;ZRQ zymwipAytl7>hEOgpEq_jFD-1B&UqFIJ$-J=r<4Af^usOMN#TdpR7KqmFKpy%mhZNp zg)brxdD3I>8>8@F@DFVxs|pF{zxxIz4~FCi3ttr0a5i0v*^wWtpF~DbZMbLF2jRD8 z2{#!m{z*kkk04749be_Q=q1mu8AmyCB@7J)4mXLS}?67m5;d>jxrUK45R}jQ(P4ZEfNVoj#eIU`dH8gqA`=gXBsT z@1E_5(s>g-@7}9Q;Ev<9oN{$`(P~m|AM8K_>!v6BO@+@6cp~+s7iP$_umsVX=)tu& zf-O3(QVaQ77m?F@PsE>-VrF&QZeA$zKH~TL^s+giq;m|SQ8M|Mvc5G#A4R|fWnkALZ6yfTewIvKipRqAAL6l*qaZA8h| z*8Rp)SBHoRzjtQi+HY79nmJcs3a`o)i(jsE2E>0f2f zX%HMT>kCwcvz(=+aYRjGXc7_JyJdE-Z4|D%`) zJJ$4G&+mE+OT72}lFmH~596-C-WD69ryCl7gQXGSGp+F-BzxBzO?yy-(N1p}9Jrye z0=s#H>y$TuTicg@@+7md=57O8(`>Mg!MgQjcWSxr=gBSdMpnlv0i?L{a^=aitZU}E zov7-;AhiEhJeFbK`oZJb$IIOrf1mbWH5qd#)1{?>GK=>z@bkjz*gvIyUEJWDra!9T z)KiO4YF5W}vx`*hZ!F)7k$jQ5Z|%5AmHd%457-DllTpvMC4T&0jjYkSW8xOdg-tLt zByiNHtnL-PAaLf;^8lQba7D!$GkB4$8}YZ!2#7b!jNq-dkAM7|qn|_R%f- zGw$Ob|CLbkzb_tt8ElDr@>izT-yPry%=LRvakZvYk+!)G_XSz1OYvpQFQs`+y}qh3 zb-%c~dG&gaA4n(FGYI~{w({Tvxc1ChBB>A>?vH^%sQcxnf4{z!o^Jd^>|t?ZN#iCD ztNg+2mFa=EKU=PDn`%-~ZK3|o5=MLJz|5EagQ)Pn_OIF&t1wHaw3;xZZx31L>+U|I znPp66p^_y93B5DXQ&zxzf0FGf?u7cse+9VtJiyHEbvTUg@o5e0fUj*U8t7?SK^r)Dwn%xJ$`Xno}Ky4Q7I z%9KwGlucaoIsK;mJ*V(S%B1SH`K{sAzE!gZ1JpN?-H+C0eO*qGmA~A3T`AiB>d&aX zNz4}f`>33S5jMlCeB8qwpMHPQbMsNN55Kx-HniV+xYrbn%YW|KZddRql^nZ2?B2!! zcqVhz<2*Cvg(R$TOYhnA7({$c321tJNk$N;CX|}+6= z5*H>lfErAvl)xn1P84?M3WzJActX}oS@X>6M%A-pSTp2IQI*%wB5-fomT?)QADE{P z=|G3TuLtMYoz+q=(Zx%Mqysg6HX`#nbp!h$x@pwFzql!dh-PWim6x}+4ZM_>fwEAA zn+PoL?g5c6YOpR9CHi5zNmF;7aVM~(_1ef+^2UX8Nvl^(oQ71^S@C(2!6z&&!5EQM zx=sGb`VqWLWBZ8p7WBa3P#Y{C2jOq`oCO2wUFu=0wHC31m)-f0^+KTe7&)e@De_?g z6wfph%06Xo4ZOcw1gLo|-%-xSvIg6SkR_yfC}GgMF`|Z*)rFdTEy(~`Ovbf9OORea z7b|YVMnRE3W!cCW)MGBbkJoqoL=80sBXV*{{OFJlEl>|kn#W>Br~Xk22<6b}aSlo{ z_;^^c#a-vo!f4Ndxh+f9ifA-2nTOHwX|2(~tSb0mwQsRjvxElcZJ2Y_refHzxp7DL zZlmWUMYImX(g1DlS%x&ZA^ow->wUq=bW_zMGdA<``QLA@{TfO@92Vtn)!slqqC(t? z+lz0F=05=4j(a)1%nIUb$_UBFNFWBwnTJ-7Phm@nuJO?lN+M_(=g|71MM(Um` zc{vX7SCUhcuzlBGZjplAQ-3W9;E#Q|yluOJ5E8)8Wsl~hg~4vZi=_=;K$zfdwx1RI zuj5`$+ATAQJT_}r?q=1{&;s%VZp0C*0tb71C;=lS6}0F*5b(fFJE6b6QYRKJ({~9D zX-KsjLg2X|2Vw^9%%}$|#p>kyit9H6QrglSR0?JjqDSPg*&3#I@u_maoIDIH#_Ubz z5aexQ>cOoFs$sAiz^pWTZlnb>Cm?4Jv_TL3oL|q$yDro*1v9jRcdl4X_s5dj^=GWc>^{lD*((L)EZ#dwQ8^DQVMbsbp5Y4M+Q*jn(T)p z7o1F%l#>=Fn?$g@QQ?TAZAHF%WJ)k3S}Mm3@x|-~192kh=|m8HSFv>K(zTNDxvQJ# zn=7kpvli`k?YhuY^!Jn!O8W;vxUTWqHH5Ks+Lz7G^nH`uotq%~D$3>gv?ojsiP-c) z<3=#VW&qq9*N(od?~@nH8%TOUhMXpPS!1oH=G63e9|m`SkLZf+%uIv`) zQ@Sa8tG#!GV_LTYq{@-AEoQpMa|4z9zp&KYdP1a~m zhQLiz#oPuELYulW(&5}h&X}X_jw4MI=_YJ_@`~XqLl#yK2}t?duDC0}v!dC)LaDM1s<_O(nfH2ZSYd!stmy6L2MKh_f77b ze#yK!^u=dYxj+HlQjEAJm6g^nWf{lU8W+rhCMN-z&QcAEq4b9G0+ipD78eSL7 z`TBPMhJh$BH?cJEWcni1|3rg!53KvEn`x;Sl$ji-N4}tC z&AhrC%f$wH^u$KFLt&9GAqyb9Llv_sMUN-N)#`Rz)hjH^amM5hOq4e$q!igKoodX@ zM=L;Z91Oc{^XV`X5Q3Txy3gbI)}!f!2y6-=LjjtkH=-o7bUS-SQ^~(g-JHdAI!tgU z*Vt$Y*?Qo1JQMp266+bWI|@!2S@<*)NzeQ@+wSSG6QCPdV~*IhbE!(&&Ar&v+_!SA zHs&p|qU=K^fr->R6d8$2-ulg8%WGg5o1>h_Ni`iH#I3UJ>b5=`7Bd_!eO6=mgHnP) zAl9#3mYc$v$!-B@YIZ1nUNL?DL)cs39 z@Yk_qJKub!KAFwapk8+z4Dn)BG#^ zGPIti1ZcM-Tdk&-!qW|U@t+tx>E*_x>4{Kq5bS~Fe%~AKjwJm{ezQKhxY$aRa6g$_ zF17$MEw1wn+MAwOH?T^6+ozQQtLZib@)rr{ zBd^hrtl(E1?b-siN;iPB6c}H|tnCy5zNI5X-42RP^ymF5_JsR=7P0kSVoMftFV?{w z!ofCSc{?2e=74TP)%R4jSQgbl0P9JqM38El`TZ$uoh-Fz7D(v@5**X7o5F30crDC; zF(8k+#AOZna=trReWmw5dL}pL?W?A~38jlLLd47G8TWaGZ|yc$G-1EB1BPVxHVrxR z+K5Jm{b-0_wiWAQZg{@FmD;2*Y#j|Cr2kEy;THE~u(g5cllBEqPNXI#$_}EwYn9s~ z0UD%y#@F~1p9~CIWUJm~23_}TF&ea3EQ;|Vy3WV+sYZst=vS{8N#J39%&1Bv<+MJY6+bG!S1v;B=_u zX;eBRvv5Zb`1hxC}8g!Vje`?4f(YAVw=41~er15tl zoaIw5_y@I6sAogX-^a&iK8~YeCWyJr+&7ywkq!(dc#Vf?q&5B&5xB62oQMFve$h^* zCo;UTxr>FlB6(|=R>Kqw1Q!{%i1Bm)mxx^C&)n~XaT#NABh9EXULGj6JXPYY@$_0? z$JwqD$bY72vPd8GVy$7PQ6dR2Qy93&30ZwC7;>*FiA+ z*o)EYen;i>(+R2s!0S7wcso+2Z7PtsYlY}qeY@Yqr)BVZe??zyVSiP)S{<;AA6a|u z_Sb{o4n@ITY;g99X=}WCTk$FZP^p(ds3X#?IJ2cF^13q}>pJaWb(EqK8_q#KvA1i1 z2z8cZ^vu%Yp5tpauiD~Hh?JVwJ_|kTp9u1)lD2BGiDlT<0xc-y#=<{@h@)V6be^PY zQ+2(Sk(j|H+$dyyj2R2+v4y2LwD)O<6j{28pE*0MEM+FEPl1L%MOb}@RGxeWBQ%u2{yNw;Zv zlyVc|ge_F^=neYlRhGGC#Z)DH)Zx%#IQ+MQkbm;}cxW{%4c;B#{!RZBTz>k}R!*Upa4mqBfSF(IaJeWFXp{uuwbt z2Lj;XxLm*+X9y?l-4a>muVwL>1#fKtGDveltZ&*6Ubl!8B)k2v%4d$a67lED@zt&I zcce1+L)>FM#ZoMM*a4=$$TE-5tTs2VXwPO9^`XRF`8k&E2IL{5N!~8gC-O&^?>3j`s!A!GM^4zOvLM^;X3@o>75okNMUpB>o7BRS8ll2s5yQCid4J8S)JyxJ>qmWbVp# z85f|mxZfwRumjbGHRIATqr$smh8b3`^m{RX>5wtia2!N!<%)W?@XN^uq&qYnV@ojH zjwpI|_@%*$@sA^kdRhp#_w~;{m+NZ`(BJIS_j}T=lemyE58|i&3PK4I7ieNj$<2;Y zI^MO|EA>XJ$+*3x9?eZNI6`WW7tX^7^M89%LNB&xvBpnnXrau6B@I0}N1w$sIUdRg z=)Lrva;f+O^jBrnD$T{>t_{kY?KT8tY9Ha8i%asVZ_$;Hi{o4*8Z&*Q`*%$xP;SY`f8 zK6;P$eLMuQd}jL%Eddpq72dMh;0WD6T$5$-rvA#?p(1MwpOBAl#-p6^G(6>uS_C<( zT5_p|xkc}lI$C>;OPtA>x9?8>@l;p+0#~d%VFr&by%^5C-nZbQUllxb@I&2x{t73n z>__bX;$F3AAyhj=@W#owt#_Q>U+P&v9eVg^Tr&=$2BjXFrgB- zkAxe#$mig{(g-q*t~PO(I@E>Uu}*>DR>LpVc9FhtnHhs{ODW?9ENovegn6cy#%68{0g-Z-_HW-S7B* zR#%EXxY+mgQuQ^L_SL=*FqsGT>)9Bl(ef#3P7_*7;u+lM#FMjO-5-)Ja5GxQ>mS8m zemu{gE#vj9As>8KjiBd${KG5SHN*H~x>j)egLCodi-}j~ye?@G)NA^;q%>-P<6vg| z^Uv|$+MF`E^E|anCk7^SjNe*Krki-p{d_{yI51f;HJff4umZwKY_v~YI^I#V9}iMh zd_Fz+eEij8vL1BSj1rH2ekGi0%)a2RXrrR22=|dyKesm_Q}3A9)pHMr-AfP(st7d0 zbk(0rz%9ZWGwlR?5&-d4@u5rld6CHsK_uz&z57zaY?uz@RXAUooW_{Mq z`LU4l=WcdI?UTLxI;{EHPilIP`7^WYcZy2)X-F}ze;owINZ(xE{}f$~*jcquy+=P_ z9&xu*_2Z+_^ZRa_ZN2)`ypPj|i!1gnKODu8`)l!Yt{9qR)n&6`=>2|A+(~ozv0W6o zdW2kay*A7v?a;KAU@Z^A7Z&=yk4?a0M=cRL`;QC>q*n$e^|XpOHPRL73Cw5fJxDxHv<9e-%{92jx(jt@>7gI@Mg3M!bA-W98E8=jxD6>l)Ck zxNnIJrxUUJCi04R$8Vk0$P147g|~-&xSp6&|C17R#rx{)J{a**M;UV{{@DPvbDD+x z<9%*+TR5z-e?#?6wZdM0&(0Hsr{spwekQT`%>A3^{p!}3d3OPD&<#v|wa0%IJzh+G zHm;?A^T=#nWo( zV;qoV@H7CpBZ8?juk4Z8>3;BSHE*tt*E)S<`RdA{W88GhEGV?cFf{J!sOWc%I5uK* z<%Cz|<9WN4KO6ec@1uM|AIBgM^T_N`8wUvPZ_LUShcG7$Qc!&$8-^Jj<%s=meevzA z8D*Q3Wm%~2M?^XxKjIX;4gu!l<85vcqrg+MWLwUJ$uJwiXr+G$1V))B(EepUF9DMt zs#(8cEZfl1HMX_eNvYZ51HiLTdQ($K2XGDWf*xRZQd6M!R~iQ!uP=FjaLB7_gBm5A zN5U-u@xef(U{qS+sM2S`kxD@5kS^62urJ2l5BRdC%v6RX88ZF$LsL#LC%kysHEe%q zj0k|+VUvR43G5wg+s_L{hncHt(E!162^v!*q%;%FTo8#geYenEZ^T42seOf98N*&flo@&^DQk#E%xfG8NA75#$8HdS}6qx0B*_D}zhs^-DOm#~|8wP#;0Q+SDNt zM%W@NXb)ug6oaqtdQayL@}X$Mfv=}GKa(5qM|CcUAZ|(7p`Ixv$X}^Lv{a>O#(xm! zLcaMOb5ml{Mn7NoDESzEk(}%ilg2lr%yOyy9zj~>`{6L`&`&x^MW=trui)s~TWNEQ zdL&!-XTs`kJd1<;njk>TQ~QT~pseOUh#zd3_Ll1pqM{!C8F@Y`%+w^`&gZ~kfb-P969n6U_GRPQZ(?48uZ zjHqIbg5qY`z{{p`#!m0=80W17eKm4_bZ@#=(E!ssS6IH;vxyIxYbTG1McSrCXX6?{{D zPMC!Q4vbun zbgebXV91ve2+~eJaql29=)`WoNVP(Zw`&KJ`59?|Ho7wTJ9FR}M9xyO zm$=}8*HhToFwHKLDiOFMxqEYzBm};mHMhp87k;K$$X==_z7^Y}3+>58A(L~Sgl*Ci zXq%*ry~$ncj*upr@eQ%r&aUCo<0SKDq-3Mvp&=bK;sy+SdL5>!d9@HAHeFYOo0`&* z3M#X_#FREJX`WK98(1xSKI-_*sL5)D_}nFFEHbTGpeeIAJbMeJpAgRQTF>Slw1=*0 z+LB@gmRk;DC=i8d@b` zB4WwD8{kk>8;k!SKZ`pRj@%Bz4ff(EJTlf~kgFwR#;DVfx{-|zUs9@t`iPeiyP3I4 zU&IZ*v4J3q=ji+FAweBlDmiFh_r^le)h9?3Zm9iy95yIk=Wspl*_n<0#s_77(rL`j; zk`4h72e>qjkkrP%J(JBV`>TtfpMB?Ya{FwHgd7Ut}XDd z_R;`;Y0n<(tglO_d+NUd}(6jth(|}oNcdDL=I_%#Wmt6UI z$7)T!&Jsqt=yGj*Ue#;afEuv_Evs|YtDzKMVqUIx?f~S-fCh4T z&t5qJHD5aCk*eGX%K$rB_Wab_?-btz{J8AkVW%@fge>-i_58M#QTaveVL-f{bSy_E z977n5p%noC^cG1G$3rpyI{MZA@xSZ$yV3lWqD3@4ze1 zRnC1+d{w<-sj>cl;xns0F|qrAnwDt)llog}>A03o7eW~w53JRK%TJ4sI6Zv^9leZn1r?1P9vbSfBE6tAsEX?lO`AKHQYL0Vn0K-^L<~qeqnlkW+I}5jW3V+gH z0s=?ujci8&izF`>@-~_+00qO2$5kk7bD+dEvm7xL#n%H!U~X_jt0rit_5KzZD_V_N zg9`AHyL40KnP)=*U!vQum>)EVKf{yU%bU(r{D6t=Il$6;RQ^ zG72S@aZGj~F;!7Du1-?#iaRx8UHmL}m6sevB?3tnmT(bKFblraAXmOWIzFyWJ!r`* z5LV`OW5wWzyq=#)Crtu&i)AYshH4`K$Zi=Zzf#5wk`6~e=%z%;{e$H>+(^;4PA!9%*}1l z<4bT46V@=erJ^6sTWLBmE9QgH-zw3ggPR3}>>P^2x(kL9wvV zFYP(0;F?eXrkT&eep_dszF9E=U&{Gm?A5Ds`0ITZm@MAEViTkih#pE0izC`QMDA3q z$#VMAeWa>tz%ZixzGrwv_>>dYWtVdt%jsi(E3HPec?5>W4j5WnYgnAh4J?MhXDlj3 zaLOFe;B8RHfM|uWpz5Ikl@(00bm#i@q_7wexXVojQ%~@Wlbf`T0dN}%JUMqNq#Cm^ z{Qn@_D^*83ZFEyUF9I;#SN9`f0RikODg0su2Gi$js!AFi2j)-Qc2Ah|#9{wLwpgU| zMn^8BYa$ecqlnB1{!$4XL@1gq{L?6UryUhA5%BdcJii#u$P0O5vo~N47m43qE2< zrqk<&Vt*a4`l_U?^}1mUCM-U2D`o!Vj=@bNQ=-YJM~U*b)MS|U9k3qVbuS%dnNiF> zL7MqI5@y_^qKBovHa`zRUy{}uHvJ~W&NFzW=r}A+R#m&7K!L2Y;nm>;xUE*8Q)Jj* z!nVfYg@wx2rvCFl+J~>y>Z5<4%l_d_x-g0g639q%3$>gnI@wYp&OYQ%Z$b=kB|Bhr z{0=gARAy6n_%i!H$aA2Ua?*xC5s}E1>jZ~{uuzLSSsmeV)`jdfO{T!K@I!KBSd6(? zz#DU1vq{In~}w|e_rmnK#~jVU#wMM-g--}FrhHdW#k!{8}% zrO#L7`MJ_N;vYwpAs5(xrtN6zq2aQ4dZt=>G#iYt&4W7ksx)2)>#SNDl(?l?p9o4; zcLRaN9c(K}aW$%BD!fHdQ^WX6F=Hc?+pm7@;JQtSZrjgDYyuYQZwyw5l`G zEZqe?Cjas`7UBAFbod=NTN4Z@T=+2Uu`SgZzzY9Bwmu(Eov7UYaE&~kvSO${OHRkTcSRx8Tnz`pq6<>>4ZPmKE?w>=sJLW*IeVLNC4RWR zo@q#`U8@JTw|>xeM~{~BE6u04aM#LIT*+fidP3sqx8r&7-iEIs05fht1kM$A1_b`9w9_}iJmm5(!L%d)9HWzxKbO-u*s%-)UoC77VKUi*@Vz zz?+WE1}#SCn|xCvkGwlwJ6s*sNQ*2p=^UGYD;P_argq)F@?BWMD5h`V>VIr&bNKQy zxVNV@Ha&6p`jYwp&$ouf{PpqjQtaT)-+bH?>d!dk9xv5T(Q~H++__z&iE}m3!mEmG zll3RleeRB>`YHoPp#{@BRF4KlGa`$=IO3nDf6unCobDZJ5o#|>(uAfHa-me z`0MW>?6EYjGZTx0%(ora55#QW8u%Z??kyy=i*NlIMU4Vw(A5j%VDacHQ8k(UhMhx{^nQZ z4M33ohVL6Y1Wvuun5rbvRmYP~Z>vdD)WPjJdh|nft=Iwm!CJ-rHIoec#;_q;KyY#M z1PC)et%kc^R)!=W%%QAMG2;~Xfhg5bq6$M`|9O7fKp!=~Oe`#kY35@EU%@x%-Vi+sm=(0saN>W{+~ZZ3k}yMr6emWZ z-Q0kRD!w0_rk2x5W&~v~8pKv>k{0m{=Ynftbmu!7Ej1qduq&l|IZaU{^JCDOti?c)?MiZ=6{f&|EfOKHiB?GhENB+E!<7p>rkB zVRrg<8T8fNH=1EKi|5`l1n1G2PxN`$o6lnQUFI!5kp&8MHswMoQO&ZfKR#NIWqYpw zPpKJ&!?S#C*~g~67l#M_gTz)j2&LnnEDl4#42|)HiTa-+v`kCyS50wc_v#T@;EU)h z``@Xi%>`b}DjC3kzREu4a|fyQVGr`oNB!~03f8MN50~Abh--`o(2=gP-XBWPyrATx zG!IKyyjg{hN<8=Dn%Gh(jyLEMP#&()1PC{-TgAAx%{-M!*v7>ZeyDGrIej?4l_#R1 zj`)qE`02hwIddKk`|Y;G9BZ4g8vIxaLn%;?WB|ORti`9x_4D(qgV)YjrkmpyUcM;|+WyYMeQ9*-t9Gfui~LoxAG516DN8NxnVG(( zGgd=UWu+G9SwZ|nnnV&&_UNPexj5z@)IEDz?T4VyB-^jqUWb4g+xuw3;v^l}{?Zcr z@in>C%KMxghF=?W`Ui*DcXjHLTla8DQM*qvFaVCIpVAH=mBlc9<)ih$OskB1N{|Z2 zfMCF;!Xx*D3oCJk&X4^bwCFOth_oCxg_N?l*un!5`$4Rr`8f5T(Nv<6gdgT3W*?Jd{Ny*WQH6+(bQfIIfkI#;Ylr-I#xr6$5$M6 z;dB$RnluSbC(HxNUFD8#dp^)j)mVBU=rF}!j2w4p;8Unl!1P0DdxHAJ>~x~X{$n*Z z5P%D0{;5iK1d8sHTYA5Bx7H$HA+V-1f-mTkDWN& zpC|^i`Y64ZmW$1@=#sYu@6{0*4J{yeY;<+~gb9x$aR~@eHG&5t2vMk7<+JN4dt(OZ zVDhv#H|e6-vcA<6EV)V71v+GaDrO5koYwf##S_G%moKo*;HTii4d{Mth4Kye?yJVoS%;muGx=o~WLhO33&TbZ_vj%7zv<7q5CMdFnIg#(@fLyzV94H}4RrmHd9vdj zmn}a)sbao#$OY`e2!?CQOrO1#*0^{b*2`6M&XR>aw&LjYBF-`a#_310uc5>1MN;h1 zp!!3-Bv>0rg)kH7O1sPw8pZ3ab6bq8Mr?Sx#H|i0tA}owMaX<}qR-U-dCk@Zq`qJJ z;qS)*Ug>^LNs*A&GYWu|!H0$>^Kd3odg{RBEk4sJn?3i#t{SLX%|pXi@UA66YQYWl zUMq4kQd@zrSqrEa#<%6jzlG=u%~O^-fYA^D1C^r`D{FMx`{b~d|+}U_9=jV?bNkO2uL0cHA7;D48+1M(WvKpNnXi%>P#Jv{l5~S=FZH~$)Bz&tpaBUCI2a`; z?D9beJ56~w-qy2cd(621F ze)V##1uZ_7Sc=KcAPuCA5s<*tpGh%lb`|}jby-|!X@=4HI?~Ca)ni6G&HNL|oRrT= z2lvK!_j_X>d0g&FP~?aYk7u}&A`|4CK_*;$!o%i0FNfC9{1eBiKr@<}#uBf@``E9x zt`Ah8hKAyo)E#ZOs#~<1n`I}DMy*jiHK)8{r65DRG1~<+a$2Je;9J_v7hcj2v(@D5 z`-?6(H$87qR)w9aCF%w}Ppq;UD!K4LL9(7k)C<(T^MUN~b7ICj>u?ZG-2a-WVM>k#xT==?=mDJqfZV0H%kB78-&Y+m6hJ&tyk@Ue zGm57R@Ca6WA+%gu0ocG0z^E3a zDj`$AC_rABqLTgrW%WjV9>6j#gBW-7}w#HRbV9_gu7Jz(+3<9$gsmHtUUGCMoc z;ja(~Nm(8x<`$pKKfD*S2uMIDi`Cz{h2i-1|A0l~*XCAIqGZy=_gX7w37YbK&w;lv zj5)A_EYUbE2MMVs#qcpw^oAOjn8`64jOcGRq(N-OU(T06&&^+1XRUeN&jywu+g3=9 zT}wI|$WbN``wx117W->n@*;)S2vYn$y&~0CV|Ti_5NPY!E21;kCekw_foY4P4SXU4M&@6wJC0umH>(CTT6NEUo zDW47&1_NEbz;o(XG>XX_FwnZIw;fm~#bLIQ*5+f@ zq=s|QGWU%$N-bCht|6PiRqwTY)Z)@PVobMq^kOk*;nZt6Blg)OL6z!=#=xKpS(N&^WPdAsfg$)$u?jZZJ-_++a! z)B}!ntk9x*5eNv8Y^AOj{m^{12i}aPbYy6;S(E2+<1VzTu+pZ?@qNp=`w;%-|MXL9Qm64SYJ)JXxCO z?`|L|+G0~KoW5t45EfrI7*|qV545@1=FI^3kaIx3{Fl%CGDu2NLJH;_SFqQ!e3li-`goWPdw)2^DyXo8BzAeD7e1WWQzEC*{w5b z6N(2NPni)Fj49$1;%Yxu%CXjnRb@{4bv12P%S0OLDTaQlQKtJ zkTwer-m%G?ATc3fHI_Y|;!*IqEy<0a2>w-S5M~rh2$$&-+U4KZ;s%IK4x{&kD&EKKr|?gtfRSEeZKeKId4?wQ1cH zU0RiwDh_#1`0Ufku9W7abrI-EajbjCo20W+W|<2P`)Kj`)yk}T1qqQRY4@dkesiiT zttxFSc7E)tqaP$RpF{ykiJ_R704#~dI zI;>!pIj1PUfXx;a%~z+)OoM!ni9Ep3HH)*k0Hlu8a5`E-yeBMahLKFz;2Cpjv8V#; z6pefcW0r36y9_YIVcl4wP z9P3E4vyE-e zPn&P3X~geI>mR%FawD_}r&q_54(3?0|4cS19{EeRVLDj>eCWOjw5EQbW9@`lpzr{v zNj3Z*^K7~8aioa|Ae;v^B0mWa7ur$J5+0xsjN4m_Z zL8GL=nZ4~n!BaH<`1xnXtfdw6E8(}h!+SDh@o&~VH+C#gJ!8H!?IIsZ&qs1VQ||CG zQPI>lmds-m9zpA7bW^d6k(~{rZ4oP1Li7^cP)xo}>*~J=LuoxZ1bSy#o>6&6RB(cE zB5t>Fqw5;@LzL*+8B9apg&Ac~$H+G>r{EU{}Y$`}{t_*Llqan3|!00qlfG&DUZGOgeI zvYqPiQMm?z4wvz#{Y3)IfoiC3I_p~e^VCoPeFc7nji<*E*%~+R7f{?`>hfXv2w~CB zr~kWL;BQ6=96cAdH+Jx?=g5^?4R;Mqmls|CW4%0N zX{<(XK+3omP;-9qfqUZgREJ`n>tp(Z9N}4y4^B zBD2lIl$@-0n>_a7-;JaM!{i@A4{B)!>lnKzPddz8dV~5)&aiA4q#D#xUflXi4?AH* zH|QEH(70PM?p$6nW9+QXSjNJaY?- z-KDPAU!2g{%H;)DBi7u#4POy{;Ehj=D4F4X4&QVK@=SfYD))suG5)!rJ0NVw|59Pg zjmhmi!@b|dcNU^%ubwRI3vyMz$mwlSWB;zoo~xVLD7zuqcuQrzM`P*408Sly=Yu=b z=k00zjBhnQk^sTg1oL+?jb(CvYr5wSWaM{9*Ya0u_c}GNx0N}EGv3+w-LL=RZ8I?3 z0tMrt`xo`#-oz(CJK|V;$BE;?-yWaxB`*zxi{lKxh9K6nd_FyE(z+|artxQgcmmTT z)g`{vP%COXOph8f$sRv#OkLuSO5ATI_C&^kO6uT#idqBKssC%n)>oFfnKqF5RjtXTV~K@ zjXQ^pHHTeO_GC3Ix~BQG?=8K!F|Y7<*T-L;+4^@Ao5eismNLQSv9GZw|M%YR)Qi-U z`g@rjs_nbp_Hqw*bqbi52YqrJWK`kvjt}h>MC#W>H z(#hiv*2M|$JF#8cC*G_%TDodzwV4gFQMY-tH&A2NXL8HTC;sQn$36Z&k-KK&M7ihh zJn!X6wM9;%oF~0~miOIsxS#d`MGX5tM`s?$^#8~4F`28$QBB6wMCfq!&9NEv&7C<@ z$dO7^!g5VBM<_AJC~0lVF)E}KDxqR@m=JQ;+;VSXX5Zht-@nyl@6YG+{=D9=*Yo*! ziXZu0V!)v-FA_#xr#}7nayO^OIixeE@b~!Zz75u|}kU{nIC#3^B*og zwqpFOxlt6pn_>G>Q@Dou=@E;&+q#Imbxu1Z|IBbGeJN{3=g?1VSZy@gY@HZAv8A`Fx1-*EFIOW6BJ3LZFhrfostX!c>b$kBXyQ*Zrj&e9-bWg)-N z6yC-`qrfP}J+=3VOH?`y8Jkyv+=26{T=}}&t?_+Al-g*(N;58#NE4#@ z-_^5Z6z4V`!@&IC<+hCA3t556?~;HlhM8PL{mjpk-)W4lamJPJ+QK^uYRq#1>%yaV zHK7ye9~o=;7k8(eC4fKeEi;=X^D?;2Hi4SmY5s}TNIvk7X^qewzVXm2MQYSPFV_9} zKs|^C&EW5;FZ9GEI537|;0%J0ja^6mv{DyguM4I`tS+PcdY46W8>1W@WHm=%f z9vaJ+?NUr+8i7(NqZ}tjksX7rIR|~|2yB{Z-1Ow{^4XWvYOkvQ53sdL^^bm{27$O7M=!yX1@`WJDo+ALQrkf?nVw?mLIPO4CXy|>+MGRa2 z^-mpE{Wxgth)0epu)7S4YcZU}zLm8!m(S-i6)x*d%WoGA&`*cQX*xyB0%LXCR~mc{^3i|b^PtsNO$f;ZHL>*|{vnI02LAV3C;Kk8sX&RovQzuokg6OeI1L8s zr14m_z@lnXlb}0f3TNEGYByi`*D)jG_233->9F=ZM6QMO*E*7x+t@CP8OxXfuE!=Y zaOQADsW3n5EzhitRawj$!#uw(3_LVz-CyySXC~q=CFHAirRF#cnD!j&O4X%lGW4N7 zaIRN19QT4I;o|;-K(u~f+f)Evyxcs@VhikVJhwRguISOPv>mKo&;T&(c=G3_7{eS_ za9FKXGrN|nF58ismd9R#_D#YBK@XC1St=irO|62hH{n`4l_~#FyU-x1?k)lnXDJ&D z^nG=EqbL6#Ll+Z&P#w0GG6C`~4k*n_sus!PFyG=#M6n?dAi`Ql#i&7uRKcyH+~mIT zVO^5(l-086{r1>*~EXFbudXWyf~F76`oyhkQOdepGYFbD^(!fdtPznRi4Y z^^n&9`R%YAghu+=iv){qUlgB-i1lBWJ07o-=2APhrOhmHJuc|V1~D5OW{v86q?zGG z3$wsg%!H*hX{PaI7YA$`zu(w`$ZCSpC2%RkSj0B>kQozwaF=RnW_qq@a@!0$QWY~p zXCe}!`TL4}_w2=gZsLB1QWt8e&U5G*yg8wFGgHsj4pMKfS_Cv@-?#n9#yP@*$*(Uy zyCuEFc)u*>e8b012$6#Wh4RPLV|4TV?@}gEbcx4DY9ju5wS0mQD&rKNy=;<%a&CIu z!80UOlO~~qv{?J&?w?*%NceNbV&i%fW=9krzN$WbZB9R?$bhx&&H0PvZiA!O*PN|7 z-&{dkFG;?!`|9Z(J!GLbFpxwUij=k74@gDj=Pp0W|DGR{whf=``7&3J+)V9 z&+nq^Fn*TNhrb*b;q* zrB?SUEp9>!9;pdACztyF$i^N^Kwf(Hq+)4wtgj*H=+t17QiXRY0fK*hc zD$CXjFa&URYrG8`XjxEY1_nO9cz4&OGe_=TH2{N@+Nr0X%$#G~p9ib`b2{0m{S?`0 zcKSH0_WMy|S3wTh!sSJH8|GS@(dG$@2dGsvRVN zc$Gn@t)!Q{wQ345j9EL7Hrr6W;h5b}OgtM*kDl%*89k~S`hZD^k|CGd?l2c=f~o=( z#T8XQ)&W)>5Q`a>iW8FBO*s6dLPx~cx@QqfgITOmn=&`NvimY>bc@EsdUA+Cn=z_~ zilnErFi=7KedP#;oj_eB0-GrL`mvM8zGNc^!g(=sHFFN3NSAqCnrL9tc@fZFfq&@A1okQ`5W zcZ$4UD!p-oDTbum{{0Ju^bblrDFg1$Ag@eg|7lPgExGL>rb~rHJY;pG1x#%bON_HN z8>kX|{a3U~3=#r}=>n5oIg^p0v)$x9)m|qRE;=p8ca@?9)@8Bhj~)8y4hVPHn z9x_VJ82i{$TV*8et|;w~7On)W=bINk=V;d8zXh&yDojPP0TD9&lUy5OAq}}1%Tq&o ze$V(T{MvI|>w}&ev}>YY7L~;-%tb<3m;D7=b+800a4mnGfSgF-WQ#`wG0S$;r&CBM zuL(@Oek-YK27lf>+Tp3ht|ZL<_T)S6K04}q(5S^Sid6#PKBVBkjNAi$_Y+Qa&vc1I z5TDKLDQxK9np4I$~$v`{KzqNQ--KzI2)gzu}Pr7YM~ zVSf3RvY<<|;b&8u1`5nAHls^VUpb3-$bJDa zuI7YxMR~K7b*S?dP%vbK=weMp>@S?@y8shz5vub$G)yPAHetnKU&P54{r4Kp-fk%H zC(E@}KC0B3HTV=1ugA?07mpyxQ{LS?F{84fG&#yBYHG_7P3WQZmA?$S3p;}$C$aIY ztBqaH20ZUTNLEGd2nNp_iL*hkGz#N7$Jfm!DKQ{~Szb~slZ;}$3w$gAg#@V5V&jOeY4{;(V&Vu5wN$1{ z0MtLR*h0mYOjRbcp|^X(P3fST{d`MkBSMqA-6M7C4dZSc+%y0f+})$mX#r@#()8SE zaF(dcy_s$c6`aWGT~e*S?N?it^@k2OV(}jR7Pq-Rmy~XBX9L`J6@fcCZEgmtv$5h5 zO?>FA=f!vk2MS)-&06D@zx_w(IC;{(%O}y++jSNF(R5kzry@7|LtzqN@Hb4?*N;Y7 zOpnA{TC4k45E&nOvi`lE)F|dlpva=`7MsHA*xf>C*=or_n<;(SDxlKp9={2Ozy1Pj z&<~096eNUfFWcyH>oVX@a3^Q1$}J&&6f?%%o(DA$UovoJX7Uq!vuH97&`h>uUdwwQ2gIv;IdmM7c8k=GFFeBg*v z3i7PwG>TPm{$8WUVrSYV)U}rY*_POq+#^A#j(|{mGp@UJTByfNuC($V_dWPh`}^!s z$iI%ZZCrZQx8{r>osq)Xb>A zWI+C=mMmm+6$=ANteN7wUkrdmpnAik#uj5P$~Nd@)yI{&6T?b)py?*g%?(C_rrT5HEb!QVrqk!L4 zC&=`^%ug$qF2LD2dHHUrNYZDNgBiW#p=aRv^MRg_njs&2EOz#&bW~Qz6LxRUgLs2O zpWe`FH9tGc{(VJj3nFY#Uz86}ia3>3X1wC~7LtB6-zCIK9r+(5WgNU<&Z&uhK(M?S zwwb_F&~nkY5941+t}NfDcunL@tW$g!C6=)n6fsC(tngh3G%k8}0O$R-LxLSVq*b8E zxVi!Yoe5M{CD^fe9g#9}S&e|0T&9a-udf!C=8gV9Q(hw2F4K0cgLoBUz=o^$Bz z@gzbb3_2V)M$KxE&3P(5{GNhGZ|5GkH|w|NEjgAdDMm@;m8LX!bA{M4jaU1kwDs8I z)(&|5tWDco|J@4)vwX*oyASk*7x)IixW$mVyj{};=y3}X79(NPYsST^p+;XT2& zkK>kMD$|kB&L_!Y*|1pdJb9NhajU{Sr`QtCX#rVXcx>4ZNQl;@DV-Uc8VX^}Rezsa z8VBPVe~KrbQ^qIT1`ZxZkJ~hFc`n&}#J{u&bchcnqYikyyosWl5T>V{svxQcw#yI^ zmin*zZABh^PhJ0%wj!q4LAmkl`jfj?PM>*o=2OMfX!Q2nJqh@rp7Yl?7v4WHnN!g& z-tK>@A)MBIdzmZP>i6k>-l)6ljB)E>s^N8d!>77FD*`2dcVbp^*iP%v&Nn|YN0+w} zTv`AvJ@K(VrgH{muIGjQvVY^ng7?GlZI^p@6I5kYo=BogRGGKEJ@dxZ;Iimx?}pJU z7cS17OV^wH;ZPGXJCqZ;2LwN+ASx7GlYZzkGYO1f9<|V?jTv<3kL{XNBd!*+>t}Xk z-Ly+&dPaAXp}Vf<;QPqqhCx##w`9wpR<+)HYx-R2n0ljUW)=#bG#)_V;f5}!a?b~k zJh;~M28HuL=BhI+PYu2WsSFeYr|_#SB^uSn=Pyb37AuM{f}$YsoPK@fuKe4`{Je>K z)tL8pL#_c`=U!d!N+dZnVEAt)|lOKq0bw}uC#CyP4Gh0cq`)%u@2Vl;MSr=820Rfw2t_FmikDc*xo zIneDiU)wo2r~&)(O;z3JGvoa`g*DtSw@!@DRpnOaUMHt3Isr)+jBou15f_GUcXzRV z^8{7BghPle&9(|(R>~Q*K+Nh^1v+3#3<(OBwotl- z{67$}_a}=*-uh3aXm|K*5q7J>Nyk1!m<-BY zICEh2M0~dI-Lxgf>r2n6uXAGVIkc7eoMrzmD_PT>9DY!{zjjVdL)Vm4iEk&8eDy=uo=Bi1@qCwXtu5 zQzqish5AALb2m&0ZLVa!4SJmWfg_)dr(gaU@UVFt8)25y#aX^KtEe`9;HOts+E4RI zSb5NMa3ms`FqR6kCXgX8i|LF{Sx2dFBCiS?Dqj+s4sV~*G7HozmD*-4SQD_euh%SH zT8-}B+kM|>F&SNVP~%QBKIh*;hW_B#obgQ2rVjUBj;IZShZ}Qwu8f(i>Ec!7npzH& z5c)e$T>Q2^8&D<)S{hE2P3HN?{BtM!_3^Tx=fAM4Q?Vgcbh~$YS!un&4fWSj;DVk2p zRr)i>ceb`alGF-3l{XFbI7)wWx@Hv<)#HWaa+^;aOyr~>)#g-e(e6aqSlSAIw7YIS zz8!~W7Tcv|xC{tZ92$YrTxKY8&Y5Pd!92FIw|9W~u*gX1vwxQ+lz;L@`~VGJAbU*ElY6?3J!;Ha z*^W@sylU3>7q0dLYTU}kuQb~o_px~T*oKYam@)DU3+7ZCnA6P&>>D^^EMGTjbcw|r zZ!CLO8G3U_--Lu;`HFc0AB(*wsB+NMZ1Dc8xCsgUW2GrrEy@<}>!PoLhU*VQ08AMW zENY#OpVylO5l#EV(&pILxx(aX>rAl#<#zzkVt8$CpaIpHz>0Igz5xAA4_(>C$pKKm z{VKg!)VLFizZ~nccxc)tQv_G(%~({x?>2A8tG@j!cex2>!Ti5NI;ts7=2U@IvEo&PdnPi35E2hh>pgSPl5yUd-A;Ce7;Ch2!mnam^0i7}W zknD%J)GCD@gJS#`tTRg_4>=hR^5C{3~%^6Ool* ze#s5Gk2(Zszbd#akF>c3DhObBX_`q$3&%X-*-e|@owW|C5m0tttu#ct`o zDz}!Xsjb&547UcceyNs=Gs?eS2{+lSX#Lb;9dPWyH*3i$S*VKkYrP+YAHzfJ%7D`z z!#>)0txwxfSBHXGnI`VJYsZ{2KGIPa4@d2x&wLs$ctdd=e0NzhrQgAL#;DZrsgj3qKt)VzL@BZx}i06>5=a8A@%R29kN1u{6 zJ|ud-mN<`A!nPRv2WfVX3zB(4+wM2Vg2l>|R&lK_quYx|Wo3d)5{J(O z3eTk|Kc9a*Km@r&sX47NG+5eUWwN~V31wTqNaNSZfhB1>Q-ApRHs4PF5XyqMe={;V zYXmKc^=2gSPo95}o=!Web1CXkI&lvKHZ{^&oiG}pLTcDhI2Jr!X86=Jf=El-1p84V z<)W*1NZ|m*7zmA1Pqv~pRY8Lp_qH0s6!TwHn&xgj-nPy395Shula0Giwv`%BcCQE{ za>2i5Ogd-95z{h4*+SD3A~thu4&!^Nh}rqp!B|?xO!cp54y*(3biA{S3rh0>!{&OjR?Hk?b-y?p9FPLt`V&25^$7V(PJ6x~i_?Ke}od z4&Chbl{v(rFz`7pIb*W-jd)lrIW=G8YzToB{1=k9Tu7zhy^a1VtonA_9_%o}@CHC4 zMwg_vdp5+Zi2VDrtz>YX<|6KUec-8WmadddDFCN(rVgrd>~xUv^f)>2tY(Vt1nEtd zRz4;DH*__rjJ0hX&~iU~^4B~c z)oiu9N@#`IuTt9t%g(P1)|TWgVZ~qCBah^TScbkao_t@Kg2*nfy7UUxwtJ1=4=um5LAmAZ7@}t0z2m$ zXQN=M9|SvSp42-~5b}ZU$=vEii9-TPkx(?jQ;oU?UTZ(j79p;Z?ZMzsEogu4?9x_AtJk^_cE{)Gv3c4U7M1qV%$xRV1Gt&}`CqOCm>mp((1tA4t z86lU}cHwEh=h7nD4fq+hKACjTi^bhy`q!b@0$4c&k`UD&dn4vQNWHan8$!Bi8uV!t zW}N~wCotz!>&@zd9{q7r6LGNl{bYLPD8rU0(VDG`Nm4`^NN7tI^4uB zP1j0~S2){qrzMUv%4##Fc;bz z&r?mN6ljFV;wsk|L5>Cw8a^||?W5(azL@`wKo_dM%lNAsmr^Kz~CP6z`mgH%=Kn#RLRc) z%3qJI)4a1F3v3wWv&R!SpH<0nU|L$~6iRwOHc?Q@fk$A zw2_m02;5R1k7EMsH$>Oc2m!Qv$r2y!6bEI}yfz^SPG8TXEsmmTGBW-d;Amt&B=jFq zF%1|_lQ)8uO<|+Be+u>=b*Bu0k@~cQm`FVR9m6A29h*^Du_61kyY}a%KkocLVMSi7>*l%jNt*gl5yH-l(yoA?;`h+f~ zM>5n3R*MEEiZV&82`J2YT^T+rvo>!E0Bs;gO%W6ylZx*Vql7l_qc^ADoh|i>gB!Ci z$A;fMz-MJE)w?>=NYHY)=ca zfkxn6W>}TB=LTGIL>k)^=cd3R0m%~x}mLsPR5loV(WH7qX3Ks!LG$&h)$g#W78!RdLtV@BV=@lJ6`>X)Fx-7`^7F2jwQ_%5fAG8ru?VLcP-1^(+j`>RS3 zgG6_Ssrst?w(z|a@zB=N3(wCucto{%gZ@US+*ph|K|hUdyx_%M5~0^U9lnW2h& z>Rwur{y($nAvYImFQ{>S>@))n<~J?hO% zTQXeOviIGWxhBwc_Q=!S^H?UgUDxz`60+B$YSeJv+Tg3HS#?ff3I6aI>636R5c5*5 z)t|iWPR$XwkjOqQCL&>G;^SPy4@tAHkig{CS znEvzE^t7kC7W`BYqu84?vB*k0j5XLVuT(RDdwOWavT@^@KX3<-X zV8hQ_Bh=S_-~au`N|@IgmPQ^5#_f7@MnQQ+mACk!ImKsjf)VjiNj>9yBYRI&at}EC z#(gF2R66@(pe061ki7=|MewT}3e-22BtG(tCE_JE3O9M2#meuqfp;#R4XJZ?bjS3X z;QdRirwfB=8Md`I{-zqtKFvWR&!PMQo9bl)GC;Gd+;01bi)(1MIf|l3Aw9kZjfAX# z!}9*`>aEBS-56iDYGYhff>kMd{Od8fNTyRFMMR8@x$uBSDd0}C*Sc+s_Nh3SjAo4E zX9Z`-{cW3pxo7POEqXlMsE(;~*VC8E()aC3KW2Ja`e%hmXcH+fOP{nrCRJE#E}!W! zn|RyWSNRw3P;cWe#7fWbPrh7y@#~z-x7r=YCKyVZEC_Z$<3M@H=jKpKAB(r}nN#2&Rd^RMrh**TpK8G*`eC?8=RTDS<+M zpJ(ou##~>sS(JU^X3&`wjEwBcoYVCm$fbEa@35L!JZn5-`ee02Zkvcp8lCx&g>TPw zy9pDM^~)HyqbBH^|0#W)9g)!*urg876lUp5qzfB1L-CHRnrX&({%sgmqLn33rwD&>Jg)J2g3=kQ(rI8*6qDDr zz^;E)4vAeDljSn+G$Mr!9JjDz>d57WJYmia9sf)ck({ngv5*!t6fpH#3_xJVVCNu2 zW|f1Xsp59qo;Gj9wUYI>bS-iz#b%*WrH&9n9+4-CcLbaR?-_P(E2@kQ9l`xNE+ygx5{)j<9^R!}Mo*bfE*Ht% z;K9uDfUInHwP`Nw*`L4WvL_1EChim&ZeWwPE!K|>VCq`ZGHIC(Cc&`v{KMOp5!cvg z;JteA?qg4TBW9^?Ag>=&R@5lr*PL z-PzUM-@^z$@W?JG`qcS1=?OJTaJfABhFrJmI_AOq4;HjVnvi@zmOt+^tb9qQ?3O&j zFH+(Zp~?mbmTXt>Qftqn7Z_GOyD7cyNnxU;%k$LgXEXwRw!a?jatlOSI?vtPo$0^d zNSnl({`buIReg`=^=zf@4b=j>#fCX2^fAJLXSF}z%hq@JUSMJp5OD8|QpS8|AF)|T04EHb?L$$~?~m zdgSa3{jlF%;?1Lbj`L2n+gx*@<*pu{zjqBdB&*EdD~MuP-yHN{5w?81v?oCME;`|< zq_)+|>(d;Z?AnM!$HAwCfiKgIw#OXVois$tqLsCqg^Q6c4Zl?=nAxR~wKwU@(q|cW zc~WNb*iqJQPtDS=MCUNe4ujtyFE9HFHoS_)sr0|MxH#5M!Ke$KoN~hy<*qLu*I)^M#T1^wxc4mWBYT?G}aO|z^+n~s}5aOsR84~2E z*OWYbYME#dh6CGG>IYNuUf8;LN%pAR3I&hT1+9RR19{ZK7O)nnfFfwzZ-8 z75mnuLrf;WH2_aMJPNib7PBgvMLQ=N%2<$Nba!1ON^MVZ^J6{qnb`8Lt-Su{J6K6E zzz+;7k!WOf$WFaf8+=^nzn*Et&$5xovY3<_GKnMSZI{&P!oHT5-1NvhTGggB*@5bY zx@_xXsgZzaG97Yp>+(DkPLqK?>Y}i@0IJ0klx+ zAa=io$nPTV9DDrrgOx=IwXAv5%^k@EdOd)Q6?N|os}s3pmMGYfuX+bnXN??NYEol# z=Z9>i#YKVK%B0eKH#eDu>d3*5{zAT=*O&h0s-bbsJiyP(_-0ddBYeL(!U(;|1jn9J zoijVK=AoCK2^GaQ0<=qNrxz+poKFu~n$6s?;O9PdM28t95N3*mZ^~|A9q1g_x7qeE zy|Tte^~i;69h$P|p{5H;>Z5d0%kS>TMPbmTR<&nBiy#BFHnENKv~4#3L88-jwkETX zaps(j56sZ_seTvx1nta=D&HH*aK*MR(8xOlcYf;|x0_8B>2Gg81*C<|c(dk|@_*)U z&g_H8yTNU+ij?7pR>j1B?uV(r5~1zzN;opcsWLu1krjRZwhXG^INdRy0ciOw_qR|M=As^s{-#5w3XS?W1R-7gmG@3 zPICK>4#B($3FLC?Bm3rI&(O^A=@ZxQv;#|{vG8(WgrLrKp%*dB-M(LZ>kV2Kor4B= z{Ag#q%DZ~uZQC!6GT9~y+2pJ}&(6J}+dtJ)7zphrlAzAeV4FhMwh-)R+0WF4)ABxQ zxIK5V&+e(DoHzXb;$Ex%n^Bph5BpGj+2V^udWRtU1Qq}$m#36$I{jjz?l^L;4aMG0 zRJOZ@+UK$m_YvrI-HNNzIBGGXFqAnqP^nJ&{>s%QL$$4Wm@)Ve$O1`O@E>m{(oh}w zZgWXUo|Q@34Nhsph8rsY=+c z5Ix<9?eoLJ zdNZxr07?LC!?gb(nOpQ~wp`7l6a=epMDEGCarTsUh^#Mh^4(TP5#ODGR~tEeMv$`s z4X)QA!(|s3zFh@A_X0BBBZatV14~;4Ax7$U8hev}Gd_ZV^+$zU>>_x7Z4A7}_(&Pw z(QFGC1Qq;N>QR@swK5_-vKx!mex83_ zVkbZNX}szi38#kDakSbc3K?i?Aw{cvbuiZ~ z_^Xhg&Ch|xMe~FkZjduOB6--(13n$i3nkO%Z5h zmpNNYiBV(>31GMDS2D=Ln(~8@s(+y~03#soU?L=M5`#PN7VPyuykcjt6Cwb-#lJKE zqyM@PmGROPvIzgyeQotmX==8m)v>>~PO+nS1Q)Bfw&8lO9f+EYn-*qyg{9jBAJh+; zUTeYOgCI?;65>X{a2!-VL_Bl>JPjV6H*ShfqP%!UMsp6oo*zi^iU-ym2U+kN=XF9J zH?LBn%~BXwJ>FkxJFot);;5({A;EZ>U5wp-?n=vr1M#0g3@8P{E%TSFOh#DV2Ls}{ z>3p#xFAgmrTMSwZ_*`zetE-#Z_1aMgk;gl%z4<$fe+^`JGGh#MOmiN+N;W$>Mk!j3 zQk|%fYXazvO;ai7Q1%KN-+Awikr?1g^*nJok&GOFu|`{Rrrc9mXZrwkAOgymFc6dt z)J|5SiZ#@w8^NJ8vm}0GT}bX^fXkyoj5X{2K(}DI;Sy_~k&NN1)YTjfe_wkD}$K(a<43^nDUheAsTQ}wYRg^dP=dG%8xmrb6FiWiO zagFmN@}}F}1GDtqH{VH47O0Tw%Z_KAEysYE)3i)uLH#AClY7-f1h}8PvJUFD0k+Z|Ux#^59U_>4QI7EiiSBT;6hQ+6bUPrq8i2G_DyVwTpe|P&~@;C+7^GK{rvr6&jo7wrm z4`Lkg0+Mx{dO$r^1agfTXQjlHmsM%j8ANnx;L1fUrqjBlplKZAR>PGlVrBPtjaw77 zf*K4E?OBUw{^Lo>1Ac0LN4&=$<;FRuQB;9BJhlcXXstz`XmCCBQ$`nj)kFFXFFa0#;YBN}r_P&S= zw`zEK!TQ0Qp4mexGdJ=Km7BT7KlX62vr^%+EREN7J0WvVl`@y{9GATh3vG~>rzA$D zIP(u>h^kwOicjdFUgaGy>?LL8ra;2itNsY3?e9lCE4t!)>W|JK!A8e>lK%Q;G6w3j z_u+TRpeR9>b$ysA)W;_Z`cZC^=}@=-VesAG?soL-Lwa?5I&RncC(o;T_oT+?uAAEb zL6Wbk4hw%ZzG@1qwPX$EMxR94yWf4BHC1crSVQ36>Q3=X4XfGn%>xM^50WyXuq^)-V-qy?iS6iH+Askp&Aw-?KTCefIVjw9(l? z4##(Ubw;3_>!2#pUjwWQkv&zgV(0S@gFLz?Dz=Hx-0wu)|M$iBYxifRbH5zP#2osK z^hK3oQdf<02&|y7il5FBtK9M(X-Wb3AHUPJ6ft5|a=$t|Oa3Oq$+?~g=)^S3C0@`} zTK}W+;Qc$_!fcE*yZswFTm^916*T|Xlf=Y@X`#gv2>l0Al`-Zf8nN>t)>YMXWm9W3 zj=;b>Z3gY1gsJ?02!o#yHzDJ@3~y<+Vsw1RR@u0lhc!Vz6X>k&XutFP>?LbIO2<9G zI>mE;Tbc+Ha&tf0D;rPp8MAoEXlO<(5K9fd(gQ(D)T5*RP_TGr2`N>9Kjw{OmKyos zPQrBml*N#ufSk$YSf&Y$I{WuM;dKW$xt@BXZ_L(M_1%x@b*clDCc*=I<>N=gAJh|B z;IvUutUf=9AvCgA#1p75^L~A8v1$4Za$z2mYG-E!NrnN?QZSr#!vBT;^#}efl{}TRPkjQHwQawMzXfC5s zc1r7KVkr1keY!i^RN*4r`B0Fk7GMkos_O1MP0Bs+opRzcf{l2SAk5l-#uUu^z{JMh z<$h_Kpq+g0@HWH@u5x9&8oS|V*LtV&wtz@Ht6`Z*2{G5n8U)YM6j~E}WJ8#oA4W=P zz)xu1@`~O{ogsqvkd(;oQvo2btjo2mm2E)-Bbr?yoJ`zZ+^77D5oZr+np&`G0hgW@ z5)E5oO{a<+7+Gu&<>y0;TQQt2{-{&Pt3rw->K_sTwDpcI)u0N%I=iODfMME&NBwrt zM8*fyr|hlw46540WS2JyPRlT;((3H`Sq5Dkf7OeOwk`mvEtL&ZAW7$<|6ry;7a*uy z)Gk_td4~e+9Fv2LWsIdB-TBU7prJ--tNX(v$}90~9;zqjW*g?*vWe`BY%xaH3kh$) z3pJ=RB>V(`6@A2rE6w2a1UF0j4%zdjyFl)MIV4Sn&?|_yKK>h z^XYELJb)Cj3_EthGP-(av<6nQ?KqWWpO!MUi~p1=sgQs8EQ;pP=3!aWRG~(kh`P`i z%@_-`4%Wwef6SQKH?w0;|CC8O{H;G#N(HlFtfK| zWbUrBs^a)y(`~X`!$pbTmS%eSj2lL_OB7PU*V{lFdm zL&~xd0pSdW3%-}_hPOfHFB8WzATjcRGmr5QRcr?LtKs#>SerQ(&m+p%FP>f>4Vn-2 zfoal4@8^9@c({(#v(LzulgLqFo?)ugjEg*|( zNhg?NmfAr|MS2`0bd96LX%Kyw^ysW>m(}XsgIU9h=D-&|>+a}KCr?P*+^ZS$Pi#Lp&E_l%S0{0>M%93p7B5PH$IinmWf z5Z5rknmyG$(K;z6LNST;i6~cZYB?D(xP*gVj8$srtlqp}N{Eis7wtV_uaWCT8r5e8 z%ldiW4gYmQwVy9-^)CIOhHu%nz4sYsihSL_o-|Q?7{J+T_hF>JtH1Be&ia?uuaZN? z=F^URO_S??ck7$L;8CF7ul}}UHN&|r)5bDyB)1w()y?#GQQdsHZ zFS@eFC$?#QN&Dx{!ARgfMD}{d5gsrr#0};)d$>Pz014+0{_513R~M(JZRCR zIZb87&RM8LsYtZr_+M?ZC7UjzE|c9JO*>YoW~_$0gR5j(2art&(AJ)vdf*K0fn zZmlKP2k;oxL?*r|uw=K*ptYF7ZxLboEZ$8mG}DBOUcXYh=9dr!Eg?Vj$4ebi=k&NG#=mz*KhJrW;bYq9k~Cveexi z7vdO+30QCy{tpT$_aJ1<$@A@nSArP^=KzcmwWQ;9?e*Kr^wiR#h$dqoTie_R zt)tH?hih1A*T-A!m?r1Vg>u-lpdu%H&9yMx@}S|*nd52a@`p@=cc9_8!Uq1eDgefaPCc*b&I%! z4$J$VkL`Wkj$3X>f#Nj7xs)A$ziCI@2ZACgYP z0JTFkwt;cLxdmge^=(b1Gp>|datBJ0B@(#a^p8S@o6L@kBZ~tEk~}$tqx)v`h&LZBAijT4P%+bf#c+@iRW)O z%9a%_svJS8;+7UX8bBYx_xIk{*;Zt4NclDvly3Gmbao|%=<*{zcgOu**{5C{ff=d6 zALzoimjW_FS_tXg(~Cd;$I-dRGyVQ=d@~HmDij%0)I#|~o=wV6cpM*W08ur&$rF5MCS?}M*l>yXjh!K_M?Y_ZrGtr+FTVL3uZq4xxw?ez)D|&uGR>@ zpev2=pJ(VP*nxs`vCF)@#r|)%K>gO(s8U|(U4TL2OgZs*wELs)5vbW^0de{HqQg#E zqeB1M7)``#bE()zu^oxSm3XG2%4O#V=T|j_INRly?oE$I_5*G@J%RA!;D0~V%w^|0 zSbwCEqKj?=Pn|3R-q~mDyrO}F6WZd--klvO%*_g#ZBQq*%$=)vslQLsu9hoK%cGLL%kO2eJUh;^pfPHtP<*}K6l4LNO7;Oxy9IA`-r-<6hfD~I-8iubiNUC@Yw*dQ z#Od$K zGtQp+PD4?&!tA*05>v3kd-g&s?kb~_Hb6?AwmI%ATi~@Udbd0xX67qp2C%w_a{T5x zV(c}fFcx9wzcs5%TsCqJ2!4-_)ahe7CE@FH_N{I6)@ZzweSuxBX+~WZb<~+_OBuh; zXsHCMAyh90oNnS=#=*<)7shkz8H7O`!I&J5;;0qaT|3vHC1b0E$iDit=D<%SMh`_L6mr+m4wD2-JU@KLc(4vg3+ZHs_AEy7FO z7Aq!xHvCW+hl2Em$E}YF^e&~PCFFJR@1MNe;7n_NxP_>0R^Nk{pL4Z7zpdedME5-S zie(1XdEIT`E2ZK>^f2phu4E_i`A0DEAfc-^WE9B`r96g^R27R5h*3mZ90?AIQ{Sv`Dr zQ8GA!%))=qxt4mITgsyRomnpN)+a&e>!_Sv@P>JUS~WfTTg3NHCoGRWI*{(6TwBHg zC#FHJU5D!TSsPKpw}-2xbg7s0TIj<1Nxv)MMvsfbib!w_18tfYbpBE0Q!9-Jn#*eI zJdJ_U+l}?&kS$0yrW+t2Jzseqlc|8PuCLJRY8*NhwsV;UqLv!7r$L{S-Wvt%Km9Pm zR)DzVUdEEAKrnc_7_UmTHDT~gVVLa)9sPSGL&gM`PODLxNn09TqDl0ajFXQ5_XNKW z+JytKKyxc&3PGK~@N~hVsZG~bMAd%g%2SRp3uO9GGU*{#XjWiX%!59+vI-u(3LA;! z%eZgQFg*30xqNR7As!%in_L4|`7)^jNfUAL8J`OmSFk5_No zy^#0S{%Gdat5i3T2SfNd$u;r&YB$6 zcg?m3-S9lhuJH$jiEW6nxIAmG|GeBD3b=Z`@#rzNa5XniThbP4=&?+Q#ynY{wy9SztT3ToKf-OAiWzH@sXw@z1ztLPl0lML_Um2V-}-7KiuyaRo{+q#c2ezT>aR?L7}&J!-03UISg~6b_t`ql zB**AMxLCuZF~&7mYG3ArGV_ zzLcWZ*yEM>U&w@mtD1+yyw9BZ*(R!p9yqqLdHBzZ67)s21l@ef`JX!s!tJDnvXY(=!{V5)<G z^4<%IV3)CH?rc2laXE@lNf3B<#*&KCFaE7#*WGM+Wg334-}!RQH@6Y%MB?k^9K0FG zWS=@_`O$ht?rx0uN{I7n#kYN$-jB2O|&vx$@`~>0`-tLpF0bG5oT7j*^ zfK^C|ax`k6B_(yR0%}bn`SPwQz6~sYaDDXan5IYQQ?9Ydj*}JIEuUSl!>WMfXr5nj zT8Z=IU&XjrU*cMVlE~N1?=Idj0baROmW@o>5gOSWIn!fkf88eg5P^mj)g0Cglja8` z)PFGdf2Xr2@q(^D1-3wU-GcLZ@yv=UI78Ud_?VamLGw{y#CXq?j z6^4U61(sekigu;lXixZv{Sw`W0EQ^X8J1E!up@sNY!JR$%U=wq4=R;t8~-6dg@*1n z@+nC6KY?_2LCPhTTuU5E=x>|0m9n$|?0ms(*aHP!qNcuUP>;k>H4sB=uKt5imFCgc z~|MwMog@P(yqN=kG~<78p*y!eMRrhFm3uy~Y7`}gEEdVFT1WsS>Nd^WF)gbf!E z%1WUe4cfX;OMj3&NahH&h_V#jgk<#c7u)x&2;ea{JpoNl&QXuY^E~bwB;gRSl)6p72&=<5m3so!J2nggEu@IMtCPYGE+4r2VaSj^G z2T`h4kOp?m=uL2Y-;T^`opLmQ_owEZyvwG@wF?ZbUhb5`uHUX=uz!?w_y($4dqoQF zAI7wzub{st)bom=Dwy_bvytl;a#Bj)+rn_obkrly$FPE2yah#crVQ$9wMo~kkg&_n z^bI9FdIiH@44O89#M3IkIE*@ENH4=M)c*%@FM*`_9>Rf8Mxw)d%ePYy@%t6 zAKt;w>}E;2rp*-(I{UbjOKv!ohHT%dI5(01e1suxbux`3yCV|{SxOyiI(`{(?*>d` z$VO>oxTHhrlGxPYOPBnUyXfWDcm8+B$Y)D%`N8aNgNRCb0F7W?)U}mtVzhRiRXID* zWV|k|@NAK;{%mURIXevbG%y59?B_zgVKG0`9Tb8nvf-&$mu&&ZU^>0b_$XSunEK%K12F|(}< zG}e>%w-GaBT?tnL7VC?hB9w*UkLjTz+Jl3~C+qJj6L;^IaEY)+D_8nU=^dgu!ao&^ zZ^qrdZhCP{F2B_FB5nHZr2_{ld{9N_aiFckWsI?9y@@aDfzfR$RP$R>y1ns?TQbTW!Y!V5_$4pnb&45e)W0EvrO-7=;?322xagT_eFdAqKy; zT34d(RVjmAK0A6F!hF-4Y2BZWm(2k_TaC7vx;oUj7A;gpFU)Y7&{1x5`2q_@S%$WF z)nHFlnwzsR64of!msut7DzG!r2WvjotC095f|3{K}?|9k{}#kjv;xIx`L5&VA66B z9bV>TA6YMff3HV4`-OY@oM{2T7j6_%{C~RKAJzMO8$X9vn)ykj8)-Vw_YLWj^wafD z0T36eC!=`3m7`vG%^fuE)e@(rWOpS>d;EGUYGWU^%=WzIws!cFJp>@0xl0;Z8JIa| zjfTeYQ@}m@w-Hu5*@l07V0X+JbCr1GvejA7@+}rD{3}Q)D&40q?>zdP;-FM53e zJQTiM28RSFwwb1pr>HqzZ|hXrA53p5>xrR%rmKdWeU0?f!S|#LYKTq3oyL77g?cbXCGEI!QvK)Ts(p7$jBWwTp2R5TmBs^4$ zBf0s>sk~_2Z5~_i$-YiYieV&dI+c-Q#ZugFeI6JuD~69g8oVm&XuH4JyvH$ij#m^u zdZcR8XfV5;L+eG^h3^UPRtB+nUismD94we0B@3O(O~jGEZ&^ilErVgp5p!9aPFr>% z1Aou$iBF{l8awWfCzk%mO%GqzOen0;{hFpNX5tr{U>Cm++L+j5gEIjIEzBI7o*ioS z;)FeA(xJ1lt7v}4iQhJuPFxjuP?TSSt+N6GTh{mEv`VbbkQ`%>AYvQL(rX)&2jQn&WYws?~ zXcXVNma=SDWvusQ~Y5@N=ycRVSuN`4C-A;C;)9h0%YBrJ# z`&o-It7Ycu%dI>Jc}fCeC6>3QzvaTI za9~n{kS8t$DyzPhGhEBdIr)~Y32k)+;7l^d#z$F#d_(Lzee#$g^tL$iZ!1^{54wIo z)t~+fNeLX`&{V(d5~r{S;mQJxt7CW945I;w`dFmmM4LqL4(^J$!A`Pau<#E{WBHM@ zfB~8=2}>iv)wco*ltw*FoD6)5cMJWxv?JPS{=rvreH__-)7Z4ng)rd&|YbNM^}HZ#a!f>PHT%N5I+hI{NO5+^_`m7*^WKGNU}$ z;yls>jPD7pE@J6;@o&;2ZT^<|{f6-Ivm(v1z7j zrpMZE&Ov?aRz*h;QY0aKI+)+C@iRy?Tnp67$>i~{_=>=$S{0A1hGPB>8}&@`!^DbLG8p#!|+JG4jVoE-B;h^3PK`+C+-A$HK-+%%FA%;^ozL&~NY5f6 z{0Dn?Rz2{CbbapNA=z-0lV{&Ci|X*iVGWwv)ygofL7^ zhE}|fXFYTXVR{uq#}ikc)wB4Cf|i}ZDYta3q{XkA!bqcb3D!zx{nH;@e!rHJ!^{+fX1`3e zRKy{$Js4GKL42@DB=|6VCT46rATd1CAyQ zC5esJNDlcNATRjW;YF36&zIic+^&8V)5X9Sln1=5a}oA~g%2R366f5D zs_ug7-~*$Ypb4tRAk_V0ck$1OC#+RQtyX8B{6}>hOdx%P=k!}By@Gju7h4;L0rXUxbAREBd+WYcQT9qjY#6hNmJx(2M zz<}R#nh)c`q6MH!_GTtz-kR`<$+hWw3OP+|<)E2NT8Rmw>@Zebi^rbEJwKeT9bvu- z%zBFRi!vQg7#4hTtY1yT<42lw0K`~V`&AS4pMQZm2g_$>6U}EsE)zKg<%Sm!>ZjiN zVtmP=%gl6$i#h5(bZsnM5@(<#@xypGiKl-_F8_Hwyg?Aej?youCs6yx6d&WbFQqk@ z&4)Em|IM5({(5B5${ee-{6Qlia1&Lld}cj0=+Q}wx$gso5GqEX?Mz3fUU_JkZe3&O z7i#;&<8j4!B55Jy?C>!gh_@DdCJ%IvA#|vQ+`Np)teG^omJ^0U55FsGES668`YYc~ z*yo(Q=4wdc)YwE=+u7Mmd=b zRy<^Y-JSE3Ue${I9b>d;uIgZwQ2qQ7E@a-Oyg7BL)A%G2LN`h+L^UB4I@^pMYk9tZ zq>vCzQ?qu|*56qtK9+ldnKpjz>1=?#PV0?$dFy!Emmld*%u0Yf;r%X2r%kBysVP3l z=h!Xp-X7^z4rlCD*~>G!2)DF+F~5yBS>6q$=5?Ntig@EBYi8fO>t8DlrL-PgczgD1 z(EBWrLk#zEO*si}`!+~7;R||eSH#W#K{gQ*E7orrz_D{&FH)Uf%}51S*(-M7K?Y&Z zhej)o!G|{bU+Aw!tscJoo+t6^W2IdMTAh(+_81tFzEPbUlh5XP+%YlC&pg-}={5dm zeluNh*#1RbX+_9+Tth{0=+!sL^(jycvS6U$_#LueviEIMdnaCn`-DxGSaChh=}aV z{D*cO`_IiDM+RTD`0%nmOO=&%+oyd2 zQ4;q4Z$^1goSn-;?}kM5Sc%eyLnjgwk+;UTjsVr-zNuX7V60h)-RH0mreenoQ?rq3 zIY;ji_o;8~dl+LR_-p-n`^}?j+6MaWj>i3$8N1U>yq>a_PQNZyPjhdZEUkZn4)++Z zkmpsVCm2WD%)FCnT+E94mbl>tiP{BUP>4UZe(DFaa44q2ShU5BB4$E95xu+CVLQ3Q z>85BO`RL#K*_oK_bp=y{%G|qVY}D!*#f{^B*azYoD!CJ3l9JYIgJaemEz)(j1c7DT zkNQx8SwCC(mTN<}h&$He@NP?VP0hll(_W1*3@Wezp2ayrL|cHZ#f{A8H*=x8ZfQdd3OD!-M&cR2>vGWsyXj^vr^l;$!vkcqoH?q6{shiV8j{ zYQO4nlwRNpgGW>v@I6XA7>S<2mq~|M>Cr}$$()mHDB(6-n32ps_v}Ek)mTJaq|o-6 zl#5I$MqPf&+9^TX{1Y=a(=#Fi9oL0uCgMi_&&>2I-Y!mr_IEGxX=1 zEpQU8#E%kcgXb?d@t;an+!K^e$paGK>?1Dm$^LDvG)W%ko) zCU2YMJX(Dz-FQ`@SVLCGrrV?b^2)4Y0C`WORC<>o&aRD1DDK^{$0_%FTmT{E=&bZa zqG@6iNchF+4dd4N&?3+&?jKSyTuxZ4IzRkw@_^Nx2yKBED4Nc9?%Z zfDADg6;`ljEqB0c^j(70u_W;i_8r+JLnFyyFztvLcQZfW)#InRN@K=X&{<5BOVBY$ zI2gi!CI%0gVOtLBF1&Kk2m)942a|ZH>iOZdQc^YlhjXC2JB4%}>PoieTVa)7cl^y37TX zItl!p#dt?TXUXe6#nZQu=`mB*u4^(uQjB5DGJLTo#5^&Q2!~S$x3nVcSX3OKpj)bF z$b7#Pio7OH*zcBd%SIfz!CB8c_Cwek?}#r|RQ9jGK?lJrK650SE`dwLTYyhtGM&BW z4&z*$Xz!c((3f++4H!nwox}$*N)k#7T?Z%bv+qWUeO)6Q&vn+m_V~fxO()IfzyDm5 zao0Jn)_Hg4NS>_ zbF%DuP(JmUW3f52QtF0Yl8e-kU3&2b|I|m3{5R8MzgrO8xA`4eqd|k=3k_}l2aDvB zck?^rNKfCD_BSvqRx$L9T|M&!|M@&D@LX?i73nd@{y1iwzZiI^=vvjo@uYo=JE)`y zbFuP9i`aRYGez8sal^+y1wBiOo=l4Ri6q`~hu4odUi=VMdj+w!Vc-8gr}`VQ=51@M z{D1od&~C-f;9Ajte`4PDOWZNG@5?PXo^r4GIn_R6sYhz!SnOoYd0KScd&7HLnF00p zzSKMd<6uw96K;BBo5ID529JM~M}1Q?wP3xt_<~vb-AmQPRcZGaKF0^ut{o_c_xyuW zh%WNzYhF%| zz%XQudDsflnd7Ik_or(TRa^B=Df3j4Bad6F=*<*O$B^#{Od`vNf^&Dq4_RCf40|*5 zMcw4u;a{@SQ&yPLS;1zB54{ZoS0=s%x~5mwTxR2EJ3!d=;4BPu0etsgKljk4m4jQq z^e;6$dbCmfa>@Cs0t2G4Ix#vBz5VU)S~AY1h%yoniAO8*C`1BF8v{J}=R@56>o^foya;{r36GQ4vHs-8!k0i{DLJ!qy0&-@6{$p4641+q)P=Ct&%XoA#OQ(k%IaS;e)TWFUew0 zH;lqVQZ_2>?)+};Q9;u_(s>A1Kl$AA_Q>SnaE%O*V0W^+ub@97MwLT+jN~8maA?(o z!Od>^x0vssh8*@w+pfGRzc?wLpXFwE^m9e?=~ny#&~rykLJmcpGe2+YFOkhzI^cY? z<-e|?#B@v2uiw_Ra{J?2*lXkAnbub))0NV(|p}hnYE?ac~q*X!4pDE(U|a-i-D;9N~QG`)R$rR7bz=WXl0aY zx&?Af6$Sl(AoOkDDdbJevJ9auWEs@vMtq0fo!1+6{A}$>SP&b(qRd$%&MbSz;Q#yl z1BQNJN*J||*VYX?RG|m|48hL*F#ND{`UEN2^s)bfubC^V+!*!%n^*gWRL||HV z2)Zmj4*9{jB=T^zt>T!%C@@MGVXIS>l1yFZc*^%C;n%c{KQ%FzHJopqb8_@ZOAsHp zJH(-E3(sg{OzzAUGucW4GkEf9kguM^h3>X)a1VFw%(=d>(1V>I$o;DBwSe!(u)%?P z)^@pA+v*w#M--**vzK5cE`ewr{>fgVoUxjaJVV53eeQ@7+5&hgCKTsXh+f}mOdNB> zhK_c`22KZCVbx*OhhTKK%N{~@P8Rrjx=I~A(ssEGGLbr>`llkzT`02+Zt;A4`T1hB+`HJVWP~89}l0h;) zE@M4@D0J-A(@xEC7LV@uKZtq!Mg5AOceWPsW|p9!BB`$=Y5S>+PZS{6W^p}d#I%Xe z72__Wd@LL%&U&98Bgf048_XLuaCB9Mk}#l0>}%c_v{!X8_2ls#p;Hz zYSax_ng~8nY*~wtXa;>)Xq;A~h5yY~20$Y5Win1Dvi_!BM**5y7~%<+4i^Mf!M2X9 za=T_`ZFt4&PUv9nRIKPi{*v4%laH`dO2T64_63z?*rzP*H}@OhujppUT!;PG@mT*# z)Lpaez8$s3*I+O#-~_j8>}e4a$jv4YDE$bjN%ksGn*7u``(svd*m(!c+&P1$zinW` z@11^CX)_52Iv;O#bg0A>G(um*>&IKB;%+q2H}clN6~tv^ozE6@Q+#bti$|?y^B%ES-AQ(LdUm<%To%O=GVqUL7kT3n+NRLSh@IjIdT&k zrjetdk;CZy`v|Cacs(n^nA(&v@x;^{MqZ1RDQ&<%7x@Y^O=!(h5zieGonJH*4N}!9_n&&k-J~hv)z5 zFCO0#5z~oXRsEtYYi&=({`+K-UP_sYlvm99`x;xUS>kJgw#fG)vKPDsJsO zL~eiQfctRmG*u|CZQz8A6fDAH?`&$|R~^M$Iystr>pJlC4kQ(>8s06$J!heT{7gW( z&NN!G)xuu z8uSdiP``Uys~Yyk=o0UR{bRXt zC{+q*S2G167a|)WYCqx4rm|_VD;#QplV>PDi@dPD++ALs6Rw(-sWkddpP3p;YoE#tsr$m~LInDJG5$%W=c-IEa>a@HvJ z+{q8cuU}VJz)@Ed@SX!Caf_4_cs%$L^`D(rs^DPvD_Z-JMlI&t$KKr9i?apuECby0 zHBJS>>|OP&TC{4*lUc33t}1C%J%e}>As>Ty%oT!sSgQ?p7&sD!vLJFzk*#VJf}Q2g z+e+Q02ORP?r#>d46BVjqMSOyJTSTP@8Fi7pS23bn%GSJSf1*d^ zk>*sz+O&Xv57+PKZe@hU2NTC(JzB-E_my5UCsNLk3>{%4xDio5G;+?tvtw}@+o~Dx zmpfDd&|Wg>22z~l8RzF8Q7JtjDE8Enj-jh^e-mf=Q{(oX*BB_2a&6uTJ5MZL#+7}? z-?w}X>rM6I^gXrF^%y1v?caQ=4QEjX8BV*ZP+nLe;a=GGb1?OFhkT-7y0+K&LY`+; zL%_aH2dfJw>{d⋘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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 diff --git a/website/appphp/static/img/poticon512.png b/website/appphp/static/img/poticon512.png deleted file mode 100644 index bce391c2a46bdbb14fc0c441dd4eb7bc91533f06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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/website/appphp/static/img/pottop.png b/website/appphp/static/img/pottop.png deleted file mode 100644 index 5f159c55911a6ef0261a3d5374c4f7e9bd9e7d11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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 diff --git a/website/appphp/static/img/toplogo.png b/website/appphp/static/img/toplogo.png deleted file mode 100644 index 37e2068779f8f5eaf709c348ebfb46fbe6d6a2d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31456 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 Sp|^nNkBXv(LbaTE@c#jenT=Th diff --git a/website/appphp/static/js/app.js b/website/appphp/static/js/app.js deleted file mode 100644 index cfc90fee..00000000 --- a/website/appphp/static/js/app.js +++ /dev/null @@ -1,93 +0,0 @@ -// let choice = {"current_schemata":null}; - -let app = { - loadpage: function(modulepage, modulename) { - location.href=modulepage; - }, - logout: function() { - postData(location.href, { "logout": "1" }).then (data => { location.href = 'login.html';}); - // ( , app.reloadpage); - }, - reloadpage() { - - }, - changedataset: function(){ - // let schemata = document.getElementById("current_schemata").nodeValue; - - }, - getCurrentSchemata: function(){ - return schemata; - }, - - changedataset: function(){ - let csel = document.getElementById("current_schemata").value; - console.log(csel); - schemata = csel; - postData("db.cgi",{"fn":"setsessiondata","params":"[\"schemata\",\"" + csel +"\"]"}).then(data => {}); - }, - setschemata(data){ - // if (data && data.setsessiondata){ - // schemata = data.setsessiondata.schemata; - // } - // console.log("new schemata:" + schemata); - }, - 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; -}, -// showsnackbar: function(xclass,xmessage){ -// var sb = document.getElementById("snackbar"); -// sb.className="show " + xclass; -// sb.innerHTML = xmessage; -// setTimeout(function(){ sb.className = sb.className.replace(sb.className, ""); }, 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){ - var opts = field.selectedOptions; - var vals = []; - for (var o in opts){ - if (opts[o].value){ - vals.push(opts[o].value); - } - } - if (vals.length > 0) { - flds[field.getAttribute("name")] = vals; - } else { - flds[field.getAttribute("name")] = ""; - } - } - 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.querySelectorAll('.data_'+ dataclass); - //console.log("Data to fill"); - //console.log(data); - if (data){ - for (var f in frm){ - //console.log(frm[f].id); - if (frm[f].id){ - frm[f].dataset.id=data['id']; - } - if (data[frm[f].id]){ - //console.log("=>"); - //console.log(data[frm[f].id]); - // if (onblur){ - // frm[f].addEventListener('blur',onblur); - // } - - //frm[f].dataset.id=data['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")){ - console.log("set flatpickr value:" + data[frm[f].id]); - frm[f]._flatpickr.setDate(data[frm[f].id]); - } - else if (frm[f].classList.contains("timefield")){ - frm[f].value = timecalc.StringToTime(data[frm[f].id]); - // frm[f]._flatpickr.setDate(data[frm[f].id]); - } - else { - frm[f].value=data[frm[f].id]; - } - } - if (frm[f].tagName == 'SELECT'){ - if (frm[f].multiple == true){ - console.log("Set Multiple:" + frm[f].id); - console.log(data[frm[f].id]); - 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; - //console.log("selected value =" + csel); - if (data){ - for (var i in data){ - sellist.push({value:data[i][vidcol],text:data[i][vvalcol]}); - } - } - obj.setData(sellist); - 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"] = obj.value; - } else { - fdata["value"] = null; - } - }else { - fdata["value"] = obj.value; - } - } - postData("db.cgi",fdata).then(data => { if (callback){callback(data);}}); -}, -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"] = obj.value; - } else { - fdata["value"] = null; - } - }else { - fdata["value"] = obj.value; - } - } - postData("db.cgi",fdata).then(data => { }); -} - - -} \ No newline at end of file diff --git a/website/appphp/static/js/report.js b/website/appphp/static/js/report.js deleted file mode 100644 index 329b926a..00000000 --- a/website/appphp/static/js/report.js +++ /dev/null @@ -1,13 +0,0 @@ -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.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/website/appphp/static/js/request.js b/website/appphp/static/js/request.js deleted file mode 100644 index 01068ed4..00000000 --- a/website/appphp/static/js/request.js +++ /dev/null @@ -1,124 +0,0 @@ -var api = location.origin + location.pathname.substring(0,location.pathname.lastIndexOf('/')) + '/'; -// if (location.pathname.indexOf('module') > 0){ -// api = location.origin + location.pathname.substring(0, location.pathname.indexOf('module')) + '/'; -// } - -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 req = { - multipartform: function(url,frmdata,callback){ - var ret = null; - // var rdata = null; - if (!callback) { - callback = req.asyncNoEvent; - } - var request = new XMLHttpRequest(); - var sendurl = api + url; - request.open("POST", sendurl, true); - request.onload = function(){ - if (request.status >= 200 && request.status <= 400){ - if (request.getResponseHeader("Content-Type").indexOf('application/json') == 0){ - var xparse = JSON.parse(request.responseText); - ret = xparse.result; - } - else { - ret = request.responseText; - } - callback(ret); - } else { - alert("Server ERROR:" + request.status + "\n" + request.responseText); - } - }; - request.onerror = function(){ - alert("Connection ERROR!\n" + url); - }; - - request.setRequestHeader('Content-Type','multipart/form-data; charset=UTF-8'); - request.send(frmdata); - return ret; - }, - reqdata: function(url,data,callback){ - var ret = null; - var rdata = null; - if (!callback) { callback = req.asyncNoEvent; } - var request = new XMLHttpRequest(); - if (typeof data == 'object'){ - var xdata = []; - for (var i in data){ - var value = ''; - if (typeof(data[i]) == 'object'){ - value = encodeURIComponent(JSON.stringify(data[i])); - } else { - value = encodeURIComponent(data[i]); - } - xdata.push(i + "=" + value); - } - rdata = xdata.join("&"); - }else { - rdata = data; - } - //console.log("Data Request for " + url); - //console.log(rdata); - var sendurl = api + url; - console.log(sendurl + '?' + rdata); - request.open("POST", sendurl, true); - request.onload = function(){ - if (request.status >= 200 && request.status <= 400){ - if (request.getResponseHeader("Content-Type").indexOf('application/json') == 0){ - if (request.responseText){ - var xparse = JSON.parse(request.responseText); - ret = xparse.result; - } else { - ret = null; - } - }else { - ret = request.responseText; - } - callback(ret); - } else { - console.log("Server ERROR: " + request.status + "\n" + request.responseText); - } - }; - request.onerror = function(){ - console.log("ERROR: connection ERROR\n" + url); - }; - request.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8'); - request.send(rdata); - return ret; - }, - asyncNoEvent: function(data){ - console.log("NoEvent Called!"); - console.log(data); - } - -} - -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)); - } - } -} \ No newline at end of file diff --git a/website/appphp/static/js/timecalc.js b/website/appphp/static/js/timecalc.js deleted file mode 100644 index d2614c56..00000000 --- a/website/appphp/static/js/timecalc.js +++ /dev/null @@ -1,113 +0,0 @@ -let timecalc = { - MinutesToTime:function (minutes) { - //console.log("MtoT: " + minutes); - if ((minutes == null) || (minutes == "")){ return "00:00";}; - let hours = parseInt(minutes/60); - let restminutes = minutes-(hours*60); - //console.log("H:" + hours + " M:" +restminutes); - //console.log("H:" + timecalc.lpad(hours,2,'0') + " M:" +timecalc.lpad(restminutes,2,'0')); - 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)); - //console.log(hours +"+" + minutes); - return hours+minutes; - }, - lpad: function(str, length,padString) { - let xstr = str.toString(); - //console.log("xstr" + xstr); - 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.substring(0,5); - strin = strin.replace(/\D/g,''); - if (strin.length == 0){ return "";} - if (strin.length <= 2){ - if (strin > "23") {return ""} else { - 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){ - - 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 hours + ":" + timecalc.lpad(minutes,2,'0'); - } - if (strin == ""){ return "";} - strin = strin.replace(/\D/g,''); - return 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); - 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; - } -} diff --git a/website/appphp/static/vendors/flatpickr/flatpickr.css b/website/appphp/static/vendors/flatpickr/flatpickr.css deleted file mode 100644 index 64eb4674..00000000 --- a/website/appphp/static/vendors/flatpickr/flatpickr.css +++ /dev/null @@ -1,784 +0,0 @@ -.flatpickr-calendar { - background: transparent; - opacity: 0; - display: none; - text-align: center; - visibility: hidden; - padding: 0; - -webkit-animation: none; - animation: none; - direction: ltr; - border: 0; - font-size: 14px; - line-height: 24px; - border-radius: 5px; - position: absolute; - width: 307.875px; - -webkit-box-sizing: border-box; - box-sizing: border-box; - -ms-touch-action: manipulation; - touch-action: manipulation; - background: #fff; - -webkit-box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0,0,0,0.08); - box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0,0,0,0.08); -} -.flatpickr-calendar.open, -.flatpickr-calendar.inline { - opacity: 1; - max-height: 640px; - visibility: visible; -} -.flatpickr-calendar.open { - display: inline-block; - z-index: 99999; -} -.flatpickr-calendar.animate.open { - -webkit-animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1); - animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1); -} -.flatpickr-calendar.inline { - display: block; - position: relative; - top: 2px; -} -.flatpickr-calendar.static { - position: absolute; - top: calc(100% + 2px); -} -.flatpickr-calendar.static.open { - z-index: 999; - display: block; -} -.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7) { - -webkit-box-shadow: none !important; - box-shadow: none !important; -} -.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1) { - -webkit-box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6; - box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6; -} -.flatpickr-calendar .hasWeeks .dayContainer, -.flatpickr-calendar .hasTime .dayContainer { - border-bottom: 0; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.flatpickr-calendar .hasWeeks .dayContainer { - border-left: 0; -} -.flatpickr-calendar.showTimeInput.hasTime .flatpickr-time { - height: 40px; - border-top: 1px solid #e6e6e6; -} -.flatpickr-calendar.noCalendar.hasTime .flatpickr-time { - height: auto; -} -.flatpickr-calendar:before, -.flatpickr-calendar:after { - position: absolute; - display: block; - pointer-events: none; - border: solid transparent; - content: ''; - height: 0; - width: 0; - left: 22px; -} -.flatpickr-calendar.rightMost:before, -.flatpickr-calendar.rightMost:after { - left: auto; - right: 22px; -} -.flatpickr-calendar:before { - border-width: 5px; - margin: 0 -5px; -} -.flatpickr-calendar:after { - border-width: 4px; - margin: 0 -4px; -} -.flatpickr-calendar.arrowTop:before, -.flatpickr-calendar.arrowTop:after { - bottom: 100%; -} -.flatpickr-calendar.arrowTop:before { - border-bottom-color: #e6e6e6; -} -.flatpickr-calendar.arrowTop:after { - border-bottom-color: #fff; -} -.flatpickr-calendar.arrowBottom:before, -.flatpickr-calendar.arrowBottom:after { - top: 100%; -} -.flatpickr-calendar.arrowBottom:before { - border-top-color: #e6e6e6; -} -.flatpickr-calendar.arrowBottom:after { - border-top-color: #fff; -} -.flatpickr-calendar:focus { - outline: 0; -} -.flatpickr-wrapper { - position: relative; - display: inline-block; -} -.flatpickr-months { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; -} -.flatpickr-months .flatpickr-month { - background: transparent; - color: rgba(0,0,0,0.9); - fill: rgba(0,0,0,0.9); - height: 34px; - line-height: 1; - text-align: center; - position: relative; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - overflow: hidden; - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; -} -.flatpickr-months .flatpickr-prev-month, -.flatpickr-months .flatpickr-next-month { - text-decoration: none; - cursor: pointer; - position: absolute; - top: 0; - height: 34px; - padding: 10px; - z-index: 3; - color: rgba(0,0,0,0.9); - fill: rgba(0,0,0,0.9); -} -.flatpickr-months .flatpickr-prev-month.flatpickr-disabled, -.flatpickr-months .flatpickr-next-month.flatpickr-disabled { - display: none; -} -.flatpickr-months .flatpickr-prev-month i, -.flatpickr-months .flatpickr-next-month i { - position: relative; -} -.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month, -.flatpickr-months .flatpickr-next-month.flatpickr-prev-month { -/* - /*rtl:begin:ignore*/ -/* - */ - left: 0; -/* - /*rtl:end:ignore*/ -/* - */ -} -/* - /*rtl:begin:ignore*/ -/* - /*rtl:end:ignore*/ -.flatpickr-months .flatpickr-prev-month.flatpickr-next-month, -.flatpickr-months .flatpickr-next-month.flatpickr-next-month { -/* - /*rtl:begin:ignore*/ -/* - */ - right: 0; -/* - /*rtl:end:ignore*/ -/* - */ -} -/* - /*rtl:begin:ignore*/ -/* - /*rtl:end:ignore*/ -.flatpickr-months .flatpickr-prev-month:hover, -.flatpickr-months .flatpickr-next-month:hover { - color: #959ea9; -} -.flatpickr-months .flatpickr-prev-month:hover svg, -.flatpickr-months .flatpickr-next-month:hover svg { - fill: #f64747; -} -.flatpickr-months .flatpickr-prev-month svg, -.flatpickr-months .flatpickr-next-month svg { - width: 14px; - height: 14px; -} -.flatpickr-months .flatpickr-prev-month svg path, -.flatpickr-months .flatpickr-next-month svg path { - -webkit-transition: fill 0.1s; - transition: fill 0.1s; - fill: inherit; -} -.numInputWrapper { - position: relative; - height: auto; -} -.numInputWrapper input, -.numInputWrapper span { - display: inline-block; -} -.numInputWrapper input { - width: 100%; -} -.numInputWrapper input::-ms-clear { - display: none; -} -.numInputWrapper input::-webkit-outer-spin-button, -.numInputWrapper input::-webkit-inner-spin-button { - margin: 0; - -webkit-appearance: none; -} -.numInputWrapper span { - position: absolute; - right: 0; - width: 14px; - padding: 0 4px 0 2px; - height: 50%; - line-height: 50%; - opacity: 0; - cursor: pointer; - border: 1px solid rgba(57,57,57,0.15); - -webkit-box-sizing: border-box; - box-sizing: border-box; -} -.numInputWrapper span:hover { - background: rgba(0,0,0,0.1); -} -.numInputWrapper span:active { - background: rgba(0,0,0,0.2); -} -.numInputWrapper span:after { - display: block; - content: ""; - position: absolute; -} -.numInputWrapper span.arrowUp { - top: 0; - border-bottom: 0; -} -.numInputWrapper span.arrowUp:after { - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-bottom: 4px solid rgba(57,57,57,0.6); - top: 26%; -} -.numInputWrapper span.arrowDown { - top: 50%; -} -.numInputWrapper span.arrowDown:after { - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-top: 4px solid rgba(57,57,57,0.6); - top: 40%; -} -.numInputWrapper span svg { - width: inherit; - height: auto; -} -.numInputWrapper span svg path { - fill: rgba(0,0,0,0.5); -} -.numInputWrapper:hover { - background: rgba(0,0,0,0.05); -} -.numInputWrapper:hover span { - opacity: 1; -} -.flatpickr-current-month { - font-size: 135%; - line-height: inherit; - font-weight: 300; - color: inherit; - position: absolute; - width: 75%; - left: 12.5%; - padding: 7.48px 0 0 0; - line-height: 1; - height: 34px; - display: inline-block; - text-align: center; - -webkit-transform: translate3d(0px, 0px, 0px); - transform: translate3d(0px, 0px, 0px); -} -.flatpickr-current-month span.cur-month { - font-family: inherit; - font-weight: 700; - color: inherit; - display: inline-block; - margin-left: 0.5ch; - padding: 0; -} -.flatpickr-current-month span.cur-month:hover { - background: rgba(0,0,0,0.05); -} -.flatpickr-current-month .numInputWrapper { - width: 6ch; - width: 7ch\0; - display: inline-block; -} -.flatpickr-current-month .numInputWrapper span.arrowUp:after { - border-bottom-color: rgba(0,0,0,0.9); -} -.flatpickr-current-month .numInputWrapper span.arrowDown:after { - border-top-color: rgba(0,0,0,0.9); -} -.flatpickr-current-month input.cur-year { - background: transparent; - -webkit-box-sizing: border-box; - box-sizing: border-box; - color: inherit; - cursor: text; - padding: 0 0 0 0.5ch; - margin: 0; - display: inline-block; - font-size: inherit; - font-family: inherit; - font-weight: 300; - line-height: inherit; - height: auto; - border: 0; - border-radius: 0; - vertical-align: initial; - -webkit-appearance: textfield; - -moz-appearance: textfield; - appearance: textfield; -} -.flatpickr-current-month input.cur-year:focus { - outline: 0; -} -.flatpickr-current-month input.cur-year[disabled], -.flatpickr-current-month input.cur-year[disabled]:hover { - font-size: 100%; - color: rgba(0,0,0,0.5); - background: transparent; - pointer-events: none; -} -.flatpickr-current-month .flatpickr-monthDropdown-months { - appearance: menulist; - background: transparent; - border: none; - border-radius: 0; - box-sizing: border-box; - color: inherit; - cursor: pointer; - font-size: inherit; - font-family: inherit; - font-weight: 300; - height: auto; - line-height: inherit; - margin: -1px 0 0 0; - outline: none; - padding: 0 0 0 0.5ch; - position: relative; - vertical-align: initial; - -webkit-box-sizing: border-box; - -webkit-appearance: menulist; - -moz-appearance: menulist; - width: auto; -} -.flatpickr-current-month .flatpickr-monthDropdown-months:focus, -.flatpickr-current-month .flatpickr-monthDropdown-months:active { - outline: none; -} -.flatpickr-current-month .flatpickr-monthDropdown-months:hover { - background: rgba(0,0,0,0.05); -} -.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month { - background-color: transparent; - outline: none; - padding: 0; -} -.flatpickr-weekdays { - background: transparent; - text-align: center; - overflow: hidden; - width: 100%; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - height: 28px; -} -.flatpickr-weekdays .flatpickr-weekdaycontainer { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; -} -span.flatpickr-weekday { - cursor: default; - font-size: 90%; - background: transparent; - color: rgba(0,0,0,0.54); - line-height: 1; - margin: 0; - text-align: center; - display: block; - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; - font-weight: bolder; -} -.dayContainer, -.flatpickr-weeks { - padding: 1px 0 0 0; -} -.flatpickr-days { - position: relative; - overflow: hidden; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-align: start; - -webkit-align-items: flex-start; - -ms-flex-align: start; - align-items: flex-start; - width: 307.875px; -} -.flatpickr-days:focus { - outline: 0; -} -.dayContainer { - padding: 0; - outline: 0; - text-align: left; - width: 307.875px; - min-width: 307.875px; - max-width: 307.875px; - -webkit-box-sizing: border-box; - box-sizing: border-box; - display: inline-block; - display: -ms-flexbox; - display: -webkit-box; - display: -webkit-flex; - display: flex; - -webkit-flex-wrap: wrap; - flex-wrap: wrap; - -ms-flex-wrap: wrap; - -ms-flex-pack: justify; - -webkit-justify-content: space-around; - justify-content: space-around; - -webkit-transform: translate3d(0px, 0px, 0px); - transform: translate3d(0px, 0px, 0px); - opacity: 1; -} -.dayContainer + .dayContainer { - -webkit-box-shadow: -1px 0 0 #e6e6e6; - box-shadow: -1px 0 0 #e6e6e6; -} -.flatpickr-day { - background: none; - border: 1px solid transparent; - border-radius: 150px; - -webkit-box-sizing: border-box; - box-sizing: border-box; - color: #393939; - cursor: pointer; - font-weight: 400; - width: 14.2857143%; - -webkit-flex-basis: 14.2857143%; - -ms-flex-preferred-size: 14.2857143%; - flex-basis: 14.2857143%; - max-width: 39px; - height: 39px; - line-height: 39px; - margin: 0; - display: inline-block; - position: relative; - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - text-align: center; -} -.flatpickr-day.inRange, -.flatpickr-day.prevMonthDay.inRange, -.flatpickr-day.nextMonthDay.inRange, -.flatpickr-day.today.inRange, -.flatpickr-day.prevMonthDay.today.inRange, -.flatpickr-day.nextMonthDay.today.inRange, -.flatpickr-day:hover, -.flatpickr-day.prevMonthDay:hover, -.flatpickr-day.nextMonthDay:hover, -.flatpickr-day:focus, -.flatpickr-day.prevMonthDay:focus, -.flatpickr-day.nextMonthDay:focus { - cursor: pointer; - outline: 0; - background: #e6e6e6; - border-color: #e6e6e6; -} -.flatpickr-day.today { - border-color: #959ea9; -} -.flatpickr-day.today:hover, -.flatpickr-day.today:focus { - border-color: #959ea9; - background: #959ea9; - color: #fff; -} -.flatpickr-day.selected, -.flatpickr-day.startRange, -.flatpickr-day.endRange, -.flatpickr-day.selected.inRange, -.flatpickr-day.startRange.inRange, -.flatpickr-day.endRange.inRange, -.flatpickr-day.selected:focus, -.flatpickr-day.startRange:focus, -.flatpickr-day.endRange:focus, -.flatpickr-day.selected:hover, -.flatpickr-day.startRange:hover, -.flatpickr-day.endRange:hover, -.flatpickr-day.selected.prevMonthDay, -.flatpickr-day.startRange.prevMonthDay, -.flatpickr-day.endRange.prevMonthDay, -.flatpickr-day.selected.nextMonthDay, -.flatpickr-day.startRange.nextMonthDay, -.flatpickr-day.endRange.nextMonthDay { - background: #569ff7; - -webkit-box-shadow: none; - box-shadow: none; - color: #fff; - border-color: #569ff7; -} -.flatpickr-day.selected.startRange, -.flatpickr-day.startRange.startRange, -.flatpickr-day.endRange.startRange { - border-radius: 50px 0 0 50px; -} -.flatpickr-day.selected.endRange, -.flatpickr-day.startRange.endRange, -.flatpickr-day.endRange.endRange { - border-radius: 0 50px 50px 0; -} -.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n+1)), -.flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n+1)), -.flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n+1)) { - -webkit-box-shadow: -10px 0 0 #569ff7; - box-shadow: -10px 0 0 #569ff7; -} -.flatpickr-day.selected.startRange.endRange, -.flatpickr-day.startRange.startRange.endRange, -.flatpickr-day.endRange.startRange.endRange { - border-radius: 50px; -} -.flatpickr-day.inRange { - border-radius: 0; - -webkit-box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6; - box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6; -} -.flatpickr-day.flatpickr-disabled, -.flatpickr-day.flatpickr-disabled:hover, -.flatpickr-day.prevMonthDay, -.flatpickr-day.nextMonthDay, -.flatpickr-day.notAllowed, -.flatpickr-day.notAllowed.prevMonthDay, -.flatpickr-day.notAllowed.nextMonthDay { - color: rgba(57,57,57,0.3); - background: transparent; - border-color: transparent; - cursor: default; -} -.flatpickr-day.flatpickr-disabled, -.flatpickr-day.flatpickr-disabled:hover { - cursor: not-allowed; - color: rgba(57,57,57,0.1); -} -.flatpickr-day.week.selected { - border-radius: 0; - -webkit-box-shadow: -5px 0 0 #569ff7, 5px 0 0 #569ff7; - box-shadow: -5px 0 0 #569ff7, 5px 0 0 #569ff7; -} -.flatpickr-day.hidden { - visibility: hidden; -} -.rangeMode .flatpickr-day { - margin-top: 1px; -} -.flatpickr-weekwrapper { - float: left; -} -.flatpickr-weekwrapper .flatpickr-weeks { - padding: 0 12px; - -webkit-box-shadow: 1px 0 0 #e6e6e6; - box-shadow: 1px 0 0 #e6e6e6; -} -.flatpickr-weekwrapper .flatpickr-weekday { - float: none; - width: 100%; - line-height: 28px; -} -.flatpickr-weekwrapper span.flatpickr-day, -.flatpickr-weekwrapper span.flatpickr-day:hover { - display: block; - width: 100%; - max-width: none; - color: rgba(57,57,57,0.3); - background: transparent; - cursor: default; - border: none; -} -.flatpickr-innerContainer { - display: block; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-sizing: border-box; - box-sizing: border-box; - overflow: hidden; -} -.flatpickr-rContainer { - display: inline-block; - padding: 0; - -webkit-box-sizing: border-box; - box-sizing: border-box; -} -.flatpickr-time { - text-align: center; - outline: 0; - display: block; - height: 0; - line-height: 40px; - max-height: 40px; - -webkit-box-sizing: border-box; - box-sizing: border-box; - overflow: hidden; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; -} -.flatpickr-time:after { - content: ""; - display: table; - clear: both; -} -.flatpickr-time .numInputWrapper { - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; - width: 40%; - height: 40px; - float: left; -} -.flatpickr-time .numInputWrapper span.arrowUp:after { - border-bottom-color: #393939; -} -.flatpickr-time .numInputWrapper span.arrowDown:after { - border-top-color: #393939; -} -.flatpickr-time.hasSeconds .numInputWrapper { - width: 26%; -} -.flatpickr-time.time24hr .numInputWrapper { - width: 49%; -} -.flatpickr-time input { - background: transparent; - -webkit-box-shadow: none; - box-shadow: none; - border: 0; - border-radius: 0; - text-align: center; - margin: 0; - padding: 0; - height: inherit; - line-height: inherit; - color: #393939; - font-size: 14px; - position: relative; - -webkit-box-sizing: border-box; - box-sizing: border-box; - -webkit-appearance: textfield; - -moz-appearance: textfield; - appearance: textfield; -} -.flatpickr-time input.flatpickr-hour { - font-weight: bold; -} -.flatpickr-time input.flatpickr-minute, -.flatpickr-time input.flatpickr-second { - font-weight: 400; -} -.flatpickr-time input:focus { - outline: 0; - border: 0; -} -.flatpickr-time .flatpickr-time-separator, -.flatpickr-time .flatpickr-am-pm { - height: inherit; - float: left; - line-height: inherit; - color: #393939; - font-weight: bold; - width: 2%; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-align-self: center; - -ms-flex-item-align: center; - align-self: center; -} -.flatpickr-time .flatpickr-am-pm { - outline: 0; - width: 18%; - cursor: pointer; - text-align: center; - font-weight: 400; -} -.flatpickr-time input:hover, -.flatpickr-time .flatpickr-am-pm:hover, -.flatpickr-time input:focus, -.flatpickr-time .flatpickr-am-pm:focus { - background: #eee; -} -.flatpickr-input[readonly] { - cursor: pointer; -} -@-webkit-keyframes fpFadeInDown { - from { - opacity: 0; - -webkit-transform: translate3d(0, -20px, 0); - transform: translate3d(0, -20px, 0); - } - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} -@keyframes fpFadeInDown { - from { - opacity: 0; - -webkit-transform: translate3d(0, -20px, 0); - transform: translate3d(0, -20px, 0); - } - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} diff --git a/website/appphp/static/vendors/flatpickr/flatpickr.js b/website/appphp/static/vendors/flatpickr/flatpickr.js deleted file mode 100644 index 9dff9624..00000000 --- a/website/appphp/static/vendors/flatpickr/flatpickr.js +++ /dev/null @@ -1,2596 +0,0 @@ -/* flatpickr v4.6.2, @license MIT */ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global = global || self, global.flatpickr = factory()); -}(this, function () { 'use strict'; - - /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. All rights reserved. - Licensed under the Apache License, Version 2.0 (the "License"); you may not use - this file except in compliance with the License. You may obtain a copy of the - License at http://www.apache.org/licenses/LICENSE-2.0 - - THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED - WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, - MERCHANTABLITY OR NON-INFRINGEMENT. - - See the Apache Version 2.0 License for specific language governing permissions - and limitations under the License. - ***************************************************************************** */ - - 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 HOOKS = [ - "onChange", - "onClose", - "onDayCreate", - "onDestroy", - "onKeyDown", - "onMonthChange", - "onOpen", - "onParseConfig", - "onReady", - "onValueUpdate", - "onYearChange", - "onPreCalendarPosition", - ]; - var defaults = { - _disable: [], - _enable: [], - allowInput: false, - altFormat: "F j, Y", - altInput: false, - altInputClass: "input", - animate: typeof window === "object" && - window.navigator.userAgent.indexOf("MSIE") === -1, - ariaDateFormat: "F j, Y", - clickOpens: true, - closeOnSelect: true, - conjunction: ", ", - dateFormat: "Y-m-d", - defaultHour: 12, - defaultMinute: 0, - defaultSeconds: 0, - disable: [], - disableMobile: false, - enable: [], - enableSeconds: false, - enableTime: false, - errorHandler: function (err) { - return typeof console !== "undefined" && console.warn(err); - }, - getWeek: function (givenDate) { - var date = new Date(givenDate.getTime()); - date.setHours(0, 0, 0, 0); - // Thursday in current week decides the year. - date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7)); - // January 4 is always in week 1. - var week1 = new Date(date.getFullYear(), 0, 4); - // Adjust to Thursday in week 1 and count number of weeks from date to week1. - return (1 + - Math.round(((date.getTime() - week1.getTime()) / 86400000 - - 3 + - ((week1.getDay() + 6) % 7)) / - 7)); - }, - hourIncrement: 1, - ignoredFocusElements: [], - inline: false, - locale: "default", - minuteIncrement: 5, - mode: "single", - monthSelectorType: "dropdown", - nextArrow: "", - noCalendar: false, - now: new Date(), - onChange: [], - onClose: [], - onDayCreate: [], - onDestroy: [], - onKeyDown: [], - onMonthChange: [], - onOpen: [], - onParseConfig: [], - onReady: [], - onValueUpdate: [], - onYearChange: [], - onPreCalendarPosition: [], - plugins: [], - position: "auto", - positionElement: undefined, - prevArrow: "", - shorthandCurrentMonth: false, - showMonths: 1, - static: false, - time_24hr: false, - weekNumbers: false, - wrap: false - }; - - var english = { - weekdays: { - shorthand: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], - longhand: [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday", - ] - }, - months: { - shorthand: [ - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec", - ], - longhand: [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December", - ] - }, - daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], - firstDayOfWeek: 0, - ordinal: function (nth) { - var s = nth % 100; - if (s > 3 && s < 21) - return "th"; - switch (s % 10) { - case 1: - return "st"; - case 2: - return "nd"; - case 3: - return "rd"; - default: - return "th"; - } - }, - rangeSeparator: " to ", - weekAbbreviation: "Wk", - scrollTitle: "Scroll to increment", - toggleTitle: "Click to toggle", - amPM: ["AM", "PM"], - yearAriaLabel: "Year", - hourAriaLabel: "Hour", - minuteAriaLabel: "Minute", - time_24hr: false - }; - - var pad = function (number) { return ("0" + number).slice(-2); }; - var int = function (bool) { return (bool === true ? 1 : 0); }; - /* istanbul ignore next */ - function debounce(func, wait, immediate) { - if (immediate === void 0) { immediate = false; } - var timeout; - return function () { - var context = this, args = arguments; - timeout !== null && clearTimeout(timeout); - timeout = window.setTimeout(function () { - timeout = null; - if (!immediate) - func.apply(context, args); - }, wait); - if (immediate && !timeout) - func.apply(context, args); - }; - } - var arrayify = function (obj) { - return obj instanceof Array ? obj : [obj]; - }; - - function toggleClass(elem, className, bool) { - if (bool === true) - return elem.classList.add(className); - elem.classList.remove(className); - } - function createElement(tag, className, content) { - var e = window.document.createElement(tag); - className = className || ""; - content = content || ""; - e.className = className; - if (content !== undefined) - e.textContent = content; - return e; - } - function clearNode(node) { - while (node.firstChild) - node.removeChild(node.firstChild); - } - function findParent(node, condition) { - if (condition(node)) - return node; - else if (node.parentNode) - return findParent(node.parentNode, condition); - return undefined; // nothing found - } - function createNumberInput(inputClassName, opts) { - var wrapper = createElement("div", "numInputWrapper"), numInput = createElement("input", "numInput " + inputClassName), arrowUp = createElement("span", "arrowUp"), arrowDown = createElement("span", "arrowDown"); - if (navigator.userAgent.indexOf("MSIE 9.0") === -1) { - numInput.type = "number"; - } - else { - numInput.type = "text"; - numInput.pattern = "\\d*"; - } - if (opts !== undefined) - for (var key in opts) - numInput.setAttribute(key, opts[key]); - wrapper.appendChild(numInput); - wrapper.appendChild(arrowUp); - wrapper.appendChild(arrowDown); - return wrapper; - } - function getEventTarget(event) { - if (typeof event.composedPath === "function") { - var path = event.composedPath(); - return path[0]; - } - return event.target; - } - - var doNothing = function () { return undefined; }; - var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? "shorthand" : "longhand"][monthNumber]; }; - var revFormat = { - D: doNothing, - F: function (dateObj, monthName, locale) { - dateObj.setMonth(locale.months.longhand.indexOf(monthName)); - }, - G: function (dateObj, hour) { - dateObj.setHours(parseFloat(hour)); - }, - H: function (dateObj, hour) { - dateObj.setHours(parseFloat(hour)); - }, - J: function (dateObj, day) { - dateObj.setDate(parseFloat(day)); - }, - K: function (dateObj, amPM, locale) { - dateObj.setHours((dateObj.getHours() % 12) + - 12 * int(new RegExp(locale.amPM[1], "i").test(amPM))); - }, - M: function (dateObj, shortMonth, locale) { - dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth)); - }, - S: function (dateObj, seconds) { - dateObj.setSeconds(parseFloat(seconds)); - }, - U: function (_, unixSeconds) { return new Date(parseFloat(unixSeconds) * 1000); }, - W: function (dateObj, weekNum, locale) { - var weekNumber = parseInt(weekNum); - var date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0); - date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek); - return date; - }, - Y: function (dateObj, year) { - dateObj.setFullYear(parseFloat(year)); - }, - Z: function (_, ISODate) { return new Date(ISODate); }, - d: function (dateObj, day) { - dateObj.setDate(parseFloat(day)); - }, - h: function (dateObj, hour) { - dateObj.setHours(parseFloat(hour)); - }, - i: function (dateObj, minutes) { - dateObj.setMinutes(parseFloat(minutes)); - }, - j: function (dateObj, day) { - dateObj.setDate(parseFloat(day)); - }, - l: doNothing, - m: function (dateObj, month) { - dateObj.setMonth(parseFloat(month) - 1); - }, - n: function (dateObj, month) { - dateObj.setMonth(parseFloat(month) - 1); - }, - s: function (dateObj, seconds) { - dateObj.setSeconds(parseFloat(seconds)); - }, - u: function (_, unixMillSeconds) { - return new Date(parseFloat(unixMillSeconds)); - }, - w: doNothing, - y: function (dateObj, year) { - dateObj.setFullYear(2000 + parseFloat(year)); - } - }; - var tokenRegex = { - D: "(\\w+)", - F: "(\\w+)", - G: "(\\d\\d|\\d)", - H: "(\\d\\d|\\d)", - J: "(\\d\\d|\\d)\\w+", - K: "", - M: "(\\w+)", - S: "(\\d\\d|\\d)", - U: "(.+)", - W: "(\\d\\d|\\d)", - Y: "(\\d{4})", - Z: "(.+)", - d: "(\\d\\d|\\d)", - h: "(\\d\\d|\\d)", - i: "(\\d\\d|\\d)", - j: "(\\d\\d|\\d)", - l: "(\\w+)", - m: "(\\d\\d|\\d)", - n: "(\\d\\d|\\d)", - s: "(\\d\\d|\\d)", - u: "(.+)", - w: "(\\d\\d|\\d)", - y: "(\\d{2})" - }; - var formats = { - // get the date in UTC - Z: function (date) { return date.toISOString(); }, - // weekday name, short, e.g. Thu - D: function (date, locale, options) { - return locale.weekdays.shorthand[formats.w(date, locale, options)]; - }, - // full month name e.g. January - F: function (date, locale, options) { - return monthToStr(formats.n(date, locale, options) - 1, false, locale); - }, - // padded hour 1-12 - G: function (date, locale, options) { - return pad(formats.h(date, locale, options)); - }, - // hours with leading zero e.g. 03 - H: function (date) { return pad(date.getHours()); }, - // day (1-30) with ordinal suffix e.g. 1st, 2nd - J: function (date, locale) { - return locale.ordinal !== undefined - ? date.getDate() + locale.ordinal(date.getDate()) - : date.getDate(); - }, - // AM/PM - K: function (date, locale) { return locale.amPM[int(date.getHours() > 11)]; }, - // shorthand month e.g. Jan, Sep, Oct, etc - M: function (date, locale) { - return monthToStr(date.getMonth(), true, locale); - }, - // seconds 00-59 - S: function (date) { return pad(date.getSeconds()); }, - // unix timestamp - U: function (date) { return date.getTime() / 1000; }, - W: function (date, _, options) { - return options.getWeek(date); - }, - // full year e.g. 2016 - Y: function (date) { return date.getFullYear(); }, - // day in month, padded (01-30) - d: function (date) { return pad(date.getDate()); }, - // hour from 1-12 (am/pm) - h: function (date) { return (date.getHours() % 12 ? date.getHours() % 12 : 12); }, - // minutes, padded with leading zero e.g. 09 - i: function (date) { return pad(date.getMinutes()); }, - // day in month (1-30) - j: function (date) { return date.getDate(); }, - // weekday name, full, e.g. Thursday - l: function (date, locale) { - return locale.weekdays.longhand[date.getDay()]; - }, - // padded month number (01-12) - m: function (date) { return pad(date.getMonth() + 1); }, - // the month number (1-12) - n: function (date) { return date.getMonth() + 1; }, - // seconds 0-59 - s: function (date) { return date.getSeconds(); }, - // Unix Milliseconds - u: function (date) { return date.getTime(); }, - // number of the day of the week - w: function (date) { return date.getDay(); }, - // last two digits of year e.g. 16 for 2016 - y: function (date) { return String(date.getFullYear()).substring(2); } - }; - - var createDateFormatter = function (_a) { - var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c; - return function (dateObj, frmt, overrideLocale) { - var locale = overrideLocale || l10n; - if (config.formatDate !== undefined) { - return config.formatDate(dateObj, frmt, locale); - } - return frmt - .split("") - .map(function (c, i, arr) { - return formats[c] && arr[i - 1] !== "\\" - ? formats[c](dateObj, locale, config) - : c !== "\\" - ? c - : ""; - }) - .join(""); - }; - }; - var createDateParser = function (_a) { - var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c; - return function (date, givenFormat, timeless, customLocale) { - if (date !== 0 && !date) - return undefined; - var locale = customLocale || l10n; - var parsedDate; - var dateOrig = date; - if (date instanceof Date) - parsedDate = new Date(date.getTime()); - else if (typeof date !== "string" && - date.toFixed !== undefined // timestamp - ) - // create a copy - parsedDate = new Date(date); - else if (typeof date === "string") { - // date string - var format = givenFormat || (config || defaults).dateFormat; - var datestr = String(date).trim(); - if (datestr === "today") { - parsedDate = new Date(); - timeless = true; - } - else if (/Z$/.test(datestr) || - /GMT$/.test(datestr) // datestrings w/ timezone - ) - parsedDate = new Date(date); - else if (config && config.parseDate) - parsedDate = config.parseDate(date, format); - else { - parsedDate = - !config || !config.noCalendar - ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0) - : new Date(new Date().setHours(0, 0, 0, 0)); - var matched = void 0, ops = []; - for (var i = 0, matchIndex = 0, regexStr = ""; i < format.length; i++) { - var token_1 = format[i]; - var isBackSlash = token_1 === "\\"; - var escaped = format[i - 1] === "\\" || isBackSlash; - if (tokenRegex[token_1] && !escaped) { - regexStr += tokenRegex[token_1]; - var match = new RegExp(regexStr).exec(date); - if (match && (matched = true)) { - ops[token_1 !== "Y" ? "push" : "unshift"]({ - fn: revFormat[token_1], - val: match[++matchIndex] - }); - } - } - else if (!isBackSlash) - regexStr += "."; // don't really care - ops.forEach(function (_a) { - var fn = _a.fn, val = _a.val; - return (parsedDate = fn(parsedDate, val, locale) || parsedDate); - }); - } - parsedDate = matched ? parsedDate : undefined; - } - } - /* istanbul ignore next */ - if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) { - config.errorHandler(new Error("Invalid date provided: " + dateOrig)); - return undefined; - } - if (timeless === true) - parsedDate.setHours(0, 0, 0, 0); - return parsedDate; - }; - }; - /** - * Compute the difference in dates, measured in ms - */ - function compareDates(date1, date2, timeless) { - if (timeless === void 0) { timeless = true; } - if (timeless !== false) { - return (new Date(date1.getTime()).setHours(0, 0, 0, 0) - - new Date(date2.getTime()).setHours(0, 0, 0, 0)); - } - return date1.getTime() - date2.getTime(); - } - var isBetween = function (ts, ts1, ts2) { - return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2); - }; - var duration = { - DAY: 86400000 - }; - - if (typeof Object.assign !== "function") { - Object.assign = function (target) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - if (!target) { - throw TypeError("Cannot convert undefined or null to object"); - } - var _loop_1 = function (source) { - if (source) { - Object.keys(source).forEach(function (key) { return (target[key] = source[key]); }); - } - }; - for (var _a = 0, args_1 = args; _a < args_1.length; _a++) { - var source = args_1[_a]; - _loop_1(source); - } - return target; - }; - } - - var DEBOUNCED_CHANGE_MS = 300; - function FlatpickrInstance(element, instanceConfig) { - var self = { - config: __assign({}, defaults, flatpickr.defaultConfig), - l10n: english - }; - self.parseDate = createDateParser({ config: self.config, l10n: self.l10n }); - self._handlers = []; - self.pluginElements = []; - self.loadedPlugins = []; - self._bind = bind; - self._setHoursFromDate = setHoursFromDate; - self._positionCalendar = positionCalendar; - self.changeMonth = changeMonth; - self.changeYear = changeYear; - self.clear = clear; - self.close = close; - self._createElement = createElement; - self.destroy = destroy; - self.isEnabled = isEnabled; - self.jumpToDate = jumpToDate; - self.open = open; - self.redraw = redraw; - self.set = set; - self.setDate = setDate; - self.toggle = toggle; - function setupHelperFunctions() { - self.utils = { - getDaysInMonth: function (month, yr) { - if (month === void 0) { month = self.currentMonth; } - if (yr === void 0) { yr = self.currentYear; } - if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0)) - return 29; - return self.l10n.daysInMonth[month]; - } - }; - } - function init() { - self.element = self.input = element; - self.isOpen = false; - parseConfig(); - setupLocale(); - setupInputs(); - setupDates(); - setupHelperFunctions(); - if (!self.isMobile) - build(); - bindEvents(); - if (self.selectedDates.length || self.config.noCalendar) { - if (self.config.enableTime) { - setHoursFromDate(self.config.noCalendar - ? self.latestSelectedDateObj || self.config.minDate - : undefined); - } - updateValue(false); - } - setCalendarWidth(); - self.showTimeInput = - self.selectedDates.length > 0 || self.config.noCalendar; - var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); - /* TODO: investigate this further - - Currently, there is weird positioning behavior in safari causing pages - to scroll up. https://github.com/chmln/flatpickr/issues/563 - - However, most browsers are not Safari and positioning is expensive when used - in scale. https://github.com/chmln/flatpickr/issues/1096 - */ - if (!self.isMobile && isSafari) { - positionCalendar(); - } - triggerEvent("onReady"); - } - function bindToInstance(fn) { - return fn.bind(self); - } - function setCalendarWidth() { - var config = self.config; - if (config.weekNumbers === false && config.showMonths === 1) - return; - else if (config.noCalendar !== true) { - window.requestAnimationFrame(function () { - if (self.calendarContainer !== undefined) { - self.calendarContainer.style.visibility = "hidden"; - self.calendarContainer.style.display = "block"; - } - if (self.daysContainer !== undefined) { - var daysWidth = (self.days.offsetWidth + 1) * config.showMonths; - self.daysContainer.style.width = daysWidth + "px"; - self.calendarContainer.style.width = - daysWidth + - (self.weekWrapper !== undefined - ? self.weekWrapper.offsetWidth - : 0) + - "px"; - self.calendarContainer.style.removeProperty("visibility"); - self.calendarContainer.style.removeProperty("display"); - } - }); - } - } - /** - * The handler for all events targeting the time inputs - */ - function updateTime(e) { - if (self.selectedDates.length === 0) { - setDefaultTime(); - } - if (e !== undefined && e.type !== "blur") { - timeWrapper(e); - } - var prevValue = self._input.value; - setHoursFromInputs(); - updateValue(); - if (self._input.value !== prevValue) { - self._debouncedChange(); - } - } - function ampm2military(hour, amPM) { - return (hour % 12) + 12 * int(amPM === self.l10n.amPM[1]); - } - function military2ampm(hour) { - switch (hour % 24) { - case 0: - case 12: - return 12; - default: - return hour % 12; - } - } - /** - * Syncs the selected date object time with user's time input - */ - function setHoursFromInputs() { - if (self.hourElement === undefined || self.minuteElement === undefined) - return; - var hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24, minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60, seconds = self.secondElement !== undefined - ? (parseInt(self.secondElement.value, 10) || 0) % 60 - : 0; - if (self.amPM !== undefined) { - hours = ampm2military(hours, self.amPM.textContent); - } - var limitMinHours = self.config.minTime !== undefined || - (self.config.minDate && - self.minDateHasTime && - self.latestSelectedDateObj && - compareDates(self.latestSelectedDateObj, self.config.minDate, true) === - 0); - var limitMaxHours = self.config.maxTime !== undefined || - (self.config.maxDate && - self.maxDateHasTime && - self.latestSelectedDateObj && - compareDates(self.latestSelectedDateObj, self.config.maxDate, true) === - 0); - if (limitMaxHours) { - var maxTime = self.config.maxTime !== undefined - ? self.config.maxTime - : self.config.maxDate; - hours = Math.min(hours, maxTime.getHours()); - if (hours === maxTime.getHours()) - minutes = Math.min(minutes, maxTime.getMinutes()); - if (minutes === maxTime.getMinutes()) - seconds = Math.min(seconds, maxTime.getSeconds()); - } - if (limitMinHours) { - var minTime = self.config.minTime !== undefined - ? self.config.minTime - : self.config.minDate; - hours = Math.max(hours, minTime.getHours()); - if (hours === minTime.getHours()) - minutes = Math.max(minutes, minTime.getMinutes()); - if (minutes === minTime.getMinutes()) - seconds = Math.max(seconds, minTime.getSeconds()); - } - setHours(hours, minutes, seconds); - } - /** - * Syncs time input values with a date - */ - function setHoursFromDate(dateObj) { - var date = dateObj || self.latestSelectedDateObj; - if (date) - setHours(date.getHours(), date.getMinutes(), date.getSeconds()); - } - function setDefaultHours() { - var hours = self.config.defaultHour; - var minutes = self.config.defaultMinute; - var seconds = self.config.defaultSeconds; - if (self.config.minDate !== undefined) { - var minHr = self.config.minDate.getHours(); - var minMinutes = self.config.minDate.getMinutes(); - hours = Math.max(hours, minHr); - if (hours === minHr) - minutes = Math.max(minMinutes, minutes); - if (hours === minHr && minutes === minMinutes) - seconds = self.config.minDate.getSeconds(); - } - if (self.config.maxDate !== undefined) { - var maxHr = self.config.maxDate.getHours(); - var maxMinutes = self.config.maxDate.getMinutes(); - hours = Math.min(hours, maxHr); - if (hours === maxHr) - minutes = Math.min(maxMinutes, minutes); - if (hours === maxHr && minutes === maxMinutes) - seconds = self.config.maxDate.getSeconds(); - } - setHours(hours, minutes, seconds); - } - /** - * Sets the hours, minutes, and optionally seconds - * of the latest selected date object and the - * corresponding time inputs - * @param {Number} hours the hour. whether its military - * or am-pm gets inferred from config - * @param {Number} minutes the minutes - * @param {Number} seconds the seconds (optional) - */ - function setHours(hours, minutes, seconds) { - if (self.latestSelectedDateObj !== undefined) { - self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0); - } - if (!self.hourElement || !self.minuteElement || self.isMobile) - return; - self.hourElement.value = pad(!self.config.time_24hr - ? ((12 + hours) % 12) + 12 * int(hours % 12 === 0) - : hours); - self.minuteElement.value = pad(minutes); - if (self.amPM !== undefined) - self.amPM.textContent = self.l10n.amPM[int(hours >= 12)]; - if (self.secondElement !== undefined) - self.secondElement.value = pad(seconds); - } - /** - * Handles the year input and incrementing events - * @param {Event} event the keyup or increment event - */ - function onYearInput(event) { - var year = parseInt(event.target.value) + (event.delta || 0); - if (year / 1000 > 1 || - (event.key === "Enter" && !/[^\d]/.test(year.toString()))) { - changeYear(year); - } - } - /** - * Essentially addEventListener + tracking - * @param {Element} element the element to addEventListener to - * @param {String} event the event name - * @param {Function} handler the event handler - */ - function bind(element, event, handler, options) { - if (event instanceof Array) - return event.forEach(function (ev) { return bind(element, ev, handler, options); }); - if (element instanceof Array) - return element.forEach(function (el) { return bind(el, event, handler, options); }); - element.addEventListener(event, handler, options); - self._handlers.push({ - element: element, - event: event, - handler: handler, - options: options - }); - } - /** - * A mousedown handler which mimics click. - * Minimizes latency, since we don't need to wait for mouseup in most cases. - * Also, avoids handling right clicks. - * - * @param {Function} handler the event handler - */ - function onClick(handler) { - return function (evt) { - evt.which === 1 && handler(evt); - }; - } - function triggerChange() { - triggerEvent("onChange"); - } - /** - * Adds all the necessary event listeners - */ - function bindEvents() { - if (self.config.wrap) { - ["open", "close", "toggle", "clear"].forEach(function (evt) { - Array.prototype.forEach.call(self.element.querySelectorAll("[data-" + evt + "]"), function (el) { - return bind(el, "click", self[evt]); - }); - }); - } - if (self.isMobile) { - setupMobile(); - return; - } - var debouncedResize = debounce(onResize, 50); - self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS); - if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent)) - bind(self.daysContainer, "mouseover", function (e) { - if (self.config.mode === "range") - onMouseOver(e.target); - }); - bind(window.document.body, "keydown", onKeyDown); - if (!self.config.inline && !self.config.static) - bind(window, "resize", debouncedResize); - if (window.ontouchstart !== undefined) - bind(window.document, "touchstart", documentClick); - else - bind(window.document, "mousedown", onClick(documentClick)); - bind(window.document, "focus", documentClick, { capture: true }); - if (self.config.clickOpens === true) { - bind(self._input, "focus", self.open); - bind(self._input, "mousedown", onClick(self.open)); - } - if (self.daysContainer !== undefined) { - bind(self.monthNav, "mousedown", onClick(onMonthNavClick)); - bind(self.monthNav, ["keyup", "increment"], onYearInput); - bind(self.daysContainer, "mousedown", onClick(selectDate)); - } - if (self.timeContainer !== undefined && - self.minuteElement !== undefined && - self.hourElement !== undefined) { - var selText = function (e) { - return e.target.select(); - }; - bind(self.timeContainer, ["increment"], updateTime); - bind(self.timeContainer, "blur", updateTime, { capture: true }); - bind(self.timeContainer, "mousedown", onClick(timeIncrement)); - bind([self.hourElement, self.minuteElement], ["focus", "click"], selText); - if (self.secondElement !== undefined) - bind(self.secondElement, "focus", function () { return self.secondElement && self.secondElement.select(); }); - if (self.amPM !== undefined) { - bind(self.amPM, "mousedown", onClick(function (e) { - updateTime(e); - triggerChange(); - })); - } - } - } - /** - * Set the calendar view to a particular date. - * @param {Date} jumpDate the date to set the view to - * @param {boolean} triggerChange if change events should be triggered - */ - function jumpToDate(jumpDate, triggerChange) { - var jumpTo = jumpDate !== undefined - ? self.parseDate(jumpDate) - : self.latestSelectedDateObj || - (self.config.minDate && self.config.minDate > self.now - ? self.config.minDate - : self.config.maxDate && self.config.maxDate < self.now - ? self.config.maxDate - : self.now); - var oldYear = self.currentYear; - var oldMonth = self.currentMonth; - try { - if (jumpTo !== undefined) { - self.currentYear = jumpTo.getFullYear(); - self.currentMonth = jumpTo.getMonth(); - } - } - catch (e) { - /* istanbul ignore next */ - e.message = "Invalid date supplied: " + jumpTo; - self.config.errorHandler(e); - } - if (triggerChange && self.currentYear !== oldYear) { - triggerEvent("onYearChange"); - buildMonthSwitch(); - } - if (triggerChange && - (self.currentYear !== oldYear || self.currentMonth !== oldMonth)) { - triggerEvent("onMonthChange"); - } - self.redraw(); - } - /** - * The up/down arrow handler for time inputs - * @param {Event} e the click event - */ - function timeIncrement(e) { - if (~e.target.className.indexOf("arrow")) - incrementNumInput(e, e.target.classList.contains("arrowUp") ? 1 : -1); - } - /** - * Increments/decrements the value of input associ- - * ated with the up/down arrow by dispatching an - * "increment" event on the input. - * - * @param {Event} e the click event - * @param {Number} delta the diff (usually 1 or -1) - * @param {Element} inputElem the input element - */ - function incrementNumInput(e, delta, inputElem) { - var target = e && e.target; - var input = inputElem || - (target && target.parentNode && target.parentNode.firstChild); - var event = createEvent("increment"); - event.delta = delta; - input && input.dispatchEvent(event); - } - function build() { - var fragment = window.document.createDocumentFragment(); - self.calendarContainer = createElement("div", "flatpickr-calendar"); - self.calendarContainer.tabIndex = -1; - if (!self.config.noCalendar) { - fragment.appendChild(buildMonthNav()); - self.innerContainer = createElement("div", "flatpickr-innerContainer"); - if (self.config.weekNumbers) { - var _a = buildWeeks(), weekWrapper = _a.weekWrapper, weekNumbers = _a.weekNumbers; - self.innerContainer.appendChild(weekWrapper); - self.weekNumbers = weekNumbers; - self.weekWrapper = weekWrapper; - } - self.rContainer = createElement("div", "flatpickr-rContainer"); - self.rContainer.appendChild(buildWeekdays()); - if (!self.daysContainer) { - self.daysContainer = createElement("div", "flatpickr-days"); - self.daysContainer.tabIndex = -1; - } - buildDays(); - self.rContainer.appendChild(self.daysContainer); - self.innerContainer.appendChild(self.rContainer); - fragment.appendChild(self.innerContainer); - } - if (self.config.enableTime) { - fragment.appendChild(buildTime()); - } - toggleClass(self.calendarContainer, "rangeMode", self.config.mode === "range"); - toggleClass(self.calendarContainer, "animate", self.config.animate === true); - toggleClass(self.calendarContainer, "multiMonth", self.config.showMonths > 1); - self.calendarContainer.appendChild(fragment); - var customAppend = self.config.appendTo !== undefined && - self.config.appendTo.nodeType !== undefined; - if (self.config.inline || self.config.static) { - self.calendarContainer.classList.add(self.config.inline ? "inline" : "static"); - if (self.config.inline) { - if (!customAppend && self.element.parentNode) - self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling); - else if (self.config.appendTo !== undefined) - self.config.appendTo.appendChild(self.calendarContainer); - } - if (self.config.static) { - var wrapper = createElement("div", "flatpickr-wrapper"); - if (self.element.parentNode) - self.element.parentNode.insertBefore(wrapper, self.element); - wrapper.appendChild(self.element); - if (self.altInput) - wrapper.appendChild(self.altInput); - wrapper.appendChild(self.calendarContainer); - } - } - if (!self.config.static && !self.config.inline) - (self.config.appendTo !== undefined - ? self.config.appendTo - : window.document.body).appendChild(self.calendarContainer); - } - function createDay(className, date, dayNumber, i) { - var dateIsEnabled = isEnabled(date, true), dayElement = createElement("span", "flatpickr-day " + className, date.getDate().toString()); - dayElement.dateObj = date; - dayElement.$i = i; - dayElement.setAttribute("aria-label", self.formatDate(date, self.config.ariaDateFormat)); - if (className.indexOf("hidden") === -1 && - compareDates(date, self.now) === 0) { - self.todayDateElem = dayElement; - dayElement.classList.add("today"); - dayElement.setAttribute("aria-current", "date"); - } - if (dateIsEnabled) { - dayElement.tabIndex = -1; - if (isDateSelected(date)) { - dayElement.classList.add("selected"); - self.selectedDateElem = dayElement; - if (self.config.mode === "range") { - toggleClass(dayElement, "startRange", self.selectedDates[0] && - compareDates(date, self.selectedDates[0], true) === 0); - toggleClass(dayElement, "endRange", self.selectedDates[1] && - compareDates(date, self.selectedDates[1], true) === 0); - if (className === "nextMonthDay") - dayElement.classList.add("inRange"); - } - } - } - else { - dayElement.classList.add("flatpickr-disabled"); - } - if (self.config.mode === "range") { - if (isDateInRange(date) && !isDateSelected(date)) - dayElement.classList.add("inRange"); - } - if (self.weekNumbers && - self.config.showMonths === 1 && - className !== "prevMonthDay" && - dayNumber % 7 === 1) { - self.weekNumbers.insertAdjacentHTML("beforeend", "" + self.config.getWeek(date) + ""); - } - triggerEvent("onDayCreate", dayElement); - return dayElement; - } - function focusOnDayElem(targetNode) { - targetNode.focus(); - if (self.config.mode === "range") - onMouseOver(targetNode); - } - function getFirstAvailableDay(delta) { - var startMonth = delta > 0 ? 0 : self.config.showMonths - 1; - var endMonth = delta > 0 ? self.config.showMonths : -1; - for (var m = startMonth; m != endMonth; m += delta) { - var month = self.daysContainer.children[m]; - var startIndex = delta > 0 ? 0 : month.children.length - 1; - var endIndex = delta > 0 ? month.children.length : -1; - for (var i = startIndex; i != endIndex; i += delta) { - var c = month.children[i]; - if (c.className.indexOf("hidden") === -1 && isEnabled(c.dateObj)) - return c; - } - } - return undefined; - } - function getNextAvailableDay(current, delta) { - var givenMonth = current.className.indexOf("Month") === -1 - ? current.dateObj.getMonth() - : self.currentMonth; - var endMonth = delta > 0 ? self.config.showMonths : -1; - var loopDelta = delta > 0 ? 1 : -1; - for (var m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) { - var month = self.daysContainer.children[m]; - var startIndex = givenMonth - self.currentMonth === m - ? current.$i + delta - : delta < 0 - ? month.children.length - 1 - : 0; - var numMonthDays = month.children.length; - for (var i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) { - var c = month.children[i]; - if (c.className.indexOf("hidden") === -1 && - isEnabled(c.dateObj) && - Math.abs(current.$i - i) >= Math.abs(delta)) - return focusOnDayElem(c); - } - } - self.changeMonth(loopDelta); - focusOnDay(getFirstAvailableDay(loopDelta), 0); - return undefined; - } - function focusOnDay(current, offset) { - var dayFocused = isInView(document.activeElement || document.body); - var startElem = current !== undefined - ? current - : dayFocused - ? document.activeElement - : self.selectedDateElem !== undefined && isInView(self.selectedDateElem) - ? self.selectedDateElem - : self.todayDateElem !== undefined && isInView(self.todayDateElem) - ? self.todayDateElem - : getFirstAvailableDay(offset > 0 ? 1 : -1); - if (startElem === undefined) - return self._input.focus(); - if (!dayFocused) - return focusOnDayElem(startElem); - getNextAvailableDay(startElem, offset); - } - function buildMonthDays(year, month) { - var firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7; - var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12); - var daysInMonth = self.utils.getDaysInMonth(month), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? "prevMonthDay hidden" : "prevMonthDay", nextMonthDayClass = isMultiMonth ? "nextMonthDay hidden" : "nextMonthDay"; - var dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0; - // prepend days from the ending of previous month - for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) { - days.appendChild(createDay(prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex)); - } - // Start at 1 since there is no 0th day - for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) { - days.appendChild(createDay("", new Date(year, month, dayNumber), dayNumber, dayIndex)); - } - // append days from the next month - for (var dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth && - (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) { - days.appendChild(createDay(nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex)); - } - //updateNavigationCurrentMonth(); - var dayContainer = createElement("div", "dayContainer"); - dayContainer.appendChild(days); - return dayContainer; - } - function buildDays() { - if (self.daysContainer === undefined) { - return; - } - clearNode(self.daysContainer); - // TODO: week numbers for each month - if (self.weekNumbers) - clearNode(self.weekNumbers); - var frag = document.createDocumentFragment(); - for (var i = 0; i < self.config.showMonths; i++) { - var d = new Date(self.currentYear, self.currentMonth, 1); - d.setMonth(self.currentMonth + i); - frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth())); - } - self.daysContainer.appendChild(frag); - self.days = self.daysContainer.firstChild; - if (self.config.mode === "range" && self.selectedDates.length === 1) { - onMouseOver(); - } - } - function buildMonthSwitch() { - if (self.config.showMonths > 1 || - self.config.monthSelectorType !== "dropdown") - return; - var shouldBuildMonth = function (month) { - if (self.config.minDate !== undefined && - self.currentYear === self.config.minDate.getFullYear() && - month < self.config.minDate.getMonth()) { - return false; - } - return !(self.config.maxDate !== undefined && - self.currentYear === self.config.maxDate.getFullYear() && - month > self.config.maxDate.getMonth()); - }; - self.monthsDropdownContainer.tabIndex = -1; - self.monthsDropdownContainer.innerHTML = ""; - for (var i = 0; i < 12; i++) { - if (!shouldBuildMonth(i)) - continue; - var month = createElement("option", "flatpickr-monthDropdown-month"); - month.value = new Date(self.currentYear, i).getMonth().toString(); - month.textContent = monthToStr(i, self.config.shorthandCurrentMonth, self.l10n); - month.tabIndex = -1; - if (self.currentMonth === i) { - month.selected = true; - } - self.monthsDropdownContainer.appendChild(month); - } - } - function buildMonth() { - var container = createElement("div", "flatpickr-month"); - var monthNavFragment = window.document.createDocumentFragment(); - var monthElement; - if (self.config.showMonths > 1 || - self.config.monthSelectorType === "static") { - monthElement = createElement("span", "cur-month"); - } - else { - self.monthsDropdownContainer = createElement("select", "flatpickr-monthDropdown-months"); - bind(self.monthsDropdownContainer, "change", function (e) { - var target = e.target; - var selectedMonth = parseInt(target.value, 10); - self.changeMonth(selectedMonth - self.currentMonth); - triggerEvent("onMonthChange"); - }); - buildMonthSwitch(); - monthElement = self.monthsDropdownContainer; - } - var yearInput = createNumberInput("cur-year", { tabindex: "-1" }); - var yearElement = yearInput.getElementsByTagName("input")[0]; - yearElement.setAttribute("aria-label", self.l10n.yearAriaLabel); - if (self.config.minDate) { - yearElement.setAttribute("min", self.config.minDate.getFullYear().toString()); - } - if (self.config.maxDate) { - yearElement.setAttribute("max", self.config.maxDate.getFullYear().toString()); - yearElement.disabled = - !!self.config.minDate && - self.config.minDate.getFullYear() === self.config.maxDate.getFullYear(); - } - var currentMonth = createElement("div", "flatpickr-current-month"); - currentMonth.appendChild(monthElement); - currentMonth.appendChild(yearInput); - monthNavFragment.appendChild(currentMonth); - container.appendChild(monthNavFragment); - return { - container: container, - yearElement: yearElement, - monthElement: monthElement - }; - } - function buildMonths() { - clearNode(self.monthNav); - self.monthNav.appendChild(self.prevMonthNav); - if (self.config.showMonths) { - self.yearElements = []; - self.monthElements = []; - } - for (var m = self.config.showMonths; m--;) { - var month = buildMonth(); - self.yearElements.push(month.yearElement); - self.monthElements.push(month.monthElement); - self.monthNav.appendChild(month.container); - } - self.monthNav.appendChild(self.nextMonthNav); - } - function buildMonthNav() { - self.monthNav = createElement("div", "flatpickr-months"); - self.yearElements = []; - self.monthElements = []; - self.prevMonthNav = createElement("span", "flatpickr-prev-month"); - self.prevMonthNav.innerHTML = self.config.prevArrow; - self.nextMonthNav = createElement("span", "flatpickr-next-month"); - self.nextMonthNav.innerHTML = self.config.nextArrow; - buildMonths(); - Object.defineProperty(self, "_hidePrevMonthArrow", { - get: function () { return self.__hidePrevMonthArrow; }, - set: function (bool) { - if (self.__hidePrevMonthArrow !== bool) { - toggleClass(self.prevMonthNav, "flatpickr-disabled", bool); - self.__hidePrevMonthArrow = bool; - } - } - }); - Object.defineProperty(self, "_hideNextMonthArrow", { - get: function () { return self.__hideNextMonthArrow; }, - set: function (bool) { - if (self.__hideNextMonthArrow !== bool) { - toggleClass(self.nextMonthNav, "flatpickr-disabled", bool); - self.__hideNextMonthArrow = bool; - } - } - }); - self.currentYearElement = self.yearElements[0]; - updateNavigationCurrentMonth(); - return self.monthNav; - } - function buildTime() { - self.calendarContainer.classList.add("hasTime"); - if (self.config.noCalendar) - self.calendarContainer.classList.add("noCalendar"); - self.timeContainer = createElement("div", "flatpickr-time"); - self.timeContainer.tabIndex = -1; - var separator = createElement("span", "flatpickr-time-separator", ":"); - var hourInput = createNumberInput("flatpickr-hour", { - "aria-label": self.l10n.hourAriaLabel - }); - self.hourElement = hourInput.getElementsByTagName("input")[0]; - var minuteInput = createNumberInput("flatpickr-minute", { - "aria-label": self.l10n.minuteAriaLabel - }); - self.minuteElement = minuteInput.getElementsByTagName("input")[0]; - self.hourElement.tabIndex = self.minuteElement.tabIndex = -1; - self.hourElement.value = pad(self.latestSelectedDateObj - ? self.latestSelectedDateObj.getHours() - : self.config.time_24hr - ? self.config.defaultHour - : military2ampm(self.config.defaultHour)); - self.minuteElement.value = pad(self.latestSelectedDateObj - ? self.latestSelectedDateObj.getMinutes() - : self.config.defaultMinute); - self.hourElement.setAttribute("step", self.config.hourIncrement.toString()); - self.minuteElement.setAttribute("step", self.config.minuteIncrement.toString()); - self.hourElement.setAttribute("min", self.config.time_24hr ? "0" : "1"); - self.hourElement.setAttribute("max", self.config.time_24hr ? "23" : "12"); - self.minuteElement.setAttribute("min", "0"); - self.minuteElement.setAttribute("max", "59"); - self.timeContainer.appendChild(hourInput); - self.timeContainer.appendChild(separator); - self.timeContainer.appendChild(minuteInput); - if (self.config.time_24hr) - self.timeContainer.classList.add("time24hr"); - if (self.config.enableSeconds) { - self.timeContainer.classList.add("hasSeconds"); - var secondInput = createNumberInput("flatpickr-second"); - self.secondElement = secondInput.getElementsByTagName("input")[0]; - self.secondElement.value = pad(self.latestSelectedDateObj - ? self.latestSelectedDateObj.getSeconds() - : self.config.defaultSeconds); - self.secondElement.setAttribute("step", self.minuteElement.getAttribute("step")); - self.secondElement.setAttribute("min", "0"); - self.secondElement.setAttribute("max", "59"); - self.timeContainer.appendChild(createElement("span", "flatpickr-time-separator", ":")); - self.timeContainer.appendChild(secondInput); - } - if (!self.config.time_24hr) { - // add self.amPM if appropriate - self.amPM = createElement("span", "flatpickr-am-pm", self.l10n.amPM[int((self.latestSelectedDateObj - ? self.hourElement.value - : self.config.defaultHour) > 11)]); - self.amPM.title = self.l10n.toggleTitle; - self.amPM.tabIndex = -1; - self.timeContainer.appendChild(self.amPM); - } - return self.timeContainer; - } - function buildWeekdays() { - if (!self.weekdayContainer) - self.weekdayContainer = createElement("div", "flatpickr-weekdays"); - else - clearNode(self.weekdayContainer); - for (var i = self.config.showMonths; i--;) { - var container = createElement("div", "flatpickr-weekdaycontainer"); - self.weekdayContainer.appendChild(container); - } - updateWeekdays(); - return self.weekdayContainer; - } - function updateWeekdays() { - var firstDayOfWeek = self.l10n.firstDayOfWeek; - var weekdays = self.l10n.weekdays.shorthand.slice(); - if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) { - weekdays = weekdays.splice(firstDayOfWeek, weekdays.length).concat(weekdays.splice(0, firstDayOfWeek)); - } - for (var i = self.config.showMonths; i--;) { - self.weekdayContainer.children[i].innerHTML = "\n \n " + weekdays.join("") + "\n \n "; - } - } - /* istanbul ignore next */ - function buildWeeks() { - self.calendarContainer.classList.add("hasWeeks"); - var weekWrapper = createElement("div", "flatpickr-weekwrapper"); - weekWrapper.appendChild(createElement("span", "flatpickr-weekday", self.l10n.weekAbbreviation)); - var weekNumbers = createElement("div", "flatpickr-weeks"); - weekWrapper.appendChild(weekNumbers); - return { - weekWrapper: weekWrapper, - weekNumbers: weekNumbers - }; - } - function changeMonth(value, isOffset) { - if (isOffset === void 0) { isOffset = true; } - var delta = isOffset ? value : value - self.currentMonth; - if ((delta < 0 && self._hidePrevMonthArrow === true) || - (delta > 0 && self._hideNextMonthArrow === true)) - return; - self.currentMonth += delta; - if (self.currentMonth < 0 || self.currentMonth > 11) { - self.currentYear += self.currentMonth > 11 ? 1 : -1; - self.currentMonth = (self.currentMonth + 12) % 12; - triggerEvent("onYearChange"); - buildMonthSwitch(); - } - buildDays(); - triggerEvent("onMonthChange"); - updateNavigationCurrentMonth(); - } - function clear(triggerChangeEvent, toInitial) { - if (triggerChangeEvent === void 0) { triggerChangeEvent = true; } - if (toInitial === void 0) { toInitial = true; } - self.input.value = ""; - if (self.altInput !== undefined) - self.altInput.value = ""; - if (self.mobileInput !== undefined) - self.mobileInput.value = ""; - self.selectedDates = []; - self.latestSelectedDateObj = undefined; - if (toInitial === true) { - self.currentYear = self._initialDate.getFullYear(); - self.currentMonth = self._initialDate.getMonth(); - } - self.showTimeInput = false; - if (self.config.enableTime === true) { - setDefaultHours(); - } - self.redraw(); - if (triggerChangeEvent) - // triggerChangeEvent is true (default) or an Event - triggerEvent("onChange"); - } - function close() { - self.isOpen = false; - if (!self.isMobile) { - if (self.calendarContainer !== undefined) { - self.calendarContainer.classList.remove("open"); - } - if (self._input !== undefined) { - self._input.classList.remove("active"); - } - } - triggerEvent("onClose"); - } - function destroy() { - if (self.config !== undefined) - triggerEvent("onDestroy"); - for (var i = self._handlers.length; i--;) { - var h = self._handlers[i]; - h.element.removeEventListener(h.event, h.handler, h.options); - } - self._handlers = []; - if (self.mobileInput) { - if (self.mobileInput.parentNode) - self.mobileInput.parentNode.removeChild(self.mobileInput); - self.mobileInput = undefined; - } - else if (self.calendarContainer && self.calendarContainer.parentNode) { - if (self.config.static && self.calendarContainer.parentNode) { - var wrapper = self.calendarContainer.parentNode; - wrapper.lastChild && wrapper.removeChild(wrapper.lastChild); - if (wrapper.parentNode) { - while (wrapper.firstChild) - wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper); - wrapper.parentNode.removeChild(wrapper); - } - } - else - self.calendarContainer.parentNode.removeChild(self.calendarContainer); - } - if (self.altInput) { - self.input.type = "text"; - if (self.altInput.parentNode) - self.altInput.parentNode.removeChild(self.altInput); - delete self.altInput; - } - if (self.input) { - self.input.type = self.input._type; - self.input.classList.remove("flatpickr-input"); - self.input.removeAttribute("readonly"); - self.input.value = ""; - } - [ - "_showTimeInput", - "latestSelectedDateObj", - "_hideNextMonthArrow", - "_hidePrevMonthArrow", - "__hideNextMonthArrow", - "__hidePrevMonthArrow", - "isMobile", - "isOpen", - "selectedDateElem", - "minDateHasTime", - "maxDateHasTime", - "days", - "daysContainer", - "_input", - "_positionElement", - "innerContainer", - "rContainer", - "monthNav", - "todayDateElem", - "calendarContainer", - "weekdayContainer", - "prevMonthNav", - "nextMonthNav", - "monthsDropdownContainer", - "currentMonthElement", - "currentYearElement", - "navigationCurrentMonth", - "selectedDateElem", - "config", - ].forEach(function (k) { - try { - delete self[k]; - } - catch (_) { } - }); - } - function isCalendarElem(elem) { - if (self.config.appendTo && self.config.appendTo.contains(elem)) - return true; - return self.calendarContainer.contains(elem); - } - function documentClick(e) { - if (self.isOpen && !self.config.inline) { - var eventTarget_1 = getEventTarget(e); - var isCalendarElement = isCalendarElem(eventTarget_1); - var isInput = eventTarget_1 === self.input || - eventTarget_1 === self.altInput || - self.element.contains(eventTarget_1) || - // web components - // e.path is not present in all browsers. circumventing typechecks - (e.path && - e.path.indexOf && - (~e.path.indexOf(self.input) || - ~e.path.indexOf(self.altInput))); - var lostFocus = e.type === "blur" - ? isInput && - e.relatedTarget && - !isCalendarElem(e.relatedTarget) - : !isInput && - !isCalendarElement && - !isCalendarElem(e.relatedTarget); - var isIgnored = !self.config.ignoredFocusElements.some(function (elem) { - return elem.contains(eventTarget_1); - }); - if (lostFocus && isIgnored) { - self.close(); - if (self.config.mode === "range" && self.selectedDates.length === 1) { - self.clear(false); - self.redraw(); - } - } - } - } - function changeYear(newYear) { - if (!newYear || - (self.config.minDate && newYear < self.config.minDate.getFullYear()) || - (self.config.maxDate && newYear > self.config.maxDate.getFullYear())) - return; - var newYearNum = newYear, isNewYear = self.currentYear !== newYearNum; - self.currentYear = newYearNum || self.currentYear; - if (self.config.maxDate && - self.currentYear === self.config.maxDate.getFullYear()) { - self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth); - } - else if (self.config.minDate && - self.currentYear === self.config.minDate.getFullYear()) { - self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth); - } - if (isNewYear) { - self.redraw(); - triggerEvent("onYearChange"); - buildMonthSwitch(); - } - } - function isEnabled(date, timeless) { - if (timeless === void 0) { timeless = true; } - var dateToCheck = self.parseDate(date, undefined, timeless); // timeless - if ((self.config.minDate && - dateToCheck && - compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0) || - (self.config.maxDate && - dateToCheck && - compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0)) - return false; - if (self.config.enable.length === 0 && self.config.disable.length === 0) - return true; - if (dateToCheck === undefined) - return false; - var bool = self.config.enable.length > 0, array = bool ? self.config.enable : self.config.disable; - for (var i = 0, d = void 0; i < array.length; i++) { - d = array[i]; - if (typeof d === "function" && - d(dateToCheck) // disabled by function - ) - return bool; - else if (d instanceof Date && - dateToCheck !== undefined && - d.getTime() === dateToCheck.getTime()) - // disabled by date - return bool; - else if (typeof d === "string" && dateToCheck !== undefined) { - // disabled by date string - var parsed = self.parseDate(d, undefined, true); - return parsed && parsed.getTime() === dateToCheck.getTime() - ? bool - : !bool; - } - else if ( - // disabled by range - typeof d === "object" && - dateToCheck !== undefined && - d.from && - d.to && - dateToCheck.getTime() >= d.from.getTime() && - dateToCheck.getTime() <= d.to.getTime()) - return bool; - } - return !bool; - } - function isInView(elem) { - if (self.daysContainer !== undefined) - return (elem.className.indexOf("hidden") === -1 && - self.daysContainer.contains(elem)); - return false; - } - function onKeyDown(e) { - // e.key e.keyCode - // "Backspace" 8 - // "Tab" 9 - // "Enter" 13 - // "Escape" (IE "Esc") 27 - // "ArrowLeft" (IE "Left") 37 - // "ArrowUp" (IE "Up") 38 - // "ArrowRight" (IE "Right") 39 - // "ArrowDown" (IE "Down") 40 - // "Delete" (IE "Del") 46 - var isInput = e.target === self._input; - var allowInput = self.config.allowInput; - var allowKeydown = self.isOpen && (!allowInput || !isInput); - var allowInlineKeydown = self.config.inline && isInput && !allowInput; - if (e.keyCode === 13 && isInput) { - if (allowInput) { - self.setDate(self._input.value, true, e.target === self.altInput - ? self.config.altFormat - : self.config.dateFormat); - return e.target.blur(); - } - else { - self.open(); - } - } - else if (isCalendarElem(e.target) || - allowKeydown || - allowInlineKeydown) { - var isTimeObj = !!self.timeContainer && - self.timeContainer.contains(e.target); - switch (e.keyCode) { - case 13: - if (isTimeObj) { - e.preventDefault(); - updateTime(); - focusAndClose(); - } - else - selectDate(e); - break; - case 27: // escape - e.preventDefault(); - focusAndClose(); - break; - case 8: - case 46: - if (isInput && !self.config.allowInput) { - e.preventDefault(); - self.clear(); - } - break; - case 37: - case 39: - if (!isTimeObj && !isInput) { - e.preventDefault(); - if (self.daysContainer !== undefined && - (allowInput === false || - (document.activeElement && isInView(document.activeElement)))) { - var delta_1 = e.keyCode === 39 ? 1 : -1; - if (!e.ctrlKey) - focusOnDay(undefined, delta_1); - else { - e.stopPropagation(); - changeMonth(delta_1); - focusOnDay(getFirstAvailableDay(1), 0); - } - } - } - else if (self.hourElement) - self.hourElement.focus(); - break; - case 38: - case 40: - e.preventDefault(); - var delta = e.keyCode === 40 ? 1 : -1; - if ((self.daysContainer && e.target.$i !== undefined) || - e.target === self.input) { - if (e.ctrlKey) { - e.stopPropagation(); - changeYear(self.currentYear - delta); - focusOnDay(getFirstAvailableDay(1), 0); - } - else if (!isTimeObj) - focusOnDay(undefined, delta * 7); - } - else if (e.target === self.currentYearElement) { - changeYear(self.currentYear - delta); - } - else if (self.config.enableTime) { - if (!isTimeObj && self.hourElement) - self.hourElement.focus(); - updateTime(e); - self._debouncedChange(); - } - break; - case 9: - if (isTimeObj) { - var elems = [ - self.hourElement, - self.minuteElement, - self.secondElement, - self.amPM, - ] - .concat(self.pluginElements) - .filter(function (x) { return x; }); - var i = elems.indexOf(e.target); - if (i !== -1) { - var target = elems[i + (e.shiftKey ? -1 : 1)]; - e.preventDefault(); - (target || self._input).focus(); - } - } - else if (!self.config.noCalendar && - self.daysContainer && - self.daysContainer.contains(e.target) && - e.shiftKey) { - e.preventDefault(); - self._input.focus(); - } - break; - default: - break; - } - } - if (self.amPM !== undefined && e.target === self.amPM) { - switch (e.key) { - case self.l10n.amPM[0].charAt(0): - case self.l10n.amPM[0].charAt(0).toLowerCase(): - self.amPM.textContent = self.l10n.amPM[0]; - setHoursFromInputs(); - updateValue(); - break; - case self.l10n.amPM[1].charAt(0): - case self.l10n.amPM[1].charAt(0).toLowerCase(): - self.amPM.textContent = self.l10n.amPM[1]; - setHoursFromInputs(); - updateValue(); - break; - } - } - if (isInput || isCalendarElem(e.target)) { - triggerEvent("onKeyDown", e); - } - } - function onMouseOver(elem) { - if (self.selectedDates.length !== 1 || - (elem && - (!elem.classList.contains("flatpickr-day") || - elem.classList.contains("flatpickr-disabled")))) - return; - var hoverDate = elem - ? elem.dateObj.getTime() - : self.days.firstElementChild.dateObj.getTime(), initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(), rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()), rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime()); - var containsDisabled = false; - var minRange = 0, maxRange = 0; - for (var t = rangeStartDate; t < rangeEndDate; t += duration.DAY) { - if (!isEnabled(new Date(t), true)) { - containsDisabled = - containsDisabled || (t > rangeStartDate && t < rangeEndDate); - if (t < initialDate && (!minRange || t > minRange)) - minRange = t; - else if (t > initialDate && (!maxRange || t < maxRange)) - maxRange = t; - } - } - for (var m = 0; m < self.config.showMonths; m++) { - var month = self.daysContainer.children[m]; - var _loop_1 = function (i, l) { - var dayElem = month.children[i], date = dayElem.dateObj; - var timestamp = date.getTime(); - var outOfRange = (minRange > 0 && timestamp < minRange) || - (maxRange > 0 && timestamp > maxRange); - if (outOfRange) { - dayElem.classList.add("notAllowed"); - ["inRange", "startRange", "endRange"].forEach(function (c) { - dayElem.classList.remove(c); - }); - return "continue"; - } - else if (containsDisabled && !outOfRange) - return "continue"; - ["startRange", "inRange", "endRange", "notAllowed"].forEach(function (c) { - dayElem.classList.remove(c); - }); - if (elem !== undefined) { - elem.classList.add(hoverDate <= self.selectedDates[0].getTime() - ? "startRange" - : "endRange"); - if (initialDate < hoverDate && timestamp === initialDate) - dayElem.classList.add("startRange"); - else if (initialDate > hoverDate && timestamp === initialDate) - dayElem.classList.add("endRange"); - if (timestamp >= minRange && - (maxRange === 0 || timestamp <= maxRange) && - isBetween(timestamp, initialDate, hoverDate)) - dayElem.classList.add("inRange"); - } - }; - for (var i = 0, l = month.children.length; i < l; i++) { - _loop_1(i, l); - } - } - } - function onResize() { - if (self.isOpen && !self.config.static && !self.config.inline) - positionCalendar(); - } - function setDefaultTime() { - self.setDate(self.config.minDate !== undefined - ? new Date(self.config.minDate.getTime()) - : new Date(), true); - setDefaultHours(); - updateValue(); - } - function open(e, positionElement) { - if (positionElement === void 0) { positionElement = self._positionElement; } - if (self.isMobile === true) { - if (e) { - e.preventDefault(); - e.target && e.target.blur(); - } - if (self.mobileInput !== undefined) { - self.mobileInput.focus(); - self.mobileInput.click(); - } - triggerEvent("onOpen"); - return; - } - if (self._input.disabled || self.config.inline) - return; - var wasOpen = self.isOpen; - self.isOpen = true; - if (!wasOpen) { - self.calendarContainer.classList.add("open"); - self._input.classList.add("active"); - triggerEvent("onOpen"); - positionCalendar(positionElement); - } - if (self.config.enableTime === true && self.config.noCalendar === true) { - if (self.selectedDates.length === 0) { - setDefaultTime(); - } - if (self.config.allowInput === false && - (e === undefined || - !self.timeContainer.contains(e.relatedTarget))) { - setTimeout(function () { return self.hourElement.select(); }, 50); - } - } - } - function minMaxDateSetter(type) { - return function (date) { - var dateObj = (self.config["_" + type + "Date"] = self.parseDate(date, self.config.dateFormat)); - var inverseDateObj = self.config["_" + (type === "min" ? "max" : "min") + "Date"]; - if (dateObj !== undefined) { - self[type === "min" ? "minDateHasTime" : "maxDateHasTime"] = - dateObj.getHours() > 0 || - dateObj.getMinutes() > 0 || - dateObj.getSeconds() > 0; - } - if (self.selectedDates) { - self.selectedDates = self.selectedDates.filter(function (d) { return isEnabled(d); }); - if (!self.selectedDates.length && type === "min") - setHoursFromDate(dateObj); - updateValue(); - } - if (self.daysContainer) { - redraw(); - if (dateObj !== undefined) - self.currentYearElement[type] = dateObj.getFullYear().toString(); - else - self.currentYearElement.removeAttribute(type); - self.currentYearElement.disabled = - !!inverseDateObj && - dateObj !== undefined && - inverseDateObj.getFullYear() === dateObj.getFullYear(); - } - }; - } - function parseConfig() { - var boolOpts = [ - "wrap", - "weekNumbers", - "allowInput", - "clickOpens", - "time_24hr", - "enableTime", - "noCalendar", - "altInput", - "shorthandCurrentMonth", - "inline", - "static", - "enableSeconds", - "disableMobile", - ]; - var userConfig = __assign({}, instanceConfig, JSON.parse(JSON.stringify(element.dataset || {}))); - var formats = {}; - self.config.parseDate = userConfig.parseDate; - self.config.formatDate = userConfig.formatDate; - Object.defineProperty(self.config, "enable", { - get: function () { return self.config._enable; }, - set: function (dates) { - self.config._enable = parseDateRules(dates); - } - }); - Object.defineProperty(self.config, "disable", { - get: function () { return self.config._disable; }, - set: function (dates) { - self.config._disable = parseDateRules(dates); - } - }); - var timeMode = userConfig.mode === "time"; - if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) { - var defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaults.dateFormat; - formats.dateFormat = - userConfig.noCalendar || timeMode - ? "H:i" + (userConfig.enableSeconds ? ":S" : "") - : defaultDateFormat + " H:i" + (userConfig.enableSeconds ? ":S" : ""); - } - if (userConfig.altInput && - (userConfig.enableTime || timeMode) && - !userConfig.altFormat) { - var defaultAltFormat = flatpickr.defaultConfig.altFormat || defaults.altFormat; - formats.altFormat = - userConfig.noCalendar || timeMode - ? "h:i" + (userConfig.enableSeconds ? ":S K" : " K") - : defaultAltFormat + (" h:i" + (userConfig.enableSeconds ? ":S" : "") + " K"); - } - if (!userConfig.altInputClass) { - self.config.altInputClass = - self.input.className + " " + self.config.altInputClass; - } - Object.defineProperty(self.config, "minDate", { - get: function () { return self.config._minDate; }, - set: minMaxDateSetter("min") - }); - Object.defineProperty(self.config, "maxDate", { - get: function () { return self.config._maxDate; }, - set: minMaxDateSetter("max") - }); - var minMaxTimeSetter = function (type) { return function (val) { - self.config[type === "min" ? "_minTime" : "_maxTime"] = self.parseDate(val, "H:i"); - }; }; - Object.defineProperty(self.config, "minTime", { - get: function () { return self.config._minTime; }, - set: minMaxTimeSetter("min") - }); - Object.defineProperty(self.config, "maxTime", { - get: function () { return self.config._maxTime; }, - set: minMaxTimeSetter("max") - }); - if (userConfig.mode === "time") { - self.config.noCalendar = true; - self.config.enableTime = true; - } - Object.assign(self.config, formats, userConfig); - for (var i = 0; i < boolOpts.length; i++) - self.config[boolOpts[i]] = - self.config[boolOpts[i]] === true || - self.config[boolOpts[i]] === "true"; - HOOKS.filter(function (hook) { return self.config[hook] !== undefined; }).forEach(function (hook) { - self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance); - }); - self.isMobile = - !self.config.disableMobile && - !self.config.inline && - self.config.mode === "single" && - !self.config.disable.length && - !self.config.enable.length && - !self.config.weekNumbers && - /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); - for (var i = 0; i < self.config.plugins.length; i++) { - var pluginConf = self.config.plugins[i](self) || {}; - for (var key in pluginConf) { - if (HOOKS.indexOf(key) > -1) { - self.config[key] = arrayify(pluginConf[key]) - .map(bindToInstance) - .concat(self.config[key]); - } - else if (typeof userConfig[key] === "undefined") - self.config[key] = pluginConf[key]; - } - } - triggerEvent("onParseConfig"); - } - function setupLocale() { - if (typeof self.config.locale !== "object" && - typeof flatpickr.l10ns[self.config.locale] === "undefined") - self.config.errorHandler(new Error("flatpickr: invalid locale " + self.config.locale)); - self.l10n = __assign({}, flatpickr.l10ns["default"], (typeof self.config.locale === "object" - ? self.config.locale - : self.config.locale !== "default" - ? flatpickr.l10ns[self.config.locale] - : undefined)); - tokenRegex.K = "(" + self.l10n.amPM[0] + "|" + self.l10n.amPM[1] + "|" + self.l10n.amPM[0].toLowerCase() + "|" + self.l10n.amPM[1].toLowerCase() + ")"; - var userConfig = __assign({}, instanceConfig, JSON.parse(JSON.stringify(element.dataset || {}))); - if (userConfig.time_24hr === undefined && - flatpickr.defaultConfig.time_24hr === undefined) { - self.config.time_24hr = self.l10n.time_24hr; - } - self.formatDate = createDateFormatter(self); - self.parseDate = createDateParser({ config: self.config, l10n: self.l10n }); - } - function positionCalendar(customPositionElement) { - if (self.calendarContainer === undefined) - return; - triggerEvent("onPreCalendarPosition"); - var positionElement = customPositionElement || self._positionElement; - var calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, (function (acc, child) { return acc + child.offsetHeight; }), 0), calendarWidth = self.calendarContainer.offsetWidth, configPos = self.config.position.split(" "), configPosVertical = configPos[0], configPosHorizontal = configPos.length > 1 ? configPos[1] : null, inputBounds = positionElement.getBoundingClientRect(), distanceFromBottom = window.innerHeight - inputBounds.bottom, showOnTop = configPosVertical === "above" || - (configPosVertical !== "below" && - distanceFromBottom < calendarHeight && - inputBounds.top > calendarHeight); - var top = window.pageYOffset + - inputBounds.top + - (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2); - toggleClass(self.calendarContainer, "arrowTop", !showOnTop); - toggleClass(self.calendarContainer, "arrowBottom", showOnTop); - if (self.config.inline) - return; - var left = window.pageXOffset + - inputBounds.left - - (configPosHorizontal != null && configPosHorizontal === "center" - ? (calendarWidth - inputBounds.width) / 2 - : 0); - var right = window.document.body.offsetWidth - inputBounds.right; - var rightMost = left + calendarWidth > window.document.body.offsetWidth; - var centerMost = right + calendarWidth > window.document.body.offsetWidth; - toggleClass(self.calendarContainer, "rightMost", rightMost); - if (self.config.static) - return; - self.calendarContainer.style.top = top + "px"; - if (!rightMost) { - self.calendarContainer.style.left = left + "px"; - self.calendarContainer.style.right = "auto"; - } - else if (!centerMost) { - self.calendarContainer.style.left = "auto"; - self.calendarContainer.style.right = right + "px"; - } - else { - var doc = document.styleSheets[0]; - // some testing environments don't have css support - if (doc === undefined) - return; - var bodyWidth = window.document.body.offsetWidth; - var centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2); - var centerBefore = ".flatpickr-calendar.centerMost:before"; - var centerAfter = ".flatpickr-calendar.centerMost:after"; - var centerIndex = doc.cssRules.length; - var centerStyle = "{left:" + inputBounds.left + "px;right:auto;}"; - toggleClass(self.calendarContainer, "rightMost", false); - toggleClass(self.calendarContainer, "centerMost", true); - doc.insertRule(centerBefore + "," + centerAfter + centerStyle, centerIndex); - self.calendarContainer.style.left = centerLeft + "px"; - self.calendarContainer.style.right = "auto"; - } - } - function redraw() { - if (self.config.noCalendar || self.isMobile) - return; - updateNavigationCurrentMonth(); - buildDays(); - } - function focusAndClose() { - self._input.focus(); - if (window.navigator.userAgent.indexOf("MSIE") !== -1 || - navigator.msMaxTouchPoints !== undefined) { - // hack - bugs in the way IE handles focus keeps the calendar open - setTimeout(self.close, 0); - } - else { - self.close(); - } - } - function selectDate(e) { - e.preventDefault(); - e.stopPropagation(); - var isSelectable = function (day) { - return day.classList && - day.classList.contains("flatpickr-day") && - !day.classList.contains("flatpickr-disabled") && - !day.classList.contains("notAllowed"); - }; - var t = findParent(e.target, isSelectable); - if (t === undefined) - return; - var target = t; - var selectedDate = (self.latestSelectedDateObj = new Date(target.dateObj.getTime())); - var shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth || - selectedDate.getMonth() > - self.currentMonth + self.config.showMonths - 1) && - self.config.mode !== "range"; - self.selectedDateElem = target; - if (self.config.mode === "single") - self.selectedDates = [selectedDate]; - else if (self.config.mode === "multiple") { - var selectedIndex = isDateSelected(selectedDate); - if (selectedIndex) - self.selectedDates.splice(parseInt(selectedIndex), 1); - else - self.selectedDates.push(selectedDate); - } - else if (self.config.mode === "range") { - if (self.selectedDates.length === 2) { - self.clear(false, false); - } - self.latestSelectedDateObj = selectedDate; - self.selectedDates.push(selectedDate); - // unless selecting same date twice, sort ascendingly - if (compareDates(selectedDate, self.selectedDates[0], true) !== 0) - self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); }); - } - setHoursFromInputs(); - if (shouldChangeMonth) { - var isNewYear = self.currentYear !== selectedDate.getFullYear(); - self.currentYear = selectedDate.getFullYear(); - self.currentMonth = selectedDate.getMonth(); - if (isNewYear) { - triggerEvent("onYearChange"); - buildMonthSwitch(); - } - triggerEvent("onMonthChange"); - } - updateNavigationCurrentMonth(); - buildDays(); - updateValue(); - if (self.config.enableTime) - setTimeout(function () { return (self.showTimeInput = true); }, 50); - // maintain focus - if (!shouldChangeMonth && - self.config.mode !== "range" && - self.config.showMonths === 1) - focusOnDayElem(target); - else if (self.selectedDateElem !== undefined && - self.hourElement === undefined) { - self.selectedDateElem && self.selectedDateElem.focus(); - } - if (self.hourElement !== undefined) - self.hourElement !== undefined && self.hourElement.focus(); - if (self.config.closeOnSelect) { - var single = self.config.mode === "single" && !self.config.enableTime; - var range = self.config.mode === "range" && - self.selectedDates.length === 2 && - !self.config.enableTime; - if (single || range) { - focusAndClose(); - } - } - triggerChange(); - } - var CALLBACKS = { - locale: [setupLocale, updateWeekdays], - showMonths: [buildMonths, setCalendarWidth, buildWeekdays], - minDate: [jumpToDate], - maxDate: [jumpToDate] - }; - function set(option, value) { - if (option !== null && typeof option === "object") { - Object.assign(self.config, option); - for (var key in option) { - if (CALLBACKS[key] !== undefined) - CALLBACKS[key].forEach(function (x) { return x(); }); - } - } - else { - self.config[option] = value; - if (CALLBACKS[option] !== undefined) - CALLBACKS[option].forEach(function (x) { return x(); }); - else if (HOOKS.indexOf(option) > -1) - self.config[option] = arrayify(value); - } - self.redraw(); - updateValue(false); - } - function setSelectedDate(inputDate, format) { - var dates = []; - if (inputDate instanceof Array) - dates = inputDate.map(function (d) { return self.parseDate(d, format); }); - else if (inputDate instanceof Date || typeof inputDate === "number") - dates = [self.parseDate(inputDate, format)]; - else if (typeof inputDate === "string") { - switch (self.config.mode) { - case "single": - case "time": - dates = [self.parseDate(inputDate, format)]; - break; - case "multiple": - dates = inputDate - .split(self.config.conjunction) - .map(function (date) { return self.parseDate(date, format); }); - break; - case "range": - dates = inputDate - .split(self.l10n.rangeSeparator) - .map(function (date) { return self.parseDate(date, format); }); - break; - default: - break; - } - } - else - self.config.errorHandler(new Error("Invalid date supplied: " + JSON.stringify(inputDate))); - self.selectedDates = dates.filter(function (d) { return d instanceof Date && isEnabled(d, false); }); - if (self.config.mode === "range") - self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); }); - } - function setDate(date, triggerChange, format) { - if (triggerChange === void 0) { triggerChange = false; } - if (format === void 0) { format = self.config.dateFormat; } - if ((date !== 0 && !date) || (date instanceof Array && date.length === 0)) - return self.clear(triggerChange); - setSelectedDate(date, format); - self.showTimeInput = self.selectedDates.length > 0; - self.latestSelectedDateObj = - self.selectedDates[self.selectedDates.length - 1]; - self.redraw(); - jumpToDate(); - setHoursFromDate(); - if (self.selectedDates.length === 0) { - self.clear(false); - } - updateValue(triggerChange); - if (triggerChange) - triggerEvent("onChange"); - } - function parseDateRules(arr) { - return arr - .slice() - .map(function (rule) { - if (typeof rule === "string" || - typeof rule === "number" || - rule instanceof Date) { - return self.parseDate(rule, undefined, true); - } - else if (rule && - typeof rule === "object" && - rule.from && - rule.to) - return { - from: self.parseDate(rule.from, undefined), - to: self.parseDate(rule.to, undefined) - }; - return rule; - }) - .filter(function (x) { return x; }); // remove falsy values - } - function setupDates() { - self.selectedDates = []; - self.now = self.parseDate(self.config.now) || new Date(); - // Workaround IE11 setting placeholder as the input's value - var preloadedDate = self.config.defaultDate || - ((self.input.nodeName === "INPUT" || - self.input.nodeName === "TEXTAREA") && - self.input.placeholder && - self.input.value === self.input.placeholder - ? null - : self.input.value); - if (preloadedDate) - setSelectedDate(preloadedDate, self.config.dateFormat); - self._initialDate = - self.selectedDates.length > 0 - ? self.selectedDates[0] - : self.config.minDate && - self.config.minDate.getTime() > self.now.getTime() - ? self.config.minDate - : self.config.maxDate && - self.config.maxDate.getTime() < self.now.getTime() - ? self.config.maxDate - : self.now; - self.currentYear = self._initialDate.getFullYear(); - self.currentMonth = self._initialDate.getMonth(); - if (self.selectedDates.length > 0) - self.latestSelectedDateObj = self.selectedDates[0]; - if (self.config.minTime !== undefined) - self.config.minTime = self.parseDate(self.config.minTime, "H:i"); - if (self.config.maxTime !== undefined) - self.config.maxTime = self.parseDate(self.config.maxTime, "H:i"); - self.minDateHasTime = - !!self.config.minDate && - (self.config.minDate.getHours() > 0 || - self.config.minDate.getMinutes() > 0 || - self.config.minDate.getSeconds() > 0); - self.maxDateHasTime = - !!self.config.maxDate && - (self.config.maxDate.getHours() > 0 || - self.config.maxDate.getMinutes() > 0 || - self.config.maxDate.getSeconds() > 0); - Object.defineProperty(self, "showTimeInput", { - get: function () { return self._showTimeInput; }, - set: function (bool) { - self._showTimeInput = bool; - if (self.calendarContainer) - toggleClass(self.calendarContainer, "showTimeInput", bool); - self.isOpen && positionCalendar(); - } - }); - } - function setupInputs() { - self.input = self.config.wrap - ? element.querySelector("[data-input]") - : element; - /* istanbul ignore next */ - if (!self.input) { - self.config.errorHandler(new Error("Invalid input element specified")); - return; - } - // hack: store previous type to restore it after destroy() - self.input._type = self.input.type; - self.input.type = "text"; - self.input.classList.add("flatpickr-input"); - self._input = self.input; - if (self.config.altInput) { - // replicate self.element - self.altInput = createElement(self.input.nodeName, self.config.altInputClass); - self._input = self.altInput; - self.altInput.placeholder = self.input.placeholder; - self.altInput.disabled = self.input.disabled; - self.altInput.required = self.input.required; - self.altInput.tabIndex = self.input.tabIndex; - self.altInput.type = "text"; - self.input.setAttribute("type", "hidden"); - if (!self.config.static && self.input.parentNode) - self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling); - } - if (!self.config.allowInput) - self._input.setAttribute("readonly", "readonly"); - self._positionElement = self.config.positionElement || self._input; - } - function setupMobile() { - var inputType = self.config.enableTime - ? self.config.noCalendar - ? "time" - : "datetime-local" - : "date"; - self.mobileInput = createElement("input", self.input.className + " flatpickr-mobile"); - self.mobileInput.step = self.input.getAttribute("step") || "any"; - self.mobileInput.tabIndex = 1; - self.mobileInput.type = inputType; - self.mobileInput.disabled = self.input.disabled; - self.mobileInput.required = self.input.required; - self.mobileInput.placeholder = self.input.placeholder; - self.mobileFormatStr = - inputType === "datetime-local" - ? "Y-m-d\\TH:i:S" - : inputType === "date" - ? "Y-m-d" - : "H:i:S"; - if (self.selectedDates.length > 0) { - self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr); - } - if (self.config.minDate) - self.mobileInput.min = self.formatDate(self.config.minDate, "Y-m-d"); - if (self.config.maxDate) - self.mobileInput.max = self.formatDate(self.config.maxDate, "Y-m-d"); - self.input.type = "hidden"; - if (self.altInput !== undefined) - self.altInput.type = "hidden"; - try { - if (self.input.parentNode) - self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling); - } - catch (_a) { } - bind(self.mobileInput, "change", function (e) { - self.setDate(e.target.value, false, self.mobileFormatStr); - triggerEvent("onChange"); - triggerEvent("onClose"); - }); - } - function toggle(e) { - if (self.isOpen === true) - return self.close(); - self.open(e); - } - function triggerEvent(event, data) { - // If the instance has been destroyed already, all hooks have been removed - if (self.config === undefined) - return; - var hooks = self.config[event]; - if (hooks !== undefined && hooks.length > 0) { - for (var i = 0; hooks[i] && i < hooks.length; i++) - hooks[i](self.selectedDates, self.input.value, self, data); - } - if (event === "onChange") { - self.input.dispatchEvent(createEvent("change")); - // many front-end frameworks bind to the input event - self.input.dispatchEvent(createEvent("input")); - } - } - function createEvent(name) { - var e = document.createEvent("Event"); - e.initEvent(name, true, true); - return e; - } - function isDateSelected(date) { - for (var i = 0; i < self.selectedDates.length; i++) { - if (compareDates(self.selectedDates[i], date) === 0) - return "" + i; - } - return false; - } - function isDateInRange(date) { - if (self.config.mode !== "range" || self.selectedDates.length < 2) - return false; - return (compareDates(date, self.selectedDates[0]) >= 0 && - compareDates(date, self.selectedDates[1]) <= 0); - } - function updateNavigationCurrentMonth() { - if (self.config.noCalendar || self.isMobile || !self.monthNav) - return; - self.yearElements.forEach(function (yearElement, i) { - var d = new Date(self.currentYear, self.currentMonth, 1); - d.setMonth(self.currentMonth + i); - if (self.config.showMonths > 1 || - self.config.monthSelectorType === "static") { - self.monthElements[i].textContent = - monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + " "; - } - else { - self.monthsDropdownContainer.value = d.getMonth().toString(); - } - yearElement.value = d.getFullYear().toString(); - }); - self._hidePrevMonthArrow = - self.config.minDate !== undefined && - (self.currentYear === self.config.minDate.getFullYear() - ? self.currentMonth <= self.config.minDate.getMonth() - : self.currentYear < self.config.minDate.getFullYear()); - self._hideNextMonthArrow = - self.config.maxDate !== undefined && - (self.currentYear === self.config.maxDate.getFullYear() - ? self.currentMonth + 1 > self.config.maxDate.getMonth() - : self.currentYear > self.config.maxDate.getFullYear()); - } - function getDateStr(format) { - return self.selectedDates - .map(function (dObj) { return self.formatDate(dObj, format); }) - .filter(function (d, i, arr) { - return self.config.mode !== "range" || - self.config.enableTime || - arr.indexOf(d) === i; - }) - .join(self.config.mode !== "range" - ? self.config.conjunction - : self.l10n.rangeSeparator); - } - /** - * Updates the values of inputs associated with the calendar - */ - function updateValue(triggerChange) { - if (triggerChange === void 0) { triggerChange = true; } - if (self.mobileInput !== undefined && self.mobileFormatStr) { - self.mobileInput.value = - self.latestSelectedDateObj !== undefined - ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr) - : ""; - } - self.input.value = getDateStr(self.config.dateFormat); - if (self.altInput !== undefined) { - self.altInput.value = getDateStr(self.config.altFormat); - } - if (triggerChange !== false) - triggerEvent("onValueUpdate"); - } - function onMonthNavClick(e) { - var isPrevMonth = self.prevMonthNav.contains(e.target); - var isNextMonth = self.nextMonthNav.contains(e.target); - if (isPrevMonth || isNextMonth) { - changeMonth(isPrevMonth ? -1 : 1); - } - else if (self.yearElements.indexOf(e.target) >= 0) { - e.target.select(); - } - else if (e.target.classList.contains("arrowUp")) { - self.changeYear(self.currentYear + 1); - } - else if (e.target.classList.contains("arrowDown")) { - self.changeYear(self.currentYear - 1); - } - } - function timeWrapper(e) { - e.preventDefault(); - var isKeyDown = e.type === "keydown", input = e.target; - if (self.amPM !== undefined && e.target === self.amPM) { - self.amPM.textContent = - self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])]; - } - var min = parseFloat(input.getAttribute("min")), max = parseFloat(input.getAttribute("max")), step = parseFloat(input.getAttribute("step")), curValue = parseInt(input.value, 10), delta = e.delta || - (isKeyDown ? (e.which === 38 ? 1 : -1) : 0); - var newValue = curValue + step * delta; - if (typeof input.value !== "undefined" && input.value.length === 2) { - var isHourElem = input === self.hourElement, isMinuteElem = input === self.minuteElement; - if (newValue < min) { - newValue = - max + - newValue + - int(!isHourElem) + - (int(isHourElem) && int(!self.amPM)); - if (isMinuteElem) - incrementNumInput(undefined, -1, self.hourElement); - } - else if (newValue > max) { - newValue = - input === self.hourElement ? newValue - max - int(!self.amPM) : min; - if (isMinuteElem) - incrementNumInput(undefined, 1, self.hourElement); - } - if (self.amPM && - isHourElem && - (step === 1 - ? newValue + curValue === 23 - : Math.abs(newValue - curValue) > step)) { - self.amPM.textContent = - self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])]; - } - input.value = pad(newValue); - } - } - init(); - return self; - } - /* istanbul ignore next */ - function _flatpickr(nodeList, config) { - // static list - var nodes = Array.prototype.slice - .call(nodeList) - .filter(function (x) { return x instanceof HTMLElement; }); - var instances = []; - for (var i = 0; i < nodes.length; i++) { - var node = nodes[i]; - try { - if (node.getAttribute("data-fp-omit") !== null) - continue; - if (node._flatpickr !== undefined) { - node._flatpickr.destroy(); - node._flatpickr = undefined; - } - node._flatpickr = FlatpickrInstance(node, config || {}); - instances.push(node._flatpickr); - } - catch (e) { - console.error(e); - } - } - return instances.length === 1 ? instances[0] : instances; - } - /* istanbul ignore next */ - if (typeof HTMLElement !== "undefined" && - typeof HTMLCollection !== "undefined" && - typeof NodeList !== "undefined") { - // browser env - HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) { - return _flatpickr(this, config); - }; - HTMLElement.prototype.flatpickr = function (config) { - return _flatpickr([this], config); - }; - } - /* istanbul ignore next */ - var flatpickr = function (selector, config) { - if (typeof selector === "string") { - return _flatpickr(window.document.querySelectorAll(selector), config); - } - else if (selector instanceof Node) { - return _flatpickr([selector], config); - } - else { - return _flatpickr(selector, config); - } - }; - /* istanbul ignore next */ - flatpickr.defaultConfig = {}; - flatpickr.l10ns = { - en: __assign({}, english), - "default": __assign({}, english) - }; - flatpickr.localize = function (l10n) { - flatpickr.l10ns["default"] = __assign({}, flatpickr.l10ns["default"], l10n); - }; - flatpickr.setDefaults = function (config) { - flatpickr.defaultConfig = __assign({}, flatpickr.defaultConfig, config); - }; - flatpickr.parseDate = createDateParser({}); - flatpickr.formatDate = createDateFormatter({}); - flatpickr.compareDates = compareDates; - /* istanbul ignore next */ - if (typeof jQuery !== "undefined" && typeof jQuery.fn !== "undefined") { - jQuery.fn.flatpickr = function (config) { - return _flatpickr(this, config); - }; - } - // eslint-disable-next-line @typescript-eslint/camelcase - Date.prototype.fp_incr = function (days) { - return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === "string" ? parseInt(days, 10) : days)); - }; - if (typeof window !== "undefined") { - window.flatpickr = flatpickr; - } - - return flatpickr; - -})); diff --git a/website/appphp/static/vendors/flatpickr/flatpickr.min.css b/website/appphp/static/vendors/flatpickr/flatpickr.min.css deleted file mode 100644 index aef48dda..00000000 --- a/website/appphp/static/vendors/flatpickr/flatpickr.min.css +++ /dev/null @@ -1 +0,0 @@ -.flatpickr-calendar{background:0 0;opacity:0;display:none;text-align:center;visibility:hidden;padding:0;-webkit-animation:none;animation:none;direction:ltr;border:0;font-size:14px;line-height:24px;border-radius:5px;position:absolute;width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-touch-action:manipulation;touch-action:manipulation;background:#fff;-webkit-box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,.08);box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,.08)}.flatpickr-calendar.inline,.flatpickr-calendar.open{opacity:1;max-height:640px;visibility:visible}.flatpickr-calendar.open{display:inline-block;z-index:99999}.flatpickr-calendar.animate.open{-webkit-animation:fpFadeInDown .3s cubic-bezier(.23,1,.32,1);animation:fpFadeInDown .3s cubic-bezier(.23,1,.32,1)}.flatpickr-calendar.inline{display:block;position:relative;top:2px}.flatpickr-calendar.static{position:absolute;top:calc(100% + 2px)}.flatpickr-calendar.static.open{z-index:999;display:block}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7){-webkit-box-shadow:none!important;box-shadow:none!important}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1){-webkit-box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-calendar .hasTime .dayContainer,.flatpickr-calendar .hasWeeks .dayContainer{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.flatpickr-calendar .hasWeeks .dayContainer{border-left:0}.flatpickr-calendar.showTimeInput.hasTime .flatpickr-time{height:40px;border-top:1px solid #e6e6e6}.flatpickr-calendar.noCalendar.hasTime .flatpickr-time{height:auto}.flatpickr-calendar:after,.flatpickr-calendar:before{position:absolute;display:block;pointer-events:none;border:solid transparent;content:'';height:0;width:0;left:22px}.flatpickr-calendar.rightMost:after,.flatpickr-calendar.rightMost:before{left:auto;right:22px}.flatpickr-calendar:before{border-width:5px;margin:0 -5px}.flatpickr-calendar:after{border-width:4px;margin:0 -4px}.flatpickr-calendar.arrowTop:after,.flatpickr-calendar.arrowTop:before{bottom:100%}.flatpickr-calendar.arrowTop:before{border-bottom-color:#e6e6e6}.flatpickr-calendar.arrowTop:after{border-bottom-color:#fff}.flatpickr-calendar.arrowBottom:after,.flatpickr-calendar.arrowBottom:before{top:100%}.flatpickr-calendar.arrowBottom:before{border-top-color:#e6e6e6}.flatpickr-calendar.arrowBottom:after{border-top-color:#fff}.flatpickr-calendar:focus{outline:0}.flatpickr-wrapper{position:relative;display:inline-block}.flatpickr-months{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-months .flatpickr-month{background:0 0;color:rgba(0,0,0,.9);fill:rgba(0,0,0,.9);height:34px;line-height:1;text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.flatpickr-months .flatpickr-next-month,.flatpickr-months .flatpickr-prev-month{text-decoration:none;cursor:pointer;position:absolute;top:0;height:34px;padding:10px;z-index:3;color:rgba(0,0,0,.9);fill:rgba(0,0,0,.9)}.flatpickr-months .flatpickr-next-month.flatpickr-disabled,.flatpickr-months .flatpickr-prev-month.flatpickr-disabled{display:none}.flatpickr-months .flatpickr-next-month i,.flatpickr-months .flatpickr-prev-month i{position:relative}.flatpickr-months .flatpickr-next-month.flatpickr-prev-month,.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month{left:0}.flatpickr-months .flatpickr-next-month.flatpickr-next-month,.flatpickr-months .flatpickr-prev-month.flatpickr-next-month{right:0}.flatpickr-months .flatpickr-next-month:hover,.flatpickr-months .flatpickr-prev-month:hover{color:#959ea9}.flatpickr-months .flatpickr-next-month:hover svg,.flatpickr-months .flatpickr-prev-month:hover svg{fill:#f64747}.flatpickr-months .flatpickr-next-month svg,.flatpickr-months .flatpickr-prev-month svg{width:14px;height:14px}.flatpickr-months .flatpickr-next-month svg path,.flatpickr-months .flatpickr-prev-month svg path{-webkit-transition:fill .1s;transition:fill .1s;fill:inherit}.numInputWrapper{position:relative;height:auto}.numInputWrapper input,.numInputWrapper span{display:inline-block}.numInputWrapper input{width:100%}.numInputWrapper input::-ms-clear{display:none}.numInputWrapper input::-webkit-inner-spin-button,.numInputWrapper input::-webkit-outer-spin-button{margin:0;-webkit-appearance:none}.numInputWrapper span{position:absolute;right:0;width:14px;padding:0 4px 0 2px;height:50%;line-height:50%;opacity:0;cursor:pointer;border:1px solid rgba(57,57,57,.15);-webkit-box-sizing:border-box;box-sizing:border-box}.numInputWrapper span:hover{background:rgba(0,0,0,.1)}.numInputWrapper span:active{background:rgba(0,0,0,.2)}.numInputWrapper span:after{display:block;content:"";position:absolute}.numInputWrapper span.arrowUp{top:0;border-bottom:0}.numInputWrapper span.arrowUp:after{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:4px solid rgba(57,57,57,.6);top:26%}.numInputWrapper span.arrowDown{top:50%}.numInputWrapper span.arrowDown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(57,57,57,.6);top:40%}.numInputWrapper span svg{width:inherit;height:auto}.numInputWrapper span svg path{fill:rgba(0,0,0,.5)}.numInputWrapper:hover{background:rgba(0,0,0,.05)}.numInputWrapper:hover span{opacity:1}.flatpickr-current-month{font-size:135%;line-height:inherit;font-weight:300;color:inherit;position:absolute;width:75%;left:12.5%;padding:7.48px 0 0 0;line-height:1;height:34px;display:inline-block;text-align:center;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.flatpickr-current-month span.cur-month{font-family:inherit;font-weight:700;color:inherit;display:inline-block;margin-left:.5ch;padding:0}.flatpickr-current-month span.cur-month:hover{background:rgba(0,0,0,.05)}.flatpickr-current-month .numInputWrapper{width:6ch;display:inline-block}.flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:rgba(0,0,0,.9)}.flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:rgba(0,0,0,.9)}.flatpickr-current-month input.cur-year{background:0 0;-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;cursor:text;padding:0 0 0 .5ch;margin:0;display:inline-block;font-size:inherit;font-family:inherit;font-weight:300;line-height:inherit;height:auto;border:0;border-radius:0;vertical-align:initial;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-current-month input.cur-year:focus{outline:0}.flatpickr-current-month input.cur-year[disabled],.flatpickr-current-month input.cur-year[disabled]:hover{font-size:100%;color:rgba(0,0,0,.5);background:0 0;pointer-events:none}.flatpickr-current-month .flatpickr-monthDropdown-months{appearance:menulist;background:0 0;border:none;border-radius:0;box-sizing:border-box;color:inherit;cursor:pointer;font-size:inherit;font-family:inherit;font-weight:300;height:auto;line-height:inherit;margin:-1px 0 0 0;outline:0;padding:0 0 0 .5ch;position:relative;vertical-align:initial;-webkit-box-sizing:border-box;-webkit-appearance:menulist;-moz-appearance:menulist;width:auto}.flatpickr-current-month .flatpickr-monthDropdown-months:active,.flatpickr-current-month .flatpickr-monthDropdown-months:focus{outline:0}.flatpickr-current-month .flatpickr-monthDropdown-months:hover{background:rgba(0,0,0,.05)}.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month{background-color:transparent;outline:0;padding:0}.flatpickr-weekdays{background:0 0;text-align:center;overflow:hidden;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:28px}.flatpickr-weekdays .flatpickr-weekdaycontainer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}span.flatpickr-weekday{cursor:default;font-size:90%;background:0 0;color:rgba(0,0,0,.54);line-height:1;margin:0;text-align:center;display:block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;font-weight:bolder}.dayContainer,.flatpickr-weeks{padding:1px 0 0 0}.flatpickr-days{position:relative;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;width:307.875px}.flatpickr-days:focus{outline:0}.dayContainer{padding:0;outline:0;text-align:left;width:307.875px;min-width:307.875px;max-width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-wrap:wrap;-ms-flex-pack:justify;-webkit-justify-content:space-around;justify-content:space-around;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.dayContainer+.dayContainer{-webkit-box-shadow:-1px 0 0 #e6e6e6;box-shadow:-1px 0 0 #e6e6e6}.flatpickr-day{background:0 0;border:1px solid transparent;border-radius:150px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;cursor:pointer;font-weight:400;width:14.2857143%;-webkit-flex-basis:14.2857143%;-ms-flex-preferred-size:14.2857143%;flex-basis:14.2857143%;max-width:39px;height:39px;line-height:39px;margin:0;display:inline-block;position:relative;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.flatpickr-day.inRange,.flatpickr-day.nextMonthDay.inRange,.flatpickr-day.nextMonthDay.today.inRange,.flatpickr-day.nextMonthDay:focus,.flatpickr-day.nextMonthDay:hover,.flatpickr-day.prevMonthDay.inRange,.flatpickr-day.prevMonthDay.today.inRange,.flatpickr-day.prevMonthDay:focus,.flatpickr-day.prevMonthDay:hover,.flatpickr-day.today.inRange,.flatpickr-day:focus,.flatpickr-day:hover{cursor:pointer;outline:0;background:#e6e6e6;border-color:#e6e6e6}.flatpickr-day.today{border-color:#959ea9}.flatpickr-day.today:focus,.flatpickr-day.today:hover{border-color:#959ea9;background:#959ea9;color:#fff}.flatpickr-day.endRange,.flatpickr-day.endRange.inRange,.flatpickr-day.endRange.nextMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.endRange:focus,.flatpickr-day.endRange:hover,.flatpickr-day.selected,.flatpickr-day.selected.inRange,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.selected:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange,.flatpickr-day.startRange.inRange,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.startRange:focus,.flatpickr-day.startRange:hover{background:#569ff7;-webkit-box-shadow:none;box-shadow:none;color:#fff;border-color:#569ff7}.flatpickr-day.endRange.startRange,.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange{border-radius:50px 0 0 50px}.flatpickr-day.endRange.endRange,.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange{border-radius:0 50px 50px 0}.flatpickr-day.endRange.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.selected.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange+.endRange:not(:nth-child(7n+1)){-webkit-box-shadow:-10px 0 0 #569ff7;box-shadow:-10px 0 0 #569ff7}.flatpickr-day.endRange.startRange.endRange,.flatpickr-day.selected.startRange.endRange,.flatpickr-day.startRange.startRange.endRange{border-radius:50px}.flatpickr-day.inRange{border-radius:0;-webkit-box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover,.flatpickr-day.nextMonthDay,.flatpickr-day.notAllowed,.flatpickr-day.notAllowed.nextMonthDay,.flatpickr-day.notAllowed.prevMonthDay,.flatpickr-day.prevMonthDay{color:rgba(57,57,57,.3);background:0 0;border-color:transparent;cursor:default}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover{cursor:not-allowed;color:rgba(57,57,57,.1)}.flatpickr-day.week.selected{border-radius:0;-webkit-box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7;box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7}.flatpickr-day.hidden{visibility:hidden}.rangeMode .flatpickr-day{margin-top:1px}.flatpickr-weekwrapper{float:left}.flatpickr-weekwrapper .flatpickr-weeks{padding:0 12px;-webkit-box-shadow:1px 0 0 #e6e6e6;box-shadow:1px 0 0 #e6e6e6}.flatpickr-weekwrapper .flatpickr-weekday{float:none;width:100%;line-height:28px}.flatpickr-weekwrapper span.flatpickr-day,.flatpickr-weekwrapper span.flatpickr-day:hover{display:block;width:100%;max-width:none;color:rgba(57,57,57,.3);background:0 0;cursor:default;border:none}.flatpickr-innerContainer{display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.flatpickr-rContainer{display:inline-block;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}.flatpickr-time{text-align:center;outline:0;display:block;height:0;line-height:40px;max-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-time:after{content:"";display:table;clear:both}.flatpickr-time .numInputWrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:40%;height:40px;float:left}.flatpickr-time .numInputWrapper span.arrowUp:after{border-bottom-color:#393939}.flatpickr-time .numInputWrapper span.arrowDown:after{border-top-color:#393939}.flatpickr-time.hasSeconds .numInputWrapper{width:26%}.flatpickr-time.time24hr .numInputWrapper{width:49%}.flatpickr-time input{background:0 0;-webkit-box-shadow:none;box-shadow:none;border:0;border-radius:0;text-align:center;margin:0;padding:0;height:inherit;line-height:inherit;color:#393939;font-size:14px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-time input.flatpickr-hour{font-weight:700}.flatpickr-time input.flatpickr-minute,.flatpickr-time input.flatpickr-second{font-weight:400}.flatpickr-time input:focus{outline:0;border:0}.flatpickr-time .flatpickr-am-pm,.flatpickr-time .flatpickr-time-separator{height:inherit;float:left;line-height:inherit;color:#393939;font-weight:700;width:2%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.flatpickr-time .flatpickr-am-pm{outline:0;width:18%;cursor:pointer;text-align:center;font-weight:400}.flatpickr-time .flatpickr-am-pm:focus,.flatpickr-time .flatpickr-am-pm:hover,.flatpickr-time input:focus,.flatpickr-time input:hover{background:#eee}.flatpickr-input[readonly]{cursor:pointer}@-webkit-keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}} \ No newline at end of file diff --git a/website/appphp/static/vendors/flatpickr/flatpickr.min.js b/website/appphp/static/vendors/flatpickr/flatpickr.min.js deleted file mode 100644 index 4f173860..00000000 --- a/website/appphp/static/vendors/flatpickr/flatpickr.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* flatpickr v4.6.2,, @license MIT */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).flatpickr=t()}(this,function(){"use strict";var e=function(){return(e=Object.assign||function(e){for(var t,n=1,a=arguments.length;n",noCalendar:!1,now:new Date,onChange:[],onClose:[],onDayCreate:[],onDestroy:[],onKeyDown:[],onMonthChange:[],onOpen:[],onParseConfig:[],onReady:[],onValueUpdate:[],onYearChange:[],onPreCalendarPosition:[],plugins:[],position:"auto",positionElement:void 0,prevArrow:"",shorthandCurrentMonth:!1,showMonths:1,static:!1,time_24hr:!1,weekNumbers:!1,wrap:!1},a={weekdays:{shorthand:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],longhand:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},months:{shorthand:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],longhand:["January","February","March","April","May","June","July","August","September","October","November","December"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(e){var t=e%100;if(t>3&&t<21)return"th";switch(t%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}},rangeSeparator:" to ",weekAbbreviation:"Wk",scrollTitle:"Scroll to increment",toggleTitle:"Click to toggle",amPM:["AM","PM"],yearAriaLabel:"Year",hourAriaLabel:"Hour",minuteAriaLabel:"Minute",time_24hr:!1},i=function(e){return("0"+e).slice(-2)},o=function(e){return!0===e?1:0};function r(e,t,n){var a;return void 0===n&&(n=!1),function(){var i=this,o=arguments;null!==a&&clearTimeout(a),a=window.setTimeout(function(){a=null,n||e.apply(i,o)},t),n&&!a&&e.apply(i,o)}}var l=function(e){return e instanceof Array?e:[e]};function c(e,t,n){if(!0===n)return e.classList.add(t);e.classList.remove(t)}function d(e,t,n){var a=window.document.createElement(e);return t=t||"",n=n||"",a.className=t,void 0!==n&&(a.textContent=n),a}function s(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function u(e,t){var n=d("div","numInputWrapper"),a=d("input","numInput "+e),i=d("span","arrowUp"),o=d("span","arrowDown");if(-1===navigator.userAgent.indexOf("MSIE 9.0")?a.type="number":(a.type="text",a.pattern="\\d*"),void 0!==t)for(var r in t)a.setAttribute(r,t[r]);return n.appendChild(a),n.appendChild(i),n.appendChild(o),n}var f=function(){},m=function(e,t,n){return n.months[t?"shorthand":"longhand"][e]},g={D:f,F:function(e,t,n){e.setMonth(n.months.longhand.indexOf(t))},G:function(e,t){e.setHours(parseFloat(t))},H:function(e,t){e.setHours(parseFloat(t))},J:function(e,t){e.setDate(parseFloat(t))},K:function(e,t,n){e.setHours(e.getHours()%12+12*o(new RegExp(n.amPM[1],"i").test(t)))},M:function(e,t,n){e.setMonth(n.months.shorthand.indexOf(t))},S:function(e,t){e.setSeconds(parseFloat(t))},U:function(e,t){return new Date(1e3*parseFloat(t))},W:function(e,t,n){var a=parseInt(t),i=new Date(e.getFullYear(),0,2+7*(a-1),0,0,0,0);return i.setDate(i.getDate()-i.getDay()+n.firstDayOfWeek),i},Y:function(e,t){e.setFullYear(parseFloat(t))},Z:function(e,t){return new Date(t)},d:function(e,t){e.setDate(parseFloat(t))},h:function(e,t){e.setHours(parseFloat(t))},i:function(e,t){e.setMinutes(parseFloat(t))},j:function(e,t){e.setDate(parseFloat(t))},l:f,m:function(e,t){e.setMonth(parseFloat(t)-1)},n:function(e,t){e.setMonth(parseFloat(t)-1)},s:function(e,t){e.setSeconds(parseFloat(t))},u:function(e,t){return new Date(parseFloat(t))},w:f,y:function(e,t){e.setFullYear(2e3+parseFloat(t))}},p={D:"(\\w+)",F:"(\\w+)",G:"(\\d\\d|\\d)",H:"(\\d\\d|\\d)",J:"(\\d\\d|\\d)\\w+",K:"",M:"(\\w+)",S:"(\\d\\d|\\d)",U:"(.+)",W:"(\\d\\d|\\d)",Y:"(\\d{4})",Z:"(.+)",d:"(\\d\\d|\\d)",h:"(\\d\\d|\\d)",i:"(\\d\\d|\\d)",j:"(\\d\\d|\\d)",l:"(\\w+)",m:"(\\d\\d|\\d)",n:"(\\d\\d|\\d)",s:"(\\d\\d|\\d)",u:"(.+)",w:"(\\d\\d|\\d)",y:"(\\d{2})"},h={Z:function(e){return e.toISOString()},D:function(e,t,n){return t.weekdays.shorthand[h.w(e,t,n)]},F:function(e,t,n){return m(h.n(e,t,n)-1,!1,t)},G:function(e,t,n){return i(h.h(e,t,n))},H:function(e){return i(e.getHours())},J:function(e,t){return void 0!==t.ordinal?e.getDate()+t.ordinal(e.getDate()):e.getDate()},K:function(e,t){return t.amPM[o(e.getHours()>11)]},M:function(e,t){return m(e.getMonth(),!0,t)},S:function(e){return i(e.getSeconds())},U:function(e){return e.getTime()/1e3},W:function(e,t,n){return n.getWeek(e)},Y:function(e){return e.getFullYear()},d:function(e){return i(e.getDate())},h:function(e){return e.getHours()%12?e.getHours()%12:12},i:function(e){return i(e.getMinutes())},j:function(e){return e.getDate()},l:function(e,t){return t.weekdays.longhand[e.getDay()]},m:function(e){return i(e.getMonth()+1)},n:function(e){return e.getMonth()+1},s:function(e){return e.getSeconds()},u:function(e){return e.getTime()},w:function(e){return e.getDay()},y:function(e){return String(e.getFullYear()).substring(2)}},v=function(e){var t=e.config,i=void 0===t?n:t,o=e.l10n,r=void 0===o?a:o;return function(e,t,n){var a=n||r;return void 0!==i.formatDate?i.formatDate(e,t,a):t.split("").map(function(t,n,o){return h[t]&&"\\"!==o[n-1]?h[t](e,a,i):"\\"!==t?t:""}).join("")}},D=function(e){var t=e.config,i=void 0===t?n:t,o=e.l10n,r=void 0===o?a:o;return function(e,t,a,o){if(0===e||e){var l,c=o||r,d=e;if(e instanceof Date)l=new Date(e.getTime());else if("string"!=typeof e&&void 0!==e.toFixed)l=new Date(e);else if("string"==typeof e){var s=t||(i||n).dateFormat,u=String(e).trim();if("today"===u)l=new Date,a=!0;else if(/Z$/.test(u)||/GMT$/.test(u))l=new Date(e);else if(i&&i.parseDate)l=i.parseDate(e,s);else{l=i&&i.noCalendar?new Date((new Date).setHours(0,0,0,0)):new Date((new Date).getFullYear(),0,1,0,0,0,0);for(var f=void 0,m=[],h=0,v=0,D="";hMath.min(t,n)&&er&&(s=n===h.hourElement?s-r-o(!h.amPM):a,f&&j(void 0,1,h.hourElement)),h.amPM&&u&&(1===l?s+c===23:Math.abs(s-c)>l)&&(h.amPM.textContent=h.l10n.amPM[o(h.amPM.textContent===h.l10n.amPM[0])]),n.value=i(s)}}(e);var t=h._input.value;k(),we(),h._input.value!==t&&h._debouncedChange()}function k(){if(void 0!==h.hourElement&&void 0!==h.minuteElement){var e,t,n=(parseInt(h.hourElement.value.slice(-2),10)||0)%24,a=(parseInt(h.minuteElement.value,10)||0)%60,i=void 0!==h.secondElement?(parseInt(h.secondElement.value,10)||0)%60:0;void 0!==h.amPM&&(e=n,t=h.amPM.textContent,n=e%12+12*o(t===h.l10n.amPM[1]));var r=void 0!==h.config.minTime||h.config.minDate&&h.minDateHasTime&&h.latestSelectedDateObj&&0===w(h.latestSelectedDateObj,h.config.minDate,!0);if(void 0!==h.config.maxTime||h.config.maxDate&&h.maxDateHasTime&&h.latestSelectedDateObj&&0===w(h.latestSelectedDateObj,h.config.maxDate,!0)){var l=void 0!==h.config.maxTime?h.config.maxTime:h.config.maxDate;(n=Math.min(n,l.getHours()))===l.getHours()&&(a=Math.min(a,l.getMinutes())),a===l.getMinutes()&&(i=Math.min(i,l.getSeconds()))}if(r){var c=void 0!==h.config.minTime?h.config.minTime:h.config.minDate;(n=Math.max(n,c.getHours()))===c.getHours()&&(a=Math.max(a,c.getMinutes())),a===c.getMinutes()&&(i=Math.max(i,c.getSeconds()))}O(n,a,i)}}function I(e){var t=e||h.latestSelectedDateObj;t&&O(t.getHours(),t.getMinutes(),t.getSeconds())}function S(){var e=h.config.defaultHour,t=h.config.defaultMinute,n=h.config.defaultSeconds;if(void 0!==h.config.minDate){var a=h.config.minDate.getHours(),i=h.config.minDate.getMinutes();(e=Math.max(e,a))===a&&(t=Math.max(i,t)),e===a&&t===i&&(n=h.config.minDate.getSeconds())}if(void 0!==h.config.maxDate){var o=h.config.maxDate.getHours(),r=h.config.maxDate.getMinutes();(e=Math.min(e,o))===o&&(t=Math.min(r,t)),e===o&&t===r&&(n=h.config.maxDate.getSeconds())}O(e,t,n)}function O(e,t,n){void 0!==h.latestSelectedDateObj&&h.latestSelectedDateObj.setHours(e%24,t,n||0,0),h.hourElement&&h.minuteElement&&!h.isMobile&&(h.hourElement.value=i(h.config.time_24hr?e:(12+e)%12+12*o(e%12==0)),h.minuteElement.value=i(t),void 0!==h.amPM&&(h.amPM.textContent=h.l10n.amPM[o(e>=12)]),void 0!==h.secondElement&&(h.secondElement.value=i(n)))}function _(e){var t=parseInt(e.target.value)+(e.delta||0);(t/1e3>1||"Enter"===e.key&&!/[^\d]/.test(t.toString()))&&Q(t)}function F(e,t,n,a){return t instanceof Array?t.forEach(function(t){return F(e,t,n,a)}):e instanceof Array?e.forEach(function(e){return F(e,t,n,a)}):(e.addEventListener(t,n,a),void h._handlers.push({element:e,event:t,handler:n,options:a}))}function N(e){return function(t){1===t.which&&e(t)}}function Y(){ge("onChange")}function A(e,t){var n=void 0!==e?h.parseDate(e):h.latestSelectedDateObj||(h.config.minDate&&h.config.minDate>h.now?h.config.minDate:h.config.maxDate&&h.config.maxDate=0&&w(e,h.selectedDates[1])<=0}(t)&&!he(t)&&o.classList.add("inRange"),h.weekNumbers&&1===h.config.showMonths&&"prevMonthDay"!==e&&n%7==1&&h.weekNumbers.insertAdjacentHTML("beforeend",""+h.config.getWeek(t)+""),ge("onDayCreate",o),o}function L(e){e.focus(),"range"===h.config.mode&&ne(e)}function W(e){for(var t=e>0?0:h.config.showMonths-1,n=e>0?h.config.showMonths:-1,a=t;a!=n;a+=e)for(var i=h.daysContainer.children[a],o=e>0?0:i.children.length-1,r=e>0?i.children.length:-1,l=o;l!=r;l+=e){var c=i.children[l];if(-1===c.className.indexOf("hidden")&&X(c.dateObj))return c}}function R(e,t){var n=ee(document.activeElement||document.body),a=void 0!==e?e:n?document.activeElement:void 0!==h.selectedDateElem&&ee(h.selectedDateElem)?h.selectedDateElem:void 0!==h.todayDateElem&&ee(h.todayDateElem)?h.todayDateElem:W(t>0?1:-1);return void 0===a?h._input.focus():n?void function(e,t){for(var n=-1===e.className.indexOf("Month")?e.dateObj.getMonth():h.currentMonth,a=t>0?h.config.showMonths:-1,i=t>0?1:-1,o=n-h.currentMonth;o!=a;o+=i)for(var r=h.daysContainer.children[o],l=n-h.currentMonth===o?e.$i+t:t<0?r.children.length-1:0,c=r.children.length,d=l;d>=0&&d0?c:-1);d+=i){var s=r.children[d];if(-1===s.className.indexOf("hidden")&&X(s.dateObj)&&Math.abs(e.$i-d)>=Math.abs(t))return L(s)}h.changeMonth(i),R(W(i),0)}(a,t):L(a)}function B(e,t){for(var n=(new Date(e,t,1).getDay()-h.l10n.firstDayOfWeek+7)%7,a=h.utils.getDaysInMonth((t-1+12)%12),i=h.utils.getDaysInMonth(t),o=window.document.createDocumentFragment(),r=h.config.showMonths>1,l=r?"prevMonthDay hidden":"prevMonthDay",c=r?"nextMonthDay hidden":"nextMonthDay",s=a+1-n,u=0;s<=a;s++,u++)o.appendChild(H(l,new Date(e,t-1,s),s,u));for(s=1;s<=i;s++,u++)o.appendChild(H("",new Date(e,t,s),s,u));for(var f=i+1;f<=42-n&&(1===h.config.showMonths||u%7!=0);f++,u++)o.appendChild(H(c,new Date(e,t+1,f%i),f,u));var m=d("div","dayContainer");return m.appendChild(o),m}function J(){if(void 0!==h.daysContainer){s(h.daysContainer),h.weekNumbers&&s(h.weekNumbers);for(var e=document.createDocumentFragment(),t=0;t1||"dropdown"!==h.config.monthSelectorType)){var e=function(e){return!(void 0!==h.config.minDate&&h.currentYear===h.config.minDate.getFullYear()&&eh.config.maxDate.getMonth())};h.monthsDropdownContainer.tabIndex=-1,h.monthsDropdownContainer.innerHTML="";for(var t=0;t<12;t++)if(e(t)){var n=d("option","flatpickr-monthDropdown-month");n.value=new Date(h.currentYear,t).getMonth().toString(),n.textContent=m(t,h.config.shorthandCurrentMonth,h.l10n),n.tabIndex=-1,h.currentMonth===t&&(n.selected=!0),h.monthsDropdownContainer.appendChild(n)}}}function U(){var e,t=d("div","flatpickr-month"),n=window.document.createDocumentFragment();h.config.showMonths>1||"static"===h.config.monthSelectorType?e=d("span","cur-month"):(h.monthsDropdownContainer=d("select","flatpickr-monthDropdown-months"),F(h.monthsDropdownContainer,"change",function(e){var t=e.target,n=parseInt(t.value,10);h.changeMonth(n-h.currentMonth),ge("onMonthChange")}),K(),e=h.monthsDropdownContainer);var a=u("cur-year",{tabindex:"-1"}),i=a.getElementsByTagName("input")[0];i.setAttribute("aria-label",h.l10n.yearAriaLabel),h.config.minDate&&i.setAttribute("min",h.config.minDate.getFullYear().toString()),h.config.maxDate&&(i.setAttribute("max",h.config.maxDate.getFullYear().toString()),i.disabled=!!h.config.minDate&&h.config.minDate.getFullYear()===h.config.maxDate.getFullYear());var o=d("div","flatpickr-current-month");return o.appendChild(e),o.appendChild(a),n.appendChild(o),t.appendChild(n),{container:t,yearElement:i,monthElement:e}}function q(){s(h.monthNav),h.monthNav.appendChild(h.prevMonthNav),h.config.showMonths&&(h.yearElements=[],h.monthElements=[]);for(var e=h.config.showMonths;e--;){var t=U();h.yearElements.push(t.yearElement),h.monthElements.push(t.monthElement),h.monthNav.appendChild(t.container)}h.monthNav.appendChild(h.nextMonthNav)}function $(){h.weekdayContainer?s(h.weekdayContainer):h.weekdayContainer=d("div","flatpickr-weekdays");for(var e=h.config.showMonths;e--;){var t=d("div","flatpickr-weekdaycontainer");h.weekdayContainer.appendChild(t)}return z(),h.weekdayContainer}function z(){var e=h.l10n.firstDayOfWeek,t=h.l10n.weekdays.shorthand.slice();e>0&&e\n "+t.join("")+"\n \n "}function G(e,t){void 0===t&&(t=!0);var n=t?e:e-h.currentMonth;n<0&&!0===h._hidePrevMonthArrow||n>0&&!0===h._hideNextMonthArrow||(h.currentMonth+=n,(h.currentMonth<0||h.currentMonth>11)&&(h.currentYear+=h.currentMonth>11?1:-1,h.currentMonth=(h.currentMonth+12)%12,ge("onYearChange"),K()),J(),ge("onMonthChange"),ve())}function V(e){return!(!h.config.appendTo||!h.config.appendTo.contains(e))||h.calendarContainer.contains(e)}function Z(e){if(h.isOpen&&!h.config.inline){var t="function"==typeof(r=e).composedPath?r.composedPath()[0]:r.target,n=V(t),a=t===h.input||t===h.altInput||h.element.contains(t)||e.path&&e.path.indexOf&&(~e.path.indexOf(h.input)||~e.path.indexOf(h.altInput)),i="blur"===e.type?a&&e.relatedTarget&&!V(e.relatedTarget):!a&&!n&&!V(e.relatedTarget),o=!h.config.ignoredFocusElements.some(function(e){return e.contains(t)});i&&o&&(h.close(),"range"===h.config.mode&&1===h.selectedDates.length&&(h.clear(!1),h.redraw()))}var r}function Q(e){if(!(!e||h.config.minDate&&eh.config.maxDate.getFullYear())){var t=e,n=h.currentYear!==t;h.currentYear=t||h.currentYear,h.config.maxDate&&h.currentYear===h.config.maxDate.getFullYear()?h.currentMonth=Math.min(h.config.maxDate.getMonth(),h.currentMonth):h.config.minDate&&h.currentYear===h.config.minDate.getFullYear()&&(h.currentMonth=Math.max(h.config.minDate.getMonth(),h.currentMonth)),n&&(h.redraw(),ge("onYearChange"),K())}}function X(e,t){void 0===t&&(t=!0);var n=h.parseDate(e,void 0,t);if(h.config.minDate&&n&&w(n,h.config.minDate,void 0!==t?t:!h.minDateHasTime)<0||h.config.maxDate&&n&&w(n,h.config.maxDate,void 0!==t?t:!h.maxDateHasTime)>0)return!1;if(0===h.config.enable.length&&0===h.config.disable.length)return!0;if(void 0===n)return!1;for(var a=h.config.enable.length>0,i=a?h.config.enable:h.config.disable,o=0,r=void 0;o=r.from.getTime()&&n.getTime()<=r.to.getTime())return a}return!a}function ee(e){return void 0!==h.daysContainer&&(-1===e.className.indexOf("hidden")&&h.daysContainer.contains(e))}function te(e){var t=e.target===h._input,n=h.config.allowInput,a=h.isOpen&&(!n||!t),i=h.config.inline&&t&&!n;if(13===e.keyCode&&t){if(n)return h.setDate(h._input.value,!0,e.target===h.altInput?h.config.altFormat:h.config.dateFormat),e.target.blur();h.open()}else if(V(e.target)||a||i){var o=!!h.timeContainer&&h.timeContainer.contains(e.target);switch(e.keyCode){case 13:o?(e.preventDefault(),T(),de()):se(e);break;case 27:e.preventDefault(),de();break;case 8:case 46:t&&!h.config.allowInput&&(e.preventDefault(),h.clear());break;case 37:case 39:if(o||t)h.hourElement&&h.hourElement.focus();else if(e.preventDefault(),void 0!==h.daysContainer&&(!1===n||document.activeElement&&ee(document.activeElement))){var r=39===e.keyCode?1:-1;e.ctrlKey?(e.stopPropagation(),G(r),R(W(1),0)):R(void 0,r)}break;case 38:case 40:e.preventDefault();var l=40===e.keyCode?1:-1;h.daysContainer&&void 0!==e.target.$i||e.target===h.input?e.ctrlKey?(e.stopPropagation(),Q(h.currentYear-l),R(W(1),0)):o||R(void 0,7*l):e.target===h.currentYearElement?Q(h.currentYear-l):h.config.enableTime&&(!o&&h.hourElement&&h.hourElement.focus(),T(e),h._debouncedChange());break;case 9:if(o){var c=[h.hourElement,h.minuteElement,h.secondElement,h.amPM].concat(h.pluginElements).filter(function(e){return e}),d=c.indexOf(e.target);if(-1!==d){var s=c[d+(e.shiftKey?-1:1)];e.preventDefault(),(s||h._input).focus()}}else!h.config.noCalendar&&h.daysContainer&&h.daysContainer.contains(e.target)&&e.shiftKey&&(e.preventDefault(),h._input.focus())}}if(void 0!==h.amPM&&e.target===h.amPM)switch(e.key){case h.l10n.amPM[0].charAt(0):case h.l10n.amPM[0].charAt(0).toLowerCase():h.amPM.textContent=h.l10n.amPM[0],k(),we();break;case h.l10n.amPM[1].charAt(0):case h.l10n.amPM[1].charAt(0).toLowerCase():h.amPM.textContent=h.l10n.amPM[1],k(),we()}(t||V(e.target))&&ge("onKeyDown",e)}function ne(e){if(1===h.selectedDates.length&&(!e||e.classList.contains("flatpickr-day")&&!e.classList.contains("flatpickr-disabled"))){for(var t=e?e.dateObj.getTime():h.days.firstElementChild.dateObj.getTime(),n=h.parseDate(h.selectedDates[0],void 0,!0).getTime(),a=Math.min(t,h.selectedDates[0].getTime()),i=Math.max(t,h.selectedDates[0].getTime()),o=!1,r=0,l=0,c=a;ca&&cr)?r=c:c>n&&(!l||c0&&d0&&d>l;return u?(c.classList.add("notAllowed"),["inRange","startRange","endRange"].forEach(function(e){c.classList.remove(e)}),"continue"):o&&!u?"continue":(["startRange","inRange","endRange","notAllowed"].forEach(function(e){c.classList.remove(e)}),void(void 0!==e&&(e.classList.add(t<=h.selectedDates[0].getTime()?"startRange":"endRange"),nt&&d===n&&c.classList.add("endRange"),d>=r&&(0===l||d<=l)&&b(d,n,t)&&c.classList.add("inRange"))))},f=0,m=s.children.length;f0||n.getMinutes()>0||n.getSeconds()>0),h.selectedDates&&(h.selectedDates=h.selectedDates.filter(function(e){return X(e)}),h.selectedDates.length||"min"!==e||I(n),we()),h.daysContainer&&(ce(),void 0!==n?h.currentYearElement[e]=n.getFullYear().toString():h.currentYearElement.removeAttribute(e),h.currentYearElement.disabled=!!a&&void 0!==n&&a.getFullYear()===n.getFullYear())}}function re(){"object"!=typeof h.config.locale&&void 0===E.l10ns[h.config.locale]&&h.config.errorHandler(new Error("flatpickr: invalid locale "+h.config.locale)),h.l10n=e({},E.l10ns.default,"object"==typeof h.config.locale?h.config.locale:"default"!==h.config.locale?E.l10ns[h.config.locale]:void 0),p.K="("+h.l10n.amPM[0]+"|"+h.l10n.amPM[1]+"|"+h.l10n.amPM[0].toLowerCase()+"|"+h.l10n.amPM[1].toLowerCase()+")",void 0===e({},g,JSON.parse(JSON.stringify(f.dataset||{}))).time_24hr&&void 0===E.defaultConfig.time_24hr&&(h.config.time_24hr=h.l10n.time_24hr),h.formatDate=v(h),h.parseDate=D({config:h.config,l10n:h.l10n})}function le(e){if(void 0!==h.calendarContainer){ge("onPreCalendarPosition");var t=e||h._positionElement,n=Array.prototype.reduce.call(h.calendarContainer.children,function(e,t){return e+t.offsetHeight},0),a=h.calendarContainer.offsetWidth,i=h.config.position.split(" "),o=i[0],r=i.length>1?i[1]:null,l=t.getBoundingClientRect(),d=window.innerHeight-l.bottom,s="above"===o||"below"!==o&&dn,u=window.pageYOffset+l.top+(s?-n-2:t.offsetHeight+2);if(c(h.calendarContainer,"arrowTop",!s),c(h.calendarContainer,"arrowBottom",s),!h.config.inline){var f=window.pageXOffset+l.left-(null!=r&&"center"===r?(a-l.width)/2:0),m=window.document.body.offsetWidth-l.right,g=f+a>window.document.body.offsetWidth,p=m+a>window.document.body.offsetWidth;if(c(h.calendarContainer,"rightMost",g),!h.config.static)if(h.calendarContainer.style.top=u+"px",g)if(p){var v=document.styleSheets[0];if(void 0===v)return;var D=window.document.body.offsetWidth,w=Math.max(0,D/2-a/2),b=v.cssRules.length,C="{left:"+l.left+"px;right:auto;}";c(h.calendarContainer,"rightMost",!1),c(h.calendarContainer,"centerMost",!0),v.insertRule(".flatpickr-calendar.centerMost:before,.flatpickr-calendar.centerMost:after"+C,b),h.calendarContainer.style.left=w+"px",h.calendarContainer.style.right="auto"}else h.calendarContainer.style.left="auto",h.calendarContainer.style.right=m+"px";else h.calendarContainer.style.left=f+"px",h.calendarContainer.style.right="auto"}}}function ce(){h.config.noCalendar||h.isMobile||(ve(),J())}function de(){h._input.focus(),-1!==window.navigator.userAgent.indexOf("MSIE")||void 0!==navigator.msMaxTouchPoints?setTimeout(h.close,0):h.close()}function se(e){e.preventDefault(),e.stopPropagation();var t=function e(t,n){return n(t)?t:t.parentNode?e(t.parentNode,n):void 0}(e.target,function(e){return e.classList&&e.classList.contains("flatpickr-day")&&!e.classList.contains("flatpickr-disabled")&&!e.classList.contains("notAllowed")});if(void 0!==t){var n=t,a=h.latestSelectedDateObj=new Date(n.dateObj.getTime()),i=(a.getMonth()h.currentMonth+h.config.showMonths-1)&&"range"!==h.config.mode;if(h.selectedDateElem=n,"single"===h.config.mode)h.selectedDates=[a];else if("multiple"===h.config.mode){var o=he(a);o?h.selectedDates.splice(parseInt(o),1):h.selectedDates.push(a)}else"range"===h.config.mode&&(2===h.selectedDates.length&&h.clear(!1,!1),h.latestSelectedDateObj=a,h.selectedDates.push(a),0!==w(a,h.selectedDates[0],!0)&&h.selectedDates.sort(function(e,t){return e.getTime()-t.getTime()}));if(k(),i){var r=h.currentYear!==a.getFullYear();h.currentYear=a.getFullYear(),h.currentMonth=a.getMonth(),r&&(ge("onYearChange"),K()),ge("onMonthChange")}if(ve(),J(),we(),h.config.enableTime&&setTimeout(function(){return h.showTimeInput=!0},50),i||"range"===h.config.mode||1!==h.config.showMonths?void 0!==h.selectedDateElem&&void 0===h.hourElement&&h.selectedDateElem&&h.selectedDateElem.focus():L(n),void 0!==h.hourElement&&void 0!==h.hourElement&&h.hourElement.focus(),h.config.closeOnSelect){var l="single"===h.config.mode&&!h.config.enableTime,c="range"===h.config.mode&&2===h.selectedDates.length&&!h.config.enableTime;(l||c)&&de()}Y()}}h.parseDate=D({config:h.config,l10n:h.l10n}),h._handlers=[],h.pluginElements=[],h.loadedPlugins=[],h._bind=F,h._setHoursFromDate=I,h._positionCalendar=le,h.changeMonth=G,h.changeYear=Q,h.clear=function(e,t){void 0===e&&(e=!0);void 0===t&&(t=!0);h.input.value="",void 0!==h.altInput&&(h.altInput.value="");void 0!==h.mobileInput&&(h.mobileInput.value="");h.selectedDates=[],h.latestSelectedDateObj=void 0,!0===t&&(h.currentYear=h._initialDate.getFullYear(),h.currentMonth=h._initialDate.getMonth());h.showTimeInput=!1,!0===h.config.enableTime&&S();h.redraw(),e&&ge("onChange")},h.close=function(){h.isOpen=!1,h.isMobile||(void 0!==h.calendarContainer&&h.calendarContainer.classList.remove("open"),void 0!==h._input&&h._input.classList.remove("active"));ge("onClose")},h._createElement=d,h.destroy=function(){void 0!==h.config&&ge("onDestroy");for(var e=h._handlers.length;e--;){var t=h._handlers[e];t.element.removeEventListener(t.event,t.handler,t.options)}if(h._handlers=[],h.mobileInput)h.mobileInput.parentNode&&h.mobileInput.parentNode.removeChild(h.mobileInput),h.mobileInput=void 0;else if(h.calendarContainer&&h.calendarContainer.parentNode)if(h.config.static&&h.calendarContainer.parentNode){var n=h.calendarContainer.parentNode;if(n.lastChild&&n.removeChild(n.lastChild),n.parentNode){for(;n.firstChild;)n.parentNode.insertBefore(n.firstChild,n);n.parentNode.removeChild(n)}}else h.calendarContainer.parentNode.removeChild(h.calendarContainer);h.altInput&&(h.input.type="text",h.altInput.parentNode&&h.altInput.parentNode.removeChild(h.altInput),delete h.altInput);h.input&&(h.input.type=h.input._type,h.input.classList.remove("flatpickr-input"),h.input.removeAttribute("readonly"),h.input.value="");["_showTimeInput","latestSelectedDateObj","_hideNextMonthArrow","_hidePrevMonthArrow","__hideNextMonthArrow","__hidePrevMonthArrow","isMobile","isOpen","selectedDateElem","minDateHasTime","maxDateHasTime","days","daysContainer","_input","_positionElement","innerContainer","rContainer","monthNav","todayDateElem","calendarContainer","weekdayContainer","prevMonthNav","nextMonthNav","monthsDropdownContainer","currentMonthElement","currentYearElement","navigationCurrentMonth","selectedDateElem","config"].forEach(function(e){try{delete h[e]}catch(e){}})},h.isEnabled=X,h.jumpToDate=A,h.open=function(e,t){void 0===t&&(t=h._positionElement);if(!0===h.isMobile)return e&&(e.preventDefault(),e.target&&e.target.blur()),void 0!==h.mobileInput&&(h.mobileInput.focus(),h.mobileInput.click()),void ge("onOpen");if(h._input.disabled||h.config.inline)return;var n=h.isOpen;h.isOpen=!0,n||(h.calendarContainer.classList.add("open"),h._input.classList.add("active"),ge("onOpen"),le(t));!0===h.config.enableTime&&!0===h.config.noCalendar&&(0===h.selectedDates.length&&ie(),!1!==h.config.allowInput||void 0!==e&&h.timeContainer.contains(e.relatedTarget)||setTimeout(function(){return h.hourElement.select()},50))},h.redraw=ce,h.set=function(e,n){if(null!==e&&"object"==typeof e)for(var a in Object.assign(h.config,e),e)void 0!==ue[a]&&ue[a].forEach(function(e){return e()});else h.config[e]=n,void 0!==ue[e]?ue[e].forEach(function(e){return e()}):t.indexOf(e)>-1&&(h.config[e]=l(n));h.redraw(),we(!1)},h.setDate=function(e,t,n){void 0===t&&(t=!1);void 0===n&&(n=h.config.dateFormat);if(0!==e&&!e||e instanceof Array&&0===e.length)return h.clear(t);fe(e,n),h.showTimeInput=h.selectedDates.length>0,h.latestSelectedDateObj=h.selectedDates[h.selectedDates.length-1],h.redraw(),A(),I(),0===h.selectedDates.length&&h.clear(!1);we(t),t&&ge("onChange")},h.toggle=function(e){if(!0===h.isOpen)return h.close();h.open(e)};var ue={locale:[re,z],showMonths:[q,x,$],minDate:[A],maxDate:[A]};function fe(e,t){var n=[];if(e instanceof Array)n=e.map(function(e){return h.parseDate(e,t)});else if(e instanceof Date||"number"==typeof e)n=[h.parseDate(e,t)];else if("string"==typeof e)switch(h.config.mode){case"single":case"time":n=[h.parseDate(e,t)];break;case"multiple":n=e.split(h.config.conjunction).map(function(e){return h.parseDate(e,t)});break;case"range":n=e.split(h.l10n.rangeSeparator).map(function(e){return h.parseDate(e,t)})}else h.config.errorHandler(new Error("Invalid date supplied: "+JSON.stringify(e)));h.selectedDates=n.filter(function(e){return e instanceof Date&&X(e,!1)}),"range"===h.config.mode&&h.selectedDates.sort(function(e,t){return e.getTime()-t.getTime()})}function me(e){return e.slice().map(function(e){return"string"==typeof e||"number"==typeof e||e instanceof Date?h.parseDate(e,void 0,!0):e&&"object"==typeof e&&e.from&&e.to?{from:h.parseDate(e.from,void 0),to:h.parseDate(e.to,void 0)}:e}).filter(function(e){return e})}function ge(e,t){if(void 0!==h.config){var n=h.config[e];if(void 0!==n&&n.length>0)for(var a=0;n[a]&&a1||"static"===h.config.monthSelectorType?h.monthElements[t].textContent=m(n.getMonth(),h.config.shorthandCurrentMonth,h.l10n)+" ":h.monthsDropdownContainer.value=n.getMonth().toString(),e.value=n.getFullYear().toString()}),h._hidePrevMonthArrow=void 0!==h.config.minDate&&(h.currentYear===h.config.minDate.getFullYear()?h.currentMonth<=h.config.minDate.getMonth():h.currentYearh.config.maxDate.getMonth():h.currentYear>h.config.maxDate.getFullYear()))}function De(e){return h.selectedDates.map(function(t){return h.formatDate(t,e)}).filter(function(e,t,n){return"range"!==h.config.mode||h.config.enableTime||n.indexOf(e)===t}).join("range"!==h.config.mode?h.config.conjunction:h.l10n.rangeSeparator)}function we(e){void 0===e&&(e=!0),void 0!==h.mobileInput&&h.mobileFormatStr&&(h.mobileInput.value=void 0!==h.latestSelectedDateObj?h.formatDate(h.latestSelectedDateObj,h.mobileFormatStr):""),h.input.value=De(h.config.dateFormat),void 0!==h.altInput&&(h.altInput.value=De(h.config.altFormat)),!1!==e&&ge("onValueUpdate")}function be(e){var t=h.prevMonthNav.contains(e.target),n=h.nextMonthNav.contains(e.target);t||n?G(t?-1:1):h.yearElements.indexOf(e.target)>=0?e.target.select():e.target.classList.contains("arrowUp")?h.changeYear(h.currentYear+1):e.target.classList.contains("arrowDown")&&h.changeYear(h.currentYear-1)}return function(){h.element=h.input=f,h.isOpen=!1,function(){var a=["wrap","weekNumbers","allowInput","clickOpens","time_24hr","enableTime","noCalendar","altInput","shorthandCurrentMonth","inline","static","enableSeconds","disableMobile"],i=e({},g,JSON.parse(JSON.stringify(f.dataset||{}))),o={};h.config.parseDate=i.parseDate,h.config.formatDate=i.formatDate,Object.defineProperty(h.config,"enable",{get:function(){return h.config._enable},set:function(e){h.config._enable=me(e)}}),Object.defineProperty(h.config,"disable",{get:function(){return h.config._disable},set:function(e){h.config._disable=me(e)}});var r="time"===i.mode;if(!i.dateFormat&&(i.enableTime||r)){var c=E.defaultConfig.dateFormat||n.dateFormat;o.dateFormat=i.noCalendar||r?"H:i"+(i.enableSeconds?":S":""):c+" H:i"+(i.enableSeconds?":S":"")}if(i.altInput&&(i.enableTime||r)&&!i.altFormat){var d=E.defaultConfig.altFormat||n.altFormat;o.altFormat=i.noCalendar||r?"h:i"+(i.enableSeconds?":S K":" K"):d+" h:i"+(i.enableSeconds?":S":"")+" K"}i.altInputClass||(h.config.altInputClass=h.input.className+" "+h.config.altInputClass),Object.defineProperty(h.config,"minDate",{get:function(){return h.config._minDate},set:oe("min")}),Object.defineProperty(h.config,"maxDate",{get:function(){return h.config._maxDate},set:oe("max")});var s=function(e){return function(t){h.config["min"===e?"_minTime":"_maxTime"]=h.parseDate(t,"H:i")}};Object.defineProperty(h.config,"minTime",{get:function(){return h.config._minTime},set:s("min")}),Object.defineProperty(h.config,"maxTime",{get:function(){return h.config._maxTime},set:s("max")}),"time"===i.mode&&(h.config.noCalendar=!0,h.config.enableTime=!0),Object.assign(h.config,o,i);for(var u=0;u-1?h.config[p]=l(m[p]).map(y).concat(h.config[p]):void 0===i[p]&&(h.config[p]=m[p])}ge("onParseConfig")}(),re(),h.input=h.config.wrap?f.querySelector("[data-input]"):f,h.input?(h.input._type=h.input.type,h.input.type="text",h.input.classList.add("flatpickr-input"),h._input=h.input,h.config.altInput&&(h.altInput=d(h.input.nodeName,h.config.altInputClass),h._input=h.altInput,h.altInput.placeholder=h.input.placeholder,h.altInput.disabled=h.input.disabled,h.altInput.required=h.input.required,h.altInput.tabIndex=h.input.tabIndex,h.altInput.type="text",h.input.setAttribute("type","hidden"),!h.config.static&&h.input.parentNode&&h.input.parentNode.insertBefore(h.altInput,h.input.nextSibling)),h.config.allowInput||h._input.setAttribute("readonly","readonly"),h._positionElement=h.config.positionElement||h._input):h.config.errorHandler(new Error("Invalid input element specified")),function(){h.selectedDates=[],h.now=h.parseDate(h.config.now)||new Date;var e=h.config.defaultDate||("INPUT"!==h.input.nodeName&&"TEXTAREA"!==h.input.nodeName||!h.input.placeholder||h.input.value!==h.input.placeholder?h.input.value:null);e&&fe(e,h.config.dateFormat),h._initialDate=h.selectedDates.length>0?h.selectedDates[0]:h.config.minDate&&h.config.minDate.getTime()>h.now.getTime()?h.config.minDate:h.config.maxDate&&h.config.maxDate.getTime()0&&(h.latestSelectedDateObj=h.selectedDates[0]),void 0!==h.config.minTime&&(h.config.minTime=h.parseDate(h.config.minTime,"H:i")),void 0!==h.config.maxTime&&(h.config.maxTime=h.parseDate(h.config.maxTime,"H:i")),h.minDateHasTime=!!h.config.minDate&&(h.config.minDate.getHours()>0||h.config.minDate.getMinutes()>0||h.config.minDate.getSeconds()>0),h.maxDateHasTime=!!h.config.maxDate&&(h.config.maxDate.getHours()>0||h.config.maxDate.getMinutes()>0||h.config.maxDate.getSeconds()>0),Object.defineProperty(h,"showTimeInput",{get:function(){return h._showTimeInput},set:function(e){h._showTimeInput=e,h.calendarContainer&&c(h.calendarContainer,"showTimeInput",e),h.isOpen&&le()}})}(),h.utils={getDaysInMonth:function(e,t){return void 0===e&&(e=h.currentMonth),void 0===t&&(t=h.currentYear),1===e&&(t%4==0&&t%100!=0||t%400==0)?29:h.l10n.daysInMonth[e]}},h.isMobile||function(){var e=window.document.createDocumentFragment();if(h.calendarContainer=d("div","flatpickr-calendar"),h.calendarContainer.tabIndex=-1,!h.config.noCalendar){if(e.appendChild((h.monthNav=d("div","flatpickr-months"),h.yearElements=[],h.monthElements=[],h.prevMonthNav=d("span","flatpickr-prev-month"),h.prevMonthNav.innerHTML=h.config.prevArrow,h.nextMonthNav=d("span","flatpickr-next-month"),h.nextMonthNav.innerHTML=h.config.nextArrow,q(),Object.defineProperty(h,"_hidePrevMonthArrow",{get:function(){return h.__hidePrevMonthArrow},set:function(e){h.__hidePrevMonthArrow!==e&&(c(h.prevMonthNav,"flatpickr-disabled",e),h.__hidePrevMonthArrow=e)}}),Object.defineProperty(h,"_hideNextMonthArrow",{get:function(){return h.__hideNextMonthArrow},set:function(e){h.__hideNextMonthArrow!==e&&(c(h.nextMonthNav,"flatpickr-disabled",e),h.__hideNextMonthArrow=e)}}),h.currentYearElement=h.yearElements[0],ve(),h.monthNav)),h.innerContainer=d("div","flatpickr-innerContainer"),h.config.weekNumbers){var t=function(){h.calendarContainer.classList.add("hasWeeks");var e=d("div","flatpickr-weekwrapper");e.appendChild(d("span","flatpickr-weekday",h.l10n.weekAbbreviation));var t=d("div","flatpickr-weeks");return e.appendChild(t),{weekWrapper:e,weekNumbers:t}}(),n=t.weekWrapper,a=t.weekNumbers;h.innerContainer.appendChild(n),h.weekNumbers=a,h.weekWrapper=n}h.rContainer=d("div","flatpickr-rContainer"),h.rContainer.appendChild($()),h.daysContainer||(h.daysContainer=d("div","flatpickr-days"),h.daysContainer.tabIndex=-1),J(),h.rContainer.appendChild(h.daysContainer),h.innerContainer.appendChild(h.rContainer),e.appendChild(h.innerContainer)}h.config.enableTime&&e.appendChild(function(){h.calendarContainer.classList.add("hasTime"),h.config.noCalendar&&h.calendarContainer.classList.add("noCalendar"),h.timeContainer=d("div","flatpickr-time"),h.timeContainer.tabIndex=-1;var e=d("span","flatpickr-time-separator",":"),t=u("flatpickr-hour",{"aria-label":h.l10n.hourAriaLabel});h.hourElement=t.getElementsByTagName("input")[0];var n=u("flatpickr-minute",{"aria-label":h.l10n.minuteAriaLabel});if(h.minuteElement=n.getElementsByTagName("input")[0],h.hourElement.tabIndex=h.minuteElement.tabIndex=-1,h.hourElement.value=i(h.latestSelectedDateObj?h.latestSelectedDateObj.getHours():h.config.time_24hr?h.config.defaultHour:function(e){switch(e%24){case 0:case 12:return 12;default:return e%12}}(h.config.defaultHour)),h.minuteElement.value=i(h.latestSelectedDateObj?h.latestSelectedDateObj.getMinutes():h.config.defaultMinute),h.hourElement.setAttribute("step",h.config.hourIncrement.toString()),h.minuteElement.setAttribute("step",h.config.minuteIncrement.toString()),h.hourElement.setAttribute("min",h.config.time_24hr?"0":"1"),h.hourElement.setAttribute("max",h.config.time_24hr?"23":"12"),h.minuteElement.setAttribute("min","0"),h.minuteElement.setAttribute("max","59"),h.timeContainer.appendChild(t),h.timeContainer.appendChild(e),h.timeContainer.appendChild(n),h.config.time_24hr&&h.timeContainer.classList.add("time24hr"),h.config.enableSeconds){h.timeContainer.classList.add("hasSeconds");var a=u("flatpickr-second");h.secondElement=a.getElementsByTagName("input")[0],h.secondElement.value=i(h.latestSelectedDateObj?h.latestSelectedDateObj.getSeconds():h.config.defaultSeconds),h.secondElement.setAttribute("step",h.minuteElement.getAttribute("step")),h.secondElement.setAttribute("min","0"),h.secondElement.setAttribute("max","59"),h.timeContainer.appendChild(d("span","flatpickr-time-separator",":")),h.timeContainer.appendChild(a)}return h.config.time_24hr||(h.amPM=d("span","flatpickr-am-pm",h.l10n.amPM[o((h.latestSelectedDateObj?h.hourElement.value:h.config.defaultHour)>11)]),h.amPM.title=h.l10n.toggleTitle,h.amPM.tabIndex=-1,h.timeContainer.appendChild(h.amPM)),h.timeContainer}()),c(h.calendarContainer,"rangeMode","range"===h.config.mode),c(h.calendarContainer,"animate",!0===h.config.animate),c(h.calendarContainer,"multiMonth",h.config.showMonths>1),h.calendarContainer.appendChild(e);var r=void 0!==h.config.appendTo&&void 0!==h.config.appendTo.nodeType;if((h.config.inline||h.config.static)&&(h.calendarContainer.classList.add(h.config.inline?"inline":"static"),h.config.inline&&(!r&&h.element.parentNode?h.element.parentNode.insertBefore(h.calendarContainer,h._input.nextSibling):void 0!==h.config.appendTo&&h.config.appendTo.appendChild(h.calendarContainer)),h.config.static)){var l=d("div","flatpickr-wrapper");h.element.parentNode&&h.element.parentNode.insertBefore(l,h.element),l.appendChild(h.element),h.altInput&&l.appendChild(h.altInput),l.appendChild(h.calendarContainer)}h.config.static||h.config.inline||(void 0!==h.config.appendTo?h.config.appendTo:window.document.body).appendChild(h.calendarContainer)}(),function(){if(h.config.wrap&&["open","close","toggle","clear"].forEach(function(e){Array.prototype.forEach.call(h.element.querySelectorAll("[data-"+e+"]"),function(t){return F(t,"click",h[e])})}),h.isMobile)!function(){var e=h.config.enableTime?h.config.noCalendar?"time":"datetime-local":"date";h.mobileInput=d("input",h.input.className+" flatpickr-mobile"),h.mobileInput.step=h.input.getAttribute("step")||"any",h.mobileInput.tabIndex=1,h.mobileInput.type=e,h.mobileInput.disabled=h.input.disabled,h.mobileInput.required=h.input.required,h.mobileInput.placeholder=h.input.placeholder,h.mobileFormatStr="datetime-local"===e?"Y-m-d\\TH:i:S":"date"===e?"Y-m-d":"H:i:S",h.selectedDates.length>0&&(h.mobileInput.defaultValue=h.mobileInput.value=h.formatDate(h.selectedDates[0],h.mobileFormatStr)),h.config.minDate&&(h.mobileInput.min=h.formatDate(h.config.minDate,"Y-m-d")),h.config.maxDate&&(h.mobileInput.max=h.formatDate(h.config.maxDate,"Y-m-d")),h.input.type="hidden",void 0!==h.altInput&&(h.altInput.type="hidden");try{h.input.parentNode&&h.input.parentNode.insertBefore(h.mobileInput,h.input.nextSibling)}catch(e){}F(h.mobileInput,"change",function(e){h.setDate(e.target.value,!1,h.mobileFormatStr),ge("onChange"),ge("onClose")})}();else{var e=r(ae,50);h._debouncedChange=r(Y,M),h.daysContainer&&!/iPhone|iPad|iPod/i.test(navigator.userAgent)&&F(h.daysContainer,"mouseover",function(e){"range"===h.config.mode&&ne(e.target)}),F(window.document.body,"keydown",te),h.config.inline||h.config.static||F(window,"resize",e),void 0!==window.ontouchstart?F(window.document,"touchstart",Z):F(window.document,"mousedown",N(Z)),F(window.document,"focus",Z,{capture:!0}),!0===h.config.clickOpens&&(F(h._input,"focus",h.open),F(h._input,"mousedown",N(h.open))),void 0!==h.daysContainer&&(F(h.monthNav,"mousedown",N(be)),F(h.monthNav,["keyup","increment"],_),F(h.daysContainer,"mousedown",N(se))),void 0!==h.timeContainer&&void 0!==h.minuteElement&&void 0!==h.hourElement&&(F(h.timeContainer,["increment"],T),F(h.timeContainer,"blur",T,{capture:!0}),F(h.timeContainer,"mousedown",N(P)),F([h.hourElement,h.minuteElement],["focus","click"],function(e){return e.target.select()}),void 0!==h.secondElement&&F(h.secondElement,"focus",function(){return h.secondElement&&h.secondElement.select()}),void 0!==h.amPM&&F(h.amPM,"mousedown",N(function(e){T(e),Y()})))}}(),(h.selectedDates.length||h.config.noCalendar)&&(h.config.enableTime&&I(h.config.noCalendar?h.latestSelectedDateObj||h.config.minDate:void 0),we(!1)),x(),h.showTimeInput=h.selectedDates.length>0||h.config.noCalendar;var a=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);!h.isMobile&&a&&le(),ge("onReady")}(),h}function x(e,t){for(var n=Array.prototype.slice.call(e).filter(function(e){return e instanceof HTMLElement}),a=[],i=0;i 3 && s < 21) - return "th"; - switch (s % 10) { - case 1: - return "st"; - case 2: - return "nd"; - case 3: - return "rd"; - default: - return "th"; - } - }, - rangeSeparator: " to ", - weekAbbreviation: "Wk", - scrollTitle: "Scroll to increment", - toggleTitle: "Click to toggle", - amPM: ["AM", "PM"], - yearAriaLabel: "Year", - hourAriaLabel: "Hour", - minuteAriaLabel: "Minute", - time_24hr: false - }; - - exports.default = english; - exports.english = english; - - Object.defineProperty(exports, '__esModule', { value: true }); - -})); diff --git a/website/appphp/static/vendors/flatpickr/l10n/fr.d.ts b/website/appphp/static/vendors/flatpickr/l10n/fr.d.ts deleted file mode 100644 index 7b51e279..00000000 --- a/website/appphp/static/vendors/flatpickr/l10n/fr.d.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { CustomLocale } from "../types/locale"; -export declare const French: CustomLocale; -declare const _default: { - default?: CustomLocale | undefined; - hr?: CustomLocale | undefined; - th?: CustomLocale | undefined; - tr?: CustomLocale | undefined; - ar?: CustomLocale | undefined; - at?: CustomLocale | undefined; - az?: CustomLocale | undefined; - be?: CustomLocale | undefined; - bg?: CustomLocale | undefined; - bn?: CustomLocale | undefined; - bs?: CustomLocale | undefined; - cat?: CustomLocale | undefined; - cs?: CustomLocale | undefined; - cy?: CustomLocale | undefined; - da?: CustomLocale | undefined; - de?: CustomLocale | undefined; - en?: CustomLocale | undefined; - eo?: CustomLocale | undefined; - es?: CustomLocale | undefined; - et?: CustomLocale | undefined; - fa?: CustomLocale | undefined; - fi?: CustomLocale | undefined; - fo?: CustomLocale | undefined; - fr?: CustomLocale | undefined; - gr?: CustomLocale | undefined; - he?: CustomLocale | undefined; - hi?: CustomLocale | undefined; - hu?: CustomLocale | undefined; - id?: CustomLocale | undefined; - is?: CustomLocale | undefined; - it?: CustomLocale | undefined; - ja?: CustomLocale | undefined; - ka?: CustomLocale | undefined; - ko?: CustomLocale | undefined; - km?: CustomLocale | undefined; - kz?: CustomLocale | undefined; - lt?: CustomLocale | undefined; - lv?: CustomLocale | undefined; - mk?: CustomLocale | undefined; - mn?: CustomLocale | undefined; - ms?: CustomLocale | undefined; - my?: CustomLocale | undefined; - nl?: CustomLocale | undefined; - no?: CustomLocale | undefined; - pa?: CustomLocale | undefined; - pl?: CustomLocale | undefined; - pt?: CustomLocale | undefined; - ro?: CustomLocale | undefined; - ru?: CustomLocale | undefined; - si?: CustomLocale | undefined; - sk?: CustomLocale | undefined; - sl?: CustomLocale | undefined; - sq?: CustomLocale | undefined; - sr?: CustomLocale | undefined; - sv?: CustomLocale | undefined; - uk?: CustomLocale | undefined; - vn?: CustomLocale | undefined; - zh?: CustomLocale | undefined; - zh_tw?: CustomLocale | undefined; -} & { - default: import("../types/locale").Locale; -}; -export default _default; diff --git a/website/appphp/static/vendors/flatpickr/l10n/fr.js b/website/appphp/static/vendors/flatpickr/l10n/fr.js deleted file mode 100644 index 5804a19a..00000000 --- a/website/appphp/static/vendors/flatpickr/l10n/fr.js +++ /dev/null @@ -1,75 +0,0 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : - typeof define === 'function' && define.amd ? define(['exports'], factory) : - (global = global || self, factory(global.fr = {})); -}(this, function (exports) { 'use strict'; - - var fp = typeof window !== "undefined" && window.flatpickr !== undefined - ? window.flatpickr - : { - l10ns: {} - }; - var French = { - firstDayOfWeek: 1, - weekdays: { - shorthand: ["dim", "lun", "mar", "mer", "jeu", "ven", "sam"], - longhand: [ - "dimanche", - "lundi", - "mardi", - "mercredi", - "jeudi", - "vendredi", - "samedi", - ] - }, - months: { - shorthand: [ - "janv", - "févr", - "mars", - "avr", - "mai", - "juin", - "juil", - "août", - "sept", - "oct", - "nov", - "déc", - ], - longhand: [ - "janvier", - "février", - "mars", - "avril", - "mai", - "juin", - "juillet", - "août", - "septembre", - "octobre", - "novembre", - "décembre", - ] - }, - ordinal: function (nth) { - if (nth > 1) - return ""; - return "er"; - }, - rangeSeparator: " au ", - weekAbbreviation: "Sem", - scrollTitle: "Défiler pour augmenter la valeur", - toggleTitle: "Cliquer pour basculer", - time_24hr: true - }; - fp.l10ns.fr = French; - var fr = fp.l10ns; - - exports.French = French; - exports.default = fr; - - Object.defineProperty(exports, '__esModule', { value: true }); - -})); diff --git a/website/appphp/static/vendors/flatpickr/l10n/lu.d.ts b/website/appphp/static/vendors/flatpickr/l10n/lu.d.ts deleted file mode 100644 index 148e6d1b..00000000 --- a/website/appphp/static/vendors/flatpickr/l10n/lu.d.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { CustomLocale } from "../types/locale"; -export declare const Luxembourgish: CustomLocale; -declare const _default: { - default?: CustomLocale | undefined; - hr?: CustomLocale | undefined; - th?: CustomLocale | undefined; - tr?: CustomLocale | undefined; - ar?: CustomLocale | undefined; - at?: CustomLocale | undefined; - az?: CustomLocale | undefined; - be?: CustomLocale | undefined; - bg?: CustomLocale | undefined; - bn?: CustomLocale | undefined; - bs?: CustomLocale | undefined; - cat?: CustomLocale | undefined; - cs?: CustomLocale | undefined; - cy?: CustomLocale | undefined; - da?: CustomLocale | undefined; - de?: CustomLocale | undefined; - en?: CustomLocale | undefined; - eo?: CustomLocale | undefined; - es?: CustomLocale | undefined; - et?: CustomLocale | undefined; - fa?: CustomLocale | undefined; - fi?: CustomLocale | undefined; - fo?: CustomLocale | undefined; - fr?: CustomLocale | undefined; - gr?: CustomLocale | undefined; - he?: CustomLocale | undefined; - hi?: CustomLocale | undefined; - hu?: CustomLocale | undefined; - id?: CustomLocale | undefined; - is?: CustomLocale | undefined; - it?: CustomLocale | undefined; - ja?: CustomLocale | undefined; - ka?: CustomLocale | undefined; - ko?: CustomLocale | undefined; - km?: CustomLocale | undefined; - kz?: CustomLocale | undefined; - lt?: CustomLocale | undefined; - lv?: CustomLocale | undefined; - lu?: CustomLocale | undefined; - mk?: CustomLocale | undefined; - mn?: CustomLocale | undefined; - ms?: CustomLocale | undefined; - my?: CustomLocale | undefined; - nl?: CustomLocale | undefined; - no?: CustomLocale | undefined; - pa?: CustomLocale | undefined; - pl?: CustomLocale | undefined; - pt?: CustomLocale | undefined; - ro?: CustomLocale | undefined; - ru?: CustomLocale | undefined; - si?: CustomLocale | undefined; - sk?: CustomLocale | undefined; - sl?: CustomLocale | undefined; - sq?: CustomLocale | undefined; - sr?: CustomLocale | undefined; - sv?: CustomLocale | undefined; - uk?: CustomLocale | undefined; - vn?: CustomLocale | undefined; - zh?: CustomLocale | undefined; - zh_tw?: CustomLocale | undefined; -} & { - default: import("../types/locale").Locale; -}; -export default _default; diff --git a/website/appphp/static/vendors/flatpickr/l10n/lu.js b/website/appphp/static/vendors/flatpickr/l10n/lu.js deleted file mode 100644 index c366ea8d..00000000 --- a/website/appphp/static/vendors/flatpickr/l10n/lu.js +++ /dev/null @@ -1,71 +0,0 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : - typeof define === 'function' && define.amd ? define(['exports'], factory) : - (global = global || self, factory(global.lu = {})); -}(this, function (exports) { 'use strict'; - - var fp = typeof window !== "undefined" && window.flatpickr !== undefined - ? window.flatpickr - : { - l10ns: {} - }; - var Luxembourgish = { - firstDayOfWeek: 1, - weekdays: { - shorthand: ["So", "Me", "De", "Me", "Do", "Fr", "Sa"], - longhand: [ - "Sonndeg", - "Méindeg", - "Dënsdeg", - "Mëttwoch", - "Donneschdeg", - "Freideg", - "Samsdeg", - ] - }, - months: { - shorthand: [ - "Jan", - "Feb", - "Mär", - "Abr", - "Mee", - "Jun", - "Jul", - "Aug", - "Sep", - "Okt", - "Nov", - "Dez", - ], - longhand: [ - "Januar", - "Februar", - "März", - "Abrëll", - "Mee", - "Juni", - "Juli", - "August", - "September", - "Oktober", - "November", - "Dezember", - ] - }, - - weekAbbreviation: "KW", - rangeSeparator: " bis ", - scrollTitle: "fir ze ännerne scrollen", - toggleTitle: "Zum Ëmschalten klicken", - time_24hr: true - }; - fp.l10ns.lu = Luxembourgish; - var lu = fp.l10ns; - - exports.Luxembourgish = Luxembourgish; - exports.default = lu; - - Object.defineProperty(exports, '__esModule', { value: true }); - -})); diff --git a/website/appphp/static/vendors/flatpickr/plugins/confirmDate/confirmDate.css b/website/appphp/static/vendors/flatpickr/plugins/confirmDate/confirmDate.css deleted file mode 100644 index 9508ea94..00000000 --- a/website/appphp/static/vendors/flatpickr/plugins/confirmDate/confirmDate.css +++ /dev/null @@ -1,24 +0,0 @@ -.flatpickr-confirm { - height: 40px; - max-height: 0px; - visibility: hidden; - display: flex; - justify-content: center; - align-items: center; - cursor: pointer; - background: rgba(0,0,0,0.06) -} - -.flatpickr-confirm svg path { - fill: inherit; -} - -.flatpickr-confirm.darkTheme { - color: white; - fill: white; -} - -.flatpickr-confirm.visible { - max-height: 40px; - visibility: visible -} diff --git a/website/appphp/static/vendors/flatpickr/plugins/confirmDate/confirmDate.d.ts b/website/appphp/static/vendors/flatpickr/plugins/confirmDate/confirmDate.d.ts deleted file mode 100644 index a4ddf39c..00000000 --- a/website/appphp/static/vendors/flatpickr/plugins/confirmDate/confirmDate.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Plugin } from "../../types/options"; -export interface Config { - confirmIcon?: string; - confirmText?: string; - showAlways?: boolean; - theme?: string; -} -declare function confirmDatePlugin(pluginConfig: Config): Plugin; -export default confirmDatePlugin; diff --git a/website/appphp/static/vendors/flatpickr/plugins/confirmDate/confirmDate.js b/website/appphp/static/vendors/flatpickr/plugins/confirmDate/confirmDate.js deleted file mode 100644 index c1fc0acd..00000000 --- a/website/appphp/static/vendors/flatpickr/plugins/confirmDate/confirmDate.js +++ /dev/null @@ -1,84 +0,0 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global = global || self, global.confirmDatePlugin = factory()); -}(this, function () { 'use strict'; - - /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. All rights reserved. - Licensed under the Apache License, Version 2.0 (the "License"); you may not use - this file except in compliance with the License. You may obtain a copy of the - License at http://www.apache.org/licenses/LICENSE-2.0 - - THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED - WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, - MERCHANTABLITY OR NON-INFRINGEMENT. - - See the Apache Version 2.0 License for specific language governing permissions - and limitations under the License. - ***************************************************************************** */ - - 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 defaultConfig = { - confirmIcon: " ", - confirmText: "OK ", - showAlways: false, - theme: "light" - }; - function confirmDatePlugin(pluginConfig) { - var config = __assign({}, defaultConfig, pluginConfig); - var confirmContainer; - var confirmButtonCSSClass = "flatpickr-confirm"; - return function (fp) { - if (fp.config.noCalendar || fp.isMobile) - return {}; - return __assign({ onKeyDown: function (_, __, ___, e) { - if (fp.config.enableTime && e.key === "Tab" && e.target === fp.amPM) { - e.preventDefault(); - confirmContainer.focus(); - } - else if (e.key === "Enter" && e.target === confirmContainer) - fp.close(); - }, - onReady: function () { - confirmContainer = fp._createElement("div", confirmButtonCSSClass + " " + (config.showAlways ? "visible" : "") + " " + config.theme + "Theme", config.confirmText); - confirmContainer.tabIndex = -1; - confirmContainer.innerHTML += config.confirmIcon; - confirmContainer.addEventListener("click", fp.close); - fp.calendarContainer.appendChild(confirmContainer); - fp.loadedPlugins.push("confirmDate"); - } }, (!config.showAlways - ? { - onChange: function (_, dateStr) { - var showCondition = fp.config.enableTime || - fp.config.mode === "multiple" || - fp.loadedPlugins.indexOf("monthSelect") !== -1; - var localConfirmContainer = fp.calendarContainer.querySelector("." + confirmButtonCSSClass); - if (!localConfirmContainer) - return; - if (dateStr && - !fp.config.inline && - showCondition && - localConfirmContainer) - return localConfirmContainer.classList.add("visible"); - localConfirmContainer.classList.remove("visible"); - } - } - : {})); - }; - } - - return confirmDatePlugin; - -})); diff --git a/website/appphp/static/vendors/flatpickr/plugins/labelPlugin/labelPlugin.d.ts b/website/appphp/static/vendors/flatpickr/plugins/labelPlugin/labelPlugin.d.ts deleted file mode 100644 index 1a9cbceb..00000000 --- a/website/appphp/static/vendors/flatpickr/plugins/labelPlugin/labelPlugin.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Plugin } from "../../types/options"; -declare function labelPlugin(): Plugin; -export default labelPlugin; diff --git a/website/appphp/static/vendors/flatpickr/plugins/labelPlugin/labelPlugin.js b/website/appphp/static/vendors/flatpickr/plugins/labelPlugin/labelPlugin.js deleted file mode 100644 index ddad2bc1..00000000 --- a/website/appphp/static/vendors/flatpickr/plugins/labelPlugin/labelPlugin.js +++ /dev/null @@ -1,31 +0,0 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global = global || self, global.labelPlugin = factory()); -}(this, function () { 'use strict'; - - function labelPlugin() { - return function (fp) { - return { - onReady: function () { - var id = fp.input.id; - if (!id) { - return; - } - if (fp.mobileInput) { - fp.input.removeAttribute("id"); - fp.mobileInput.id = id; - } - else if (fp.altInput) { - fp.input.removeAttribute("id"); - fp.altInput.id = id; - } - fp.loadedPlugins.push("labelPlugin"); - } - }; - }; - } - - return labelPlugin; - -})); diff --git a/website/appphp/static/vendors/flatpickr/plugins/minMaxTimePlugin.d.ts b/website/appphp/static/vendors/flatpickr/plugins/minMaxTimePlugin.d.ts deleted file mode 100644 index 4fe2e5c1..00000000 --- a/website/appphp/static/vendors/flatpickr/plugins/minMaxTimePlugin.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Plugin } from "../types/options"; -export interface MinMaxTime { - minTime?: string; - maxTime?: string; -} -export interface Config { - table?: Record; - getTimeLimits?: (date: Date) => MinMaxTime; - tableDateFormat?: string; -} -export interface State { - formatDate: (date: Date, f: string) => string; - tableDateFormat: string; - defaults: MinMaxTime; -} -declare function minMaxTimePlugin(config?: Config): Plugin; -export default minMaxTimePlugin; diff --git a/website/appphp/static/vendors/flatpickr/plugins/minMaxTimePlugin.js b/website/appphp/static/vendors/flatpickr/plugins/minMaxTimePlugin.js deleted file mode 100644 index cecada96..00000000 --- a/website/appphp/static/vendors/flatpickr/plugins/minMaxTimePlugin.js +++ /dev/null @@ -1,326 +0,0 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global = global || self, global.minMaxTimePlugin = factory()); -}(this, function () { 'use strict'; - - var pad = function (number) { return ("0" + number).slice(-2); }; - var int = function (bool) { return (bool === true ? 1 : 0); }; - - var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? "shorthand" : "longhand"][monthNumber]; }; - var formats = { - // get the date in UTC - Z: function (date) { return date.toISOString(); }, - // weekday name, short, e.g. Thu - D: function (date, locale, options) { - return locale.weekdays.shorthand[formats.w(date, locale, options)]; - }, - // full month name e.g. January - F: function (date, locale, options) { - return monthToStr(formats.n(date, locale, options) - 1, false, locale); - }, - // padded hour 1-12 - G: function (date, locale, options) { - return pad(formats.h(date, locale, options)); - }, - // hours with leading zero e.g. 03 - H: function (date) { return pad(date.getHours()); }, - // day (1-30) with ordinal suffix e.g. 1st, 2nd - J: function (date, locale) { - return locale.ordinal !== undefined - ? date.getDate() + locale.ordinal(date.getDate()) - : date.getDate(); - }, - // AM/PM - K: function (date, locale) { return locale.amPM[int(date.getHours() > 11)]; }, - // shorthand month e.g. Jan, Sep, Oct, etc - M: function (date, locale) { - return monthToStr(date.getMonth(), true, locale); - }, - // seconds 00-59 - S: function (date) { return pad(date.getSeconds()); }, - // unix timestamp - U: function (date) { return date.getTime() / 1000; }, - W: function (date, _, options) { - return options.getWeek(date); - }, - // full year e.g. 2016 - Y: function (date) { return date.getFullYear(); }, - // day in month, padded (01-30) - d: function (date) { return pad(date.getDate()); }, - // hour from 1-12 (am/pm) - h: function (date) { return (date.getHours() % 12 ? date.getHours() % 12 : 12); }, - // minutes, padded with leading zero e.g. 09 - i: function (date) { return pad(date.getMinutes()); }, - // day in month (1-30) - j: function (date) { return date.getDate(); }, - // weekday name, full, e.g. Thursday - l: function (date, locale) { - return locale.weekdays.longhand[date.getDay()]; - }, - // padded month number (01-12) - m: function (date) { return pad(date.getMonth() + 1); }, - // the month number (1-12) - n: function (date) { return date.getMonth() + 1; }, - // seconds 0-59 - s: function (date) { return date.getSeconds(); }, - // Unix Milliseconds - u: function (date) { return date.getTime(); }, - // number of the day of the week - w: function (date) { return date.getDay(); }, - // last two digits of year e.g. 16 for 2016 - y: function (date) { return String(date.getFullYear()).substring(2); } - }; - - var defaults = { - _disable: [], - _enable: [], - allowInput: false, - altFormat: "F j, Y", - altInput: false, - altInputClass: "input", - animate: typeof window === "object" && - window.navigator.userAgent.indexOf("MSIE") === -1, - ariaDateFormat: "F j, Y", - clickOpens: true, - closeOnSelect: true, - conjunction: ", ", - dateFormat: "Y-m-d", - defaultHour: 12, - defaultMinute: 0, - defaultSeconds: 0, - disable: [], - disableMobile: false, - enable: [], - enableSeconds: false, - enableTime: false, - errorHandler: function (err) { - return typeof console !== "undefined" && console.warn(err); - }, - getWeek: function (givenDate) { - var date = new Date(givenDate.getTime()); - date.setHours(0, 0, 0, 0); - // Thursday in current week decides the year. - date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7)); - // January 4 is always in week 1. - var week1 = new Date(date.getFullYear(), 0, 4); - // Adjust to Thursday in week 1 and count number of weeks from date to week1. - return (1 + - Math.round(((date.getTime() - week1.getTime()) / 86400000 - - 3 + - ((week1.getDay() + 6) % 7)) / - 7)); - }, - hourIncrement: 1, - ignoredFocusElements: [], - inline: false, - locale: "default", - minuteIncrement: 5, - mode: "single", - monthSelectorType: "dropdown", - nextArrow: "", - noCalendar: false, - now: new Date(), - onChange: [], - onClose: [], - onDayCreate: [], - onDestroy: [], - onKeyDown: [], - onMonthChange: [], - onOpen: [], - onParseConfig: [], - onReady: [], - onValueUpdate: [], - onYearChange: [], - onPreCalendarPosition: [], - plugins: [], - position: "auto", - positionElement: undefined, - prevArrow: "", - shorthandCurrentMonth: false, - showMonths: 1, - static: false, - time_24hr: false, - weekNumbers: false, - wrap: false - }; - - var english = { - weekdays: { - shorthand: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], - longhand: [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday", - ] - }, - months: { - shorthand: [ - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec", - ], - longhand: [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December", - ] - }, - daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], - firstDayOfWeek: 0, - ordinal: function (nth) { - var s = nth % 100; - if (s > 3 && s < 21) - return "th"; - switch (s % 10) { - case 1: - return "st"; - case 2: - return "nd"; - case 3: - return "rd"; - default: - return "th"; - } - }, - rangeSeparator: " to ", - weekAbbreviation: "Wk", - scrollTitle: "Scroll to increment", - toggleTitle: "Click to toggle", - amPM: ["AM", "PM"], - yearAriaLabel: "Year", - hourAriaLabel: "Hour", - minuteAriaLabel: "Minute", - time_24hr: false - }; - - var createDateFormatter = function (_a) { - var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c; - return function (dateObj, frmt, overrideLocale) { - var locale = overrideLocale || l10n; - if (config.formatDate !== undefined) { - return config.formatDate(dateObj, frmt, locale); - } - return frmt - .split("") - .map(function (c, i, arr) { - return formats[c] && arr[i - 1] !== "\\" - ? formats[c](dateObj, locale, config) - : c !== "\\" - ? c - : ""; - }) - .join(""); - }; - }; - /** - * Compute the difference in dates, measured in ms - */ - function compareDates(date1, date2, timeless) { - if (timeless === void 0) { timeless = true; } - if (timeless !== false) { - return (new Date(date1.getTime()).setHours(0, 0, 0, 0) - - new Date(date2.getTime()).setHours(0, 0, 0, 0)); - } - return date1.getTime() - date2.getTime(); - } - /** - * Compute the difference in times, measured in ms - */ - function compareTimes(date1, date2) { - return (3600 * (date1.getHours() - date2.getHours()) + - 60 * (date1.getMinutes() - date2.getMinutes()) + - date1.getSeconds() - - date2.getSeconds()); - } - - function minMaxTimePlugin(config) { - if (config === void 0) { config = {}; } - var state = { - formatDate: createDateFormatter({}), - tableDateFormat: config.tableDateFormat || "Y-m-d", - defaults: { - minTime: undefined, - maxTime: undefined - } - }; - function findDateTimeLimit(date) { - if (config.table !== undefined) { - return config.table[state.formatDate(date, state.tableDateFormat)]; - } - return config.getTimeLimits && config.getTimeLimits(date); - } - return function (fp) { - return { - onReady: function () { - state.formatDate = this.formatDate; - state.defaults = { - minTime: this.config.minTime && state.formatDate(this.config.minTime, "H:i"), - maxTime: this.config.maxTime && state.formatDate(this.config.maxTime, "H:i") - }; - fp.loadedPlugins.push("minMaxTime"); - }, - onChange: function () { - var latest = this.latestSelectedDateObj; - var matchingTimeLimit = latest && findDateTimeLimit(latest); - if (latest && matchingTimeLimit !== undefined) { - this.set(matchingTimeLimit); - fp.config.minTime.setFullYear(latest.getFullYear()); - fp.config.maxTime.setFullYear(latest.getFullYear()); - fp.config.minTime.setMonth(latest.getMonth()); - fp.config.maxTime.setMonth(latest.getMonth()); - fp.config.minTime.setDate(latest.getDate()); - fp.config.maxTime.setDate(latest.getDate()); - if (compareDates(latest, fp.config.maxTime, false) > 0) { - fp.setDate(new Date(latest.getTime()).setHours(fp.config.maxTime.getHours(), fp.config.maxTime.getMinutes(), fp.config.maxTime.getSeconds(), fp.config.maxTime.getMilliseconds()), false); - } - else if (compareDates(latest, fp.config.minTime, false) < 0) - fp.setDate(new Date(latest.getTime()).setHours(fp.config.minTime.getHours(), fp.config.minTime.getMinutes(), fp.config.minTime.getSeconds(), fp.config.minTime.getMilliseconds()), false); - } - else { - var newMinMax = state.defaults || { - minTime: undefined, - maxTime: undefined - }; - this.set(newMinMax); - if (!latest) - return; - var _a = fp.config, minTime = _a.minTime, maxTime = _a.maxTime; - if (minTime && compareTimes(latest, minTime) < 0) { - fp.setDate(new Date(latest.getTime()).setHours(minTime.getHours(), minTime.getMinutes(), minTime.getSeconds(), minTime.getMilliseconds()), false); - } - else if (maxTime && compareTimes(latest, maxTime) > 0) { - fp.setDate(new Date(latest.getTime()).setHours(maxTime.getHours(), maxTime.getMinutes(), maxTime.getSeconds(), maxTime.getMilliseconds())); - } - // - } - } - }; - }; - } - - return minMaxTimePlugin; - -})); diff --git a/website/appphp/static/vendors/flatpickr/plugins/monthSelect/index.d.ts b/website/appphp/static/vendors/flatpickr/plugins/monthSelect/index.d.ts deleted file mode 100644 index d3864fc7..00000000 --- a/website/appphp/static/vendors/flatpickr/plugins/monthSelect/index.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Plugin } from "../../types/options"; -export interface Config { - shorthand: boolean; - dateFormat: string; - altFormat: string; - theme: string; -} -export declare type MonthElement = HTMLSpanElement & { - dateObj: Date; - $i: number; -}; -declare function monthSelectPlugin(pluginConfig?: Partial): Plugin; -export default monthSelectPlugin; diff --git a/website/appphp/static/vendors/flatpickr/plugins/monthSelect/index.js b/website/appphp/static/vendors/flatpickr/plugins/monthSelect/index.js deleted file mode 100644 index 7fd66e72..00000000 --- a/website/appphp/static/vendors/flatpickr/plugins/monthSelect/index.js +++ /dev/null @@ -1,174 +0,0 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global = global || self, global.monthSelectPlugin = factory()); -}(this, function () { 'use strict'; - - /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. All rights reserved. - Licensed under the Apache License, Version 2.0 (the "License"); you may not use - this file except in compliance with the License. You may obtain a copy of the - License at http://www.apache.org/licenses/LICENSE-2.0 - - THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED - WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, - MERCHANTABLITY OR NON-INFRINGEMENT. - - See the Apache Version 2.0 License for specific language governing permissions - and limitations under the License. - ***************************************************************************** */ - - 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]; }; - - var defaultConfig = { - shorthand: false, - dateFormat: "F Y", - altFormat: "F Y", - theme: "light" - }; - function monthSelectPlugin(pluginConfig) { - var config = __assign({}, defaultConfig, pluginConfig); - return function (fp) { - fp.config.dateFormat = config.dateFormat; - fp.config.altFormat = config.altFormat; - var self = { monthsContainer: null }; - function clearUnnecessaryDOMElements() { - if (!fp.rContainer || !fp.daysContainer || !fp.weekdayContainer) - return; - fp.rContainer.removeChild(fp.daysContainer); - fp.rContainer.removeChild(fp.weekdayContainer); - for (var index = 0; index < fp.monthElements.length; index++) { - var element = fp.monthElements[index]; - if (!element.parentNode) - continue; - element.parentNode.removeChild(element); - } - } - function addListeners() { - fp._bind(fp.prevMonthNav, "click", function () { - fp.currentYear -= 1; - selectYear(); - }); - fp._bind(fp.nextMonthNav, "mousedown", function () { - fp.currentYear += 1; - selectYear(); - }); - } - function addMonths() { - if (!fp.rContainer) - return; - self.monthsContainer = fp._createElement("div", "flatpickr-monthSelect-months"); - self.monthsContainer.tabIndex = -1; - fp.calendarContainer.classList.add("flatpickr-monthSelect-theme-" + config.theme); - for (var i = 0; i < 12; i++) { - var month = fp._createElement("span", "flatpickr-monthSelect-month"); - month.dateObj = new Date(fp.currentYear, i); - month.$i = i; - month.textContent = monthToStr(i, config.shorthand, fp.l10n); - month.tabIndex = -1; - month.addEventListener("click", selectMonth); - self.monthsContainer.appendChild(month); - } - fp.rContainer.appendChild(self.monthsContainer); - } - function setCurrentlySelected() { - if (!fp.rContainer) - return; - var currentlySelected = fp.rContainer.querySelectorAll(".flatpickr-monthSelect-month.selected"); - for (var index = 0; index < currentlySelected.length; index++) { - currentlySelected[index].classList.remove("selected"); - } - var month = fp.rContainer.querySelector(".flatpickr-monthSelect-month:nth-child(" + (fp.currentMonth + 1) + ")"); - if (month) { - month.classList.add("selected"); - } - } - function selectYear() { - var selectedDate = fp.selectedDates[0]; - selectedDate.setFullYear(fp.currentYear); - fp.setDate(selectedDate, true); - } - function selectMonth(e) { - e.preventDefault(); - e.stopPropagation(); - setMonth(e.target.dateObj); - } - function setMonth(date) { - var selectedDate = new Date(date); - selectedDate.setFullYear(fp.currentYear); - fp.currentMonth = selectedDate.getMonth(); - fp.setDate(selectedDate, true); - setCurrentlySelected(); - } - var shifts = { - 37: -1, - 39: 1, - 40: 3, - 38: -3 - }; - function onKeyDown(_, __, ___, e) { - var shouldMove = shifts[e.keyCode] !== undefined; - if (!shouldMove && e.keyCode !== 13) { - return; - } - if (!fp.rContainer || !self.monthsContainer) - return; - var currentlySelected = fp.rContainer.querySelector(".flatpickr-monthSelect-month.selected"); - var index = Array.prototype.indexOf.call(self.monthsContainer.children, document.activeElement); - if (index === -1) { - var target = currentlySelected || self.monthsContainer.firstElementChild; - target.focus(); - index = target.$i; - } - if (shouldMove) { - self.monthsContainer.children[(12 + index + shifts[e.keyCode]) % 12].focus(); - } - else if (e.keyCode === 13 && - self.monthsContainer.contains(document.activeElement)) { - setMonth(document.activeElement.dateObj); - } - } - function destroyPluginInstance() { - if (self.monthsContainer !== null) { - var months = self.monthsContainer.querySelectorAll(".flatpickr-monthSelect-month"); - for (var index = 0; index < months.length; index++) { - months[index].removeEventListener("click", selectMonth); - } - } - } - return { - onParseConfig: function () { - fp.config.mode = "single"; - fp.config.enableTime = false; - }, - onValueUpdate: setCurrentlySelected, - onKeyDown: onKeyDown, - onReady: [ - clearUnnecessaryDOMElements, - addListeners, - addMonths, - setCurrentlySelected, - function () { - fp.loadedPlugins.push("monthSelect"); - }, - ], - onDestroy: destroyPluginInstance - }; - }; - } - - return monthSelectPlugin; - -})); diff --git a/website/appphp/static/vendors/flatpickr/plugins/monthSelect/style.css b/website/appphp/static/vendors/flatpickr/plugins/monthSelect/style.css deleted file mode 100644 index cacbafce..00000000 --- a/website/appphp/static/vendors/flatpickr/plugins/monthSelect/style.css +++ /dev/null @@ -1,69 +0,0 @@ -.flatpickr-monthSelect-months { - margin: 10px 1px 3px 1px; - flex-wrap: wrap; -} - -.flatpickr-monthSelect-month { - background: none; - border: 0; - border-radius: 2px; - -webkit-box-sizing: border-box; - box-sizing: border-box; - color: #393939; - cursor: pointer; - display: inline-block; - font-weight: 400; - margin: 0.5px; - justify-content: center; - padding: 10px; - position: relative; - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - text-align: center; - width: 33%; -} - -.flatpickr-monthSelect-theme-dark { - background: #3f4458; -} - -.flatpickr-monthSelect-theme-dark .flatpickr-current-month input.cur-year { - color: #fff; -} - -.flatpickr-monthSelect-theme-dark .flatpickr-months .flatpickr-prev-month, -.flatpickr-monthSelect-theme-dark .flatpickr-months .flatpickr-next-month { - color: #fff; - fill: #fff; -} - -.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month { - color: rgba(255, 255, 255, 0.95); -} - -.flatpickr-monthSelect-month:hover, -.flatpickr-monthSelect-month:focus { - background: #e6e6e6; - cursor: pointer; - outline: 0; -} - -.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month:hover, -.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month:focus { - background: #646c8c; - border-color: #646c8c; -} - -.flatpickr-monthSelect-month.selected { - background-color: #569ff7; - color: #fff; -} - -.flatpickr-monthSelect-theme-dark .flatpickr-monthSelect-month.selected { - background: #80cbc4; - -webkit-box-shadow: none; - box-shadow: none; - color: #fff; - border-color: #80cbc4; -} diff --git a/website/appphp/static/vendors/flatpickr/plugins/monthSelect/tests.spec.d.ts b/website/appphp/static/vendors/flatpickr/plugins/monthSelect/tests.spec.d.ts deleted file mode 100644 index cb0ff5c3..00000000 --- a/website/appphp/static/vendors/flatpickr/plugins/monthSelect/tests.spec.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/website/appphp/static/vendors/flatpickr/plugins/rangePlugin.d.ts b/website/appphp/static/vendors/flatpickr/plugins/rangePlugin.d.ts deleted file mode 100644 index 960a8347..00000000 --- a/website/appphp/static/vendors/flatpickr/plugins/rangePlugin.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Plugin } from "../types/options"; -export interface Config { - input?: string | HTMLInputElement; - position?: "left"; -} -declare global { - interface Window { - rangePlugin: (config?: Config) => void; - } -} -declare function rangePlugin(config?: Config): Plugin; -export default rangePlugin; diff --git a/website/appphp/static/vendors/flatpickr/plugins/rangePlugin.js b/website/appphp/static/vendors/flatpickr/plugins/rangePlugin.js deleted file mode 100644 index 407e388e..00000000 --- a/website/appphp/static/vendors/flatpickr/plugins/rangePlugin.js +++ /dev/null @@ -1,146 +0,0 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global = global || self, global.rangePlugin = factory()); -}(this, function () { 'use strict'; - - function rangePlugin(config) { - if (config === void 0) { config = {}; } - return function (fp) { - var dateFormat = "", secondInput, _secondInputFocused, _prevDates; - var createSecondInput = function () { - if (config.input) { - secondInput = - config.input instanceof Element - ? config.input - : window.document.querySelector(config.input); - if (!secondInput) { - fp.config.errorHandler(new Error("Invalid input element specified")); - return; - } - if (fp.config.wrap) { - secondInput = secondInput.querySelector("[data-input]"); - } - } - else { - secondInput = fp._input.cloneNode(); - secondInput.removeAttribute("id"); - secondInput._flatpickr = undefined; - } - if (secondInput.value) { - var parsedDate = fp.parseDate(secondInput.value); - if (parsedDate) - fp.selectedDates.push(parsedDate); - } - secondInput.setAttribute("data-fp-omit", ""); - fp._bind(secondInput, ["focus", "click"], function () { - if (fp.selectedDates[1]) { - fp.latestSelectedDateObj = fp.selectedDates[1]; - fp._setHoursFromDate(fp.selectedDates[1]); - fp.jumpToDate(fp.selectedDates[1]); - } - _secondInputFocused = true; - fp.isOpen = false; - fp.open(undefined, config.position === "left" ? fp._input : secondInput); - }); - fp._bind(fp._input, ["focus", "click"], function (e) { - e.preventDefault(); - fp.isOpen = false; - fp.open(); - }); - if (fp.config.allowInput) - fp._bind(secondInput, "keydown", function (e) { - if (e.key === "Enter") { - fp.setDate([fp.selectedDates[0], secondInput.value], true, dateFormat); - secondInput.click(); - } - }); - if (!config.input) - fp._input.parentNode && - fp._input.parentNode.insertBefore(secondInput, fp._input.nextSibling); - }; - var plugin = { - onParseConfig: function () { - fp.config.mode = "range"; - dateFormat = fp.config.altInput - ? fp.config.altFormat - : fp.config.dateFormat; - }, - onReady: function () { - createSecondInput(); - fp.config.ignoredFocusElements.push(secondInput); - if (fp.config.allowInput) { - fp._input.removeAttribute("readonly"); - secondInput.removeAttribute("readonly"); - } - else { - secondInput.setAttribute("readonly", "readonly"); - } - fp._bind(fp._input, "focus", function () { - fp.latestSelectedDateObj = fp.selectedDates[0]; - fp._setHoursFromDate(fp.selectedDates[0]); - _secondInputFocused = false; - fp.jumpToDate(fp.selectedDates[0]); - }); - if (fp.config.allowInput) - fp._bind(fp._input, "keydown", function (e) { - if (e.key === "Enter") - fp.setDate([fp._input.value, fp.selectedDates[1]], true, dateFormat); - }); - fp.setDate(fp.selectedDates, false); - plugin.onValueUpdate(fp.selectedDates); - fp.loadedPlugins.push("range"); - }, - onPreCalendarPosition: function () { - if (_secondInputFocused) { - fp._positionElement = secondInput; - setTimeout(function () { - fp._positionElement = fp._input; - }, 0); - } - }, - onChange: function () { - if (!fp.selectedDates.length) { - setTimeout(function () { - if (fp.selectedDates.length) - return; - secondInput.value = ""; - _prevDates = []; - }, 10); - } - if (_secondInputFocused) { - setTimeout(function () { - secondInput.focus(); - }, 0); - } - }, - onDestroy: function () { - if (!config.input) - secondInput.parentNode && - secondInput.parentNode.removeChild(secondInput); - }, - onValueUpdate: function (selDates) { - var _a, _b, _c; - if (!secondInput) - return; - _prevDates = - !_prevDates || selDates.length >= _prevDates.length - ? selDates.slice() : _prevDates; - if (_prevDates.length > selDates.length) { - var newSelectedDate = selDates[0]; - var newDates = _secondInputFocused - ? [_prevDates[0], newSelectedDate] - : [newSelectedDate, _prevDates[1]]; - fp.setDate(newDates, false); - _prevDates = newDates.slice(); - } - _a = fp.selectedDates.map(function (d) { return fp.formatDate(d, dateFormat); }), _b = _a[0], fp._input.value = _b === void 0 ? "" : _b, _c = _a[1], secondInput.value = _c === void 0 ? "" : _c; - } - }; - return plugin; - }; - } - - return rangePlugin; - -})); diff --git a/website/appphp/static/vendors/flatpickr/plugins/scrollPlugin.d.ts b/website/appphp/static/vendors/flatpickr/plugins/scrollPlugin.d.ts deleted file mode 100644 index a3674285..00000000 --- a/website/appphp/static/vendors/flatpickr/plugins/scrollPlugin.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Plugin } from "../types/options"; -declare function scrollPlugin(): Plugin; -export default scrollPlugin; diff --git a/website/appphp/static/vendors/flatpickr/plugins/scrollPlugin.js b/website/appphp/static/vendors/flatpickr/plugins/scrollPlugin.js deleted file mode 100644 index 3a5ad999..00000000 --- a/website/appphp/static/vendors/flatpickr/plugins/scrollPlugin.js +++ /dev/null @@ -1,58 +0,0 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global = global || self, global.scrollPlugin = factory()); -}(this, function () { 'use strict'; - - function delta(e) { - return Math.max(-1, Math.min(1, e.wheelDelta || -e.deltaY)); - } - var scroll = function (e) { - e.preventDefault(); - var ev = new CustomEvent("increment", { - bubbles: true - }); - ev.delta = delta(e); - e.target.dispatchEvent(ev); - }; - function scrollMonth(fp) { - return function (e) { - e.preventDefault(); - var mDelta = delta(e); - fp.changeMonth(mDelta); - }; - } - function scrollPlugin() { - return function (fp) { - var monthScroller = scrollMonth(fp); - return { - onReady: function () { - if (fp.timeContainer) { - fp.timeContainer.addEventListener("wheel", scroll); - } - fp.yearElements.forEach(function (yearElem) { - return yearElem.addEventListener("wheel", scroll); - }); - fp.monthElements.forEach(function (monthElem) { - return monthElem.addEventListener("wheel", monthScroller); - }); - fp.loadedPlugins.push("scroll"); - }, - onDestroy: function () { - if (fp.timeContainer) { - fp.timeContainer.removeEventListener("wheel", scroll); - } - fp.yearElements.forEach(function (yearElem) { - return yearElem.removeEventListener("wheel", scroll); - }); - fp.monthElements.forEach(function (monthElem) { - return monthElem.removeEventListener("wheel", monthScroller); - }); - } - }; - }; - } - - return scrollPlugin; - -})); diff --git a/website/appphp/static/vendors/flatpickr/plugins/weekSelect/weekSelect.d.ts b/website/appphp/static/vendors/flatpickr/plugins/weekSelect/weekSelect.d.ts deleted file mode 100644 index 88cc964c..00000000 --- a/website/appphp/static/vendors/flatpickr/plugins/weekSelect/weekSelect.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Plugin } from "../../types/options"; -export declare type PlusWeeks = { - weekStartDay: Date; - weekEndDay: Date; -}; -declare function weekSelectPlugin(): Plugin; -export default weekSelectPlugin; diff --git a/website/appphp/static/vendors/flatpickr/plugins/weekSelect/weekSelect.js b/website/appphp/static/vendors/flatpickr/plugins/weekSelect/weekSelect.js deleted file mode 100644 index e8792ed9..00000000 --- a/website/appphp/static/vendors/flatpickr/plugins/weekSelect/weekSelect.js +++ /dev/null @@ -1,86 +0,0 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global = global || self, global.weekSelect = factory()); -}(this, function () { 'use strict'; - - function weekSelectPlugin() { - return function (fp) { - function onDayHover(event) { - var day = event.target; - if (!day.classList.contains("flatpickr-day")) - return; - var days = fp.days.childNodes; - var dayIndex = day.$i; - var dayIndSeven = dayIndex / 7; - var weekStartDay = days[7 * Math.floor(dayIndSeven)] - .dateObj; - var weekEndDay = days[7 * Math.ceil(dayIndSeven + 0.01) - 1].dateObj; - for (var i = days.length; i--;) { - var day_1 = days[i]; - var date = day_1.dateObj; - if (date > weekEndDay || date < weekStartDay) - day_1.classList.remove("inRange"); - else - day_1.classList.add("inRange"); - } - } - function highlightWeek() { - var selDate = fp.latestSelectedDateObj; - if (selDate !== undefined && - selDate.getMonth() === fp.currentMonth && - selDate.getFullYear() === fp.currentYear) { - fp.weekStartDay = fp.days.childNodes[7 * Math.floor(fp.selectedDateElem.$i / 7)].dateObj; - fp.weekEndDay = fp.days.childNodes[7 * Math.ceil(fp.selectedDateElem.$i / 7 + 0.01) - 1].dateObj; - } - var days = fp.days.childNodes; - for (var i = days.length; i--;) { - var date = days[i].dateObj; - if (date >= fp.weekStartDay && date <= fp.weekEndDay) - days[i].classList.add("week", "selected"); - } - } - function clearHover() { - var days = fp.days.childNodes; - for (var i = days.length; i--;) - days[i].classList.remove("inRange"); - } - function onReady() { - if (fp.daysContainer !== undefined) - fp.daysContainer.addEventListener("mouseover", onDayHover); - } - function onDestroy() { - if (fp.daysContainer !== undefined) - fp.daysContainer.removeEventListener("mouseover", onDayHover); - } - return { - onValueUpdate: highlightWeek, - onMonthChange: highlightWeek, - onYearChange: highlightWeek, - onOpen: highlightWeek, - onClose: clearHover, - onParseConfig: function () { - fp.config.mode = "single"; - fp.config.enableTime = false; - fp.config.dateFormat = fp.config.dateFormat - ? fp.config.dateFormat - : "\\W\\e\\e\\k #W, Y"; - fp.config.altFormat = fp.config.altFormat - ? fp.config.altFormat - : "\\W\\e\\e\\k #W, Y"; - }, - onReady: [ - onReady, - highlightWeek, - function () { - fp.loadedPlugins.push("weekSelect"); - }, - ], - onDestroy: onDestroy - }; - }; - } - - return weekSelectPlugin; - -})); diff --git a/website/appphp/static/vendors/flatpickr/themes/airbnb.css b/website/appphp/static/vendors/flatpickr/themes/airbnb.css deleted file mode 100644 index c47c711c..00000000 --- a/website/appphp/static/vendors/flatpickr/themes/airbnb.css +++ /dev/null @@ -1,872 +0,0 @@ -.flatpickr-calendar { - background: transparent; - opacity: 0; - display: none; - text-align: center; - visibility: hidden; - padding: 0; - -webkit-animation: none; - animation: none; - direction: ltr; - border: 0; - font-size: 14px; - line-height: 24px; - border-radius: 5px; - position: absolute; - width: 307.875px; - -webkit-box-sizing: border-box; - box-sizing: border-box; - -ms-touch-action: manipulation; - touch-action: manipulation; - background: #fff; - -webkit-box-shadow: 1px 0 0 #eee, -1px 0 0 #eee, 0 1px 0 #eee, 0 -1px 0 #eee, 0 3px 13px rgba(0,0,0,0.08); - box-shadow: 1px 0 0 #eee, -1px 0 0 #eee, 0 1px 0 #eee, 0 -1px 0 #eee, 0 3px 13px rgba(0,0,0,0.08); -} -.flatpickr-calendar.open, -.flatpickr-calendar.inline { - opacity: 1; - max-height: 640px; - visibility: visible; -} -.flatpickr-calendar.open { - display: inline-block; - z-index: 99999; -} -.flatpickr-calendar.animate.open { - -webkit-animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1); - animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1); -} -.flatpickr-calendar.inline { - display: block; - position: relative; - top: 2px; -} -.flatpickr-calendar.static { - position: absolute; - top: calc(100% + 2px); -} -.flatpickr-calendar.static.open { - z-index: 999; - display: block; -} -.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7) { - -webkit-box-shadow: none !important; - box-shadow: none !important; -} -.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1) { - -webkit-box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6; - box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6; -} -.flatpickr-calendar .hasWeeks .dayContainer, -.flatpickr-calendar .hasTime .dayContainer { - border-bottom: 0; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.flatpickr-calendar .hasWeeks .dayContainer { - border-left: 0; -} -.flatpickr-calendar.showTimeInput.hasTime .flatpickr-time { - height: 40px; - border-top: 1px solid #eee; -} -.flatpickr-calendar.noCalendar.hasTime .flatpickr-time { - height: auto; -} -.flatpickr-calendar:before, -.flatpickr-calendar:after { - position: absolute; - display: block; - pointer-events: none; - border: solid transparent; - content: ''; - height: 0; - width: 0; - left: 22px; -} -.flatpickr-calendar.rightMost:before, -.flatpickr-calendar.rightMost:after { - left: auto; - right: 22px; -} -.flatpickr-calendar:before { - border-width: 5px; - margin: 0 -5px; -} -.flatpickr-calendar:after { - border-width: 4px; - margin: 0 -4px; -} -.flatpickr-calendar.arrowTop:before, -.flatpickr-calendar.arrowTop:after { - bottom: 100%; -} -.flatpickr-calendar.arrowTop:before { - border-bottom-color: #eee; -} -.flatpickr-calendar.arrowTop:after { - border-bottom-color: #fff; -} -.flatpickr-calendar.arrowBottom:before, -.flatpickr-calendar.arrowBottom:after { - top: 100%; -} -.flatpickr-calendar.arrowBottom:before { - border-top-color: #eee; -} -.flatpickr-calendar.arrowBottom:after { - border-top-color: #fff; -} -.flatpickr-calendar:focus { - outline: 0; -} -.flatpickr-wrapper { - position: relative; - display: inline-block; -} -.flatpickr-months { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; -} -.flatpickr-months .flatpickr-month { - background: transparent; - color: #3c3f40; - fill: #3c3f40; - height: 34px; - line-height: 1; - text-align: center; - position: relative; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - overflow: hidden; - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; -} -.flatpickr-months .flatpickr-prev-month, -.flatpickr-months .flatpickr-next-month { - text-decoration: none; - cursor: pointer; - position: absolute; - top: 0; - height: 34px; - padding: 10px; - z-index: 3; - color: #3c3f40; - fill: #3c3f40; -} -.flatpickr-months .flatpickr-prev-month.flatpickr-disabled, -.flatpickr-months .flatpickr-next-month.flatpickr-disabled { - display: none; -} -.flatpickr-months .flatpickr-prev-month i, -.flatpickr-months .flatpickr-next-month i { - position: relative; -} -.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month, -.flatpickr-months .flatpickr-next-month.flatpickr-prev-month { -/* - /*rtl:begin:ignore*/ -/* - */ - left: 0; -/* - /*rtl:end:ignore*/ -/* - */ -} -/* - /*rtl:begin:ignore*/ -/* - /*rtl:end:ignore*/ -.flatpickr-months .flatpickr-prev-month.flatpickr-next-month, -.flatpickr-months .flatpickr-next-month.flatpickr-next-month { -/* - /*rtl:begin:ignore*/ -/* - */ - right: 0; -/* - /*rtl:end:ignore*/ -/* - */ -} -/* - /*rtl:begin:ignore*/ -/* - /*rtl:end:ignore*/ -.flatpickr-months .flatpickr-prev-month:hover, -.flatpickr-months .flatpickr-next-month:hover { - color: #f64747; -} -.flatpickr-months .flatpickr-prev-month:hover svg, -.flatpickr-months .flatpickr-next-month:hover svg { - fill: #f64747; -} -.flatpickr-months .flatpickr-prev-month svg, -.flatpickr-months .flatpickr-next-month svg { - width: 14px; - height: 14px; -} -.flatpickr-months .flatpickr-prev-month svg path, -.flatpickr-months .flatpickr-next-month svg path { - -webkit-transition: fill 0.1s; - transition: fill 0.1s; - fill: inherit; -} -.numInputWrapper { - position: relative; - height: auto; -} -.numInputWrapper input, -.numInputWrapper span { - display: inline-block; -} -.numInputWrapper input { - width: 100%; -} -.numInputWrapper input::-ms-clear { - display: none; -} -.numInputWrapper input::-webkit-outer-spin-button, -.numInputWrapper input::-webkit-inner-spin-button { - margin: 0; - -webkit-appearance: none; -} -.numInputWrapper span { - position: absolute; - right: 0; - width: 14px; - padding: 0 4px 0 2px; - height: 50%; - line-height: 50%; - opacity: 0; - cursor: pointer; - border: 1px solid rgba(64,72,72,0.15); - -webkit-box-sizing: border-box; - box-sizing: border-box; -} -.numInputWrapper span:hover { - background: rgba(0,0,0,0.1); -} -.numInputWrapper span:active { - background: rgba(0,0,0,0.2); -} -.numInputWrapper span:after { - display: block; - content: ""; - position: absolute; -} -.numInputWrapper span.arrowUp { - top: 0; - border-bottom: 0; -} -.numInputWrapper span.arrowUp:after { - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-bottom: 4px solid rgba(64,72,72,0.6); - top: 26%; -} -.numInputWrapper span.arrowDown { - top: 50%; -} -.numInputWrapper span.arrowDown:after { - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-top: 4px solid rgba(64,72,72,0.6); - top: 40%; -} -.numInputWrapper span svg { - width: inherit; - height: auto; -} -.numInputWrapper span svg path { - fill: rgba(60,63,64,0.5); -} -.numInputWrapper:hover { - background: rgba(0,0,0,0.05); -} -.numInputWrapper:hover span { - opacity: 1; -} -.flatpickr-current-month { - font-size: 135%; - line-height: inherit; - font-weight: 300; - color: inherit; - position: absolute; - width: 75%; - left: 12.5%; - padding: 7.48px 0 0 0; - line-height: 1; - height: 34px; - display: inline-block; - text-align: center; - -webkit-transform: translate3d(0px, 0px, 0px); - transform: translate3d(0px, 0px, 0px); -} -.flatpickr-current-month span.cur-month { - font-family: inherit; - font-weight: 700; - color: inherit; - display: inline-block; - margin-left: 0.5ch; - padding: 0; -} -.flatpickr-current-month span.cur-month:hover { - background: rgba(0,0,0,0.05); -} -.flatpickr-current-month .numInputWrapper { - width: 6ch; - width: 7ch\0; - display: inline-block; -} -.flatpickr-current-month .numInputWrapper span.arrowUp:after { - border-bottom-color: #3c3f40; -} -.flatpickr-current-month .numInputWrapper span.arrowDown:after { - border-top-color: #3c3f40; -} -.flatpickr-current-month input.cur-year { - background: transparent; - -webkit-box-sizing: border-box; - box-sizing: border-box; - color: inherit; - cursor: text; - padding: 0 0 0 0.5ch; - margin: 0; - display: inline-block; - font-size: inherit; - font-family: inherit; - font-weight: 300; - line-height: inherit; - height: auto; - border: 0; - border-radius: 0; - vertical-align: initial; - -webkit-appearance: textfield; - -moz-appearance: textfield; - appearance: textfield; -} -.flatpickr-current-month input.cur-year:focus { - outline: 0; -} -.flatpickr-current-month input.cur-year[disabled], -.flatpickr-current-month input.cur-year[disabled]:hover { - font-size: 100%; - color: rgba(60,63,64,0.5); - background: transparent; - pointer-events: none; -} -.flatpickr-current-month .flatpickr-monthDropdown-months { - appearance: menulist; - background: transparent; - border: none; - border-radius: 0; - box-sizing: border-box; - color: inherit; - cursor: pointer; - font-size: inherit; - font-family: inherit; - font-weight: 300; - height: auto; - line-height: inherit; - margin: -1px 0 0 0; - outline: none; - padding: 0 0 0 0.5ch; - position: relative; - vertical-align: initial; - -webkit-box-sizing: border-box; - -webkit-appearance: menulist; - -moz-appearance: menulist; - width: auto; -} -.flatpickr-current-month .flatpickr-monthDropdown-months:focus, -.flatpickr-current-month .flatpickr-monthDropdown-months:active { - outline: none; -} -.flatpickr-current-month .flatpickr-monthDropdown-months:hover { - background: rgba(0,0,0,0.05); -} -.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month { - background-color: transparent; - outline: none; - padding: 0; -} -.flatpickr-weekdays { - background: transparent; - text-align: center; - overflow: hidden; - width: 100%; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - height: 28px; -} -.flatpickr-weekdays .flatpickr-weekdaycontainer { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; -} -span.flatpickr-weekday { - cursor: default; - font-size: 90%; - background: transparent; - color: rgba(0,0,0,0.54); - line-height: 1; - margin: 0; - text-align: center; - display: block; - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; - font-weight: bolder; -} -.dayContainer, -.flatpickr-weeks { - padding: 1px 0 0 0; -} -.flatpickr-days { - position: relative; - overflow: hidden; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-align: start; - -webkit-align-items: flex-start; - -ms-flex-align: start; - align-items: flex-start; - width: 307.875px; -} -.flatpickr-days:focus { - outline: 0; -} -.dayContainer { - padding: 0; - outline: 0; - text-align: left; - width: 307.875px; - min-width: 307.875px; - max-width: 307.875px; - -webkit-box-sizing: border-box; - box-sizing: border-box; - display: inline-block; - display: -ms-flexbox; - display: -webkit-box; - display: -webkit-flex; - display: flex; - -webkit-flex-wrap: wrap; - flex-wrap: wrap; - -ms-flex-wrap: wrap; - -ms-flex-pack: justify; - -webkit-justify-content: space-around; - justify-content: space-around; - -webkit-transform: translate3d(0px, 0px, 0px); - transform: translate3d(0px, 0px, 0px); - opacity: 1; -} -.dayContainer + .dayContainer { - -webkit-box-shadow: -1px 0 0 #eee; - box-shadow: -1px 0 0 #eee; -} -.flatpickr-day { - background: none; - border: 1px solid transparent; - border-radius: 150px; - -webkit-box-sizing: border-box; - box-sizing: border-box; - color: #404848; - cursor: pointer; - font-weight: 400; - width: 14.2857143%; - -webkit-flex-basis: 14.2857143%; - -ms-flex-preferred-size: 14.2857143%; - flex-basis: 14.2857143%; - max-width: 39px; - height: 39px; - line-height: 39px; - margin: 0; - display: inline-block; - position: relative; - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - text-align: center; -} -.flatpickr-day.inRange, -.flatpickr-day.prevMonthDay.inRange, -.flatpickr-day.nextMonthDay.inRange, -.flatpickr-day.today.inRange, -.flatpickr-day.prevMonthDay.today.inRange, -.flatpickr-day.nextMonthDay.today.inRange, -.flatpickr-day:hover, -.flatpickr-day.prevMonthDay:hover, -.flatpickr-day.nextMonthDay:hover, -.flatpickr-day:focus, -.flatpickr-day.prevMonthDay:focus, -.flatpickr-day.nextMonthDay:focus { - cursor: pointer; - outline: 0; - background: #e9e9e9; - border-color: #e9e9e9; -} -.flatpickr-day.today { - border-color: #f64747; -} -.flatpickr-day.today:hover, -.flatpickr-day.today:focus { - border-color: #f64747; - background: #f64747; - color: #fff; -} -.flatpickr-day.selected, -.flatpickr-day.startRange, -.flatpickr-day.endRange, -.flatpickr-day.selected.inRange, -.flatpickr-day.startRange.inRange, -.flatpickr-day.endRange.inRange, -.flatpickr-day.selected:focus, -.flatpickr-day.startRange:focus, -.flatpickr-day.endRange:focus, -.flatpickr-day.selected:hover, -.flatpickr-day.startRange:hover, -.flatpickr-day.endRange:hover, -.flatpickr-day.selected.prevMonthDay, -.flatpickr-day.startRange.prevMonthDay, -.flatpickr-day.endRange.prevMonthDay, -.flatpickr-day.selected.nextMonthDay, -.flatpickr-day.startRange.nextMonthDay, -.flatpickr-day.endRange.nextMonthDay { - background: #4f99ff; - -webkit-box-shadow: none; - box-shadow: none; - color: #fff; - border-color: #4f99ff; -} -.flatpickr-day.selected.startRange, -.flatpickr-day.startRange.startRange, -.flatpickr-day.endRange.startRange { - border-radius: 50px 0 0 50px; -} -.flatpickr-day.selected.endRange, -.flatpickr-day.startRange.endRange, -.flatpickr-day.endRange.endRange { - border-radius: 0 50px 50px 0; -} -.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n+1)), -.flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n+1)), -.flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n+1)) { - -webkit-box-shadow: -10px 0 0 #4f99ff; - box-shadow: -10px 0 0 #4f99ff; -} -.flatpickr-day.selected.startRange.endRange, -.flatpickr-day.startRange.startRange.endRange, -.flatpickr-day.endRange.startRange.endRange { - border-radius: 50px; -} -.flatpickr-day.inRange { - border-radius: 0; - -webkit-box-shadow: -5px 0 0 #e9e9e9, 5px 0 0 #e9e9e9; - box-shadow: -5px 0 0 #e9e9e9, 5px 0 0 #e9e9e9; -} -.flatpickr-day.flatpickr-disabled, -.flatpickr-day.flatpickr-disabled:hover, -.flatpickr-day.prevMonthDay, -.flatpickr-day.nextMonthDay, -.flatpickr-day.notAllowed, -.flatpickr-day.notAllowed.prevMonthDay, -.flatpickr-day.notAllowed.nextMonthDay { - color: rgba(64,72,72,0.3); - background: transparent; - border-color: #e9e9e9; - cursor: default; -} -.flatpickr-day.flatpickr-disabled, -.flatpickr-day.flatpickr-disabled:hover { - cursor: not-allowed; - color: rgba(64,72,72,0.1); -} -.flatpickr-day.week.selected { - border-radius: 0; - -webkit-box-shadow: -5px 0 0 #4f99ff, 5px 0 0 #4f99ff; - box-shadow: -5px 0 0 #4f99ff, 5px 0 0 #4f99ff; -} -.flatpickr-day.hidden { - visibility: hidden; -} -.rangeMode .flatpickr-day { - margin-top: 1px; -} -.flatpickr-weekwrapper { - float: left; -} -.flatpickr-weekwrapper .flatpickr-weeks { - padding: 0 12px; - -webkit-box-shadow: 1px 0 0 #eee; - box-shadow: 1px 0 0 #eee; -} -.flatpickr-weekwrapper .flatpickr-weekday { - float: none; - width: 100%; - line-height: 28px; -} -.flatpickr-weekwrapper span.flatpickr-day, -.flatpickr-weekwrapper span.flatpickr-day:hover { - display: block; - width: 100%; - max-width: none; - color: rgba(64,72,72,0.3); - background: transparent; - cursor: default; - border: none; -} -.flatpickr-innerContainer { - display: block; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-sizing: border-box; - box-sizing: border-box; - overflow: hidden; -} -.flatpickr-rContainer { - display: inline-block; - padding: 0; - -webkit-box-sizing: border-box; - box-sizing: border-box; -} -.flatpickr-time { - text-align: center; - outline: 0; - display: block; - height: 0; - line-height: 40px; - max-height: 40px; - -webkit-box-sizing: border-box; - box-sizing: border-box; - overflow: hidden; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; -} -.flatpickr-time:after { - content: ""; - display: table; - clear: both; -} -.flatpickr-time .numInputWrapper { - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; - width: 40%; - height: 40px; - float: left; -} -.flatpickr-time .numInputWrapper span.arrowUp:after { - border-bottom-color: #404848; -} -.flatpickr-time .numInputWrapper span.arrowDown:after { - border-top-color: #404848; -} -.flatpickr-time.hasSeconds .numInputWrapper { - width: 26%; -} -.flatpickr-time.time24hr .numInputWrapper { - width: 49%; -} -.flatpickr-time input { - background: transparent; - -webkit-box-shadow: none; - box-shadow: none; - border: 0; - border-radius: 0; - text-align: center; - margin: 0; - padding: 0; - height: inherit; - line-height: inherit; - color: #404848; - font-size: 14px; - position: relative; - -webkit-box-sizing: border-box; - box-sizing: border-box; - -webkit-appearance: textfield; - -moz-appearance: textfield; - appearance: textfield; -} -.flatpickr-time input.flatpickr-hour { - font-weight: bold; -} -.flatpickr-time input.flatpickr-minute, -.flatpickr-time input.flatpickr-second { - font-weight: 400; -} -.flatpickr-time input:focus { - outline: 0; - border: 0; -} -.flatpickr-time .flatpickr-time-separator, -.flatpickr-time .flatpickr-am-pm { - height: inherit; - float: left; - line-height: inherit; - color: #404848; - font-weight: bold; - width: 2%; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-align-self: center; - -ms-flex-item-align: center; - align-self: center; -} -.flatpickr-time .flatpickr-am-pm { - outline: 0; - width: 18%; - cursor: pointer; - text-align: center; - font-weight: 400; -} -.flatpickr-time input:hover, -.flatpickr-time .flatpickr-am-pm:hover, -.flatpickr-time input:focus, -.flatpickr-time .flatpickr-am-pm:focus { - background: #f1f1f1; -} -.flatpickr-input[readonly] { - cursor: pointer; -} -@-webkit-keyframes fpFadeInDown { - from { - opacity: 0; - -webkit-transform: translate3d(0, -20px, 0); - transform: translate3d(0, -20px, 0); - } - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} -@keyframes fpFadeInDown { - from { - opacity: 0; - -webkit-transform: translate3d(0, -20px, 0); - transform: translate3d(0, -20px, 0); - } - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} -.flatpickr-calendar { - width: 307.875px; -} -.dayContainer { - padding: 0; - border-right: 0; -} -span.flatpickr-day, -span.flatpickr-day.prevMonthDay, -span.flatpickr-day.nextMonthDay { - border-radius: 0 !important; - border: 1px solid #e9e9e9; - max-width: none; - border-right-color: transparent; -} -span.flatpickr-day:nth-child(n+8), -span.flatpickr-day.prevMonthDay:nth-child(n+8), -span.flatpickr-day.nextMonthDay:nth-child(n+8) { - border-top-color: transparent; -} -span.flatpickr-day:nth-child(7n-6), -span.flatpickr-day.prevMonthDay:nth-child(7n-6), -span.flatpickr-day.nextMonthDay:nth-child(7n-6) { - border-left: 0; -} -span.flatpickr-day:nth-child(n+36), -span.flatpickr-day.prevMonthDay:nth-child(n+36), -span.flatpickr-day.nextMonthDay:nth-child(n+36) { - border-bottom: 0; -} -span.flatpickr-day:nth-child(-n+7), -span.flatpickr-day.prevMonthDay:nth-child(-n+7), -span.flatpickr-day.nextMonthDay:nth-child(-n+7) { - margin-top: 0; -} -span.flatpickr-day.today:not(.selected), -span.flatpickr-day.prevMonthDay.today:not(.selected), -span.flatpickr-day.nextMonthDay.today:not(.selected) { - border-color: #e9e9e9; - border-right-color: transparent; - border-top-color: transparent; - border-bottom-color: #f64747; -} -span.flatpickr-day.today:not(.selected):hover, -span.flatpickr-day.prevMonthDay.today:not(.selected):hover, -span.flatpickr-day.nextMonthDay.today:not(.selected):hover { - border: 1px solid #f64747; -} -span.flatpickr-day.startRange, -span.flatpickr-day.prevMonthDay.startRange, -span.flatpickr-day.nextMonthDay.startRange, -span.flatpickr-day.endRange, -span.flatpickr-day.prevMonthDay.endRange, -span.flatpickr-day.nextMonthDay.endRange { - border-color: #4f99ff; -} -span.flatpickr-day.today, -span.flatpickr-day.prevMonthDay.today, -span.flatpickr-day.nextMonthDay.today, -span.flatpickr-day.selected, -span.flatpickr-day.prevMonthDay.selected, -span.flatpickr-day.nextMonthDay.selected { - z-index: 2; -} -.rangeMode .flatpickr-day { - margin-top: -1px; -} -.flatpickr-weekwrapper .flatpickr-weeks { - -webkit-box-shadow: none; - box-shadow: none; -} -.flatpickr-weekwrapper span.flatpickr-day { - border: 0; - margin: -1px 0 0 -1px; -} -.hasWeeks .flatpickr-days { - border-right: 0; -} - - @media screen and (min-width:0\0) and (min-resolution: +72dpi) { - span.flatpickr-day { - display: block; - -webkit-box-flex: 1; - -webkit-flex: 1 0 auto; - -ms-flex: 1 0 auto; - flex: 1 0 auto; - } - } diff --git a/website/appphp/static/vendors/flatpickr/themes/airbnb.min.css b/website/appphp/static/vendors/flatpickr/themes/airbnb.min.css deleted file mode 100644 index 16c9f6a1..00000000 --- a/website/appphp/static/vendors/flatpickr/themes/airbnb.min.css +++ /dev/null @@ -1 +0,0 @@ -.flatpickr-calendar{background:0 0;opacity:0;display:none;text-align:center;visibility:hidden;padding:0;-webkit-animation:none;animation:none;direction:ltr;border:0;font-size:14px;line-height:24px;border-radius:5px;position:absolute;width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-touch-action:manipulation;touch-action:manipulation;background:#fff;-webkit-box-shadow:1px 0 0 #eee,-1px 0 0 #eee,0 1px 0 #eee,0 -1px 0 #eee,0 3px 13px rgba(0,0,0,.08);box-shadow:1px 0 0 #eee,-1px 0 0 #eee,0 1px 0 #eee,0 -1px 0 #eee,0 3px 13px rgba(0,0,0,.08)}.flatpickr-calendar.inline,.flatpickr-calendar.open{opacity:1;max-height:640px;visibility:visible}.flatpickr-calendar.open{display:inline-block;z-index:99999}.flatpickr-calendar.animate.open{-webkit-animation:fpFadeInDown .3s cubic-bezier(.23,1,.32,1);animation:fpFadeInDown .3s cubic-bezier(.23,1,.32,1)}.flatpickr-calendar.inline{display:block;position:relative;top:2px}.flatpickr-calendar.static{position:absolute;top:calc(100% + 2px)}.flatpickr-calendar.static.open{z-index:999;display:block}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7){-webkit-box-shadow:none!important;box-shadow:none!important}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1){-webkit-box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-calendar .hasTime .dayContainer,.flatpickr-calendar .hasWeeks .dayContainer{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.flatpickr-calendar .hasWeeks .dayContainer{border-left:0}.flatpickr-calendar.showTimeInput.hasTime .flatpickr-time{height:40px;border-top:1px solid #eee}.flatpickr-calendar.noCalendar.hasTime .flatpickr-time{height:auto}.flatpickr-calendar:after,.flatpickr-calendar:before{position:absolute;display:block;pointer-events:none;border:solid transparent;content:'';height:0;width:0;left:22px}.flatpickr-calendar.rightMost:after,.flatpickr-calendar.rightMost:before{left:auto;right:22px}.flatpickr-calendar:before{border-width:5px;margin:0 -5px}.flatpickr-calendar:after{border-width:4px;margin:0 -4px}.flatpickr-calendar.arrowTop:after,.flatpickr-calendar.arrowTop:before{bottom:100%}.flatpickr-calendar.arrowTop:before{border-bottom-color:#eee}.flatpickr-calendar.arrowTop:after{border-bottom-color:#fff}.flatpickr-calendar.arrowBottom:after,.flatpickr-calendar.arrowBottom:before{top:100%}.flatpickr-calendar.arrowBottom:before{border-top-color:#eee}.flatpickr-calendar.arrowBottom:after{border-top-color:#fff}.flatpickr-calendar:focus{outline:0}.flatpickr-wrapper{position:relative;display:inline-block}.flatpickr-months{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-months .flatpickr-month{background:0 0;color:#3c3f40;fill:#3c3f40;height:34px;line-height:1;text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.flatpickr-months .flatpickr-next-month,.flatpickr-months .flatpickr-prev-month{text-decoration:none;cursor:pointer;position:absolute;top:0;height:34px;padding:10px;z-index:3;color:#3c3f40;fill:#3c3f40}.flatpickr-months .flatpickr-next-month.flatpickr-disabled,.flatpickr-months .flatpickr-prev-month.flatpickr-disabled{display:none}.flatpickr-months .flatpickr-next-month i,.flatpickr-months .flatpickr-prev-month i{position:relative}.flatpickr-months .flatpickr-next-month.flatpickr-prev-month,.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month{left:0}.flatpickr-months .flatpickr-next-month.flatpickr-next-month,.flatpickr-months .flatpickr-prev-month.flatpickr-next-month{right:0}.flatpickr-months .flatpickr-next-month:hover,.flatpickr-months .flatpickr-prev-month:hover{color:#f64747}.flatpickr-months .flatpickr-next-month:hover svg,.flatpickr-months .flatpickr-prev-month:hover svg{fill:#f64747}.flatpickr-months .flatpickr-next-month svg,.flatpickr-months .flatpickr-prev-month svg{width:14px;height:14px}.flatpickr-months .flatpickr-next-month svg path,.flatpickr-months .flatpickr-prev-month svg path{-webkit-transition:fill .1s;transition:fill .1s;fill:inherit}.numInputWrapper{position:relative;height:auto}.numInputWrapper input,.numInputWrapper span{display:inline-block}.numInputWrapper input{width:100%}.numInputWrapper input::-ms-clear{display:none}.numInputWrapper input::-webkit-inner-spin-button,.numInputWrapper input::-webkit-outer-spin-button{margin:0;-webkit-appearance:none}.numInputWrapper span{position:absolute;right:0;width:14px;padding:0 4px 0 2px;height:50%;line-height:50%;opacity:0;cursor:pointer;border:1px solid rgba(64,72,72,.15);-webkit-box-sizing:border-box;box-sizing:border-box}.numInputWrapper span:hover{background:rgba(0,0,0,.1)}.numInputWrapper span:active{background:rgba(0,0,0,.2)}.numInputWrapper span:after{display:block;content:"";position:absolute}.numInputWrapper span.arrowUp{top:0;border-bottom:0}.numInputWrapper span.arrowUp:after{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:4px solid rgba(64,72,72,.6);top:26%}.numInputWrapper span.arrowDown{top:50%}.numInputWrapper span.arrowDown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(64,72,72,.6);top:40%}.numInputWrapper span svg{width:inherit;height:auto}.numInputWrapper span svg path{fill:rgba(60,63,64,.5)}.numInputWrapper:hover{background:rgba(0,0,0,.05)}.numInputWrapper:hover span{opacity:1}.flatpickr-current-month{font-size:135%;line-height:inherit;font-weight:300;color:inherit;position:absolute;width:75%;left:12.5%;padding:7.48px 0 0 0;line-height:1;height:34px;display:inline-block;text-align:center;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.flatpickr-current-month span.cur-month{font-family:inherit;font-weight:700;color:inherit;display:inline-block;margin-left:.5ch;padding:0}.flatpickr-current-month span.cur-month:hover{background:rgba(0,0,0,.05)}.flatpickr-current-month .numInputWrapper{width:6ch;display:inline-block}.flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:#3c3f40}.flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:#3c3f40}.flatpickr-current-month input.cur-year{background:0 0;-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;cursor:text;padding:0 0 0 .5ch;margin:0;display:inline-block;font-size:inherit;font-family:inherit;font-weight:300;line-height:inherit;height:auto;border:0;border-radius:0;vertical-align:initial;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-current-month input.cur-year:focus{outline:0}.flatpickr-current-month input.cur-year[disabled],.flatpickr-current-month input.cur-year[disabled]:hover{font-size:100%;color:rgba(60,63,64,.5);background:0 0;pointer-events:none}.flatpickr-current-month .flatpickr-monthDropdown-months{appearance:menulist;background:0 0;border:none;border-radius:0;box-sizing:border-box;color:inherit;cursor:pointer;font-size:inherit;font-family:inherit;font-weight:300;height:auto;line-height:inherit;margin:-1px 0 0 0;outline:0;padding:0 0 0 .5ch;position:relative;vertical-align:initial;-webkit-box-sizing:border-box;-webkit-appearance:menulist;-moz-appearance:menulist;width:auto}.flatpickr-current-month .flatpickr-monthDropdown-months:active,.flatpickr-current-month .flatpickr-monthDropdown-months:focus{outline:0}.flatpickr-current-month .flatpickr-monthDropdown-months:hover{background:rgba(0,0,0,.05)}.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month{background-color:transparent;outline:0;padding:0}.flatpickr-weekdays{background:0 0;text-align:center;overflow:hidden;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:28px}.flatpickr-weekdays .flatpickr-weekdaycontainer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}span.flatpickr-weekday{cursor:default;font-size:90%;background:0 0;color:rgba(0,0,0,.54);line-height:1;margin:0;text-align:center;display:block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;font-weight:bolder}.dayContainer,.flatpickr-weeks{padding:1px 0 0 0}.flatpickr-days{position:relative;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;width:307.875px}.flatpickr-days:focus{outline:0}.dayContainer{padding:0;outline:0;text-align:left;width:307.875px;min-width:307.875px;max-width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-wrap:wrap;-ms-flex-pack:justify;-webkit-justify-content:space-around;justify-content:space-around;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.dayContainer+.dayContainer{-webkit-box-shadow:-1px 0 0 #eee;box-shadow:-1px 0 0 #eee}.flatpickr-day{background:0 0;border:1px solid transparent;border-radius:150px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#404848;cursor:pointer;font-weight:400;width:14.2857143%;-webkit-flex-basis:14.2857143%;-ms-flex-preferred-size:14.2857143%;flex-basis:14.2857143%;max-width:39px;height:39px;line-height:39px;margin:0;display:inline-block;position:relative;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.flatpickr-day.inRange,.flatpickr-day.nextMonthDay.inRange,.flatpickr-day.nextMonthDay.today.inRange,.flatpickr-day.nextMonthDay:focus,.flatpickr-day.nextMonthDay:hover,.flatpickr-day.prevMonthDay.inRange,.flatpickr-day.prevMonthDay.today.inRange,.flatpickr-day.prevMonthDay:focus,.flatpickr-day.prevMonthDay:hover,.flatpickr-day.today.inRange,.flatpickr-day:focus,.flatpickr-day:hover{cursor:pointer;outline:0;background:#e9e9e9;border-color:#e9e9e9}.flatpickr-day.today{border-color:#f64747}.flatpickr-day.today:focus,.flatpickr-day.today:hover{border-color:#f64747;background:#f64747;color:#fff}.flatpickr-day.endRange,.flatpickr-day.endRange.inRange,.flatpickr-day.endRange.nextMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.endRange:focus,.flatpickr-day.endRange:hover,.flatpickr-day.selected,.flatpickr-day.selected.inRange,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.selected:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange,.flatpickr-day.startRange.inRange,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.startRange:focus,.flatpickr-day.startRange:hover{background:#4f99ff;-webkit-box-shadow:none;box-shadow:none;color:#fff;border-color:#4f99ff}.flatpickr-day.endRange.startRange,.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange{border-radius:50px 0 0 50px}.flatpickr-day.endRange.endRange,.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange{border-radius:0 50px 50px 0}.flatpickr-day.endRange.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.selected.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange+.endRange:not(:nth-child(7n+1)){-webkit-box-shadow:-10px 0 0 #4f99ff;box-shadow:-10px 0 0 #4f99ff}.flatpickr-day.endRange.startRange.endRange,.flatpickr-day.selected.startRange.endRange,.flatpickr-day.startRange.startRange.endRange{border-radius:50px}.flatpickr-day.inRange{border-radius:0;-webkit-box-shadow:-5px 0 0 #e9e9e9,5px 0 0 #e9e9e9;box-shadow:-5px 0 0 #e9e9e9,5px 0 0 #e9e9e9}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover,.flatpickr-day.nextMonthDay,.flatpickr-day.notAllowed,.flatpickr-day.notAllowed.nextMonthDay,.flatpickr-day.notAllowed.prevMonthDay,.flatpickr-day.prevMonthDay{color:rgba(64,72,72,.3);background:0 0;border-color:#e9e9e9;cursor:default}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover{cursor:not-allowed;color:rgba(64,72,72,.1)}.flatpickr-day.week.selected{border-radius:0;-webkit-box-shadow:-5px 0 0 #4f99ff,5px 0 0 #4f99ff;box-shadow:-5px 0 0 #4f99ff,5px 0 0 #4f99ff}.flatpickr-day.hidden{visibility:hidden}.rangeMode .flatpickr-day{margin-top:1px}.flatpickr-weekwrapper{float:left}.flatpickr-weekwrapper .flatpickr-weeks{padding:0 12px;-webkit-box-shadow:1px 0 0 #eee;box-shadow:1px 0 0 #eee}.flatpickr-weekwrapper .flatpickr-weekday{float:none;width:100%;line-height:28px}.flatpickr-weekwrapper span.flatpickr-day,.flatpickr-weekwrapper span.flatpickr-day:hover{display:block;width:100%;max-width:none;color:rgba(64,72,72,.3);background:0 0;cursor:default;border:none}.flatpickr-innerContainer{display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.flatpickr-rContainer{display:inline-block;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}.flatpickr-time{text-align:center;outline:0;display:block;height:0;line-height:40px;max-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-time:after{content:"";display:table;clear:both}.flatpickr-time .numInputWrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:40%;height:40px;float:left}.flatpickr-time .numInputWrapper span.arrowUp:after{border-bottom-color:#404848}.flatpickr-time .numInputWrapper span.arrowDown:after{border-top-color:#404848}.flatpickr-time.hasSeconds .numInputWrapper{width:26%}.flatpickr-time.time24hr .numInputWrapper{width:49%}.flatpickr-time input{background:0 0;-webkit-box-shadow:none;box-shadow:none;border:0;border-radius:0;text-align:center;margin:0;padding:0;height:inherit;line-height:inherit;color:#404848;font-size:14px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-time input.flatpickr-hour{font-weight:700}.flatpickr-time input.flatpickr-minute,.flatpickr-time input.flatpickr-second{font-weight:400}.flatpickr-time input:focus{outline:0;border:0}.flatpickr-time .flatpickr-am-pm,.flatpickr-time .flatpickr-time-separator{height:inherit;float:left;line-height:inherit;color:#404848;font-weight:700;width:2%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.flatpickr-time .flatpickr-am-pm{outline:0;width:18%;cursor:pointer;text-align:center;font-weight:400}.flatpickr-time .flatpickr-am-pm:focus,.flatpickr-time .flatpickr-am-pm:hover,.flatpickr-time input:focus,.flatpickr-time input:hover{background:#f1f1f1}.flatpickr-input[readonly]{cursor:pointer}@-webkit-keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.flatpickr-calendar{width:307.875px}.dayContainer{padding:0;border-right:0}span.flatpickr-day,span.flatpickr-day.nextMonthDay,span.flatpickr-day.prevMonthDay{border-radius:0!important;border:1px solid #e9e9e9;max-width:none;border-right-color:transparent}span.flatpickr-day.nextMonthDay:nth-child(n+8),span.flatpickr-day.prevMonthDay:nth-child(n+8),span.flatpickr-day:nth-child(n+8){border-top-color:transparent}span.flatpickr-day.nextMonthDay:nth-child(7n-6),span.flatpickr-day.prevMonthDay:nth-child(7n-6),span.flatpickr-day:nth-child(7n-6){border-left:0}span.flatpickr-day.nextMonthDay:nth-child(n+36),span.flatpickr-day.prevMonthDay:nth-child(n+36),span.flatpickr-day:nth-child(n+36){border-bottom:0}span.flatpickr-day.nextMonthDay:nth-child(-n+7),span.flatpickr-day.prevMonthDay:nth-child(-n+7),span.flatpickr-day:nth-child(-n+7){margin-top:0}span.flatpickr-day.nextMonthDay.today:not(.selected),span.flatpickr-day.prevMonthDay.today:not(.selected),span.flatpickr-day.today:not(.selected){border-color:#e9e9e9;border-right-color:transparent;border-top-color:transparent;border-bottom-color:#f64747}span.flatpickr-day.nextMonthDay.today:not(.selected):hover,span.flatpickr-day.prevMonthDay.today:not(.selected):hover,span.flatpickr-day.today:not(.selected):hover{border:1px solid #f64747}span.flatpickr-day.endRange,span.flatpickr-day.nextMonthDay.endRange,span.flatpickr-day.nextMonthDay.startRange,span.flatpickr-day.prevMonthDay.endRange,span.flatpickr-day.prevMonthDay.startRange,span.flatpickr-day.startRange{border-color:#4f99ff}span.flatpickr-day.nextMonthDay.selected,span.flatpickr-day.nextMonthDay.today,span.flatpickr-day.prevMonthDay.selected,span.flatpickr-day.prevMonthDay.today,span.flatpickr-day.selected,span.flatpickr-day.today{z-index:2}.rangeMode .flatpickr-day{margin-top:-1px}.flatpickr-weekwrapper .flatpickr-weeks{-webkit-box-shadow:none;box-shadow:none}.flatpickr-weekwrapper span.flatpickr-day{border:0;margin:-1px 0 0 -1px}.hasWeeks .flatpickr-days{border-right:0}@media screen and (min-width:0\0) and (min-resolution:+72dpi){span.flatpickr-day{display:block;-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}} \ No newline at end of file diff --git a/website/appphp/static/vendors/flatpickr/types/globals.d.ts b/website/appphp/static/vendors/flatpickr/types/globals.d.ts deleted file mode 100644 index a36e45b4..00000000 --- a/website/appphp/static/vendors/flatpickr/types/globals.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Options } from "./options"; -import { Instance, FlatpickrFn } from "./instance"; -declare global { - interface HTMLElement { - flatpickr: (config?: Options) => Instance; - _flatpickr?: Instance; - } - interface NodeList { - flatpickr: (config?: Options) => Instance | Instance[]; - } - interface HTMLCollection { - flatpickr: (config?: Options) => Instance | Instance[]; - } - interface Window { - flatpickr: FlatpickrFn; - } - interface Date { - fp_incr: (n: number) => Date; - } -} diff --git a/website/appphp/static/vendors/flatpickr/types/instance.d.ts b/website/appphp/static/vendors/flatpickr/types/instance.d.ts deleted file mode 100644 index 2a93500c..00000000 --- a/website/appphp/static/vendors/flatpickr/types/instance.d.ts +++ /dev/null @@ -1,118 +0,0 @@ -import { DateOption, Options, ParsedOptions } from "./options"; -import { Locale, CustomLocale, key as LocaleKey } from "./locale"; -import { RevFormat, Formats, TokenRegex } from "../utils/formatting"; -export interface Elements { - element: HTMLElement; - input: HTMLInputElement; - altInput?: HTMLInputElement; - _input: HTMLInputElement; - mobileInput?: HTMLInputElement; - mobileFormatStr?: string; - selectedDateElem?: DayElement; - todayDateElem?: DayElement; - _positionElement: HTMLElement; - weekdayContainer: HTMLDivElement; - calendarContainer: HTMLDivElement; - innerContainer?: HTMLDivElement; - rContainer?: HTMLDivElement; - daysContainer?: HTMLDivElement; - days: HTMLDivElement; - weekWrapper?: HTMLDivElement; - weekNumbers?: HTMLDivElement; - monthNav: HTMLDivElement; - monthsDropdownContainer: HTMLSelectElement; - yearElements: HTMLInputElement[]; - monthElements: HTMLSpanElement[]; - currentYearElement: HTMLInputElement; - currentMonthElement: HTMLSpanElement; - _hidePrevMonthArrow: boolean; - _hideNextMonthArrow: boolean; - prevMonthNav: HTMLElement; - nextMonthNav: HTMLElement; - timeContainer?: HTMLDivElement; - hourElement?: HTMLInputElement; - minuteElement?: HTMLInputElement; - secondElement?: HTMLInputElement; - amPM?: HTMLSpanElement; - pluginElements: Node[]; -} -export interface Formatting { - revFormat: RevFormat; - formats: Formats; - tokenRegex: TokenRegex; -} -export declare type Instance = Elements & Formatting & { - minRangeDate?: Date; - maxRangeDate?: Date; - now: Date; - latestSelectedDateObj?: Date; - _selectedDateObj?: Date; - selectedDates: Date[]; - _initialDate: Date; - config: ParsedOptions; - loadedPlugins: string[]; - l10n: Locale; - currentYear: number; - currentMonth: number; - isOpen: boolean; - isMobile: boolean; - minDateHasTime: boolean; - maxDateHasTime: boolean; - showTimeInput: boolean; - _showTimeInput: boolean; - changeMonth: (value: number, isOffset?: boolean, fromKeyboard?: boolean) => void; - changeYear: (year: number) => void; - clear: (emitChangeEvent?: boolean, toInitial?: boolean) => void; - close: () => void; - destroy: () => void; - isEnabled: (date: DateOption, timeless?: boolean) => boolean; - jumpToDate: (date?: DateOption, triggerChange?: boolean) => void; - open: (e?: FocusEvent | MouseEvent, positionElement?: HTMLElement) => void; - redraw: () => void; - set: (option: keyof Options | { - [k in keyof Options]?: Options[k]; - }, value?: any) => void; - setDate: (date: DateOption | DateOption[], triggerChange?: boolean, format?: string) => void; - toggle: () => void; - pad: (num: string | number) => string; - parseDate: (date: Date | string | number, givenFormat?: string, timeless?: boolean) => Date | undefined; - formatDate: (dateObj: Date, frmt: string) => string; - _handlers: { - event: string; - element: Element; - handler: (e?: Event) => void; - options?: { - capture?: boolean; - }; - }[]; - _bind: (element: E | E[], event: string | string[], handler: (e?: any) => void) => void; - _createElement: (tag: keyof HTMLElementTagNameMap, className: string, content?: string) => E; - _setHoursFromDate: (date: Date) => void; - _debouncedChange: () => void; - __hideNextMonthArrow: boolean; - __hidePrevMonthArrow: boolean; - _positionCalendar: (customPositionElement?: HTMLElement) => void; - utils: { - getDaysInMonth: (month?: number, year?: number) => number; - }; -}; -export interface FlatpickrFn { - (selector: Node, config?: Options): Instance; - (selector: ArrayLike, config?: Options): Instance[]; - (selector: string, config?: Options): Instance | Instance[]; - defaultConfig: Partial; - l10ns: { - [k in LocaleKey]?: CustomLocale; - } & { - default: Locale; - }; - localize: (l10n: CustomLocale) => void; - setDefaults: (config: Options) => void; - parseDate: (date: DateOption, format?: string, timeless?: boolean) => Date | undefined; - formatDate: (date: Date, format: string) => string; - compareDates: (date1: Date, date2: Date, timeless?: boolean) => number; -} -export declare type DayElement = HTMLSpanElement & { - dateObj: Date; - $i: number; -}; diff --git a/website/appphp/static/vendors/flatpickr/types/locale.d.ts b/website/appphp/static/vendors/flatpickr/types/locale.d.ts deleted file mode 100644 index 75a66063..00000000 --- a/website/appphp/static/vendors/flatpickr/types/locale.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -export declare type Locale = { - weekdays: { - shorthand: [string, string, string, string, string, string, string]; - longhand: [string, string, string, string, string, string, string]; - }; - months: { - shorthand: [string, string, string, string, string, string, string, string, string, string, string, string]; - longhand: [string, string, string, string, string, string, string, string, string, string, string, string]; - }; - daysInMonth: [number, number, number, number, number, number, number, number, number, number, number, number]; - firstDayOfWeek: number; - ordinal: (nth: number) => string; - rangeSeparator: string; - weekAbbreviation: string; - scrollTitle: string; - toggleTitle: string; - amPM: [string, string]; - yearAriaLabel: string; - hourAriaLabel: string; - minuteAriaLabel: string; - time_24hr: boolean; -}; -export declare type CustomLocale = { - ordinal?: Locale["ordinal"]; - daysInMonth?: Locale["daysInMonth"]; - firstDayOfWeek?: Locale["firstDayOfWeek"]; - rangeSeparator?: Locale["rangeSeparator"]; - weekAbbreviation?: Locale["weekAbbreviation"]; - toggleTitle?: Locale["toggleTitle"]; - scrollTitle?: Locale["scrollTitle"]; - yearAriaLabel?: string; - hourAriaLabel?: string; - minuteAriaLabel?: string; - amPM?: Locale["amPM"]; - time_24hr?: Locale["time_24hr"]; - weekdays: { - shorthand: [string, string, string, string, string, string, string]; - longhand: [string, string, string, string, string, string, string]; - }; - months: { - shorthand: [string, string, string, string, string, string, string, string, string, string, string, string]; - longhand: [string, string, string, string, string, string, string, string, string, string, string, string]; - }; -}; -export declare type key = "ar" | "at" | "az" | "be" | "bg" | "bn" | "bs" | "cat" | "cs" | "cy" | "da" | "de" | "default" | "en" | "eo" | "es" | "et" | "fa" | "fi" | "fo" | "fr" | "gr" | "he" | "hi" | "hr" | "hu" | "id" | "is" | "it" | "ja" | "ka" | "ko" | "km" | "kz" | "lt" | "lv" | "mk" | "mn" | "ms" | "my" | "nl" | "no" | "pa" | "pl" | "pt" | "ro" | "ru" | "si" | "sk" | "sl" | "sq" | "sr" | "sv" | "th" | "tr" | "uk" | "vn" | "zh" | "zh_tw" | "lu"; diff --git a/website/appphp/static/vendors/flatpickr/types/options.d.ts b/website/appphp/static/vendors/flatpickr/types/options.d.ts deleted file mode 100644 index 45f52dcc..00000000 --- a/website/appphp/static/vendors/flatpickr/types/options.d.ts +++ /dev/null @@ -1,144 +0,0 @@ -import { Instance } from "./instance"; -import { CustomLocale, key as LocaleKey, Locale } from "./locale"; -export declare type DateOption = Date | string | number; -export declare type DateRangeLimit = { - from: D; - to: D; -}; -export declare type DateLimit = D | DateRangeLimit | ((date: Date) => boolean); -export declare type Hook = (dates: Date[], currentDateString: string, self: Instance, data?: any) => void; -export declare type HookKey = "onChange" | "onClose" | "onDayCreate" | "onDestroy" | "onKeyDown" | "onMonthChange" | "onOpen" | "onParseConfig" | "onReady" | "onValueUpdate" | "onYearChange" | "onPreCalendarPosition"; -export declare const HOOKS: HookKey[]; -export declare type Plugin = (fp: Instance & E) => Options; -export interface BaseOptions { - allowInput: boolean; - altFormat: string; - altInput: boolean; - altInputClass: string; - animate: boolean; - appendTo: HTMLElement; - ariaDateFormat: string; - clickOpens: boolean; - closeOnSelect: boolean; - conjunction: string; - dateFormat: string; - defaultDate: DateOption | DateOption[]; - defaultHour: number; - defaultMinute: number; - defaultSeconds: number; - disable: DateLimit[]; - disableMobile: boolean; - enable: DateLimit[]; - enableSeconds: boolean; - enableTime: boolean; - errorHandler: (e: Error) => void; - formatDate: (date: Date, format: string, locale: Locale) => string; - getWeek: (date: Date) => string | number; - hourIncrement: number; - ignoredFocusElements: HTMLElement[]; - inline: boolean; - locale: LocaleKey | CustomLocale; - maxDate: DateOption; - maxTime: DateOption; - minDate: DateOption; - minTime: DateOption; - minuteIncrement: number; - mode: "single" | "multiple" | "range" | "time"; - monthSelectorType: "dropdown" | "static"; - nextArrow: string; - noCalendar: boolean; - now?: DateOption; - onChange: Hook | Hook[]; - onClose: Hook | Hook[]; - onDayCreate: Hook | Hook[]; - onDestroy: Hook | Hook[]; - onKeyDown: Hook | Hook[]; - onMonthChange: Hook | Hook[]; - onOpen: Hook | Hook[]; - onParseConfig: Hook | Hook[]; - onReady: Hook | Hook[]; - onValueUpdate: Hook | Hook[]; - onYearChange: Hook | Hook[]; - onPreCalendarPosition: Hook | Hook[]; - parseDate: (date: string, format: string) => Date; - plugins: Plugin[]; - position: "auto" | "above" | "below"; - positionElement: Element; - prevArrow: string; - shorthandCurrentMonth: boolean; - static: boolean; - showMonths?: number; - time_24hr: boolean; - weekNumbers: boolean; - wrap: boolean; -} -export declare type Options = Partial; -export interface ParsedOptions { - _disable: DateLimit[]; - _enable: DateLimit[]; - _maxDate?: Date; - _maxTime?: Date; - _minDate?: Date; - _minTime?: Date; - allowInput: boolean; - altFormat: string; - altInput: boolean; - altInputClass: string; - animate: boolean; - appendTo?: HTMLElement; - ariaDateFormat: string; - clickOpens: boolean; - closeOnSelect: boolean; - conjunction: string; - dateFormat: string; - defaultDate?: Date | Date[]; - defaultHour: number; - defaultMinute: number; - defaultSeconds: number; - disable: DateLimit[]; - disableMobile: boolean; - enable: DateLimit[]; - enableSeconds: boolean; - enableTime: boolean; - errorHandler: (err: Error) => void; - formatDate?: Options["formatDate"]; - getWeek: (date: Date) => string | number; - hourIncrement: number; - ignoredFocusElements: HTMLElement[]; - inline: boolean; - locale: LocaleKey | CustomLocale; - maxDate?: Date; - maxTime?: Date; - minDate?: Date; - minTime?: Date; - minuteIncrement: number; - mode: BaseOptions["mode"]; - monthSelectorType: string; - nextArrow: string; - noCalendar: boolean; - now: Date; - onChange: Hook[]; - onClose: Hook[]; - onDayCreate: Hook[]; - onDestroy: Hook[]; - onKeyDown: Hook[]; - onMonthChange: Hook[]; - onOpen: Hook[]; - onParseConfig: Hook[]; - onReady: Hook[]; - onValueUpdate: Hook[]; - onYearChange: Hook[]; - onPreCalendarPosition: Hook[]; - parseDate?: BaseOptions["parseDate"]; - plugins: Plugin[]; - position: BaseOptions["position"]; - positionElement?: HTMLElement; - prevArrow: string; - shorthandCurrentMonth: boolean; - showMonths: number; - static: boolean; - time_24hr: boolean; - weekNumbers: boolean; - wrap: boolean; -} -export declare const defaults: ParsedOptions; diff --git a/website/appphp/static/vendors/flatpickr/typings.d.ts b/website/appphp/static/vendors/flatpickr/typings.d.ts deleted file mode 100644 index fb32d888..00000000 --- a/website/appphp/static/vendors/flatpickr/typings.d.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { FlatpickrFn } from "./types/instance"; -import { Instance as _Instance } from "./types/instance"; -import { - Options as _Options, - Hook as _Hook, - HookKey as _HookKey, - ParsedOptions as _ParsedOptions, - DateLimit as _DateLimit, - DateOption as _DateOption, - DateRangeLimit as _DateRangeLimit, - Plugin as _Plugin, -} from "./types/options"; - -import { - Locale as _Locale, - CustomLocale as _CustomLocale, -} from "./types/locale"; - -declare var flatpickr: FlatpickrFn; - -declare namespace flatpickr { - export type Instance = _Instance; - export type CustomLocale = _CustomLocale; - export type Locale = _Locale; - - export namespace Options { - export type Options = _Options; - export type Hook = _Hook; - export type HookKey = _HookKey; - export type ParsedOptions = _ParsedOptions; - export type DateLimit = _DateLimit; - export type DateOption = _DateOption; - export type DateRangeLimit = _DateRangeLimit; - export type Plugin = _Plugin; - } -} - -export default flatpickr; diff --git a/website/appphp/static/vendors/flatpickr/utils/dates.d.ts b/website/appphp/static/vendors/flatpickr/utils/dates.d.ts deleted file mode 100644 index 962ff6c5..00000000 --- a/website/appphp/static/vendors/flatpickr/utils/dates.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Locale } from "../types/locale"; -import { ParsedOptions } from "../types/options"; -export interface FormatterArgs { - config?: ParsedOptions; - l10n?: Locale; -} -export declare const createDateFormatter: ({ config, l10n, }: FormatterArgs) => (dateObj: Date, frmt: string, overrideLocale?: Locale | undefined) => string; -export declare const createDateParser: ({ config, l10n }: { - config?: ParsedOptions | undefined; - l10n?: Locale | undefined; -}) => (date: string | number | Date, givenFormat?: string | undefined, timeless?: boolean | undefined, customLocale?: Locale | undefined) => Date | undefined; -export declare function compareDates(date1: Date, date2: Date, timeless?: boolean): number; -export declare function compareTimes(date1: Date, date2: Date): number; -export declare const isBetween: (ts: number, ts1: number, ts2: number) => boolean; -export declare const duration: { - DAY: number; -}; diff --git a/website/appphp/static/vendors/flatpickr/utils/dom.d.ts b/website/appphp/static/vendors/flatpickr/utils/dom.d.ts deleted file mode 100644 index b15f309c..00000000 --- a/website/appphp/static/vendors/flatpickr/utils/dom.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export declare function toggleClass(elem: HTMLElement, className: string, bool: boolean): void; -export declare function createElement(tag: keyof HTMLElementTagNameMap, className: string, content?: string): T; -export declare function clearNode(node: HTMLElement): void; -export declare function findParent(node: Element, condition: (n: Element) => boolean): Element | undefined; -export declare function createNumberInput(inputClassName: string, opts?: Record): HTMLDivElement; -export declare function getEventTarget(event: Event): EventTarget | null; diff --git a/website/appphp/static/vendors/flatpickr/utils/formatting.d.ts b/website/appphp/static/vendors/flatpickr/utils/formatting.d.ts deleted file mode 100644 index b4303240..00000000 --- a/website/appphp/static/vendors/flatpickr/utils/formatting.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Locale } from "../types/locale"; -import { ParsedOptions } from "../types/options"; -export declare type token = "D" | "F" | "G" | "H" | "J" | "K" | "M" | "S" | "U" | "W" | "Y" | "Z" | "d" | "h" | "i" | "j" | "l" | "m" | "n" | "s" | "u" | "w" | "y"; -export declare const monthToStr: (monthNumber: number, shorthand: boolean, locale: Locale) => string; -export declare type RevFormatFn = (date: Date, data: string, locale: Locale) => Date | void | undefined; -export declare type RevFormat = Record; -export declare const revFormat: RevFormat; -export declare type TokenRegex = { - [k in token]: string; -}; -export declare const tokenRegex: TokenRegex; -export declare type Formats = Record string | number>; -export declare const formats: Formats; diff --git a/website/appphp/static/vendors/flatpickr/utils/index.d.ts b/website/appphp/static/vendors/flatpickr/utils/index.d.ts deleted file mode 100644 index 91adb420..00000000 --- a/website/appphp/static/vendors/flatpickr/utils/index.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -export declare const pad: (number: string | number) => string; -export declare const int: (bool: boolean) => 1 | 0; -export declare function debounce(func: F, wait: number, immediate?: boolean): (this: Function) => void; -export declare const arrayify: (obj: T | T[]) => T[]; -export declare type IncrementEvent = MouseEvent & { - delta: number; - type: "increment"; -}; diff --git a/website/appphp/static/vendors/flatpickr/utils/polyfills.d.ts b/website/appphp/static/vendors/flatpickr/utils/polyfills.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/website/appphp/static/vendors/moment/moment-with-locales.js b/website/appphp/static/vendors/moment/moment-with-locales.js deleted file mode 100644 index 0892cdc8..00000000 --- a/website/appphp/static/vendors/moment/moment-with-locales.js +++ /dev/null @@ -1,14765 +0,0 @@ -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - global.moment = factory() -}(this, (function () { 'use strict'; - - var hookCallback; - - function hooks () { - return hookCallback.apply(null, arguments); - } - - // This is done to register the method called with moment() - // without creating circular dependencies. - function setHookCallback (callback) { - hookCallback = callback; - } - - function isArray(input) { - return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]'; - } - - function isObject(input) { - // IE8 will treat undefined and null as object if it wasn't for - // input != null - return input != null && Object.prototype.toString.call(input) === '[object Object]'; - } - - function isObjectEmpty(obj) { - if (Object.getOwnPropertyNames) { - return (Object.getOwnPropertyNames(obj).length === 0); - } else { - var k; - for (k in obj) { - if (obj.hasOwnProperty(k)) { - return false; - } - } - return true; - } - } - - function isUndefined(input) { - return input === void 0; - } - - function isNumber(input) { - return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]'; - } - - function isDate(input) { - return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]'; - } - - function map(arr, fn) { - var res = [], i; - for (i = 0; i < arr.length; ++i) { - res.push(fn(arr[i], i)); - } - return res; - } - - function hasOwnProp(a, b) { - return Object.prototype.hasOwnProperty.call(a, b); - } - - function extend(a, b) { - for (var i in b) { - if (hasOwnProp(b, i)) { - a[i] = b[i]; - } - } - - if (hasOwnProp(b, 'toString')) { - a.toString = b.toString; - } - - if (hasOwnProp(b, 'valueOf')) { - a.valueOf = b.valueOf; - } - - return a; - } - - function createUTC (input, format, locale, strict) { - return createLocalOrUTC(input, format, locale, strict, true).utc(); - } - - function defaultParsingFlags() { - // We need to deep clone this object. - return { - empty : false, - unusedTokens : [], - unusedInput : [], - overflow : -2, - charsLeftOver : 0, - nullInput : false, - invalidMonth : null, - invalidFormat : false, - userInvalidated : false, - iso : false, - parsedDateParts : [], - meridiem : null, - rfc2822 : false, - weekdayMismatch : false - }; - } - - function getParsingFlags(m) { - if (m._pf == null) { - m._pf = defaultParsingFlags(); - } - return m._pf; - } - - var some; - if (Array.prototype.some) { - some = Array.prototype.some; - } else { - some = function (fun) { - var t = Object(this); - var len = t.length >>> 0; - - for (var 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); - var parsedParts = some.call(flags.parsedDateParts, function (i) { - return i != null; - }); - var isNowValid = !isNaN(m._d.getTime()) && - flags.overflow < 0 && - !flags.empty && - !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 = []; - - 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; - } - - var updateInProgress = false; - - // 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 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; - } - - // 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; - } - - 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 = []; - var arg; - for (var i = 0; i < arguments.length; i++) { - arg = ''; - if (typeof arguments[i] === 'object') { - arg += '\n[' + i + '] '; - for (var key in arguments[0]) { - 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 input instanceof Function || Object.prototype.toString.call(input) === '[object Function]'; - } - - function set (config) { - var prop, i; - for (i in config) { - 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; - } - - 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.replace(/MMMM|MM|DD|dddd/g, function (val) { - return val.slice(1); - }); - - return this._longDateFormat[key]; - } - - var defaultInvalidDate = 'Invalid date'; - - function invalidDate () { - return this._invalidDate; - } - - var defaultOrdinal = '%d'; - var 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', - 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 = []; - for (var u in unitsObj) { - units.push({unit: u, priority: priorities[u]}); - } - units.sort(function (a, b) { - return a.priority - b.priority; - }); - return units; - } - - 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?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g; - - var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g; - - var formatFunctions = {}; - - var 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 match1 = /\d/; // 0 - 9 - var match2 = /\d\d/; // 00 - 99 - var match3 = /\d{3}/; // 000 - 999 - var match4 = /\d{4}/; // 0000 - 9999 - var match6 = /[+-]?\d{6}/; // -999999 - 999999 - var match1to2 = /\d\d?/; // 0 - 99 - var match3to4 = /\d\d\d\d?/; // 999 - 9999 - var match5to6 = /\d\d\d\d\d\d?/; // 99999 - 999999 - var match1to3 = /\d{1,3}/; // 0 - 999 - var match1to4 = /\d{1,4}/; // 0 - 9999 - var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999 - - var matchUnsigned = /\d+/; // 0 - inf - var matchSigned = /[+-]?\d+/; // -inf - inf - - var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z - var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z - - var 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 - var 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; - - var 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; - var MONTH = 1; - var DATE = 2; - var HOUR = 3; - var MINUTE = 4; - var SECOND = 5; - var MILLISECOND = 6; - var WEEK = 7; - var WEEKDAY = 8; - - // FORMATTING - - addFormatToken('Y', 0, 0, function () { - var y = this.year(); - return y <= 9999 ? '' + y : '+' + 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; - } - - function isLeapYear(year) { - return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; - } - - // 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 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) { - 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); - for (var 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; - } - - 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 MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/; - var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'); - 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()]; - } - - var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'); - 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()); - } - - var defaultMonthsShortRegex = matchWord; - 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; - } - } - - var defaultMonthsRegex = matchWord; - 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'); - } - - 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; - // the Date.UTC function remaps years 0-99 to 1900-1999 - if (y < 100 && y >= 0) { - var 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('_'); - 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; - } - - var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'); - function localeWeekdaysShort (m) { - return (m === true) ? shiftWeekdays(this._weekdaysShort, this._week.dow) - : (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort; - } - - var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'); - 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; - } - } - - var defaultWeekdaysRegex = matchWord; - 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; - } - } - - var defaultWeekdaysShortRegex = matchWord; - 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; - } - } - - var defaultWeekdaysMinRegex = matchWord; - 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 = this.weekdaysMin(mom, ''); - shortp = this.weekdaysShort(mom, ''); - longp = 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); - for (i = 0; i < 7; i++) { - shortPieces[i] = regexEscape(shortPieces[i]); - longPieces[i] = regexEscape(longPieces[i]); - mixedPieces[i] = regexEscape(mixedPieces[i]); - } - - 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; - var 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; - var 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; - function localeMeridiem (hours, minutes, isLower) { - if (hours > 11) { - return isLower ? 'pm' : 'PM'; - } else { - return isLower ? 'am' : 'AM'; - } - } - - - // MOMENTS - - // 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. - var getSetHour = makeGetSet('Hours', true); - - 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 = {}; - var localeFamilies = {}; - var globalLocale; - - 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 && compareArrays(split, next, true) >= 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; - // TODO: Find a better way to register and load all the locales in Node - if (!locales[name] && (typeof module !== 'undefined') && - module && module.exports) { - try { - oldLocale = globalLocale._abbr; - var aliasedRequire = require; - aliasedRequire('./locale/' + name); - getSetGlobalLocale(oldLocale); - } catch (e) {} - } - 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; - // MERGE - tmpLocale = loadLocale(name); - if (tmpLocale != null) { - parentConfig = tmpLocale._config; - } - config = mergeConfigs(parentConfig, config); - 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; - } 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; - var 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; - } - - // 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; - - 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; - - var 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; - } - } - - // 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)?)?$/; - var 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)?)?$/; - - var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/; - - var 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}/], - // YYYYMM is NOT allowed by the standard - ['GGGG[W]WWE', /\d{4}W\d{3}/], - ['GGGG[W]WW', /\d{4}W\d{2}/, false], - ['YYYYDDD', /\d{7}/] - ]; - - // iso time formats and regexes - var 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/] - ]; - - var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i; - - // 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; - } - } - - // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3 - var 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}))$/; - - 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 indepentent 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; - } - - var 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 - }; - - 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); - var 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)); - if (match) { - var 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 iso format or fallback - 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; - } - - // 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' : '')); - } - ); - - // 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; - - 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]; - // console.log('token', token, 'parsedInput', parsedInput, - // 'regex', getParseRegexForToken(token, config)); - 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); - - 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; - - 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; - tempConfig = copyConfig({}, config); - if (config._useUTC != null) { - tempConfig._useUTC = config._useUTC; - } - tempConfig._f = config._f[i]; - configFromStringAndFormat(tempConfig); - - if (!isValid(tempConfig)) { - continue; - } - - // 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 (scoreToBeat == null || currentScore < scoreToBeat) { - scoreToBeat = currentScore; - bestMoment = tempConfig; - } - } - - extend(config, bestMoment || tempConfig); - } - - function configFromObject(config) { - if (config._d) { - return; - } - - var i = normalizeObjectUnits(config._i); - config._a = map([i.year, i.month, i.day || i.date, 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 (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(); - } - } - ); - - var 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) { - for (var key in m) { - if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) { - return false; - } - } - - var unitHasDecimal = false; - for (var 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); - } - } - - // FORMATTING - - function offset (token, separator) { - addFormatToken(token, 0, 0, function () { - var offset = this.utcOffset(); - var 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); - - if (matches === null) { - return null; - } - - var chunk = matches[matches.length - 1] || []; - var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; - var 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() / 15) * 15; - } - - // 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 = {}; - - copyConfig(c, this); - c = prepareConfig(c); - - if (c._a) { - var 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 - var 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)) { - 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; - } - - 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; - } - - val = typeof val === 'string' ? +val : val; - 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'); - var subtract = createAdder(-1, 'subtract'); - - 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) { - // 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'; - - var 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) { - // 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; - var 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'; - var zone = ''; - if (!this.isLocal()) { - func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone'; - zone = 'Z'; - } - var prefix = '[' + func + '("]'; - var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY'; - var datetime = '-MM-DD[T]HH:mm:ss.SSS'; - var 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; - var MS_PER_MINUTE = 60 * MS_PER_SECOND; - var MS_PER_HOUR = 60 * MS_PER_MINUTE; - var 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; - units = normalizeUnits(units); - if (units === undefined || units === 'millisecond' || !this.isValid()) { - return this; - } - - var 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; - units = normalizeUnits(units); - if (units === undefined || units === 'millisecond' || !this.isValid()) { - return this; - } - - var 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 - }; - } - - // 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 getWeeksInYear () { - var weekInfo = this.localeData()._week; - return weeksInYear(this.year(), 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; - 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); - } - // MOMENTS - - var 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; - proto.toJSON = toJSON; - proto.toString = toString; - proto.unix = unix; - proto.valueOf = valueOf; - proto.creationData = creationData; - 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.isoWeeksInYear = getISOWeeksInYear; - 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.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(); - var 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; - var 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; - - if (index != null) { - return get$1(format, (index + shift) % 7, field, 'day'); - } - - var i; - var out = []; - 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', { - 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; - var days = this._days; - var months = this._months; - var data = this._data; - var 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; - var months; - var 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'); - var asSeconds = makeAs('s'); - var asMinutes = makeAs('m'); - var asHours = makeAs('h'); - var asDays = makeAs('d'); - var asWeeks = makeAs('w'); - var asMonths = makeAs('M'); - var asQuarters = makeAs('Q'); - var 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'); - var seconds = makeGetter('seconds'); - var minutes = makeGetter('minutes'); - var hours = makeGetter('hours'); - var days = makeGetter('days'); - var months = makeGetter('months'); - var years = makeGetter('years'); - - function weeks () { - return absFloor(this.days() / 7); - } - - var round = Math.round; - var 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 - 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, locale) { - var duration = createDuration(posNegDuration).abs(); - var seconds = round(duration.as('s')); - var minutes = round(duration.as('m')); - var hours = round(duration.as('h')); - var days = round(duration.as('d')); - var months = round(duration.as('M')); - var years = round(duration.as('y')); - - var 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] || - 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 (withSuffix) { - if (!this.isValid()) { - return this.localeData().invalidDate(); - } - - var locale = this.localeData(); - var output = relativeTime$1(this, !withSuffix, 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; - var days = abs$1(this._days); - var months = abs$1(this._months); - var minutes, hours, years; - - // 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 - var Y = years; - var M = months; - var D = days; - var h = hours; - var m = minutes; - var s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : ''; - var total = this.asSeconds(); - - if (!total) { - // this is the same as C#'s (Noda) and python (isodate)... - // but not other JS (goog.date) - return 'P0D'; - } - - var totalSign = total < 0 ? '-' : ''; - var ymSign = sign(this._months) !== sign(total) ? '-' : ''; - var daysSign = sign(this._days) !== sign(total) ? '-' : ''; - var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : ''; - - return totalSign + 'P' + - (Y ? ymSign + Y + 'Y' : '') + - (M ? ymSign + M + 'M' : '') + - (D ? daysSign + D + 'D' : '') + - ((h || m || s) ? 'T' : '') + - (h ? hmsSign + h + 'H' : '') + - (m ? hmsSign + m + 'M' : '') + - (s ? 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; - - // Side effect imports - - // 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, 10) * 1000); - }); - addParseToken('x', function (input, array, config) { - config._d = new Date(toInt(input)); - }); - - // Side effect imports - - //! moment.js - - hooks.version = '2.24.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 - - hooks.defineLocale('ar-dz', { - 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 : 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 = 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-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('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') - }, - 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$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', { - 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, 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 : 'birneçə 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 : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.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 : '[བདུན་ཕྲག་རྗེས་མ], 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); - } - - 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('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'h[e]mm A', - LTS : 'h[e]mm:ss A', - L : 'DD/MM/YYYY', - LL : 'D [a viz] MMMM YYYY', - LLL : 'D [a viz] MMMM YYYY h[e]mm A', - LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A' - }, - 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. - } - }); - - //! 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$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('_'); - - var monthsParse = [/^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'. - var 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'; - } - break; - 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'; - } - break; - 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'; - } - break; - 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'; - } - break; - 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'; - } - break; - 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'; - } - break; - } - } - - hooks.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, - longMonthsParse : monthsParse, - shortMonthsParse : monthsParse, - 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'], - '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, - 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'], - '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, - 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'], - '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, - 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 = [ - 'އާދިއްތަ', - 'ހޯމަ', - 'އަންގާރަ', - 'ބުދަ', - 'ބުރާސްފަތި', - 'ހުކުރު', - 'ހޮނިހިރު' - ]; - - hooks.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 - - 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(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-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('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 : 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-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', - 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-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('eo', { - months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'), - monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_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 : 'D[-a de] MMMM, YYYY', - LLL : 'D[-a de] MMMM, YYYY HH:mm', - LLLL : 'dddd, [la] D[-a de] MMMM, 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 [je] LT', - lastDay : '[Hieraŭ je] LT', - lastWeek : '[pasinta] dddd [je] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'post %s', - past : 'antaŭ %s', - s : 'sekundoj', - ss : '%d sekundoj', - m : 'minuto', - mm : '%d minutoj', - h : 'horo', - hh : '%d horoj', - d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo - dd : '%d tagoj', - M : 'monato', - MM : '%d monatoj', - y : '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('_'); - - var monthsParse$1 = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i]; - var 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; - - 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$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$1, - longMonthsParse: monthsParse$1, - shortMonthsParse: monthsParse$1, - 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('_'); - - var 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]; - var 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-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$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 : '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('_'); - - var 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]; - var 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', { - 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$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', - 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. - } - }); - - //! 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': - return isFuture ? 'sekunnin' : 'sekuntia'; - 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('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 - - 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('_'), - 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|)/, - 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$5 = [ - 'Eanáir', 'Feabhra', 'Márta', 'Aibreán', 'Bealtaine', 'Méitheamh', 'Iúil', 'Lúnasa', 'Meán Fómhair', 'Deaireadh Fómhair', 'Samhain', 'Nollaig' - ]; - - var monthsShort$4 = ['Eaná', 'Feab', 'Márt', 'Aibr', 'Beal', 'Méit', 'Iúil', 'Lúna', 'Meán', 'Deai', 'Samh', 'Noll']; - - var weekdays$1 = ['Dé Domhnaigh', 'Dé Luain', 'Dé Máirt', 'Dé Céadaoin', 'Déardaoin', 'Dé hAoine', 'Dé Satharn']; - - var weekdaysShort = ['Dom', 'Lua', 'Mái', 'Céa', 'Déa', 'hAo', 'Sat']; - - var weekdaysMin = ['Do', 'Lu', 'Má', 'Ce', 'Dé', 'hA', 'Sa']; - - hooks.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é aig] 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í', - 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' - ]; - - var monthsShort$5 = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh']; - - var weekdays$2 = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne']; - - var weekdaysShort$1 = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis']; - - var weekdaysMin$1 = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa']; - - hooks.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 - - 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': ['thodde secondanim', 'thodde second'], - 'ss': [number + ' secondanim', number + ' second'], - 'm': ['eka mintan', 'ek minute'], - 'mm': [number + ' mintanim', number + ' mintam'], - 'h': ['eka voran', 'ek vor'], - 'hh': [number + ' voranim', number + ' voram'], - 'd': ['eka disan', 'ek dis'], - 'dd': [number + ' disanim', number + ' dis'], - 'M': ['eka mhoinean', 'ek mhoino'], - 'MM': [number + ' mhoineanim', number + ' mhoine'], - 'y': ['eka vorsan', 'ek voros'], - 'yy': [number + ' vorsanim', number + ' vorsam'] - }; - return withoutSuffix ? format[key][0] : format[key][1]; - } - - hooks.defineLocale('gom-latn', { - months : 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'), - monthsShort : 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'), - monthsParseExact : true, - weekdays : 'Aitar_Somar_Mongllar_Budvar_Brestar_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[achea] Do, YYYY, A h:mm [vazta]', - llll: 'ddd, D MMM YYYY, A h:mm [vazta]' - }, - calendar : { - sameDay: '[Aiz] LT', - nextDay: '[Faleam] LT', - nextWeek: '[Ieta to] dddd[,] LT', - lastDay: '[Kal] LT', - lastWeek: '[Fatlo] dddd[,] LT', - sameElse: 'L' - }, - relativeTime : { - future : '%s', - past : '%s adim', - 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}(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 : 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: /rati|sokalli|donparam|sanje/, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === 'rati') { - return hour < 4 ? hour : hour + 12; - } else if (meridiem === 'sokalli') { - 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 'sokalli'; - } 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 : '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$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 : 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$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: '[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('ja', { - 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/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 '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 : { - standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'), - format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_') - }, - monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'), - weekdays : { - standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'), - format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'), - isFormat: /(წინა|შემდეგ)/ - }, - weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'), - weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.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 : '[დღეს] LT[-ზე]', - nextDay : '[ხვალ] LT[-ზე]', - lastDay : '[გუშინ] LT[-ზე]', - nextWeek : '[შემდეგ] dddd LT[-ზე]', - lastWeek : '[წინა] dddd LT-ზე', - sameElse : 'L' - }, - relativeTime : { - future : function (s) { - return (/(წამი|წუთი|საათი|წელი)/).test(s) ? - s.replace(/ი$/, 'ში') : - s + 'ში'; - }, - past : function (s) { - if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) { - return s.replace(/(ი|ე)$/, 'ის წინ'); - } - if ((/წელი/).test(s)) { - return s.replace(/წელი$/, 'წლის წინ'); - } - }, - 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$7 = [ - 'کانونی دووەم', - 'شوبات', - 'ئازار', - 'نیسان', - 'ئایار', - 'حوزەیران', - 'تەمموز', - 'ئاب', - 'ئەیلوول', - 'تشرینی یەكەم', - 'تشرینی دووەم', - 'كانونی یەکەم' - ]; - - - hooks.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: '-чү' - }; - - 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$5(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$5, - mm : '%d Minutten', - h : processRelativeTime$5, - hh : '%d Stonnen', - d : processRelativeTime$5, - dd : '%d Deeg', - M : processRelativeTime$5, - MM : '%d Méint', - y : processRelativeTime$5, - 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 === 'रात्री') { - 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('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_april_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('_'); - - var monthsParse$4 = [/^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]; - var monthsRegex$5 = /^(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$5, - monthsShortRegex: monthsRegex$5, - 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$4, - longMonthsParse : monthsParse$4, - shortMonthsParse : monthsParse$4, - - 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('_'); - - var monthsParse$5 = [/^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]; - var 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; - - 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$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$5, - longMonthsParse : monthsParse$5, - shortMonthsParse : monthsParse$5, - - 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_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'), - weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'), - weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'), - weekdaysMin : 'su_må_ty_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 [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 - - 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._febr._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$6 = [/^янв/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$6, - longMonthsParse : monthsParse$6, - shortMonthsParse : monthsParse$6, - - // полные названия с падежами, по три буквы, для некоторых, по 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 = [ - 'جنوري', - 'فيبروري', - 'مارچ', - 'اپريل', - 'مئي', - 'جون', - 'جولاءِ', - 'آگسٽ', - 'سيپٽمبر', - 'آڪٽوبر', - 'نومبر', - 'ڊسمبر' - ]; - var days$1 = [ - 'آچر', - 'سومر', - 'اڱارو', - 'اربع', - 'خميس', - 'جمع', - 'ڇنڇر' - ]; - - hooks.defineLocale('sd', { - months : months$8, - monthsShort : months$8, - 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$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'; - } - break; - 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'; - } - break; - 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'; - } - break; - 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'; - } - break; - 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'; - } - break; - 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'; - } - break; - } - } - - hooks.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$6(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$6, - ss : processRelativeTime$6, - m : processRelativeTime$6, - mm : processRelativeTime$6, - h : processRelativeTime$6, - hh : processRelativeTime$6, - d : processRelativeTime$6, - dd : processRelativeTime$6, - M : processRelativeTime$6, - MM : processRelativeTime$6, - y : processRelativeTime$6, - yy : processRelativeTime$6 - }, - 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', - 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 : 'masiku %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 : 'minutu balun', - ss : 'minutu %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 - - 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. - } - }); - - var suffixes$4 = { - 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('_'), - 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$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 - - // 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$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 : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - function processRelativeTime$7(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 language 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('_') - }; - - if (m === true) { - return weekdays['nominative'].slice(1, 7).concat(weekdays['nominative'].slice(0, 1)); - } - if (!m) { - return weekdays['nominative']; - } - - var 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$a = [ - 'جنوری', - 'فروری', - 'مارچ', - 'اپریل', - 'مئی', - 'جون', - 'جولائی', - 'اگست', - 'ستمبر', - 'اکتوبر', - 'نومبر', - 'دسمبر' - ]; - var days$2 = [ - 'اتوار', - 'پیر', - 'منگل', - 'بدھ', - 'جمعرات', - 'جمعہ', - 'ہفتہ' - ]; - - hooks.defineLocale('ur', { - months : months$a, - monthsShort : months$a, - 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 : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.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 rồi 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 : '[下]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 年' - }, - 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 < 1130) { - return '上午'; - } else if (hm < 1230) { - 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-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/website/appphp/static/vendors/moment/moment-with-locales.min.js b/website/appphp/static/vendors/moment/moment-with-locales.min.js deleted file mode 100644 index d81e02ca..00000000 --- a/website/appphp/static/vendors/moment/moment-with-locales.min.js +++ /dev/null @@ -1 +0,0 @@ -!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 l(){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 o(e){return void 0===e}function m(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function u(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function M(e,a){var t,s=[];for(t=0;t>>0,s=0;sTe(e)?(d=e+1,_-Te(e)):(d=e,_),{year:d,dayOfYear:r}}function Ce(e,a,t){var s,n,d=Ne(e.year(),a,t),r=Math.floor((e.dayOfYear()-d-1)/7)+1;return r<1?s=r+Ie(n=e.year()-1,a,t):r>Ie(e.year(),a,t)?(s=r-Ie(e.year(),a,t),n=e.year()+1):(n=e.year(),s=r),{week:s,year:n}}function Ie(e,a,t){var s=Ne(e,a,t),n=Ne(e+1,a,t);return(Te(e)-s+n)/7}C("w",["ww",2],"wo","week"),C("W",["WW",2],"Wo","isoWeek"),O("week","w"),O("isoWeek","W"),E("week",5),E("isoWeek",5),ie("w",B),ie("ww",B,V),ie("W",B),ie("WW",B,V),Me(["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))}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"),O("day","d"),O("weekday","e"),O("isoWeekday","E"),E("day",11),E("weekday",11),E("isoWeekday",11),ie("d",B),ie("e",B),ie("E",B),ie("dd",function(e,a){return a.weekdaysMinRegex(e)}),ie("ddd",function(e,a){return a.weekdaysShortRegex(e)}),ie("dddd",function(e,a){return a.weekdaysRegex(e)}),Me(["dd","ddd","dddd"],function(e,a,t,s){var n=t._locale.weekdaysParse(e,s,t._strict);null!=n?a.d=n:Y(t).invalidWeekday=e}),Me(["d","e","E"],function(e,a,t,s){a[s]=g(e)});var Ge="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_");var Ve="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_");var Ke="Su_Mo_Tu_We_Th_Fr_Sa".split("_");var Ze=re;var $e=re;var Be=re;function qe(){function e(e,a){return a.length-e.length}var a,t,s,n,d,r=[],_=[],i=[],o=[];for(a=0;a<7;a++)t=c([2e3,1]).day(a),s=this.weekdaysMin(t,""),n=this.weekdaysShort(t,""),d=this.weekdays(t,""),r.push(s),_.push(n),i.push(d),o.push(s),o.push(n),o.push(d);for(r.sort(e),_.sort(e),i.sort(e),o.sort(e),a=0;a<7;a++)_[a]=me(_[a]),i[a]=me(i[a]),o[a]=me(o[a]);this._weekdaysRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+_.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Qe(){return this.hours()%12||12}function Xe(e,a){C(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),a)})}function ea(e,a){return a._meridiemParse}C("H",["HH",2],0,"hour"),C("h",["hh",2],0,Qe),C("k",["kk",2],0,function(){return this.hours()||24}),C("hmm",0,0,function(){return""+Qe.apply(this)+F(this.minutes(),2)}),C("hmmss",0,0,function(){return""+Qe.apply(this)+F(this.minutes(),2)+F(this.seconds(),2)}),C("Hmm",0,0,function(){return""+this.hours()+F(this.minutes(),2)}),C("Hmmss",0,0,function(){return""+this.hours()+F(this.minutes(),2)+F(this.seconds(),2)}),Xe("a",!0),Xe("A",!1),O("hour","h"),E("hour",13),ie("a",ea),ie("A",ea),ie("H",B),ie("h",B),ie("k",B),ie("HH",B,V),ie("hh",B,V),ie("kk",B,V),ie("hmm",q),ie("hmmss",Q),ie("Hmm",q),ie("Hmmss",Q),le(["H","HH"],Ye),le(["k","kk"],function(e,a,t){var s=g(e);a[Ye]=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[Ye]=g(e),Y(t).bigHour=!0}),le("hmm",function(e,a,t){var s=e.length-2;a[Ye]=g(e.substr(0,s)),a[ye]=g(e.substr(s)),Y(t).bigHour=!0}),le("hmmss",function(e,a,t){var s=e.length-4,n=e.length-2;a[Ye]=g(e.substr(0,s)),a[ye]=g(e.substr(s,2)),a[fe]=g(e.substr(n)),Y(t).bigHour=!0}),le("Hmm",function(e,a,t){var s=e.length-2;a[Ye]=g(e.substr(0,s)),a[ye]=g(e.substr(s))}),le("Hmmss",function(e,a,t){var s=e.length-4,n=e.length-2;a[Ye]=g(e.substr(0,s)),a[ye]=g(e.substr(s,2)),a[fe]=g(e.substr(n))});var aa,ta=Se("Hours",!0),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",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Oe,monthsShort:Pe,week:{dow:0,doy:6},weekdays:Ge,weekdaysMin:Ke,weekdaysShort:Ve,meridiemParse:/[ap]\.?m?\.?/i},na={},da={};function ra(e){return e?e.toLowerCase().replace("_","-"):e}function _a(e){var a=null;if(!na[e]&&"undefined"!=typeof module&&module&&module.exports)try{a=aa._abbr,require("./locale/"+e),ia(a)}catch(e){}return na[e]}function ia(e,a){var t;return e&&((t=o(a)?ma(e):oa(e,a))?aa=t:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),aa._abbr}function oa(e,a){if(null===a)return delete na[e],null;var t,s=sa;if(a.abbr=e,null!=na[e])S("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=_a(a.parentLocale)))return da[a.parentLocale]||(da[a.parentLocale]=[]),da[a.parentLocale].push({name:e,config:a}),null;s=t._config}return na[e]=new j(b(s,a)),da[e]&&da[e].forEach(function(e){oa(e.name,e.config)}),ia(e),na[e]}function ma(e){var a;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return aa;if(!_(e)){if(a=_a(e))return a;e=[e]}return function(e){for(var a,t,s,n,d=0;d=a&&r(n,t,!0)>=a-1)break;a--}d++}return aa}(e)}function ua(e){var a,t=e._a;return t&&-2===Y(e).overflow&&(a=t[Le]<0||11je(t[he],t[Le])?ce:t[Ye]<0||24Ie(t,d,r)?Y(e)._overflowWeeks=!0:null!=i?Y(e)._overflowWeekday=!0:(_=Re(t,s,n,d,r),e._a[he]=_.year,e._dayOfYear=_.dayOfYear)}(e),null!=e._dayOfYear&&(d=la(e._a[he],s[he]),(e._dayOfYear>Te(d)||0===e._dayOfYear)&&(Y(e)._overflowDayOfYear=!0),t=Je(d,0,e._dayOfYear),e._a[Le]=t.getUTCMonth(),e._a[ce]=t.getUTCDate()),a=0;a<3&&null==e._a[a];++a)e._a[a]=r[a]=s[a];for(;a<7;a++)e._a[a]=r[a]=null==e._a[a]?2===a?1:0:e._a[a];24===e._a[Ye]&&0===e._a[ye]&&0===e._a[fe]&&0===e._a[ke]&&(e._nextDay=!0,e._a[Ye]=0),e._d=(e._useUTC?Je:function(e,a,t,s,n,d,r){var _;return e<100&&0<=e?(_=new Date(e+400,a,t,s,n,d,r),isFinite(_.getFullYear())&&_.setFullYear(e)):_=new Date(e,a,t,s,n,d,r),_}).apply(null,r),n=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[Ye]=24),e._w&&void 0!==e._w.d&&e._w.d!==n&&(Y(e).weekdayMismatch=!0)}}var ha=/^\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)?)?$/,La=/^\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)?)?$/,ca=/Z|[+-]\d\d(?::?\d\d)?/,Ya=[["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/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],ya=[["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/]],fa=/^\/?Date\((\-?\d+)/i;function ka(e){var a,t,s,n,d,r,_=e._i,i=ha.exec(_)||La.exec(_);if(i){for(Y(e).iso=!0,a=0,t=Ya.length;at.valueOf():t.valueOf()this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},Mt.isLocal=function(){return!!this.isValid()&&!this._isUTC},Mt.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},Mt.isUtc=Ra,Mt.isUTC=Ra,Mt.zoneAbbr=function(){return this._isUTC?"UTC":""},Mt.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},Mt.dates=t("dates accessor is deprecated. Use date instead.",_t),Mt.months=t("months accessor is deprecated. Use month instead",Ae),Mt.years=t("years accessor is deprecated. Use year instead",ve),Mt.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()}),Mt.isDSTShifted=t("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!o(this._isDSTShifted))return this._isDSTShifted;var e={};if(k(e,this),(e=va(e))._a){var a=e._isUTC?c(e._a):Ha(e._a);this._isDSTShifted=this.isValid()&&0>> 0; - - for (var 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); - var parsedParts = some.call(flags.parsedDateParts, function (i) { - return i != null; - }); - var isNowValid = !isNaN(m._d.getTime()) && - flags.overflow < 0 && - !flags.empty && - !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 = []; - - 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; - } - - var updateInProgress = false; - - // 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 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; - } - - // 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; - } - - 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 = []; - var arg; - for (var i = 0; i < arguments.length; i++) { - arg = ''; - if (typeof arguments[i] === 'object') { - arg += '\n[' + i + '] '; - for (var key in arguments[0]) { - 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 input instanceof Function || Object.prototype.toString.call(input) === '[object Function]'; - } - - function set (config) { - var prop, i; - for (i in config) { - 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; - } - - 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.replace(/MMMM|MM|DD|dddd/g, function (val) { - return val.slice(1); - }); - - return this._longDateFormat[key]; - } - - var defaultInvalidDate = 'Invalid date'; - - function invalidDate () { - return this._invalidDate; - } - - var defaultOrdinal = '%d'; - var 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', - 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 = []; - for (var u in unitsObj) { - units.push({unit: u, priority: priorities[u]}); - } - units.sort(function (a, b) { - return a.priority - b.priority; - }); - return units; - } - - 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?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g; - - var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g; - - var formatFunctions = {}; - - var 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 match1 = /\d/; // 0 - 9 - var match2 = /\d\d/; // 00 - 99 - var match3 = /\d{3}/; // 000 - 999 - var match4 = /\d{4}/; // 0000 - 9999 - var match6 = /[+-]?\d{6}/; // -999999 - 999999 - var match1to2 = /\d\d?/; // 0 - 99 - var match3to4 = /\d\d\d\d?/; // 999 - 9999 - var match5to6 = /\d\d\d\d\d\d?/; // 99999 - 999999 - var match1to3 = /\d{1,3}/; // 0 - 999 - var match1to4 = /\d{1,4}/; // 0 - 9999 - var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999 - - var matchUnsigned = /\d+/; // 0 - inf - var matchSigned = /[+-]?\d+/; // -inf - inf - - var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z - var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z - - var 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 - var 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; - - var 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; - var MONTH = 1; - var DATE = 2; - var HOUR = 3; - var MINUTE = 4; - var SECOND = 5; - var MILLISECOND = 6; - var WEEK = 7; - var WEEKDAY = 8; - - // FORMATTING - - addFormatToken('Y', 0, 0, function () { - var y = this.year(); - return y <= 9999 ? '' + y : '+' + 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; - } - - function isLeapYear(year) { - return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; - } - - // 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 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) { - 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); - for (var 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; - } - - 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 MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/; - var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'); - 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()]; - } - - var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'); - 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()); - } - - var defaultMonthsShortRegex = matchWord; - 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; - } - } - - var defaultMonthsRegex = matchWord; - 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'); - } - - 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; - // the Date.UTC function remaps years 0-99 to 1900-1999 - if (y < 100 && y >= 0) { - var 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('_'); - 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; - } - - var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'); - function localeWeekdaysShort (m) { - return (m === true) ? shiftWeekdays(this._weekdaysShort, this._week.dow) - : (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort; - } - - var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'); - 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; - } - } - - var defaultWeekdaysRegex = matchWord; - 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; - } - } - - var defaultWeekdaysShortRegex = matchWord; - 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; - } - } - - var defaultWeekdaysMinRegex = matchWord; - 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 = this.weekdaysMin(mom, ''); - shortp = this.weekdaysShort(mom, ''); - longp = 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); - for (i = 0; i < 7; i++) { - shortPieces[i] = regexEscape(shortPieces[i]); - longPieces[i] = regexEscape(longPieces[i]); - mixedPieces[i] = regexEscape(mixedPieces[i]); - } - - 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; - var 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; - var 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; - function localeMeridiem (hours, minutes, isLower) { - if (hours > 11) { - return isLower ? 'pm' : 'PM'; - } else { - return isLower ? 'am' : 'AM'; - } - } - - - // MOMENTS - - // 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. - var getSetHour = makeGetSet('Hours', true); - - 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 = {}; - var localeFamilies = {}; - var globalLocale; - - 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 && compareArrays(split, next, true) >= 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; - // TODO: Find a better way to register and load all the locales in Node - if (!locales[name] && (typeof module !== 'undefined') && - module && module.exports) { - try { - oldLocale = globalLocale._abbr; - var aliasedRequire = require; - aliasedRequire('./locale/' + name); - getSetGlobalLocale(oldLocale); - } catch (e) {} - } - 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; - // MERGE - tmpLocale = loadLocale(name); - if (tmpLocale != null) { - parentConfig = tmpLocale._config; - } - config = mergeConfigs(parentConfig, config); - 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; - } 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; - var 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; - } - - // 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; - - 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; - - var 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; - } - } - - // 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)?)?$/; - var 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)?)?$/; - - var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/; - - var 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}/], - // YYYYMM is NOT allowed by the standard - ['GGGG[W]WWE', /\d{4}W\d{3}/], - ['GGGG[W]WW', /\d{4}W\d{2}/, false], - ['YYYYDDD', /\d{7}/] - ]; - - // iso time formats and regexes - var 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/] - ]; - - var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i; - - // 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; - } - } - - // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3 - var 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}))$/; - - 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 indepentent 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; - } - - var 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 - }; - - 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); - var 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)); - if (match) { - var 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 iso format or fallback - 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; - } - - // 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' : '')); - } - ); - - // 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; - - 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]; - // console.log('token', token, 'parsedInput', parsedInput, - // 'regex', getParseRegexForToken(token, config)); - 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); - - 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; - - 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; - tempConfig = copyConfig({}, config); - if (config._useUTC != null) { - tempConfig._useUTC = config._useUTC; - } - tempConfig._f = config._f[i]; - configFromStringAndFormat(tempConfig); - - if (!isValid(tempConfig)) { - continue; - } - - // 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 (scoreToBeat == null || currentScore < scoreToBeat) { - scoreToBeat = currentScore; - bestMoment = tempConfig; - } - } - - extend(config, bestMoment || tempConfig); - } - - function configFromObject(config) { - if (config._d) { - return; - } - - var i = normalizeObjectUnits(config._i); - config._a = map([i.year, i.month, i.day || i.date, 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 (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(); - } - } - ); - - var 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) { - for (var key in m) { - if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) { - return false; - } - } - - var unitHasDecimal = false; - for (var 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); - } - } - - // FORMATTING - - function offset (token, separator) { - addFormatToken(token, 0, 0, function () { - var offset = this.utcOffset(); - var 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); - - if (matches === null) { - return null; - } - - var chunk = matches[matches.length - 1] || []; - var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; - var 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() / 15) * 15; - } - - // 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 = {}; - - copyConfig(c, this); - c = prepareConfig(c); - - if (c._a) { - var 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 - var 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)) { - 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; - } - - 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; - } - - val = typeof val === 'string' ? +val : val; - 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'); - var subtract = createAdder(-1, 'subtract'); - - 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) { - // 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'; - - var 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) { - // 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; - var 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'; - var zone = ''; - if (!this.isLocal()) { - func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone'; - zone = 'Z'; - } - var prefix = '[' + func + '("]'; - var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY'; - var datetime = '-MM-DD[T]HH:mm:ss.SSS'; - var 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; - var MS_PER_MINUTE = 60 * MS_PER_SECOND; - var MS_PER_HOUR = 60 * MS_PER_MINUTE; - var 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; - units = normalizeUnits(units); - if (units === undefined || units === 'millisecond' || !this.isValid()) { - return this; - } - - var 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; - units = normalizeUnits(units); - if (units === undefined || units === 'millisecond' || !this.isValid()) { - return this; - } - - var 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 - }; - } - - // 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 getWeeksInYear () { - var weekInfo = this.localeData()._week; - return weeksInYear(this.year(), 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; - 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); - } - // MOMENTS - - var 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; - proto.toJSON = toJSON; - proto.toString = toString; - proto.unix = unix; - proto.valueOf = valueOf; - proto.creationData = creationData; - 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.isoWeeksInYear = getISOWeeksInYear; - 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.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(); - var 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; - var 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; - - if (index != null) { - return get$1(format, (index + shift) % 7, field, 'day'); - } - - var i; - var out = []; - 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', { - 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; - var days = this._days; - var months = this._months; - var data = this._data; - var 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; - var months; - var 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'); - var asSeconds = makeAs('s'); - var asMinutes = makeAs('m'); - var asHours = makeAs('h'); - var asDays = makeAs('d'); - var asWeeks = makeAs('w'); - var asMonths = makeAs('M'); - var asQuarters = makeAs('Q'); - var 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'); - var seconds = makeGetter('seconds'); - var minutes = makeGetter('minutes'); - var hours = makeGetter('hours'); - var days = makeGetter('days'); - var months = makeGetter('months'); - var years = makeGetter('years'); - - function weeks () { - return absFloor(this.days() / 7); - } - - var round = Math.round; - var 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 - 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, locale) { - var duration = createDuration(posNegDuration).abs(); - var seconds = round(duration.as('s')); - var minutes = round(duration.as('m')); - var hours = round(duration.as('h')); - var days = round(duration.as('d')); - var months = round(duration.as('M')); - var years = round(duration.as('y')); - - var 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] || - 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 (withSuffix) { - if (!this.isValid()) { - return this.localeData().invalidDate(); - } - - var locale = this.localeData(); - var output = relativeTime$1(this, !withSuffix, 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; - var days = abs$1(this._days); - var months = abs$1(this._months); - var minutes, hours, years; - - // 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 - var Y = years; - var M = months; - var D = days; - var h = hours; - var m = minutes; - var s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : ''; - var total = this.asSeconds(); - - if (!total) { - // this is the same as C#'s (Noda) and python (isodate)... - // but not other JS (goog.date) - return 'P0D'; - } - - var totalSign = total < 0 ? '-' : ''; - var ymSign = sign(this._months) !== sign(total) ? '-' : ''; - var daysSign = sign(this._days) !== sign(total) ? '-' : ''; - var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : ''; - - return totalSign + 'P' + - (Y ? ymSign + Y + 'Y' : '') + - (M ? ymSign + M + 'M' : '') + - (D ? daysSign + D + 'D' : '') + - ((h || m || s) ? 'T' : '') + - (h ? hmsSign + h + 'H' : '') + - (m ? hmsSign + m + 'M' : '') + - (s ? 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; - - // Side effect imports - - // 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, 10) * 1000); - }); - addParseToken('x', function (input, array, config) { - config._d = new Date(toInt(input)); - }); - - // Side effect imports - - - hooks.version = '2.24.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/website/appphp/static/vendors/moment/moment.min.js b/website/appphp/static/vendors/moment/moment.min.js deleted file mode 100644 index 5787a408..00000000 --- a/website/appphp/static/vendors/moment/moment.min.js +++ /dev/null @@ -1 +0,0 @@ -!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 c(){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 l(e){return void 0===e}function h(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 f(e,t){var n,s=[];for(n=0;n>>0,s=0;sSe(e)?(r=e+1,o-Se(e)):(r=e,o),{year:r,dayOfYear:a}}function Ie(e,t,n){var s,i,r=Ve(e.year(),t,n),a=Math.floor((e.dayOfYear()-r-1)/7)+1;return a<1?s=a+Ae(i=e.year()-1,t,n):a>Ae(e.year(),t,n)?(s=a-Ae(e.year(),t,n),i=e.year()+1):(i=e.year(),s=a),{week:s,year:i}}function Ae(e,t,n){var s=Ve(e,t,n),i=Ve(e+1,t,n);return(Se(e)-s+i)/7}I("w",["ww",2],"wo","week"),I("W",["WW",2],"Wo","isoWeek"),C("week","w"),C("isoWeek","W"),F("week",5),F("isoWeek",5),ue("w",B),ue("ww",B,z),ue("W",B),ue("WW",B,z),fe(["w","ww","W","WW"],function(e,t,n,s){t[s.substr(0,1)]=D(e)});function je(e,t){return e.slice(t,7).concat(e.slice(0,t))}I("d",0,"do","day"),I("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),I("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),I("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),I("e",0,0,"weekday"),I("E",0,0,"isoWeekday"),C("day","d"),C("weekday","e"),C("isoWeekday","E"),F("day",11),F("weekday",11),F("isoWeekday",11),ue("d",B),ue("e",B),ue("E",B),ue("dd",function(e,t){return t.weekdaysMinRegex(e)}),ue("ddd",function(e,t){return t.weekdaysShortRegex(e)}),ue("dddd",function(e,t){return t.weekdaysRegex(e)}),fe(["dd","ddd","dddd"],function(e,t,n,s){var i=n._locale.weekdaysParse(e,s,n._strict);null!=i?t.d=i:g(n).invalidWeekday=e}),fe(["d","e","E"],function(e,t,n,s){t[s]=D(e)});var Ze="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_");var ze="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_");var $e="Su_Mo_Tu_We_Th_Fr_Sa".split("_");var qe=ae;var Je=ae;var Be=ae;function Qe(){function e(e,t){return t.length-e.length}var t,n,s,i,r,a=[],o=[],u=[],l=[];for(t=0;t<7;t++)n=y([2e3,1]).day(t),s=this.weekdaysMin(n,""),i=this.weekdaysShort(n,""),r=this.weekdays(n,""),a.push(s),o.push(i),u.push(r),l.push(s),l.push(i),l.push(r);for(a.sort(e),o.sort(e),u.sort(e),l.sort(e),t=0;t<7;t++)o[t]=he(o[t]),u[t]=he(u[t]),l[t]=he(l[t]);this._weekdaysRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+a.join("|")+")","i")}function Xe(){return this.hours()%12||12}function Ke(e,t){I(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function et(e,t){return t._meridiemParse}I("H",["HH",2],0,"hour"),I("h",["hh",2],0,Xe),I("k",["kk",2],0,function(){return this.hours()||24}),I("hmm",0,0,function(){return""+Xe.apply(this)+L(this.minutes(),2)}),I("hmmss",0,0,function(){return""+Xe.apply(this)+L(this.minutes(),2)+L(this.seconds(),2)}),I("Hmm",0,0,function(){return""+this.hours()+L(this.minutes(),2)}),I("Hmmss",0,0,function(){return""+this.hours()+L(this.minutes(),2)+L(this.seconds(),2)}),Ke("a",!0),Ke("A",!1),C("hour","h"),F("hour",13),ue("a",et),ue("A",et),ue("H",B),ue("h",B),ue("k",B),ue("HH",B,z),ue("hh",B,z),ue("kk",B,z),ue("hmm",Q),ue("hmmss",X),ue("Hmm",Q),ue("Hmmss",X),ce(["H","HH"],ge),ce(["k","kk"],function(e,t,n){var s=D(e);t[ge]=24===s?0:s}),ce(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),ce(["h","hh"],function(e,t,n){t[ge]=D(e),g(n).bigHour=!0}),ce("hmm",function(e,t,n){var s=e.length-2;t[ge]=D(e.substr(0,s)),t[ve]=D(e.substr(s)),g(n).bigHour=!0}),ce("hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[ge]=D(e.substr(0,s)),t[ve]=D(e.substr(s,2)),t[pe]=D(e.substr(i)),g(n).bigHour=!0}),ce("Hmm",function(e,t,n){var s=e.length-2;t[ge]=D(e.substr(0,s)),t[ve]=D(e.substr(s))}),ce("Hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[ge]=D(e.substr(0,s)),t[ve]=D(e.substr(s,2)),t[pe]=D(e.substr(i))});var tt,nt=Te("Hours",!0),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",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Ce,monthsShort:He,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){var t=null;if(!it[e]&&"undefined"!=typeof module&&module&&module.exports)try{t=tt._abbr,require("./locale/"+e),ut(t)}catch(e){}return it[e]}function ut(e,t){var n;return e&&((n=l(t)?ht(e):lt(e,t))?tt=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),tt._abbr}function lt(e,t){if(null===t)return delete it[e],null;var n,s=st;if(t.abbr=e,null!=it[e])T("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=ot(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 P(x(s,t)),rt[e]&&rt[e].forEach(function(e){lt(e.name,e.config)}),ut(e),it[e]}function ht(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return tt;if(!o(e)){if(t=ot(e))return t;e=[e]}return function(e){for(var t,n,s,i,r=0;r=t&&a(i,n,!0)>=t-1)break;t--}r++}return tt}(e)}function dt(e){var t,n=e._a;return n&&-2===g(e).overflow&&(t=n[_e]<0||11Pe(n[me],n[_e])?ye:n[ge]<0||24Ae(n,r,a)?g(e)._overflowWeeks=!0:null!=u?g(e)._overflowWeekday=!0:(o=Ee(n,s,i,r,a),e._a[me]=o.year,e._dayOfYear=o.dayOfYear)}(e),null!=e._dayOfYear&&(r=ct(e._a[me],s[me]),(e._dayOfYear>Se(r)||0===e._dayOfYear)&&(g(e)._overflowDayOfYear=!0),n=Ge(r,0,e._dayOfYear),e._a[_e]=n.getUTCMonth(),e._a[ye]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=a[t]=s[t];for(;t<7;t++)e._a[t]=a[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[ge]&&0===e._a[ve]&&0===e._a[pe]&&0===e._a[we]&&(e._nextDay=!0,e._a[ge]=0),e._d=(e._useUTC?Ge: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,a),i=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[ge]=24),e._w&&void 0!==e._w.d&&e._w.d!==i&&(g(e).weekdayMismatch=!0)}}var mt=/^\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)?)?$/,_t=/^\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)?)?$/,yt=/Z|[+-]\d\d(?::?\d\d)?/,gt=[["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/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],vt=[["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/]],pt=/^\/?Date\((\-?\d+)/i;function wt(e){var t,n,s,i,r,a,o=e._i,u=mt.exec(o)||_t.exec(o);if(u){for(g(e).iso=!0,t=0,n=gt.length;tn.valueOf():n.valueOf()this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},mn.isLocal=function(){return!!this.isValid()&&!this._isUTC},mn.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},mn.isUtc=Et,mn.isUTC=Et,mn.zoneAbbr=function(){return this._isUTC?"UTC":""},mn.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},mn.dates=n("dates accessor is deprecated. Use date instead.",un),mn.months=n("months accessor is deprecated. Use month instead",Ue),mn.years=n("years accessor is deprecated. Use year instead",Oe),mn.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()}),mn.isDSTShifted=n("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!l(this._isDSTShifted))return this._isDSTShifted;var e={};if(w(e,this),(e=Ot(e))._a){var t=e._isUTC?y(e._a):bt(e._a);this._isDSTShifted=this.isValid()&&0 cBottom) { - container.scrollTop += (eBottom - cBottom); - } -} -exports.ensureElementInView = ensureElementInView; -function putContent(el, currentPosition, isOpen) { - var height = el.offsetHeight; - var rect = el.getBoundingClientRect(); - var elemTop = (isOpen ? rect.top : rect.top - height); - var elemBottom = (isOpen ? rect.bottom : rect.bottom + height); - if (elemTop <= 0) { - return 'below'; - } - if (elemBottom >= window.innerHeight) { - return 'above'; - } - return (isOpen ? currentPosition : 'below'); -} -exports.putContent = putContent; -function debounce(func, wait, immediate) { - if (wait === void 0) { wait = 100; } - if (immediate === void 0) { immediate = false; } - var timeout; - return function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var context = self; - var later = function () { - timeout = null; - if (!immediate) { - func.apply(context, args); - } - }; - var callNow = immediate && !timeout; - clearTimeout(timeout); - timeout = setTimeout(later, wait); - if (callNow) { - func.apply(context, args); - } - }; -} -exports.debounce = debounce; -function isValueInArrayOfObjects(selected, key, value) { - if (!Array.isArray(selected)) { - return selected[key] === value; - } - for (var _i = 0, selected_1 = selected; _i < selected_1.length; _i++) { - var s = selected_1[_i]; - if (s && s[key] && s[key] === value) { - return true; - } - } - return false; -} -exports.isValueInArrayOfObjects = isValueInArrayOfObjects; -function highlight(str, search, className) { - var completedString = str; - var regex = new RegExp('(' + search.trim() + ')(?![^<]*>[^<>]*" + originalTextFoundByRegex + ""); - return completedString; -} -exports.highlight = highlight; -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.kebabCase = kebabCase; -(function () { - var w = window; - if (typeof w.CustomEvent === 'function') { - return; - } - function CustomEvent(event, params) { - params = params || { bubbles: false, cancelable: false, detail: undefined }; - var evt = document.createEvent('CustomEvent'); - evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail); - return evt; - } - CustomEvent.prototype = w.Event.prototype; - w.CustomEvent = CustomEvent; -})(); - - -/***/ }), -/* 1 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -exports.__esModule = true; -var Data = (function () { - function Data(info) { - this.contentOpen = false; - this.contentPosition = 'below'; - this.isOnChangeEnabled = true; - this.main = info.main; - this.searchValue = ''; - this.data = []; - this.filtered = null; - this.parseSelectData(); - this.setSelectedFromSelect(); - } - Data.prototype.newOption = function (info) { - return { - id: (info.id ? info.id : String(Math.floor(Math.random() * 100000000))), - value: (info.value ? info.value : ''), - text: (info.text ? info.text : ''), - innerHTML: (info.innerHTML ? info.innerHTML : ''), - selected: (info.selected ? info.selected : false), - display: (info.display !== undefined ? info.display : true), - disabled: (info.disabled ? info.disabled : false), - placeholder: (info.placeholder ? info.placeholder : false), - "class": (info["class"] ? info["class"] : undefined), - data: (info.data ? info.data : {}), - mandatory: (info.mandatory ? info.mandatory : false) - }; - }; - Data.prototype.add = function (data) { - this.data.push({ - id: String(Math.floor(Math.random() * 100000000)), - value: data.value, - text: data.text, - innerHTML: '', - selected: false, - display: true, - disabled: false, - placeholder: false, - "class": undefined, - mandatory: data.mandatory, - data: {} - }); - }; - Data.prototype.parseSelectData = function () { - this.data = []; - var nodes = this.main.select.element.childNodes; - for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) { - var n = nodes_1[_i]; - if (n.nodeName === 'OPTGROUP') { - var node = n; - var optgroup = { - label: node.label, - options: [] - }; - var options = n.childNodes; - for (var _a = 0, options_1 = options; _a < options_1.length; _a++) { - var o = options_1[_a]; - if (o.nodeName === 'OPTION') { - var option = this.pullOptionData(o); - optgroup.options.push(option); - if (option.placeholder && option.text.trim() !== '') { - this.main.config.placeholderText = option.text; - } - } - } - this.data.push(optgroup); - } - else if (n.nodeName === 'OPTION') { - var option = this.pullOptionData(n); - this.data.push(option); - if (option.placeholder && option.text.trim() !== '') { - this.main.config.placeholderText = option.text; - } - } - } - }; - Data.prototype.pullOptionData = function (option) { - return { - id: (option.dataset ? option.dataset.id : false) || String(Math.floor(Math.random() * 100000000)), - value: option.value, - text: option.text, - innerHTML: option.innerHTML, - selected: option.selected, - disabled: option.disabled, - placeholder: option.dataset.placeholder === 'true', - "class": option.className, - style: option.style.cssText, - data: option.dataset, - mandatory: (option.dataset ? option.dataset.mandatory === 'true' : false) - }; - }; - Data.prototype.setSelectedFromSelect = function () { - if (this.main.config.isMultiple) { - var options = this.main.select.element.options; - var newSelected = []; - for (var _i = 0, options_2 = options; _i < options_2.length; _i++) { - var o = options_2[_i]; - if (o.selected) { - var newOption = this.getObjectFromData(o.value, 'value'); - if (newOption && newOption.id) { - newSelected.push(newOption.id); - } - } - } - this.setSelected(newSelected, 'id'); - } - else { - var element = this.main.select.element; - if (element.selectedIndex !== -1) { - var option = element.options[element.selectedIndex]; - var value = option.value; - this.setSelected(value, 'value'); - } - } - }; - Data.prototype.setSelected = function (value, type) { - if (type === void 0) { type = 'id'; } - for (var _i = 0, _a = this.data; _i < _a.length; _i++) { - var d = _a[_i]; - if (d.hasOwnProperty('label')) { - if (d.hasOwnProperty('options')) { - var options = d.options; - if (options) { - for (var _b = 0, options_3 = options; _b < options_3.length; _b++) { - var o = options_3[_b]; - if (o.placeholder) { - continue; - } - o.selected = this.shouldBeSelected(o, value, type); - } - } - } - } - else { - d.selected = this.shouldBeSelected(d, value, type); - } - } - }; - Data.prototype.shouldBeSelected = function (option, value, type) { - if (type === void 0) { type = 'id'; } - if (Array.isArray(value)) { - for (var _i = 0, value_1 = value; _i < value_1.length; _i++) { - var v = value_1[_i]; - if (type in option && String(option[type]) === String(v)) { - return true; - } - } - } - else { - if (type in option && String(option[type]) === String(value)) { - return true; - } - } - return false; - }; - Data.prototype.getSelected = function () { - var value = { text: '', placeholder: this.main.config.placeholderText }; - var values = []; - for (var _i = 0, _a = this.data; _i < _a.length; _i++) { - var d = _a[_i]; - if (d.hasOwnProperty('label')) { - if (d.hasOwnProperty('options')) { - var options = d.options; - if (options) { - for (var _b = 0, options_4 = options; _b < options_4.length; _b++) { - var o = options_4[_b]; - if (o.selected) { - if (!this.main.config.isMultiple) { - value = o; - } - else { - values.push(o); - } - } - } - } - } - } - else { - if (d.selected) { - if (!this.main.config.isMultiple) { - value = d; - } - else { - values.push(d); - } - } - } - } - if (this.main.config.isMultiple) { - return values; - } - return value; - }; - Data.prototype.addToSelected = function (value, type) { - if (type === void 0) { type = 'id'; } - if (this.main.config.isMultiple) { - var values = []; - var selected = this.getSelected(); - if (Array.isArray(selected)) { - for (var _i = 0, selected_1 = selected; _i < selected_1.length; _i++) { - var s = selected_1[_i]; - values.push(s[type]); - } - } - values.push(value); - this.setSelected(values, type); - } - }; - Data.prototype.removeFromSelected = function (value, type) { - if (type === void 0) { type = 'id'; } - if (this.main.config.isMultiple) { - var values = []; - var selected = this.getSelected(); - for (var _i = 0, selected_2 = selected; _i < selected_2.length; _i++) { - var s = selected_2[_i]; - if (String(s[type]) !== String(value)) { - values.push(s[type]); - } - } - this.setSelected(values, type); - } - }; - Data.prototype.onDataChange = function () { - if (this.main.onChange && this.isOnChangeEnabled) { - this.main.onChange(JSON.parse(JSON.stringify(this.getSelected()))); - } - }; - Data.prototype.getObjectFromData = function (value, type) { - if (type === void 0) { type = 'id'; } - for (var _i = 0, _a = this.data; _i < _a.length; _i++) { - var d = _a[_i]; - if (type in d && String(d[type]) === String(value)) { - return d; - } - if (d.hasOwnProperty('options')) { - var optgroupObject = d; - if (optgroupObject.options) { - for (var _b = 0, _c = optgroupObject.options; _b < _c.length; _b++) { - var oo = _c[_b]; - if (String(oo[type]) === String(value)) { - return oo; - } - } - } - } - } - return null; - }; - Data.prototype.search = function (search) { - this.searchValue = search; - if (search.trim() === '') { - this.filtered = null; - return; - } - var searchFilter = this.main.config.searchFilter; - var valuesArray = this.data.slice(0); - search = search.trim(); - var filtered = valuesArray.map(function (obj) { - if (obj.hasOwnProperty('options')) { - var optgroupObj = obj; - var options = []; - if (optgroupObj.options) { - options = optgroupObj.options.filter(function (opt) { - return searchFilter(opt, search); - }); - } - if (options.length !== 0) { - var optgroup = Object.assign({}, optgroupObj); - optgroup.options = options; - return optgroup; - } - } - if (obj.hasOwnProperty('text')) { - var optionObj = obj; - if (searchFilter(optionObj, search)) { - return obj; - } - } - return null; - }); - this.filtered = filtered.filter(function (info) { return info; }); - }; - return Data; -}()); -exports.Data = Data; -function validateData(data) { - if (!data) { - console.error('Data must be an array of objects'); - return false; - } - var isValid = false; - var errorCount = 0; - for (var _i = 0, data_1 = data; _i < data_1.length; _i++) { - var d = data_1[_i]; - if (d.hasOwnProperty('label')) { - if (d.hasOwnProperty('options')) { - var optgroup = d; - var options = optgroup.options; - if (options) { - for (var _a = 0, options_5 = options; _a < options_5.length; _a++) { - var o = options_5[_a]; - isValid = validateOption(o); - if (!isValid) { - errorCount++; - } - } - } - } - } - else { - var option = d; - isValid = validateOption(option); - if (!isValid) { - errorCount++; - } - } - } - return errorCount === 0; -} -exports.validateData = validateData; -function validateOption(option) { - if (option.text === undefined) { - console.error('Data object option must have at least have a text value. Check object: ' + JSON.stringify(option)); - return false; - } - return true; -} -exports.validateOption = validateOption; - - -/***/ }), -/* 2 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -exports.__esModule = true; -var config_1 = __webpack_require__(3); -var select_1 = __webpack_require__(4); -var slim_1 = __webpack_require__(5); -var data_1 = __webpack_require__(1); -var helper_1 = __webpack_require__(0); -var SlimSelect = (function () { - function SlimSelect(info) { - var _this = this; - this.ajax = null; - this.addable = null; - this.beforeOnChange = null; - this.onChange = null; - this.beforeOpen = null; - this.afterOpen = null; - this.beforeClose = null; - this.afterClose = null; - var selectElement = this.validate(info); - if (selectElement.dataset.ssid) { - this.destroy(selectElement.dataset.ssid); - } - if (info.ajax) { - this.ajax = info.ajax; - } - if (info.addable) { - this.addable = info.addable; - } - this.config = new config_1.Config({ - select: selectElement, - isAjax: (info.ajax ? true : false), - showSearch: info.showSearch, - searchPlaceholder: info.searchPlaceholder, - searchText: info.searchText, - searchingText: info.searchingText, - searchFocus: info.searchFocus, - searchHighlight: info.searchHighlight, - searchFilter: info.searchFilter, - closeOnSelect: info.closeOnSelect, - showContent: info.showContent, - placeholderText: info.placeholder, - allowDeselect: info.allowDeselect, - allowDeselectOption: info.allowDeselectOption, - hideSelectedOption: info.hideSelectedOption, - deselectLabel: info.deselectLabel, - isEnabled: info.isEnabled, - valuesUseText: info.valuesUseText, - showOptionTooltips: info.showOptionTooltips, - selectByGroup: info.selectByGroup, - limit: info.limit, - timeoutDelay: info.timeoutDelay, - addToBody: info.addToBody - }); - this.select = new select_1.Select({ - select: selectElement, - main: this - }); - this.data = new data_1.Data({ main: this }); - this.slim = new slim_1.Slim({ main: this }); - if (this.select.element.parentNode) { - this.select.element.parentNode.insertBefore(this.slim.container, this.select.element.nextSibling); - } - if (info.data) { - this.setData(info.data); - } - else { - this.render(); - } - document.addEventListener('click', function (e) { - if (e.target && !helper_1.hasClassInTree(e.target, _this.config.id)) { - _this.close(); - } - }); - if (this.config.showContent === 'auto') { - window.addEventListener('scroll', helper_1.debounce(function (e) { - if (_this.data.contentOpen) { - if (helper_1.putContent(_this.slim.content, _this.data.contentPosition, _this.data.contentOpen) === 'above') { - _this.moveContentAbove(); - } - else { - _this.moveContentBelow(); - } - } - }), false); - } - if (info.beforeOnChange) { - this.beforeOnChange = info.beforeOnChange; - } - if (info.onChange) { - this.onChange = info.onChange; - } - if (info.beforeOpen) { - this.beforeOpen = info.beforeOpen; - } - if (info.afterOpen) { - this.afterOpen = info.afterOpen; - } - if (info.beforeClose) { - this.beforeClose = info.beforeClose; - } - if (info.afterClose) { - this.afterClose = info.afterClose; - } - if (!this.config.isEnabled) { - this.disable(); - } - } - SlimSelect.prototype.validate = function (info) { - var select = (typeof info.select === 'string' ? document.querySelector(info.select) : info.select); - if (!select) { - throw new Error('Could not find select element'); - } - if (select.tagName !== 'SELECT') { - throw new Error('Element isnt of type select'); - } - return select; - }; - SlimSelect.prototype.selected = function () { - if (this.config.isMultiple) { - var selected = this.data.getSelected(); - var outputSelected = []; - for (var _i = 0, selected_1 = selected; _i < selected_1.length; _i++) { - var s = selected_1[_i]; - outputSelected.push(s.value); - } - return outputSelected; - } - else { - var selected = this.data.getSelected(); - return (selected ? selected.value : ''); - } - }; - SlimSelect.prototype.set = function (value, type, close, render) { - if (type === void 0) { type = 'value'; } - if (close === void 0) { close = true; } - if (render === void 0) { render = true; } - if (this.config.isMultiple && !Array.isArray(value)) { - this.data.addToSelected(value, type); - } - else { - this.data.setSelected(value, type); - } - this.select.setValue(); - this.data.onDataChange(); - this.render(); - if (close) { - this.close(); - } - }; - SlimSelect.prototype.setSelected = function (value, type, close, render) { - if (type === void 0) { type = 'value'; } - if (close === void 0) { close = true; } - if (render === void 0) { render = true; } - this.set(value, type, close, render); - }; - SlimSelect.prototype.setData = function (data) { - var isValid = data_1.validateData(data); - if (!isValid) { - console.error('Validation problem on: #' + this.select.element.id); - return; - } - var newData = JSON.parse(JSON.stringify(data)); - var selected = this.data.getSelected(); - if (this.config.isAjax && selected) { - if (this.config.isMultiple) { - var reverseSelected = selected.reverse(); - for (var _i = 0, reverseSelected_1 = reverseSelected; _i < reverseSelected_1.length; _i++) { - var r = reverseSelected_1[_i]; - newData.unshift(r); - } - } - else { - newData.unshift(this.data.getSelected()); - newData.unshift({ text: '', placeholder: true }); - } - } - this.select.create(newData); - this.data.parseSelectData(); - this.data.setSelectedFromSelect(); - }; - SlimSelect.prototype.addData = function (data) { - var isValid = data_1.validateData([data]); - if (!isValid) { - console.error('Validation problem on: #' + this.select.element.id); - return; - } - this.data.add(this.data.newOption(data)); - this.select.create(this.data.data); - this.data.parseSelectData(); - this.data.setSelectedFromSelect(); - this.render(); - }; - SlimSelect.prototype.open = function () { - var _this = this; - if (!this.config.isEnabled) { - return; - } - if (this.data.contentOpen) { - return; - } - if (this.beforeOpen) { - this.beforeOpen(); - } - if (this.config.isMultiple && this.slim.multiSelected) { - this.slim.multiSelected.plus.classList.add('ss-cross'); - } - else if (this.slim.singleSelected) { - this.slim.singleSelected.arrowIcon.arrow.classList.remove('arrow-down'); - this.slim.singleSelected.arrowIcon.arrow.classList.add('arrow-up'); - } - this.slim[(this.config.isMultiple ? 'multiSelected' : 'singleSelected')].container.classList.add((this.data.contentPosition === 'above' ? this.config.openAbove : this.config.openBelow)); - if (this.config.addToBody) { - var containerRect = this.slim.container.getBoundingClientRect(); - this.slim.content.style.top = (containerRect.top + containerRect.height + window.scrollY) + 'px'; - this.slim.content.style.left = (containerRect.left + window.scrollX) + 'px'; - this.slim.content.style.width = containerRect.width + 'px'; - } - this.slim.content.classList.add(this.config.open); - if (this.config.showContent.toLowerCase() === 'up') { - this.moveContentAbove(); - } - else if (this.config.showContent.toLowerCase() === 'down') { - this.moveContentBelow(); - } - else { - if (helper_1.putContent(this.slim.content, this.data.contentPosition, this.data.contentOpen) === 'above') { - this.moveContentAbove(); - } - else { - this.moveContentBelow(); - } - } - if (!this.config.isMultiple) { - var selected = this.data.getSelected(); - if (selected) { - var selectedId = selected.id; - var selectedOption = this.slim.list.querySelector('[data-id="' + selectedId + '"]'); - if (selectedOption) { - helper_1.ensureElementInView(this.slim.list, selectedOption); - } - } - } - setTimeout(function () { - _this.data.contentOpen = true; - if (_this.config.searchFocus) { - _this.slim.search.input.focus(); - } - if (_this.afterOpen) { - _this.afterOpen(); - } - }, this.config.timeoutDelay); - }; - SlimSelect.prototype.close = function () { - var _this = this; - if (!this.data.contentOpen) { - return; - } - if (this.beforeClose) { - this.beforeClose(); - } - if (this.config.isMultiple && this.slim.multiSelected) { - this.slim.multiSelected.container.classList.remove(this.config.openAbove); - this.slim.multiSelected.container.classList.remove(this.config.openBelow); - this.slim.multiSelected.plus.classList.remove('ss-cross'); - } - else if (this.slim.singleSelected) { - this.slim.singleSelected.container.classList.remove(this.config.openAbove); - this.slim.singleSelected.container.classList.remove(this.config.openBelow); - this.slim.singleSelected.arrowIcon.arrow.classList.add('arrow-down'); - this.slim.singleSelected.arrowIcon.arrow.classList.remove('arrow-up'); - } - this.slim.content.classList.remove(this.config.open); - this.data.contentOpen = false; - this.search(''); - setTimeout(function () { - _this.slim.content.removeAttribute('style'); - _this.data.contentPosition = 'below'; - if (_this.config.isMultiple && _this.slim.multiSelected) { - _this.slim.multiSelected.container.classList.remove(_this.config.openAbove); - _this.slim.multiSelected.container.classList.remove(_this.config.openBelow); - } - else if (_this.slim.singleSelected) { - _this.slim.singleSelected.container.classList.remove(_this.config.openAbove); - _this.slim.singleSelected.container.classList.remove(_this.config.openBelow); - } - _this.slim.search.input.blur(); - if (_this.afterClose) { - _this.afterClose(); - } - }, this.config.timeoutDelay); - }; - SlimSelect.prototype.moveContentAbove = function () { - var selectHeight = 0; - if (this.config.isMultiple && this.slim.multiSelected) { - selectHeight = this.slim.multiSelected.container.offsetHeight; - } - else if (this.slim.singleSelected) { - selectHeight = this.slim.singleSelected.container.offsetHeight; - } - var contentHeight = this.slim.content.offsetHeight; - var height = selectHeight + contentHeight - 1; - this.slim.content.style.margin = '-' + height + 'px 0 0 0'; - this.slim.content.style.height = (height - selectHeight + 1) + 'px'; - this.slim.content.style.transformOrigin = 'center bottom'; - this.data.contentPosition = 'above'; - if (this.config.isMultiple && this.slim.multiSelected) { - this.slim.multiSelected.container.classList.remove(this.config.openBelow); - this.slim.multiSelected.container.classList.add(this.config.openAbove); - } - else if (this.slim.singleSelected) { - this.slim.singleSelected.container.classList.remove(this.config.openBelow); - this.slim.singleSelected.container.classList.add(this.config.openAbove); - } - }; - SlimSelect.prototype.moveContentBelow = function () { - this.data.contentPosition = 'below'; - if (this.config.isMultiple && this.slim.multiSelected) { - this.slim.multiSelected.container.classList.remove(this.config.openAbove); - this.slim.multiSelected.container.classList.add(this.config.openBelow); - } - else if (this.slim.singleSelected) { - this.slim.singleSelected.container.classList.remove(this.config.openAbove); - this.slim.singleSelected.container.classList.add(this.config.openBelow); - } - }; - SlimSelect.prototype.enable = function () { - this.config.isEnabled = true; - if (this.config.isMultiple && this.slim.multiSelected) { - this.slim.multiSelected.container.classList.remove(this.config.disabled); - } - else if (this.slim.singleSelected) { - this.slim.singleSelected.container.classList.remove(this.config.disabled); - } - this.select.triggerMutationObserver = false; - this.select.element.disabled = false; - this.slim.search.input.disabled = false; - this.select.triggerMutationObserver = true; - }; - SlimSelect.prototype.disable = function () { - this.config.isEnabled = false; - if (this.config.isMultiple && this.slim.multiSelected) { - this.slim.multiSelected.container.classList.add(this.config.disabled); - } - else if (this.slim.singleSelected) { - this.slim.singleSelected.container.classList.add(this.config.disabled); - } - this.select.triggerMutationObserver = false; - this.select.element.disabled = true; - this.slim.search.input.disabled = true; - this.select.triggerMutationObserver = true; - }; - SlimSelect.prototype.search = function (value) { - if (this.data.searchValue !== value) { - this.slim.search.input.value = value; - if (this.config.isAjax) { - var master_1 = this; - this.config.isSearching = true; - this.render(); - if (this.ajax) { - this.ajax(value, function (info) { - master_1.config.isSearching = false; - if (Array.isArray(info)) { - info.unshift({ text: '', placeholder: true }); - master_1.setData(info); - master_1.data.search(value); - master_1.render(); - } - else if (typeof info === 'string') { - master_1.slim.options(info); - } - else { - master_1.render(); - } - }); - } - } - else { - this.data.search(value); - this.render(); - } - } - }; - SlimSelect.prototype.setSearchText = function (text) { - this.config.searchText = text; - }; - SlimSelect.prototype.render = function () { - if (this.config.isMultiple) { - this.slim.values(); - } - else { - this.slim.placeholder(); - this.slim.deselect(); - } - this.slim.options(); - }; - SlimSelect.prototype.destroy = function (id) { - if (id === void 0) { id = null; } - var slim = (id ? document.querySelector('.' + id + '.ss-main') : this.slim.container); - var select = (id ? document.querySelector("[data-ssid=" + id + "]") : this.select.element); - if (!slim || !select) { - return; - } - select.style.display = ''; - delete select.dataset.ssid; - var el = select; - el.slim = null; - if (slim.parentElement) { - slim.parentElement.removeChild(slim); - } - if (this.config.addToBody) { - var slimContent = (id ? document.querySelector('.' + id + '.ss-content') : this.slim.content); - if (!slimContent) { - return; - } - document.body.removeChild(slimContent); - } - }; - return SlimSelect; -}()); -exports["default"] = SlimSelect; - - -/***/ }), -/* 3 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -exports.__esModule = true; -var Config = (function () { - function Config(info) { - this.id = ''; - this.isMultiple = false; - this.isAjax = false; - this.isSearching = false; - this.showSearch = true; - this.searchFocus = true; - this.searchHighlight = false; - this.closeOnSelect = true; - this.showContent = 'auto'; - this.searchPlaceholder = 'Search'; - this.searchText = 'No Results'; - this.searchingText = 'Searching...'; - this.placeholderText = 'Select Value'; - this.allowDeselect = false; - this.allowDeselectOption = false; - this.hideSelectedOption = false; - this.deselectLabel = 'x'; - this.isEnabled = true; - this.valuesUseText = false; - this.showOptionTooltips = false; - this.selectByGroup = false; - this.limit = 0; - this.timeoutDelay = 200; - this.addToBody = false; - this.main = 'ss-main'; - this.singleSelected = 'ss-single-selected'; - this.arrow = 'ss-arrow'; - this.multiSelected = 'ss-multi-selected'; - this.add = 'ss-add'; - this.plus = 'ss-plus'; - this.values = 'ss-values'; - this.value = 'ss-value'; - this.valueText = 'ss-value-text'; - this.valueDelete = 'ss-value-delete'; - this.content = 'ss-content'; - this.open = 'ss-open'; - this.openAbove = 'ss-open-above'; - this.openBelow = 'ss-open-below'; - this.search = 'ss-search'; - this.searchHighlighter = 'ss-search-highlight'; - this.addable = 'ss-addable'; - this.list = 'ss-list'; - this.optgroup = 'ss-optgroup'; - this.optgroupLabel = 'ss-optgroup-label'; - this.optgroupLabelSelectable = 'ss-optgroup-label-selectable'; - this.option = 'ss-option'; - this.optionSelected = 'ss-option-selected'; - this.highlighted = 'ss-highlighted'; - this.disabled = 'ss-disabled'; - this.hide = 'ss-hide'; - this.id = 'ss-' + Math.floor(Math.random() * 100000); - this.style = info.select.style.cssText; - this["class"] = info.select.className.split(' '); - this.isMultiple = info.select.multiple; - this.isAjax = info.isAjax; - this.showSearch = (info.showSearch === false ? false : true); - this.searchFocus = (info.searchFocus === false ? false : true); - this.searchHighlight = (info.searchHighlight === true ? true : false); - this.closeOnSelect = (info.closeOnSelect === false ? false : true); - if (info.showContent) { - this.showContent = info.showContent; - } - this.isEnabled = (info.isEnabled === false ? false : true); - if (info.searchPlaceholder) { - this.searchPlaceholder = info.searchPlaceholder; - } - if (info.searchText) { - this.searchText = info.searchText; - } - if (info.searchingText) { - this.searchingText = info.searchingText; - } - if (info.placeholderText) { - this.placeholderText = info.placeholderText; - } - this.allowDeselect = (info.allowDeselect === true ? true : false); - this.allowDeselectOption = (info.allowDeselectOption === true ? true : false); - this.hideSelectedOption = (info.hideSelectedOption === true ? true : false); - if (info.deselectLabel) { - this.deselectLabel = info.deselectLabel; - } - if (info.valuesUseText) { - this.valuesUseText = info.valuesUseText; - } - if (info.showOptionTooltips) { - this.showOptionTooltips = info.showOptionTooltips; - } - if (info.selectByGroup) { - this.selectByGroup = info.selectByGroup; - } - if (info.limit) { - this.limit = info.limit; - } - if (info.searchFilter) { - this.searchFilter = info.searchFilter; - } - if (info.timeoutDelay != null) { - this.timeoutDelay = info.timeoutDelay; - } - this.addToBody = (info.addToBody === true ? true : false); - } - Config.prototype.searchFilter = function (opt, search) { - return opt.text.toLowerCase().indexOf(search.toLowerCase()) !== -1; - }; - return Config; -}()); -exports.Config = Config; - - -/***/ }), -/* 4 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -exports.__esModule = true; -var helper_1 = __webpack_require__(0); -var Select = (function () { - function Select(info) { - this.triggerMutationObserver = true; - this.element = info.select; - this.main = info.main; - if (this.element.disabled) { - this.main.config.isEnabled = false; - } - this.addAttributes(); - this.addEventListeners(); - this.mutationObserver = null; - this.addMutationObserver(); - var el = this.element; - el.slim = info.main; - } - Select.prototype.setValue = function () { - if (!this.main.data.getSelected()) { - return; - } - if (this.main.config.isMultiple) { - var selected = this.main.data.getSelected(); - var options = this.element.options; - for (var _i = 0, options_1 = options; _i < options_1.length; _i++) { - var o = options_1[_i]; - o.selected = false; - for (var _a = 0, selected_1 = selected; _a < selected_1.length; _a++) { - var s = selected_1[_a]; - if (s.value === o.value) { - o.selected = true; - } - } - } - } - else { - var selected = this.main.data.getSelected(); - this.element.value = (selected ? selected.value : ''); - } - this.main.data.isOnChangeEnabled = false; - this.element.dispatchEvent(new CustomEvent('change', { bubbles: true })); - this.main.data.isOnChangeEnabled = true; - }; - Select.prototype.addAttributes = function () { - this.element.tabIndex = -1; - this.element.style.display = 'none'; - this.element.dataset.ssid = this.main.config.id; - }; - Select.prototype.addEventListeners = function () { - var _this = this; - this.element.addEventListener('change', function (e) { - _this.main.data.setSelectedFromSelect(); - _this.main.render(); - }); - }; - Select.prototype.addMutationObserver = function () { - var _this = this; - if (this.main.config.isAjax) { - return; - } - this.mutationObserver = new MutationObserver(function (mutations) { - if (!_this.triggerMutationObserver) { - return; - } - _this.main.data.parseSelectData(); - _this.main.data.setSelectedFromSelect(); - _this.main.render(); - mutations.forEach(function (mutation) { - if (mutation.attributeName === 'class') { - _this.main.slim.updateContainerDivClass(_this.main.slim.container); - } - }); - }); - this.observeMutationObserver(); - }; - Select.prototype.observeMutationObserver = function () { - if (!this.mutationObserver) { - return; - } - this.mutationObserver.observe(this.element, { - attributes: true, - childList: true, - characterData: true - }); - }; - Select.prototype.disconnectMutationObserver = function () { - if (this.mutationObserver) { - this.mutationObserver.disconnect(); - } - }; - Select.prototype.create = function (data) { - this.element.innerHTML = ''; - for (var _i = 0, data_1 = data; _i < data_1.length; _i++) { - var d = data_1[_i]; - if (d.hasOwnProperty('options')) { - var optgroupObject = d; - var optgroupEl = document.createElement('optgroup'); - optgroupEl.label = optgroupObject.label; - if (optgroupObject.options) { - for (var _a = 0, _b = optgroupObject.options; _a < _b.length; _a++) { - var oo = _b[_a]; - optgroupEl.appendChild(this.createOption(oo)); - } - } - this.element.appendChild(optgroupEl); - } - else { - this.element.appendChild(this.createOption(d)); - } - } - }; - Select.prototype.createOption = function (info) { - var optionEl = document.createElement('option'); - optionEl.value = info.value !== '' ? info.value : info.text; - optionEl.innerHTML = info.innerHTML || info.text; - if (info.selected) { - optionEl.selected = info.selected; - } - if (info.display === false) { - optionEl.style.display = 'none'; - } - if (info.disabled) { - optionEl.disabled = true; - } - if (info.placeholder) { - optionEl.setAttribute('data-placeholder', 'true'); - } - if (info.mandatory) { - optionEl.setAttribute('data-mandatory', 'true'); - } - if (info["class"]) { - info["class"].split(' ').forEach(function (optionClass) { - optionEl.classList.add(optionClass); - }); - } - if (info.data && typeof info.data === 'object') { - Object.keys(info.data).forEach(function (key) { - optionEl.setAttribute('data-' + helper_1.kebabCase(key), info.data[key]); - }); - } - return optionEl; - }; - return Select; -}()); -exports.Select = Select; - - -/***/ }), -/* 5 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -exports.__esModule = true; -var helper_1 = __webpack_require__(0); -var data_1 = __webpack_require__(1); -var Slim = (function () { - function Slim(info) { - this.main = info.main; - this.container = this.containerDiv(); - this.content = this.contentDiv(); - this.search = this.searchDiv(); - this.list = this.listDiv(); - this.options(); - this.singleSelected = null; - this.multiSelected = null; - if (this.main.config.isMultiple) { - this.multiSelected = this.multiSelectedDiv(); - if (this.multiSelected) { - this.container.appendChild(this.multiSelected.container); - } - } - else { - this.singleSelected = this.singleSelectedDiv(); - this.container.appendChild(this.singleSelected.container); - } - if (this.main.config.addToBody) { - this.content.classList.add(this.main.config.id); - document.body.appendChild(this.content); - } - else { - this.container.appendChild(this.content); - } - this.content.appendChild(this.search.container); - this.content.appendChild(this.list); - } - Slim.prototype.containerDiv = function () { - var container = document.createElement('div'); - container.style.cssText = this.main.config.style; - this.updateContainerDivClass(container); - return container; - }; - Slim.prototype.updateContainerDivClass = function (container) { - this.main.config["class"] = this.main.select.element.className.split(' '); - container.className = ''; - container.classList.add(this.main.config.id); - container.classList.add(this.main.config.main); - for (var _i = 0, _a = this.main.config["class"]; _i < _a.length; _i++) { - var c = _a[_i]; - if (c.trim() !== '') { - container.classList.add(c); - } - } - }; - Slim.prototype.singleSelectedDiv = function () { - var _this = this; - var container = document.createElement('div'); - container.classList.add(this.main.config.singleSelected); - var placeholder = document.createElement('span'); - placeholder.classList.add('placeholder'); - container.appendChild(placeholder); - var deselect = document.createElement('span'); - deselect.innerHTML = this.main.config.deselectLabel; - deselect.classList.add('ss-deselect'); - deselect.onclick = function (e) { - e.stopPropagation(); - if (!_this.main.config.isEnabled) { - return; - } - _this.main.set(''); - }; - container.appendChild(deselect); - var arrowContainer = document.createElement('span'); - arrowContainer.classList.add(this.main.config.arrow); - var arrowIcon = document.createElement('span'); - arrowIcon.classList.add('arrow-down'); - arrowContainer.appendChild(arrowIcon); - container.appendChild(arrowContainer); - container.onclick = function () { - if (!_this.main.config.isEnabled) { - return; - } - _this.main.data.contentOpen ? _this.main.close() : _this.main.open(); - }; - return { - container: container, - placeholder: placeholder, - deselect: deselect, - arrowIcon: { - container: arrowContainer, - arrow: arrowIcon - } - }; - }; - Slim.prototype.placeholder = function () { - var selected = this.main.data.getSelected(); - if (selected === null || (selected && selected.placeholder)) { - var placeholder = document.createElement('span'); - placeholder.classList.add(this.main.config.disabled); - placeholder.innerHTML = this.main.config.placeholderText; - if (this.singleSelected) { - this.singleSelected.placeholder.innerHTML = placeholder.outerHTML; - } - } - else { - var selectedValue = ''; - if (selected) { - selectedValue = selected.innerHTML && this.main.config.valuesUseText !== true ? selected.innerHTML : selected.text; - } - if (this.singleSelected) { - this.singleSelected.placeholder.innerHTML = (selected ? selectedValue : ''); - } - } - }; - Slim.prototype.deselect = function () { - if (this.singleSelected) { - if (!this.main.config.allowDeselect) { - this.singleSelected.deselect.classList.add('ss-hide'); - return; - } - if (this.main.selected() === '') { - this.singleSelected.deselect.classList.add('ss-hide'); - } - else { - this.singleSelected.deselect.classList.remove('ss-hide'); - } - } - }; - Slim.prototype.multiSelectedDiv = function () { - var _this = this; - var container = document.createElement('div'); - container.classList.add(this.main.config.multiSelected); - var values = document.createElement('div'); - values.classList.add(this.main.config.values); - container.appendChild(values); - var add = document.createElement('div'); - add.classList.add(this.main.config.add); - var plus = document.createElement('span'); - plus.classList.add(this.main.config.plus); - plus.onclick = function (e) { - if (_this.main.data.contentOpen) { - _this.main.close(); - e.stopPropagation(); - } - }; - add.appendChild(plus); - container.appendChild(add); - container.onclick = function (e) { - if (!_this.main.config.isEnabled) { - return; - } - var target = e.target; - if (!target.classList.contains(_this.main.config.valueDelete)) { - _this.main.data.contentOpen ? _this.main.close() : _this.main.open(); - } - }; - return { - container: container, - values: values, - add: add, - plus: plus - }; - }; - Slim.prototype.values = function () { - if (!this.multiSelected) { - return; - } - var currentNodes = this.multiSelected.values.childNodes; - var selected = this.main.data.getSelected(); - var exists; - var nodesToRemove = []; - for (var _i = 0, currentNodes_1 = currentNodes; _i < currentNodes_1.length; _i++) { - var c = currentNodes_1[_i]; - exists = true; - for (var _a = 0, selected_1 = selected; _a < selected_1.length; _a++) { - var s = selected_1[_a]; - if (String(s.id) === String(c.dataset.id)) { - exists = false; - } - } - if (exists) { - nodesToRemove.push(c); - } - } - for (var _b = 0, nodesToRemove_1 = nodesToRemove; _b < nodesToRemove_1.length; _b++) { - var n = nodesToRemove_1[_b]; - n.classList.add('ss-out'); - this.multiSelected.values.removeChild(n); - } - currentNodes = this.multiSelected.values.childNodes; - for (var s = 0; s < selected.length; s++) { - exists = false; - for (var _c = 0, currentNodes_2 = currentNodes; _c < currentNodes_2.length; _c++) { - var c = currentNodes_2[_c]; - if (String(selected[s].id) === String(c.dataset.id)) { - exists = true; - } - } - if (!exists) { - if (currentNodes.length === 0 || !HTMLElement.prototype.insertAdjacentElement) { - this.multiSelected.values.appendChild(this.valueDiv(selected[s])); - } - else if (s === 0) { - this.multiSelected.values.insertBefore(this.valueDiv(selected[s]), currentNodes[s]); - } - else { - currentNodes[s - 1].insertAdjacentElement('afterend', this.valueDiv(selected[s])); - } - } - } - if (selected.length === 0) { - var placeholder = document.createElement('span'); - placeholder.classList.add(this.main.config.disabled); - placeholder.innerHTML = this.main.config.placeholderText; - this.multiSelected.values.innerHTML = placeholder.outerHTML; - } - }; - Slim.prototype.valueDiv = function (optionObj) { - var _this = this; - var value = document.createElement('div'); - value.classList.add(this.main.config.value); - value.dataset.id = optionObj.id; - var text = document.createElement('span'); - text.classList.add(this.main.config.valueText); - text.innerHTML = (optionObj.innerHTML && this.main.config.valuesUseText !== true ? optionObj.innerHTML : optionObj.text); - value.appendChild(text); - if (!optionObj.mandatory) { - var deleteSpan = document.createElement('span'); - deleteSpan.classList.add(this.main.config.valueDelete); - deleteSpan.innerHTML = this.main.config.deselectLabel; - deleteSpan.onclick = function (e) { - e.preventDefault(); - e.stopPropagation(); - var shouldUpdate = false; - if (!_this.main.beforeOnChange) { - shouldUpdate = true; - } - if (_this.main.beforeOnChange) { - var selected = _this.main.data.getSelected(); - var currentValues = JSON.parse(JSON.stringify(selected)); - for (var i = 0; i < currentValues.length; i++) { - if (currentValues[i].id === optionObj.id) { - currentValues.splice(i, 1); - } - } - var beforeOnchange = _this.main.beforeOnChange(currentValues); - if (beforeOnchange !== false) { - shouldUpdate = true; - } - } - if (shouldUpdate) { - _this.main.data.removeFromSelected(optionObj.id, 'id'); - _this.main.render(); - _this.main.select.setValue(); - _this.main.data.onDataChange(); - } - }; - value.appendChild(deleteSpan); - } - return value; - }; - Slim.prototype.contentDiv = function () { - var container = document.createElement('div'); - container.classList.add(this.main.config.content); - return container; - }; - Slim.prototype.searchDiv = function () { - var _this = this; - var container = document.createElement('div'); - var input = document.createElement('input'); - var addable = document.createElement('div'); - container.classList.add(this.main.config.search); - var searchReturn = { - container: container, - input: input - }; - if (!this.main.config.showSearch) { - container.classList.add(this.main.config.hide); - input.readOnly = true; - } - input.type = 'search'; - input.placeholder = this.main.config.searchPlaceholder; - input.tabIndex = 0; - input.setAttribute('aria-label', this.main.config.searchPlaceholder); - input.setAttribute('autocapitalize', 'off'); - input.setAttribute('autocomplete', 'off'); - input.setAttribute('autocorrect', 'off'); - input.onclick = function (e) { - setTimeout(function () { - var target = e.target; - if (target.value === '') { - _this.main.search(''); - } - }, 10); - }; - input.onkeydown = function (e) { - if (e.key === 'ArrowUp') { - _this.main.open(); - _this.highlightUp(); - e.preventDefault(); - } - else if (e.key === 'ArrowDown') { - _this.main.open(); - _this.highlightDown(); - e.preventDefault(); - } - else if (e.key === 'Tab') { - if (!_this.main.data.contentOpen) { - setTimeout(function () { _this.main.close(); }, _this.main.config.timeoutDelay); - } - else { - _this.main.close(); - } - } - else if (e.key === 'Enter') { - e.preventDefault(); - } - }; - input.onkeyup = function (e) { - var target = e.target; - if (e.key === 'Enter') { - if (_this.main.addable && e.ctrlKey) { - addable.click(); - e.preventDefault(); - e.stopPropagation(); - return; - } - var highlighted = _this.list.querySelector('.' + _this.main.config.highlighted); - if (highlighted) { - highlighted.click(); - } - } - else if (e.key === 'ArrowUp' || e.key === 'ArrowDown') { - } - else if (e.key === 'Escape') { - _this.main.close(); - } - else { - if (_this.main.config.showSearch && _this.main.data.contentOpen) { - _this.main.search(target.value); - } - else { - input.value = ''; - } - } - e.preventDefault(); - e.stopPropagation(); - }; - input.onfocus = function () { _this.main.open(); }; - container.appendChild(input); - if (this.main.addable) { - addable.classList.add(this.main.config.addable); - addable.innerHTML = '+'; - addable.onclick = function (e) { - if (_this.main.addable) { - e.preventDefault(); - e.stopPropagation(); - var inputValue = _this.search.input.value; - if (inputValue.trim() === '') { - _this.search.input.focus(); - return; - } - var addableValue = _this.main.addable(inputValue); - var addableValueStr_1 = ''; - if (!addableValue) { - return; - } - if (typeof addableValue === 'object') { - var validValue = data_1.validateOption(addableValue); - if (validValue) { - _this.main.addData(addableValue); - addableValueStr_1 = (addableValue.value ? addableValue.value : addableValue.text); - } - } - else { - _this.main.addData(_this.main.data.newOption({ - text: addableValue, - value: addableValue - })); - addableValueStr_1 = addableValue; - } - _this.main.search(''); - setTimeout(function () { - _this.main.set(addableValueStr_1, 'value', false, false); - }, 100); - if (_this.main.config.closeOnSelect) { - setTimeout(function () { - _this.main.close(); - }, 100); - } - } - }; - container.appendChild(addable); - searchReturn.addable = addable; - } - return searchReturn; - }; - Slim.prototype.highlightUp = function () { - var highlighted = this.list.querySelector('.' + this.main.config.highlighted); - var prev = null; - if (highlighted) { - prev = highlighted.previousSibling; - while (prev !== null) { - if (prev.classList.contains(this.main.config.disabled)) { - prev = prev.previousSibling; - continue; - } - else { - break; - } - } - } - else { - var allOptions = this.list.querySelectorAll('.' + this.main.config.option + ':not(.' + this.main.config.disabled + ')'); - prev = allOptions[allOptions.length - 1]; - } - if (prev && prev.classList.contains(this.main.config.optgroupLabel)) { - prev = null; - } - if (prev === null) { - var parent_1 = highlighted.parentNode; - if (parent_1.classList.contains(this.main.config.optgroup)) { - if (parent_1.previousSibling) { - var prevNodes = parent_1.previousSibling.querySelectorAll('.' + this.main.config.option + ':not(.' + this.main.config.disabled + ')'); - if (prevNodes.length) { - prev = prevNodes[prevNodes.length - 1]; - } - } - } - } - if (prev) { - if (highlighted) { - highlighted.classList.remove(this.main.config.highlighted); - } - prev.classList.add(this.main.config.highlighted); - helper_1.ensureElementInView(this.list, prev); - } - }; - Slim.prototype.highlightDown = function () { - var highlighted = this.list.querySelector('.' + this.main.config.highlighted); - var next = null; - if (highlighted) { - next = highlighted.nextSibling; - while (next !== null) { - if (next.classList.contains(this.main.config.disabled)) { - next = next.nextSibling; - continue; - } - else { - break; - } - } - } - else { - next = this.list.querySelector('.' + this.main.config.option + ':not(.' + this.main.config.disabled + ')'); - } - if (next === null && highlighted !== null) { - var parent_2 = highlighted.parentNode; - if (parent_2.classList.contains(this.main.config.optgroup)) { - if (parent_2.nextSibling) { - var sibling = parent_2.nextSibling; - next = sibling.querySelector('.' + this.main.config.option + ':not(.' + this.main.config.disabled + ')'); - } - } - } - if (next) { - if (highlighted) { - highlighted.classList.remove(this.main.config.highlighted); - } - next.classList.add(this.main.config.highlighted); - helper_1.ensureElementInView(this.list, next); - } - }; - Slim.prototype.listDiv = function () { - var list = document.createElement('div'); - list.classList.add(this.main.config.list); - return list; - }; - Slim.prototype.options = function (content) { - if (content === void 0) { content = ''; } - var data = this.main.data.filtered || this.main.data.data; - this.list.innerHTML = ''; - if (content !== '') { - var searching = document.createElement('div'); - searching.classList.add(this.main.config.option); - searching.classList.add(this.main.config.disabled); - searching.innerHTML = content; - this.list.appendChild(searching); - return; - } - if (this.main.config.isAjax && this.main.config.isSearching) { - var searching = document.createElement('div'); - searching.classList.add(this.main.config.option); - searching.classList.add(this.main.config.disabled); - searching.innerHTML = this.main.config.searchingText; - this.list.appendChild(searching); - return; - } - if (data.length === 0) { - var noResults = document.createElement('div'); - noResults.classList.add(this.main.config.option); - noResults.classList.add(this.main.config.disabled); - noResults.innerHTML = this.main.config.searchText; - this.list.appendChild(noResults); - return; - } - var _loop_1 = function (d) { - if (d.hasOwnProperty('label')) { - var item = d; - var optgroupEl_1 = document.createElement('div'); - optgroupEl_1.classList.add(this_1.main.config.optgroup); - var optgroupLabel = document.createElement('div'); - optgroupLabel.classList.add(this_1.main.config.optgroupLabel); - if (this_1.main.config.selectByGroup && this_1.main.config.isMultiple) { - optgroupLabel.classList.add(this_1.main.config.optgroupLabelSelectable); - } - optgroupLabel.innerHTML = item.label; - optgroupEl_1.appendChild(optgroupLabel); - var options = item.options; - if (options) { - for (var _i = 0, options_1 = options; _i < options_1.length; _i++) { - var o = options_1[_i]; - optgroupEl_1.appendChild(this_1.option(o)); - } - if (this_1.main.config.selectByGroup && this_1.main.config.isMultiple) { - var master_1 = this_1; - optgroupLabel.addEventListener('click', function (e) { - e.preventDefault(); - e.stopPropagation(); - for (var _i = 0, _a = optgroupEl_1.children; _i < _a.length; _i++) { - var childEl = _a[_i]; - if (childEl.className.indexOf(master_1.main.config.option) !== -1) { - childEl.click(); - } - } - }); - } - } - this_1.list.appendChild(optgroupEl_1); - } - else { - this_1.list.appendChild(this_1.option(d)); - } - }; - var this_1 = this; - for (var _i = 0, data_2 = data; _i < data_2.length; _i++) { - var d = data_2[_i]; - _loop_1(d); - } - }; - Slim.prototype.option = function (data) { - if (data.placeholder) { - var placeholder = document.createElement('div'); - placeholder.classList.add(this.main.config.option); - placeholder.classList.add(this.main.config.hide); - return placeholder; - } - var optionEl = document.createElement('div'); - optionEl.classList.add(this.main.config.option); - if (data["class"]) { - data["class"].split(' ').forEach(function (dataClass) { - optionEl.classList.add(dataClass); - }); - } - if (data.style) { - optionEl.style.cssText = data.style; - } - var selected = this.main.data.getSelected(); - optionEl.dataset.id = data.id; - if (this.main.config.searchHighlight && this.main.slim && data.innerHTML && this.main.slim.search.input.value.trim() !== '') { - optionEl.innerHTML = helper_1.highlight(data.innerHTML, this.main.slim.search.input.value, this.main.config.searchHighlighter); - } - else if (data.innerHTML) { - optionEl.innerHTML = data.innerHTML; - } - if (this.main.config.showOptionTooltips && optionEl.textContent) { - optionEl.setAttribute('title', optionEl.textContent); - } - var master = this; - optionEl.addEventListener('click', function (e) { - e.preventDefault(); - e.stopPropagation(); - var element = this; - var elementID = element.dataset.id; - if (data.selected === true && master.main.config.allowDeselectOption) { - var shouldUpdate = false; - if (!master.main.beforeOnChange || !master.main.config.isMultiple) { - shouldUpdate = true; - } - if (master.main.beforeOnChange && master.main.config.isMultiple) { - var selectedValues = master.main.data.getSelected(); - var currentValues = JSON.parse(JSON.stringify(selectedValues)); - for (var i = 0; i < currentValues.length; i++) { - if (currentValues[i].id === elementID) { - currentValues.splice(i, 1); - } - } - var beforeOnchange = master.main.beforeOnChange(currentValues); - if (beforeOnchange !== false) { - shouldUpdate = true; - } - } - if (shouldUpdate) { - if (master.main.config.isMultiple) { - master.main.data.removeFromSelected(elementID, 'id'); - master.main.render(); - master.main.select.setValue(); - master.main.data.onDataChange(); - } - else { - master.main.set(''); - } - } - } - else { - if (data.disabled || data.selected) { - return; - } - if (master.main.config.limit && Array.isArray(selected) && master.main.config.limit <= selected.length) { - return; - } - if (master.main.beforeOnChange) { - var value = void 0; - var objectInfo = JSON.parse(JSON.stringify(master.main.data.getObjectFromData(elementID))); - objectInfo.selected = true; - if (master.main.config.isMultiple) { - value = JSON.parse(JSON.stringify(selected)); - value.push(objectInfo); - } - else { - value = JSON.parse(JSON.stringify(objectInfo)); - } - var beforeOnchange = master.main.beforeOnChange(value); - if (beforeOnchange !== false) { - master.main.set(elementID, 'id', master.main.config.closeOnSelect); - } - } - else { - master.main.set(elementID, 'id', master.main.config.closeOnSelect); - } - } - }); - var isSelected = selected && helper_1.isValueInArrayOfObjects(selected, 'id', data.id); - if (data.disabled || isSelected) { - optionEl.onclick = null; - if (!master.main.config.allowDeselectOption) { - optionEl.classList.add(this.main.config.disabled); - } - if (master.main.config.hideSelectedOption) { - optionEl.classList.add(this.main.config.hide); - } - } - if (isSelected) { - optionEl.classList.add(this.main.config.optionSelected); - } - else { - optionEl.classList.remove(this.main.config.optionSelected); - } - return optionEl; - }; - return Slim; -}()); -exports.Slim = Slim; - - -/***/ }) -/******/ ])["default"]; -}); \ No newline at end of file diff --git a/website/appphp/static/vendors/slimselect/slimselect.min.css b/website/appphp/static/vendors/slimselect/slimselect.min.css deleted file mode 100644 index 753635a9..00000000 --- a/website/appphp/static/vendors/slimselect/slimselect.min.css +++ /dev/null @@ -1 +0,0 @@ -.ss-main{position:relative;display:inline-block;user-select:none;color:#666;width:100%}.ss-main .ss-single-selected{display:flex;cursor:pointer;width:100%;height:30px;padding:6px;border:1px solid #dcdee2;border-radius:4px;background-color:#fff;outline:0;box-sizing:border-box;transition:background-color .2s}.ss-main .ss-single-selected.ss-disabled{background-color:#dcdee2;cursor:not-allowed}.ss-main .ss-single-selected.ss-open-above{border-top-left-radius:0;border-top-right-radius:0}.ss-main .ss-single-selected.ss-open-below{border-bottom-left-radius:0;border-bottom-right-radius:0}.ss-main .ss-single-selected .placeholder{display:flex;flex:1 1 100%;align-items:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left;width:calc(100% - 30px);line-height:1em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ss-main .ss-single-selected .placeholder *{display:flex;align-items:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:auto}.ss-main .ss-single-selected .placeholder .ss-disabled{color:#dedede}.ss-main .ss-single-selected .ss-deselect{display:flex;align-items:center;justify-content:flex-end;flex:0 1 auto;margin:0 6px 0 6px;font-weight:700}.ss-main .ss-single-selected .ss-deselect.ss-hide{display:none}.ss-main .ss-single-selected .ss-arrow{display:flex;align-items:center;justify-content:flex-end;flex:0 1 auto;margin:0 6px 0 6px}.ss-main .ss-single-selected .ss-arrow span{border:solid #666;border-width:0 2px 2px 0;display:inline-block;padding:3px;transition:transform .2s,margin .2s}.ss-main .ss-single-selected .ss-arrow span.arrow-up{transform:rotate(-135deg);margin:3px 0 0 0}.ss-main .ss-single-selected .ss-arrow span.arrow-down{transform:rotate(45deg);margin:-3px 0 0 0}.ss-main .ss-multi-selected{display:flex;flex-direction:row;cursor:pointer;min-height:30px;width:100%;padding:0 0 0 3px;border:1px solid #dcdee2;border-radius:4px;background-color:#fff;outline:0;box-sizing:border-box;transition:background-color .2s}.ss-main .ss-multi-selected.ss-disabled{background-color:#dcdee2;cursor:not-allowed}.ss-main .ss-multi-selected.ss-disabled .ss-values .ss-disabled{color:#666}.ss-main .ss-multi-selected.ss-disabled .ss-values .ss-value .ss-value-delete{cursor:not-allowed}.ss-main .ss-multi-selected.ss-open-above{border-top-left-radius:0;border-top-right-radius:0}.ss-main .ss-multi-selected.ss-open-below{border-bottom-left-radius:0;border-bottom-right-radius:0}.ss-main .ss-multi-selected .ss-values{display:flex;flex-wrap:wrap;justify-content:flex-start;flex:1 1 100%;width:calc(100% - 30px)}.ss-main .ss-multi-selected .ss-values .ss-disabled{display:flex;padding:4px 5px;margin:2px 0;line-height:1em;align-items:center;width:100%;color:#dedede;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@keyframes scaleIn{0%{transform:scale(0);opacity:0}100%{transform:scale(1);opacity:1}}@keyframes scaleOut{0%{transform:scale(1);opacity:1}100%{transform:scale(0);opacity:0}}.ss-main .ss-multi-selected .ss-values .ss-value{display:flex;user-select:none;align-items:center;font-size:12px;padding:3px 5px;margin:3px 5px 3px 0;color:#fff;background-color:#5897fb;border-radius:4px;animation-name:scaleIn;animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:both}.ss-main .ss-multi-selected .ss-values .ss-value.ss-out{animation-name:scaleOut;animation-duration:.2s;animation-timing-function:ease-out}.ss-main .ss-multi-selected .ss-values .ss-value .ss-value-delete{margin:0 0 0 5px;cursor:pointer}.ss-main .ss-multi-selected .ss-add{display:flex;flex:0 1 3px;margin:9px 12px 0 5px}.ss-main .ss-multi-selected .ss-add .ss-plus{display:flex;justify-content:center;align-items:center;background:#666;position:relative;height:10px;width:2px;transition:transform .2s}.ss-main .ss-multi-selected .ss-add .ss-plus:after{background:#666;content:"";position:absolute;height:2px;width:10px;left:-4px;top:4px}.ss-main .ss-multi-selected .ss-add .ss-plus.ss-cross{transform:rotate(45deg)}.ss-content{position:absolute;width:100%;margin:-1px 0 0 0;box-sizing:border-box;border:solid 1px #dcdee2;z-index:1010;background-color:#fff;transform-origin:center top;transition:transform .2s,opacity .2s;opacity:0;transform:scaleY(0)}.ss-content.ss-open{display:block;opacity:1;transform:scaleY(1)}.ss-content .ss-search{display:flex;flex-direction:row;padding:8px 8px 6px 8px}.ss-content .ss-search.ss-hide{height:0;opacity:0;padding:0;margin:0}.ss-content .ss-search.ss-hide input{height:0;opacity:0;padding:0;margin:0}.ss-content .ss-search input{display:inline-flex;font-size:inherit;line-height:inherit;flex:1 1 auto;width:100%;min-width:0;height:30px;padding:6px 8px;margin:0;border:1px solid #dcdee2;border-radius:4px;background-color:#fff;outline:0;text-align:left;box-sizing:border-box;-webkit-box-sizing:border-box;-webkit-appearance:textfield}.ss-content .ss-search input::placeholder{color:#8a8a8a;vertical-align:middle}.ss-content .ss-search input:focus{box-shadow:0 0 5px #5897fb}.ss-content .ss-search .ss-addable{display:inline-flex;justify-content:center;align-items:center;cursor:pointer;font-size:22px;font-weight:700;flex:0 0 30px;height:30px;margin:0 0 0 8px;border:1px solid #dcdee2;border-radius:4px;box-sizing:border-box}.ss-content .ss-addable{padding-top:0}.ss-content .ss-list{max-height:200px;overflow-x:hidden;overflow-y:auto;text-align:left}.ss-content .ss-list .ss-optgroup .ss-optgroup-label{padding:6px 10px 6px 10px;font-weight:700}.ss-content .ss-list .ss-optgroup .ss-option{padding:6px 6px 6px 25px}.ss-content .ss-list .ss-optgroup-label-selectable{cursor:pointer}.ss-content .ss-list .ss-optgroup-label-selectable:hover{color:#fff;background-color:#5897fb}.ss-content .ss-list .ss-option{padding:6px 10px 6px 10px;cursor:pointer;user-select:none}.ss-content .ss-list .ss-option *{display:inline-block}.ss-content .ss-list .ss-option.ss-highlighted,.ss-content .ss-list .ss-option:hover{color:#fff;background-color:#5897fb}.ss-content .ss-list .ss-option.ss-disabled{cursor:not-allowed;color:#dedede;background-color:#fff}.ss-content .ss-list .ss-option:not(.ss-disabled).ss-option-selected{color:#666;background-color:rgba(88,151,251,.1)}.ss-content .ss-list .ss-option.ss-hide{display:none}.ss-content .ss-list .ss-option .ss-search-highlight{background-color:#fffb8c} \ No newline at end of file diff --git a/website/appphp/static/vendors/slimselect/slimselect.min.js b/website/appphp/static/vendors/slimselect/slimselect.min.js deleted file mode 100644 index 8638634d..00000000 --- a/website/appphp/static/vendors/slimselect/slimselect.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.SlimSelect=t():e.SlimSelect=t()}(window,function(){return s={},n.m=i=[function(e,t,i){"use strict";function s(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};var i=document.createEvent("CustomEvent");return i.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),i}var n;t.__esModule=!0,t.hasClassInTree=function(e,t){function s(e,t){return t&&e&&e.classList&&e.classList.contains(t)?e:null}return s(e,t)||function e(t,i){return t&&t!==document?s(t,i)?t:e(t.parentNode,i):null}(e,t)},t.ensureElementInView=function(e,t){var i=e.scrollTop+e.offsetTop,s=i+e.clientHeight,n=t.offsetTop,a=n+t.clientHeight;n=window.innerHeight?"above":i?t:"below"},t.debounce=function(n,a,o){var l;return void 0===a&&(a=100),void 0===o&&(o=!1),function(){for(var e=[],t=0;t[^<>]*'+l+"")},t.kebabCase=function(e){var t=e.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g,function(e){return"-"+e.toLowerCase()});return e[0]===e[0].toUpperCase()?t.substring(1):t},"function"!=typeof(n=window).CustomEvent&&(s.prototype=n.Event.prototype,n.CustomEvent=s)},function(e,t,i){"use strict";t.__esModule=!0;var s=(n.prototype.newOption=function(e){return{id:e.id?e.id:String(Math.floor(1e8*Math.random())),value:e.value?e.value:"",text:e.text?e.text:"",innerHTML:e.innerHTML?e.innerHTML:"",selected:!!e.selected&&e.selected,display:void 0===e.display||e.display,disabled:!!e.disabled&&e.disabled,placeholder:!!e.placeholder&&e.placeholder,class:e.class?e.class:void 0,data:e.data?e.data:{},mandatory:!!e.mandatory&&e.mandatory}},n.prototype.add=function(e){this.data.push({id:String(Math.floor(1e8*Math.random())),value:e.value,text:e.text,innerHTML:"",selected:!1,display:!0,disabled:!1,placeholder:!1,class:void 0,mandatory:e.mandatory,data:{}})},n.prototype.parseSelectData=function(){this.data=[];for(var e=0,t=this.main.select.element.childNodes;e *: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: bold; - min-width: 100%; -} - -.tabulator-print-table .tabulator-print-table-group:hover { - cursor: pointer; - background-color: rgba(0, 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, 0.1); - overflow: hidden; -} - -.tabulator-print-table .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 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; -} diff --git a/website/appphp/static/vendors/tabulator/css/tabulator.min.css b/website/appphp/static/vendors/tabulator/css/tabulator.min.css deleted file mode 100644 index bafd6c7f..00000000 --- a/website/appphp/static/vendors/tabulator/css/tabulator.min.css +++ /dev/null @@ -1,3 +0,0 @@ -/* Tabulator v4.7.0 (c) Oliver Folkerd */ -.tabulator{position:relative;border:1px solid #999;background-color:#888;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-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:1px solid #999;background-color:#e6e6e6;color:#555;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:#e6e6e6;text-align:left;vertical-align:bottom;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;border:1px solid #999;background:#cdcdcd;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:4px}.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:9px;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:#cdcdcd}.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 #666}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-arrow{border-top:6px solid #666;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:#f3f3f3!important;border-top:1px solid #aaa;border-bottom:1px solid #aaa;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#f3f3f3!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:#ccc;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:#e2e2e2!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #aaa}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #aaa}.tabulator .tabulator-footer{padding:5px 10px;border-top:1px solid #999;background-color:#e6e6e6;text-align:right;color:#555;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:-5px -10px 5px;text-align:left;background:#f3f3f3!important;border-bottom:1px solid #aaa;border-top:1px solid #aaa;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#f3f3f3!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{color:#555;font-family:inherit;font-weight:inherit;font-size:inherit}.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:hsla(0,0%,100%,.2)}.tabulator .tabulator-footer .tabulator-page.active{color:#d00}.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;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:4px;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;-ms-flex-pack:center;justify-content: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:#666}.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-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-row.tabulator-group:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}.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 #666;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 #666;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#d00}.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-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/website/appphp/static/vendors/tabulator/css/tabulator.min.css.map b/website/appphp/static/vendors/tabulator/css/tabulator.min.css.map deleted file mode 100644 index 47a4c5c5..00000000 --- a/website/appphp/static/vendors/tabulator/css/tabulator.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"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/appphp/static/vendors/tabulator/css/tabulator_midnight.css b/website/appphp/static/vendors/tabulator/css/tabulator_midnight.css deleted file mode 100644 index bc9796c9..00000000 --- a/website/appphp/static/vendors/tabulator/css/tabulator_midnight.css +++ /dev/null @@ -1,999 +0,0 @@ -/* Tabulator v4.7.0 (c) Oliver Folkerd */ -.tabulator { - position: relative; - border: 1px solid #293146; - background-color: #222; - overflow: hidden; - font-size: 14px; - text-align: left; - -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-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: 1px solid #999; - background-color: #293146; - color: #fff; - font-weight: bold; - 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; - border: 1px solid #999; - background: #1a1a1a; - pointer-events: none; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - box-sizing: border-box; - position: relative; - padding: 4px; -} - -.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: #444; - color: #fff; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow { - display: inline-block; - position: absolute; - top: 9px; - 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, .tabulator .tabulator-header .tabulator-col .tabulator-header-filter select { - border: 1px solid #999; - background: #444; - color: #fff; -} - -.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: #1a1a1a; -} - -.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 #666; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-arrow { - border-top: 6px solid #666; - 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 #888; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #888; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - box-sizing: border-box; - min-width: 600%; - background: #1a1a1a !important; - border-top: 1px solid #888; - border-bottom: 1px solid #aaa; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { - background: #1a1a1a !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: #eee; - font-weight: bold; - font-size: 20px; -} - -.tabulator .tabulator-tableHolder .tabulator-table { - position: relative; - display: inline-block; - background-color: #666; - white-space: nowrap; - overflow: visible; - color: #fff; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs { - font-weight: bold; - background: #373737 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top { - border-bottom: 2px solid #888; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom { - border-top: 2px solid #888; -} - -.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-footer { - padding: 5px 10px; - border-top: 1px solid #999; - background-color: #293146; - text-align: right; - color: #293146; - font-weight: bold; - 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: -5px -10px 5px -10px; - text-align: left; - background: #262626 !important; - border-bottom: 1px solid #888; - border-top: 1px solid #888; - overflow: hidden; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - background: #262626 !important; - color: #fff; -} - -.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: rgba(255, 255, 255, 0.2); - color: #293146; - font-family: inherit; - font-weight: inherit; - font-size: inherit; -} - -.tabulator .tabulator-footer .tabulator-page.active { - color: #fff; -} - -.tabulator .tabulator-footer .tabulator-page:disabled { - opacity: .5; -} - -.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - color: #fff; -} - -.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, 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: bold; - font-size: 16px; -} - -.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading { - border: 4px solid #293146; - 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: #666; -} - -.tabulator-row:nth-child(even) { - background-color: #444; -} - -.tabulator-row.tabulator-selectable:hover { - background-color: #999; - cursor: pointer; -} - -.tabulator-row.tabulator-selected { - background-color: #000; -} - -.tabulator-row.tabulator-selected:hover { - background-color: #888; - cursor: pointer; -} - -.tabulator-row.tabulator-moving { - position: absolute; - border-top: 1px solid #888; - border-bottom: 1px solid #888; - 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 #888; -} - -.tabulator-row .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #888; -} - -.tabulator-row .tabulator-responsive-collapse { - box-sizing: border-box; - padding: 5px; - border-top: 1px solid #888; - border-bottom: 1px solid #888; -} - -.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: 4px; - border-right: 1px solid #888; - vertical-align: middle; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.tabulator-row .tabulator-cell.tabulator-editing { - border: 1px solid #999; - 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 #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select { - border: 1px; - background: transparent; - color: #dd0000; -} - -.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: #666; -} - -.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 #888; - border-bottom: 2px solid #888; -} - -.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 #fff; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 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: #fff; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #fff; -} - -.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: #fff; -} - -.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: #fff; - color: #666; - font-weight: bold; - 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-bottom: 1px solid #999; - border-right: 1px solid #888; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #ccc; - font-weight: bold; - color: #293146; - min-width: 100%; -} - -.tabulator-row.tabulator-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); -} - -.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 #666; - 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 #666; - vertical-align: middle; -} - -.tabulator-row.tabulator-group span { - margin-left: 10px; - color: #666; -} - -.tabulator-menu { - position: absolute; - display: inline-block; - box-sizing: border-box; - background: #666; - border: 1px solid #888; - box-shadow: 0 0 5px 0 rgba(0, 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: #444; -} - -.tabulator-menu .tabulator-menu-separator { - border-top: 1px solid #888; -} - -.tabulator-edit-select-list { - position: absolute; - display: inline-block; - box-sizing: border-box; - max-height: 200px; - background: #fff; - border: 1px solid #888; - 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: #666; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item.active { - color: #999; - background: #444; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused { - outline: 1px solid rgba(153, 153, 153, 0.5); -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item.focused { - outline: 1px solid #444; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item:hover { - cursor: pointer; - color: #999; - background: #666; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-notice { - padding: 4px; - color: #fff; - text-align: center; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-group { - border-bottom: 1px solid #888; - padding: 4px; - padding-top: 6px; - color: #fff; - font-weight: bold; -} - -.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-bottom: 1px solid #999; - border-right: 1px solid #888; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #ccc; - font-weight: bold; - color: #293146; - min-width: 100%; -} - -.tabulator-print-table .tabulator-print-table-group:hover { - cursor: pointer; - background-color: rgba(0, 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: #666; -} - -.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 #888; - border-bottom: 2px solid #888; -} - -.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 #fff; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -.tabulator-print-table .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 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: #fff; -} - -.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #fff; -} - -.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: #fff; -} diff --git a/website/appphp/static/vendors/tabulator/css/tabulator_midnight.min.css b/website/appphp/static/vendors/tabulator/css/tabulator_midnight.min.css deleted file mode 100644 index a9ea0dee..00000000 --- a/website/appphp/static/vendors/tabulator/css/tabulator_midnight.min.css +++ /dev/null @@ -1,3 +0,0 @@ -/* Tabulator v4.7.0 (c) Oliver Folkerd */ -.tabulator{position:relative;border:1px solid #333;background-color:#222;overflow:hidden;font-size:14px;text-align:left;transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.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:1px solid #999;background-color:#333;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:#333;text-align:left;vertical-align:bottom;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;border:1px solid #999;background:#1a1a1a;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:4px}.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:#444;color:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{display:inline-block;position:absolute;top:9px;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,.tabulator .tabulator-header .tabulator-col .tabulator-header-filter select{border:1px solid #999;background:#444;color:#fff}.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:#1a1a1a}.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 #666}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-arrow{border-top:6px solid #666;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 #888}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #888}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;min-width:600%;background:#1a1a1a!important;border-top:1px solid #888;border-bottom:1px solid #aaa;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#1a1a1a!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:#eee;font-weight:700;font-size:20px}.tabulator .tabulator-tableHolder .tabulator-table{position:relative;display:inline-block;background-color:#666;white-space:nowrap;overflow:visible;color:#fff}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs{font-weight:700;background:#373737!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #888}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #888}.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-footer{padding:5px 10px;border-top:1px solid #999;background-color:#333;text-align:right;color:#333;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:-5px -10px 5px;text-align:left;background:#262626!important;border-bottom:1px solid #888;border-top:1px solid #888;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#262626!important;color:#fff}.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:hsla(0,0%,100%,.2);color:#333;font-family:inherit;font-weight:inherit;font-size:inherit}.tabulator .tabulator-footer .tabulator-page.active{color:#fff}.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-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:#666}.tabulator-row:nth-child(2n){background-color:#444}.tabulator-row.tabulator-selectable:hover{background-color:#999;cursor:pointer}.tabulator-row.tabulator-selected{background-color:#000}.tabulator-row.tabulator-selected:hover{background-color:#888;cursor:pointer}.tabulator-row.tabulator-moving{position:absolute;border-top:1px solid #888;border-bottom:1px solid #888;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 #888}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #888}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #888;border-bottom:1px solid #888}.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:4px;border-right:1px solid #888;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #999;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:#666}.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 #888;border-bottom:2px solid #888}.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 #fff;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:#fff}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#fff}.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:#fff}.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:#fff;color:#666;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-bottom:1px solid #999;border-right:1px solid #888;border-top:1px solid #999;padding:5px;padding-left:10px;background:#ccc;font-weight:700;color:#333;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}.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 #666;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 #666;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#666}.tabulator-menu{position:absolute;display:inline-block;box-sizing:border-box;background:#666;border:1px solid #888;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:#444}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #888}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:#fff;border:1px solid #888;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:#666}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#999;background:#444}.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused{outline:1px solid hsla(0,0%,60%,.5)}.tabulator-edit-select-list .tabulator-edit-select-list-item.focused{outline:1px solid #444}.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{cursor:pointer;color:#999;background:#666}.tabulator-edit-select-list .tabulator-edit-select-list-notice{padding:4px;color:#fff;text-align:center}.tabulator-edit-select-list .tabulator-edit-select-list-group{border-bottom:1px solid #888;padding:4px;padding-top:6px;color:#fff;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-bottom:1px solid #999;border-right:1px solid #888;border-top:1px solid #999;padding:5px;padding-left:10px;background:#ccc;font-weight:700;color:#333;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:#666}.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 #888;border-bottom:2px solid #888}.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 #fff;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:#fff}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#fff}.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:#fff} -/*# sourceMappingURL=tabulator_midnight.min.css.map */ diff --git a/website/appphp/static/vendors/tabulator/css/tabulator_midnight.min.css.map b/website/appphp/static/vendors/tabulator/css/tabulator_midnight.min.css.map deleted file mode 100644 index 0a419462..00000000 --- a/website/appphp/static/vendors/tabulator/css/tabulator_midnight.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_midnight.scss"],"names":[],"mappings":"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","file":"tabulator_midnight.min.css","sourcesContent":["/* Tabulator v4.7.0 (c) Oliver Folkerd */\n\n\r\n//Main Theme Variables\r\n$backgroundColor: #222 !default; //background color of tabulator\r\n$borderColor:#333 !default; //border to tabulator\r\n$textSize:14px !default; //table text size\r\n\r\n//header themeing\r\n$headerBackgroundColor:#333 !default; //border to tabulator\r\n$headerTextColor:#fff !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:#666 !default; //table row background color\r\n$rowAltBackgroundColor:#444 !default; //table row background color\r\n$rowBorderColor:#888 !default; //table border color\r\n$rowTextColor:#fff !default; //table text color\r\n$rowHoverBackground:#999 !default; //row background color on hover\r\n\r\n$rowSelectedBackground: #000 !default; //row background color when selected\r\n$rowSelectedBackgroundHover: #888 !default;//row background color when selected and hovered\r\n\r\n$editBoxColor:#999 !default; //border color for edit boxes\r\n$errorColor:#dd0000 !default; //error indication\r\n\r\n//footer themeing\r\n$footerBackgroundColor:#333 !default; //border to tabulator\r\n$footerTextColor:#333 !default; //footer text colour\r\n$footerBorderColor:#aaa !default; //footer border color\r\n$footerSeperatorColor:#999 !default; //footer bottom seperator color\r\n$footerActiveColor:#fff !default; //footer bottom active text color\r\n\r\n\r\n//Tabulator Containing Element\r\n.tabulator{\r\n\tposition: relative;\r\n\tborder: 1px solid $borderColor;\r\n\tbackground-color: $backgroundColor;\r\n\toverflow:hidden;\r\n\tfont-size:$textSize;\r\n\ttext-align: left;\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-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: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: #444;\r\n\t\t\t\t\t\tcolor: #fff;\r\n\t\t\t\t\t}\r\n\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, select{\r\n\t\t\t\t\tborder:1px solid #999;\r\n\t\t\t\t\tbackground: #444;\r\n\t\t\t\t\tcolor: #fff;\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\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\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:darken($headerBackgroundColor, 10%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:darken($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\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\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:#eee;\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: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\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//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:darken($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:darken($footerBackgroundColor, 5%) !important;\r\n\t\t\t\tcolor:$headerTextColor;\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//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:rgba(255,255,255,.2);\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//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\r\n\tmin-height:$textSize + ($headerMargin * 2);\r\n\tbackground-color: $rowBackgroundColor;\r\n\r\n\t&:nth-child(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-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\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\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:#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:#fff;\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\r\n\t//row grouping element\r\n\t&.tabulator-group{\r\n\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\t\tcolor:#333;\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\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:#666;\r\n\t\t}\r\n\t}\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:$rowTextColor;\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:$rowBackgroundColor;\r\n\r\n\t\t&.active{\r\n\t\t\tcolor:$editBoxColor;\r\n\t\t\tbackground:$rowAltBackgroundColor;\r\n\r\n\t\t\t&.focused{\r\n\t\t\t\toutline:1px solid rgba($editBoxColor, .5);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.focused{\r\n\t\t\toutline:1px solid $rowAltBackgroundColor;\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:$editBoxColor;\r\n\t\t\tbackground:$rowBackgroundColor;\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\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\t\tcolor:#333;\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\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\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:#666;\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/website/appphp/static/vendors/tabulator/css/tabulator_modern.css b/website/appphp/static/vendors/tabulator/css/tabulator_modern.css deleted file mode 100644 index 90defa54..00000000 --- a/website/appphp/static/vendors/tabulator/css/tabulator_modern.css +++ /dev/null @@ -1,1032 +0,0 @@ -/* Tabulator v4.7.0 (c) Oliver Folkerd */ -.tabulator { - position: relative; - border: 1px solid #fff; - background-color: #fff; - overflow: hidden; - font-size: 16px; - text-align: left; - -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-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 #3759D7; - margin-bottom: 4px; - background-color: #fff; - color: #3759D7; - font-weight: bold; - white-space: nowrap; - overflow: hidden; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - padding-left: 10px; - font-size: 1.1em; -} - -.tabulator .tabulator-header.tabulator-header-hidden { - display: none; -} - -.tabulator .tabulator-header .tabulator-col { - display: inline-block; - position: relative; - box-sizing: border-box; - border-right: 2px solid #fff; - background-color: #fff; - text-align: left; - vertical-align: bottom; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-moving { - position: absolute; - border: 1px solid #3759D7; - background: #e6e6e6; - pointer-events: none; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - box-sizing: border-box; - position: relative; - padding: 4px; -} - -.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 #3759D7; - padding: 1px; - background: #fff; - font-size: 1em; - color: #3759D7; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow { - display: inline-block; - position: absolute; - top: 9px; - right: 8px; - width: 0; - height: 0; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #b7c3f1; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - position: relative; - display: -ms-flexbox; - display: flex; - border-top: 2px solid #3759D7; - 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: #e6e6e6; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #b7c3f1; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #3759D7; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-arrow { - border-top: 6px solid #3759D7; - 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 { - padding-left: 10px; - border-right: 2px solid #fff; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #fff; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - box-sizing: border-box; - min-width: 600%; - border-top: 2px solid #3759D7 !important; - background: white !important; - border-top: 1px solid #fff; - border-bottom: 1px solid #fff; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { - padding-left: 0 !important; - background: white !important; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-cell { - background: 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: #3759D7; - font-weight: bold; - font-size: 20px; -} - -.tabulator .tabulator-tableHolder .tabulator-table { - position: relative; - display: inline-block; - background-color: #f3f3f3; - white-space: nowrap; - overflow: visible; - color: #333; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs { - font-weight: bold; - background: #f2f2f2 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top { - border-bottom: 2px solid #3759D7; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom { - border-top: 2px solid #3759D7; -} - -.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-footer { - padding: 5px 10px; - border-top: 1px solid #999; - background-color: #fff; - text-align: right; - color: #3759D7; - font-weight: bold; - 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: -5px -10px 5px -10px; - text-align: left; - background: white !important; - border-top: 3px solid #3759D7 !important; - border-bottom: 2px solid #3759D7 !important; - border-bottom: 1px solid #fff; - border-top: 1px solid #fff; - overflow: hidden; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - background: white !important; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-cell { - background: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-cell:first-child { - border-left: 10px solid transparent; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder:only-child { - margin-bottom: -5px; - border-bottom: none; - border-bottom: none !important; -} - -.tabulator .tabulator-footer .tabulator-paginator { - color: #3759D7; - font-family: inherit; - font-weight: inherit; - font-size: inherit; -} - -.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: rgba(255, 255, 255, 0.2); -} - -.tabulator .tabulator-footer .tabulator-page.active { - color: #3759D7; -} - -.tabulator .tabulator-footer .tabulator-page:disabled { - opacity: .5; -} - -.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - color: #fff; -} - -.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, 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: bold; - 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; - box-sizing: border-box; - min-height: 24px; - margin-bottom: 2px; -} - -.tabulator-row .tabulator-cell:first-child { - border-left: 10px solid #3759D7; -} - -.tabulator-row:nth-child(even) { - background-color: #627ce0; -} - -.tabulator-row:nth-child(even) .tabulator-cell { - background-color: #fff; -} - -.tabulator-row:nth-child(even) .tabulator-cell:first-child { - border-left: 10px solid #627ce0; -} - -.tabulator-row.tabulator-selectable:hover { - cursor: pointer; -} - -.tabulator-row.tabulator-selectable:hover .tabulator-cell { - background-color: #bbb; -} - -.tabulator-row.tabulator-selected .tabulator-cell { - background-color: #9ABCEA; -} - -.tabulator-row.tabulator-selected:hover .tabulator-cell { - background-color: #769BCC; - cursor: pointer; -} - -.tabulator-row.tabulator-moving { - position: absolute; - border-top: 1px solid #fff; - border-bottom: 1px solid #fff; - 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 #fff; -} - -.tabulator-row .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #fff; -} - -.tabulator-row .tabulator-responsive-collapse { - box-sizing: border-box; - padding: 5px; - border-top: 1px solid #fff; - border-bottom: 1px solid #fff; -} - -.tabulator-row .tabulator-responsive-collapse:empty { - display: none; -} - -.tabulator-row .tabulator-responsive-collapse table { - font-size: 16px; -} - -.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 4px; - border-right: 2px solid #fff; - vertical-align: middle; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - background-color: #f3f3f3; -} - -.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 #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select { - border: 1px; - background: transparent; - color: #dd0000; -} - -.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; - -ms-flex-pack: center; - justify-content: 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: #666; -} - -.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 #fff; - border-bottom: 2px solid #fff; -} - -.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, 0.1); - overflow: hidden; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 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: #f3f3f3; - font-weight: bold; - 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-bottom: 2px solid #3759D7; - border-top: 2px solid #3759D7; - padding: 5px; - padding-left: 10px; - background: #8ca0e8; - font-weight: bold; - color: fff; - margin-bottom: 2px; - min-width: 100%; -} - -.tabulator-row.tabulator-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); -} - -.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 #3759D7; - 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 #3759D7; - vertical-align: middle; -} - -.tabulator-row.tabulator-group span { - margin-left: 10px; - color: #3759D7; -} - -.tabulator-menu { - position: absolute; - display: inline-block; - box-sizing: border-box; - background: #f3f3f3; - border: 1px solid #fff; - box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2); - font-size: 16px; - 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: #fff; -} - -.tabulator-menu .tabulator-menu-separator { - border-top: 1px solid #fff; -} - -.tabulator-edit-select-list { - position: absolute; - display: inline-block; - box-sizing: border-box; - max-height: 200px; - background: #f3f3f3; - border: 1px solid #1D68CD; - font-size: 16px; - 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: #f3f3f3; - background: #1D68CD; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused { - outline: 1px solid rgba(243, 243, 243, 0.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: #f3f3f3; - 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 #fff; - padding: 4px; - padding-top: 6px; - color: #333; - font-weight: bold; -} - -.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-bottom: 2px solid #3759D7; - border-top: 2px solid #3759D7; - padding: 5px; - padding-left: 10px; - background: #8ca0e8; - font-weight: bold; - color: fff; - margin-bottom: 2px; - min-width: 100%; -} - -.tabulator-print-table .tabulator-print-table-group:hover { - cursor: pointer; - background-color: rgba(0, 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 #3759D7; - 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 #3759D7; - vertical-align: middle; -} - -.tabulator-print-table .tabulator-print-table-group span { - margin-left: 10px; - color: #3759D7; -} - -.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 #fff; - border-bottom: 2px solid #fff; -} - -.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, 0.1); - overflow: hidden; -} - -.tabulator-print-table .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 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; -} diff --git a/website/appphp/static/vendors/tabulator/css/tabulator_modern.min.css b/website/appphp/static/vendors/tabulator/css/tabulator_modern.min.css deleted file mode 100644 index df7a81a7..00000000 --- a/website/appphp/static/vendors/tabulator/css/tabulator_modern.min.css +++ /dev/null @@ -1,3 +0,0 @@ -/* Tabulator v4.7.0 (c) Oliver Folkerd */ -.tabulator{position:relative;border:1px solid #fff;background-color:#fff;overflow:hidden;font-size:16px;text-align:left;transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.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 #3759d7;margin-bottom:4px;background-color:#fff;color:#3759d7;font-weight:700;white-space:nowrap;overflow:hidden;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;padding-left:10px;font-size:1.1em}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-col{display:inline-block;position:relative;box-sizing:border-box;border-right:2px solid #fff;background-color:#fff;text-align:left;vertical-align:bottom;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;border:1px solid #3759d7;background:#e6e6e6;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:4px}.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 #3759d7;padding:1px;background:#fff;font-size:1em;color:#3759d7}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{display:inline-block;position:absolute;top:9px;right:8px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #b7c3f1}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{position:relative;display:-ms-flexbox;display:flex;border-top:2px solid #3759d7;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:#e6e6e6}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #b7c3f1}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #3759d7}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-arrow{border-top:6px solid #3759d7;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{padding-left:10px;border-right:2px solid #fff}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #fff}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;min-width:600%;border-top:2px solid #3759d7!important;background:#fff!important;border-top:1px solid #fff;border-bottom:1px solid #fff;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{padding-left:0!important;background:#fff!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-cell{background: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:#3759d7;font-weight:700;font-size:20px}.tabulator .tabulator-tableHolder .tabulator-table{position:relative;display:inline-block;background-color:#f3f3f3;white-space:nowrap;overflow:visible;color:#333}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs{font-weight:700;background:#f2f2f2!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #3759d7}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #3759d7}.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-footer{padding:5px 10px;border-top:1px solid #999;background-color:#fff;text-align:right;color:#3759d7;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:-5px -10px 5px;text-align:left;background:#fff!important;border-top:3px solid #3759d7!important;border-bottom:2px solid #3759d7!important;border-bottom:1px solid #fff;border-top:1px solid #fff;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#fff!important}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-cell{background:none}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-cell:first-child{border-left:10px solid transparent}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{margin-bottom:-5px;border-bottom:none;border-bottom:none!important}.tabulator .tabulator-footer .tabulator-paginator{color:#3759d7;font-family:inherit;font-weight:inherit;font-size:inherit}.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:hsla(0,0%,100%,.2)}.tabulator .tabulator-footer .tabulator-page.active{color:#3759d7}.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-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:24px;margin-bottom:2px}.tabulator-row .tabulator-cell:first-child{border-left:10px solid #3759d7}.tabulator-row:nth-child(2n){background-color:#627ce0}.tabulator-row:nth-child(2n) .tabulator-cell{background-color:#fff}.tabulator-row:nth-child(2n) .tabulator-cell:first-child{border-left:10px solid #627ce0}.tabulator-row.tabulator-selectable:hover{cursor:pointer}.tabulator-row.tabulator-selectable:hover .tabulator-cell{background-color:#bbb}.tabulator-row.tabulator-selected .tabulator-cell{background-color:#9abcea}.tabulator-row.tabulator-selected:hover .tabulator-cell{background-color:#769bcc;cursor:pointer}.tabulator-row.tabulator-moving{position:absolute;border-top:1px solid #fff;border-bottom:1px solid #fff;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 #fff}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #fff}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #fff;border-bottom:1px solid #fff}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:16px}.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 4px;border-right:2px solid #fff;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background-color:#f3f3f3}.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;-ms-flex-pack:center;justify-content: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:#666}.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 #fff;border-bottom:2px solid #fff}.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:#f3f3f3;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-bottom:2px solid #3759d7;border-top:2px solid #3759d7;padding:5px;padding-left:10px;background:#8ca0e8;font-weight:700;color:fff;margin-bottom:2px;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}.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 #3759d7;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 #3759d7;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#3759d7}.tabulator-menu{position:absolute;display:inline-block;box-sizing:border-box;background:#f3f3f3;border:1px solid #fff;box-shadow:0 0 5px 0 rgba(0,0,0,.2);font-size:16px;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:#fff}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #fff}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:#f3f3f3;border:1px solid #1d68cd;font-size:16px;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:#f3f3f3;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused{outline:1px solid hsla(0,0%,95%,.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:#f3f3f3;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 #fff;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-bottom:2px solid #3759d7;border-top:2px solid #3759d7;padding:5px;padding-left:10px;background:#8ca0e8;font-weight:700;color:fff;margin-bottom:2px;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 #3759d7;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 #3759d7;vertical-align:middle}.tabulator-print-table .tabulator-print-table-group span{margin-left:10px;color:#3759d7}.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 #fff;border-bottom:2px solid #fff}.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_modern.min.css.map */ diff --git a/website/appphp/static/vendors/tabulator/css/tabulator_modern.min.css.map b/website/appphp/static/vendors/tabulator/css/tabulator_modern.min.css.map deleted file mode 100644 index 5f594c87..00000000 --- a/website/appphp/static/vendors/tabulator/css/tabulator_modern.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_modern.scss"],"names":[],"mappings":"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","file":"tabulator_modern.min.css","sourcesContent":["/* Tabulator v4.7.0 (c) Oliver Folkerd */\n\n\r\n$primary: #3759D7 !default; //the base text color from which the rest of the theme derives\r\n\r\n//Main Theme Variables\r\n$backgroundColor: #fff !default; //background color of tabulator\r\n$borderColor:#fff !default; //border to tabulator\r\n$textSize:16px !default; //table text size\r\n\r\n//header themeing\r\n$headerBackgroundColor:#fff !default; //border to tabulator\r\n$headerTextColor:$primary !default; //header text colour\r\n$headerBorderColor:#fff !default; //header border color\r\n$headerSeperatorColor:$primary !default; //header bottom seperator color\r\n$headerMargin:4px !default; //padding round header\r\n\r\n//column header arrows\r\n$sortArrowActive: $primary !default;\r\n$sortArrowInactive: lighten($primary, 30%) !default;\r\n\r\n//row themeing\r\n$rowBackgroundColor:#f3f3f3 !default; //table row background color\r\n$rowAltBackgroundColor:#fff !default; //table row background color\r\n$rowBorderColor:#fff !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:#fff !default; //border to tabulator\r\n$footerTextColor:$primary !default; //footer text colour\r\n$footerBorderColor:#aaa !default; //footer border color\r\n$footerSeperatorColor:#999 !default; //footer bottom seperator color\r\n$footerActiveColor:$primary !default; //footer bottom active text color\r\n\r\n$handleWidth:10px !default; //width of the row handle\r\n$handleColor: $primary !default; //color for odd numbered rows\r\n$handleColorAlt: lighten($primary, 10%) !default; //color for even numbered rows\r\n\r\n\r\n//Tabulator Containing Element\r\n.tabulator{\r\n\tposition: relative;\r\n\tborder: 1px solid $borderColor;\r\n\tbackground-color: $backgroundColor;\r\n\toverflow:hidden;\r\n\tfont-size:$textSize;\r\n\ttext-align: left;\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:3px solid $headerSeperatorColor;\r\n\t\tmargin-bottom:4px;\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\tpadding-left:$handleWidth;\r\n\r\n\t\tfont-size: 1.1em;\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:2px 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: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 $primary;\r\n\r\n\t\t\t\t\t\tpadding:1px;\r\n\r\n\t\t\t\t\t\tbackground: #fff;\r\n\r\n\t\t\t\t\t\tfont-size: 1em;\r\n\t\t\t\t\t\tcolor: $primary;\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:2px solid $headerSeperatorColor;\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\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\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\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\tpadding-left: $handleWidth;\r\n\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\tborder-top:2px solid $headerSeperatorColor !important;\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\tpadding-left: 0 !important;\r\n\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\r\n\t\t\t\t.tabulator-cell{\r\n\t\t\t\t\tbackground: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:$primary;\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: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 $headerSeperatorColor;\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 $headerSeperatorColor;\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\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//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\tborder-top:3px solid $headerSeperatorColor !important;\r\n\t\t\tborder-bottom:2px solid $headerSeperatorColor !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\r\n\t\t\t\t.tabulator-cell{\r\n\t\t\t\t\tbackground:none;\r\n\r\n\t\t\t\t\t&:first-child{\r\n\t\t\t\t\t\tborder-left: $handleWidth solid transparent;\r\n\t\t\t\t\t}\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\tborder-bottom:none !important;\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\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//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: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//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\r\n\tbox-sizing: border-box;\r\n\tmin-height:$textSize + ($headerMargin * 2);\r\n\r\n\t// background-color: $handleColor;\r\n\r\n\t// padding-left: $handleWidth !important;\r\n\r\n\tmargin-bottom: 2px;\r\n\r\n\t.tabulator-cell{\r\n\t\t&:first-child{\r\n\t\t\tborder-left: $handleWidth solid $handleColor;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t&:nth-child(even){\r\n\t\tbackground-color: $handleColorAlt;\r\n\r\n\t\t.tabulator-cell{\r\n\t\t\tbackground-color: $rowAltBackgroundColor;\r\n\r\n\t\t\t&:first-child{\r\n\t\t\t\tborder-left: $handleWidth solid $handleColorAlt;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&.tabulator-selectable:hover{\r\n\t\tcursor: pointer;\r\n\r\n\t\t.tabulator-cell{\r\n\t\t\tbackground-color:$rowHoverBackground;\r\n\t\t}\r\n\t}\r\n\r\n\t&.tabulator-selected{\r\n\t\t.tabulator-cell{\r\n\t\t\tbackground-color:$rowSelectedBackground;\r\n\t\t}\r\n\t}\r\n\r\n\t&.tabulator-selected:hover{\r\n\t\t.tabulator-cell{\r\n\t\t\tbackground-color:$rowSelectedBackgroundHover;\r\n\t\t\tcursor: pointer;\r\n\t\t}\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\t// padding-left: $handleWidth;\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 4px;\r\n\t\tborder-right:2px 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\tbackground-color: $rowBackgroundColor;\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\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\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:2px solid $primary;\r\n\t\tborder-top:2px solid $primary;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:lighten($primary, 20%);\r\n\t\tfont-weight:bold;\r\n\t\tcolor:fff;\r\n\t\tmargin-bottom: 2px;\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\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\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:$primary;\r\n\t\t}\r\n\t}\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 $editBoxColor;\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\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:2px solid $primary;\r\n\t\tborder-top:2px solid $primary;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:lighten($primary, 20%);\r\n\t\tfont-weight:bold;\r\n\t\tcolor:fff;\r\n\t\tmargin-bottom: 2px;\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\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\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:$primary;\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/website/appphp/static/vendors/tabulator/css/tabulator_simple.css b/website/appphp/static/vendors/tabulator/css/tabulator_simple.css deleted file mode 100644 index fb660a90..00000000 --- a/website/appphp/static/vendors/tabulator/css/tabulator_simple.css +++ /dev/null @@ -1,992 +0,0 @@ -/* Tabulator v4.7.0 (c) Oliver Folkerd */ -.tabulator { - position: relative; - background-color: #fff; - overflow: hidden; - font-size: 14px; - text-align: left; - -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-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: 1px solid #999; - background-color: #fff; - color: #555; - font-weight: bold; - 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 #ddd; - background-color: #fff; - text-align: left; - vertical-align: bottom; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-moving { - position: absolute; - border: 1px solid #999; - background: #e6e6e6; - pointer-events: none; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - box-sizing: border-box; - position: relative; - padding: 4px; -} - -.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: 9px; - 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 #ddd; - 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: #e6e6e6; -} - -.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 #666; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-arrow { - border-top: 6px solid #666; - 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 #ddd; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #ddd; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - box-sizing: border-box; - min-width: 600%; - background: #f2f2f2 !important; - border-top: 1px solid #ddd; - border-bottom: 1px solid #999; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { - background: #f2f2f2 !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: #000; - font-weight: bold; - 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: bold; - background: #f2f2f2 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top { - border-bottom: 2px solid #ddd; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom { - border-top: 2px solid #ddd; -} - -.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-footer { - padding: 5px 10px; - border-top: 1px solid #999; - background-color: #fff; - text-align: right; - color: #555; - font-weight: bold; - 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: -5px -10px 5px -10px; - text-align: left; - background: #f2f2f2 !important; - border-bottom: 1px solid #fff; - border-top: 1px solid #ddd; - overflow: hidden; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - background: #f2f2f2 !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 { - color: #555; - font-family: inherit; - font-weight: inherit; - font-size: inherit; -} - -.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: rgba(255, 255, 255, 0.2); -} - -.tabulator .tabulator-footer .tabulator-page.active { - color: #d00; -} - -.tabulator .tabulator-footer .tabulator-page:disabled { - opacity: .5; -} - -.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - color: #fff; -} - -.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, 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: bold; - 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; - border-bottom: 1px solid #ddd; -} - -.tabulator-row:nth-child(even) { - background-color: #fff; -} - -.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-moving { - position: absolute; - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - 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 #ddd; -} - -.tabulator-row .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #ddd; -} - -.tabulator-row .tabulator-responsive-collapse { - box-sizing: border-box; - padding: 5px; - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; -} - -.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: 4px; - border-right: 1px solid #ddd; - vertical-align: middle; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.tabulator-row .tabulator-cell:last-of-type { - border-right: none; -} - -.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 #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select { - border: 1px; - background: transparent; - color: #dd0000; -} - -.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: #666; -} - -.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 #ddd; - border-bottom: 2px solid #ddd; -} - -.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, 0.1); - overflow: hidden; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 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: bold; - 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-bottom: 1px solid #999; - border-right: 1px solid #ddd; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #fafafa; - font-weight: bold; - min-width: 100%; -} - -.tabulator-row.tabulator-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); -} - -.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 #666; - 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 #666; - vertical-align: middle; -} - -.tabulator-row.tabulator-group span { - margin-left: 10px; - color: #666; -} - -.tabulator-menu { - position: absolute; - display: inline-block; - box-sizing: border-box; - background: #fff; - border: 1px solid #ddd; - box-shadow: 0 0 5px 0 rgba(0, 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: #fff; -} - -.tabulator-menu .tabulator-menu-separator { - border-top: 1px solid #ddd; -} - -.tabulator-edit-select-list { - position: absolute; - display: inline-block; - box-sizing: border-box; - max-height: 200px; - background: #fff; - border: 1px solid #ddd; - 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, 0.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 #ddd; - padding: 4px; - padding-top: 6px; - color: #333; - font-weight: bold; -} - -.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-bottom: 1px solid #999; - border-right: 1px solid #ddd; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #fafafa; - font-weight: bold; - min-width: 100%; -} - -.tabulator-print-table .tabulator-print-table-group:hover { - cursor: pointer; - background-color: rgba(0, 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: #666; -} - -.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 #ddd; - border-bottom: 2px solid #ddd; -} - -.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, 0.1); - overflow: hidden; -} - -.tabulator-print-table .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 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; -} diff --git a/website/appphp/static/vendors/tabulator/css/tabulator_simple.min.css b/website/appphp/static/vendors/tabulator/css/tabulator_simple.min.css deleted file mode 100644 index c4148e84..00000000 --- a/website/appphp/static/vendors/tabulator/css/tabulator_simple.min.css +++ /dev/null @@ -1,3 +0,0 @@ -/* Tabulator v4.7.0 (c) Oliver Folkerd */ -.tabulator{position:relative;background-color:#fff;overflow:hidden;font-size:14px;text-align:left;transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.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:1px solid #999;background-color:#fff;color:#555;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 #ddd;background-color:#fff;text-align:left;vertical-align:bottom;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;border:1px solid #999;background:#e6e6e6;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:4px}.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:9px;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 #ddd;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:#e6e6e6}.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 #666}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-arrow{border-top:6px solid #666;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 #ddd}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #ddd}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;min-width:600%;background:#f2f2f2!important;border-top:1px solid #ddd;border-bottom:1px solid #999;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#f2f2f2!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:#000;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:#f2f2f2!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #ddd}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #ddd}.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-footer{padding:5px 10px;border-top:1px solid #999;background-color:#fff;text-align:right;color:#555;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:-5px -10px 5px;text-align:left;background:#f2f2f2!important;border-bottom:1px solid #fff;border-top:1px solid #ddd;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#f2f2f2!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{color:#555;font-family:inherit;font-weight:inherit;font-size:inherit}.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:hsla(0,0%,100%,.2)}.tabulator .tabulator-footer .tabulator-page.active{color:#d00}.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-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;border-bottom:1px solid #ddd}.tabulator-row,.tabulator-row:nth-child(2n){background-color:#fff}.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-moving{position:absolute;border-top:1px solid #ddd;border-bottom:1px solid #ddd;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 #ddd}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #ddd}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #ddd;border-bottom:1px solid #ddd}.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:4px;border-right:1px solid #ddd;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabulator-row .tabulator-cell:last-of-type{border-right:none}.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:#666}.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 #ddd;border-bottom:2px solid #ddd}.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-bottom:1px solid #999;border-right:1px solid #ddd;border-top:1px solid #999;padding:5px;padding-left:10px;background:#fafafa;font-weight:700;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}.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 #666;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 #666;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#666}.tabulator-menu{position:absolute;display:inline-block;box-sizing:border-box;background:#fff;border:1px solid #ddd;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:#fff}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #ddd}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:#fff;border:1px solid #ddd;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 #ddd;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-bottom:1px solid #999;border-right:1px solid #ddd;border-top:1px solid #999;padding:5px;padding-left:10px;background:#fafafa;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:#666}.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 #ddd;border-bottom:2px solid #ddd}.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_simple.min.css.map */ diff --git a/website/appphp/static/vendors/tabulator/css/tabulator_simple.min.css.map b/website/appphp/static/vendors/tabulator/css/tabulator_simple.min.css.map deleted file mode 100644 index 0a0672fd..00000000 --- a/website/appphp/static/vendors/tabulator/css/tabulator_simple.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_simple.scss"],"names":[],"mappings":"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","file":"tabulator_simple.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:#999 !default; //border to tabulator\r\n$textSize:14px !default; //table text size\r\n\r\n//header themeing\r\n$headerBackgroundColor:#fff !default; //border to tabulator\r\n$headerTextColor:#555 !default; //header text colour\r\n$headerBorderColor:#ddd !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:#fff !default; //table row background color\r\n$rowBorderColor:#ddd !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\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:#fff !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//Tabulator Containing Element\r\n.tabulator{\r\n\tposition: relative;\r\n\tbackground-color: $backgroundColor;\r\n\toverflow:hidden;\r\n\tfont-size:$textSize;\r\n\ttext-align: left;\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-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: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\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\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\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:darken($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:darken($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 $headerSeperatorColor;\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\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:#000;\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: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\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//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:darken($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:darken($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 $footerBackgroundColor;\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//pagination container element\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//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: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//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\r\n\tmin-height:$textSize + ($headerMargin * 2);\r\n\tbackground-color: $rowBackgroundColor;\r\n\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t&:nth-child(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-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: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&:last-of-type{\r\n\t\t\tborder-right: none;\r\n\t\t}\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:#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\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:#fafafa;\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\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:#666;\r\n\t\t}\r\n\t}\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\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:#fafafa;\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\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\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:#666;\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/website/appphp/static/vendors/tabulator/css/tabulator_site.css b/website/appphp/static/vendors/tabulator/css/tabulator_site.css deleted file mode 100644 index 71397572..00000000 --- a/website/appphp/static/vendors/tabulator/css/tabulator_site.css +++ /dev/null @@ -1,993 +0,0 @@ -/* Tabulator v4.7.0 (c) Oliver Folkerd */ -.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%; - /* border-bottom: 3px solid #003268; */ - background-color: #293146; - color: #fff; - font-weight: bold; - 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; - /* 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 { - -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: 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: bold; - 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: bold; - background: #484848 !important; - color: #fff; -} - -.tabulator .tabulator-footer { - padding: 5px 10px; - padding-top: 8px; - /* border-top: 3px solid #3FB449; */ - background-color: #293146; - text-align: right; - color: #293146; - font-weight: bold; - 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.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, 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, 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: bold; - 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 #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select { - border: 1px; - background: transparent; - color: #dd0000; -} - -.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, 0.1); - overflow: hidden; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 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: bold; - 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; - /* border-bottom: 2px solid #3FB449; */ - padding: 5px; - padding-left: 10px; - background: #293146; - color: #fff; - font-weight: bold; - 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, 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, 0.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: bold; -} - -.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: bold; - 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, 0.1); - overflow: hidden; -} - -.tabulator-print-table .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 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; -} diff --git a/website/appphp/static/vendors/tabulator/css/tabulator_site.min.css b/website/appphp/static/vendors/tabulator/css/tabulator_site.min.css deleted file mode 100644 index 2fc522d4..00000000 --- a/website/appphp/static/vendors/tabulator/css/tabulator_site.min.css +++ /dev/null @@ -1,3 +0,0 @@ -/* 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/appphp/static/vendors/tabulator/css/tabulator_site.min.css.map b/website/appphp/static/vendors/tabulator/css/tabulator_site.min.css.map deleted file mode 100644 index 6970f0b0..00000000 --- a/website/appphp/static/vendors/tabulator/css/tabulator_site.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"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/website/appphp/static/vendors/tabulator/js/modules/accessor.js b/website/appphp/static/vendors/tabulator/js/modules/accessor.js deleted file mode 100644 index 8ffe1bf5..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/accessor.js +++ /dev/null @@ -1,93 +0,0 @@ -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.7.0 (c) Oliver Folkerd */ - -var Accessor = function Accessor(table) { - this.table = table; //hold Tabulator object - this.allowedTypes = ["", "data", "download", "clipboard", "print", "htmlOutput"]; //list of accessor types -}; - -//initialize column accessor -Accessor.prototype.initializeColumn = function (column) { - var self = this, - match = false, - config = {}; - - this.allowedTypes.forEach(function (type) { - var key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)), - accessor; - - if (column.definition[key]) { - accessor = self.lookupAccessor(column.definition[key]); - - if (accessor) { - match = true; - - config[key] = { - accessor: accessor, - params: column.definition[key + "Params"] || {} - }; - } - } - }); - - if (match) { - column.modules.accessor = config; - } -}; - -Accessor.prototype.lookupAccessor = function (value) { - var accessor = false; - - //set column accessor - switch (typeof value === "undefined" ? "undefined" : _typeof(value)) { - case "string": - if (this.accessors[value]) { - accessor = this.accessors[value]; - } else { - console.warn("Accessor Error - No such accessor found, ignoring: ", value); - } - break; - - case "function": - accessor = value; - break; - } - - return accessor; -}; - -//apply accessor to row -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(dataIn || {}); - - self.table.columnManager.traverse(function (column) { - var value, accessor, params, component; - - if (column.modules.accessor) { - - accessor = column.modules.accessor[key] || column.modules.accessor.accessor || false; - - if (accessor) { - value = column.getFieldValue(data); - - if (value != "undefined") { - 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)); - } - } - } - }); - - return data; -}, - -//default accessors -Accessor.prototype.accessors = {}; - -Tabulator.prototype.registerModule("accessor", Accessor); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/accessor.min.js b/website/appphp/static/vendors/tabulator/js/modules/accessor.min.js deleted file mode 100644 index 2633b8f3..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/accessor.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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/appphp/static/vendors/tabulator/js/modules/ajax.js b/website/appphp/static/vendors/tabulator/js/modules/ajax.js deleted file mode 100644 index 7d726045..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/ajax.js +++ /dev/null @@ -1,465 +0,0 @@ -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.7.0 (c) Oliver Folkerd */ - -var Ajax = function Ajax(table) { - - this.table = table; //hold Tabulator object - this.config = false; //hold config object for ajax request - this.url = ""; //request URL - this.urlGenerator = false; - this.params = false; //request parameters - - this.loaderElement = this.createLoaderElement(); //loader message div - this.msgElement = this.createMsgElement(); //message element - this.loadingElement = false; - this.errorElement = false; - this.loaderPromise = false; - - this.progressiveLoad = false; - this.loading = false; - - this.requestOrder = 0; //prevent requests comming out of sequence if overridden by another load request -}; - -//initialize setup options -Ajax.prototype.initialize = function () { - var template; - - this.loaderElement.appendChild(this.msgElement); - - if (this.table.options.ajaxLoaderLoading) { - if (typeof this.table.options.ajaxLoaderLoading == "string") { - template = document.createElement('template'); - template.innerHTML = this.table.options.ajaxLoaderLoading.trim(); - this.loadingElement = template.content.firstChild; - } else { - this.loadingElement = this.table.options.ajaxLoaderLoading; - } - } - - this.loaderPromise = this.table.options.ajaxRequestFunc || this.defaultLoaderPromise; - - this.urlGenerator = this.table.options.ajaxURLGenerator || this.defaultURLGenerator; - - if (this.table.options.ajaxLoaderError) { - if (typeof this.table.options.ajaxLoaderError == "string") { - template = document.createElement('template'); - template.innerHTML = this.table.options.ajaxLoaderError.trim(); - this.errorElement = template.content.firstChild; - } else { - this.errorElement = this.table.options.ajaxLoaderError; - } - } - - if (this.table.options.ajaxParams) { - this.setParams(this.table.options.ajaxParams); - } - - if (this.table.options.ajaxConfig) { - this.setConfig(this.table.options.ajaxConfig); - } - - if (this.table.options.ajaxURL) { - this.setUrl(this.table.options.ajaxURL); - } - - if (this.table.options.ajaxProgressiveLoad) { - if (this.table.options.pagination) { - this.progressiveLoad = false; - console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time"); - } else { - if (this.table.modExists("page")) { - this.progressiveLoad = this.table.options.ajaxProgressiveLoad; - this.table.modules.page.initializeProgressive(this.progressiveLoad); - } else { - console.error("Pagination plugin is required for progressive ajax loading"); - } - } - } -}; - -Ajax.prototype.createLoaderElement = function () { - var el = document.createElement("div"); - el.classList.add("tabulator-loader"); - return el; -}; - -Ajax.prototype.createMsgElement = function () { - var el = document.createElement("div"); - - el.classList.add("tabulator-loader-msg"); - el.setAttribute("role", "alert"); - - return el; -}; - -//set ajax params -Ajax.prototype.setParams = function (params, update) { - if (update) { - this.params = this.params || {}; - - for (var key in params) { - this.params[key] = params[key]; - } - } else { - this.params = params; - } -}; - -Ajax.prototype.getParams = function () { - return this.params || {}; -}; - -//load config object -Ajax.prototype.setConfig = function (config) { - this._loadDefaultConfig(); - - if (typeof config == "string") { - this.config.method = config; - } else { - for (var key in config) { - this.config[key] = config[key]; - } - } -}; - -//create config object from default -Ajax.prototype._loadDefaultConfig = function (force) { - var self = this; - if (!self.config || force) { - - self.config = {}; - - //load base config from defaults - for (var key in self.defaultConfig) { - self.config[key] = self.defaultConfig[key]; - } - } -}; - -//set request url -Ajax.prototype.setUrl = function (url) { - this.url = url; -}; - -//get request url -Ajax.prototype.getUrl = function () { - return this.url; -}; - -//lstandard loading function -Ajax.prototype.loadData = function (inPosition, columnsChanged) { - var self = this; - - if (this.progressiveLoad) { - return this._loadDataProgressive(); - } else { - return this._loadDataStandard(inPosition, columnsChanged); - } -}; - -Ajax.prototype.nextPage = function (diff) { - var margin; - - if (!this.loading) { - - margin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.getElement().clientHeight * 2; - - if (diff < margin) { - this.table.modules.page.nextPage().then(function () {}).catch(function () {}); - } - } -}; - -Ajax.prototype.blockActiveRequest = function () { - this.requestOrder++; -}; - -Ajax.prototype._loadDataProgressive = function () { - this.table.rowManager.setData([]); - return this.table.modules.page.setPage(1); -}; - -Ajax.prototype._loadDataStandard = function (inPosition, columnsChanged) { - var _this = this; - - return new Promise(function (resolve, reject) { - _this.sendRequest(inPosition).then(function (data) { - _this.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 = []; - - prefix = prefix || ""; - - if (Array.isArray(data)) { - data.forEach(function (item, i) { - output = output.concat(self.generateParamsList(item, prefix ? prefix + "[" + i + "]" : i)); - }); - } else if ((typeof data === "undefined" ? "undefined" : _typeof(data)) === "object") { - 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 = []; - - output.forEach(function (item) { - encoded.push(encodeURIComponent(item.key) + "=" + encodeURIComponent(item.value)); - }); - - return encoded.join("&"); -}; - -//send ajax request -Ajax.prototype.sendRequest = function (silent) { - var _this2 = this; - - var self = this, - url = self.url, - requestNo, - esc, - query; - - self.requestOrder++; - requestNo = self.requestOrder; - - self._loadDefaultConfig(); - - return new Promise(function (resolve, reject) { - if (self.table.options.ajaxRequesting.call(_this2.table, self.url, self.params) !== false) { - - self.loading = true; - - if (!silent) { - self.showLoader(); - } - - _this2.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); - } - resolve(data); - - self.hideLoader(); - self.loading = false; - } else { - 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(); - }, 3000); - - self.loading = false; - - reject(); - }); - } else { - reject(); - } - }); -}; - -Ajax.prototype.showLoader = function () { - var shouldLoad = typeof this.table.options.ajaxLoader === "function" ? this.table.options.ajaxLoader() : this.table.options.ajaxLoader; - - if (shouldLoad) { - - this.hideLoader(); - - while (this.msgElement.firstChild) { - this.msgElement.removeChild(this.msgElement.firstChild); - }this.msgElement.classList.remove("tabulator-error"); - this.msgElement.classList.add("tabulator-loading"); - - if (this.loadingElement) { - this.msgElement.appendChild(this.loadingElement); - } else { - this.msgElement.innerHTML = this.table.modules.localize.getText("ajax|loading"); - } - - this.table.element.appendChild(this.loaderElement); - } -}; - -Ajax.prototype.showError = function () { - this.hideLoader(); - - while (this.msgElement.firstChild) { - this.msgElement.removeChild(this.msgElement.firstChild); - }this.msgElement.classList.remove("tabulator-loading"); - this.msgElement.classList.add("tabulator-error"); - - if (this.errorElement) { - this.msgElement.appendChild(this.errorElement); - } else { - this.msgElement.innerHTML = this.table.modules.localize.getText("ajax|error"); - } - - this.table.element.appendChild(this.loaderElement); -}; - -Ajax.prototype.hideLoader = function () { - if (this.loaderElement.parentNode) { - this.loaderElement.parentNode.removeChild(this.loaderElement); - } -}; - -//default ajax config object -Ajax.prototype.defaultConfig = { - method: "GET" -}; - -Ajax.prototype.defaultURLGenerator = function (url, config, params) { - - if (url) { - if (params && Object.keys(params).length) { - if (!config.method || config.method.toLowerCase() == "get") { - config.method = "get"; - - url += (url.includes("?") ? "&" : "?") + this.serializeParams(params); - } - } - } - - return url; -}; - -Ajax.prototype.defaultLoaderPromise = function (url, config, params) { - var self = this, - contentType; - - return new Promise(function (resolve, reject) { - - //set url - url = self.urlGenerator(url, config, params); - - //set body content if not GET request - if (config.method.toUpperCase() != "GET") { - contentType = _typeof(self.table.options.ajaxContentType) === "object" ? self.table.options.ajaxContentType : self.contentTypeFormatters[self.table.options.ajaxContentType]; - if (contentType) { - - for (var key in contentType.headers) { - if (!config.headers) { - config.headers = {}; - } - - if (typeof config.headers[key] === "undefined") { - 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); - } - } - - if (url) { - - //configure headers - if (typeof config.headers === "undefined") { - config.headers = {}; - } - - if (typeof config.headers.Accept === "undefined") { - config.headers.Accept = "application/json"; - } - - if (typeof config.headers["X-Requested-With"] === "undefined") { - config.headers["X-Requested-With"] = "XMLHttpRequest"; - } - - if (typeof config.mode === "undefined") { - config.mode = "cors"; - } - - if (config.mode == "cors") { - - if (typeof config.headers["Access-Control-Allow-Origin"] === "undefined") { - config.headers["Access-Control-Allow-Origin"] = window.location.origin; - } - - if (typeof config.credentials === "undefined") { - config.credentials = 'same-origin'; - } - } else { - if (typeof config.credentials === "undefined") { - config.credentials = 'include'; - } - } - - //send request - fetch(url, config).then(function (response) { - if (response.ok) { - response.json().then(function (data) { - resolve(data); - }).catch(function (error) { - reject(error); - console.warn("Ajax Load Error - Invalid JSON returned", error); - }); - } else { - 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); - }); - } else { - 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(); - - output.forEach(function (item) { - form.append(item.key, item.value); - }); - - return form; - } - } -}; - -Tabulator.prototype.registerModule("ajax", Ajax); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/ajax.min.js b/website/appphp/static/vendors/tabulator/js/modules/ajax.min.js deleted file mode 100644 index a5dae297..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/ajax.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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,e output || output === null) { - output = value; - } - }); - - return output !== null ? precision !== false ? output.toFixed(precision) : output : ""; - }, - "min": function min(values, data, calcParams) { - var output = null, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false; - - values.forEach(function (value) { - - value = Number(value); - - if (value < output || output === null) { - output = value; - } - }); - - return output !== null ? precision !== false ? output.toFixed(precision) : output : ""; - }, - "sum": function sum(values, data, calcParams) { - var output = 0, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false; - - if (values.length) { - values.forEach(function (value) { - value = Number(value); - - output += !isNaN(value) ? Number(value) : 0; - }); - } - - return precision !== false ? output.toFixed(precision) : output; - }, - "concat": function concat(values, data, calcParams) { - var output = 0; - - if (values.length) { - output = values.reduce(function (sum, value) { - return String(sum) + String(value); - }); - } - - return output; - }, - "count": function count(values, data, calcParams) { - var output = 0; - - if (values.length) { - values.forEach(function (value) { - if (value) { - output++; - } - }); - } - - return output; - } -}; - -Tabulator.prototype.registerModule("columnCalcs", ColumnCalcs); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/calculation_colums.min.js b/website/appphp/static/vendors/tabulator/js/modules/calculation_colums.min.js deleted file mode 100644 index 33464d56..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/calculation_colums.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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},ColumnCalcs=function(t){this.table=t,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 t=document.createElement("div");return t.classList.add("tabulator-calcs-holder"),t},ColumnCalcs.prototype.initialize=function(){this.genColumn=new Column({field:"value"},this)},ColumnCalcs.prototype.registerColumnField=function(){},ColumnCalcs.prototype.initializeColumn=function(t){var o=t.definition,e={topCalcParams:o.topCalcParams||{},botCalcParams:o.bottomCalcParams||{}};if(o.topCalc){switch(_typeof(o.topCalc)){case"string":this.calculations[o.topCalc]?e.topCalc=this.calculations[o.topCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",o.topCalc);break;case"function":e.topCalc=o.topCalc}e.topCalc&&(t.modules.columnCalcs=e,this.topCalcs.push(t),"group"!=this.table.options.columnCalcs&&this.initializeTopRow())}if(o.bottomCalc){switch(_typeof(o.bottomCalc)){case"string":this.calculations[o.bottomCalc]?e.botCalc=this.calculations[o.bottomCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",o.bottomCalc);break;case"function":e.botCalc=o.bottomCalc}e.botCalc&&(t.modules.columnCalcs=e,this.botCalcs.push(t),"group"!=this.table.options.columnCalcs&&this.initializeBottomRow())}},ColumnCalcs.prototype.removeCalcs=function(){var t=!1;this.topInitialized&&(this.topInitialized=!1,this.topElement.parentNode.removeChild(this.topElement),t=!0),this.botInitialized&&(this.botInitialized=!1,this.table.footerManager.remove(this.botElement),t=!0),t&&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(t){this.table.columnManager.getElement().scrollWidth,this.table.element.clientWidth;this.botInitialized&&(this.botRow.getElement().style.marginLeft=-t+"px")},ColumnCalcs.prototype.recalc=function(t){var o;if(this.topInitialized||this.botInitialized){if(this.rowsToData(t),this.topInitialized){for(this.topRow&&this.topRow.deleteCells(),o=this.generateRow("top",this.rowsToData(t)),this.topRow=o;this.topElement.firstChild;)this.topElement.removeChild(this.topElement.firstChild);this.topElement.appendChild(o.getElement()),o.initialize(!0)}if(this.botInitialized){for(this.botRow&&this.botRow.deleteCells(),o=this.generateRow("bottom",this.rowsToData(t)),this.botRow=o;this.botElement.firstChild;)this.botElement.removeChild(this.botElement.firstChild);this.botElement.appendChild(o.getElement()),o.initialize(!0)}this.table.rowManager.adjustTableSize(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()}},ColumnCalcs.prototype.recalcRowGroup=function(t){this.recalcGroup(this.table.modules.groupRows.getRowGroup(t))},ColumnCalcs.prototype.recalcAll=function(){var t=this;if((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(o){t.recalcGroup(o)})}},ColumnCalcs.prototype.recalcGroup=function(t){var o,e;t&&t.calcs&&(t.calcs.bottom&&(o=this.rowsToData(t.rows),e=this.generateRowData("bottom",o),t.calcs.bottom.updateData(e),t.calcs.bottom.reinitialize()),t.calcs.top&&(o=this.rowsToData(t.rows),e=this.generateRowData("top",o),t.calcs.top.updateData(e),t.calcs.top.reinitialize()))},ColumnCalcs.prototype.generateTopRow=function(t){return this.generateRow("top",this.rowsToData(t))},ColumnCalcs.prototype.generateBottomRow=function(t){return this.generateRow("bottom",this.rowsToData(t))},ColumnCalcs.prototype.rowsToData=function(t){var o=this,e=[];return t.forEach(function(t){if(e.push(t.getData()),o.table.options.dataTree&&o.table.options.dataTreeChildColumnCalcs&&t.modules.dataTree.open){var l=o.rowsToData(o.table.modules.dataTree.getFilteredTreeChildren(t));e=e.concat(l)}}),e},ColumnCalcs.prototype.generateRow=function(t,o){var e,l=this,i=this.generateRowData(t,o);return l.table.modExists("mutator")&&l.table.modules.mutator.disable(),e=new Row(i,this,"calc"),l.table.modExists("mutator")&&l.table.modules.mutator.enable(),e.getElement().classList.add("tabulator-calcs","tabulator-calcs-"+t),e.generateCells=function(){var o=[];l.table.columnManager.columnsByIndex.forEach(function(i){l.genColumn.setField(i.getField()),l.genColumn.hozAlign=i.hozAlign,i.definition[t+"CalcFormatter"]&&l.table.modExists("format")?l.genColumn.modules.format={formatter:l.table.modules.format.getFormatter(i.definition[t+"CalcFormatter"]),params:i.definition[t+"CalcFormatterParams"]}:l.genColumn.modules.format={formatter:l.table.modules.format.getFormatter("plaintext"),params:{}},l.genColumn.definition.cssClass=i.definition.cssClass;var a=new Cell(l.genColumn,e);a.column=i,a.setWidth(),i.cells.push(a),o.push(a),i.visible||a.hide()}),this.cells=o},e},ColumnCalcs.prototype.generateRowData=function(t,o){var e,l,i={},a="top"==t?this.topCalcs:this.botCalcs,n="top"==t?"topCalc":"botCalc";return a.forEach(function(t){var a=[];t.modules.columnCalcs&&t.modules.columnCalcs[n]&&(o.forEach(function(o){a.push(t.getFieldValue(o))}),l=n+"Params",e="function"==typeof t.modules.columnCalcs[l]?t.modules.columnCalcs[l](a,o):t.modules.columnCalcs[l],t.setFieldValue(i,t.modules.columnCalcs[n](a,o,e)))}),i},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 t,o=this,e={};return this.table.options.groupBy&&this.table.modExists("groupRows")?(t=this.table.modules.groupRows.getGroups(!0),t.forEach(function(t){e[t.getKey()]=o.getGroupResults(t)})):e={top:this.topRow?this.topRow.getData():{},bottom:this.botRow?this.botRow.getData():{}},e},ColumnCalcs.prototype.getGroupResults=function(t){var o=this,e=t._getSelf(),l=t.getSubGroups(),i={};return l.forEach(function(t){i[t.getKey()]=o.getGroupResults(t)}),{top:e.calcs.top?e.calcs.top.getData():{},bottom:e.calcs.bottom?e.calcs.bottom.getData():{},groups:i}},ColumnCalcs.prototype.calculations={avg:function(t,o,e){var l=0,i=void 0!==e.precision?e.precision:2;return t.length&&(l=t.reduce(function(t,o){return o=Number(o),t+o}),l/=t.length,l=!1!==i?l.toFixed(i):l),parseFloat(l).toString()},max:function(t,o,e){var l=null,i=void 0!==e.precision&&e.precision;return t.forEach(function(t){((t=Number(t))>l||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/appphp/static/vendors/tabulator/js/modules/download.js b/website/appphp/static/vendors/tabulator/js/modules/download.js deleted file mode 100644 index 9954910a..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/download.js +++ /dev/null @@ -1,433 +0,0 @@ -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.7.0 (c) Oliver Folkerd */ - -var Download = function Download(table) { - this.table = table; //hold Tabulator object -}; - -//trigger file download -Download.prototype.download = function (type, filename, options, range, interceptCallback) { - var self = this, - downloadFunc = false; - - function buildLink(data, mime) { - if (interceptCallback) { - if (interceptCallback === true) { - self.triggerDownload(data, mime, type, filename, true); - } else { - interceptCallback(data); - } - } else { - self.triggerDownload(data, mime, type, filename); - } - } - - if (typeof type == "function") { - downloadFunc = type; - } else { - if (self.downloaders[type]) { - downloadFunc = self.downloaders[type]; - } else { - console.warn("Download Error - No such download type found: ", type); - } - } - - if (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, false, range || this.table.options.downloadRowRange, "download"); - - //assign group header formatter - var groupHeader = this.table.options.groupHeaderDownload; - - if (groupHeader && !Array.isArray(groupHeader)) { - groupHeader = [groupHeader]; - } - - list.forEach(function (row) { - var group; - - if (row.type === "group") { - group = row.columns[0]; - - if (groupHeader && groupHeader[row.indent]) { - group.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component); - } - } - }); - - return list; -}; - -Download.prototype.triggerDownload = function (data, mime, type, filename, newTab) { - var element = document.createElement('a'), - blob = new Blob([data], { type: mime }), - filename = filename || "Tabulator." + (typeof type === "function" ? "txt" : type); - - blob = this.table.options.downloadReady.call(this.table, data, blob); - - if (blob) { - - if (newTab) { - window.open(window.URL.createObjectURL(blob)); - } else { - if (navigator.msSaveOrOpenBlob) { - navigator.msSaveOrOpenBlob(blob, filename); - } else { - element.setAttribute('href', window.URL.createObjectURL(blob)); - - //set file title - element.setAttribute('download', filename); - - //trigger download - element.style.display = 'none'; - document.body.appendChild(element); - element.click(); - - //remove temporary link element - document.body.removeChild(element); - } - } - - if (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); - break; - } -}; - -//downloaders -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) { - if (col && col.depth === 1) { - headers[i] = typeof col.value == "undefined" || typeof col.value == "null" ? "" : 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 = ""; - break; - } - - item.push('"' + String(col.value).split('"').join('""') + '"'); - } - }); - - fileContents.push(item.join(delimiter)); - break; - } - }); - - if (headers.length) { - fileContents = [headers].concat(fileContents); - } - - fileContents = fileContents.join("\n"); - - if (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) { - if (col) { - item[col.component.getField()] = col.value; - } - }); - - fileContents.push(item); - break; - } - }); - - fileContents = JSON.stringify(fileContents, null, '\t'); - - setFileContents(fileContents, "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 : ""; - - if (!jsPDFParams.orientation) { - jsPDFParams.orientation = options.orientation || "landscape"; - } - - if (!jsPDFParams.unit) { - jsPDFParams.unit = "pt"; - } - - //parse row list - list.forEach(function (row) { - var item = {}; - - 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)); - break; - } - }); - - function parseRow(row, styles) { - var rowData = []; - - 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 = ""; - break; - } - - cell = { - content: col.value, - colSpan: col.width, - rowSpan: col.height - }; - - if (styles) { - cell.styles = styles; - } - - rowData.push(cell); - } else { - rowData.push(""); - } - }); - - return rowData; - } - - //configure PDF - var doc = new jsPDF(jsPDFParams); //set document to landscape, better for most tables - - if (options && options.autoTable) { - if (typeof options.autoTable === "function") { - autoTableParams = options.autoTable(doc) || {}; - } else { - autoTableParams = options.autoTable; - } - } - - if (title) { - autoTableParams.addPageContent = function (data) { - doc.text(title, 40, 30); - }; - } - - autoTableParams.head = header; - autoTableParams.body = body; - - doc.autoTable(autoTableParams); - - if (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; - - workbook.SheetNames = []; - workbook.Sheets = {}; - - 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 } }; - - //parse row list - list.forEach(function (row, i) { - var rowData = []; - - row.columns.forEach(function (col, j) { - - if (col) { - rowData.push(!(col.value instanceof Date) && _typeof(col.value) === "object" ? JSON.stringify(col.value) : col.value); - - if (col.width > 1 || col.height > -1) { - merges.push({ s: { r: i, c: j }, e: { r: i + col.height - 1, c: j + col.width - 1 } }); - } - } else { - rowData.push(""); - } - }); - - rows.push(rowData); - }); - - //convert rows to worksheet - XLSX.utils.sheet_add_aoa(worksheet, rows); - - worksheet['!ref'] = XLSX.utils.encode_range(range); - - if (merges.length) { - worksheet["!merges"] = merges; - } - - return worksheet; - } - - if (options.sheetOnly) { - setFileContents(generateSheet()); - return; - } - - if (options.sheets) { - for (var sheet in options.sheets) { - - if (options.sheets[sheet] === true) { - workbook.SheetNames.push(sheet); - workbook.Sheets[sheet] = generateSheet(); - } else { - - workbook.SheetNames.push(sheet); - - this.table.modules.comms.send(options.sheets[sheet], "download", "intercept", { - type: "xlsx", - options: { sheetOnly: true }, - active: self.active, - intercept: function intercept(data) { - workbook.Sheets[sheet] = data; - } - }); - } - } - } else { - workbook.SheetNames.push(sheetName); - workbook.Sheets[sheetName] = generateSheet(); - } - - if (options.documentProcessing) { - workbook = options.documentProcessing(workbook); - } - - //convert workbook to binary array - function s2ab(s) { - var buf = new ArrayBuffer(s.length); - var view = new Uint8Array(buf); - for (var i = 0; i != s.length; ++i) { - view[i] = s.charCodeAt(i) & 0xFF; - }return buf; - } - - output = XLSX.write(workbook, { bookType: 'xlsx', bookSST: true, type: 'binary' }); - - setFileContents(s2ab(output), "application/octet-stream"); - }, - - html: function html(list, options, setFileContents) { - if (this.modExists("export", true)) { - setFileContents(this.modules.export.genereateHTMLTable(list), "text/html"); - } - } - -}; - -Tabulator.prototype.registerModule("download", Download); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/download.min.js b/website/appphp/static/vendors/tabulator/js/modules/download.min.js deleted file mode 100644 index b3b776c3..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/download.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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/appphp/static/vendors/tabulator/js/modules/edit.js b/website/appphp/static/vendors/tabulator/js/modules/edit.js deleted file mode 100644 index e35dd847..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/edit.js +++ /dev/null @@ -1,2109 +0,0 @@ -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.7.0 (c) Oliver Folkerd */ - -var Edit = function Edit(table) { - this.table = table; //hold Tabulator object - this.currentCell = false; //hold currently editing cell - this.mouseClick = false; //hold mousedown state to prevent click binding being overriden by editor opening - this.recursionBlock = false; //prevent focus recursion - this.invalidEdit = false; - this.editedCells = []; -}; - -//initialize column editor -Edit.prototype.initializeColumn = function (column) { - var self = this, - config = { - editor: false, - blocked: false, - check: column.definition.editable, - params: column.definition.editorParams || {} - }; - - //set column editor - switch (_typeof(column.definition.editor)) { - case "string": - - if (column.definition.editor === "tick") { - column.definition.editor = "tickCross"; - console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor"); - } - - if (self.editors[column.definition.editor]) { - config.editor = self.editors[column.definition.editor]; - } else { - console.warn("Editor Error - No such editor found: ", column.definition.editor); - } - break; - - case "function": - config.editor = column.definition.editor; - break; - - case "boolean": - - if (column.definition.editor === true) { - - if (typeof column.definition.formatter !== "function") { - - if (column.definition.formatter === "tick") { - column.definition.formatter = "tickCross"; - console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor"); - } - - if (self.editors[column.definition.formatter]) { - config.editor = self.editors[column.definition.formatter]; - } else { - config.editor = self.editors["input"]; - } - } else { - console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ", column.definition.formatter); - } - } - break; - } - - if (config.editor) { - column.modules.edit = config; - } -}; - -Edit.prototype.getCurrentCell = function () { - return this.currentCell ? this.currentCell.getComponent() : false; -}; - -Edit.prototype.clearEditor = function (cancel) { - var cell = this.currentCell, - cellEl; - - this.invalidEdit = false; - - if (cell) { - this.currentCell = false; - - cellEl = cell.getElement(); - - if (cancel) { - cell.validate(); - } else { - cellEl.classList.remove("tabulator-validation-fail"); - } - - cellEl.classList.remove("tabulator-editing"); - while (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; - var component = this.currentCell.getComponent(); - - this.clearEditor(true); - cell.setValueActual(cell.getValue()); - cell.cellRendered(); - - if (cell.column.cellEvents.cellEditCancelled) { - cell.column.cellEvents.cellEditCancelled.call(this.table, component); - } - - this.table.options.cellEditCancelled.call(this.table, component); - } -}; - -//return a formatted value for a cell -Edit.prototype.bindEditor = function (cell) { - var self = this, - element = cell.getElement(); - - element.setAttribute("tabindex", 0); - - element.addEventListener("click", function (e) { - if (!element.classList.contains("tabulator-editing")) { - element.focus({ preventScroll: true }); - } - }); - - element.addEventListener("mousedown", function (e) { - self.mouseClick = true; - }); - - element.addEventListener("focus", function (e) { - if (!self.recursionBlock) { - self.edit(cell, e, false); - } - }); -}; - -Edit.prototype.focusCellNoEvent = function (cell, block) { - this.recursionBlock = true; - if (!(block && this.table.browser === "ie")) { - cell.getElement().focus({ preventScroll: true }); - } - this.recursionBlock = false; -}; - -Edit.prototype.editCell = function (cell, forceEdit) { - this.focusCellNoEvent(cell); - this.edit(cell, false, forceEdit); -}; - -Edit.prototype.focusScrollAdjust = function (cell) { - if (this.table.rowManager.getRenderMode() == "virtual") { - 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; - - if (rowEl.offsetTop < topEdge) { - this.table.rowManager.element.scrollTop -= topEdge - rowEl.offsetTop; - } else { - if (rowEl.offsetTop + rowEl.offsetHeight > bottomEdge) { - this.table.rowManager.element.scrollTop += rowEl.offsetTop + rowEl.offsetHeight - bottomEdge; - } - } - } -}; - -Edit.prototype.edit = function (cell, e, forceEdit) { - var self = this, - allowEdit = true, - rendered = function rendered() {}, - element = cell.getElement(), - cellEditor, - component, - params; - - //prevent editing if another cell is refusing to leave focus (eg. validation fail) - if (this.currentCell) { - if (!this.invalidEdit) { - this.cancelEdit(); - } - return; - } - - //handle successfull value change - function success(value) { - if (self.currentCell === cell) { - var valid = true; - - if (cell.column.modules.validate && self.table.modExists("validate") && self.table.options.validationMode != "manual") { - valid = self.table.modules.validate.validate(cell.column.modules.validate, cell, value); - } - - if (valid === true || self.table.options.validationMode === "highlight") { - self.clearEditor(); - cell.setValue(value, true); - - if (!cell.modules.edit) { - cell.modules.edit = {}; - } - - cell.modules.edit.edited = true; - - if (self.editedCells.indexOf(cell) == -1) { - self.editedCells.push(cell); - } - - if (self.table.options.dataTree && self.table.modExists("dataTree")) { - self.table.modules.dataTree.checkForRestyle(cell); - } - - if (valid !== true) { - element.classList.add("tabulator-validation-fail"); - return false; - } - - return true; - } else { - self.invalidEdit = true; - element.classList.add("tabulator-validation-fail"); - self.focusCellNoEvent(cell, true); - rendered(); - self.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid); - - return false; - } - } else { - // console.warn("Edit Success Error - cannot call success on a cell that is no longer being edited"); - } - } - - //handle aborted edit - function cancel() { - if (self.currentCell === cell) { - self.cancelEdit(); - - if (self.table.options.dataTree && self.table.modExists("dataTree")) { - self.table.modules.dataTree.checkForRestyle(cell); - } - } else { - // console.warn("Edit Success Error - cannot call cancel on a cell that is no longer being edited"); - } - } - - function onRendered(callback) { - rendered = callback; - } - - if (!cell.column.modules.edit.blocked) { - if (e) { - e.stopPropagation(); - } - - switch (_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; - break; - } - - if (allowEdit || forceEdit) { - - self.cancelEdit(); - - self.currentCell = cell; - - this.focusScrollAdjust(cell); - - component = cell.getComponent(); - - if (this.mouseClick) { - this.mouseClick = false; - - if (cell.column.cellEvents.cellClick) { - cell.column.cellEvents.cellClick.call(this.table, e, component); - } - } - - if (cell.column.cellEvents.cellEditing) { - cell.column.cellEvents.cellEditing.call(this.table, component); - } - - self.table.options.cellEditing.call(this.table, component); - - params = typeof cell.column.modules.edit.params === "function" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params; - - cellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params); - - //if editor returned, add to DOM, if false, abort edit - if (cellEditor !== false) { - - if (cellEditor instanceof Node) { - element.classList.add("tabulator-editing"); - cell.row.getElement().classList.add("tabulator-row-editing"); - while (element.firstChild) { - element.removeChild(element.firstChild); - }element.appendChild(cellEditor); - - //trigger onRendered Callback - rendered(); - - //prevent editing from triggering rowClick event - var children = element.children; - - for (var i = 0; i < children.length; i++) { - children[i].addEventListener("click", function (e) { - e.stopPropagation(); - }); - } - } else { - console.warn("Edit Error - Editor should return an instance of Node, the editor returned:", cellEditor); - element.blur(); - return false; - } - } else { - element.blur(); - return false; - } - - return true; - } else { - this.mouseClick = false; - element.blur(); - return false; - } - } else { - this.mouseClick = false; - element.blur(); - return false; - } -}; - -Edit.prototype.maskInput = function (el, options) { - var mask = options.mask, - maskLetter = typeof options.maskLetterChar !== "undefined" ? options.maskLetterChar : "A", - maskNumber = typeof options.maskNumberChar !== "undefined" ? options.maskNumberChar : "9", - maskWildcard = typeof options.maskWildcardChar !== "undefined" ? options.maskWildcardChar : "*", - success = false; - - function fillSymbols(index) { - var symbol = mask[index]; - if (typeof symbol !== "undefined" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber) { - el.value = el.value + "" + symbol; - fillSymbols(index + 1); - } - } - - el.addEventListener("keydown", function (e) { - var index = el.value.length, - char = e.key; - - if (e.keyCode > 46) { - if (index >= mask.length) { - e.preventDefault(); - e.stopPropagation(); - success = false; - return false; - } else { - switch (mask[index]) { - case maskLetter: - if (char.toUpperCase() == char.toLowerCase()) { - e.preventDefault(); - e.stopPropagation(); - success = false; - return false; - } - break; - - case maskNumber: - if (isNaN(char)) { - e.preventDefault(); - e.stopPropagation(); - success = false; - return false; - } - break; - - case maskWildcard: - break; - - default: - if (char !== mask[index]) { - e.preventDefault(); - e.stopPropagation(); - success = false; - return false; - } - } - } - - success = true; - } - - return; - }); - - el.addEventListener("keyup", function (e) { - if (e.keyCode > 46) { - if (options.maskAutoFill) { - fillSymbols(el.value.length); - } - } - }); - - if (!el.placeholder) { - el.placeholder = mask; - } - - if (options.maskAutoFill) { - fillSymbols(el.value.length); - } -}; - -Edit.prototype.getEditedCells = function () { - var output = []; - - this.editedCells.forEach(function (cell) { - output.push(cell.getComponent()); - }); - - return output; -}; - -Edit.prototype.clearEdited = function (cell) { - var editIndex; - - if (cell.modules.edit && cell.modules.edit.edited) { - cell.modules.validate.invalid = false; - - editIndex = this.editedCells.indexOf(cell); - - if (editIndex > -1) { - this.editedCells.splice(editIndex, 1); - } - } -}; - -//default data editors -Edit.prototype.editors = { - - //input element - input: function input(cell, onRendered, success, cancel, editorParams) { - - //create and style input - var cellValue = cell.getValue(), - input = document.createElement("input"); - - input.setAttribute("type", editorParams.search ? "search" : "text"); - - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") { - for (var key in editorParams.elementAttributes) { - if (key.charAt(0) == "+") { - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - } else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = typeof cellValue !== "undefined" ? cellValue : ""; - - onRendered(function () { - input.focus({ preventScroll: true }); - input.style.height = "100%"; - }); - - function onChange(e) { - if ((cellValue === null || typeof cellValue === "undefined") && input.value !== "" || input.value !== cellValue) { - if (success(input.value)) { - cellValue = input.value; //persist value if successfully validated incase editor is used as header filter - } - } else { - cancel(); - } - } - - //submit new value on blur or change - input.addEventListener("change", onChange); - input.addEventListener("blur", onChange); - - //submit new value on enter - input.addEventListener("keydown", function (e) { - switch (e.keyCode) { - // case 9: - case 13: - onChange(e); - break; - - case 27: - cancel(); - break; - } - }); - - if (editorParams.mask) { - this.table.modules.edit.maskInput(input, editorParams); - } - - return input; - }, - - //resizable text area element - textarea: function textarea(cell, onRendered, success, cancel, editorParams) { - var self = this, - cellValue = cell.getValue(), - vertNav = editorParams.verticalNavigation || "hybrid", - value = String(cellValue !== null && typeof cellValue !== "undefined" ? cellValue : ""), - count = (value.match(/(?:\r\n|\r|\n)/g) || []).length + 1, - input = document.createElement("textarea"), - scrollHeight = 0; - - //create and style input - 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"; - - if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") { - for (var key in editorParams.elementAttributes) { - if (key.charAt(0) == "+") { - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - } else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = value; - - onRendered(function () { - input.focus({ preventScroll: true }); - input.style.height = "100%"; - }); - - function onChange(e) { - - if ((cellValue === null || typeof cellValue === "undefined") && input.value !== "" || input.value !== cellValue) { - - if (success(input.value)) { - cellValue = input.value; //persist value if successfully validated incase editor is used as header filter - } - - setTimeout(function () { - cell.getRow().normalizeHeight(); - }, 300); - } else { - cancel(); - } - } - - //submit new value on blur or change - input.addEventListener("change", onChange); - input.addEventListener("blur", onChange); - - input.addEventListener("keyup", function () { - - input.style.height = ""; - - var heightNow = input.scrollHeight; - - input.style.height = heightNow + "px"; - - if (heightNow != scrollHeight) { - scrollHeight = heightNow; - cell.getRow().normalizeHeight(); - } - }); - - input.addEventListener("keydown", function (e) { - - switch (e.keyCode) { - case 27: - cancel(); - break; - - case 38: - //up arrow - if (vertNav == "editor" || vertNav == "hybrid" && input.selectionStart) { - e.stopImmediatePropagation(); - e.stopPropagation(); - } - - break; - - case 40: - //down arrow - if (vertNav == "editor" || vertNav == "hybrid" && input.selectionStart !== input.value.length) { - e.stopImmediatePropagation(); - e.stopPropagation(); - } - break; - } - }); - - if (editorParams.mask) { - this.table.modules.edit.maskInput(input, editorParams); - } - - return input; - }, - - //input element with type of number - number: function number(cell, onRendered, success, cancel, editorParams) { - - var cellValue = cell.getValue(), - vertNav = editorParams.verticalNavigation || "editor", - input = document.createElement("input"); - - input.setAttribute("type", "number"); - - if (typeof editorParams.max != "undefined") { - input.setAttribute("max", editorParams.max); - } - - if (typeof editorParams.min != "undefined") { - input.setAttribute("min", editorParams.min); - } - - if (typeof editorParams.step != "undefined") { - input.setAttribute("step", editorParams.step); - } - - //create and style input - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") { - for (var key in editorParams.elementAttributes) { - if (key.charAt(0) == "+") { - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - } else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = cellValue; - - var blurFunc = function blurFunc(e) { - onChange(); - }; - - onRendered(function () { - //submit new value on blur - input.removeEventListener("blur", blurFunc); - - input.focus({ preventScroll: true }); - input.style.height = "100%"; - - //submit new value on blur - input.addEventListener("blur", blurFunc); - }); - - function onChange() { - var value = input.value; - - if (!isNaN(value) && value !== "") { - value = Number(value); - } - - if (value !== cellValue) { - if (success(value)) { - cellValue = value; //persist value if successfully validated incase editor is used as header filter - } - } else { - cancel(); - } - } - - //submit new value on enter - input.addEventListener("keydown", function (e) { - switch (e.keyCode) { - case 13: - // case 9: - onChange(); - break; - - case 27: - cancel(); - break; - - case 38: //up arrow - case 40: - //down arrow - if (vertNav == "editor") { - e.stopImmediatePropagation(); - e.stopPropagation(); - } - break; - } - }); - - if (editorParams.mask) { - this.table.modules.edit.maskInput(input, editorParams); - } - - return input; - }, - - //input element with type of number - range: function range(cell, onRendered, success, cancel, editorParams) { - - var cellValue = cell.getValue(), - input = document.createElement("input"); - - input.setAttribute("type", "range"); - - if (typeof editorParams.max != "undefined") { - input.setAttribute("max", editorParams.max); - } - - if (typeof editorParams.min != "undefined") { - input.setAttribute("min", editorParams.min); - } - - if (typeof editorParams.step != "undefined") { - input.setAttribute("step", editorParams.step); - } - - //create and style input - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") { - for (var key in editorParams.elementAttributes) { - if (key.charAt(0) == "+") { - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - } else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = cellValue; - - onRendered(function () { - input.focus({ preventScroll: true }); - input.style.height = "100%"; - }); - - function onChange() { - var value = input.value; - - if (!isNaN(value) && value !== "") { - value = Number(value); - } - - if (value != cellValue) { - if (success(value)) { - cellValue = value; //persist value if successfully validated incase editor is used as header filter - } - } else { - cancel(); - } - } - - //submit new value on blur - input.addEventListener("blur", function (e) { - onChange(); - }); - - //submit new value on enter - input.addEventListener("keydown", function (e) { - switch (e.keyCode) { - case 13: - // case 9: - onChange(); - break; - - case 27: - cancel(); - break; - } - }); - - return input; - }, - - //select - select: function select(cell, onRendered, success, cancel, editorParams) { - var self = this, - cellEl = cell.getElement(), - initialValue = cell.getValue(), - vertNav = editorParams.verticalNavigation || "editor", - initialDisplayValue = typeof initialValue !== "undefined" || initialValue === null ? initialValue : typeof editorParams.defaultValue !== "undefined" ? editorParams.defaultValue : [], - input = document.createElement("input"), - listEl = document.createElement("div"), - multiselect = editorParams.multiselect, - dataItems = [], - currentItem = {}, - displayItems = [], - currentItems = [], - 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"); - editorParams = { values: editorParams }; - } - - function getUniqueColumnValues(field) { - var output = {}, - data = self.table.getData(), - column; - - if (field) { - column = self.table.columnManager.getColumnByField(field); - } else { - column = cell.getColumn()._getSelf(); - } - - if (column) { - data.forEach(function (row) { - var val = column.getFieldValue(row); - - if (val !== null && typeof val !== "undefined" && val !== "") { - output[val] = true; - } - }); - - if (editorParams.sortValuesList) { - if (editorParams.sortValuesList == "asc") { - output = Object.keys(output).sort(); - } else { - output = Object.keys(output).sort().reverse(); - } - } else { - output = Object.keys(output); - } - } else { - console.warn("unable to find matching column to create select lookup list:", field); - } - - return output; - } - - function parseItems(inputValues, curentValues) { - var dataList = []; - var displayList = []; - - function processComplexListItem(item) { - var item = { - label: item.label, - value: item.value, - itemParams: item.itemParams, - elementAttributes: item.elementAttributes, - element: false - }; - - // if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){ - // setCurrentItem(item); - // } - - if (curentValues.indexOf(item.value) > -1) { - setItem(item); - } - - dataList.push(item); - displayList.push(item); - - return item; - } - - if (typeof inputValues == "function") { - inputValues = inputValues(cell); - } - - if (Array.isArray(inputValues)) { - inputValues.forEach(function (value) { - var item; - - if ((typeof value === "undefined" ? "undefined" : _typeof(value)) === "object") { - - if (value.options) { - item = { - label: value.label, - group: true, - itemParams: value.itemParams, - elementAttributes: value.elementAttributes, - element: false - }; - - displayList.push(item); - - value.options.forEach(function (item) { - processComplexListItem(item); - }); - } else { - processComplexListItem(value); - } - } else { - - item = { - label: value, - value: value, - element: false - }; - - // if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){ - // setCurrentItem(item); - // } - - if (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: false - }; - - // if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){ - // setCurrentItem(item); - // } - - if (curentValues.indexOf(item.value) > -1) { - setItem(item); - } - - dataList.push(item); - displayList.push(item); - } - } - - dataItems = dataList; - displayItems = displayList; - - fillList(); - } - - function fillList() { - while (listEl.firstChild) { - listEl.removeChild(listEl.firstChild); - }displayItems.forEach(function (item) { - - var el = item.element; - - if (!el) { - el = document.createElement("div"); - item.label = editorParams.listItemFormatter ? editorParams.listItemFormatter(item.value, item.label, cell, el, item.itemParams) : item.label; - if (item.group) { - el.classList.add("tabulator-edit-select-list-group"); - el.tabIndex = 0; - el.innerHTML = item.label === "" ? " " : item.label; - } else { - el.classList.add("tabulator-edit-select-list-item"); - el.tabIndex = 0; - el.innerHTML = item.label === "" ? " " : item.label; - - el.addEventListener("click", function () { - // setCurrentItem(item); - // chooseItem(); - if (multiselect) { - toggleItem(item); - input.focus(); - } else { - chooseItem(item); - } - }); - - // if(item === currentItem){ - // el.classList.add("active"); - // } - - if (currentItems.indexOf(item) > -1) { - el.classList.add("active"); - } - } - - if (item.elementAttributes && _typeof(item.elementAttributes) == "object") { - for (var key in item.elementAttributes) { - if (key.charAt(0) == "+") { - key = key.slice(1); - el.setAttribute(key, input.getAttribute(key) + item.elementAttributes["+" + key]); - } else { - el.setAttribute(key, item.elementAttributes[key]); - } - } - } - el.addEventListener("mousedown", function () { - blurable = false; - - setTimeout(function () { - blurable = true; - }, 10); - }); - - item.element = el; - } - - listEl.appendChild(el); - }); - } - - function setCurrentItem(item, active) { - - if (!multiselect && currentItem && currentItem.element) { - currentItem.element.classList.remove("active"); - } - - if (currentItem && currentItem.element) { - currentItem.element.classList.remove("focused"); - } - - currentItem = item; - - if (item.element) { - item.element.classList.add("focused"); - if (active) { - item.element.classList.add("active"); - } - } - } - - // function chooseItem(){ - // hideList(); - - // if(initialValue !== currentItem.value){ - // initialValue = currentItem.value; - // success(currentItem.value); - // }else{ - // cancel(); - // } - // } - - function setItem(item) { - var index = currentItems.indexOf(item); - - if (index == -1) { - currentItems.push(item); - setCurrentItem(item, true); - } - - fillInput(); - } - - function unsetItem(index) { - var item = currentItems[index]; - - if (index > -1) { - currentItems.splice(index, 1); - if (item.element) { - item.element.classList.remove("active"); - } - } - } - - function toggleItem(item) { - if (!item) { - item = currentItem; - } - - var index = currentItems.indexOf(item); - - if (index > -1) { - unsetItem(index); - } else { - if (multiselect !== true && currentItems.length >= multiselect) { - unsetItem(0); - } - - setItem(item); - } - - fillInput(); - } - - function chooseItem(item) { - hideList(); - - if (!item) { - item = currentItem; - } - - if (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) { - - if (editorParams.values === true) { - parseItems(getUniqueColumnValues(), initialDisplayValue); - } else if (typeof editorParams.values === "string") { - parseItems(getUniqueColumnValues(editorParams.values), initialDisplayValue); - } else { - 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 = false; - - setTimeout(function () { - blurable = true; - }, 10); - }); - - document.body.appendChild(listEl); - } - } - - function hideList() { - if (listEl.parentNode) { - listEl.parentNode.removeChild(listEl); - } - - removeScrollListener(); - } - - function removeScrollListener() { - self.table.rowManager.element.removeEventListener("scroll", cancelItem); - } - - //style input - input.setAttribute("type", "text"); - - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - input.style.cursor = "default"; - input.readOnly = this.currentCell != false; - - if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") { - for (var key in editorParams.elementAttributes) { - if (key.charAt(0) == "+") { - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - } else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = typeof initialValue !== "undefined" || initialValue === null ? initialValue : ""; - - // if(editorParams.values === true){ - // parseItems(getUniqueColumnValues(), initialValue); - // }else if(typeof editorParams.values === "string"){ - // parseItems(getUniqueColumnValues(editorParams.values), initialValue); - // }else{ - // parseItems(editorParams.values || [], initialValue); - // } - - //allow key based navigation - input.addEventListener("keydown", function (e) { - var index; - - switch (e.keyCode) { - case 38: - //up arrow - index = dataItems.indexOf(currentItem); - - if (vertNav == "editor" || vertNav == "hybrid" && index) { - e.stopImmediatePropagation(); - e.stopPropagation(); - e.preventDefault(); - - if (index > 0) { - setCurrentItem(dataItems[index - 1], !multiselect); - } - } - break; - - case 40: - //down arrow - index = dataItems.indexOf(currentItem); - - if (vertNav == "editor" || vertNav == "hybrid" && index < dataItems.length - 1) { - e.stopImmediatePropagation(); - e.stopPropagation(); - e.preventDefault(); - - if (index < dataItems.length - 1) { - if (index == -1) { - setCurrentItem(dataItems[0], !multiselect); - } else { - setCurrentItem(dataItems[index + 1], !multiselect); - } - } - } - break; - - case 37: //left arrow - case 39: - //right arrow - e.stopImmediatePropagation(); - e.stopPropagation(); - e.preventDefault(); - break; - - case 13: - //enter - // chooseItem(); - - if (multiselect) { - toggleItem(); - } else { - chooseItem(); - } - - break; - - case 27: - //escape - cancelItem(); - break; - } - }); - - input.addEventListener("blur", function (e) { - if (blurable) { - if (multiselect) { - chooseItems(); - } else { - cancelItem(); - } - } - }); - - input.addEventListener("focus", function (e) { - showList(); - }); - - //style list element - listEl = document.createElement("div"); - listEl.classList.add("tabulator-edit-select-list"); - - onRendered(function () { - input.style.height = "100%"; - input.focus({ preventScroll: true }); - }); - - return input; - }, - - //autocomplete - autocomplete: function autocomplete(cell, onRendered, success, cancel, editorParams) { - var self = this, - cellEl = cell.getElement(), - initialValue = cell.getValue(), - vertNav = editorParams.verticalNavigation || "editor", - initialDisplayValue = typeof initialValue !== "undefined" || initialValue === null ? initialValue : typeof editorParams.defaultValue !== "undefined" ? editorParams.defaultValue : "", - input = document.createElement("input"), - listEl = document.createElement("div"), - allItems = [], - displayItems = [], - values = [], - currentItem = false, - blurable = true, - uniqueColumnValues = false; - - this.table.rowManager.element.addEventListener("scroll", cancelItem); - - //style input - input.setAttribute("type", "search"); - - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") { - for (var key in editorParams.elementAttributes) { - if (key.charAt(0) == "+") { - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - } else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - //style list element - listEl.classList.add("tabulator-edit-select-list"); - - listEl.addEventListener("mousedown", function (e) { - blurable = false; - - setTimeout(function () { - blurable = true; - }, 10); - }); - - function genUniqueColumnValues() { - if (editorParams.values === true) { - uniqueColumnValues = getUniqueColumnValues(); - } else if (typeof editorParams.values === "string") { - uniqueColumnValues = getUniqueColumnValues(editorParams.values); - } - } - - function getUniqueColumnValues(field) { - var output = {}, - data = self.table.getData(), - column; - - if (field) { - column = self.table.columnManager.getColumnByField(field); - } else { - column = cell.getColumn()._getSelf(); - } - - if (column) { - data.forEach(function (row) { - var val = column.getFieldValue(row); - - if (val !== null && typeof val !== "undefined" && val !== "") { - output[val] = true; - } - }); - - if (editorParams.sortValuesList) { - if (editorParams.sortValuesList == "asc") { - output = Object.keys(output).sort(); - } else { - output = Object.keys(output).sort().reverse(); - } - } else { - output = Object.keys(output); - } - } else { - console.warn("unable to find matching column to create autocomplete lookup list:", field); - } - - return output; - } - - function filterList(term, intialLoad) { - var matches = [], - values, - items, - searchEl; - - //lookup base values list - if (uniqueColumnValues) { - values = uniqueColumnValues; - } else { - values = editorParams.values || []; - } - - if (editorParams.searchFunc) { - matches = editorParams.searchFunc(term, values); - - if (matches instanceof Promise) { - - addNotice(typeof editorParams.searchingPlaceholder !== "undefined" ? editorParams.searchingPlaceholder : "Searching..."); - - matches.then(function (result) { - fillListIfNotEmpty(parseItems(result), intialLoad); - }).catch(function (err) { - console.err("error in autocomplete search promise:", err); - }); - } else { - fillListIfNotEmpty(parseItems(matches), intialLoad); - } - } else { - items = parseItems(values); - - if (term === "") { - if (editorParams.showListOnEmpty) { - matches = items; - } - } else { - items.forEach(function (item) { - if (item.value !== null || typeof item.value !== "undefined") { - if (String(item.value).toLowerCase().indexOf(String(term).toLowerCase()) > -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(); - - if (notice !== false) { - searchEl.classList.add("tabulator-edit-select-list-notice"); - searchEl.tabIndex = 0; - - if (notice instanceof Node) { - searchEl.appendChild(notice); - } else { - searchEl.innerHTML = notice; - } - - listEl.appendChild(searchEl); - } - } - - function parseItems(inputValues) { - var itemList = []; - - if (Array.isArray(inputValues)) { - inputValues.forEach(function (value) { - - var item = {}; - - if ((typeof value === "undefined" ? "undefined" : _typeof(value)) === "object") { - item.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value.value, value.label) : value.label; - item.value = value.value; - } else { - 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() { - while (listEl.firstChild) { - listEl.removeChild(listEl.firstChild); - } - } - - function fillListIfNotEmpty(items, intialLoad) { - if (items.length) { - fillList(items, intialLoad); - } else { - if (editorParams.emptyPlaceholder) { - addNotice(editorParams.emptyPlaceholder); - } - } - } - - function fillList(items, intialLoad) { - var current = false; - - clearList(); - - displayItems = items; - - displayItems.forEach(function (item) { - var el = item.element; - - if (!el) { - el = document.createElement("div"); - el.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 = false; - - setTimeout(function () { - blurable = true; - }, 10); - }); - - item.element = el; - - if (intialLoad && item.value == initialValue) { - input.value = item.title; - item.element.classList.add("active"); - current = true; - } - - if (item === currentItem) { - item.element.classList.add("active"); - current = true; - } - } - - listEl.appendChild(el); - }); - - if (!current) { - setCurrentItem(false); - } - } - - function chooseItem() { - hideList(); - - if (currentItem) { - if (initialValue !== currentItem.value) { - initialValue = currentItem.value; - input.value = currentItem.title; - success(currentItem.value); - } else { - cancel(); - } - } else { - if (editorParams.freetext) { - initialValue = input.value; - success(input.value); - } else { - if (editorParams.allowEmpty && input.value === "") { - initialValue = input.value; - success(input.value); - } else { - cancel(); - } - } - } - } - - function showList() { - if (!listEl.parentNode) { - while (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) { - if (currentItem && currentItem.element) { - currentItem.element.classList.remove("active"); - } - - currentItem = item; - - if (item && item.element) { - item.element.classList.add("active"); - } - } - - function hideList() { - if (listEl.parentNode) { - listEl.parentNode.removeChild(listEl); - } - - removeScrollListener(); - } - - function cancelItem() { - hideList(); - cancel(); - } - - function removeScrollListener() { - self.table.rowManager.element.removeEventListener("scroll", cancelItem); - } - - //allow key based navigation - input.addEventListener("keydown", function (e) { - var index; - - switch (e.keyCode) { - case 38: - //up arrow - index = displayItems.indexOf(currentItem); - - if (vertNav == "editor" || vertNav == "hybrid" && index) { - e.stopImmediatePropagation(); - e.stopPropagation(); - e.preventDefault(); - - if (index > 0) { - setCurrentItem(displayItems[index - 1]); - } else { - setCurrentItem(false); - } - } - break; - - case 40: - //down arrow - - index = displayItems.indexOf(currentItem); - - if (vertNav == "editor" || vertNav == "hybrid" && index < displayItems.length - 1) { - - e.stopImmediatePropagation(); - e.stopPropagation(); - e.preventDefault(); - - if (index < displayItems.length - 1) { - if (index == -1) { - setCurrentItem(displayItems[0]); - } else { - setCurrentItem(displayItems[index + 1]); - } - } - } - break; - - case 37: //left arrow - case 39: - //right arrow - e.stopImmediatePropagation(); - e.stopPropagation(); - // e.preventDefault(); - break; - - case 13: - //enter - chooseItem(); - break; - - case 27: - //escape - cancelItem(); - break; - - case 36: //home - case 35: - //end - //prevent table navigation while using input element - e.stopImmediatePropagation(); - break; - } - }); - - input.addEventListener("keyup", function (e) { - - switch (e.keyCode) { - case 38: //up arrow - case 37: //left arrow - case 39: //up arrow - case 40: //right arrow - case 13: //enter - case 27: - //escape - break; - - default: - filterList(input.value); - } - }); - - input.addEventListener("search", function (e) { - filterList(input.value); - }); - - input.addEventListener("blur", function (e) { - if (blurable) { - chooseItem(); - } - }); - - input.addEventListener("focus", function (e) { - var value = initialDisplayValue; - genUniqueColumnValues(); - showList(); - input.value = value; - filterList(value, true); - }); - - onRendered(function () { - input.style.height = "100%"; - input.focus({ preventScroll: true }); - }); - - if (editorParams.mask) { - this.table.modules.edit.maskInput(input, editorParams); - } - - return input; - }, - - //star rating - star: function star(cell, onRendered, success, cancel, editorParams) { - var self = this, - element = cell.getElement(), - value = cell.getValue(), - maxStars = element.getElementsByTagName("svg").length || 5, - size = element.getElementsByTagName("svg")[0] ? element.getElementsByTagName("svg")[0].getAttribute("width") : 14, - stars = [], - starsHolder = document.createElement("div"), - star = document.createElementNS('http://www.w3.org/2000/svg', "svg"); - - //change star type - function starChange(val) { - stars.forEach(function (star, i) { - if (i < val) { - if (self.table.browser == "ie") { - star.setAttribute("class", "tabulator-star-active"); - } else { - star.classList.replace("tabulator-star-inactive", "tabulator-star-active"); - } - - star.innerHTML = ''; - } else { - if (self.table.browser == "ie") { - star.setAttribute("class", "tabulator-star-inactive"); - } else { - star.classList.replace("tabulator-star-active", "tabulator-star-inactive"); - } - - star.innerHTML = ''; - } - }); - } - - //build stars - function buildStar(i) { - - var starHolder = document.createElement("span"); - var nextStar = star.cloneNode(true); - - 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); - } - - //handle keyboard navigation value change - function changeValue(val) { - value = val; - starChange(val); - } - - //style cell - element.style.whiteSpace = "nowrap"; - element.style.overflow = "hidden"; - element.style.textOverflow = "ellipsis"; - - //style holding element - starsHolder.style.verticalAlign = "middle"; - starsHolder.style.display = "inline-block"; - starsHolder.style.padding = "4px"; - - //style star - 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"; - - if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") { - for (var key in editorParams.elementAttributes) { - if (key.charAt(0) == "+") { - key = key.slice(1); - starsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes["+" + key]); - } else { - starsHolder.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - //create correct number of stars - for (var i = 1; i <= maxStars; i++) { - buildStar(i); - } - - //ensure value does not exceed number of stars - value = Math.min(parseInt(value), maxStars); - - // set initial styling of stars - starChange(value); - - starsHolder.addEventListener("mousemove", function (e) { - starChange(0); - }); - - starsHolder.addEventListener("click", function (e) { - success(0); - }); - - element.addEventListener("blur", function (e) { - cancel(); - }); - - //allow key based navigation - element.addEventListener("keydown", function (e) { - switch (e.keyCode) { - case 39: - //right arrow - changeValue(value + 1); - break; - - case 37: - //left arrow - changeValue(value - 1); - break; - - case 13: - //enter - success(value); - break; - - case 27: - //escape - cancel(); - break; - } - }); - - return starsHolder; - }, - - //draggable progress bar - progress: function progress(cell, onRendered, success, cancel, editorParams) { - var element = cell.getElement(), - max = typeof editorParams.max === "undefined" ? element.getElementsByTagName("div")[0].getAttribute("max") || 100 : editorParams.max, - min = typeof editorParams.min === "undefined" ? 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; - - //set new value - 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); - } - - //style handle - 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"); - - //style bar - bar.style.display = "inline-block"; - bar.style.position = "relative"; - // bar.style.top = "8px"; - // bar.style.bottom = "8px"; - // bar.style.left = "4px"; - // bar.style.marginRight = "4px"; - bar.style.height = "100%"; - bar.style.backgroundColor = "#488CE9"; - bar.style.maxWidth = "100%"; - bar.style.minWidth = "0%"; - - if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") { - for (var key in editorParams.elementAttributes) { - if (key.charAt(0) == "+") { - key = key.slice(1); - bar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes["+" + key]); - } else { - bar.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - //style cell - element.style.padding = "4px 4px"; - - //make sure value is in range - value = Math.min(parseFloat(value), max); - value = Math.max(parseFloat(value), min); - - //workout percentage - value = Math.round((value - min) / percent); - // bar.style.right = value + "%"; - 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) { - if (mouseDrag) { - bar.style.width = mouseDragWidth + e.screenX - mouseDrag + "px"; - } - }); - - element.addEventListener("mouseup", function (e) { - if (mouseDrag) { - e.stopPropagation(); - e.stopImmediatePropagation(); - - mouseDrag = false; - mouseDragWidth = false; - - updateValue(); - } - }); - - //allow key based navigation - element.addEventListener("keydown", function (e) { - switch (e.keyCode) { - case 39: - //right arrow - e.preventDefault(); - bar.style.width = bar.clientWidth + element.clientWidth / 100 + "px"; - break; - - case 37: - //left arrow - e.preventDefault(); - bar.style.width = bar.clientWidth - element.clientWidth / 100 + "px"; - break; - - case 9: //tab - case 13: - //enter - updateValue(); - break; - - case 27: - //escape - cancel(); - break; - - } - }); - - element.addEventListener("blur", function () { - cancel(); - }); - - return bar; - }, - - //checkbox - tickCross: function tickCross(cell, onRendered, success, cancel, editorParams) { - var value = cell.getValue(), - input = document.createElement("input"), - tristate = editorParams.tristate, - indetermValue = typeof editorParams.indeterminateValue === "undefined" ? null : editorParams.indeterminateValue, - indetermState = false; - - input.setAttribute("type", "checkbox"); - input.style.marginTop = "5px"; - input.style.boxSizing = "border-box"; - - if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") { - for (var key in editorParams.elementAttributes) { - if (key.charAt(0) == "+") { - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - } else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = value; - - if (tristate && (typeof value === "undefined" || value === indetermValue || value === "")) { - indetermState = true; - input.indeterminate = true; - } - - if (this.table.browser != "firefox") { - //prevent blur issue on mac firefox - onRendered(function () { - input.focus({ preventScroll: true }); - }); - } - - input.checked = value === true || value === "true" || value === "True" || value === 1; - - function setValue(blur) { - if (tristate) { - if (!blur) { - if (input.checked && !indetermState) { - input.checked = false; - input.indeterminate = true; - indetermState = true; - return indetermValue; - } else { - indetermState = false; - return input.checked; - } - } else { - if (indetermState) { - return indetermValue; - } else { - return input.checked; - } - } - } else { - return input.checked; - } - } - - //submit new value on blur - input.addEventListener("change", function (e) { - success(setValue()); - }); - - input.addEventListener("blur", function (e) { - success(setValue(true)); - }); - - //submit new value on enter - input.addEventListener("keydown", function (e) { - if (e.keyCode == 13) { - success(setValue()); - } - if (e.keyCode == 27) { - cancel(); - } - }); - - return input; - } -}; - -Tabulator.prototype.registerModule("edit", Edit); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/edit.min.js b/website/appphp/static/vendors/tabulator/js/modules/edit.min.js deleted file mode 100644 index 8e256bed..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/edit.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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/appphp/static/vendors/tabulator/js/modules/export.js b/website/appphp/static/vendors/tabulator/js/modules/export.js deleted file mode 100644 index 18d3f6c5..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/export.js +++ /dev/null @@ -1,616 +0,0 @@ -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.7.0 (c) Oliver Folkerd */ - -var ExportRow = function ExportRow(type, columns, component, indent) { - this.type = type; - this.columns = columns; - this.component = component || false; - this.indent = indent || 0; -}; - -var ExportColumn = function ExportColumn(value, component, width, height, depth) { - this.value = value; - this.component = component || false; - this.width = width; - this.height = height; - this.depth = depth; -}; - -var Export = function Export(table) { - this.table = table; //hold Tabulator object - this.config = {}; - this.cloneTableStyle = true; - this.colVisProp = ""; -}; - -Export.prototype.generateExportList = function (config, style, range, colVisProp) { - this.cloneTableStyle = style; - this.config = config || {}; - this.colVisProp = colVisProp; - - var headers = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : []; - var 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 _this = this; - - var rows = []; - - if (typeof range == "function") { - range.call(this.table).forEach(function (row) { - row = _this.table.rowManager.findRow(row); - - if (row) { - rows.push(row); - } - }); - } else { - switch (range) { - case true: - case "visible": - rows = this.table.rowManager.getVisibleRows(true); - 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 _this2 = this; - - var output = []; - - var columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex; - - columns.forEach(function (column) { - var colData = _this2.processColumnGroup(column); - - if (colData) { - output.push(colData); - } - }); - - return output; -}; - -Export.prototype.processColumnGroup = function (column) { - var _this3 = this; - - var subGroups = column.columns, - maxDepth = 0, - title = column.definition["title" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title; - - var groupData = { - title: title, - column: column, - depth: 1 - }; - - if (subGroups.length) { - groupData.subGroups = []; - groupData.width = 0; - - subGroups.forEach(function (subGroup) { - var subGroupData = _this3.processColumnGroup(subGroup); - - if (subGroupData) { - groupData.width += subGroupData.width; - groupData.subGroups.push(subGroupData); - - if (subGroupData.depth > maxDepth) { - maxDepth = subGroupData.depth; - } - } - }); - - groupData.depth += maxDepth; - - if (!groupData.width) { - return false; - } - } else { - if (this.columnVisCheck(column)) { - groupData.width = 1; - } else { - return false; - } - } - - return groupData; -}; - -Export.prototype.columnVisCheck = function (column) { - return column.definition[this.colVisProp] !== false && (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 (typeof headers[level] === "undefined") { - headers[level] = []; - } - - column.height = column.subGroups ? 1 : depth - column.depth + 1; - - headers[level].push(column); - - if (column.height > 1) { - for (var _i = 1; _i < column.height; _i++) { - - if (typeof headers[level + _i] === "undefined") { - headers[level + _i] = []; - } - - headers[level + _i].push(false); - } - } - - if (column.width > 1) { - for (var _i2 = 1; _i2 < column.width; _i2++) { - headers[level].push(false); - } - } - - if (column.subGroups) { - column.subGroups.forEach(function (subGroup) { - parseColumnGroup(subGroup, level + 1); - }); - } - } - - //calculate maximum header debth - columns.forEach(function (column) { - if (column.depth > headerDepth) { - headerDepth = column.depth; - } - }); - - columns.forEach(function (column) { - parseColumnGroup(column, 0); - }); - - headers.forEach(function (header) { - var columns = []; - - header.forEach(function (col) { - if (col) { - columns.push(new ExportColumn(col.title, col.column.getComponent(), col.width, col.height, col.depth)); - } else { - columns.push(null); - } - }); - - exportRows.push(new ExportRow("header", columns)); - }); - - return exportRows; -}; - -Export.prototype.bodyToExportRows = function (rows) { - var _this4 = this; - - var columns = []; - var exportRows = []; - - this.table.columnManager.columnsByIndex.forEach(function (column) { - if (_this4.columnVisCheck(column)) { - columns.push(column.getComponent()); - } - }); - - if (this.config.columnCalcs !== false && this.table.modExists("columnCalcs")) { - if (this.table.modules.columnCalcs.topInitialized) { - rows.unshift(this.table.modules.columnCalcs.topRow); - } - - if (this.table.modules.columnCalcs.botInitialized) { - rows.push(this.table.modules.columnCalcs.botRow); - } - } - - rows = rows.filter(function (row) { - switch (row.type) { - case "group": - return _this4.config.rowGroups !== false; - break; - - case "calc": - return _this4.config.columnCalcs !== false; - break; - - case "row": - return !(_this4.table.options.dataTree && _this4.config.dataTree === false && row.modules.dataTree.parent); - break; - } - - return true; - }); - - rows.forEach(function (row, i) { - var rowData = row.getData(_this4.colVisProp); - var exportCols = []; - var 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)); - }); - - if (_this4.table.options.dataTree && _this4.config.dataTree !== false) { - indent = row.modules.dataTree.index; - } - break; - } - - exportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent)); - }); - - return exportRows; -}; - -Export.prototype.genereateTableElement = function (list) { - var _this5 = this; - - var 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 = {}; - - setup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter; - - if (this.table.options.dataTree && this.config.dataTree !== false && this.table.modExists("columnCalcs")) { - setup.treeElementField = this.table.modules.dataTree.elementField; - } - - //assign group header formatter - setup.groupHeader = this.table.options["groupHeader" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))]; - - if (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"]); - - if (list.length > 1000) { - 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(_this5.genereateHeaderElement(row, setup, styles)); - break; - - case "group": - bodyEl.appendChild(_this5.genereateGroupElement(row, setup, styles)); - break; - - case "calc": - bodyEl.appendChild(_this5.genereateCalcElement(row, setup, styles)); - break; - - case "row": - var rowEl = _this5.genereateRowElement(row, setup, styles); - _this5.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; - } - }); - - if (headerEl.innerHTML) { - table.appendChild(headerEl); - } - - table.appendChild(bodyEl); - - this.mapElementStyles(this.table.element, table, ["border-top", "border-left", "border-right", "border-bottom"]); - return table; -}; - -Export.prototype.lookupTableStyles = function () { - var styles = {}; - - //lookup row styles - if (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]; - - if (styles.firstRow) { - styles.styleCells = styles.firstRow.getElementsByClassName("tabulator-cell"); - styles.firstCell = styles.styleCells[0]; - styles.lastCell = styles.styleCells[styles.styleCells.length - 1]; - } - } - - return styles; -}; - -Export.prototype.genereateHeaderElement = function (row, setup, styles) { - var _this6 = this; - - var rowEl = document.createElement("tr"); - - row.columns.forEach(function (column) { - if (column) { - var cellEl = document.createElement("th"); - var classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(" ") : []; - - cellEl.colSpan = column.width; - cellEl.rowSpan = column.height; - - cellEl.innerHTML = column.value; - - if (_this6.cloneTableStyle) { - cellEl.style.boxSizing = "border-box"; - } - - classNames.forEach(function (className) { - cellEl.classList.add(className); - }); - - _this6.mapElementStyles(column.component.getElement(), cellEl, ["text-align", "border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]); - _this6.mapElementStyles(column.component._column.contentElement, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom"]); - - if (column.component._column.visible) { - _this6.mapElementStyles(column.component.getElement(), cellEl, ["width"]); - } else { - if (column.component._column.definition.width) { - cellEl.style.width = column.component._column.definition.width + "px"; - } - } - - if (column.component._column.parent) { - _this6.mapElementStyles(column.component._column.parent.groupElement, cellEl, ["border-top"]); - } - - rowEl.appendChild(cellEl); - } - }); - - return rowEl; -}; - -Export.prototype.genereateGroupElement = function (row, setup, styles) { - - var rowEl = document.createElement("tr"), - cellEl = document.createElement("td"), - group = row.columns[0]; - - rowEl.classList.add("tabulator-print-table-row"); - - if (setup.groupHeader && setup.groupHeader[row.indent]) { - group.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component); - } else { - if (setup.groupHeader === false) { - group.value = group.value; - } else { - 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); - - if (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); - - return rowEl; -}; - -Export.prototype.genereateCalcElement = function (row, setup, styles) { - var rowEl = this.genereateRowElement(row, setup, styles); - - 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"]); - - return rowEl; -}; - -Export.prototype.genereateRowElement = function (row, setup, styles) { - var _this7 = this; - - var rowEl = document.createElement("tr"); - - 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; - - var 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 - }; - - var classNames = column.definition.cssClass ? column.definition.cssClass.split(" ") : []; - - classNames.forEach(function (className) { - cellEl.classList.add(className); - }); - - if (_this7.table.modExists("format") && _this7.config.formatCells !== false) { - value = _this7.table.modules.format.formatExportValue(cellWrapper, _this7.colVisProp); - } else { - switch (typeof value === "undefined" ? "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); - } else { - cellEl.innerHTML = value; - } - - if (styles.firstCell) { - _this7.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 (_this7.table.options.dataTree && _this7.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); - } - if (row.component._row.modules.dataTree.branchEl) { - cellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild); - } - } - } - - rowEl.appendChild(cellEl); - - if (cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback) { - cellWrapper.modules.format.renderedCallback(); - } - - if (setup.rowFormatter && _this7.config.formatCells !== false) { - var rowComponent = row.getComponent(); - - rowComponent.getElement = function () { - return rowEl; - }; - - setup.rowFormatter(rowComponent); - } - } - }); - - return rowEl; -}; - -Export.prototype.genereateHTMLTable = function (list) { - var holder = document.createElement("div"); - - holder.appendChild(this.genereateTableElement(list)); - - return 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); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/export.min.js b/website/appphp/static/vendors/tabulator/js/modules/export.min.js deleted file mode 100644 index d0dcccd4..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/export.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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/appphp/static/vendors/tabulator/js/modules/filter.js b/website/appphp/static/vendors/tabulator/js/modules/filter.js deleted file mode 100644 index aaed59b3..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/filter.js +++ /dev/null @@ -1,807 +0,0 @@ -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.7.0 (c) Oliver Folkerd */ - -var Filter = function Filter(table) { - - this.table = table; //hold Tabulator object - - this.filterList = []; //hold filter list - this.headerFilters = {}; //hold column filters - this.headerFilterColumns = []; //hold columns that use header filters - - this.prevHeaderFilterChangeCheck = ""; - this.prevHeaderFilterChangeCheck = "{}"; - - this.changed = false; //has filtering changed since last render -}; - -//initialize column header filter -Filter.prototype.initializeColumn = function (column, value) { - var self = this, - field = column.getField(), - params; - - //handle successfull value change - function success(value) { - var filterType = column.modules.filter.tagType == "input" && column.modules.filter.attrType == "text" || column.modules.filter.tagType == "textarea" ? "partial" : "match", - type = "", - filterChangeCheck = "", - filterFunc; - - if (typeof column.modules.filter.prevSuccess === "undefined" || column.modules.filter.prevSuccess !== value) { - - column.modules.filter.prevSuccess = value; - - if (!column.modules.filter.emptyFunc(value)) { - column.modules.filter.value = value; - - switch (_typeof(column.definition.headerFilterFunc)) { - case "string": - if (self.filters[column.definition.headerFilterFunc]) { - type = column.definition.headerFilterFunc; - filterFunc = function filterFunc(data) { - var params = column.definition.headerFilterFuncParams || {}; - var fieldVal = column.getFieldValue(data); - - params = typeof params === "function" ? params(value, fieldVal, data) : params; - - return self.filters[column.definition.headerFilterFunc](value, fieldVal, data, params); - }; - } else { - console.warn("Header Filter Error - Matching filter function not found: ", column.definition.headerFilterFunc); - } - break; - - case "function": - filterFunc = function filterFunc(data) { - var params = column.definition.headerFilterFuncParams || {}; - var fieldVal = column.getFieldValue(data); - - params = typeof params === "function" ? params(value, fieldVal, data) : params; - - return column.definition.headerFilterFunc(value, fieldVal, data, params); - }; - - type = filterFunc; - break; - } - - if (!filterFunc) { - switch (filterType) { - case "partial": - filterFunc = function filterFunc(data) { - var colVal = column.getFieldValue(data); - - if (typeof colVal !== 'undefined' && colVal !== null) { - return String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1; - } else { - return false; - } - }; - type = "like"; - break; - - default: - filterFunc = function filterFunc(data) { - return column.getFieldValue(data) == value; - }; - type = "="; - } - } - - self.headerFilters[field] = { value: value, func: filterFunc, type: type, params: params || {} }; - } else { - delete self.headerFilters[field]; - } - - filterChangeCheck = JSON.stringify(self.headerFilters); - - if (self.prevHeaderFilterChangeCheck !== filterChangeCheck) { - self.prevHeaderFilterChangeCheck = filterChangeCheck; - - self.changed = true; - self.table.rowManager.filterRefresh(); - } - } - - return true; - } - - column.modules.filter = { - success: success, - attrType: false, - tagType: false, - emptyFunc: false - }; - - this.generateHeaderFilterElement(column); -}; - -Filter.prototype.generateHeaderFilterElement = function (column, initialValue, reinitialize) { - var _this = this; - - var self = this, - success = column.modules.filter.success, - field = column.getField(), - filterElement, - editor, - editorElement, - cellWrapper, - typingTimer, - searchTrigger, - params; - - //handle aborted edit - function cancel() {} - - if (column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode) { - column.contentElement.removeChild(column.modules.filter.headerElement.parentNode); - } - - if (field) { - - //set empty value function - column.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function (value) { - return !value && value !== "0"; - }; - - filterElement = document.createElement("div"); - filterElement.classList.add("tabulator-header-filter"); - - //set column editor - switch (_typeof(column.definition.headerFilter)) { - case "string": - if (self.table.modules.edit.editors[column.definition.headerFilter]) { - editor = self.table.modules.edit.editors[column.definition.headerFilter]; - - if ((column.definition.headerFilter === "tick" || column.definition.headerFilter === "tickCross") && !column.definition.headerFilterEmptyCheck) { - column.modules.filter.emptyFunc = function (value) { - return value !== true && value !== false; - }; - } - } else { - 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": - if (column.modules.edit && column.modules.edit.editor) { - editor = column.modules.edit.editor; - } else { - if (column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]) { - editor = self.table.modules.edit.editors[column.definition.formatter]; - - if ((column.definition.formatter === "tick" || column.definition.formatter === "tickCross") && !column.definition.headerFilterEmptyCheck) { - column.modules.filter.emptyFunc = function (value) { - return value !== true && value !== false; - }; - } - } else { - editor = self.table.modules.edit.editors["input"]; - } - } - break; - } - - if (editor) { - - cellWrapper = { - getValue: function getValue() { - return typeof initialValue !== "undefined" ? 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 = column.definition.headerFilterParams || {}; - - params = typeof params === "function" ? params.call(self.table) : params; - - editorElement = editor.call(this.table.modules.edit, cellWrapper, function () {}, success, cancel, params); - - if (!editorElement) { - console.warn("Filter Error - Cannot add filter to " + field + " column, editor returned a value of false"); - return; - } - - if (!(editorElement instanceof Node)) { - console.warn("Filter Error - Cannot add filter to " + field + " column, editor should return an instance of Node, the editor returned:", editorElement); - return; - } - - //set Placeholder Text - if (field) { - self.table.modules.localize.bind("headerFilters|columns|" + column.definition.field, function (value) { - editorElement.setAttribute("placeholder", typeof value !== "undefined" && value ? value : self.table.modules.localize.getText("headerFilters|default")); - }); - } else { - self.table.modules.localize.bind("headerFilters|default", function (value) { - editorElement.setAttribute("placeholder", typeof self.column.definition.headerFilterPlaceholder !== "undefined" && self.column.definition.headerFilterPlaceholder ? self.column.definition.headerFilterPlaceholder : value); - }); - } - - //focus on element on click - editorElement.addEventListener("click", function (e) { - e.stopPropagation(); - editorElement.focus(); - }); - - editorElement.addEventListener("focus", function (e) { - var left = _this.table.columnManager.element.scrollLeft; - - if (left !== _this.table.rowManager.element.scrollLeft) { - _this.table.rowManager.scrollHorizontal(left); - _this.table.columnManager.scrollHorizontal(left); - } - }); - - //live update filters as user types - typingTimer = false; - - searchTrigger = function searchTrigger(e) { - if (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(); - - if (column.definition.headerFilterLiveFilter !== false) { - - if (!(column.definition.headerFilter === 'autocomplete' || column.definition.headerFilter === 'tickCross' || (column.definition.editor === 'autocomplete' || column.definition.editor === 'tickCross') && column.definition.headerFilter === true)) { - editorElement.addEventListener("keyup", searchTrigger); - editorElement.addEventListener("search", searchTrigger); - - //update number filtered columns on change - if (column.modules.filter.attrType == "number") { - editorElement.addEventListener("change", function (e) { - success(editorElement.value); - }); - } - - //change text inputs to search inputs to allow for clearing of field - if (column.modules.filter.attrType == "text" && this.table.browser !== "ie") { - editorElement.setAttribute("type", "search"); - // editorElement.off("change blur"); //prevent blur from triggering filter and preventing selection click - } - } - - //prevent input and select elements from propegating click to column sorters etc - if (column.modules.filter.tagType == "input" || column.modules.filter.tagType == "select" || column.modules.filter.tagType == "textarea") { - editorElement.addEventListener("mousedown", function (e) { - e.stopPropagation(); - }); - } - } - - filterElement.appendChild(editorElement); - - column.contentElement.appendChild(filterElement); - - if (!reinitialize) { - self.headerFilterColumns.push(column); - } - } - } else { - console.warn("Filter Error - Cannot add header filter, column has no field set:", column.definition.title); - } -}; - -//hide all header filter elements (used to ensure correct column widths in "fitData" layout mode) -Filter.prototype.hideHeaderFilterElements = function () { - this.headerFilterColumns.forEach(function (column) { - if (column.modules.filter && column.modules.filter.headerElement) { - column.modules.filter.headerElement.style.display = 'none'; - } - }); -}; - -//show all header filter elements (used to ensure correct column widths in "fitData" layout mode) -Filter.prototype.showHeaderFilterElements = function () { - this.headerFilterColumns.forEach(function (column) { - if (column.modules.filter && column.modules.filter.headerElement) { - column.modules.filter.headerElement.style.display = ''; - } - }); -}; - -//programatically set focus of header filter -Filter.prototype.setHeaderFilterFocus = function (column) { - if (column.modules.filter && column.modules.filter.headerElement) { - column.modules.filter.headerElement.focus(); - } else { - console.warn("Column Filter Focus Error - No header filter set on column:", column.getField()); - } -}; - -//programmatically get value of header filter -Filter.prototype.getHeaderFilterValue = function (column) { - if (column.modules.filter && column.modules.filter.headerElement) { - return column.modules.filter.headerElement.value; - } else { - console.warn("Column Filter Error - No header filter set on column:", column.getField()); - } -}; - -//programatically set value of header filter -Filter.prototype.setHeaderFilterValue = function (column, value) { - if (column) { - if (column.modules.filter && column.modules.filter.headerElement) { - this.generateHeaderFilterElement(column, value, true); - column.modules.filter.success(value); - } else { - console.warn("Column Filter Error - No header filter set on column:", column.getField()); - } - } -}; - -Filter.prototype.reloadHeaderFilter = function (column) { - if (column) { - if (column.modules.filter && column.modules.filter.headerElement) { - this.generateHeaderFilterElement(column, column.modules.filter.value, true); - } else { - console.warn("Column Filter Error - No header filter set on column:", column.getField()); - } - } -}; - -//check if the filters has changed since last use -Filter.prototype.hasChanged = function () { - var changed = this.changed; - this.changed = false; - return changed; -}; - -//set standard filters -Filter.prototype.setFilter = function (field, type, value, params) { - var self = this; - - self.filterList = []; - - if (!Array.isArray(field)) { - field = [{ field: field, type: type, value: value, params: params }]; - } - - self.addFilter(field); -}; - -//add filter to array -Filter.prototype.addFilter = function (field, type, value, params) { - var self = this; - - if (!Array.isArray(field)) { - field = [{ field: field, type: type, value: value, params: params }]; - } - - field.forEach(function (filter) { - - filter = self.findFilter(filter); - - if (filter) { - self.filterList.push(filter); - - self.changed = true; - } - }); - - if (this.table.options.persistence && this.table.modExists("persistence", true) && 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 = false; - - if (typeof filter.field == "function") { - filterFunc = function filterFunc(data) { - return filter.field(data, filter.type || {}); // pass params to custom filter function - }; - } else { - - if (self.filters[filter.type]) { - - column = self.table.columnManager.getColumnByField(filter.field); - - if (column) { - filterFunc = function filterFunc(data) { - return self.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {}); - }; - } else { - filterFunc = function filterFunc(data) { - return self.filters[filter.type](filter.value, data[filter.field], data, filter.params || {}); - }; - } - } else { - console.warn("Filter Error - No such filter type found, ignoring: ", filter.type); - } - } - - filter.func = filterFunc; - - return filter.func ? filter : false; -}; - -Filter.prototype.findSubFilters = function (filters) { - var self = this, - output = []; - - filters.forEach(function (filter) { - filter = self.findFilter(filter); - - if (filter) { - output.push(filter); - } - }); - - return output.length ? output : false; -}; - -//get all filters -Filter.prototype.getFilters = function (all, ajax) { - var output = []; - - if (all) { - output = this.getHeaderFilters(); - } - - if (ajax) { - output.forEach(function (item) { - if (typeof item.type == "function") { - item.type = "function"; - } - }); - } - - output = output.concat(this.filtersToArray(this.filterList, ajax)); - - return output; -}; - -//filter to Object -Filter.prototype.filtersToArray = function (filterList, ajax) { - var _this2 = this; - - var output = []; - - filterList.forEach(function (filter) { - var item; - - if (Array.isArray(filter)) { - output.push(_this2.filtersToArray(filter, ajax)); - } else { - item = { field: filter.field, type: filter.type, value: filter.value }; - - if (ajax) { - if (typeof item.type == "function") { - item.type = "function"; - } - } - - output.push(item); - } - }); - - return output; -}; - -//get all filters -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; -}; - -//remove filter from array -Filter.prototype.removeFilter = function (field, type, value) { - var self = this; - - if (!Array.isArray(field)) { - field = [{ field: field, type: type, value: value }]; - } - - field.forEach(function (filter) { - var index = -1; - - if (_typeof(filter.field) == "object") { - index = self.filterList.findIndex(function (element) { - return filter === element; - }); - } else { - index = self.filterList.findIndex(function (element) { - return filter.field === element.field && filter.type === element.type && filter.value === element.value; - }); - } - - if (index > -1) { - self.filterList.splice(index, 1); - self.changed = true; - } else { - console.warn("Filter Error - No matching filter type found, ignoring: ", filter.type); - } - }); - - if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.filter) { - this.table.modules.persistence.save("filter"); - } -}; - -//clear filters -Filter.prototype.clearFilter = function (all) { - this.filterList = []; - - if (all) { - this.clearHeaderFilter(); - } - - this.changed = true; - - if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.filter) { - this.table.modules.persistence.save("filter"); - } -}; - -//clear header filters -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 = undefined; - self.reloadHeaderFilter(column); - }); - - this.changed = true; -}; - -//search data and return matching rows -Filter.prototype.search = function (searchType, field, type, value) { - var self = this, - activeRows = [], - filterList = []; - - if (!Array.isArray(field)) { - field = [{ field: field, type: type, value: value }]; - } - - field.forEach(function (filter) { - filter = self.findFilter(filter); - - if (filter) { - filterList.push(filter); - } - }); - - this.table.rowManager.rows.forEach(function (row) { - var match = true; - - filterList.forEach(function (filter) { - if (!self.filterRecurse(filter, row.getData())) { - match = false; - } - }); - - if (match) { - activeRows.push(searchType === "data" ? row.getData("data") : row.getComponent()); - } - }); - - return activeRows; -}; - -//filter row array -Filter.prototype.filter = function (rowList, filters) { - var self = this, - activeRows = [], - activeRowComponents = []; - - if (self.table.options.dataFiltering) { - self.table.options.dataFiltering.call(self.table, self.getFilters()); - } - - if (!self.table.options.ajaxFiltering && (self.filterList.length || Object.keys(self.headerFilters).length)) { - - rowList.forEach(function (row) { - if (self.filterRow(row)) { - activeRows.push(row); - } - }); - } else { - activeRows = rowList.slice(0); - } - - if (self.table.options.dataFiltered) { - - activeRows.forEach(function (row) { - activeRowComponents.push(row.getComponent()); - }); - - self.table.options.dataFiltered.call(self.table, self.getFilters(), activeRowComponents); - } - - return activeRows; -}; - -//filter individual row -Filter.prototype.filterRow = function (row, filters) { - var self = this, - match = true, - data = row.getData(); - - self.filterList.forEach(function (filter) { - if (!self.filterRecurse(filter, data)) { - match = false; - } - }); - - for (var field in self.headerFilters) { - if (!self.headerFilters[field].func(data)) { - match = false; - } - } - - return match; -}; - -Filter.prototype.filterRecurse = function (filter, data) { - var self = this, - match = false; - - if (Array.isArray(filter)) { - filter.forEach(function (subFilter) { - if (self.filterRecurse(subFilter, data)) { - match = true; - } - }); - } else { - match = filter.func(data); - } - - return match; -}; - -//list of available filters -Filter.prototype.filters = { - - //equal to - "=": function _(filterVal, rowVal, rowData, filterParams) { - return rowVal == filterVal ? true : false; - }, - - //less than - "<": function _(filterVal, rowVal, rowData, filterParams) { - return rowVal < filterVal ? true : false; - }, - - //less than or equal to - "<=": function _(filterVal, rowVal, rowData, filterParams) { - return rowVal <= filterVal ? true : false; - }, - - //greater than - ">": function _(filterVal, rowVal, rowData, filterParams) { - return rowVal > filterVal ? true : false; - }, - - //greater than or equal to - ">=": function _(filterVal, rowVal, rowData, filterParams) { - return rowVal >= filterVal ? true : false; - }, - - //not equal to - "!=": function _(filterVal, rowVal, rowData, filterParams) { - return rowVal != filterVal ? true : false; - }, - - "regex": function regex(filterVal, rowVal, rowData, filterParams) { - - if (typeof filterVal == "string") { - filterVal = new RegExp(filterVal); - } - - return filterVal.test(rowVal); - }, - - //contains the string - "like": function like(filterVal, rowVal, rowData, filterParams) { - if (filterVal === null || typeof filterVal === "undefined") { - return rowVal === filterVal ? true : false; - } else { - if (typeof rowVal !== 'undefined' && rowVal !== null) { - return String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1; - } else { - return false; - } - } - }, - - //contains the keywords - "keywords": function keywords(filterVal, rowVal, rowData, filterParams) { - var keywords = filterVal.toLowerCase().split(typeof filterParams.separator === "undefined" ? " " : filterParams.separator), - value = String(rowVal === null || typeof rowVal === "undefined" ? "" : rowVal).toLowerCase(), - matches = []; - - keywords.forEach(function (keyword) { - if (value.includes(keyword)) { - matches.push(true); - } - }); - - return filterParams.matchAll ? matches.length === keywords.length : !!matches.length; - }, - - //starts with the string - "starts": function starts(filterVal, rowVal, rowData, filterParams) { - if (filterVal === null || typeof filterVal === "undefined") { - return rowVal === filterVal ? true : false; - } else { - if (typeof rowVal !== 'undefined' && rowVal !== null) { - return String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase()); - } else { - return false; - } - } - }, - - //ends with the string - "ends": function ends(filterVal, rowVal, rowData, filterParams) { - if (filterVal === null || typeof filterVal === "undefined") { - return rowVal === filterVal ? true : false; - } else { - if (typeof rowVal !== 'undefined' && rowVal !== null) { - return String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase()); - } else { - return false; - } - } - }, - - //in array - "in": function _in(filterVal, rowVal, rowData, filterParams) { - if (Array.isArray(filterVal)) { - return filterVal.indexOf(rowVal) > -1; - } else { - console.warn("Filter Error - filter value is not an array:", filterVal); - return false; - } - } -}; - -Tabulator.prototype.registerModule("filter", Filter); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/filter.min.js b/website/appphp/static/vendors/tabulator/js/modules/filter.min.js deleted file mode 100644 index 8be26628..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/filter.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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/appphp/static/vendors/tabulator/js/modules/format.js b/website/appphp/static/vendors/tabulator/js/modules/format.js deleted file mode 100644 index 57140270..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/format.js +++ /dev/null @@ -1,725 +0,0 @@ -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.7.0 (c) Oliver Folkerd */ - -var Format = function Format(table) { - this.table = table; //hold Tabulator object -}; - -//initialize column formatter -Format.prototype.initializeColumn = function (column) { - column.modules.format = this.lookupFormatter(column, ""); - - if (typeof column.definition.formatterPrint !== "undefined") { - column.modules.format.print = this.lookupFormatter(column, "Print"); - } - - if (typeof column.definition.formatterClipboard !== "undefined") { - column.modules.format.clipboard = this.lookupFormatter(column, "Clipboard"); - } - - if (typeof column.definition.formatterHtmlOutput !== "undefined") { - 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]; - - //set column formatter - switch (typeof formatter === "undefined" ? "undefined" : _typeof(formatter)) { - case "string": - - if (formatter === "tick") { - formatter = "tickCross"; - - if (typeof config.params.crossElement == "undefined") { - config.params.crossElement = false; - } - - console.warn("DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false"); - } - - if (this.formatters[formatter]) { - config.formatter = this.formatters[formatter]; - } else { - 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; - break; - } - - return config; -}; - -Format.prototype.cellRendered = function (cell) { - if (cell.modules.format && cell.modules.format.renderedCallback) { - cell.modules.format.renderedCallback(); - } -}; - -//return a formatted value for a cell -Format.prototype.formatValue = function (cell) { - var component = cell.getComponent(), - params = typeof cell.column.modules.format.params === "function" ? cell.column.modules.format.params(component) : cell.column.modules.format.params; - - function onRendered(callback) { - if (!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) { - if (!cell.modules.format) { - cell.modules.format = {}; - } - - cell.modules.format.renderedCallback = callback; - }; - - params = typeof formatter.params === "function" ? formatter.params(component) : formatter.params; - - return formatter.formatter.call(this, cell.getComponent(), params, onRendered); - } else { - return this.formatValue(cell); - } -}; - -Format.prototype.sanitizeHTML = function (value) { - if (value) { - var entityMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '/': '/', - '`': '`', - '=': '=' - }; - - return String(value).replace(/[&<>"'`=\/]/g, function (s) { - return entityMap[s]; - }); - } else { - return value; - } -}; - -Format.prototype.emptyToSpace = function (value) { - return value === null || typeof value === "undefined" || value === "" ? " " : value; -}; - -//get formatter for cell -Format.prototype.getFormatter = function (formatter) { - var formatter; - - switch (typeof formatter === "undefined" ? "undefined" : _typeof(formatter)) { - case "string": - if (this.formatters[formatter]) { - formatter = this.formatters[formatter]; - } else { - console.warn("Formatter Error - No such formatter found: ", formatter); - formatter = this.formatters.plaintext; - } - break; - - case "function": - formatter = formatter; - break; - - default: - formatter = this.formatters.plaintext; - break; - } - - return formatter; -}; - -//default data formatters -Format.prototype.formatters = { - //plain text value - plaintext: function plaintext(cell, formatterParams, onRendered) { - return this.emptyToSpace(this.sanitizeHTML(cell.getValue())); - }, - - //html text value - html: function html(cell, formatterParams, onRendered) { - return cell.getValue(); - }, - - //multiline text area - textarea: function textarea(cell, formatterParams, onRendered) { - cell.getElement().style.whiteSpace = "pre-wrap"; - return this.emptyToSpace(this.sanitizeHTML(cell.getValue())); - }, - - //currency formatting - money: function money(cell, formatterParams, onRendered) { - var floatVal = parseFloat(cell.getValue()), - number, - integer, - decimal, - rgx; - - var decimalSym = formatterParams.decimal || "."; - var thousandSym = formatterParams.thousand || ","; - var symbol = formatterParams.symbol || ""; - var after = !!formatterParams.symbolAfter; - var precision = typeof formatterParams.precision !== "undefined" ? formatterParams.precision : 2; - - if (isNaN(floatVal)) { - return this.emptyToSpace(this.sanitizeHTML(cell.getValue())); - } - - number = precision !== false ? floatVal.toFixed(precision) : floatVal; - number = String(number).split("."); - - integer = number[0]; - decimal = number.length > 1 ? decimalSym + number[1] : ""; - - rgx = /(\d+)(\d{3})/; - - while (rgx.test(integer)) { - integer = integer.replace(rgx, "$1" + thousandSym + "$2"); - } - - return after ? integer + decimal + symbol : symbol + integer + decimal; - }, - - //clickable anchor tag - 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) { - data = cell.getData(); - label = data[formatterParams.labelField]; - } - - if (formatterParams.label) { - switch (_typeof(formatterParams.label)) { - case "string": - label = formatterParams.label; - break; - - case "function": - label = formatterParams.label(cell); - break; - } - } - - if (label) { - if (formatterParams.urlField) { - data = cell.getData(); - value = data[formatterParams.urlField]; - } - - if (formatterParams.url) { - switch (_typeof(formatterParams.url)) { - case "string": - value = formatterParams.url; - break; - - case "function": - value = formatterParams.url(cell); - break; - } - } - - el.setAttribute("href", urlPrefix + value); - - if (formatterParams.target) { - el.setAttribute("target", formatterParams.target); - } - - if (formatterParams.download) { - - if (typeof download == "function") { - download = download(cell); - } else { - download = download === true ? "" : download; - } - - el.setAttribute("download", download); - } - - el.innerHTML = this.emptyToSpace(this.sanitizeHTML(label)); - - return el; - } else { - return " "; - } - }, - - //image element - image: function image(cell, formatterParams, onRendered) { - var el = document.createElement("img"); - el.setAttribute("src", cell.getValue()); - - switch (_typeof(formatterParams.height)) { - case "number": - el.style.height = formatterParams.height + "px"; - break; - - case "string": - el.style.height = formatterParams.height; - break; - } - - switch (_typeof(formatterParams.width)) { - case "number": - el.style.width = formatterParams.width + "px"; - break; - - case "string": - el.style.width = formatterParams.width; - break; - } - - el.addEventListener("load", function () { - cell.getRow().normalizeHeight(); - }); - - return el; - }, - - //tick or cross - tickCross: function tickCross(cell, formatterParams, onRendered) { - var value = cell.getValue(), - element = cell.getElement(), - empty = formatterParams.allowEmpty, - truthy = formatterParams.allowTruthy, - tick = typeof formatterParams.tickElement !== "undefined" ? formatterParams.tickElement : '', - cross = typeof formatterParams.crossElement !== "undefined" ? formatterParams.crossElement : ''; - - if (truthy && value || value === true || value === "true" || value === "True" || value === 1 || value === "1") { - element.setAttribute("aria-checked", true); - return tick || ""; - } else { - if (empty && (value === "null" || value === "" || value === null || typeof value === "undefined")) { - element.setAttribute("aria-checked", "mixed"); - return ""; - } else { - element.setAttribute("aria-checked", false); - return cross || ""; - } - } - }, - - datetime: function datetime(cell, formatterParams, onRendered) { - var inputFormat = formatterParams.inputFormat || "YYYY-MM-DD hh:mm:ss"; - var outputFormat = formatterParams.outputFormat || "DD/MM/YYYY hh:mm:ss"; - var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : ""; - var value = cell.getValue(); - - var newDatetime = moment(value, inputFormat); - - if (newDatetime.isValid()) { - return formatterParams.timezone ? newDatetime.tz(formatterParams.timezone).format(outputFormat) : newDatetime.format(outputFormat); - } else { - - if (invalid === true) { - return value; - } else if (typeof invalid === "function") { - return invalid(value); - } else { - return invalid; - } - } - }, - - datetimediff: function datetime(cell, formatterParams, onRendered) { - var inputFormat = formatterParams.inputFormat || "YYYY-MM-DD hh:mm:ss"; - var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : ""; - var suffix = typeof formatterParams.suffix !== "undefined" ? formatterParams.suffix : false; - var unit = typeof formatterParams.unit !== "undefined" ? formatterParams.unit : undefined; - var humanize = typeof formatterParams.humanize !== "undefined" ? formatterParams.humanize : false; - var date = typeof formatterParams.date !== "undefined" ? formatterParams.date : moment(); - var value = cell.getValue(); - - var newDatetime = moment(value, inputFormat); - - if (newDatetime.isValid()) { - if (humanize) { - return moment.duration(newDatetime.diff(date)).humanize(suffix); - } else { - return newDatetime.diff(date, unit) + (suffix ? " " + suffix : ""); - } - } else { - - if (invalid === true) { - return value; - } else if (typeof invalid === "function") { - return invalid(value); - } else { - return invalid; - } - } - }, - - //select - lookup: function lookup(cell, formatterParams, onRendered) { - var value = cell.getValue(); - - if (typeof formatterParams[value] === "undefined") { - console.warn('Missing display value for ' + value); - return value; - } - - return formatterParams[value]; - }, - - //star rating - 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 = ''; - - //style stars holder - stars.style.verticalAlign = "middle"; - - //style star - 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(true); - nextStar.innerHTML = i <= value ? starActive : starInactive; - - stars.appendChild(nextStar); - } - - element.style.whiteSpace = "nowrap"; - element.style.overflow = "hidden"; - element.style.textOverflow = "ellipsis"; - - element.setAttribute("aria-label", value); - - return 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 && typeof formatterParams.color !== "undefined" ? formatterParams.color : ["red", "orange", "green"], - color = "#666666", - percent, - percentValue; - - if (isNaN(value) || typeof cell.getValue() === "undefined") { - return; - } - - el.classList.add("tabulator-traffic-light"); - - //make sure value is in range - percentValue = parseFloat(value) <= max ? parseFloat(value) : max; - percentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min; - - //workout percentage - percent = (max - min) / 100; - percentValue = Math.round((percentValue - min) / percent); - - //set color - switch (typeof colors === "undefined" ? "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; - var index = Math.floor(percentValue / unit); - - index = Math.min(index, colors.length - 1); - index = Math.max(index, 0); - color = colors[index]; - break; - } - } - - el.style.backgroundColor = color; - - return el; - }, - - //progress bar - progress: function progress(cell, formatterParams, onRendered) { - //progress bar - 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; - - //make sure value is in range - percentValue = parseFloat(value) <= max ? parseFloat(value) : max; - percentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min; - - //workout percentage - percent = (max - min) / 100; - percentValue = Math.round((percentValue - min) / percent); - - //set bar color - switch (_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; - var 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"; - } - - //generate legend - switch (_typeof(formatterParams.legend)) { - case "string": - legend = formatterParams.legend; - break; - case "function": - legend = formatterParams.legend(value); - break; - case "boolean": - legend = value; - break; - default: - legend = false; - } - - //set legend color - 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; - var 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"); - 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); - - if (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; - } - - onRendered(function () { - - //handle custom element needed if formatter is to be included in printed/downloaded output - 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); - - if (legend) { - element.appendChild(legendEl); - } - }); - - return ""; - }, - - //background color - color: function color(cell, formatterParams, onRendered) { - cell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue()); - return ""; - }, - - //tick icon - buttonTick: function buttonTick(cell, formatterParams, onRendered) { - return ''; - }, - - //cross icon - buttonCross: function buttonCross(cell, formatterParams, onRendered) { - return ''; - }, - - //current row number - rownum: function rownum(cell, formatterParams, onRendered) { - return this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf()) + 1; - }, - - //row handle - handle: function handle(cell, formatterParams, onRendered) { - cell.getElement().classList.add("tabulator-row-handle"); - return "
"; - }, - - responsiveCollapse: function responsiveCollapse(cell, formatterParams, onRendered) { - var self = this, - open = false, - el = document.createElement("div"), - config = cell.getRow()._row.modules.responsiveLayout; - - el.classList.add("tabulator-responsive-collapse-toggle"); - el.innerHTML = "+-"; - - cell.getElement().classList.add("tabulator-row-handle"); - - function toggleList(isOpen) { - var collapseEl = config.element; - - config.open = isOpen; - - if (collapseEl) { - - if (config.open) { - el.classList.add("open"); - collapseEl.style.display = ''; - } else { - el.classList.remove("open"); - collapseEl.style.display = 'none'; - } - } - } - - el.addEventListener("click", function (e) { - e.stopImmediatePropagation(); - toggleList(!config.open); - }); - - toggleList(config.open); - - return el; - }, - - rowSelection: function rowSelection(cell) { - var _this = this; - - var checkbox = document.createElement("input"); - - checkbox.type = 'checkbox'; - - if (this.table.modExists("selectRow", true)) { - - checkbox.addEventListener("click", function (e) { - e.stopPropagation(); - }); - - if (typeof cell.getRow == 'function') { - 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) { - if (_this.table.modules.selectRow.selectedRows.length) { - _this.table.deselectRow(); - } else { - _this.table.selectRow(); - } - }); - - this.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox); - } - } - return checkbox; - } -}; - -Tabulator.prototype.registerModule("format", Format); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/format.min.js b/website/appphp/static/vendors/tabulator/js/modules/format.min.js deleted file mode 100644 index 0b39b61f..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/format.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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/appphp/static/vendors/tabulator/js/modules/frozen_columns.js b/website/appphp/static/vendors/tabulator/js/modules/frozen_columns.js deleted file mode 100644 index fdbc4abc..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/frozen_columns.js +++ /dev/null @@ -1,275 +0,0 @@ -/* Tabulator v4.7.0 (c) Oliver Folkerd */ - -var FrozenColumns = function FrozenColumns(table) { - this.table = table; //hold Tabulator object - this.leftColumns = []; - this.rightColumns = []; - this.leftMargin = 0; - this.rightMargin = 0; - this.rightPadding = 0; - this.initializationMode = "left"; - this.active = false; - this.scrollEndTimer = false; -}; - -//reset initial state -FrozenColumns.prototype.reset = function () { - this.initializationMode = "left"; - this.leftColumns = []; - this.rightColumns = []; - this.leftMargin = 0; - this.rightMargin = 0; - this.rightMargin = 0; - this.active = false; - - this.table.columnManager.headersElement.style.marginLeft = 0; - this.table.columnManager.element.style.paddingRight = 0; -}; - -//initialize specific column -FrozenColumns.prototype.initializeColumn = function (column) { - var config = { margin: 0, edge: false }; - - if (!column.isGroup) { - - if (this.frozenCheck(column)) { - - config.position = this.initializationMode; - - if (this.initializationMode == "left") { - this.leftColumns.push(column); - } else { - this.rightColumns.unshift(column); - } - - this.active = true; - - column.modules.frozen = config; - } else { - this.initializationMode = "right"; - } - } -}; - -FrozenColumns.prototype.frozenCheck = function (column) { - var frozen = false; - - if (column.parent.isGroup && column.definition.frozen) { - console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"); - } - - if (column.parent.isGroup) { - return this.frozenCheck(column.parent); - } else { - return column.definition.frozen; - } - - return frozen; -}; - -//quick layout to smooth horizontal scrolling -FrozenColumns.prototype.scrollHorizontal = function () { - var _this = this; - - var rows; - - if (this.active) { - clearTimeout(this.scrollEndTimer); - - //layout all rows after scroll is complete - this.scrollEndTimer = setTimeout(function () { - _this.layout(); - }, 100); - - rows = this.table.rowManager.getVisibleRows(); - - this.calcMargins(); - - this.layoutColumnPosition(); - - this.layoutCalcRows(); - - rows.forEach(function (row) { - if (row.type === "row") { - _this.layoutRow(row); - } - }); - - this.table.rowManager.tableElement.style.marginRight = this.rightMargin; - } -}; - -//calculate margins for rows -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; - - //calculate right frozen columns - this.rightPadding = this.table.rowManager.element.clientWidth + this.table.columnManager.scrollLeft; -}; - -//layout calculation rows -FrozenColumns.prototype.layoutCalcRows = function () { - if (this.table.modExists("columnCalcs")) { - if (this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow) { - this.layoutRow(this.table.modules.columnCalcs.topRow); - } - if (this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow) { - this.layoutRow(this.table.modules.columnCalcs.botRow); - } - } -}; - -//calculate column positions and layout headers -FrozenColumns.prototype.layoutColumnPosition = function (allCells) { - var _this2 = this; - - var leftParents = []; - - this.leftColumns.forEach(function (column, i) { - column.modules.frozen.margin = _this2._calcSpace(_this2.leftColumns, i) + _this2.table.columnManager.scrollLeft + "px"; - - if (i == _this2.leftColumns.length - 1) { - column.modules.frozen.edge = true; - } else { - column.modules.frozen.edge = false; - } - - if (column.parent.isGroup) { - var parentEl = _this2.getColGroupParentElement(column); - if (!leftParents.includes(parentEl)) { - _this2.layoutElement(parentEl, column); - leftParents.push(parentEl); - } - - if (column.modules.frozen.edge) { - parentEl.classList.add("tabulator-frozen-" + column.modules.frozen.position); - } - } else { - _this2.layoutElement(column.getElement(), column); - } - - if (allCells) { - column.cells.forEach(function (cell) { - _this2.layoutElement(cell.getElement(), column); - }); - } - }); - - this.rightColumns.forEach(function (column, i) { - column.modules.frozen.margin = _this2.rightPadding - _this2._calcSpace(_this2.rightColumns, i + 1) + "px"; - - if (i == _this2.rightColumns.length - 1) { - column.modules.frozen.edge = true; - } else { - column.modules.frozen.edge = false; - } - - if (column.parent.isGroup) { - _this2.layoutElement(_this2.getColGroupParentElement(column), column); - } else { - _this2.layoutElement(column.getElement(), column); - } - - if (allCells) { - column.cells.forEach(function (cell) { - _this2.layoutElement(cell.getElement(), column); - }); - } - }); -}; - -FrozenColumns.prototype.getColGroupParentElement = function (column) { - return column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement(); -}; - -//layout columns appropropriatly -FrozenColumns.prototype.layout = function () { - var self = this, - rightMargin = 0; - - if (self.active) { - - //calculate row padding - this.calcMargins(); - - // self.table.rowManager.activeRows.forEach(function(row){ - // self.layoutRow(row); - // }); - - // if(self.table.options.dataTree){ - self.table.rowManager.getDisplayRows().forEach(function (row) { - if (row.type === "row") { - self.layoutRow(row); - } - }); - // } - - this.layoutCalcRows(); - - //calculate left columns - this.layoutColumnPosition(true); - - // if(tableHolder.scrollHeight > tableHolder.clientHeight){ - // rightMargin -= tableHolder.offsetWidth - tableHolder.clientWidth; - // } - - this.table.rowManager.tableElement.style.marginRight = this.rightMargin; - } -}; - -FrozenColumns.prototype.layoutRow = function (row) { - var _this3 = this; - - var rowEl = row.getElement(); - - rowEl.style.paddingLeft = this.leftMargin; - // rowEl.style.paddingRight = this.rightMargin + "px"; - - this.leftColumns.forEach(function (column) { - var cell = row.getCell(column); - - if (cell) { - _this3.layoutElement(cell.getElement(), column); - } - }); - - this.rightColumns.forEach(function (column) { - var cell = row.getCell(column); - - if (cell) { - _this3.layoutElement(cell.getElement(), column); - } - }); -}; - -FrozenColumns.prototype.layoutElement = function (element, column) { - - if (column.modules.frozen) { - element.style.position = "absolute"; - element.style.left = column.modules.frozen.margin; - - element.classList.add("tabulator-frozen"); - - if (column.modules.frozen.edge) { - element.classList.add("tabulator-frozen-" + column.modules.frozen.position); - } - } -}; - -FrozenColumns.prototype._calcSpace = function (columns, index) { - var width = 0; - - for (var i = 0; i < index; i++) { - if (columns[i].visible) { - width += columns[i].getWidth(); - } - } - - return width; -}; - -Tabulator.prototype.registerModule("frozenColumns", FrozenColumns); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/frozen_columns.min.js b/website/appphp/static/vendors/tabulator/js/modules/frozen_columns.min.js deleted file mode 100644 index bf2bb60f..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/frozen_columns.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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) { - output.splice(index, 1); - } - }); - - return output; -}; - -FrozenRows.prototype.freezeRow = function (row) { - if (!row.modules.frozen) { - row.modules.frozen = true; - this.topElement.appendChild(row.getElement()); - row.initialize(); - row.normalizeHeight(); - this.table.rowManager.adjustTableSize(); - - this.rows.push(row); - - this.table.rowManager.refreshActiveData("display"); - - this.styleRows(); - } else { - console.warn("Freeze Error - Row is already frozen"); - } -}; - -FrozenRows.prototype.unfreezeRow = function (row) { - var index = this.rows.indexOf(row); - - if (row.modules.frozen) { - - row.modules.frozen = false; - - 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) { - 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); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/frozen_rows.min.js b/website/appphp/static/vendors/tabulator/js/modules/frozen_rows.min.js deleted file mode 100644 index c38e9925..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/frozen_rows.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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/appphp/static/vendors/tabulator/js/modules/group_rows.js b/website/appphp/static/vendors/tabulator/js/modules/group_rows.js deleted file mode 100644 index 05731ec3..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/group_rows.js +++ /dev/null @@ -1,1087 +0,0 @@ -/* Tabulator v4.7.0 (c) Oliver Folkerd */ - -//public group object -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(true); -}; - -GroupComponent.prototype.getSubGroups = function () { - return this._group.getSubGroups(true); -}; - -GroupComponent.prototype.getParentGroup = function () { - return this._group.parent ? this._group.parent.getComponent() : false; -}; - -GroupComponent.prototype.getVisibility = function () { - console.warn("getVisibility function is deprecated, you should now use the isVisible function"); - return 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; -}; - -////////////////////////////////////////////////// -//////////////// Group Functions ///////////////// -////////////////////////////////////////////////// - -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 < groupManager.groupIDLookups.length - 1; - this.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow; - this.type = "group"; //type of element - this.old = oldGroup; - this.rows = []; - this.groups = []; - this.groupList = []; - this.generator = generator; - this.elementContents = false; - this.height = 0; - this.outerHeight = 0; - this.initialized = false; - this.calcs = {}; - this.initialized = false; - this.modules = {}; - this.arrowElement = false; - - this.visible = oldGroup ? oldGroup.visible : typeof groupManager.startOpen[level] !== "undefined" ? groupManager.startOpen[level] : groupManager.startOpen[0]; - - this.component = null; - - this.createElements(); - this.addBindings(); - - this.createValueGroups(); -}; - -Group.prototype.wipe = function () { - if (this.groupList.length) { - this.groupList.forEach(function (group) { - group.wipe(); - }); - } else { - this.element = false; - this.arrowElement = false; - this.elementContents = false; - } -}; - -Group.prototype.createElements = function () { - var arrow = document.createElement("div"); - arrow.classList.add("tabulator-arrow"); - - this.element = document.createElement("div"); - this.element.classList.add("tabulator-row"); - this.element.classList.add("tabulator-group"); - this.element.classList.add("tabulator-group-level-" + this.level); - this.element.setAttribute("role", "rowgroup"); - - this.arrowElement = document.createElement("div"); - this.arrowElement.classList.add("tabulator-group-toggle"); - this.arrowElement.appendChild(arrow); - - //setup movable rows - if (this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists("moveRow")) { - this.groupManager.table.modules.moveRow.initializeGroupHeader(this); - } -}; - -Group.prototype.createValueGroups = function () { - var _this = this; - - var level = this.level + 1; - if (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) { - this.groupManager.allowedValues[level].forEach(function (value) { - _this._createGroup(value, level); - }); - } -}; - -Group.prototype.addBindings = function () { - var self = this, - dblTap, - tapHold, - tap, - toggleElement; - - //handle group click events - if (self.groupManager.table.options.groupClick) { - self.element.addEventListener("click", function (e) { - self.groupManager.table.options.groupClick.call(self.groupManager.table, e, self.getComponent()); - }); - } - - if (self.groupManager.table.options.groupDblClick) { - self.element.addEventListener("dblclick", function (e) { - self.groupManager.table.options.groupDblClick.call(self.groupManager.table, e, self.getComponent()); - }); - } - - if (self.groupManager.table.options.groupContext) { - self.element.addEventListener("contextmenu", function (e) { - self.groupManager.table.options.groupContext.call(self.groupManager.table, e, self.getComponent()); - }); - } - - if (self.groupManager.table.options.groupContextMenu && self.groupManager.table.modExists("menu")) { - self.groupManager.table.modules.menu.initializeGroup.call(self.groupManager.table.modules.menu, self); - } - - if (self.groupManager.table.options.groupTap) { - - tap = false; - - self.element.addEventListener("touchstart", function (e) { - tap = true; - }, { passive: true }); - - self.element.addEventListener("touchend", function (e) { - if (tap) { - self.groupManager.table.options.groupTap(e, self.getComponent()); - } - - tap = false; - }); - } - - if (self.groupManager.table.options.groupDblTap) { - - dblTap = null; - - self.element.addEventListener("touchend", function (e) { - - if (dblTap) { - clearTimeout(dblTap); - dblTap = null; - - self.groupManager.table.options.groupDblTap(e, self.getComponent()); - } else { - - dblTap = setTimeout(function () { - clearTimeout(dblTap); - dblTap = null; - }, 300); - } - }); - } - - if (self.groupManager.table.options.groupTapHold) { - - tapHold = null; - - self.element.addEventListener("touchstart", function (e) { - clearTimeout(tapHold); - - tapHold = setTimeout(function () { - clearTimeout(tapHold); - tapHold = null; - tap = false; - self.groupManager.table.options.groupTapHold(e, self.getComponent()); - }, 1000); - }, { passive: true }); - - self.element.addEventListener("touchend", function (e) { - clearTimeout(tapHold); - tapHold = null; - }); - } - - if (self.groupManager.table.options.groupToggleElement) { - toggleElement = self.groupManager.table.options.groupToggleElement == "arrow" ? self.arrowElement : self.element; - - toggleElement.addEventListener("click", function (e) { - e.stopPropagation(); - e.stopImmediatePropagation(); - self.toggleVisibility(); - }); - } -}; - -Group.prototype._createGroup = function (groupID, level) { - var groupKey = level + "_" + groupID; - var group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false); - - this.groups[groupKey] = group; - this.groupList.push(group); -}; - -Group.prototype._addRowToGroup = function (row) { - - var level = this.level + 1; - - if (this.hasSubGroups) { - var groupID = this.groupManager.groupIDLookups[level].func(row.getData()), - groupKey = level + "_" + groupID; - - if (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) { - if (this.groups[groupKey]) { - this.groups[groupKey].addRow(row); - } - } else { - if (!this.groups[groupKey]) { - this._createGroup(groupID, level); - } - - this.groups[groupKey].addRow(row); - } - } -}; - -Group.prototype._addRow = function (row) { - this.rows.push(row); - row.modules.group = this; -}; - -Group.prototype.insertRow = function (row, to, after) { - var data = this.conformRowData({}); - - row.updateData(data); - - var toIndex = this.rows.indexOf(to); - - if (toIndex > -1) { - if (after) { - this.rows.splice(toIndex + 1, 0, row); - } else { - this.rows.splice(toIndex, 0, row); - } - } else { - if (after) { - this.rows.push(row); - } else { - this.rows.unshift(row); - } - } - - row.modules.group = this; - - this.generateGroupHeaderContents(); - - if (this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table") { - this.groupManager.table.modules.columnCalcs.recalcGroup(this); - } - - this.groupManager.updateGroupRows(true); -}; - -Group.prototype.scrollHeader = function (left) { - this.arrowElement.style.marginLeft = left; - - this.groupList.forEach(function (child) { - child.scrollHeader(left); - }); -}; - -Group.prototype.getRowIndex = function (row) {}; - -//update row data to match grouping contraints -Group.prototype.conformRowData = function (data) { - if (this.field) { - data[this.field] = this.key; - } else { - console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"); - } - - if (this.parent) { - data = this.parent.conformRowData(data); - } - - return data; -}; - -Group.prototype.removeRow = function (row) { - var index = this.rows.indexOf(row); - var el = row.getElement(); - - if (index > -1) { - this.rows.splice(index, 1); - } - - if (!this.groupManager.table.options.groupValues && !this.rows.length) { - if (this.parent) { - this.parent.removeGroup(this); - } else { - this.groupManager.removeGroup(this); - } - - this.groupManager.updateGroupRows(true); - } else { - - if (el.parentNode) { - el.parentNode.removeChild(el); - } - - this.generateGroupHeaderContents(); - - if (this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table") { - this.groupManager.table.modules.columnCalcs.recalcGroup(this); - } - } -}; - -Group.prototype.removeGroup = function (group) { - var groupKey = group.level + "_" + group.key, - index; - - if (this.groups[groupKey]) { - delete this.groups[groupKey]; - - index = this.groupList.indexOf(group); - - if (index > -1) { - this.groupList.splice(index, 1); - } - - if (!this.groupList.length) { - if (this.parent) { - this.parent.removeGroup(this); - } else { - this.groupManager.removeGroup(this); - } - } - } -}; - -Group.prototype.getHeadersAndRows = function (noCalc) { - var output = []; - - output.push(this); - - this._visSet(); - - if (this.visible) { - if (this.groupList.length) { - this.groupList.forEach(function (group) { - output = output.concat(group.getHeadersAndRows(noCalc)); - }); - } else { - if (!noCalc && this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()) { - if (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); - - if (!noCalc && this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()) { - if (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); - } - } - } else { - if (!this.groupList.length && this.groupManager.table.options.columnCalcs != "table") { - - if (this.groupManager.table.modExists("columnCalcs")) { - - if (!noCalc && this.groupManager.table.modules.columnCalcs.hasTopCalcs()) { - if (this.calcs.top) { - this.calcs.top.detachElement(); - this.calcs.top.deleteCells(); - } - - if (this.groupManager.table.options.groupClosedShowCalcs) { - this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows); - output.push(this.calcs.top); - } - } - - if (!noCalc && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()) { - if (this.calcs.bottom) { - this.calcs.bottom.detachElement(); - this.calcs.bottom.deleteCells(); - } - - if (this.groupManager.table.options.groupClosedShowCalcs) { - this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows); - output.push(this.calcs.bottom); - } - } - } - } - } - - return output; -}; - -Group.prototype.getData = function (visible, transform) { - var self = this, - output = []; - - this._visSet(); - - if (!visible || visible && this.visible) { - this.rows.forEach(function (row) { - output.push(row.getData(transform || "data")); - }); - } - - return output; -}; - -// Group.prototype.getRows = function(){ -// this._visSet(); - -// return this.visible ? this.rows : []; -// }; - -Group.prototype.getRowCount = function () { - var count = 0; - - if (this.groupList.length) { - this.groupList.forEach(function (group) { - count += group.getRowCount(); - }); - } else { - count = this.rows.length; - } - return count; -}; - -Group.prototype.toggleVisibility = function () { - if (this.visible) { - this.hide(); - } else { - this.show(); - } -}; - -Group.prototype.hide = function () { - this.visible = false; - - if (this.groupManager.table.rowManager.getRenderMode() == "classic" && !this.groupManager.table.options.pagination) { - - this.element.classList.remove("tabulator-group-visible"); - - if (this.groupList.length) { - this.groupList.forEach(function (group) { - - var rows = group.getHeadersAndRows(); - - rows.forEach(function (row) { - row.detachElement(); - }); - }); - } else { - 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(); - } else { - this.groupManager.updateGroupRows(true); - } - - this.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), false); -}; - -Group.prototype.show = function () { - var self = this; - - self.visible = true; - - if (this.groupManager.table.rowManager.getRenderMode() == "classic" && !this.groupManager.table.options.pagination) { - - this.element.classList.add("tabulator-group-visible"); - - var prev = self.getElement(); - - if (this.groupList.length) { - this.groupList.forEach(function (group) { - var rows = group.getHeadersAndRows(); - - rows.forEach(function (row) { - var rowEl = row.getElement(); - prev.parentNode.insertBefore(rowEl, prev.nextSibling); - row.initialize(); - prev = rowEl; - }); - }); - } else { - self.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(); - } else { - this.groupManager.updateGroupRows(true); - } - - this.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), true); -}; - -Group.prototype._visSet = function () { - var data = []; - - if (typeof this.visible == "function") { - - 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 = false; - if (this.groupList.length) { - this.groupList.forEach(function (group) { - var result = group.getRowGroup(row); - - if (result) { - match = result; - } - }); - } else { - if (this.rows.find(function (item) { - return item === row; - })) { - match = this; - } - } - - return match; -}; - -Group.prototype.getSubGroups = function (component) { - var output = []; - - this.groupList.forEach(function (child) { - output.push(component ? child.getComponent() : child); - }); - - return output; -}; - -Group.prototype.getRows = function (compoment) { - var output = []; - - this.rows.forEach(function (row) { - output.push(compoment ? row.getComponent() : row); - }); - - return output; -}; - -Group.prototype.generateGroupHeaderContents = function () { - var data = []; - - this.rows.forEach(function (row) { - data.push(row.getData()); - }); - - this.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent()); - - while (this.element.firstChild) { - this.element.removeChild(this.element.firstChild); - }if (typeof this.elementContents === "string") { - this.element.innerHTML = this.elementContents; - } else { - this.element.appendChild(this.elementContents); - } - - this.element.insertBefore(this.arrowElement, this.element.firstChild); -}; - -////////////// Standard Row Functions ////////////// - -Group.prototype.getElement = function () { - this.addBindingsd = false; - - this._visSet(); - - if (this.visible) { - this.element.classList.add("tabulator-group-visible"); - } else { - this.element.classList.remove("tabulator-group-visible"); - } - - for (var i = 0; i < this.element.childNodes.length; ++i) { - this.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]); - } - - this.generateGroupHeaderContents(); - - // this.addBindings(); - - return this.element; -}; - -Group.prototype.detachElement = function () { - if (this.element && this.element.parentNode) { - this.element.parentNode.removeChild(this.element); - } -}; - -//normalize the height of elements in the row -Group.prototype.normalizeHeight = function () { - this.setHeight(this.element.clientHeight); -}; - -Group.prototype.initialize = function (force) { - if (!this.initialized || force) { - this.normalizeHeight(); - this.initialized = true; - } -}; - -Group.prototype.reinitialize = function () { - this.initialized = false; - this.height = 0; - - if (Tabulator.prototype.helpers.elVisible(this.element)) { - this.initialize(true); - } -}; - -Group.prototype.setHeight = function (height) { - if (this.height != height) { - this.height = height; - this.outerHeight = this.element.offsetHeight; - } -}; - -//return rows outer height -Group.prototype.getHeight = function () { - return this.outerHeight; -}; - -Group.prototype.getGroup = function () { - return this; -}; - -Group.prototype.reinitializeHeight = function () {}; -Group.prototype.calcHeight = function () {}; -Group.prototype.setCellHeight = function () {}; -Group.prototype.clearCellHeight = function () {}; - -//////////////// Object Generation ///////////////// -Group.prototype.getComponent = function () { - if (!this.component) { - this.component = new GroupComponent(this); - } - - return this.component; -}; - -////////////////////////////////////////////////// -////////////// Group Row Extension /////////////// -////////////////////////////////////////////////// - -var GroupRows = function GroupRows(table) { - - this.table = table; //hold Tabulator object - - this.groupIDLookups = false; //enable table grouping and set field to group by - this.startOpen = [function () { - return false; - }]; //starting state of group - this.headerGenerator = [function () { - return ""; - }]; - this.groupList = []; //ordered list of groups - this.allowedValues = false; - this.groups = {}; //hold row groups - this.displayIndex = 0; //index in display pipeline -}; - -//initialize group configuration -GroupRows.prototype.initialize = function () { - var self = this, - groupBy = self.table.options.groupBy, - startOpen = self.table.options.groupStartOpen, - groupHeader = self.table.options.groupHeader; - - this.allowedValues = self.table.options.groupValues; - - if (Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length) { - console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"); - } - - self.headerGenerator = [function () { - return ""; - }]; - this.startOpen = [function () { - return false; - }]; //starting state of group - - self.table.modules.localize.bind("groups|item", function (langValue, lang) { - self.headerGenerator[0] = function (value, count, data) { - //header layout function - return (typeof value === "undefined" ? "" : value) + "(" + count + " " + (count === 1 ? langValue : lang.groups.items) + ")"; - }; - }); - - this.groupIDLookups = []; - - if (Array.isArray(groupBy) || groupBy) { - if (this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "table" && this.table.options.columnCalcs != "both") { - this.table.modules.columnCalcs.removeCalcs(); - } - } else { - if (this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "group") { - - var cols = this.table.columnManager.getRealColumns(); - - cols.forEach(function (col) { - if (col.definition.topCalc) { - self.table.modules.columnCalcs.initializeTopRow(); - } - - if (col.definition.bottomCalc) { - self.table.modules.columnCalcs.initializeBottomRow(); - } - }); - } - } - - if (!Array.isArray(groupBy)) { - groupBy = [groupBy]; - } - - groupBy.forEach(function (group, i) { - var lookupFunc, column; - - if (typeof group == "function") { - lookupFunc = group; - } else { - column = self.table.columnManager.getColumnByField(group); - - if (column) { - lookupFunc = function lookupFunc(data) { - return column.getFieldValue(data); - }; - } else { - lookupFunc = function lookupFunc(data) { - return data[group]; - }; - } - } - - self.groupIDLookups.push({ - field: typeof group === "function" ? false : group, - func: lookupFunc, - values: self.allowedValues ? self.allowedValues[i] : false - }); - }); - - if (startOpen) { - - if (!Array.isArray(startOpen)) { - startOpen = [startOpen]; - } - - startOpen.forEach(function (level) { - level = typeof level == "function" ? level : function () { - return true; - }; - }); - - self.startOpen = startOpen; - } - - if (groupHeader) { - self.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader]; - } - - this.initialized = true; -}; - -GroupRows.prototype.setDisplayIndex = function (index) { - this.displayIndex = index; -}; - -GroupRows.prototype.getDisplayIndex = function () { - return this.displayIndex; -}; - -//return appropriate rows with group headers -GroupRows.prototype.getRows = function (rows) { - if (this.groupIDLookups.length) { - - this.table.options.dataGrouping.call(this.table); - - this.generateGroups(rows); - - if (this.table.options.dataGrouped) { - this.table.options.dataGrouped.call(this.table, this.getGroups(true)); - } - - return this.updateGroupRows(); - } else { - return rows.slice(0); - } -}; - -GroupRows.prototype.getGroups = function (compoment) { - var groupComponents = []; - - this.groupList.forEach(function (group) { - groupComponents.push(compoment ? group.getComponent() : group); - }); - - return groupComponents; -}; - -GroupRows.prototype.getChildGroups = function (group) { - var _this2 = this; - - var groupComponents = []; - - if (!group) { - group = this; - } - - group.groupList.forEach(function (child) { - if (child.groupList.length) { - groupComponents = groupComponents.concat(_this2.getChildGroups(child)); - } else { - groupComponents.push(child); - } - }); - - return groupComponents; -}; - -GroupRows.prototype.wipe = function () { - this.groupList.forEach(function (group) { - group.wipe(); - }); -}; - -GroupRows.prototype.pullGroupListData = function (groupList) { - var self = this; - var groupListData = []; - - groupList.forEach(function (group) { - var groupHeader = {}; - groupHeader.level = 0; - groupHeader.rowCount = 0; - groupHeader.headerContent = ""; - var childData = []; - - if (group.hasSubGroups) { - childData = self.pullGroupListData(group.groupList); - - groupHeader.level = group.level; - groupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers - groupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group); - - groupListData.push(groupHeader); - groupListData = groupListData.concat(childData); - } else { - 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")); - }); - } - }); - - return groupListData; -}; - -GroupRows.prototype.getGroupedData = function () { - - return this.pullGroupListData(this.groupList); -}; - -GroupRows.prototype.getRowGroup = function (row) { - var match = false; - - this.groupList.forEach(function (group) { - var result = group.getRowGroup(row); - - if (result) { - match = result; - } - }); - - return match; -}; - -GroupRows.prototype.countGroups = function () { - return this.groupList.length; -}; - -GroupRows.prototype.generateGroups = function (rows) { - var self = this, - oldGroups = self.groups; - - self.groups = {}; - self.groupList = []; - - if (this.allowedValues && this.allowedValues[0]) { - this.allowedValues[0].forEach(function (value) { - self.createGroup(value, 0, oldGroups); - }); - - rows.forEach(function (row) { - self.assignRowToExistingGroup(row, oldGroups); - }); - } else { - 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, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]); - - this.groups[groupKey] = group; - this.groupList.push(group); -}; - -// GroupRows.prototype.assignRowToGroup = function(row, oldGroups){ -// var groupID = this.groupIDLookups[0].func(row.getData()), -// groupKey = "0_" + groupID; - -// if(!this.groups[groupKey]){ -// this.createGroup(groupID, 0, oldGroups); -// } - -// this.groups[groupKey].addRow(row); -// }; - -GroupRows.prototype.assignRowToExistingGroup = function (row, oldGroups) { - var groupID = this.groupIDLookups[0].func(row.getData()), - groupKey = "0_" + groupID; - - if (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]; - - if (newGroupNeeded) { - this.createGroup(groupID, 0, oldGroups); - } - - this.groups["0_" + groupID].addRow(row); - - return !newGroupNeeded; -}; - -GroupRows.prototype.updateGroupRows = function (force) { - var self = this, - output = [], - oldRowCount; - - self.groupList.forEach(function (group) { - output = output.concat(group.getHeadersAndRows()); - }); - - //force update of table display - if (force) { - - var displayIndex = self.table.rowManager.setDisplayRows(output, this.getDisplayIndex()); - - if (displayIndex !== true) { - this.setDisplayIndex(displayIndex); - } - - self.table.rowManager.refreshActiveData("group", true, true); - } - - return output; -}; - -GroupRows.prototype.scrollHeaders = function (left) { - left = left + "px"; - - this.groupList.forEach(function (group) { - group.scrollHeader(left); - }); -}; - -GroupRows.prototype.removeGroup = function (group) { - var groupKey = group.level + "_" + group.key, - index; - - if (this.groups[groupKey]) { - delete this.groups[groupKey]; - - index = this.groupList.indexOf(group); - - if (index > -1) { - this.groupList.splice(index, 1); - } - } -}; - -Tabulator.prototype.registerModule("groupRows", GroupRows); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/group_rows.min.js b/website/appphp/static/vendors/tabulator/js/modules/group_rows.min.js deleted file mode 100644 index 6039f2c4..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/group_rows.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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/appphp/static/vendors/tabulator/js/modules/history.js b/website/appphp/static/vendors/tabulator/js/modules/history.js deleted file mode 100644 index 1c3ae3ed..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/history.js +++ /dev/null @@ -1,141 +0,0 @@ -/* Tabulator v4.7.0 (c) Oliver Folkerd */ - -var History = function History(table) { - this.table = table; //hold Tabulator object - - 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]; - - this.undoers[action.type].call(this, action); - - this.index--; - - this.table.options.historyUndo.call(this.table, action.type, action.component.getComponent(), action.data); - - return true; - } else { - console.warn("History Undo Error - No more history to undo"); - return false; - } -}; - -History.prototype.redo = function () { - if (this.history.length - 1 > this.index) { - - this.index++; - - var action = this.history[this.index]; - - this.redoers[action.type].call(this, action); - - this.table.options.historyRedo.call(this.table, action.type, action.component.getComponent(), action.data); - - return true; - } else { - console.warn("History Redo Error - No more history to redo"); - return false; - } -}; - -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); - - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - this.table.modules.groupRows.updateGroupRows(true); - } - - 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); - - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - this.table.modules.groupRows.updateGroupRows(true); - } - - 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(); - } -}; - -//rebind rows to new element after deletion -History.prototype._rebindRow = function (oldRow, newRow) { - this.history.forEach(function (action) { - if (action.component instanceof Row) { - if (action.component === oldRow) { - action.component = newRow; - } - } else if (action.component instanceof Cell) { - if (action.component.row === oldRow) { - var field = action.component.column.getField(); - - if (field) { - action.component = newRow.getCell(field); - } - } - } - }); -}; - -Tabulator.prototype.registerModule("history", History); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/history.min.js b/website/appphp/static/vendors/tabulator/js/modules/history.min.js deleted file mode 100644 index 5df3187b..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/history.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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/appphp/static/vendors/tabulator/js/modules/html_table_import.js b/website/appphp/static/vendors/tabulator/js/modules/html_table_import.js deleted file mode 100644 index 34fed7cb..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/html_table_import.js +++ /dev/null @@ -1,191 +0,0 @@ -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.7.0 (c) Oliver Folkerd */ - -var HtmlTableImport = function HtmlTableImport(table) { - this.table = table; //hold Tabulator object - this.fieldIndex = []; - this.hasIndex = false; -}; - -HtmlTableImport.prototype.parseTable = function () { - var self = this, - element = self.table.element, - options = self.table.options, - columns = options.columns, - headers = element.getElementsByTagName("th"), - rows = element.getElementsByTagName("tbody")[0], - data = [], - newTable; - - self.hasIndex = false; - - self.table.options.htmlImporting.call(this.table); - - rows = rows ? rows.getElementsByTagName("tr") : []; - - //check for tablator inline options - self._extractOptions(element, options); - - if (headers.length) { - self._extractHeaders(headers, rows); - } else { - self._generateBlankHeaders(headers, rows); - } - - //iterate through table rows and build data set - for (var index = 0; index < rows.length; index++) { - var row = rows[index], - cells = row.getElementsByTagName("td"), - item = {}; - - //create index if the dont exist in table - if (!self.hasIndex) { - item[options.index] = index; - } - - for (var i = 0; i < cells.length; i++) { - var cell = cells[i]; - if (typeof this.fieldIndex[i] !== "undefined") { - item[this.fieldIndex[i]] = cell.innerHTML; - } - } - - //add row data to item - data.push(item); - } - - //create new element - var newElement = document.createElement("div"); - - //transfer attributes to new element - var attributes = element.attributes; - - // loop through attributes and apply them on div - - for (var i in attributes) { - if (_typeof(attributes[i]) == "object") { - newElement.setAttribute(attributes[i].name, attributes[i].value); - } - } - - // replace table with div element - element.parentNode.replaceChild(newElement, element); - - options.data = data; - - self.table.options.htmlImported.call(this.table); - - // // newElement.tabulator(options); - - this.table.element = newElement; -}; - -//extract tabulator attribute options -HtmlTableImport.prototype._extractOptions = function (element, options, defaultOptions) { - var attributes = element.attributes; - var optionsArr = defaultOptions ? Object.assign([], defaultOptions) : Object.keys(options); - var optionsList = {}; - - optionsArr.forEach(function (item) { - optionsList[item.toLowerCase()] = item; - }); - - for (var index in attributes) { - var attrib = attributes[index]; - var name; - - if (attrib && (typeof attrib === "undefined" ? "undefined" : _typeof(attrib)) == "object" && attrib.name && attrib.name.indexOf("tabulator-") === 0) { - name = attrib.name.replace("tabulator-", ""); - - if (typeof optionsList[name] !== "undefined") { - options[optionsList[name]] = this._attribValue(attrib.value); - } - } - } -}; - -//get value of attribute -HtmlTableImport.prototype._attribValue = function (value) { - if (value === "true") { - return true; - } - - if (value === "false") { - return false; - } - - return value; -}; - -//find column if it has already been defined -HtmlTableImport.prototype._findCol = function (title) { - var match = this.table.options.columns.find(function (column) { - return column.title === title; - }); - - return match || false; -}; - -//extract column from headers -HtmlTableImport.prototype._extractHeaders = function (headers, rows) { - for (var index = 0; index < headers.length; index++) { - var header = headers[index], - exists = false, - col = this._findCol(header.textContent), - width, - attributes; - - if (col) { - exists = true; - } else { - col = { title: header.textContent.trim() }; - } - - if (!col.field) { - col.field = header.textContent.trim().toLowerCase().replace(" ", "_"); - } - - width = header.getAttribute("width"); - - if (width && !col.width) { - col.width = width; - } - - //check for tablator inline options - attributes = header.attributes; - - // //check for tablator inline options - this._extractOptions(header, col, Column.prototype.defaultOptionList); - - this.fieldIndex[index] = col.field; - - if (col.field == this.table.options.index) { - this.hasIndex = true; - } - - if (!exists) { - this.table.options.columns.push(col); - } - } -}; - -//generate blank headers -HtmlTableImport.prototype._generateBlankHeaders = function (headers, rows) { - for (var index = 0; index < headers.length; index++) { - var header = headers[index], - col = { title: "", field: "col" + index }; - - this.fieldIndex[index] = col.field; - - var width = header.getAttribute("width"); - - if (width) { - col.width = width; - } - - this.table.options.columns.push(col); - } -}; - -Tabulator.prototype.registerModule("htmlTableImport", HtmlTableImport); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/html_table_import.min.js b/website/appphp/static/vendors/tabulator/js/modules/html_table_import.min.js deleted file mode 100644 index aef2b5c9..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/html_table_import.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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) { - self.pressedKeys.splice(index, 1); - } - } - }; - - this.table.element.addEventListener("keydown", this.keyupBinding); - - this.table.element.addEventListener("keyup", this.keydownBinding); -}; - -Keybindings.prototype.clearBindings = function () { - if (this.keyupBinding) { - this.table.element.removeEventListener("keydown", this.keyupBinding); - } - - if (this.keydownBinding) { - this.table.element.removeEventListener("keyup", this.keydownBinding); - } -}; - -Keybindings.prototype.checkBinding = function (e, binding) { - var self = this, - match = true; - - if (e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta) { - binding.keys.forEach(function (key) { - var index = self.pressedKeys.indexOf(key); - - if (index == -1) { - match = false; - } - }); - - if (match) { - binding.action.call(self, e); - } - - return true; - } - - return false; -}; - -//default bindings -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" -}; - -//default actions -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(); - - if (rowManager.displayRowsCount) { - if (newPos >= 0) { - rowManager.element.scrollTop = newPos; - } else { - 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(); - - if (rowManager.displayRowsCount) { - if (newPos <= scrollMax) { - rowManager.element.scrollTop = newPos; - } else { - rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]); - } - } - - this.table.element.focus(); - }, - scrollToStart: function scrollToStart(e) { - var rowManager = this.table.rowManager; - - e.preventDefault(); - - if (rowManager.displayRowsCount) { - rowManager.scrollToRow(rowManager.getDisplayRows()[0]); - } - - this.table.element.focus(); - }, - scrollToEnd: function scrollToEnd(e) { - var rowManager = this.table.rowManager; - - e.preventDefault(); - - if (rowManager.displayRowsCount) { - rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]); - } - - this.table.element.focus(); - }, - navPrev: function navPrev(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().prev(); - } - } - }, - - navNext: function navNext(e) { - var cell = false; - var newRow = this.table.options.tabEndNewRow; - var nav; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - - nav = cell.nav(); - - if (!nav.next()) { - if (newRow) { - - cell.getElement().firstChild.blur(); - - if (newRow === true) { - newRow = this.table.addRow({}); - } else { - if (typeof newRow == "function") { - newRow = this.table.addRow(newRow(cell.row.getComponent())); - } else { - newRow = this.table.addRow(Object.assign({}, newRow)); - } - } - - newRow.then(function () { - setTimeout(function () { - nav.next(); - }); - }); - } - } - } - } - }, - - navLeft: function navLeft(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().left(); - } - } - }, - - navRight: function navRight(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().right(); - } - } - }, - - navUp: function navUp(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().up(); - } - } - }, - - navDown: function navDown(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().down(); - } - } - }, - - undo: function undo(e) { - var cell = false; - if (this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")) { - - cell = this.table.modules.edit.currentCell; - - if (!cell) { - e.preventDefault(); - this.table.modules.history.undo(); - } - } - }, - - redo: function redo(e) { - var cell = false; - if (this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")) { - - cell = this.table.modules.edit.currentCell; - - if (!cell) { - e.preventDefault(); - this.table.modules.history.redo(); - } - } - }, - - copyToClipboard: function copyToClipboard(e) { - if (!this.table.modules.edit.currentCell) { - if (this.table.modExists("clipboard", true)) { - this.table.modules.clipboard.copy(false, true); - } - } - } -}; - -Tabulator.prototype.registerModule("keybindings", Keybindings); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/keybindings.min.js b/website/appphp/static/vendors/tabulator/js/modules/keybindings.min.js deleted file mode 100644 index 3535b88f..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/keybindings.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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},Keybindings=function(t){this.table=t,this.watchKeys=null,this.pressedKeys=null,this.keyupBinding=!1,this.keydownBinding=!1};Keybindings.prototype.initialize=function(){var t=this.table.options.keybindings,e={};if(this.watchKeys={},this.pressedKeys=[],!1!==t){for(var i in this.bindings)e[i]=this.bindings[i];if(Object.keys(t).length)for(var n in t)e[n]=t[n];this.mapBindings(e),this.bindEvents()}},Keybindings.prototype.mapBindings=function(t){var e=this,i=this;for(var n in t)!function(n){e.actions[n]?t[n]&&("object"!==_typeof(t[n])&&(t[n]=[t[n]]),t[n].forEach(function(t){i.mapBinding(n,t)})):console.warn("Key Binding Error - no such action:",n)}(n)},Keybindings.prototype.mapBinding=function(t,e){var i=this,n={action:this.actions[t],keys:[],ctrl:!1,shift:!1,meta:!1};e.toString().toLowerCase().split(" ").join("").split("+").forEach(function(t){switch(t){case"ctrl":n.ctrl=!0;break;case"shift":n.shift=!0;break;case"meta":n.meta=!0;break;default:t=parseInt(t),n.keys.push(t),i.watchKeys[t]||(i.watchKeys[t]=[]),i.watchKeys[t].push(n)}})},Keybindings.prototype.bindEvents=function(){var t=this;this.keyupBinding=function(e){var i=e.keyCode,n=t.watchKeys[i];n&&(t.pressedKeys.push(i),n.forEach(function(i){t.checkBinding(e,i)}))},this.keydownBinding=function(e){var i=e.keyCode;if(t.watchKeys[i]){var n=t.pressedKeys.indexOf(i);n>-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/appphp/static/vendors/tabulator/js/modules/menu.js b/website/appphp/static/vendors/tabulator/js/modules/menu.js deleted file mode 100644 index d86575f5..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/menu.js +++ /dev/null @@ -1,200 +0,0 @@ -/* Tabulator v4.7.0 (c) Oliver Folkerd */ - -var Menu = function Menu(table) { - this.table = table; //hold Tabulator object - this.menuEl = false; - this.blurEvent = this.hideMenu.bind(this); - this.escEvent = this.escMenu.bind(this); - this.nestedMenuBlock = false; -}; - -Menu.prototype.initializeColumnHeader = function (column) { - var _this = this; - - var headerMenuEl; - - if (column.definition.headerContextMenu) { - column.getElement().addEventListener("contextmenu", function (e) { - var menu = typeof column.definition.headerContextMenu == "function" ? column.definition.headerContextMenu(column.getComponent()) : column.definition.headerContextMenu; - - e.preventDefault(); - - _this.loadMenu(e, column, menu); - }); - } - - if (column.definition.headerMenu) { - - headerMenuEl = document.createElement("span"); - headerMenuEl.classList.add("tabulator-header-menu-button"); - headerMenuEl.innerHTML = "⋮"; - - headerMenuEl.addEventListener("click", function (e) { - var menu = typeof column.definition.headerMenu == "function" ? column.definition.headerMenu(column.getComponent()) : column.definition.headerMenu; - e.stopPropagation(); - e.preventDefault(); - - _this.loadMenu(e, column, menu); - }); - - column.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild); - } -}; - -Menu.prototype.initializeCell = function (cell) { - var _this2 = this; - - cell.getElement().addEventListener("contextmenu", function (e) { - var menu = typeof cell.column.definition.contextMenu == "function" ? cell.column.definition.contextMenu(cell.getComponent()) : cell.column.definition.contextMenu; - - e.stopImmediatePropagation(); - - _this2.loadMenu(e, cell, menu); - }); -}; - -Menu.prototype.initializeRow = function (row) { - var _this3 = this; - - 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) { - var _this4 = this; - - 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 _this5 = this; - - var docHeight = Math.max(document.body.offsetHeight, window.innerHeight); - - e.preventDefault(); - - //abort if no menu set - if (!menu || !menu.length) { - return; - } - - if (this.nestedMenuBlock) { - //abort if child menu already open - if (this.isOpen()) { - return; - } - } else { - this.nestedMenuBlock = setTimeout(function () { - _this5.nestedMenuBlock = false; - }, 100); - } - - this.hideMenu(); - - this.menuEl = document.createElement("div"); - this.menuEl.classList.add("tabulator-menu"); - - menu.forEach(function (item) { - var itemEl = document.createElement("div"); - var label = item.label; - var disabled = item.disabled; - - if (item.separator) { - itemEl.classList.add("tabulator-menu-separator"); - } else { - itemEl.classList.add("tabulator-menu-item"); - - if (typeof label == "function") { - label = label(component.getComponent()); - } - - if (label instanceof Node) { - itemEl.appendChild(label); - } else { - itemEl.innerHTML = label; - } - - if (typeof disabled == "function") { - disabled = disabled(component.getComponent()); - } - - if (disabled) { - itemEl.classList.add("tabulator-menu-item-disabled"); - itemEl.addEventListener("click", function (e) { - e.stopPropagation(); - }); - } else { - itemEl.addEventListener("click", function (e) { - _this5.hideMenu(); - item.action(e, component.getComponent()); - }); - } - } - - _this5.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", _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 - if (e.pageX + this.menuEl.offsetWidth >= document.body.offsetWidth) { - this.menuEl.style.left = ""; - this.menuEl.style.right = document.body.offsetWidth - e.pageX + "px"; - } - - //move menu to start on bottom edge if it is too close to the edge of the screen - if (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) { - if (e.keyCode == 27) { - this.hideMenu(); - } -}; - -Menu.prototype.hideMenu = function () { - if (this.menuEl.parentNode) { - this.menuEl.parentNode.removeChild(this.menuEl); - } - - if (this.escEvent) { - document.body.removeEventListener("keydown", this.escEvent); - } - - if (this.blurEvent) { - document.body.removeEventListener("click", this.blurEvent); - document.body.removeEventListener("contextmenu", this.blurEvent); - this.table.rowManager.element.removeEventListener("scroll", this.blurEvent); - } -}; - -//default accessors -Menu.prototype.menus = {}; - -Tabulator.prototype.registerModule("menu", Menu); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/menu.min.js b/website/appphp/static/vendors/tabulator/js/modules/menu.min.js deleted file mode 100644 index 40b82413..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/menu.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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/appphp/static/vendors/tabulator/js/modules/moveable_columns.js b/website/appphp/static/vendors/tabulator/js/modules/moveable_columns.js deleted file mode 100644 index 5244016f..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/moveable_columns.js +++ /dev/null @@ -1,289 +0,0 @@ -/* Tabulator v4.7.0 (c) Oliver Folkerd */ - -var MoveColumns = function MoveColumns(table) { - this.table = table; //hold Tabulator object - this.placeholderElement = this.createPlaceholderElement(); - this.hoverElement = false; //floating column header element - this.checkTimeout = false; //click check timeout holder - this.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click - this.moving = false; //currently moving column - this.toCol = false; //destination column - this.toColAfter = false; //position of moving column relative to the desitnation column - this.startX = 0; //starting position within header element - this.autoScrollMargin = 40; //auto scroll on edge when within margin - this.autoScrollStep = 5; //auto scroll distance in pixels - this.autoScrollTimeout = false; //auto scroll timeout - this.touchMove = false; - - this.moveHover = this.moveHover.bind(this); - this.endMove = this.endMove.bind(this); -}; - -MoveColumns.prototype.createPlaceholderElement = function () { - var el = document.createElement("div"); - - el.classList.add("tabulator-col"); - el.classList.add("tabulator-col-placeholder"); - - return el; -}; - -MoveColumns.prototype.initializeColumn = function (column) { - var self = this, - config = {}, - colEl; - - if (!column.modules.frozen) { - - colEl = column.getElement(); - - config.mousemove = function (e) { - if (column.parent === self.moving.parent) { - if ((self.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(colEl).left + self.table.columnManager.element.scrollLeft > column.getWidth() / 2) { - if (self.toCol !== column || !self.toColAfter) { - colEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling); - self.moveColumn(column, true); - } - } else { - if (self.toCol !== column || self.toColAfter) { - colEl.parentNode.insertBefore(self.placeholderElement, colEl); - self.moveColumn(column, false); - } - } - } - }.bind(self); - - colEl.addEventListener("mousedown", function (e) { - self.touchMove = false; - if (e.which === 1) { - self.checkTimeout = setTimeout(function () { - self.startMove(e, column); - }, self.checkPeriod); - } - }); - - colEl.addEventListener("mouseup", function (e) { - if (e.which === 1) { - if (self.checkTimeout) { - clearTimeout(self.checkTimeout); - } - } - }); - - self.bindTouchEvents(column); - } - - column.modules.moveColumn = config; -}; - -MoveColumns.prototype.bindTouchEvents = function (column) { - var self = this, - colEl = column.getElement(), - startXMove = false, - //shifting center position of the cell - dir = false, - currentCol, - nextCol, - prevCol, - nextColWidth, - prevColWidth, - nextColWidthLast, - prevColWidthLast; - - colEl.addEventListener("touchstart", function (e) { - self.checkTimeout = setTimeout(function () { - self.touchMove = true; - 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 = false; - - self.startMove(e, column); - }, self.checkPeriod); - }, { passive: true }); - - colEl.addEventListener("touchmove", function (e) { - var halfCol, diff, moveToCol; - - if (self.moving) { - self.moveHover(e); - - if (!startXMove) { - startXMove = e.touches[0].pageX; - } - - diff = e.touches[0].pageX - startXMove; - - if (diff > 0) { - if (nextCol && diff - nextColWidthLast > nextColWidth) { - moveToCol = nextCol; - - if (moveToCol !== column) { - startXMove = e.touches[0].pageX; - moveToCol.getElement().parentNode.insertBefore(self.placeholderElement, moveToCol.getElement().nextSibling); - self.moveColumn(moveToCol, true); - } - } - } else { - if (prevCol && -diff - prevColWidthLast > prevColWidth) { - moveToCol = prevCol; - - if (moveToCol !== column) { - startXMove = e.touches[0].pageX; - moveToCol.getElement().parentNode.insertBefore(self.placeholderElement, moveToCol.getElement()); - self.moveColumn(moveToCol, false); - } - } - } - - if (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: true }); - - colEl.addEventListener("touchend", function (e) { - if (self.checkTimeout) { - clearTimeout(self.checkTimeout); - } - if (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"); - - //create placeholder - this.placeholderElement.style.width = column.getWidth() + "px"; - this.placeholderElement.style.height = column.getHeight() + "px"; - - element.parentNode.insertBefore(this.placeholderElement, element); - element.parentNode.removeChild(element); - - //create hover element - this.hoverElement = element.cloneNode(true); - this.hoverElement.classList.add("tabulator-moving"); - - this.table.columnManager.getElement().appendChild(this.hoverElement); - - this.hoverElement.style.left = "0"; - this.hoverElement.style.bottom = "0"; - - if (!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) { - if (column.modules.moveColumn.mousemove) { - column.getElement().addEventListener("mousemove", column.modules.moveColumn.mousemove); - } - }); -}; - -MoveColumns.prototype._unbindMouseMove = function () { - this.table.columnManager.columnsByIndex.forEach(function (column) { - if (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; - - if (after) { - column.getCells().forEach(function (cell, i) { - var cellEl = cell.getElement(); - cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling); - }); - } else { - column.getCells().forEach(function (cell, i) { - var cellEl = cell.getElement(); - cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl); - }); - } -}; - -MoveColumns.prototype.endMove = function (e) { - if (e.which === 1 || 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"); - - if (this.toCol) { - this.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter); - } - - this.moving = false; - this.toCol = false; - this.toColAfter = false; - - if (!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"; - - if (xPos - scrollLeft < self.autoScrollMargin) { - if (!self.autoScrollTimeout) { - self.autoScrollTimeout = setTimeout(function () { - scrollPos = Math.max(0, scrollLeft - 5); - self.table.rowManager.getElement().scrollLeft = scrollPos; - self.autoScrollTimeout = false; - }, 1); - } - } - - if (scrollLeft + columnHolder.clientWidth - xPos < self.autoScrollMargin) { - if (!self.autoScrollTimeout) { - self.autoScrollTimeout = setTimeout(function () { - scrollPos = Math.min(columnHolder.clientWidth, scrollLeft + 5); - self.table.rowManager.getElement().scrollLeft = scrollPos; - self.autoScrollTimeout = false; - }, 1); - } - } -}; - -Tabulator.prototype.registerModule("moveColumn", MoveColumns); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/moveable_columns.min.js b/website/appphp/static/vendors/tabulator/js/modules/moveable_columns.min.js deleted file mode 100644 index 0135a3b0..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/moveable_columns.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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-l group.getHeight() / 2) { - if (self.toRow !== group || !self.toRowAfter) { - var rowEl = group.getElement(); - rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling); - self.moveRow(group, true); - } - } else { - if (self.toRow !== group || self.toRowAfter) { - var rowEl = group.getElement(); - if (rowEl.previousSibling) { - rowEl.parentNode.insertBefore(self.placeholderElement, rowEl); - self.moveRow(group, false); - } - } - } - }.bind(self); - - group.modules.moveRow = config; -}; - -MoveRows.prototype.initializeRow = function (row) { - var self = this, - config = {}, - rowEl; - - //inter table drag drop - config.mouseup = function (e) { - self.tableRowDrop(e, row); - }.bind(self); - - //same table drag drop - config.mousemove = function (e) { - if (e.pageY - Tabulator.prototype.helpers.elOffset(row.element).top + self.table.rowManager.element.scrollTop > row.getHeight() / 2) { - if (self.toRow !== row || !self.toRowAfter) { - var rowEl = row.getElement(); - rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling); - self.moveRow(row, true); - } - } else { - if (self.toRow !== row || self.toRowAfter) { - var rowEl = row.getElement(); - rowEl.parentNode.insertBefore(self.placeholderElement, rowEl); - self.moveRow(row, false); - } - } - }.bind(self); - - if (!this.hasHandle) { - - rowEl = row.getElement(); - - rowEl.addEventListener("mousedown", function (e) { - if (e.which === 1) { - self.checkTimeout = setTimeout(function () { - self.startMove(e, row); - }, self.checkPeriod); - } - }); - - rowEl.addEventListener("mouseup", function (e) { - if (e.which === 1) { - if (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) { - if (e.which === 1) { - self.checkTimeout = setTimeout(function () { - self.startMove(e, cell.row); - }, self.checkPeriod); - } - }); - - cellEl.addEventListener("mouseup", function (e) { - if (e.which === 1) { - if (self.checkTimeout) { - clearTimeout(self.checkTimeout); - } - } - }); - - this.bindTouchEvents(cell.row, cell.getElement()); -}; - -MoveRows.prototype.bindTouchEvents = function (row, element) { - var self = this, - startYMove = false, - //shifting center position of the cell - dir = false, - currentRow, - nextRow, - prevRow, - nextRowHeight, - prevRowHeight, - nextRowHeightLast, - prevRowHeightLast; - - element.addEventListener("touchstart", function (e) { - self.checkTimeout = setTimeout(function () { - self.touchMove = true; - 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 = false; - - self.startMove(e, row); - }, self.checkPeriod); - }, { passive: true }); - this.moving, this.toRow, this.toRowAfter; - element.addEventListener("touchmove", function (e) { - - var halfCol, diff, moveToRow; - - if (self.moving) { - e.preventDefault(); - - self.moveHover(e); - - if (!startYMove) { - startYMove = e.touches[0].pageY; - } - - diff = e.touches[0].pageY - startYMove; - - if (diff > 0) { - if (nextRow && diff - nextRowHeightLast > nextRowHeight) { - moveToRow = nextRow; - - if (moveToRow !== row) { - startYMove = e.touches[0].pageY; - moveToRow.getElement().parentNode.insertBefore(self.placeholderElement, moveToRow.getElement().nextSibling); - self.moveRow(moveToRow, true); - } - } - } else { - if (prevRow && -diff - prevRowHeightLast > prevRowHeight) { - moveToRow = prevRow; - - if (moveToRow !== row) { - startYMove = e.touches[0].pageY; - moveToRow.getElement().parentNode.insertBefore(self.placeholderElement, moveToRow.getElement()); - self.moveRow(moveToRow, false); - } - } - } - - if (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) { - if (self.checkTimeout) { - clearTimeout(self.checkTimeout); - } - if (self.moving) { - self.endMove(e); - self.touchMove = false; - } - }); -}; - -MoveRows.prototype._bindMouseMove = function () { - var self = this; - - self.table.rowManager.getDisplayRows().forEach(function (row) { - if ((row.type === "row" || row.type === "group") && row.modules.moveRow.mousemove) { - row.getElement().addEventListener("mousemove", row.modules.moveRow.mousemove); - } - }); -}; - -MoveRows.prototype._unbindMouseMove = function () { - var self = this; - - self.table.rowManager.getDisplayRows().forEach(function (row) { - if ((row.type === "row" || row.type === "group") && 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"); - - //create placeholder - this.placeholderElement.style.width = row.getWidth() + "px"; - this.placeholderElement.style.height = row.getHeight() + "px"; - - if (!this.connection) { - element.parentNode.insertBefore(this.placeholderElement, element); - element.parentNode.removeChild(element); - } else { - this.table.element.classList.add("tabulator-movingrow-sending"); - this.connectToTables(row); - } - - //create hover element - this.hoverElement = element.cloneNode(true); - this.hoverElement.classList.add("tabulator-moving"); - - if (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"; - } else { - 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(); - if (this.connection) { - position = element.getBoundingClientRect(); - - this.startX = position.left - pageX + window.pageXOffset; - this.startY = position.top - pageY + window.pageYOffset; - } else { - this.startY = pageY - element.getBoundingClientRect().top; - } -}; - -MoveRows.prototype.endMove = function (e) { - if (!e || e.which === 1 || this.touchMove) { - this._unbindMouseMove(); - - if (!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"); - - if (this.toRow) { - this.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter); - } - - this.moving = false; - this.toRow = false; - this.toRowAfter = false; - - document.body.removeEventListener("mousemove", this.moveHover); - document.body.removeEventListener("mouseup", this.endMove); - - if (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) { - if (this.connection) { - this.moveHoverConnections.call(this, e); - } else { - 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) { - if (this.table.options.movableRowsElementDrop) { - this.table.options.movableRowsElementDrop(e, element, row ? row.getComponent() : false); - } -}; - -//establish connection with other tables -MoveRows.prototype.connectToTables = function (row) { - var _this = this; - - var connectionTables; - - if (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 - }); - } - - if (this.connectionSelectorsElements) { - - this.connectionElements = []; - - if (!Array.isArray(this.connectionSelectorsElements)) { - this.connectionSelectorsElements = [this.connectionSelectorsElements]; - } - - this.connectionSelectorsElements.forEach(function (query) { - if (typeof query === "string") { - _this.connectionElements = _this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query))); - } else { - _this.connectionElements.push(query); - } - }); - - this.connectionElements.forEach(function (element) { - var dropEvent = function dropEvent(e) { - _this.elementRowDrop(e, element, _this.moving); - }; - - element.addEventListener("mouseup", dropEvent); - element.tabulatorElementDropEvent = dropEvent; - - element.classList.add("tabulator-movingrow-receiving"); - }); - } -}; - -//disconnect from other tables -MoveRows.prototype.disconnectFromTables = function () { - var connectionTables; - - if (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; - }); -}; - -//accept incomming connection -MoveRows.prototype.connect = function (table, row) { - var self = this; - if (!this.connectedTable) { - this.connectedTable = table; - this.connectedRow = row; - - this.table.element.classList.add("tabulator-movingrow-receiving"); - - self.table.rowManager.getDisplayRows().forEach(function (row) { - if (row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup) { - row.getElement().addEventListener("mouseup", row.modules.moveRow.mouseup); - } - }); - - self.tableRowDropEvent = self.tableRowDrop.bind(self); - - self.table.element.addEventListener("mouseup", self.tableRowDropEvent); - - this.table.options.movableRowsReceivingStart.call(this.table, row, table); - - return true; - } else { - console.warn("Move Row Error - Table cannot accept connection, already connected to table:", this.connectedTable); - return false; - } -}; - -//close incomming connection -MoveRows.prototype.disconnect = function (table) { - var self = this; - if (table === this.connectedTable) { - this.connectedTable = false; - this.connectedRow = false; - - this.table.element.classList.remove("tabulator-movingrow-receiving"); - - self.table.rowManager.getDisplayRows().forEach(function (row) { - if (row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup) { - row.getElement().removeEventListener("mouseup", row.modules.moveRow.mouseup); - } - }); - - self.table.element.removeEventListener("mouseup", self.tableRowDropEvent); - - this.table.options.movableRowsReceivingStop.call(this.table, table); - } else { - console.warn("Move Row Error - trying to disconnect from non connected table"); - } -}; - -MoveRows.prototype.dropComplete = function (table, row, success) { - var sender = false; - - 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; - break; - } - - if (sender) { - sender.call(this, this.moving.getComponent(), row ? row.getComponent() : undefined, table); - } else { - if (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() : undefined, table); - } else { - this.table.options.movableRowsSentFailed.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table); - } - - this.endMove(); -}; - -MoveRows.prototype.tableRowDrop = function (e, row) { - var receiver = false, - success = false; - - console.trace("drop"); - - e.stopImmediatePropagation(); - - switch (_typeof(this.table.options.movableRowsReceiver)) { - case "string": - receiver = this.receivers[this.table.options.movableRowsReceiver]; - break; - - case "function": - receiver = this.table.options.movableRowsReceiver; - break; - } - - if (receiver) { - success = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); - } else { - console.warn("Mover Row Error - no matching receiver found:", this.table.options.movableRowsReceiver); - } - - if (success) { - this.table.options.movableRowsReceived.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); - } else { - this.table.options.movableRowsReceivedFailed.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); - } - - this.table.modules.comms.send(this.connectedTable, "moveRow", "dropcomplete", { - row: row, - success: success - }); -}; - -MoveRows.prototype.receivers = { - insert: function insert(fromRow, toRow, fromTable) { - this.table.addRow(fromRow.getData(), undefined, toRow); - return true; - }, - - add: function add(fromRow, toRow, fromTable) { - this.table.addRow(fromRow.getData()); - return true; - }, - - update: function update(fromRow, toRow, fromTable) { - if (toRow) { - toRow.update(fromRow.getData()); - return true; - } - - return false; - }, - - replace: function replace(fromRow, toRow, fromTable) { - if (toRow) { - this.table.addRow(fromRow.getData(), undefined, toRow); - toRow.delete(); - return true; - } - - return false; - } -}; - -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); - break; - - case "disconnect": - return this.disconnect(table); - break; - - case "dropcomplete": - return this.dropComplete(table, data.row, data.success); - break; - } -}; - -Tabulator.prototype.registerModule("moveRow", MoveRows); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/moveable_rows.min.js b/website/appphp/static/vendors/tabulator/js/modules/moveable_rows.min.js deleted file mode 100644 index f9285359..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/moveable_rows.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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},MoveRows=function(e){this.table=e,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=150,this.moving=!1,this.toRow=!1,this.toRowAfter=!1,this.hasHandle=!1,this.startY=0,this.startX=0,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.tableRowDropEvent=!1,this.touchMove=!1,this.connection=!1,this.connectionSelectorsTables=!1,this.connectionSelectorsElements=!1,this.connectionElements=[],this.connections=[],this.connectedTable=!1,this.connectedRow=!1};MoveRows.prototype.createPlaceholderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-row"),e.classList.add("tabulator-row-placeholder"),e},MoveRows.prototype.initialize=function(e){this.connectionSelectorsTables=this.table.options.movableRowsConnectedTables,this.connectionSelectorsElements=this.table.options.movableRowsConnectedElements,this.connection=this.connectionSelectorsTables||this.connectionSelectorsElements},MoveRows.prototype.setHandle=function(e){this.hasHandle=e},MoveRows.prototype.initializeGroupHeader=function(e){var t=this,o={};o.mouseup=function(e){t.tableRowDrop(e,row)}.bind(t),o.mousemove=function(o){if(o.pageY-Tabulator.prototype.helpers.elOffset(e.element).top+t.table.rowManager.element.scrollTop>e.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/appphp/static/vendors/tabulator/js/modules/mutator.js b/website/appphp/static/vendors/tabulator/js/modules/mutator.js deleted file mode 100644 index e5b5dad5..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/mutator.js +++ /dev/null @@ -1,116 +0,0 @@ -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.7.0 (c) Oliver Folkerd */ - -var Mutator = function Mutator(table) { - this.table = table; //hold Tabulator object - this.allowedTypes = ["", "data", "edit", "clipboard"]; //list of muatation types - this.enabled = true; -}; - -//initialize column mutator -Mutator.prototype.initializeColumn = function (column) { - var self = this, - match = false, - config = {}; - - this.allowedTypes.forEach(function (type) { - var key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)), - mutator; - - if (column.definition[key]) { - mutator = self.lookupMutator(column.definition[key]); - - if (mutator) { - match = true; - - config[key] = { - mutator: mutator, - params: column.definition[key + "Params"] || {} - }; - } - } - }); - - if (match) { - column.modules.mutate = config; - } -}; - -Mutator.prototype.lookupMutator = function (value) { - var mutator = false; - - //set column mutator - switch (typeof value === "undefined" ? "undefined" : _typeof(value)) { - case "string": - if (this.mutators[value]) { - mutator = this.mutators[value]; - } else { - console.warn("Mutator Error - No such mutator found, ignoring: ", value); - } - break; - - case "function": - mutator = value; - break; - } - - return mutator; -}; - -//apply mutator to row -Mutator.prototype.transformRow = function (data, type, updatedData) { - var self = this, - key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)), - value; - - if (this.enabled) { - - self.table.columnManager.traverse(function (column) { - var mutator, params, component; - - if (column.modules.mutate) { - mutator = column.modules.mutate[key] || column.modules.mutate.mutator || false; - - if (mutator) { - value = column.getFieldValue(typeof updatedData !== "undefined" ? updatedData : data); - - if (type == "data" || typeof value !== "undefined") { - component = column.getComponent(); - params = typeof mutator.params === "function" ? mutator.params(value, data, type, component) : mutator.params; - column.setFieldValue(data, mutator.mutator(value, data, type, params, component)); - } - } - } - }); - } - - return data; -}; - -//apply mutator to new cell value -Mutator.prototype.transformCell = function (cell, value) { - var mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false, - tempData = {}; - - if (mutator) { - tempData = Object.assign(tempData, cell.row.getData()); - cell.column.setFieldValue(tempData, value); - return mutator.mutator(value, tempData, "edit", mutator.params, cell.getComponent()); - } else { - return value; - } -}; - -Mutator.prototype.enable = function () { - this.enabled = true; -}; - -Mutator.prototype.disable = function () { - this.enabled = false; -}; - -//default mutators -Mutator.prototype.mutators = {}; - -Tabulator.prototype.registerModule("mutator", Mutator); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/mutator.min.js b/website/appphp/static/vendors/tabulator/js/modules/mutator.min.js deleted file mode 100644 index 00005d11..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/mutator.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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/appphp/static/vendors/tabulator/js/modules/page.js b/website/appphp/static/vendors/tabulator/js/modules/page.js deleted file mode 100644 index d37b8142..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/page.js +++ /dev/null @@ -1,730 +0,0 @@ -/* Tabulator v4.7.0 (c) Oliver Folkerd */ - -var Page = function Page(table) { - - this.table = table; //hold Tabulator object - - this.mode = "local"; - this.progressiveLoad = false; - - this.size = 0; - this.page = 1; - this.count = 5; - this.max = 1; - - this.displayIndex = 0; //index in display pipeline - - this.initialLoad = true; - - 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"); - button.classList.add("tabulator-page"); - button.setAttribute("type", "button"); - button.setAttribute("role", "button"); - button.setAttribute("aria-label", ""); - button.setAttribute("title", ""); - - this.firstBut = button.cloneNode(true); - this.firstBut.setAttribute("data-page", "first"); - - this.prevBut = button.cloneNode(true); - this.prevBut.setAttribute("data-page", "prev"); - - this.nextBut = button.cloneNode(true); - this.nextBut.setAttribute("data-page", "next"); - - this.lastBut = button.cloneNode(true); - this.lastBut.setAttribute("data-page", "last"); - - if (this.table.options.paginationSizeSelector) { - this.pageSizeSelect = document.createElement("select"); - this.pageSizeSelect.classList.add("tabulator-page-size"); - } -}; - -Page.prototype.generatePageSizeSelectList = function () { - var _this = this; - - var pageSizes = []; - - if (this.pageSizeSelect) { - - if (Array.isArray(this.table.options.paginationSizeSelector)) { - pageSizes = this.table.options.paginationSizeSelector; - this.pageSizes = pageSizes; - - if (this.pageSizes.indexOf(this.size) == -1) { - pageSizes.unshift(this.size); - } - } else { - - if (this.pageSizes.indexOf(this.size) == -1) { - pageSizes = []; - - for (var i = 1; i < 5; i++) { - pageSizes.push(this.size * i); - } - - this.pageSizes = pageSizes; - } else { - pageSizes = this.pageSizes; - } - } - - while (this.pageSizeSelect.firstChild) { - this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild); - }pageSizes.forEach(function (item) { - var itemEl = document.createElement("option"); - itemEl.value = item; - - if (item === true) { - _this.table.modules.localize.bind("pagination|all", function (value) { - itemEl.innerHTML = value; - }); - } else { - itemEl.innerHTML = item; - } - - _this.pageSizeSelect.appendChild(itemEl); - }); - - this.pageSizeSelect.value = this.size; - } -}; - -//setup pageination -Page.prototype.initialize = function (hidden) { - var self = this, - pageSelectLabel, - testElRow, - testElCell; - - //update param names - 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); - - //build pagination element - - //bind localizations - 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); - }); - - //click bindings - 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); - }); - - if (self.table.options.paginationElement) { - self.element = self.table.options.paginationElement; - } - - if (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(self.pageSizeSelect.value == "true" ? true : self.pageSizeSelect.value); - self.setPage(1).then(function () {}).catch(function () {}); - }); - } - - //append to DOM - 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); - - if (!self.table.options.paginationElement && !hidden) { - self.table.footerManager.append(self.element, self); - } - - //set default values - self.mode = self.table.options.pagination; - - if (self.table.options.paginationSize) { - self.size = self.table.options.paginationSize; - } else { - testElRow = document.createElement("div"); - testElRow.classList.add("tabulator-row"); - testElRow.style.visibility = hidden; - - testElCell = document.createElement("div"); - testElCell.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.page = self.table.options.paginationInitialPage || 1; - self.count = self.table.options.paginationButtonCount; - - self.generatePageSizeSelectList(); -}; - -Page.prototype.initializeProgressive = function (mode) { - this.initialize(true); - this.mode = "progressive_" + mode; - this.progressiveLoad = true; -}; - -Page.prototype.setDisplayIndex = function (index) { - this.displayIndex = index; -}; - -Page.prototype.getDisplayIndex = function () { - return this.displayIndex; -}; - -//calculate maximum page from number of rows -Page.prototype.setMaxRows = function (rowCount) { - if (!rowCount) { - this.max = 1; - } else { - this.max = this.size === true ? 1 : Math.ceil(rowCount / this.size); - } - - if (this.page > this.max) { - this.page = this.max; - } -}; - -//reset to first page without triggering action -Page.prototype.reset = function (force, columnsChanged) { - if (this.mode == "local" || force) { - this.page = 1; - } - - if (columnsChanged) { - this.initialLoad = true; - } - - return true; -}; - -//set the maxmum page -Page.prototype.setMaxPage = function (max) { - - max = parseInt(max); - - this.max = max || 1; - - if (this.page > this.max) { - this.page = this.max; - this.trigger(); - } -}; - -//set current page number -Page.prototype.setPage = function (page) { - var _this2 = this; - - var self = this; - - switch (page) { - case "first": - return this.setPage(1); - break; - - case "prev": - return this.previousPage(); - break; - - case "next": - return this.nextPage(); - break; - - case "last": - return this.setPage(this.max); - break; - } - - return new Promise(function (resolve, reject) { - - page = parseInt(page); - - if (page > 0 && page <= _this2.max) { - _this2.page = page; - _this2.trigger().then(function () { - resolve(); - }).catch(function () { - reject(); - }); - - if (self.table.options.persistence && self.table.modExists("persistence", true) && self.table.modules.persistence.config.page) { - self.table.modules.persistence.save("page"); - } - } else { - console.warn("Pagination Error - Requested page is out of range of 1 - " + _this2.max + ":", page); - reject(); - } - }); -}; - -Page.prototype.setPageToRow = function (row) { - var _this3 = this; - - return new Promise(function (resolve, reject) { - - var rows = _this3.table.rowManager.getDisplayRows(_this3.displayIndex - 1); - var index = rows.indexOf(row); - - if (index > -1) { - var page = _this3.size === true ? 1 : Math.ceil((index + 1) / _this3.size); - - _this3.setPage(page).then(function () { - resolve(); - }).catch(function () { - reject(); - }); - } else { - console.warn("Pagination Error - Requested row is not visible"); - reject(); - } - }); -}; - -Page.prototype.setPageSize = function (size) { - if (size !== true) { - size = parseInt(size); - } - - if (size > 0) { - this.size = size; - } - - if (this.pageSizeSelect) { - // this.pageSizeSelect.value = size; - this.generatePageSizeSelectList(); - } - - if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.page) { - this.table.modules.persistence.save("page"); - } -}; - -//setup the pagination buttons -Page.prototype._setPageButtons = function () { - var self = this; - - var leftSize = Math.floor((this.count - 1) / 2); - var rightSize = Math.ceil((this.count - 1) / 2); - var min = this.max - this.page + leftSize + 1 < this.count ? this.max - this.count + 1 : Math.max(this.page - leftSize, 1); - var max = this.page <= rightSize ? Math.min(this.count, this.max) : Math.min(this.page + rightSize, this.max); - - while (self.pagesElement.firstChild) { - self.pagesElement.removeChild(self.pagesElement.firstChild); - }if (self.page == 1) { - self.firstBut.disabled = true; - self.prevBut.disabled = true; - } else { - self.firstBut.disabled = false; - self.prevBut.disabled = false; - } - - if (self.page == self.max) { - self.lastBut.disabled = true; - self.nextBut.disabled = true; - } else { - self.lastBut.disabled = false; - self.nextBut.disabled = false; - } - - for (var i = min; i <= max; i++) { - if (i > 0 && i <= self.max) { - self.pagesElement.appendChild(self._generatePageButton(i)); - } - } - - this.footerRedraw(); -}; - -Page.prototype._generatePageButton = function (page) { - var self = this, - button = document.createElement("button"); - - button.classList.add("tabulator-page"); - if (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); - }); - - return button; -}; - -//previous page -Page.prototype.previousPage = function () { - var _this4 = this; - - return new Promise(function (resolve, reject) { - if (_this4.page > 1) { - _this4.page--; - _this4.trigger().then(function () { - resolve(); - }).catch(function () { - reject(); - }); - - if (_this4.table.options.persistence && _this4.table.modExists("persistence", true) && _this4.table.modules.persistence.config.page) { - _this4.table.modules.persistence.save("page"); - } - } else { - console.warn("Pagination Error - Previous page would be less than page 1:", 0); - reject(); - } - }); -}; - -//next page -Page.prototype.nextPage = function () { - var _this5 = this; - - return new Promise(function (resolve, reject) { - if (_this5.page < _this5.max) { - _this5.page++; - _this5.trigger().then(function () { - resolve(); - }).catch(function () { - reject(); - }); - - if (_this5.table.options.persistence && _this5.table.modExists("persistence", true) && _this5.table.modules.persistence.config.page) { - _this5.table.modules.persistence.save("page"); - } - } else { - if (!_this5.progressiveLoad) { - console.warn("Pagination Error - Next page would be greater than maximum page of " + _this5.max + ":", _this5.max + 1); - } - reject(); - } - }); -}; - -//return current page number -Page.prototype.getPage = function () { - return this.page; -}; - -//return max page number -Page.prototype.getPageMax = function () { - return this.max; -}; - -Page.prototype.getPageSize = function (size) { - return this.size; -}; - -Page.prototype.getMode = function () { - return this.mode; -}; - -//return appropriate rows for current page -Page.prototype.getRows = function (data) { - var output, start, end; - - if (this.mode == "local") { - output = []; - - if (this.size === true) { - start = 0; - end = data.length - 1; - } else { - start = this.size * (this.page - 1); - end = start + parseInt(this.size); - } - - this._setPageButtons(); - - for (var i = start; i < end; i++) { - if (data[i]) { - output.push(data[i]); - } - } - - return output; - } else { - - this._setPageButtons(); - - return data.slice(0); - } -}; - -Page.prototype.trigger = function () { - var _this6 = this; - - var left; - - return new Promise(function (resolve, reject) { - - switch (_this6.mode) { - case "local": - left = _this6.table.rowManager.scrollLeft; - - _this6.table.rowManager.refreshActiveData("page"); - _this6.table.rowManager.scrollHorizontal(left); - - _this6.table.options.pageLoaded.call(_this6.table, _this6.getPage()); - resolve(); - break; - - case "remote": - case "progressive_load": - case "progressive_scroll": - _this6.table.modules.ajax.blockActiveRequest(); - _this6._getRemotePage().then(function () { - resolve(); - }).catch(function () { - reject(); - }); - break; - - default: - console.warn("Pagination Error - no such pagination mode:", _this6.mode); - reject(); - } - }); -}; - -Page.prototype._getRemotePage = function () { - var _this7 = this; - - var self = this, - oldParams, - pageParams; - - return new Promise(function (resolve, reject) { - - if (!self.table.modExists("ajax", true)) { - reject(); - } - - //record old params and restore after request has been made - oldParams = Tabulator.prototype.helpers.deepClone(self.table.modules.ajax.getParams() || {}); - pageParams = self.table.modules.ajax.getParams(); - - //configure request params - pageParams[_this7.dataSentNames.page] = self.page; - - //set page size if defined - if (_this7.size) { - pageParams[_this7.dataSentNames.size] = _this7.size; - } - - //set sort data if defined - if (_this7.table.options.ajaxSorting && _this7.table.modExists("sort")) { - var sorters = self.table.modules.sort.getSort(); - - sorters.forEach(function (item) { - delete item.column; - }); - - pageParams[_this7.dataSentNames.sorters] = sorters; - } - - //set filter data if defined - if (_this7.table.options.ajaxFiltering && _this7.table.modExists("filter")) { - var filters = self.table.modules.filter.getFilters(true, true); - pageParams[_this7.dataSentNames.filters] = filters; - } - - self.table.modules.ajax.setParams(pageParams); - - self.table.modules.ajax.sendRequest(_this7.progressiveLoad).then(function (data) { - self._parseRemoteData(data); - resolve(); - }).catch(function (e) { - reject(); - }); - - self.table.modules.ajax.setParams(oldParams); - }); -}; - -Page.prototype._parseRemoteData = function (data) { - var self = this, - left, - data, - margin; - - if (typeof data[this.dataReceivedNames.last_page] === "undefined") { - console.warn("Remote Pagination Error - Server response missing '" + this.dataReceivedNames.last_page + "' property"); - } - - if (data[this.dataReceivedNames.data]) { - this.max = parseInt(data[this.dataReceivedNames.last_page]) || 1; - - if (this.progressiveLoad) { - switch (this.mode) { - case "progressive_load": - - if (this.page == 1) { - this.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1); - } else { - this.table.rowManager.addRows(data[this.dataReceivedNames.data]); - } - - if (this.page < this.max) { - setTimeout(function () { - self.nextPage().then(function () {}).catch(function () {}); - }, self.table.options.ajaxProgressiveLoadDelay); - } - break; - - case "progressive_scroll": - data = this.table.rowManager.getData().concat(data[this.dataReceivedNames.data]); - - this.table.rowManager.setData(data, true, this.initialLoad && this.page == 1); - - margin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.element.clientHeight * 2; - - if (self.table.rowManager.element.scrollHeight <= self.table.rowManager.element.clientHeight + margin) { - self.nextPage().then(function () {}).catch(function () {}); - } - break; - } - } else { - left = this.table.rowManager.scrollLeft; - - this.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1); - - this.table.rowManager.scrollHorizontal(left); - - this.table.columnManager.scrollHorizontal(left); - - this.table.options.pageLoaded.call(this.table, this.getPage()); - } - - this.initialLoad = false; - } else { - console.warn("Remote Pagination Error - Server response missing '" + this.dataReceivedNames.data + "' property"); - } -}; - -//handle the footer element being redrawn -Page.prototype.footerRedraw = function () { - var footer = this.table.footerManager.element; - - if (Math.ceil(footer.clientWidth) - footer.scrollWidth < 0) { - this.pagesElement.style.display = 'none'; - } else { - this.pagesElement.style.display = ''; - - if (Math.ceil(footer.clientWidth) - footer.scrollWidth < 0) { - this.pagesElement.style.display = 'none'; - } - } -}; - -//set the paramter names for pagination requests -Page.prototype.paginationDataSentNames = { - "page": "page", - "size": "size", - "sorters": "sorters", - // "sort_dir":"sort_dir", - "filters": "filters" - // "filter_value":"filter_value", - // "filter_type":"filter_type", -}; - -//set the property names for pagination responses -Page.prototype.paginationDataReceivedNames = { - "current_page": "current_page", - "last_page": "last_page", - "data": "data" -}; - -Tabulator.prototype.registerModule("page", Page); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/page.min.js b/website/appphp/static/vendors/tabulator/js/modules/page.min.js deleted file mode 100644 index c2835ba9..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/page.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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.page i) { - output.splice(i, 0, column); - } else { - output.push(column); - } - } - }); - - return output; -}; - -//find matching columns -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; - break; - - case "field": - return col.field === subject.field; - break; - - case "object": - return col === subject; - break; - } - }); -}; - -//save data -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(); - break; - } - - if (this.writeFunc) { - this.writeFunc(this.id, type, data); - } -}; - -//ensure sorters contain no function data -Persistence.prototype.validateSorters = function (data) { - data.forEach(function (item) { - item.column = item.field; - delete item.field; - }); - - return data; -}; - -Persistence.prototype.getGroupConfig = function () { - if (this.config.group) { - if (this.config.group === true || this.config.group.groupBy) { - data.groupBy = this.table.options.groupBy; - } - - if (this.config.group === true || this.config.group.groupStartOpen) { - data.groupStartOpen = this.table.options.groupStartOpen; - } - - if (this.config.group === true || this.config.group.groupHeader) { - data.groupHeader = this.table.options.groupHeader; - } - } - - return data; -}; - -Persistence.prototype.getPageConfig = function () { - var data = {}; - - if (this.config.page) { - if (this.config.page === true || this.config.page.size) { - data.paginationSize = this.table.modules.page.getPageSize(); - } - - if (this.config.page === true || this.config.page.page) { - data.paginationInitialPage = this.table.modules.page.getPage(); - } - } - - return data; -}; - -//parse columns for data to store -Persistence.prototype.parseColumns = function (columns) { - var self = this, - definitions = []; - - columns.forEach(function (column) { - var defStore = {}, - colDef = column.getDefinition(), - keys; - - if (column.isGroup) { - defStore.title = colDef.title; - defStore.columns = self.parseColumns(column.getColumns()); - } else { - defStore.field = column.getField(); - - if (self.config.columns === true || self.config.columns == undefined) { - keys = Object.keys(colDef); - keys.push("width"); - } else { - 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); - }); - - return definitions; -}; - -// read peristence information from storage -Persistence.prototype.readers = { - local: function local(id, type) { - var data = localStorage.getItem(id + "-" + type); - - return data ? JSON.parse(data) : false; - }, - cookie: function cookie(id, type) { - var cookie = document.cookie, - key = id + "-" + type, - cookiePos = cookie.indexOf(key + "="), - end, - data; - - //if cookie exists, decode and load column data into tabulator - if (cookiePos > -1) { - cookie = cookie.substr(cookiePos); - - end = cookie.indexOf(";"); - - if (end > -1) { - cookie = cookie.substr(0, end); - } - - data = cookie.replace(key + "=", ""); - } - - return data ? JSON.parse(data) : false; - } -}; - -//write persistence information to storage -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() + 10000); - - document.cookie = id + "-" + type + "=" + JSON.stringify(data) + "; expires=" + expireDate.toUTCString(); - } -}; - -Tabulator.prototype.registerModule("persistence", Persistence); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/persistence.min.js b/website/appphp/static/vendors/tabulator/js/modules/persistence.min.js deleted file mode 100644 index 8d87ab39..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/persistence.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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/appphp/static/vendors/tabulator/js/modules/print.js b/website/appphp/static/vendors/tabulator/js/modules/print.js deleted file mode 100644 index 940f1a99..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/print.js +++ /dev/null @@ -1,96 +0,0 @@ -/* Tabulator v4.7.0 (c) Oliver Folkerd */ - -var Print = function Print(table) { - this.table = table; //hold Tabulator object - this.element = false; - this.manualBlock = false; -}; - -Print.prototype.initialize = function () { - window.addEventListener("beforeprint", this.replaceTable.bind(this)); - window.addEventListener("afterprint", this.cleanup.bind(this)); -}; - -Print.prototype.replaceTable = function () { - if (!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"); - - if (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(typeof config != "undefined" ? config : this.table.options.printConfig, typeof style != "undefined" ? style : this.table.options.printStyled, visible, "print"), - headerContent, - footerContent; - - this.manualBlock = true; - - this.element = document.createElement("div"); - this.element.classList.add("tabulator-print-fullscreen"); - - if (this.table.options.printHeader) { - headerEl.classList.add("tabulator-print-header"); - - headerContent = typeof this.table.options.printHeader == "function" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader; - - if (typeof headerContent == "string") { - headerEl.innerHTML = headerContent; - } else { - headerEl.appendChild(headerContent); - } - - this.element.appendChild(headerEl); - } - - this.element.appendChild(tableEl); - - if (this.table.options.printFooter) { - footerEl.classList.add("tabulator-print-footer"); - - footerContent = typeof this.table.options.printFooter == "function" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter; - - if (typeof footerContent == "string") { - footerEl.innerHTML = footerContent; - } else { - footerEl.appendChild(footerContent); - } - - this.element.appendChild(footerEl); - } - - document.body.classList.add("tabulator-print-fullscreen-hide"); - document.body.appendChild(this.element); - - if (this.table.options.printFormatter) { - this.table.options.printFormatter(this.element, tableEl); - } - - window.print(); - - this.cleanup(); - - window.scrollTo(scrollX, scrollY); - - this.manualBlock = false; -}; - -Tabulator.prototype.registerModule("print", Print); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/print.min.js b/website/appphp/static/vendors/tabulator/js/modules/print.min.js deleted file mode 100644 index b46279c3..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/print.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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/appphp/static/vendors/tabulator/js/modules/reactive_data.js b/website/appphp/static/vendors/tabulator/js/modules/reactive_data.js deleted file mode 100644 index eb739714..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/reactive_data.js +++ /dev/null @@ -1,235 +0,0 @@ -/* Tabulator v4.7.0 (c) Oliver Folkerd */ - -var ReactiveData = function ReactiveData(table) { - this.table = table; //hold Tabulator object - this.data = false; - this.blocked = false; //block reactivity while performing update - this.origFuncs = {}; // hold original data array functions to allow replacement after data is done with - this.currentVersion = 0; -}; - -ReactiveData.prototype.watchData = function (data) { - var self = this, - pushFunc, - version; - - this.currentVersion++; - - version = this.currentVersion; - - self.unwatchData(); - - self.data = data; - - //override array push function - self.origFuncs.push = data.push; - - Object.defineProperty(self.data, "push", { - enumerable: false, - configurable: true, - value: function value() { - var args = Array.from(arguments); - - if (!self.blocked && version === self.currentVersion) { - args.forEach(function (arg) { - self.table.rowManager.addRowActual(arg, false); - }); - } - - return self.origFuncs.push.apply(data, arguments); - } - }); - - //override array unshift function - self.origFuncs.unshift = data.unshift; - - Object.defineProperty(self.data, "unshift", { - enumerable: false, - configurable: true, - value: function value() { - var args = Array.from(arguments); - - if (!self.blocked && version === self.currentVersion) { - args.forEach(function (arg) { - self.table.rowManager.addRowActual(arg, true); - }); - } - - return self.origFuncs.unshift.apply(data, arguments); - } - }); - - //override array shift function - self.origFuncs.shift = data.shift; - - Object.defineProperty(self.data, "shift", { - enumerable: false, - configurable: true, - value: function value() { - var row; - - if (!self.blocked && version === self.currentVersion) { - if (self.data.length) { - row = self.table.rowManager.getRowFromDataObject(self.data[0]); - - if (row) { - row.deleteActual(); - } - } - } - - return self.origFuncs.shift.call(data); - } - }); - - //override array pop function - self.origFuncs.pop = data.pop; - - Object.defineProperty(self.data, "pop", { - enumerable: false, - configurable: true, - value: function value() { - var row; - if (!self.blocked && version === self.currentVersion) { - if (self.data.length) { - row = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]); - - if (row) { - row.deleteActual(); - } - } - } - return self.origFuncs.pop.call(data); - } - }); - - //override array splice function - self.origFuncs.splice = data.splice; - - Object.defineProperty(self.data, "splice", { - enumerable: false, - configurable: true, - 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) : false, - startRow; - - if (!self.blocked && version === self.currentVersion) { - - //add new rows - if (newRows) { - startRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false; - - if (startRow) { - newRows.forEach(function (rowData) { - self.table.rowManager.addRowActual(rowData, true, startRow, true); - }); - } else { - newRows = newRows.slice().reverse(); - - newRows.forEach(function (rowData) { - self.table.rowManager.addRowActual(rowData, true, false, true); - }); - } - } - - //delete removed rows - if (end !== 0) { - var oldRows = data.slice(start, typeof args[1] === "undefined" ? args[1] : start + end); - - oldRows.forEach(function (rowData, i) { - var row = self.table.rowManager.getRowFromDataObject(rowData); - - if (row) { - row.deleteActual(i !== oldRows.length - 1); - } - }); - } - - if (newRows || end !== 0) { - self.table.rowManager.reRenderInPosition(); - } - } - - return self.origFuncs.splice.apply(data, arguments); - } - }); -}; - -ReactiveData.prototype.unwatchData = function () { - if (this.data !== false) { - for (var key in this.origFuncs) { - Object.defineProperty(this.data, key, { - enumerable: true, - configurable: true, - writable: true, - value: this.origFuncs.key - }); - } - } -}; - -ReactiveData.prototype.watchRow = function (row) { - var self = this, - data = row.getData(); - - this.blocked = true; - - for (var key in data) { - this.watchKey(row, data, key); - } - - this.blocked = false; -}; - -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) { - value = newValue; - if (!self.blocked && version === self.currentVersion) { - var update = {}; - update[key] = newValue; - row.updateData(update); - } - - if (props.set) { - props.set(newValue); - } - }, - get: function get() { - - if (props.get) { - props.get(); - } - - return 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 = true; -}; - -ReactiveData.prototype.unblock = function () { - this.blocked = false; -}; - -Tabulator.prototype.registerModule("reactiveData", ReactiveData); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/reactive_data.min.js b/website/appphp/static/vendors/tabulator/js/modules/reactive_data.min.js deleted file mode 100644 index c5dc0474..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/reactive_data.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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/appphp/static/vendors/tabulator/js/modules/resize_columns.js b/website/appphp/static/vendors/tabulator/js/modules/resize_columns.js deleted file mode 100644 index 753c02b9..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/resize_columns.js +++ /dev/null @@ -1,163 +0,0 @@ -/* Tabulator v4.7.0 (c) Oliver Folkerd */ - -var ResizeColumns = function ResizeColumns(table) { - this.table = table; //hold Tabulator object - this.startColumn = false; - this.startX = false; - this.startWidth = false; - this.handle = null; - this.prevHandle = null; -}; - -ResizeColumns.prototype.initializeColumn = function (type, column, element) { - var self = this, - variableHeight = false, - mode = this.table.options.resizableColumns; - - //set column resize mode - if (type === "header") { - variableHeight = column.definition.formatter == "textarea" || column.definition.variableHeight; - column.modules.resize = { variableHeight: variableHeight }; - } - - if (mode === true || 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(); - - if (nearestColumn && self._checkResizability(nearestColumn)) { - self.startColumn = column; - self._mouseDown(e, nearestColumn, handle); - } - }; - - handle.addEventListener("mousedown", handleDown); - handle.addEventListener("touchstart", handleDown, { passive: true }); - - //reszie column on double click - handle.addEventListener("dblclick", function (e) { - var col = column.getLastColumn(); - - if (col && self._checkResizability(col)) { - e.stopPropagation(); - col.reinitializeWidth(true); - } - }); - - prevHandle.addEventListener("click", function (e) { - e.stopPropagation(); - }); - - var prevHandleDown = function prevHandleDown(e) { - var nearestColumn, colIndex, prevColumn; - - nearestColumn = column.getFirstColumn(); - - if (nearestColumn) { - colIndex = self.table.columnManager.findColumnIndex(nearestColumn); - prevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false; - - if (prevColumn && self._checkResizability(prevColumn)) { - self.startColumn = column; - self._mouseDown(e, prevColumn, prevHandle); - } - } - }; - - prevHandle.addEventListener("mousedown", prevHandleDown); - prevHandle.addEventListener("touchstart", prevHandleDown, { passive: true }); - - //resize column on double click - prevHandle.addEventListener("dblclick", function (e) { - var nearestColumn, colIndex, prevColumn; - - nearestColumn = column.getFirstColumn(); - - if (nearestColumn) { - colIndex = self.table.columnManager.findColumnIndex(nearestColumn); - prevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false; - - if (prevColumn && self._checkResizability(prevColumn)) { - e.stopPropagation(); - prevColumn.reinitializeWidth(true); - } - } - }); - - element.appendChild(handle); - element.appendChild(prevHandle); - } -}; - -ResizeColumns.prototype._checkResizability = function (column) { - return typeof column.definition.resizable != "undefined" ? column.definition.resizable : this.table.options.resizableColumns; -}; - -ResizeColumns.prototype._mouseDown = function (e, column, handle) { - var self = this; - - self.table.element.classList.add("tabulator-block-select"); - - function mouseMove(e) { - // self.table.columnManager.tempScrollBlock(); - - 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(); - } - } - - function mouseUp(e) { - - //block editor from taking action while resizing is taking place - if (self.startColumn.modules.edit) { - self.startColumn.modules.edit.blocked = false; - } - - if (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"); - - if (self.table.options.persistence && self.table.modExists("persistence", true) && self.table.modules.persistence.config.columns) { - self.table.modules.persistence.save("columns"); - } - - self.table.options.columnResized.call(self.table, column.getComponent()); - } - - e.stopPropagation(); //prevent resize from interfereing with movable columns - - //block editor from taking action while resizing is taking place - if (self.startColumn.modules.edit) { - self.startColumn.modules.edit.blocked = true; - } - - self.startX = typeof e.screenX === "undefined" ? 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: true }); - handle.addEventListener("touchend", mouseUp); -}; - -Tabulator.prototype.registerModule("resizeColumns", ResizeColumns); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/resize_columns.min.js b/website/appphp/static/vendors/tabulator/js/modules/resize_columns.min.js deleted file mode 100644 index 7ae0e382..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/resize_columns.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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/appphp/static/vendors/tabulator/js/modules/resize_rows.js b/website/appphp/static/vendors/tabulator/js/modules/resize_rows.js deleted file mode 100644 index 8d39fcd9..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/resize_rows.js +++ /dev/null @@ -1,98 +0,0 @@ -/* Tabulator v4.7.0 (c) Oliver Folkerd */ - -var ResizeRows = function ResizeRows(table) { - this.table = table; //hold Tabulator object - this.startColumn = false; - this.startY = false; - this.startHeight = false; - this.handle = null; - this.prevHandle = null; -}; - -ResizeRows.prototype.initializeRow = function (row) { - var self = this, - rowEl = row.getElement(); - - var 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: true }); - - prevHandle.addEventListener("click", function (e) { - e.stopPropagation(); - }); - - var prevHandleDown = function prevHandleDown(e) { - var prevRow = self.table.rowManager.prevDisplayRow(row); - - if (prevRow) { - self.startRow = prevRow; - self._mouseDown(e, prevRow, prevHandle); - } - }; - - prevHandle.addEventListener("mousedown", prevHandleDown); - prevHandle.addEventListener("touchstart", prevHandleDown, { passive: true }); - - rowEl.appendChild(handle); - rowEl.appendChild(prevHandle); -}; - -ResizeRows.prototype._mouseDown = function (e, row, handle) { - var self = this; - - self.table.element.classList.add("tabulator-block-select"); - - function mouseMove(e) { - row.setHeight(self.startHeight + ((typeof e.screenY === "undefined" ? e.touches[0].screenY : e.screenY) - self.startY)); - } - - function mouseUp(e) { - - // //block editor from taking action while resizing is taking place - // if(self.startColumn.modules.edit){ - // self.startColumn.modules.edit.blocked = false; - // } - - 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()); - } - - e.stopPropagation(); //prevent resize from interfereing with movable columns - - //block editor from taking action while resizing is taking place - // if(self.startColumn.modules.edit){ - // self.startColumn.modules.edit.blocked = true; - // } - - self.startY = typeof e.screenY === "undefined" ? 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: true }); - handle.addEventListener("touchend", mouseUp); -}; - -Tabulator.prototype.registerModule("resizeRows", ResizeRows); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/resize_rows.min.js b/website/appphp/static/vendors/tabulator/js/modules/resize_rows.min.js deleted file mode 100644 index fb0db00f..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/resize_rows.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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/appphp/static/vendors/tabulator/js/modules/resize_table.js b/website/appphp/static/vendors/tabulator/js/modules/resize_table.js deleted file mode 100644 index 12866413..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/resize_table.js +++ /dev/null @@ -1,107 +0,0 @@ -/* Tabulator v4.7.0 (c) Oliver Folkerd */ - -var ResizeTable = function ResizeTable(table) { - this.table = table; //hold Tabulator object - this.binding = false; - this.observer = false; - this.containerObserver = false; - - this.tableHeight = 0; - this.tableWidth = 0; - this.containerHeight = 0; - this.containerWidth = 0; - - this.autoResize = false; -}; - -ResizeTable.prototype.initialize = function (row) { - var _this = this; - - var table = this.table, - tableStyle; - - this.tableHeight = table.element.clientHeight; - this.tableWidth = table.element.clientWidth; - - if (table.element.parentNode) { - this.containerHeight = table.element.parentNode.clientHeight; - this.containerWidth = table.element.parentNode.clientWidth; - } - - if (typeof ResizeObserver !== "undefined" && table.rowManager.getRenderMode() === "virtual") { - - this.autoResize = true; - - this.observer = new ResizeObserver(function (entry) { - if (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) { - - var nodeHeight = Math.floor(entry[0].contentRect.height); - var nodeWidth = Math.floor(entry[0].contentRect.width); - - if (_this.tableHeight != nodeHeight || _this.tableWidth != nodeWidth) { - _this.tableHeight = nodeHeight; - _this.tableWidth = nodeWidth; - - if (table.element.parentNode) { - _this.containerHeight = table.element.parentNode.clientHeight; - _this.containerWidth = table.element.parentNode.clientWidth; - } - - table.redraw(); - } - } - }); - - this.observer.observe(table.element); - - tableStyle = window.getComputedStyle(table.element); - - if (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); - var nodeWidth = Math.floor(entry[0].contentRect.width); - - if (_this.containerHeight != nodeHeight || _this.containerWidth != nodeWidth) { - _this.containerHeight = nodeHeight; - _this.containerWidth = nodeWidth; - _this.tableHeight = table.element.clientHeight; - _this.tableWidth = table.element.clientWidth; - - table.redraw(); - } - - table.redraw(); - } - }); - - this.containerObserver.observe(this.table.element.parentNode); - } - } else { - this.binding = function () { - if (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) { - table.redraw(); - } - }; - - window.addEventListener("resize", this.binding); - } -}; - -ResizeTable.prototype.clearBindings = function (row) { - if (this.binding) { - window.removeEventListener("resize", this.binding); - } - - if (this.observer) { - this.observer.unobserve(this.table.element); - } - - if (this.containerObserver) { - this.containerObserver.unobserve(this.table.element.parentNode); - } -}; - -Tabulator.prototype.registerModule("resizeTable", ResizeTable); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/resize_table.min.js b/website/appphp/static/vendors/tabulator/js/modules/resize_table.min.js deleted file mode 100644 index e992d75d..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/resize_table.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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/appphp/static/vendors/tabulator/js/modules/responsive_layout.js b/website/appphp/static/vendors/tabulator/js/modules/responsive_layout.js deleted file mode 100644 index 329f2a64..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/responsive_layout.js +++ /dev/null @@ -1,301 +0,0 @@ -/* Tabulator v4.7.0 (c) Oliver Folkerd */ - -var ResponsiveLayout = function ResponsiveLayout(table) { - this.table = table; //hold Tabulator object - this.columns = []; - this.hiddenColumns = []; - this.mode = ""; - this.index = 0; - this.collapseFormatter = []; - this.collapseStartOpen = true; - this.collapseHandleColumn = false; -}; - -//generate resposive columns list -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 = []; - - //detemine level of responsivity for each column - this.table.columnManager.columnsByIndex.forEach(function (column, i) { - if (column.modules.responsive) { - if (column.modules.responsive.order && column.modules.responsive.visible) { - column.modules.responsive.index = i; - columns.push(column); - - if (!column.visible && self.mode === "collapse") { - self.hiddenColumns.push(column); - } - } - } - }); - - //sort list by responsivity - columns = columns.reverse(); - columns = columns.sort(function (a, b) { - var diff = b.modules.responsive.order - a.modules.responsive.order; - return diff || b.modules.responsive.index - a.modules.responsive.index; - }); - - this.columns = columns; - - if (this.mode === "collapse") { - this.generateCollapsedContent(); - } - - //assign collapse column - for (var _iterator = this.table.columnManager.columnsByIndex, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var col = _ref; - - if (col.definition.formatter == "responsiveCollapse") { - this.collapseHandleColumn = col; - break; - } - } - - if (this.collapseHandleColumn) { - if (this.hiddenColumns.length) { - this.collapseHandleColumn.show(); - } else { - this.collapseHandleColumn.hide(); - } - } -}; - -//define layout information -ResponsiveLayout.prototype.initializeColumn = function (column) { - var def = column.getDefinition(); - - column.modules.responsive = { order: typeof def.responsive === "undefined" ? 1 : def.responsive, visible: def.visible === false ? false : true }; -}; - -ResponsiveLayout.prototype.initializeRow = function (row) { - var el; - - if (row.type !== "calc") { - el = document.createElement("div"); - el.classList.add("tabulator-responsive-collapse"); - - row.modules.responsiveLayout = { - element: el, - open: this.collapseStartOpen - }; - - if (!this.collapseStartOpen) { - el.style.display = 'none'; - } - } -}; - -ResponsiveLayout.prototype.layoutRow = function (row) { - var rowEl = row.getElement(); - - if (row.modules.responsiveLayout) { - rowEl.appendChild(row.modules.responsiveLayout.element); - this.generateCollapsedRowContent(row); - } -}; - -//update column visibility -ResponsiveLayout.prototype.updateColumnVisibility = function (column, visible) { - var index; - if (column.modules.responsive) { - column.modules.responsive.visible = visible; - this.initialize(); - } -}; - -ResponsiveLayout.prototype.hideColumn = function (column) { - var colCount = this.hiddenColumns.length; - - column.hide(false, true); - - if (this.mode === "collapse") { - this.hiddenColumns.unshift(column); - this.generateCollapsedContent(); - - if (this.collapseHandleColumn && !colCount) { - this.collapseHandleColumn.show(); - } - } -}; - -ResponsiveLayout.prototype.showColumn = function (column) { - var index; - - column.show(false, true); - //set column width to prevent calculation loops on uninitialized columns - column.setWidth(column.getWidth()); - - if (this.mode === "collapse") { - index = this.hiddenColumns.indexOf(column); - - if (index > -1) { - this.hiddenColumns.splice(index, 1); - } - - this.generateCollapsedContent(); - - if (this.collapseHandleColumn && !this.hiddenColumns.length) { - this.collapseHandleColumn.hide(); - } - } -}; - -//redraw columns to fit space -ResponsiveLayout.prototype.update = function () { - var self = this, - working = true; - - while (working) { - - var width = self.table.modules.layout.getMode() == "fitColumns" ? self.table.columnManager.getFlexBaseWidth() : self.table.columnManager.getWidth(); - - var diff = (self.table.options.headerVisible ? self.table.columnManager.element.clientWidth : self.table.element.clientWidth) - width; - - if (diff < 0) { - //table is too wide - var column = self.columns[self.index]; - - if (column) { - self.hideColumn(column); - self.index++; - } else { - working = false; - } - } else { - - //table has spare space - var _column = self.columns[self.index - 1]; - - if (_column) { - if (diff > 0) { - if (diff >= _column.getWidth()) { - self.showColumn(_column); - self.index--; - } else { - working = false; - } - } else { - working = false; - } - } else { - working = false; - } - } - - if (!self.table.rowManager.activeRowsCount) { - self.table.rowManager.renderEmptyScroll(); - } - } -}; - -ResponsiveLayout.prototype.generateCollapsedContent = function () { - var self = this, - rows = this.table.rowManager.getDisplayRows(); - - rows.forEach(function (row) { - self.generateCollapsedRowContent(row); - }); -}; - -ResponsiveLayout.prototype.generateCollapsedRowContent = function (row) { - var el, contents; - - if (row.modules.responsiveLayout) { - el = row.modules.responsiveLayout.element; - - while (el.firstChild) { - el.removeChild(el.firstChild); - }contents = this.collapseFormatter(this.generateCollapsedRowData(row)); - if (contents) { - el.appendChild(contents); - } - } -}; - -ResponsiveLayout.prototype.generateCollapsedRowData = function (row) { - var self = this, - data = row.getData(), - output = [], - mockCellComponent; - - this.hiddenColumns.forEach(function (column) { - var value = column.getFieldValue(data); - - if (column.definition.title && column.field) { - if (column.modules.format && self.table.options.responsiveLayoutCollapseUseFormatters) { - - mockCellComponent = { - value: false, - 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) - }); - } else { - output.push({ - title: column.definition.title, - value: value - }); - } - } - }); - - return output; -}; - -ResponsiveLayout.prototype.formatCollapsedData = function (data) { - var list = document.createElement("table"), - listContents = ""; - - data.forEach(function (item) { - var div = document.createElement("div"); - - if (item.value instanceof Node) { - div.appendChild(item.value); - item.value = div.innerHTML; - } - - listContents += "" + item.title + "" + item.value + ""; - }); - - list.innerHTML = listContents; - - return Object.keys(data).length ? list : ""; -}; - -Tabulator.prototype.registerModule("responsiveLayout", ResponsiveLayout); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/responsive_layout.min.js b/website/appphp/static/vendors/tabulator/js/modules/responsive_layout.min.js deleted file mode 100644 index 4ef65388..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/responsive_layout.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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/appphp/static/vendors/tabulator/js/modules/select_row.js b/website/appphp/static/vendors/tabulator/js/modules/select_row.js deleted file mode 100644 index 2869429f..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/select_row.js +++ /dev/null @@ -1,417 +0,0 @@ -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.7.0 (c) Oliver Folkerd */ - -var SelectRow = function SelectRow(table) { - this.table = table; //hold Tabulator object - this.selecting = false; //flag selecting in progress - this.lastClickedRow = false; //last clicked row - this.selectPrev = []; //hold previously selected element for drag drop selection - this.selectedRows = []; //hold selected rows - this.headerCheckboxElement = null; // hold header select element -}; - -SelectRow.prototype.clearSelectionData = function (silent) { - this.selecting = false; - this.lastClickedRow = false; - this.selectPrev = []; - this.selectedRows = []; - - if (!silent) { - this._rowSelectionChanged(); - } -}; - -SelectRow.prototype.initializeRow = function (row) { - var self = this, - element = row.getElement(); - - // trigger end of row selection - var endSelect = function endSelect() { - - setTimeout(function () { - self.selecting = false; - }, 50); - - document.body.removeEventListener("mouseup", endSelect); - }; - - row.modules.select = { selected: false }; - - //set row selection class - if (self.table.options.selectableCheck.call(this.table, row.getComponent())) { - element.classList.add("tabulator-selectable"); - element.classList.remove("tabulator-unselectable"); - - if (self.table.options.selectable && self.table.options.selectable != "highlight") { - if (self.table.options.selectableRangeMode === "click") { - element.addEventListener("click", function (e) { - if (e.shiftKey) { - self.table._clearSelection(); - self.lastClickedRow = self.lastClickedRow || row; - - var lastClickedRowIdx = self.table.rowManager.getDisplayRowIndex(self.lastClickedRow); - var rowIdx = self.table.rowManager.getDisplayRowIndex(row); - - var fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx; - var toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx; - - var rows = self.table.rowManager.getDisplayRows().slice(0); - var toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1); - - if (e.ctrlKey || e.metaKey) { - toggledRows.forEach(function (toggledRow) { - if (toggledRow !== self.lastClickedRow) { - - if (self.table.options.selectable !== true && !self.isRowSelected(row)) { - if (self.selectedRows.length < self.table.options.selectable) { - self.toggleRow(toggledRow); - } - } else { - self.toggleRow(toggledRow); - } - } - }); - self.lastClickedRow = row; - } else { - self.deselectRows(undefined, true); - - if (self.table.options.selectable !== true) { - if (toggledRows.length > self.table.options.selectable) { - toggledRows = toggledRows.slice(0, self.table.options.selectable); - } - } - - self.selectRows(toggledRows); - } - self.table._clearSelection(); - } else if (e.ctrlKey || e.metaKey) { - self.toggleRow(row); - self.lastClickedRow = row; - } else { - self.deselectRows(undefined, true); - self.selectRows(row); - self.lastClickedRow = row; - } - }); - } else { - element.addEventListener("click", function (e) { - if (!self.table.modExists("edit") || !self.table.modules.edit.getCurrentCell()) { - self.table._clearSelection(); - } - - if (!self.selecting) { - self.toggleRow(row); - } - }); - - element.addEventListener("mousedown", function (e) { - if (e.shiftKey) { - self.table._clearSelection(); - - self.selecting = true; - - self.selectPrev = []; - - document.body.addEventListener("mouseup", endSelect); - document.body.addEventListener("keyup", endSelect); - - self.toggleRow(row); - - return false; - } - }); - - element.addEventListener("mouseenter", function (e) { - if (self.selecting) { - self.table._clearSelection(); - self.toggleRow(row); - - if (self.selectPrev[1] == row) { - self.toggleRow(self.selectPrev[0]); - } - } - }); - - element.addEventListener("mouseout", function (e) { - if (self.selecting) { - self.table._clearSelection(); - self.selectPrev.unshift(row); - } - }); - } - } - } else { - element.classList.add("tabulator-unselectable"); - element.classList.remove("tabulator-selectable"); - } -}; - -//toggle row selection -SelectRow.prototype.toggleRow = function (row) { - if (this.table.options.selectableCheck.call(this.table, row.getComponent())) { - if (row.modules.select && row.modules.select.selected) { - this._deselectRow(row); - } else { - this._selectRow(row); - } - } -}; - -//select a number of rows -SelectRow.prototype.selectRows = function (rows) { - var _this = this; - - var rowMatch; - - switch (typeof rows === "undefined" ? "undefined" : _typeof(rows)) { - case "undefined": - this.table.rowManager.rows.forEach(function (row) { - _this._selectRow(row, true, true); - }); - - this._rowSelectionChanged(); - break; - - case "string": - - rowMatch = this.table.rowManager.findRow(rows); - - if (rowMatch) { - this._selectRow(rowMatch, true, true); - } else { - this.table.rowManager.getRows(rows).forEach(function (row) { - _this._selectRow(row, true, true); - }); - } - - this._rowSelectionChanged(); - break; - - default: - if (Array.isArray(rows)) { - rows.forEach(function (row) { - _this._selectRow(row, true, true); - }); - - this._rowSelectionChanged(); - } else { - this._selectRow(rows, false, true); - } - break; - } -}; - -//select an individual row -SelectRow.prototype._selectRow = function (rowInfo, silent, force) { - var index; - - //handle max row count - if (!isNaN(this.table.options.selectable) && this.table.options.selectable !== true && !force) { - if (this.selectedRows.length >= this.table.options.selectable) { - if (this.table.options.selectableRollingSelection) { - this._deselectRow(this.selectedRows[0]); - } else { - return false; - } - } - } - - var row = this.table.rowManager.findRow(rowInfo); - - if (row) { - if (this.selectedRows.indexOf(row) == -1) { - if (!row.modules.select) { - row.modules.select = {}; - } - - row.modules.select.selected = true; - if (row.modules.select.checkboxEl) { - row.modules.select.checkboxEl.checked = true; - } - row.getElement().classList.add("tabulator-selected"); - - this.selectedRows.push(row); - - if (this.table.options.dataTreeSelectPropagate) { - this.childRowSelection(row, true); - } - - if (!silent) { - this.table.options.rowSelected.call(this.table, row.getComponent()); - } - - this._rowSelectionChanged(silent); - } - } else { - if (!silent) { - console.warn("Selection Error - No such row found, ignoring selection:" + rowInfo); - } - } -}; - -SelectRow.prototype.isRowSelected = function (row) { - return this.selectedRows.indexOf(row) !== -1; -}; - -//deselect a number of rows -SelectRow.prototype.deselectRows = function (rows, silent) { - var self = this, - rowCount; - - if (typeof rows == "undefined") { - - rowCount = self.selectedRows.length; - - for (var i = 0; i < rowCount; i++) { - self._deselectRow(self.selectedRows[0], true); - } - - self._rowSelectionChanged(silent); - } else { - if (Array.isArray(rows)) { - rows.forEach(function (row) { - self._deselectRow(row, true); - }); - - self._rowSelectionChanged(silent); - } else { - self._deselectRow(rows, silent); - } - } -}; - -//deselect an individual row -SelectRow.prototype._deselectRow = function (rowInfo, silent) { - var self = this, - row = self.table.rowManager.findRow(rowInfo), - index; - - if (row) { - index = self.selectedRows.findIndex(function (selectedRow) { - return selectedRow == row; - }); - - if (index > -1) { - - if (!row.modules.select) { - row.modules.select = {}; - } - - row.modules.select.selected = false; - if (row.modules.select.checkboxEl) { - row.modules.select.checkboxEl.checked = false; - } - row.getElement().classList.remove("tabulator-selected"); - self.selectedRows.splice(index, 1); - - if (this.table.options.dataTreeSelectPropagate) { - this.childRowSelection(row, false); - } - - if (!silent) { - self.table.options.rowDeselected.call(this.table, row.getComponent()); - } - - self._rowSelectionChanged(silent); - } - } else { - if (!silent) { - console.warn("Deselection Error - No such row found, ignoring selection:" + rowInfo); - } - } -}; - -SelectRow.prototype.getSelectedData = function () { - var data = []; - - this.selectedRows.forEach(function (row) { - data.push(row.getData()); - }); - - return data; -}; - -SelectRow.prototype.getSelectedRows = function () { - - var rows = []; - - this.selectedRows.forEach(function (row) { - rows.push(row.getComponent()); - }); - - return rows; -}; - -SelectRow.prototype._rowSelectionChanged = function (silent) { - if (this.headerCheckboxElement) { - if (this.selectedRows.length === 0) { - this.headerCheckboxElement.checked = false; - this.headerCheckboxElement.indeterminate = false; - } else if (this.table.rowManager.rows.length === this.selectedRows.length) { - this.headerCheckboxElement.checked = true; - this.headerCheckboxElement.indeterminate = false; - } else { - this.headerCheckboxElement.indeterminate = true; - this.headerCheckboxElement.checked = false; - } - } - - if (!silent) { - this.table.options.rowSelectionChanged.call(this.table, this.getSelectedData(), this.getSelectedRows()); - } -}; - -SelectRow.prototype.registerRowSelectCheckbox = function (row, element) { - if (!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 _iterator = children, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var child = _ref; - - this._selectRow(child, true); - } - } else { - for (var _iterator2 = children, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) { - var _ref2; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref2 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref2 = _i2.value; - } - - var _child = _ref2; - - this._deselectRow(_child, true); - } - } -}; - -Tabulator.prototype.registerModule("selectRow", SelectRow); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/select_row.min.js b/website/appphp/static/vendors/tabulator/js/modules/select_row.min.js deleted file mode 100644 index 488d7e6b..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/select_row.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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/appphp/static/vendors/tabulator/js/modules/sort.js b/website/appphp/static/vendors/tabulator/js/modules/sort.js deleted file mode 100644 index 2422968d..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/sort.js +++ /dev/null @@ -1,571 +0,0 @@ -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.7.0 (c) Oliver Folkerd */ - -var Sort = function Sort(table) { - this.table = table; //hold Tabulator object - this.sortList = []; //holder current sort - this.changed = false; //has the sort changed since last render -}; - -//initialize column header for sorting -Sort.prototype.initializeColumn = function (column, content) { - var self = this, - sorter = false, - colEl, - arrowEl; - - switch (_typeof(column.definition.sorter)) { - case "string": - if (self.sorters[column.definition.sorter]) { - sorter = self.sorters[column.definition.sorter]; - } else { - console.warn("Sort Error - No such sorter found: ", column.definition.sorter); - } - break; - - case "function": - sorter = column.definition.sorter; - break; - } - - column.modules.sort = { - sorter: sorter, dir: "none", - params: column.definition.sorterParams || {}, - startingDir: column.definition.headerSortStartingDir || "asc", - tristate: typeof column.definition.headerSortTristate !== "undefined" ? column.definition.headerSortTristate : this.table.options.headerSortTristate - }; - - if (typeof column.definition.headerSort === "undefined" ? this.table.options.headerSort !== false : column.definition.headerSort !== false) { - - colEl = column.getElement(); - - colEl.classList.add("tabulator-sortable"); - - arrowEl = document.createElement("div"); - arrowEl.classList.add("tabulator-arrow"); - //create sorter arrow - content.appendChild(arrowEl); - - //sort on click - colEl.addEventListener("click", function (e) { - var dir = "", - sorters = [], - match = false; - - if (column.modules.sort) { - if (column.modules.sort.tristate) { - if (column.modules.sort.dir == "none") { - dir = column.modules.sort.startingDir; - } else { - if (column.modules.sort.dir == column.modules.sort.startingDir) { - dir = column.modules.sort.dir == "asc" ? "desc" : "asc"; - } else { - dir = "none"; - } - } - } else { - switch (column.modules.sort.dir) { - case "asc": - dir = "desc"; - break; - - case "desc": - dir = "asc"; - break; - - default: - dir = column.modules.sort.startingDir; - } - } - - if (self.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) { - sorters = self.getSort(); - - match = sorters.findIndex(function (sorter) { - return sorter.field === column.getField(); - }); - - if (match > -1) { - sorters[match].dir = dir; - - if (match != sorters.length - 1) { - match = sorters.splice(match, 1)[0]; - if (dir != "none") { - sorters.push(match); - } - } - } else { - if (dir != "none") { - sorters.push({ column: column, dir: dir }); - } - } - - //add to existing sort - self.setSort(sorters); - } else { - if (dir == "none") { - self.clear(); - } else { - //sort by column only - self.setSort(column, dir); - } - } - - self.table.rowManager.sorterRefresh(!self.sortList.length); - } - }); - } -}; - -//check if the sorters have changed since last use -Sort.prototype.hasChanged = function () { - var changed = this.changed; - this.changed = false; - return changed; -}; - -//return current sorters -Sort.prototype.getSort = function () { - var self = this, - sorters = []; - - self.sortList.forEach(function (item) { - if (item.column) { - sorters.push({ column: item.column.getComponent(), field: item.column.getField(), dir: item.dir }); - } - }); - - return sorters; -}; - -//change sort list and trigger sort -Sort.prototype.setSort = function (sortList, dir) { - var self = this, - newSortList = []; - - if (!Array.isArray(sortList)) { - sortList = [{ column: sortList, dir: dir }]; - } - - sortList.forEach(function (item) { - var column; - - column = self.table.columnManager.findColumn(item.column); - - if (column) { - item.column = column; - newSortList.push(item); - self.changed = true; - } else { - console.warn("Sort Warning - Sort field does not exist and is being ignored: ", item.column); - } - }); - - self.sortList = newSortList; - - if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.sort) { - this.table.modules.persistence.save("sort"); - } -}; - -//clear sorters -Sort.prototype.clear = function () { - this.setSort([]); -}; - -//find appropriate sorter for column -Sort.prototype.findSorter = function (column) { - var row = this.table.rowManager.activeRows[0], - sorter = "string", - field, - value; - - if (row) { - row = row.getData(); - field = column.getField(); - - if (field) { - - value = column.getFieldValue(row); - - switch (typeof value === "undefined" ? "undefined" : _typeof(value)) { - case "undefined": - sorter = "string"; - break; - - case "boolean": - sorter = "boolean"; - break; - - default: - if (!isNaN(value) && value !== "") { - sorter = "number"; - } else { - if (value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)) { - sorter = "alphanum"; - } - } - break; - } - } - } - - return this.sorters[sorter]; -}; - -//work through sort list sorting data -Sort.prototype.sort = function (data) { - var self = this, - sortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList, - sortListActual = [], - rowComponents = [], - lastSort; - - if (self.table.options.dataSorting) { - self.table.options.dataSorting.call(self.table, self.getSort()); - } - - self.clearColumnHeaders(); - - if (!self.table.options.ajaxSorting) { - - //build list of valid sorters and trigger column specific callbacks before sort begins - sortList.forEach(function (item, i) { - var sortObj = item.column.modules.sort; - - if (item.column && sortObj) { - - //if no sorter has been defined, take a guess - if (!sortObj.sorter) { - sortObj.sorter = self.findSorter(item.column); - } - - item.params = typeof sortObj.params === "function" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params; - - sortListActual.push(item); - } - - self.setColumnHeader(item.column, item.dir); - }); - - //sort data - if (sortListActual.length) { - self._sortItems(data, sortListActual); - } - } else { - sortList.forEach(function (item, i) { - self.setColumnHeader(item.column, item.dir); - }); - } - - if (self.table.options.dataSorted) { - data.forEach(function (row) { - rowComponents.push(row.getComponent()); - }); - - self.table.options.dataSorted.call(self.table, self.getSort(), rowComponents); - } -}; - -//clear sort arrows on columns -Sort.prototype.clearColumnHeaders = function () { - this.table.columnManager.getRealColumns().forEach(function (column) { - if (column.modules.sort) { - column.modules.sort.dir = "none"; - column.getElement().setAttribute("aria-sort", "none"); - } - }); -}; - -//set the column header sort direction -Sort.prototype.setColumnHeader = function (column, dir) { - column.modules.sort.dir = dir; - column.getElement().setAttribute("aria-sort", dir); -}; - -//sort each item in sort list -Sort.prototype._sortItems = function (data, sortList) { - var _this = this; - - var sorterCount = sortList.length - 1; - - data.sort(function (a, b) { - var result; - - for (var i = sorterCount; i >= 0; i--) { - var sortItem = sortList[i]; - - result = _this._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params); - - if (result !== 0) { - break; - } - } - - return result; - }); -}; - -//process individual rows for a sort function on active data -Sort.prototype._sortRow = function (a, b, column, dir, params) { - var el1Comp, el2Comp, colComp; - - //switch elements depending on search direction - var el1 = dir == "asc" ? a : b; - var el2 = dir == "asc" ? b : a; - - a = column.getFieldValue(el1.getData()); - b = column.getFieldValue(el2.getData()); - - a = typeof a !== "undefined" ? a : ""; - b = typeof b !== "undefined" ? b : ""; - - el1Comp = el1.getComponent(); - el2Comp = el2.getComponent(); - - return column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params); -}; - -//default data sorters -Sort.prototype.sorters = { - - //sort numbers - number: function number(a, b, aRow, bRow, column, dir, params) { - var alignEmptyValues = params.alignEmptyValues; - var decimal = params.decimalSeparator || "."; - var thousand = params.thousandSeparator || ","; - var emptyAlign = 0; - - a = parseFloat(String(a).split(thousand).join("").split(decimal).join(".")); - b = parseFloat(String(b).split(thousand).join("").split(decimal).join(".")); - - //handle non numeric values - if (isNaN(a)) { - emptyAlign = isNaN(b) ? 0 : -1; - } else if (isNaN(b)) { - emptyAlign = 1; - } else { - //compare valid values - return a - b; - } - - //fix empty values in position - if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") { - emptyAlign *= -1; - } - - return emptyAlign; - }, - - //sort strings - string: function string(a, b, aRow, bRow, column, dir, params) { - var alignEmptyValues = params.alignEmptyValues; - var emptyAlign = 0; - var locale; - - //handle empty values - if (!a) { - emptyAlign = !b ? 0 : -1; - } else if (!b) { - emptyAlign = 1; - } else { - //compare valid values - switch (_typeof(params.locale)) { - case "boolean": - if (params.locale) { - locale = this.table.modules.localize.getLocale(); - } - break; - case "string": - locale = params.locale; - break; - } - - return String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale); - } - - //fix empty values in position - if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") { - emptyAlign *= -1; - } - - return emptyAlign; - }, - - //sort date - date: function date(a, b, aRow, bRow, column, dir, params) { - if (!params.format) { - params.format = "DD/MM/YYYY"; - } - - return this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params); - }, - - //sort HH:mm formatted times - time: function time(a, b, aRow, bRow, column, dir, params) { - if (!params.format) { - params.format = "HH:mm"; - } - - return this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params); - }, - - //sort datetime - 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 (typeof moment != "undefined") { - a = moment(a, format); - b = moment(b, format); - - if (!a.isValid()) { - emptyAlign = !b.isValid() ? 0 : -1; - } else if (!b.isValid()) { - emptyAlign = 1; - } else { - //compare valid values - return a - b; - } - - //fix empty values in position - if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") { - emptyAlign *= -1; - } - - return emptyAlign; - } else { - console.error("Sort Error - 'datetime' sorter is dependant on moment.js"); - } - }, - - //sort booleans - boolean: function boolean(a, b, aRow, bRow, column, dir, params) { - var el1 = a === true || a === "true" || a === "True" || a === 1 ? 1 : 0; - var el2 = b === true || b === "true" || b === "True" || b === 1 ? 1 : 0; - - return el1 - el2; - }, - - //sort if element contains any data - array: function array(a, b, aRow, bRow, column, dir, params) { - var el1 = 0; - var el2 = 0; - var type = params.type || "length"; - var alignEmptyValues = params.alignEmptyValues; - var emptyAlign = 0; - - function calc(value) { - - switch (type) { - case "length": - return value.length; - break; - - case "sum": - return value.reduce(function (c, d) { - return c + d; - }); - break; - - case "max": - return Math.max.apply(null, value); - break; - - case "min": - return Math.min.apply(null, value); - break; - - case "avg": - return value.reduce(function (c, d) { - return c + d; - }) / value.length; - break; - } - } - - //handle non array values - if (!Array.isArray(a)) { - alignEmptyValues = !Array.isArray(b) ? 0 : -1; - } else if (!Array.isArray(b)) { - alignEmptyValues = 1; - } else { - - //compare valid values - el1 = a ? calc(a) : 0; - el2 = b ? calc(b) : 0; - - return el1 - el2; - } - - //fix empty values in position - if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") { - emptyAlign *= -1; - } - - return emptyAlign; - }, - - //sort if element contains any data - exists: function exists(a, b, aRow, bRow, column, dir, params) { - var el1 = typeof a == "undefined" ? 0 : 1; - var el2 = typeof b == "undefined" ? 0 : 1; - - return el1 - el2; - }, - - //sort alpha numeric strings - alphanum: function alphanum(as, bs, aRow, bRow, column, dir, params) { - var a, - b, - a1, - b1, - i = 0, - L, - rx = /(\d+)|(\D+)/g, - rd = /\d/; - var alignEmptyValues = params.alignEmptyValues; - var emptyAlign = 0; - - //handle empty values - if (!as && as !== 0) { - emptyAlign = !bs && bs !== 0 ? 0 : -1; - } else if (!bs && bs !== 0) { - emptyAlign = 1; - } else { - - if (isFinite(as) && isFinite(bs)) return as - bs; - a = String(as).toLowerCase(); - b = String(bs).toLowerCase(); - if (a === b) return 0; - if (!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1; - a = a.match(rx); - b = b.match(rx); - L = a.length > b.length ? b.length : a.length; - while (i < L) { - a1 = a[i]; - b1 = b[i++]; - if (a1 !== b1) { - if (isFinite(a1) && isFinite(b1)) { - if (a1.charAt(0) === "0") a1 = "." + a1; - if (b1.charAt(0) === "0") b1 = "." + b1; - return a1 - b1; - } else return a1 > b1 ? 1 : -1; - } - } - - return a.length > b.length; - } - - //fix empty values in position - if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") { - emptyAlign *= -1; - } - - return emptyAlign; - } -}; - -Tabulator.prototype.registerModule("sort", Sort); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/sort.min.js b/website/appphp/static/vendors/tabulator/js/modules/sort.min.js deleted file mode 100644 index d0b4cb06..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/sort.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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/appphp/static/vendors/tabulator/js/modules/validate.js b/website/appphp/static/vendors/tabulator/js/modules/validate.js deleted file mode 100644 index b5f6182d..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/validate.js +++ /dev/null @@ -1,286 +0,0 @@ -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.7.0 (c) Oliver Folkerd */ - -var Validate = function Validate(table) { - this.table = table; - this.invalidCells = []; -}; - -//validate -Validate.prototype.initializeColumn = function (column) { - var self = this, - config = [], - validator; - - if (column.definition.validator) { - - if (Array.isArray(column.definition.validator)) { - column.definition.validator.forEach(function (item) { - validator = self._extractValidator(item); - - if (validator) { - config.push(validator); - } - }); - } else { - validator = this._extractValidator(column.definition.validator); - - if (validator) { - config.push(validator); - } - } - - column.modules.validate = config.length ? config : false; - } -}; - -Validate.prototype._extractValidator = function (value) { - var type, params, pos; - - switch (typeof value === "undefined" ? "undefined" : _typeof(value)) { - case "string": - pos = value.indexOf(':'); - - if (pos > -1) { - type = value.substring(0, pos); - params = value.substring(pos + 1); - } else { - type = value; - } - - return this._buildValidator(type, params); - break; - - case "function": - return this._buildValidator(value); - break; - - case "object": - return this._buildValidator(value.type, value.parameters); - break; - } -}; - -Validate.prototype._buildValidator = function (type, params) { - - var func = typeof type == "function" ? type : this.validators[type]; - - if (!func) { - console.warn("Validator Setup Error - No matching validator found:", type); - return false; - } else { - return { - type: typeof type == "function" ? "function" : type, - func: func, - params: params - }; - } -}; - -Validate.prototype.validate = function (validators, cell, value) { - var self = this, - valid = [], - invalidIndex = this.invalidCells.indexOf(cell); - - if (validators) { - validators.forEach(function (item) { - if (!item.func.call(self, cell.getComponent(), value, item.params)) { - valid.push({ - type: item.type, - parameters: item.params - }); - } - }); - } - - valid = valid.length ? valid : true; - - if (!cell.modules.validate) { - cell.modules.validate = {}; - } - - if (valid === true) { - cell.modules.validate.invalid = false; - cell.getElement().classList.remove("tabulator-validation-fail"); - - if (invalidIndex > -1) { - this.invalidCells.splice(invalidIndex, 1); - } - } else { - cell.modules.validate.invalid = true; - - if (this.table.options.validationMode !== "manual") { - cell.getElement().classList.add("tabulator-validation-fail"); - } - - if (invalidIndex == -1) { - this.invalidCells.push(cell); - } - } - - return valid; -}; - -Validate.prototype.getInvalidCells = function () { - var output = []; - - this.invalidCells.forEach(function (cell) { - output.push(cell.getComponent()); - }); - - return output; -}; - -Validate.prototype.clearValidation = function (cell) { - var invalidIndex; - - if (cell.modules.validate && cell.modules.validate.invalid) { - - cell.element.classList.remove("tabulator-validation-fail"); - cell.modules.validate.invalid = false; - - invalidIndex = this.invalidCells.indexOf(cell); - - if (invalidIndex > -1) { - this.invalidCells.splice(invalidIndex, 1); - } - } -}; - -Validate.prototype.validators = { - - //is integer - integer: function integer(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - value = Number(value); - return typeof value === 'number' && isFinite(value) && Math.floor(value) === value; - }, - - //is float - float: function float(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - value = Number(value); - return typeof value === 'number' && isFinite(value) && value % 1 !== 0; - }, - - //must be a number - numeric: function numeric(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return !isNaN(value); - }, - - //must be a string - string: function string(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return isNaN(value); - }, - - //maximum value - max: function max(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return parseFloat(value) <= parameters; - }, - - //minimum value - min: function min(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return parseFloat(value) >= parameters; - }, - - //starts with value - starts: function starts(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return String(value).toLowerCase().startsWith(String(parameters).toLowerCase()); - }, - - //ends with value - ends: function ends(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return String(value).toLowerCase().endsWith(String(parameters).toLowerCase()); - }, - - //minimum string length - minLength: function minLength(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return String(value).length >= parameters; - }, - - //maximum string length - maxLength: function maxLength(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return String(value).length <= parameters; - }, - - //in provided value list - in: function _in(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - if (typeof parameters == "string") { - parameters = parameters.split("|"); - } - - return value === "" || parameters.indexOf(value) > -1; - }, - - //must match provided regex - regex: function regex(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - var reg = new RegExp(parameters); - - return reg.test(value); - }, - - //value must be unique in this column - unique: function unique(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - var unique = true; - - var cellData = cell.getData(); - var column = cell.getColumn()._getSelf(); - - this.table.rowManager.rows.forEach(function (row) { - var data = row.getData(); - - if (data !== cellData) { - if (value == column.getFieldValue(data)) { - unique = false; - } - } - }); - - return unique; - }, - - //must have a value - required: function required(cell, value, parameters) { - return value !== "" && value !== null && typeof value !== "undefined"; - } -}; - -Tabulator.prototype.registerModule("validate", Validate); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/modules/validate.min.js b/website/appphp/static/vendors/tabulator/js/modules/validate.min.js deleted file mode 100644 index fc189c05..00000000 --- a/website/appphp/static/vendors/tabulator/js/modules/validate.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* 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/appphp/static/vendors/tabulator/js/tabulator.js b/website/appphp/static/vendors/tabulator/js/tabulator.js deleted file mode 100644 index 256e5652..00000000 --- a/website/appphp/static/vendors/tabulator/js/tabulator.js +++ /dev/null @@ -1,24907 +0,0 @@ -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.7.0 (c) Oliver Folkerd */ - -;(function (global, factory) { - if ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object' && typeof module !== 'undefined') { - module.exports = factory(); - } else if (typeof define === 'function' && define.amd) { - define(factory); - } else { - global.Tabulator = factory(); - } -})(this, function () { - - 'use strict'; - - // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex - - - if (!Array.prototype.findIndex) { - - Object.defineProperty(Array.prototype, 'findIndex', { - - value: function value(predicate) { - - // 1. Let O be ? ToObject(this value). - - - if (this == null) { - - throw new TypeError('"this" is null or not defined'); - } - - var o = Object(this); - - // 2. Let len be ? ToLength(? Get(O, "length")). - - - var len = o.length >>> 0; - - // 3. If IsCallable(predicate) is false, throw a TypeError exception. - - - if (typeof predicate !== 'function') { - - throw new TypeError('predicate must be a function'); - } - - // 4. If thisArg was supplied, let T be thisArg; else let T be undefined. - - - var thisArg = arguments[1]; - - // 5. Let k be 0. - - - var k = 0; - - // 6. Repeat, while k < len - - - while (k < len) { - - // a. Let Pk be ! ToString(k). - - - // b. Let kValue be ? Get(O, Pk). - - - // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)). - - - // d. If testResult is true, return k. - - - var kValue = o[k]; - - if (predicate.call(thisArg, kValue, k, o)) { - - return k; - } - - // e. Increase k by 1. - - - k++; - } - - // 7. Return -1. - - - return -1; - } - - }); - } - - // https://tc39.github.io/ecma262/#sec-array.prototype.find - - - if (!Array.prototype.find) { - - Object.defineProperty(Array.prototype, 'find', { - - value: function value(predicate) { - - // 1. Let O be ? ToObject(this value). - - - if (this == null) { - - throw new TypeError('"this" is null or not defined'); - } - - var o = Object(this); - - // 2. Let len be ? ToLength(? Get(O, "length")). - - - var len = o.length >>> 0; - - // 3. If IsCallable(predicate) is false, throw a TypeError exception. - - - if (typeof predicate !== 'function') { - - throw new TypeError('predicate must be a function'); - } - - // 4. If thisArg was supplied, let T be thisArg; else let T be undefined. - - - var thisArg = arguments[1]; - - // 5. Let k be 0. - - - var k = 0; - - // 6. Repeat, while k < len - - - while (k < len) { - - // a. Let Pk be ! ToString(k). - - - // b. Let kValue be ? Get(O, Pk). - - - // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)). - - - // d. If testResult is true, return kValue. - - - var kValue = o[k]; - - if (predicate.call(thisArg, kValue, k, o)) { - - return kValue; - } - - // e. Increase k by 1. - - - k++; - } - - // 7. Return undefined. - - - return undefined; - } - - }); - } - - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill - - - if (!String.prototype.includes) { - - String.prototype.includes = function (search, start) { - - 'use strict'; - - if (search instanceof RegExp) { - - throw TypeError('first argument must not be a RegExp'); - } - - if (start === undefined) { - start = 0; - } - - return this.indexOf(search, start) !== -1; - }; - } - - // https://tc39.github.io/ecma262/#sec-array.prototype.includes - - - if (!Array.prototype.includes) { - - Object.defineProperty(Array.prototype, 'includes', { - - value: function value(searchElement, fromIndex) { - - if (this == null) { - - throw new TypeError('"this" is null or not defined'); - } - - // 1. Let O be ? ToObject(this value). - - - var o = Object(this); - - // 2. Let len be ? ToLength(? Get(O, "length")). - - - var len = o.length >>> 0; - - // 3. If len is 0, return false. - - - if (len === 0) { - - return false; - } - - // 4. Let n be ? ToInteger(fromIndex). - - - // (If fromIndex is undefined, this step produces the value 0.) - - - var n = fromIndex | 0; - - // 5. If n ≥ 0, then - - - // a. Let k be n. - - - // 6. Else n < 0, - - - // a. Let k be len + n. - - - // b. If k < 0, let k be 0. - - - var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); - - function sameValueZero(x, y) { - - return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y); - } - - // 7. Repeat, while k < len - - - while (k < len) { - - // a. Let elementK be the result of ? Get(O, ! ToString(k)). - - - // b. If SameValueZero(searchElement, elementK) is true, return true. - - - if (sameValueZero(o[k], searchElement)) { - - return true; - } - - // c. Increase k by 1. - - - k++; - } - - // 8. Return false - - - return false; - } - - }); - } - - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill - - - if (typeof Object.assign !== 'function') { - - // Must be writable: true, enumerable: false, configurable: true - - - Object.defineProperty(Object, "assign", { - - value: function assign(target, varArgs) { - // .length of function is 2 - - - 'use strict'; - - if (target === null || target === undefined) { - - throw new TypeError('Cannot convert undefined or null to object'); - } - - var to = Object(target); - - for (var index = 1; index < arguments.length; index++) { - - var nextSource = arguments[index]; - - if (nextSource !== null && nextSource !== undefined) { - - for (var nextKey in nextSource) { - - // Avoid bugs when hasOwnProperty is shadowed - - - if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { - - to[nextKey] = nextSource[nextKey]; - } - } - } - } - - return to; - }, - - writable: true, - - configurable: true - - }); - } - - var ColumnManager = function ColumnManager(table) { - - this.table = table; //hold parent table - - - this.blockHozScrollEvent = false; - - this.headersElement = this.createHeadersElement(); - - this.element = this.createHeaderElement(); //containing element - - - this.rowManager = null; //hold row manager object - - - this.columns = []; // column definition object - - - this.columnsByIndex = []; //columns by index - - - this.columnsByField = {}; //columns by field - - - this.scrollLeft = 0; - - this.element.insertBefore(this.headersElement, this.element.firstChild); - }; - - ////////////// Setup Functions ///////////////// - - - ColumnManager.prototype.createHeadersElement = function () { - - var el = document.createElement("div"); - - el.classList.add("tabulator-headers"); - - return el; - }; - - ColumnManager.prototype.createHeaderElement = function () { - - var el = document.createElement("div"); - - el.classList.add("tabulator-header"); - - if (!this.table.options.headerVisible) { - - el.classList.add("tabulator-header-hidden"); - } - - return el; - }; - - ColumnManager.prototype.initialize = function () { - - var self = this; - - //scroll body along with header - - - // self.element.addEventListener("scroll", function(e){ - - - // if(!self.blockHozScrollEvent){ - - - // self.table.rowManager.scrollHorizontal(self.element.scrollLeft); - - - // } - - - // }); - - }; - - //link to row manager - - - ColumnManager.prototype.setRowManager = function (manager) { - - this.rowManager = manager; - }; - - //return containing element - - - ColumnManager.prototype.getElement = function () { - - return this.element; - }; - - //return header containing element - - - ColumnManager.prototype.getHeadersElement = function () { - - return this.headersElement; - }; - - // ColumnManager.prototype.tempScrollBlock = function(){ - - - // clearTimeout(this.blockHozScrollEvent); - - - // this.blockHozScrollEvent = setTimeout(() => {this.blockHozScrollEvent = false;}, 50); - - - // } - - - //scroll horizontally to match table body - - - ColumnManager.prototype.scrollHorizontal = function (left) { - - var hozAdjust = 0, - scrollWidth = this.element.scrollWidth - this.table.element.clientWidth; - - // this.tempScrollBlock(); - - - this.element.scrollLeft = left; - - //adjust for vertical scrollbar moving table when present - - - if (left > scrollWidth) { - - hozAdjust = left - scrollWidth; - - this.element.style.marginLeft = -hozAdjust + "px"; - } else { - - this.element.style.marginLeft = 0; - } - - //keep frozen columns fixed in position - - - //this._calcFrozenColumnsPos(hozAdjust + 3); - - - this.scrollLeft = left; - - if (this.table.modExists("frozenColumns")) { - - this.table.modules.frozenColumns.scrollHorizontal(); - } - }; - - ///////////// Column Setup Functions ///////////// - - - ColumnManager.prototype.generateColumnsFromRowData = function (data) { - - var cols = [], - row, - sorter; - - if (data && data.length) { - - row = data[0]; - - for (var key in row) { - - var col = { - - field: key, - - title: key - - }; - - var value = row[key]; - - switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) { - - case "undefined": - - sorter = "string"; - - break; - - case "boolean": - - sorter = "boolean"; - - break; - - case "object": - - if (Array.isArray(value)) { - - sorter = "array"; - } else { - - sorter = "string"; - } - - break; - - default: - - if (!isNaN(value) && value !== "") { - - sorter = "number"; - } else { - - if (value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)) { - - sorter = "alphanum"; - } else { - - sorter = "string"; - } - } - - break; - - } - - col.sorter = sorter; - - cols.push(col); - } - - this.table.options.columns = cols; - - this.setColumns(this.table.options.columns); - } - }; - - ColumnManager.prototype.setColumns = function (cols, row) { - - var self = this; - - while (self.headersElement.firstChild) { - self.headersElement.removeChild(self.headersElement.firstChild); - }self.columns = []; - - self.columnsByIndex = []; - - self.columnsByField = {}; - - //reset frozen columns - - - if (self.table.modExists("frozenColumns")) { - - self.table.modules.frozenColumns.reset(); - } - - cols.forEach(function (def, i) { - - self._addColumn(def); - }); - - self._reIndexColumns(); - - if (self.table.options.responsiveLayout && self.table.modExists("responsiveLayout", true)) { - - self.table.modules.responsiveLayout.initialize(); - } - - self.redraw(true); - }; - - 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()); - - var nextEl = nextToColumn.getElement(); - - if (before) { - - this.columns.splice(parentIndex, 0, column); - - nextEl.parentNode.insertBefore(colEl, nextEl); - } else { - - this.columns.splice(parentIndex + 1, 0, column); - - nextEl.parentNode.insertBefore(colEl, nextEl.nextSibling); - } - } else { - - if (before) { - - this.columns.unshift(column); - - this.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild); - } else { - - this.columns.push(column); - - this.headersElement.appendChild(column.getElement()); - } - - column.columnRendered(); - } - - return column; - }; - - ColumnManager.prototype.registerColumnField = function (col) { - - if (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(); - }); - }; - - //ensure column headers take up the correct amount of space in column groups - - - ColumnManager.prototype._verticalAlignHeaders = function () { - - var self = this, - minHeight = 0; - - self.columns.forEach(function (column) { - - var height; - - column.clearVerticalAlign(); - - height = column.getHeight(); - - if (height > minHeight) { - - minHeight = height; - } - }); - - self.columns.forEach(function (column) { - - column.verticalAlign(self.table.options.columnHeaderVertAlign, minHeight); - }); - - self.rowManager.adjustTableSize(); - }; - - //////////////// Column Details ///////////////// - - - ColumnManager.prototype.findColumn = function (subject) { - - var self = this; - - if ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == "object") { - - if (subject instanceof Column) { - - //subject is column element - - - return subject; - } else if (subject instanceof ColumnComponent) { - - //subject is public column component - - - return subject._getSelf() || false; - } else if (typeof HTMLElement !== "undefined" && subject instanceof HTMLElement) { - - //subject is a HTML element of the column header - - - var match = self.columns.find(function (column) { - - return column.element === subject; - }); - - return match || false; - } - } else { - - //subject should be treated as the field name of the column - - - return this.columnsByField[subject] || false; - } - - //catch all for any other type of input - - - return false; - }; - - ColumnManager.prototype.getColumnByField = function (field) { - - return this.columnsByField[field]; - }; - - ColumnManager.prototype.getColumnsByFieldRoot = function (root) { - var _this = this; - - var matches = []; - - Object.keys(this.columnsByField).forEach(function (field) { - - var fieldRoot = field.split(".")[0]; - - if (fieldRoot === root) { - - matches.push(_this.columnsByField[field]); - } - }); - - return matches; - }; - - ColumnManager.prototype.getColumnByIndex = function (index) { - - return this.columnsByIndex[index]; - }; - - ColumnManager.prototype.getFirstVisibileColumn = function (index) { - - var index = this.columnsByIndex.findIndex(function (col) { - - return col.visible; - }); - - return index > -1 ? this.columnsByIndex[index] : false; - }; - - ColumnManager.prototype.getColumns = function () { - - return this.columns; - }; - - ColumnManager.prototype.findColumnIndex = function (column) { - - return this.columnsByIndex.findIndex(function (col) { - - return column === col; - }); - }; - - //return all columns that are not groups - - - ColumnManager.prototype.getRealColumns = function () { - - return this.columnsByIndex; - }; - - //travers across columns and call action - - - ColumnManager.prototype.traverse = function (callback) { - - var self = this; - - self.columnsByIndex.forEach(function (column, i) { - - callback(column, i); - }); - }; - - //get defintions of actual columns - - - ColumnManager.prototype.getDefinitions = function (active) { - - var self = this, - output = []; - - self.columnsByIndex.forEach(function (column) { - - if (!active || active && column.visible) { - - output.push(column.getDefinition()); - } - }); - - return output; - }; - - //get full nested definition tree - - - ColumnManager.prototype.getDefinitionTree = function () { - - var self = this, - output = []; - - self.columns.forEach(function (column) { - - output.push(column.getDefinition(true)); - }); - - return output; - }; - - ColumnManager.prototype.getComponents = function (structured) { - - var self = this, - output = [], - columns = structured ? self.columns : self.columnsByIndex; - - columns.forEach(function (column) { - - output.push(column.getComponent()); - }); - - return output; - }; - - ColumnManager.prototype.getWidth = function () { - - var width = 0; - - this.columnsByIndex.forEach(function (column) { - - if (column.visible) { - - width += column.getWidth(); - } - }); - - return width; - }; - - ColumnManager.prototype.moveColumn = function (from, to, after) { - - this.moveColumnActual(from, to, after); - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.initialize(); - } - - if (this.table.modExists("columnCalcs")) { - - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } - - to.element.parentNode.insertBefore(from.element, to.element); - - if (after) { - - to.element.parentNode.insertBefore(to.element, from.element); - } - - this._verticalAlignHeaders(); - - this.table.rowManager.reinitialize(); - }; - - ColumnManager.prototype.moveColumnActual = function (from, to, after) { - - if (from.parent.isGroup) { - - this._moveColumnInArray(from.parent.columns, from, to, after); - } else { - - this._moveColumnInArray(this.columns, from, to, after); - } - - this._moveColumnInArray(this.columnsByIndex, from, to, after, true); - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.initialize(); - } - - if (this.table.options.columnMoved) { - - this.table.options.columnMoved.call(this.table, from.getComponent(), this.table.columnManager.getComponents()); - } - - if (this.table.options.persistence && this.table.modExists("persistence", true) && 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; - - if (fromIndex > -1) { - - columns.splice(fromIndex, 1); - - toIndex = columns.indexOf(to); - - if (toIndex > -1) { - - if (after) { - - toIndex = toIndex + 1; - } - } else { - - toIndex = fromIndex; - } - - columns.splice(toIndex, 0, from); - - if (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; - - var left = 0, - offset = 0, - adjust = 0, - colEl = column.getElement(); - - return new Promise(function (resolve, reject) { - - if (typeof position === "undefined") { - - position = _this2.table.options.scrollToColumnPosition; - } - - if (typeof ifVisible === "undefined") { - - ifVisible = _this2.table.options.scrollToColumnIfVisible; - } - - if (column.visible) { - - //align to correct position - - - switch (position) { - - case "middle": - - case "center": - - adjust = -_this2.element.clientWidth / 2; - - break; - - case "right": - - adjust = colEl.clientWidth - _this2.headersElement.clientWidth; - - break; - - } - - //check column visibility - - - if (!ifVisible) { - - offset = colEl.offsetLeft; - - if (offset > 0 && offset + colEl.offsetWidth < _this2.element.clientWidth) { - - return false; - } - } - - //calculate scroll position - - - 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"); - } - }); - }; - - //////////////// Cell Management ///////////////// - - - ColumnManager.prototype.generateCells = function (row) { - - var self = this; - - var cells = []; - - self.columnsByIndex.forEach(function (column) { - - cells.push(column.generateCell(row)); - }); - - return cells; - }; - - //////////////// Column Management ///////////////// - - - ColumnManager.prototype.getFlexBaseWidth = function () { - - var self = this, - totalWidth = self.table.element.clientWidth, - //table element width - - - fixedWidth = 0; - - //adjust for vertical scrollbar if present - - - if (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; - - if (column.visible) { - - width = column.definition.width || 0; - - minWidth = typeof column.minWidth == "undefined" ? self.table.options.columnMinWidth : parseInt(column.minWidth); - - if (typeof width == "string") { - - if (width.indexOf("%") > -1) { - - colWidth = totalWidth / 100 * parseInt(width); - } else { - - colWidth = parseInt(width); - } - } else { - - colWidth = width; - } - - fixedWidth += colWidth > minWidth ? colWidth : minWidth; - } - }); - - return 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(); - - if (_this3.table.options.responsiveLayout && _this3.table.modExists("responsiveLayout", true)) { - - _this3.table.modules.responsiveLayout.initialize(); - } - - if (_this3.table.modExists("columnCalcs")) { - - _this3.table.modules.columnCalcs.recalc(_this3.table.rowManager.activeRows); - } - - _this3.redraw(); - - if (_this3.table.modules.layout.getMode() != "fitColumns") { - - column.reinitializeWidth(); - } - - _this3._verticalAlignHeaders(); - - _this3.table.rowManager.reinitialize(); - - resolve(column); - }); - }; - - //remove column from system - - - ColumnManager.prototype.deregisterColumn = function (column) { - - var field = column.getField(), - index; - - //remove from field list - - - if (field) { - - delete this.columnsByField[field]; - } - - //remove from index list - - - index = this.columnsByIndex.indexOf(column); - - if (index > -1) { - - this.columnsByIndex.splice(index, 1); - } - - //remove from column list - - - index = this.columns.indexOf(column); - - if (index > -1) { - - this.columns.splice(index, 1); - } - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.initialize(); - } - - this.redraw(); - }; - - //redraw columns - - - ColumnManager.prototype.redraw = function (force) { - - if (force) { - - if (Tabulator.prototype.helpers.elVisible(this.element)) { - - this._verticalAlignHeaders(); - } - - this.table.rowManager.resetScroll(); - - this.table.rowManager.reinitialize(); - } - - if (["fitColumns", "fitDataStretch"].indexOf(this.table.modules.layout.getMode()) > -1) { - - this.table.modules.layout.layout(); - } else { - - if (force) { - - this.table.modules.layout.layout(); - } else { - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.update(); - } - } - } - - if (this.table.modExists("frozenColumns")) { - - this.table.modules.frozenColumns.layout(); - } - - if (this.table.modExists("columnCalcs")) { - - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } - - if (force) { - - if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) { - - this.table.modules.persistence.save("columns"); - } - - if (this.table.modExists("columnCalcs")) { - - this.table.modules.columnCalcs.redraw(); - } - } - - this.table.footerManager.redraw(); - }; - - //public column object - - 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 = []; - - this._column.cells.forEach(function (cell) { - - cells.push(cell.getComponent()); - }); - - return cells; - }; - - ColumnComponent.prototype.getVisibility = function () { - - console.warn("getVisibility function is deprecated, you should now use the isVisible function"); - - return this._column.visible; - }; - - ColumnComponent.prototype.isVisible = function () { - - return this._column.visible; - }; - - ColumnComponent.prototype.show = function () { - - if (this._column.isGroup) { - - this._column.columns.forEach(function (column) { - - column.show(); - }); - } else { - - this._column.show(); - } - }; - - ColumnComponent.prototype.hide = function () { - - if (this._column.isGroup) { - - this._column.columns.forEach(function (column) { - - column.hide(); - }); - } else { - - this._column.hide(); - } - }; - - ColumnComponent.prototype.toggle = function () { - - if (this._column.visible) { - - this.hide(); - } else { - - this.show(); - } - }; - - ColumnComponent.prototype.delete = function () { - - return this._column.delete(); - }; - - ColumnComponent.prototype.getSubColumns = function () { - - var output = []; - - if (this._column.columns.length) { - - this._column.columns.forEach(function (column) { - - output.push(column.getComponent()); - }); - } - - return output; - }; - - ColumnComponent.prototype.getParentColumn = function () { - - return this._column.parent instanceof Column ? this._column.parent.getComponent() : false; - }; - - 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 () { - - if (this._column.table.modExists("filter", true)) { - - this._column.table.modules.filter.setHeaderFilterFocus(this._column); - } - }; - - ColumnComponent.prototype.reloadHeaderFilter = function () { - - if (this._column.table.modExists("filter", true)) { - - this._column.table.modules.filter.reloadHeaderFilter(this._column); - } - }; - - ColumnComponent.prototype.getHeaderFilterValue = function () { - - if (this._column.table.modExists("filter", true)) { - - return this._column.table.modules.filter.getHeaderFilterValue(this._column); - } - }; - - ColumnComponent.prototype.setHeaderFilterValue = function (value) { - - if (this._column.table.modExists("filter", true)) { - - this._column.table.modules.filter.setHeaderFilterValue(this._column, value); - } - }; - - ColumnComponent.prototype.move = function (to, after) { - - var toColumn = this._column.table.columnManager.findColumn(to); - - if (toColumn) { - - this._column.table.columnManager.moveColumn(this._column, toColumn, after); - } else { - - console.warn("Move Error - No matching column found:", toColumn); - } - }; - - ColumnComponent.prototype.getNextColumn = function () { - - var nextCol = this._column.nextColumn(); - - return nextCol ? nextCol.getComponent() : false; - }; - - ColumnComponent.prototype.getPrevColumn = function () { - - var prevCol = this._column.prevColumn(); - - return prevCol ? prevCol.getComponent() : false; - }; - - ColumnComponent.prototype.updateDefinition = function (updates) { - - return this._column.updateDefinition(updates); - }; - - ColumnComponent.prototype.getWidth = function () { - - return this._column.getWidth(); - }; - - ColumnComponent.prototype.setWidth = function (width) { - - if (width === true) { - - return this._column.reinitializeWidth(true); - } else { - - return 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; //column definition - - this.parent = parent; //hold parent object - - this.type = "column"; //type of element - - this.columns = []; //child columns - - this.cells = []; //cells bound to this column - - this.element = this.createElement(); //column header element - - this.contentElement = false; - - this.titleElement = false; - - this.groupElement = this.createGroupElement(); //column group holder element - - this.isGroup = false; - - this.tooltip = false; //hold column tooltip - - this.hozAlign = ""; //horizontal text alignment - - this.vertAlign = ""; //vert text alignment - - - //multi dimensional filed handling - - this.field = ""; - - this.fieldStructure = ""; - - this.getFieldValue = ""; - - this.setFieldValue = ""; - - this.titleFormatterRendered = false; - - this.setField(this.definition.field); - - if (this.table.options.invalidOptionWarnings) { - - this.checkDefinition(); - } - - this.modules = {}; //hold module variables; - - - this.cellEvents = { - - cellClick: false, - - cellDblClick: false, - - cellContext: false, - - cellTap: false, - - cellDblTap: false, - - cellTapHold: false, - - cellMouseEnter: false, - - cellMouseLeave: false, - - cellMouseOver: false, - - cellMouseOut: false, - - cellMouseMove: false - - }; - - this.width = null; //column width - - this.widthStyled = ""; //column width prestyled to improve render efficiency - - this.minWidth = null; //column minimum width - - this.minWidthStyled = ""; //column minimum prestyled to improve render efficiency - - this.widthFixed = false; //user has specified a width for this column - - - this.visible = true; //default visible state - - - this.component = null; - - this._mapDepricatedFunctionality(); - - //initialize column - - if (def.columns) { - - this.isGroup = true; - - def.columns.forEach(function (def, i) { - - var newCol = new Column(def, self); - - self.attachColumn(newCol); - }); - - self.checkColumnVisibility(); - } else { - - parent.registerColumnField(this); - } - - if (def.rowHandle && this.table.options.movableRows !== false && this.table.modExists("moveRow")) { - - this.table.modules.moveRow.setHandle(true); - } - - this._buildHeader(); - - this.bindModuleColumns(); - }; - - Column.prototype.createElement = function () { - - var el = document.createElement("div"); - - el.classList.add("tabulator-col"); - - el.setAttribute("role", "columnheader"); - - el.setAttribute("aria-sort", "none"); - - return el; - }; - - Column.prototype.createGroupElement = function () { - - var el = document.createElement("div"); - - el.classList.add("tabulator-col-group-cols"); - - return el; - }; - - Column.prototype.checkDefinition = function () { - var _this4 = this; - - Object.keys(this.definition).forEach(function (key) { - - if (_this4.defaultOptionList.indexOf(key) === -1) { - - 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; - }; - - //register column position with column manager - - Column.prototype.registerColumnPosition = function (column) { - - this.parent.registerColumnPosition(column); - }; - - //register column position with column manager - - Column.prototype.registerColumnField = function (column) { - - this.parent.registerColumnField(column); - }; - - //trigger position registration - - Column.prototype.reRegisterPosition = function () { - - if (this.isGroup) { - - this.columns.forEach(function (column) { - - column.reRegisterPosition(); - }); - } else { - - this.registerColumnPosition(this); - } - }; - - Column.prototype._mapDepricatedFunctionality = function () { - - if (typeof this.definition.hideInHtml !== "undefined") { - - this.definition.htmlOutput = !this.definition.hideInHtml; - - console.warn("hideInHtml column definition property is deprecated, you should now use htmlOutput"); - } - - if (typeof this.definition.align !== "undefined") { - - this.definition.hozAlign = this.definition.align; - - console.warn("align column definition property is deprecated, you should now use hozAlign"); - } - - if (typeof this.definition.downloadTitle !== "undefined") { - - 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; - - //set header tooltips - - var tooltip = def.headerTooltip || def.tooltip === false ? def.headerTooltip : self.table.options.tooltipsHeader; - - if (tooltip) { - - if (tooltip === true) { - - if (def.field) { - - self.table.modules.localize.bind("columns|" + def.field, function (value) { - - self.element.setAttribute("title", value || def.title); - }); - } else { - - self.element.setAttribute("title", def.title); - } - } else { - - if (typeof tooltip == "function") { - - tooltip = tooltip(self.getComponent()); - - if (tooltip === false) { - - tooltip = ""; - } - } - - self.element.setAttribute("title", tooltip); - } - } else { - - self.element.setAttribute("title", ""); - } - }; - - //build header element - - Column.prototype._buildHeader = function () { - - var self = this, - def = self.definition; - - while (self.element.firstChild) { - self.element.removeChild(self.element.firstChild); - }if (def.headerVertical) { - - self.element.classList.add("tabulator-col-vertical"); - - if (def.headerVertical === "flip") { - - self.element.classList.add("tabulator-col-vertical-flip"); - } - } - - self.contentElement = self._bindEvents(); - - self.contentElement = self._buildColumnHeaderContent(); - - self.element.appendChild(self.contentElement); - - if (self.isGroup) { - - self._buildGroupHeader(); - } else { - - self._buildColumnHeader(); - } - - self.setTooltip(); - - //set resizable handles - - if (self.table.options.resizableColumns && self.table.modExists("resizeColumns")) { - - self.table.modules.resizeColumns.initializeColumn("header", self, self.element); - } - - //set resizable handles - - if (def.headerFilter && self.table.modExists("filter") && self.table.modExists("edit")) { - - if (typeof def.headerFilterPlaceholder !== "undefined" && def.field) { - - self.table.modules.localize.setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder); - } - - self.table.modules.filter.initializeColumn(self); - } - - //set resizable handles - - if (self.table.modExists("frozenColumns")) { - - self.table.modules.frozenColumns.initializeColumn(self); - } - - //set movable column - - if (self.table.options.movableColumns && !self.isGroup && self.table.modExists("moveColumn")) { - - self.table.modules.moveColumn.initializeColumn(self); - } - - //set calcs column - - if ((def.topCalc || def.bottomCalc) && self.table.modExists("columnCalcs")) { - - self.table.modules.columnCalcs.initializeColumn(self); - } - - //handle persistence - - if (self.table.modExists("persistence") && self.table.modules.persistence.config.columns) { - - self.table.modules.persistence.initializeColumn(self); - } - - //update header tooltip on mouse enter - - self.element.addEventListener("mouseenter", function (e) { - - self.setTooltip(); - }); - }; - - Column.prototype._bindEvents = function () { - - var self = this, - def = self.definition, - dblTap, - tapHold, - tap; - - //setup header click event bindings - - if (typeof def.headerClick == "function") { - - self.element.addEventListener("click", function (e) { - def.headerClick(e, self.getComponent()); - }); - } - - if (typeof def.headerDblClick == "function") { - - self.element.addEventListener("dblclick", function (e) { - def.headerDblClick(e, self.getComponent()); - }); - } - - if (typeof def.headerContext == "function") { - - self.element.addEventListener("contextmenu", function (e) { - def.headerContext(e, self.getComponent()); - }); - } - - //setup header tap event bindings - - if (typeof def.headerTap == "function") { - - tap = false; - - self.element.addEventListener("touchstart", function (e) { - - tap = true; - }, { passive: true }); - - self.element.addEventListener("touchend", function (e) { - - if (tap) { - - def.headerTap(e, self.getComponent()); - } - - tap = false; - }); - } - - if (typeof def.headerDblTap == "function") { - - dblTap = null; - - self.element.addEventListener("touchend", function (e) { - - if (dblTap) { - - clearTimeout(dblTap); - - dblTap = null; - - def.headerDblTap(e, self.getComponent()); - } else { - - dblTap = setTimeout(function () { - - clearTimeout(dblTap); - - dblTap = null; - }, 300); - } - }); - } - - if (typeof def.headerTapHold == "function") { - - tapHold = null; - - self.element.addEventListener("touchstart", function (e) { - - clearTimeout(tapHold); - - tapHold = setTimeout(function () { - - clearTimeout(tapHold); - - tapHold = null; - - tap = false; - - def.headerTapHold(e, self.getComponent()); - }, 1000); - }, { passive: true }); - - self.element.addEventListener("touchend", function (e) { - - clearTimeout(tapHold); - - tapHold = null; - }); - } - - //store column cell click event bindings - - if (typeof def.cellClick == "function") { - - self.cellEvents.cellClick = def.cellClick; - } - - if (typeof def.cellDblClick == "function") { - - self.cellEvents.cellDblClick = def.cellDblClick; - } - - if (typeof def.cellContext == "function") { - - self.cellEvents.cellContext = def.cellContext; - } - - //store column mouse event bindings - - if (typeof def.cellMouseEnter == "function") { - - self.cellEvents.cellMouseEnter = def.cellMouseEnter; - } - - if (typeof def.cellMouseLeave == "function") { - - self.cellEvents.cellMouseLeave = def.cellMouseLeave; - } - - if (typeof def.cellMouseOver == "function") { - - self.cellEvents.cellMouseOver = def.cellMouseOver; - } - - if (typeof def.cellMouseOut == "function") { - - self.cellEvents.cellMouseOut = def.cellMouseOut; - } - - if (typeof def.cellMouseMove == "function") { - - self.cellEvents.cellMouseMove = def.cellMouseMove; - } - - //setup column cell tap event bindings - - if (typeof def.cellTap == "function") { - - self.cellEvents.cellTap = def.cellTap; - } - - if (typeof def.cellDblTap == "function") { - - self.cellEvents.cellDblTap = def.cellDblTap; - } - - if (typeof def.cellTapHold == "function") { - - self.cellEvents.cellTapHold = def.cellTapHold; - } - - //setup column cell edit callbacks - - if (typeof def.cellEdited == "function") { - - self.cellEvents.cellEdited = def.cellEdited; - } - - if (typeof def.cellEditing == "function") { - - self.cellEvents.cellEditing = def.cellEditing; - } - - if (typeof def.cellEditCancelled == "function") { - - self.cellEvents.cellEditCancelled = def.cellEditCancelled; - } - }; - - //build header element for header - - Column.prototype._buildColumnHeader = function () { - - var self = this, - def = self.definition, - table = self.table, - sortable; - - //set column sorter - - if (table.modExists("sort")) { - - table.modules.sort.initializeColumn(self, self.contentElement); - } - - //set column header context menu - - if ((def.headerContextMenu || def.headerMenu) && table.modExists("menu")) { - - table.modules.menu.initializeColumnHeader(self); - } - - //set column formatter - - if (table.modExists("format")) { - - table.modules.format.initializeColumn(self); - } - - //set column editor - - if (typeof def.editor != "undefined" && table.modExists("edit")) { - - table.modules.edit.initializeColumn(self); - } - - //set colum validator - - if (typeof def.validator != "undefined" && table.modExists("validate")) { - - table.modules.validate.initializeColumn(self); - } - - //set column mutator - - if (table.modExists("mutator")) { - - table.modules.mutator.initializeColumn(self); - } - - //set column accessor - - if (table.modExists("accessor")) { - - table.modules.accessor.initializeColumn(self); - } - - //set respoviveLayout - - if (_typeof(table.options.responsiveLayout) && table.modExists("responsiveLayout")) { - - table.modules.responsiveLayout.initializeColumn(self); - } - - //set column visibility - - if (typeof def.visible != "undefined") { - - if (def.visible) { - - self.show(true); - } else { - - self.hide(true); - } - } - - //asign additional css classes to column header - - if (def.cssClass) { - - var classeNames = def.cssClass.split(" "); - - classeNames.forEach(function (className) { - - self.element.classList.add(className); - }); - } - - if (def.field) { - - this.element.setAttribute("tabulator-field", def.field); - } - - //set min width if present - - self.setMinWidth(typeof def.minWidth == "undefined" ? self.table.options.columnMinWidth : parseInt(def.minWidth)); - - self.reinitializeWidth(); - - //set tooltip if present - - self.tooltip = self.definition.tooltip || self.definition.tooltip === false ? self.definition.tooltip : self.table.options.tooltips; - - //set orizontal text alignment - - 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 () { - - var def = this.definition, - table = this.table; - - var contentElement = document.createElement("div"); - - contentElement.classList.add("tabulator-col-content"); - - this.titleElement = this._buildColumnHeaderTitle(); - - contentElement.appendChild(this.titleElement); - - return contentElement; - }; - - //build title element of column - - Column.prototype._buildColumnHeaderTitle = function () { - - var self = this, - def = self.definition, - table = self.table, - title; - - var titleHolderElement = document.createElement("div"); - - titleHolderElement.classList.add("tabulator-col-title"); - - if (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); - - if (def.field) { - - table.modules.localize.bind("columns|" + def.field, function (text) { - - titleElement.value = text || def.title || " "; - }); - } else { - - titleElement.value = def.title || " "; - } - } else { - - if (def.field) { - - table.modules.localize.bind("columns|" + def.field, function (text) { - - self._formatColumnHeaderTitle(titleHolderElement, text || def.title || " "); - }); - } else { - - self._formatColumnHeaderTitle(titleHolderElement, def.title || " "); - } - } - - return titleHolderElement; - }; - - Column.prototype._formatColumnHeaderTitle = function (el, title) { - var _this5 = this; - - var formatter, contents, params, mockCell, onRendered; - - if (this.definition.titleFormatter && this.table.modExists("format")) { - - 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 = this.definition.titleFormatterParams || {}; - - params = typeof params === "function" ? params() : params; - - contents = formatter.call(this.table.modules.format, mockCell, params, onRendered); - - switch (typeof contents === 'undefined' ? 'undefined' : _typeof(contents)) { - - case "object": - - if (contents instanceof Node) { - - el.appendChild(contents); - } else { - - 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; - } - }; - - //build header element for column group - - Column.prototype._buildGroupHeader = function () { - var _this6 = this; - - this.element.classList.add("tabulator-col-group"); - - this.element.setAttribute("role", "columngroup"); - - this.element.setAttribute("aria-title", this.definition.title); - - //asign additional css classes to column header - - if (this.definition.cssClass) { - - var classeNames = this.definition.cssClass.split(" "); - - classeNames.forEach(function (className) { - - _this6.element.classList.add(className); - }); - } - - //set column header context menu - - if ((this.definition.headerContextMenu || this.definition.headerMenu) && this.table.modExists("menu")) { - - this.table.modules.menu.initializeColumnHeader(this); - } - - this.element.appendChild(this.groupElement); - }; - - //flat field lookup - - Column.prototype._getFlatData = function (data) { - - return data[this.field]; - }; - - //nested field lookup - - Column.prototype._getNestedData = function (data) { - - var dataObj = data, - structure = this.fieldStructure, - length = structure.length, - output; - - for (var _i = 0; _i < length; _i++) { - - dataObj = dataObj[structure[_i]]; - - output = dataObj; - - if (!dataObj) { - - break; - } - } - - return output; - }; - - //flat field set - - Column.prototype._setFlatData = function (data, value) { - - if (this.field) { - - data[this.field] = value; - } - }; - - //nested field set - - Column.prototype._setNestedData = function (data, value) { - - var dataObj = data, - structure = this.fieldStructure, - length = structure.length; - - for (var _i2 = 0; _i2 < length; _i2++) { - - if (_i2 == length - 1) { - - dataObj[structure[_i2]] = value; - } else { - - if (!dataObj[structure[_i2]]) { - - if (typeof value !== "undefined") { - - dataObj[structure[_i2]] = {}; - } else { - - break; - } - } - - dataObj = dataObj[structure[_i2]]; - } - } - }; - - //attach column to this group - - Column.prototype.attachColumn = function (column) { - - var self = this; - - if (self.groupElement) { - - self.columns.push(column); - - self.groupElement.appendChild(column.getElement()); - } else { - - console.warn("Column Warning - Column being attached to another column instead of column group"); - } - }; - - //vertically align header in column - - Column.prototype.verticalAlign = function (alignment, height) { - - //calculate height of column header and group holder element - - var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : height || this.parent.getHeadersElement().clientHeight; - - // var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight; - - - this.element.style.height = parentHeight + "px"; - - if (this.isGroup) { - - this.groupElement.style.minHeight = parentHeight - this.contentElement.offsetHeight + "px"; - } - - //vertically align cell contents - - if (!this.isGroup && alignment !== "top") { - - if (alignment === "bottom") { - - this.element.style.paddingTop = this.element.clientHeight - this.contentElement.offsetHeight + "px"; - } else { - - this.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) / 2 + "px"; - } - } - - this.columns.forEach(function (column) { - - column.verticalAlign(alignment); - }); - }; - - //clear vertical alignmenet - - Column.prototype.clearVerticalAlign = function () { - - this.element.style.paddingTop = ""; - - this.element.style.height = ""; - - this.element.style.minHeight = ""; - - this.groupElement.style.minHeight = ""; - - this.columns.forEach(function (column) { - - column.clearVerticalAlign(); - }); - }; - - Column.prototype.bindModuleColumns = function () { - - //check if rownum formatter is being used on a column - - if (this.definition.formatter == "rownum") { - - this.table.rowManager.rowNumColumn = this; - } - }; - - //// Retreive Column Information //// - - - //return column header element - - Column.prototype.getElement = function () { - - return this.element; - }; - - //return colunm group element - - Column.prototype.getGroupElement = function () { - - return this.groupElement; - }; - - //return field name - - Column.prototype.getField = function () { - - return this.field; - }; - - //return the first column in a group - - Column.prototype.getFirstColumn = function () { - - if (!this.isGroup) { - - return this; - } else { - - if (this.columns.length) { - - return this.columns[0].getFirstColumn(); - } else { - - return false; - } - } - }; - - //return the last column in a group - - Column.prototype.getLastColumn = function () { - - if (!this.isGroup) { - - return this; - } else { - - if (this.columns.length) { - - return this.columns[this.columns.length - 1].getLastColumn(); - } else { - - return false; - } - } - }; - - //return all columns in a group - - Column.prototype.getColumns = function () { - - return this.columns; - }; - - //return all columns in a group - - Column.prototype.getCells = function () { - - return this.cells; - }; - - //retreive the top column in a group of columns - - Column.prototype.getTopColumn = function () { - - if (this.parent.isGroup) { - - return this.parent.getTopColumn(); - } else { - - return this; - } - }; - - //return column definition object - - Column.prototype.getDefinition = function (updateBranches) { - - var colDefs = []; - - if (this.isGroup && updateBranches) { - - this.columns.forEach(function (column) { - - colDefs.push(column.getDefinition(true)); - }); - - this.definition.columns = colDefs; - } - - return this.definition; - }; - - //////////////////// Actions //////////////////// - - - Column.prototype.checkColumnVisibility = function () { - - var visible = false; - - this.columns.forEach(function (column) { - - if (column.visible) { - - visible = true; - } - }); - - if (visible) { - - this.show(); - - this.parent.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false); - } else { - - this.hide(); - } - }; - - //show column - - Column.prototype.show = function (silent, responsiveToggle) { - - if (!this.visible) { - - this.visible = true; - - this.element.style.display = ""; - - if (this.parent.isGroup) { - - this.parent.checkColumnVisibility(); - } - - this.cells.forEach(function (cell) { - - cell.show(); - }); - - if (!this.isGroup && this.width === null) { - - this.reinitializeWidth(); - } - - this.table.columnManager._verticalAlignHeaders(); - - if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) { - - this.table.modules.persistence.save("columns"); - } - - if (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible); - } - - if (!silent) { - - this.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), true); - } - - if (this.parent.isGroup) { - - this.parent.matchChildWidths(); - } - } - }; - - //hide column - - Column.prototype.hide = function (silent, responsiveToggle) { - - if (this.visible) { - - this.visible = false; - - this.element.style.display = "none"; - - this.table.columnManager._verticalAlignHeaders(); - - if (this.parent.isGroup) { - - this.parent.checkColumnVisibility(); - } - - this.cells.forEach(function (cell) { - - cell.hide(); - }); - - if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) { - - this.table.modules.persistence.save("columns"); - } - - if (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible); - } - - if (!silent) { - - this.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false); - } - - if (this.parent.isGroup) { - - this.parent.matchChildWidths(); - } - } - }; - - Column.prototype.matchChildWidths = function () { - - var childWidth = 0; - - if (this.contentElement && this.columns.length) { - - this.columns.forEach(function (column) { - - if (column.visible) { - - childWidth += column.getWidth(); - } - }); - - this.contentElement.style.maxWidth = childWidth - 1 + "px"; - - if (this.parent.isGroup) { - - this.parent.matchChildWidths(); - } - } - }; - - Column.prototype.setWidth = function (width) { - - this.widthFixed = true; - - this.setWidthActual(width); - }; - - Column.prototype.setWidthActual = function (width) { - - if (isNaN(width)) { - - width = Math.floor(this.table.element.clientWidth / 100 * parseInt(width)); - } - - width = Math.max(this.minWidth, width); - - this.width = width; - - this.widthStyled = width ? width + "px" : ""; - - this.element.style.width = this.widthStyled; - - if (!this.isGroup) { - - this.cells.forEach(function (cell) { - - cell.setWidth(); - }); - } - - if (this.parent.isGroup) { - - this.parent.matchChildWidths(); - } - - //set resizable handles - - if (this.table.modExists("frozenColumns")) { - - this.table.modules.frozenColumns.layout(); - } - }; - - Column.prototype.checkCellHeights = function () { - - var rows = []; - - this.cells.forEach(function (cell) { - - if (cell.row.heightInitialized) { - - if (cell.row.getElement().offsetParent !== null) { - - rows.push(cell.row); - - cell.row.clearCellHeight(); - } else { - - cell.row.heightInitialized = false; - } - } - }); - - rows.forEach(function (row) { - - row.calcHeight(); - }); - - rows.forEach(function (row) { - - row.setCellHeight(); - }); - }; - - Column.prototype.getWidth = function () { - - var width = 0; - - if (this.isGroup) { - - this.columns.forEach(function (column) { - - if (column.visible) { - - width += column.getWidth(); - } - }); - } else { - - width = this.width; - } - - return width; - }; - - Column.prototype.getHeight = function () { - - return this.element.offsetHeight; - }; - - Column.prototype.setMinWidth = function (minWidth) { - - this.minWidth = minWidth; - - this.minWidthStyled = minWidth ? minWidth + "px" : ""; - - this.element.style.minWidth = this.minWidthStyled; - - this.cells.forEach(function (cell) { - - cell.setMinWidth(); - }); - }; - - Column.prototype.delete = function () { - var _this7 = this; - - return new Promise(function (resolve, reject) { - - if (_this7.isGroup) { - - _this7.columns.forEach(function (column) { - - column.delete(); - }); - } - - //cancel edit if column is currently being edited - - if (_this7.table.modExists("edit")) { - - if (_this7.table.modules.edit.currentCell.column === _this7) { - - _this7.table.modules.edit.cancelEdit(); - } - } - - var cellCount = _this7.cells.length; - - for (var _i3 = 0; _i3 < cellCount; _i3++) { - - _this7.cells[0].delete(); - } - - _this7.element.parentNode.removeChild(_this7.element); - - _this7.table.columnManager.deregisterColumn(_this7); - - resolve(); - }); - }; - - Column.prototype.columnRendered = function () { - - if (this.titleFormatterRendered) { - - this.titleFormatterRendered(); - } - }; - - Column.prototype.validate = function () { - - var invalid = []; - - this.cells.forEach(function (cell) { - - if (!cell.validate()) { - - invalid.push(cell.getComponent()); - } - }); - - return invalid.length ? invalid : true; - }; - - //////////////// Cell Management ///////////////// - - - //generate cell for this column - - Column.prototype.generateCell = function (row) { - - var self = this; - - var cell = new Cell(self, row); - - this.cells.push(cell); - - return cell; - }; - - Column.prototype.nextColumn = function () { - - var index = this.table.columnManager.findColumnIndex(this); - - return index > -1 ? this._nextVisibleColumn(index + 1) : false; - }; - - 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) : false; - }; - - 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 = false; - - //set width if present - - if (typeof this.definition.width !== "undefined" && !force) { - - this.setWidth(this.definition.width); - } - - //hide header filters to prevent them altering column width - - if (this.table.modExists("filter")) { - - this.table.modules.filter.hideHeaderFilterElements(); - } - - this.fitToData(); - - //show header filters again after layout is complete - - if (this.table.modExists("filter")) { - - this.table.modules.filter.showHeaderFilterElements(); - } - }; - - //set column width to maximum cell width - - Column.prototype.fitToData = function () { - - var self = this; - - if (!this.widthFixed) { - - this.element.style.width = ""; - - self.cells.forEach(function (cell) { - - cell.clearWidth(); - }); - } - - var maxWidth = this.element.offsetWidth; - - if (!self.width || !this.widthFixed) { - - self.cells.forEach(function (cell) { - - var width = cell.getWidth(); - - if (width > maxWidth) { - - maxWidth = width; - } - }); - - if (maxWidth) { - - self.setWidthActual(maxWidth + 1); - } - } - }; - - Column.prototype.updateDefinition = function (updates) { - var _this8 = this; - - return new Promise(function (resolve, reject) { - - var definition; - - if (!_this8.isGroup) { - - definition = Object.assign({}, _this8.getDefinition()); - - definition = Object.assign(definition, updates); - - _this8.table.columnManager.addColumn(definition, false, _this8).then(function (column) { - - if (definition.field == _this8.field) { - - _this8.field = false; //cleair field name to prevent deletion of duplicate column from arrays - } - - _this8.delete().then(function () { - - resolve(column.getComponent()); - }).catch(function (err) { - - reject(err); - }); - }).catch(function (err) { - - reject(err); - }); - } else { - - 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"); - } - }); - }; - - Column.prototype.deleteCell = function (cell) { - - var index = this.cells.indexOf(cell); - - if (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"]; - - //////////////// Event Bindings ///////////////// - - - //////////////// Object Generation ///////////////// - - Column.prototype.getComponent = function () { - - if (!this.component) { - - this.component = new ColumnComponent(this); - } - - return this.component; - }; - - var RowManager = function RowManager(table) { - - this.table = table; - - this.element = this.createHolderElement(); //containing element - - this.tableElement = this.createTableElement(); //table element - - this.heightFixer = this.createTableElement(); //table element - - this.columnManager = null; //hold column manager object - - this.height = 0; //hold height of table element - - - this.firstRender = false; //handle first render - - this.renderMode = "virtual"; //current rendering mode - - this.fixedHeight = false; //current rendering mode - - - this.rows = []; //hold row data objects - - this.activeRows = []; //rows currently available to on display in the table - - this.activeRowsCount = 0; //count of active rows - - - this.displayRows = []; //rows currently on display in the table - - this.displayRowsCount = 0; //count of display rows - - - this.scrollTop = 0; - - this.scrollLeft = 0; - - this.vDomRowHeight = 20; //approximation of row heights for padding - - - this.vDomTop = 0; //hold position for first rendered row in the virtual DOM - - this.vDomBottom = 0; //hold possition for last rendered row in the virtual DOM - - - this.vDomScrollPosTop = 0; //last scroll position of the vDom top; - - this.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom; - - - this.vDomTopPad = 0; //hold value of padding for top of virtual DOM - - this.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM - - - this.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go - - - this.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling - - - this.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows) - - this.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin - - - this.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed - - this.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed - - - this.rowNumColumn = false; //hold column component for row number column - - - this.redrawBlock = false; //prevent redraws to allow multiple data manipulations becore continuing - - this.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed - - this.redrawBlockRederInPosition = false; //store latest redraw function calls for when redraw is needed - }; - - //////////////// Setup Functions ///////////////// - - - RowManager.prototype.createHolderElement = function () { - - var el = document.createElement("div"); - - el.classList.add("tabulator-tableHolder"); - - el.setAttribute("tabindex", 0); - - return el; - }; - - RowManager.prototype.createTableElement = function () { - - var el = document.createElement("div"); - - el.classList.add("tabulator-table"); - - return el; - }; - - //return containing element - - RowManager.prototype.getElement = function () { - - return this.element; - }; - - //return table element - - RowManager.prototype.getTableElement = function () { - - return this.tableElement; - }; - - //return position of row in table - - RowManager.prototype.getRowPosition = function (row, active) { - - if (active) { - - return this.activeRows.indexOf(row); - } else { - - return this.rows.indexOf(row); - } - }; - - //link to column manager - - RowManager.prototype.setColumnManager = function (manager) { - - this.columnManager = manager; - }; - - RowManager.prototype.initialize = function () { - - var self = this; - - self.setRenderMode(); - - //initialize manager - - self.element.appendChild(self.tableElement); - - self.firstRender = true; - - //scroll header along with table body - - self.element.addEventListener("scroll", function () { - - var left = self.element.scrollLeft; - - //handle horizontal scrolling - - if (self.scrollLeft != left) { - - self.columnManager.scrollHorizontal(left); - - if (self.table.options.groupBy) { - - self.table.modules.groupRows.scrollHeaders(left); - } - - if (self.table.modExists("columnCalcs")) { - - self.table.modules.columnCalcs.scrollHorizontal(left); - } - - self.table.options.scrollHorizontal(left); - } - - self.scrollLeft = left; - }); - - //handle virtual dom scrolling - - if (this.renderMode === "virtual") { - - self.element.addEventListener("scroll", function () { - - var top = self.element.scrollTop; - - var dir = self.scrollTop > top; - - //handle verical scrolling - - if (self.scrollTop != top) { - - self.scrollTop = top; - - self.scrollVertical(dir); - - if (self.table.options.ajaxProgressiveLoad == "scroll") { - - self.table.modules.ajax.nextPage(self.element.scrollHeight - self.element.clientHeight - top); - } - - self.table.options.scrollVertical(top); - } else { - - self.scrollTop = top; - } - }); - } - }; - - ////////////////// Row Manipulation ////////////////// - - - RowManager.prototype.findRow = function (subject) { - - var self = this; - - if ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == "object") { - - if (subject instanceof Row) { - - //subject is row element - - return subject; - } else if (subject instanceof RowComponent) { - - //subject is public row component - - return subject._getSelf() || false; - } else if (typeof HTMLElement !== "undefined" && subject instanceof HTMLElement) { - - //subject is a HTML element of the row - - var match = self.rows.find(function (row) { - - return row.element === subject; - }); - - return match || false; - } - } else if (typeof subject == "undefined" || subject === null) { - - return false; - } else { - - //subject should be treated as the index of the row - - var _match = self.rows.find(function (row) { - - return row.data[self.table.options.index] == subject; - }); - - return _match || false; - } - - //catch all for any other type of input - - - return false; - }; - - RowManager.prototype.getRowFromDataObject = function (data) { - - var match = this.rows.find(function (row) { - - return row.data === data; - }); - - return match || false; - }; - - RowManager.prototype.getRowFromPosition = function (position, active) { - - if (active) { - - return this.activeRows[position]; - } else { - - return this.rows[position]; - } - }; - - RowManager.prototype.scrollToRow = function (row, position, ifVisible) { - var _this9 = this; - - var rowIndex = this.getDisplayRows().indexOf(row), - rowEl = row.getElement(), - rowTop, - offset = 0; - - return new Promise(function (resolve, reject) { - - if (rowIndex > -1) { - - if (typeof position === "undefined") { - - position = _this9.table.options.scrollToRowPosition; - } - - if (typeof ifVisible === "undefined") { - - ifVisible = _this9.table.options.scrollToRowIfVisible; - } - - if (position === "nearest") { - - 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"; - - break; - - } - } - - //check row visibility - - if (!ifVisible) { - - if (Tabulator.prototype.helpers.elVisible(rowEl)) { - - offset = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this9.element).top; - - if (offset > 0 && offset < _this9.element.clientHeight - rowEl.offsetHeight) { - - return false; - } - } - } - - //scroll to row - - 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, true); - - break; - - } - - //align to correct position - - switch (position) { - - case "middle": - - case "center": - - 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 { - - _this9.element.scrollTop = _this9.element.scrollTop - _this9.element.clientHeight / 2; - } - - break; - - case "bottom": - - if (_this9.element.scrollHeight - _this9.element.scrollTop == _this9.element.clientHeight) { - - _this9.element.scrollTop = _this9.element.scrollTop - (_this9.element.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight; - } else { - - _this9.element.scrollTop = _this9.element.scrollTop - _this9.element.clientHeight + rowEl.offsetHeight; - } - - break; - - } - - resolve(); - } else { - - console.warn("Scroll Error - Row not visible"); - - reject("Scroll Error - Row not visible"); - } - }); - }; - - ////////////////// Data Handling ////////////////// - - - RowManager.prototype.setData = function (data, renderInPosition, columnsChanged) { - var _this10 = this; - - var self = this; - - return new Promise(function (resolve, reject) { - - if (renderInPosition && _this10.getDisplayRows().length) { - - if (self.table.options.pagination) { - - self._setDataActual(data, true); - } else { - - _this10.reRenderInPosition(function () { - - self._setDataActual(data); - }); - } - } else { - - if (_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(); - - if (this.table.options.history && this.table.modExists("history")) { - - this.table.modules.history.clear(); - } - - if (Array.isArray(data)) { - - if (this.table.modExists("selectRow")) { - - this.table.modules.selectRow.clearSelectionData(); - } - - if (this.table.options.reactiveData && this.table.modExists("reactiveData", true)) { - - this.table.modules.reactiveData.watchData(data); - } - - data.forEach(function (def, i) { - - if (def && (typeof def === 'undefined' ? 'undefined' : _typeof(def)) === "object") { - - 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(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); - } - }; - - RowManager.prototype._wipeElements = function () { - - this.rows.forEach(function (row) { - - row.wipe(); - }); - - if (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); - - if (activeIndex > -1) { - - this.activeRows.splice(activeIndex, 1); - } - - if (allIndex > -1) { - - this.rows.splice(allIndex, 1); - } - - this.setActiveRows(this.activeRows); - - this.displayRowIterator(function (rows) { - - var displayIndex = rows.indexOf(row); - - if (displayIndex > -1) { - - rows.splice(displayIndex, 1); - } - }); - - if (!blockRedraw) { - - this.reRenderInPosition(); - } - - this.regenerateRowNumbers(); - - this.table.options.rowDeleted.call(this.table, row.getComponent()); - - this.table.options.dataEdited.call(this.table, this.getData()); - - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - - this.table.modules.groupRows.updateGroupRows(true); - } else if (this.table.options.pagination && this.table.modExists("page")) { - - this.refreshActiveData(false, false, true); - } else { - - if (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); - - if (this.table.options.history && this.table.modExists("history")) { - - this.table.modules.history.action("rowAdd", row, { data: data, pos: pos, index: index }); - } - - return row; - }; - - //add multiple rows - - RowManager.prototype.addRows = function (data, pos, index) { - var _this11 = this; - - var self = this, - length = 0, - rows = []; - - return new Promise(function (resolve, reject) { - - pos = _this11.findAddRowPos(pos); - - if (!Array.isArray(data)) { - - data = [data]; - } - - length = data.length - 1; - - if (typeof index == "undefined" && pos || typeof index !== "undefined" && !pos) { - - data.reverse(); - } - - data.forEach(function (item, i) { - - var row = self.addRow(item, pos, index, true); - - rows.push(row); - }); - - 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 { - - _this11.reRenderInPosition(); - } - - //recalc column calculations if present - - if (_this11.table.modExists("columnCalcs")) { - - _this11.table.modules.columnCalcs.recalc(_this11.table.rowManager.activeRows); - } - - _this11.regenerateRowNumbers(); - - resolve(rows); - }); - }; - - RowManager.prototype.findAddRowPos = function (pos) { - - if (typeof pos === "undefined") { - - pos = this.table.options.addRowPos; - } - - if (pos === "pos") { - - pos = true; - } - - if (pos === "bottom") { - - pos = false; - } - - return 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 && this.table.options.paginationAddRow == "page") { - - dispRows = this.getDisplayRows(); - - if (top) { - - if (dispRows.length) { - - index = dispRows[0]; - } else { - - if (this.activeRows.length) { - - index = this.activeRows[this.activeRows.length - 1]; - - top = false; - } - } - } else { - - if (dispRows.length) { - - index = dispRows[dispRows.length - 1]; - - top = dispRows.length < this.table.modules.page.getPageSize() ? false : true; - } - } - } - - if (typeof index !== "undefined") { - - index = this.findRow(index); - } - - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - - this.table.modules.groupRows.assignRowToGroup(row); - - var groupRows = row.getGroup().rows; - - if (groupRows.length > 1) { - - if (!index || index && groupRows.indexOf(index) == -1) { - - if (top) { - - if (groupRows[0] !== row) { - - index = groupRows[0]; - - this._moveRowInArray(row.getGroup().rows, row, index, !top); - } - } else { - - if (groupRows[groupRows.length - 1] !== row) { - - index = groupRows[groupRows.length - 1]; - - this._moveRowInArray(row.getGroup().rows, row, index, !top); - } - } - } else { - - this._moveRowInArray(row.getGroup().rows, row, index, !top); - } - } - } - - if (index) { - - allIndex = this.rows.indexOf(index); - } - - if (index && allIndex > -1) { - - activeIndex = this.activeRows.indexOf(index); - - this.displayRowIterator(function (rows) { - - var displayIndex = rows.indexOf(index); - - if (displayIndex > -1) { - - rows.splice(top ? displayIndex : displayIndex + 1, 0, row); - } - }); - - if (activeIndex > -1) { - - this.activeRows.splice(top ? activeIndex : activeIndex + 1, 0, row); - } - - this.rows.splice(top ? allIndex : allIndex + 1, 0, row); - } else { - - if (top) { - - this.displayRowIterator(function (rows) { - - rows.unshift(row); - }); - - this.activeRows.unshift(row); - - this.rows.unshift(row); - } else { - - 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()); - - if (!blockRedraw) { - - this.reRenderInPosition(); - } - - return row; - }; - - RowManager.prototype.moveRow = function (from, to, after) { - - if (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; - - this._moveRowInArray(this.rows, from, to, after); - - this._moveRowInArray(this.activeRows, from, to, after); - - this.displayRowIterator(function (rows) { - - _this12._moveRowInArray(rows, from, to, after); - }); - - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - - if (!after && to instanceof Group) { - - to = this.table.rowManager.prevDisplayRow(from) || to; - } - - var toGroup = to.getGroup(); - - var fromGroup = from.getGroup(); - - if (toGroup === fromGroup) { - - this._moveRowInArray(toGroup.rows, from, to, after); - } else { - - if (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); - - if (fromIndex > -1) { - - rows.splice(fromIndex, 1); - - toIndex = rows.indexOf(to); - - if (toIndex > -1) { - - if (after) { - - rows.splice(toIndex + 1, 0, from); - } else { - - rows.splice(toIndex, 0, from); - } - } else { - - rows.splice(fromIndex, 0, from); - } - } - - //restyle rows - - if (rows === this.getDisplayRows()) { - - start = fromIndex < toIndex ? fromIndex : toIndex; - - end = toIndex > fromIndex ? toIndex : fromIndex + 1; - - for (var _i4 = start; _i4 <= end; _i4++) { - - if (rows[_i4]) { - - this.styleRow(rows[_i4], _i4); - } - } - } - } - }; - - RowManager.prototype.clearData = function () { - - this.setData([]); - }; - - RowManager.prototype.getRowIndex = function (row) { - - return this.findRowIndex(row, this.rows); - }; - - RowManager.prototype.getDisplayRowIndex = function (row) { - - var index = this.getDisplayRows().indexOf(row); - - return index > -1 ? index : false; - }; - - RowManager.prototype.nextDisplayRow = function (row, rowOnly) { - - var index = this.getDisplayRowIndex(row), - nextRow = false; - - if (index !== false && index < this.displayRowsCount - 1) { - - nextRow = this.getDisplayRows()[index + 1]; - } - - if (nextRow && (!(nextRow instanceof Row) || nextRow.type != "row")) { - - return this.nextDisplayRow(nextRow, rowOnly); - } - - return nextRow; - }; - - RowManager.prototype.prevDisplayRow = function (row, rowOnly) { - - var index = this.getDisplayRowIndex(row), - prevRow = false; - - if (index) { - - prevRow = this.getDisplayRows()[index - 1]; - } - - if (rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != "row")) { - - return this.prevDisplayRow(prevRow, rowOnly); - } - - return prevRow; - }; - - RowManager.prototype.findRowIndex = function (row, list) { - - var rowIndex; - - row = this.findRow(row); - - if (row) { - - rowIndex = list.indexOf(row); - - if (rowIndex > -1) { - - return rowIndex; - } - } - - return false; - }; - - RowManager.prototype.getData = function (active, transform) { - - var output = [], - rows = this.getRows(active); - - rows.forEach(function (row) { - - if (row.type == "row") { - - output.push(row.getData(transform || "data")); - } - }); - - return output; - }; - - RowManager.prototype.getComponents = function (active) { - - var output = [], - rows = this.getRows(active); - - rows.forEach(function (row) { - - output.push(row.getComponent()); - }); - - return output; - }; - - RowManager.prototype.getDataCount = function (active) { - - var rows = this.getRows(active); - - return rows.length; - }; - - RowManager.prototype._genRemoteRequest = function () { - var _this13 = this; - - var table = this.table, - options = table.options, - params = {}; - - if (table.modExists("page")) { - - //set sort data if defined - - 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; - } - - //set filter data if defined - - if (options.ajaxFiltering) { - - var filters = this.table.modules.filter.getFilters(true, true); - - params[this.table.modules.page.paginationDataSentNames.filters] = filters; - } - - this.table.modules.ajax.setParams(params, true); - } - - table.modules.ajax.sendRequest().then(function (data) { - - _this13._setDataActual(data, true); - }).catch(function (e) {}); - }; - - //choose the path to refresh data after a filter update - - RowManager.prototype.filterRefresh = function () { - - var table = this.table, - options = table.options, - left = this.scrollLeft; - - if (options.ajaxFiltering) { - - if (options.pagination == "remote" && table.modExists("page")) { - - table.modules.page.reset(true); - - table.modules.page.setPage(1).then(function () {}).catch(function () {}); - } else if (options.ajaxProgressiveLoad) { - - table.modules.ajax.loadData().then(function () {}).catch(function () {}); - } else { - - //assume data is url, make ajax call to url to get data - - this._genRemoteRequest(); - } - } else { - - this.refreshActiveData("filter"); - } - - this.scrollHorizontal(left); - }; - - //choose the path to refresh data after a sorter update - - RowManager.prototype.sorterRefresh = function (loadOrignalData) { - - var table = this.table, - options = this.table.options, - left = this.scrollLeft; - - if (options.ajaxSorting) { - - if ((options.pagination == "remote" || options.progressiveLoad) && table.modExists("page")) { - - table.modules.page.reset(true); - - table.modules.page.setPage(1).then(function () {}).catch(function () {}); - } else if (options.ajaxProgressiveLoad) { - - table.modules.ajax.loadData().then(function () {}).catch(function () {}); - } else { - - //assume data is url, make ajax call to url to get data - - this._genRemoteRequest(); - } - } else { - - this.refreshActiveData(loadOrignalData ? "filter" : "sort"); - } - - this.scrollHorizontal(left); - }; - - RowManager.prototype.scrollHorizontal = function (left) { - - this.scrollLeft = left; - - this.element.scrollLeft = left; - - if (this.table.options.groupBy) { - - this.table.modules.groupRows.scrollHeaders(left); - } - - if (this.table.modExists("columnCalcs")) { - - this.table.modules.columnCalcs.scrollHorizontal(left); - } - }; - - //set active data set - - 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) { - - if (!this.redrawBlockRestoreConfig || cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage)) { - - this.redrawBlockRestoreConfig = { - - stage: stage, - - skipStage: skipStage, - - renderInPosition: renderInPosition - - }; - } - - return; - } else { - - if (self.table.modExists("edit")) { - - self.table.modules.edit.cancelEdit(); - } - - if (!stage) { - - stage = "all"; - } - - if (table.options.selectable && !table.options.selectablePersistence && table.modExists("selectRow")) { - - table.modules.selectRow.deselectRows(); - } - - //cascade through data refresh stages - - switch (stage) { - - case "all": - - case "filter": - - if (!skipStage) { - - if (table.modExists("filter")) { - - self.setActiveRows(table.modules.filter.filter(self.rows)); - } else { - - self.setActiveRows(self.rows.slice(0)); - } - } else { - - skipStage = false; - } - - case "sort": - - if (!skipStage) { - - if (table.modExists("sort")) { - - table.modules.sort.sort(this.activeRows); - } - } else { - - skipStage = false; - } - - //regenerate row numbers for row number formatter if in use - - this.regenerateRowNumbers(); - - //generic stage to allow for pipeline trigger after the data manipulation stage - - case "display": - - this.resetDisplayRows(); - - case "freeze": - - if (!skipStage) { - - if (this.table.modExists("frozenRows")) { - - if (table.modules.frozenRows.isFrozen()) { - - if (!table.modules.frozenRows.getDisplayIndex()) { - - table.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex()); - } - - displayIndex = table.modules.frozenRows.getDisplayIndex(); - - displayIndex = self.setDisplayRows(table.modules.frozenRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex); - - if (displayIndex !== true) { - - table.modules.frozenRows.setDisplayIndex(displayIndex); - } - } - } - } else { - - skipStage = false; - } - - case "group": - - if (!skipStage) { - - if (table.options.groupBy && table.modExists("groupRows")) { - - if (!table.modules.groupRows.getDisplayIndex()) { - - table.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex()); - } - - displayIndex = table.modules.groupRows.getDisplayIndex(); - - displayIndex = self.setDisplayRows(table.modules.groupRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex); - - if (displayIndex !== true) { - - table.modules.groupRows.setDisplayIndex(displayIndex); - } - } - } else { - - skipStage = false; - } - - case "tree": - - if (!skipStage) { - - if (table.options.dataTree && table.modExists("dataTree")) { - - if (!table.modules.dataTree.getDisplayIndex()) { - - table.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex()); - } - - displayIndex = table.modules.dataTree.getDisplayIndex(); - - displayIndex = self.setDisplayRows(table.modules.dataTree.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex); - - if (displayIndex !== true) { - - table.modules.dataTree.setDisplayIndex(displayIndex); - } - } - } else { - - skipStage = false; - } - - if (table.options.pagination && table.modExists("page") && !renderInPosition) { - - if (table.modules.page.getMode() == "local") { - - table.modules.page.reset(); - } - } - - case "page": - - if (!skipStage) { - - if (table.options.pagination && table.modExists("page")) { - - if (!table.modules.page.getDisplayIndex()) { - - table.modules.page.setDisplayIndex(this.getNextDisplayIndex()); - } - - displayIndex = table.modules.page.getDisplayIndex(); - - if (table.modules.page.getMode() == "local") { - - table.modules.page.setMaxRows(this.getDisplayRows(displayIndex - 1).length); - } - - displayIndex = self.setDisplayRows(table.modules.page.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex); - - if (displayIndex !== true) { - - table.modules.page.setDisplayIndex(displayIndex); - } - } - } else { - - skipStage = false; - } - - } - - if (Tabulator.prototype.helpers.elVisible(self.element)) { - - if (renderInPosition) { - - self.reRenderInPosition(); - } else { - - self.renderTable(); - - if (table.options.layoutColumnsOnNewData) { - - self.table.columnManager.redraw(true); - } - } - } - - if (table.modExists("columnCalcs")) { - - table.modules.columnCalcs.recalc(this.activeRows); - } - } - }; - - //regenerate row numbers for row number formatter if in use - - RowManager.prototype.regenerateRowNumbers = function () { - var _this14 = this; - - if (this.rowNumColumn) { - - this.activeRows.forEach(function (row) { - - var cell = row.getCell(_this14.rowNumColumn); - - if (cell) { - - cell._generateContents(); - } - }); - } - }; - - RowManager.prototype.setActiveRows = function (activeRows) { - - this.activeRows = activeRows; - - this.activeRowsCount = this.activeRows.length; - }; - - //reset display rows array - - RowManager.prototype.resetDisplayRows = function () { - - this.displayRows = []; - - this.displayRows.push(this.activeRows.slice(0)); - - this.displayRowsCount = this.displayRows[0].length; - - if (this.table.modExists("frozenRows")) { - - this.table.modules.frozenRows.setDisplayIndex(0); - } - - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - - this.table.modules.groupRows.setDisplayIndex(0); - } - - if (this.table.options.pagination && this.table.modExists("page")) { - - this.table.modules.page.setDisplayIndex(0); - } - }; - - RowManager.prototype.getNextDisplayIndex = function () { - - return this.displayRows.length; - }; - - //set display row pipeline data - - RowManager.prototype.setDisplayRows = function (displayRows, index) { - - var output = true; - - if (index && typeof this.displayRows[index] != "undefined") { - - this.displayRows[index] = displayRows; - - output = true; - } else { - - this.displayRows.push(displayRows); - - output = index = this.displayRows.length - 1; - } - - if (index == this.displayRows.length - 1) { - - this.displayRowsCount = this.displayRows[this.displayRows.length - 1].length; - } - - return output; - }; - - RowManager.prototype.getDisplayRows = function (index) { - - if (typeof index == "undefined") { - - return this.displayRows.length ? this.displayRows[this.displayRows.length - 1] : []; - } else { - - return this.displayRows[index] || []; - } - }; - - RowManager.prototype.getVisibleRows = function (viewable) { - - var topEdge = this.element.scrollTop, - bottomEdge = this.element.clientHeight + topEdge, - topFound = false, - topRow = 0, - bottomRow = 0, - rows = this.getDisplayRows(); - - if (viewable) { - - this.getDisplayRows(); - - for (var i = this.vDomTop; i <= this.vDomBottom; i++) { - - if (rows[i]) { - - if (!topFound) { - - if (topEdge - rows[i].getElement().offsetTop >= 0) { - - topRow = i; - } else { - - topFound = true; - - if (bottomEdge - rows[i].getElement().offsetTop >= 0) { - - bottomRow = i; - } else { - - break; - } - } - } else { - - if (bottomEdge - rows[i].getElement().offsetTop >= 0) { - - bottomRow = i; - } else { - - break; - } - } - } - } - } else { - - topRow = this.vDomTop; - - bottomRow = this.vDomBottom; - } - - return rows.slice(topRow, bottomRow + 1); - }; - - //repeat action accross display rows - - RowManager.prototype.displayRowIterator = function (callback) { - - this.displayRows.forEach(callback); - - this.displayRowsCount = this.displayRows[this.displayRows.length - 1].length; - }; - - //return only actual rows (not group headers etc) - - 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(true); - - break; - - default: - - rows = this.rows; - - } - - return rows; - }; - - ///////////////// Table Rendering ///////////////// - - - //trigger rerender of table in current position - - RowManager.prototype.reRenderInPosition = function (callback) { - - if (this.getRenderMode() == "virtual") { - - if (this.redrawBlock) { - - if (callback) { - - callback(); - } else { - - this.redrawBlockRederInPosition = true; - } - } else { - - var scrollTop = this.element.scrollTop; - - var topRow = false; - - var topOffset = false; - - var left = this.scrollLeft; - - var rows = this.getDisplayRows(); - - for (var i = this.vDomTop; i <= this.vDomBottom; i++) { - - if (rows[i]) { - - var diff = scrollTop - rows[i].getElement().offsetTop; - - if (topOffset === false || Math.abs(diff) < topOffset) { - - topOffset = diff; - - topRow = i; - } else { - - break; - } - } - } - - if (callback) { - - callback(); - } - - this._virtualRenderFill(topRow === false ? this.displayRowsCount - 1 : topRow, true, topOffset || 0); - - this.scrollHorizontal(left); - } - } else { - - this.renderTable(); - - if (callback) { - - callback(); - } - } - }; - - RowManager.prototype.setRenderMode = function () { - - if (this.table.options.virtualDom) { - - this.renderMode = "virtual"; - - if (this.table.element.clientHeight || this.table.options.height) { - - this.fixedHeight = true; - } else { - - this.fixedHeight = false; - } - } else { - - this.renderMode = "classic"; - } - }; - - RowManager.prototype.getRenderMode = function () { - - return this.renderMode; - }; - - RowManager.prototype.renderTable = function () { - - this.table.options.renderStarted.call(this.table); - - this.element.scrollTop = 0; - - switch (this.renderMode) { - - case "classic": - - this._simpleRender(); - - break; - - case "virtual": - - this._virtualRenderFill(); - - break; - - } - - if (this.firstRender) { - - if (this.displayRowsCount) { - - this.firstRender = false; - - this.table.modules.layout.layout(); - } else { - - this.renderEmptyScroll(); - } - } - - if (this.table.modExists("frozenColumns")) { - - this.table.modules.frozenColumns.layout(); - } - - if (!this.displayRowsCount) { - - if (this.table.options.placeholder) { - - this.table.options.placeholder.setAttribute("tabulator-render-mode", this.renderMode); - - this.getElement().appendChild(this.table.options.placeholder); - - this.table.options.placeholder.style.width = this.table.columnManager.getWidth() + "px"; - } - } - - this.table.options.renderComplete.call(this.table); - }; - - //simple render on heightless table - - RowManager.prototype._simpleRender = function () { - - this._clearVirtualDom(); - - if (this.displayRowsCount) { - - this.checkClassicModeGroupHeaderWidth(); - } else { - - this.renderEmptyScroll(); - } - }; - - RowManager.prototype.checkClassicModeGroupHeaderWidth = function () { - - var self = this, - element = this.tableElement, - onlyGroupHeaders = true; - - self.getDisplayRows().forEach(function (row, index) { - - self.styleRow(row, index); - - element.appendChild(row.getElement()); - - row.initialize(true); - - if (row.type !== "group") { - - onlyGroupHeaders = false; - } - }); - - if (onlyGroupHeaders) { - - element.style.minWidth = self.table.columnManager.getWidth() + "px"; - } else { - - element.style.minWidth = ""; - } - }; - - //show scrollbars on empty table div - - RowManager.prototype.renderEmptyScroll = function () { - - if (this.table.options.placeholder) { - - 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"; - } - }; - - RowManager.prototype._clearVirtualDom = function () { - - var element = this.tableElement; - - if (this.table.options.placeholder && this.table.options.placeholder.parentNode) { - - this.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder); - } - - // element.children.detach(); - - while (element.firstChild) { - element.removeChild(element.firstChild); - }element.style.paddingTop = ""; - - element.style.paddingBottom = ""; - - element.style.minWidth = ""; - - element.style.minHeight = ""; - - element.style.display = ""; - - element.style.visibility = ""; - - this.scrollTop = 0; - - this.scrollLeft = 0; - - this.vDomTop = 0; - - this.vDomBottom = 0; - - this.vDomTopPad = 0; - - this.vDomBottomPad = 0; - }; - - RowManager.prototype.styleRow = function (row, index) { - - var rowEl = row.getElement(); - - if (index % 2) { - - rowEl.classList.add("tabulator-row-even"); - - rowEl.classList.remove("tabulator-row-odd"); - } else { - - rowEl.classList.add("tabulator-row-odd"); - - rowEl.classList.remove("tabulator-row-even"); - } - }; - - //full virtual render - - RowManager.prototype._virtualRenderFill = function (position, forceMove, offset) { - - var self = this, - element = self.tableElement, - holder = self.element, - topPad = 0, - rowsHeight = 0, - topPadHeight = 0, - i = 0, - onlyGroupHeaders = true, - rows = self.getDisplayRows(); - - position = position || 0; - - offset = offset || 0; - - if (!position) { - - self._clearVirtualDom(); - } else { - - while (element.firstChild) { - element.removeChild(element.firstChild); - } //check if position is too close to bottom of table - - var heightOccupied = (self.displayRowsCount - position + 1) * self.vDomRowHeight; - - if (heightOccupied < self.height) { - - position -= Math.ceil((self.height - heightOccupied) / self.vDomRowHeight); - - if (position < 0) { - - position = 0; - } - } - - //calculate initial pad - - topPad = Math.min(Math.max(Math.floor(self.vDomWindowBuffer / self.vDomRowHeight), self.vDomWindowMinMarginRows), position); - - position -= topPad; - } - - if (self.displayRowsCount && Tabulator.prototype.helpers.elVisible(self.element)) { - - self.vDomTop = position; - - self.vDomBottom = position - 1; - - while ((rowsHeight <= self.height + self.vDomWindowBuffer || i < self.vDomWindowMinTotalRows) && self.vDomBottom < self.displayRowsCount - 1) { - - var index = self.vDomBottom + 1, - row = rows[index], - rowHeight = 0; - - self.styleRow(row, index); - - element.appendChild(row.getElement()); - - if (!row.initialized) { - - row.initialize(true); - } else { - - if (!row.heightInitialized) { - - row.normalizeHeight(true); - } - } - - rowHeight = row.getHeight(); - - if (i < topPad) { - - topPadHeight += rowHeight; - } else { - - rowsHeight += rowHeight; - } - - if (rowHeight > this.vDomWindowBuffer) { - - this.vDomWindowBuffer = rowHeight * 2; - } - - if (row.type !== "group") { - - onlyGroupHeaders = false; - } - - self.vDomBottom++; - - i++; - } - - if (!position) { - - this.vDomTopPad = 0; - - //adjust rowheight to match average of rendered elements - - self.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / i); - - self.vDomBottomPad = self.vDomRowHeight * (self.displayRowsCount - self.vDomBottom - 1); - - self.vDomScrollHeight = topPadHeight + rowsHeight + self.vDomBottomPad - self.height; - } else { - - self.vDomTopPad = !forceMove ? self.scrollTop - topPadHeight : self.vDomRowHeight * this.vDomTop + offset; - - self.vDomBottomPad = self.vDomBottom == self.displayRowsCount - 1 ? 0 : Math.max(self.vDomScrollHeight - self.vDomTopPad - rowsHeight - topPadHeight, 0); - } - - element.style.paddingTop = self.vDomTopPad + "px"; - - element.style.paddingBottom = self.vDomBottomPad + "px"; - - if (forceMove) { - - this.scrollTop = self.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); - - //adjust for horizontal scrollbar if present (and not at top of table) - - if (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 ? self.table.columnManager.getWidth() + "px" : ""; - - if (self.table.options.groupBy) { - - if (self.table.modules.layout.getMode() != "fitDataFill" && self.displayRowsCount == self.table.modules.groupRows.countGroups()) { - - self.tableElement.style.minWidth = self.table.columnManager.getWidth(); - } - } - } else { - - this.renderEmptyScroll(); - } - - if (!this.fixedHeight) { - - this.adjustTableSize(); - } - }; - - //handle vertical scrolling - - RowManager.prototype.scrollVertical = function (dir) { - - var topDiff = this.scrollTop - this.vDomScrollPosTop; - - var bottomDiff = this.scrollTop - this.vDomScrollPosBottom; - - var margin = this.vDomWindowBuffer * 2; - - if (-topDiff > margin || bottomDiff > margin) { - - //if big scroll redraw table; - - var left = this.scrollLeft; - - this._virtualRenderFill(Math.floor(this.element.scrollTop / this.element.scrollHeight * this.displayRowsCount)); - - this.scrollHorizontal(left); - } else { - - if (dir) { - - //scrolling up - - if (topDiff < 0) { - - this._addTopRow(-topDiff); - } - - if (bottomDiff < 0) { - - //hide bottom row if needed - - if (this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer) { - - this._removeBottomRow(-bottomDiff); - } else { - - this.vDomScrollPosBottom = this.scrollTop; - } - } - } else { - - //scrolling down - - if (topDiff >= 0) { - - //hide top row if needed - - if (this.scrollTop > this.vDomWindowBuffer) { - - this._removeTopRow(topDiff); - } else { - - this.vDomScrollPosTop = this.scrollTop; - } - } - - if (bottomDiff >= 0) { - - this._addBottomRow(bottomDiff); - } - } - } - }; - - RowManager.prototype._addTopRow = function (topDiff) { - var i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - - - var table = this.tableElement, - rows = this.getDisplayRows(); - - if (this.vDomTop) { - - var index = this.vDomTop - 1, - topRow = rows[index], - topRowHeight = topRow.getHeight() || this.vDomRowHeight; - - //hide top row if needed - - if (topDiff >= topRowHeight) { - - this.styleRow(topRow, index); - - table.insertBefore(topRow.getElement(), table.firstChild); - - if (!topRow.initialized || !topRow.heightInitialized) { - - this.vDomTopNewRows.push(topRow); - - if (!topRow.heightInitialized) { - - topRow.clearCellHeight(); - } - } - - topRow.initialize(); - - this.vDomTopPad -= topRowHeight; - - if (this.vDomTopPad < 0) { - - this.vDomTopPad = index * this.vDomRowHeight; - } - - if (!index) { - - this.vDomTopPad = 0; - } - - table.style.paddingTop = this.vDomTopPad + "px"; - - this.vDomScrollPosTop -= topRowHeight; - - this.vDomTop--; - } - - topDiff = -(this.scrollTop - this.vDomScrollPosTop); - - if (topRow.getHeight() > this.vDomWindowBuffer) { - - this.vDomWindowBuffer = topRow.getHeight() * 2; - } - - if (i < this.vDomMaxRenderChain && this.vDomTop && topDiff >= (rows[this.vDomTop - 1].getHeight() || this.vDomRowHeight)) { - - this._addTopRow(topDiff, i + 1); - } else { - - 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 && arguments[1] !== undefined ? arguments[1] : 0; - - - var table = this.tableElement, - rows = this.getDisplayRows(); - - if (this.vDomBottom < this.displayRowsCount - 1) { - - var index = this.vDomBottom + 1, - bottomRow = rows[index], - bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight; - - //hide bottom row if needed - - if (bottomDiff >= bottomRowHeight) { - - this.styleRow(bottomRow, index); - - table.appendChild(bottomRow.getElement()); - - if (!bottomRow.initialized || !bottomRow.heightInitialized) { - - this.vDomBottomNewRows.push(bottomRow); - - if (!bottomRow.heightInitialized) { - - bottomRow.clearCellHeight(); - } - } - - bottomRow.initialize(); - - this.vDomBottomPad -= bottomRowHeight; - - if (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; - - if (bottomRow.getHeight() > this.vDomWindowBuffer) { - - this.vDomWindowBuffer = bottomRow.getHeight() * 2; - } - - if (i < this.vDomMaxRenderChain && this.vDomBottom < this.displayRowsCount - 1 && bottomDiff >= (rows[this.vDomBottom + 1].getHeight() || this.vDomRowHeight)) { - - this._addBottomRow(bottomDiff, i + 1); - } else { - - 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(); - - if (rowEl.parentNode) { - - rowEl.parentNode.removeChild(rowEl); - } - - this.vDomBottomPad += bottomRowHeight; - - if (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; - }; - - //normalize height of active rows - - RowManager.prototype.normalizeHeight = function () { - - this.activeRows.forEach(function (row) { - - row.normalizeHeight(); - }); - }; - - //adjust the height of the table holder to fit in the Tabulator element - - RowManager.prototype.adjustTableSize = function () { - - var initialHeight = this.element.clientHeight, - modExists; - - if (this.renderMode === "virtual") { - - 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)"; - - this.element.style.height = "calc(100% - " + otherHeight + "px)"; - - this.element.style.maxHeight = "calc(100% - " + otherHeight + "px)"; - } else { - - 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; - - //check if the table has changed size when dealing with variable height tables - - if (!this.fixedHeight && initialHeight != this.element.clientHeight) { - - modExists = this.table.modExists("resizeTable"); - - if (modExists && !this.table.modules.resizeTable.autoResize || !modExists) { - - this.redraw(); - } - } - } - }; - - //renitialize all rows - - RowManager.prototype.reinitialize = function () { - - this.rows.forEach(function (row) { - - row.reinitialize(); - }); - }; - - //prevent table from being redrawn - - RowManager.prototype.blockRedraw = function () { - - this.redrawBlock = true; - - this.redrawBlockRestoreConfig = false; - }; - - //restore table redrawing - - RowManager.prototype.restoreRedraw = function () { - - this.redrawBlock = false; - - if (this.redrawBlockRestoreConfig) { - - this.refreshActiveData(this.redrawBlockRestoreConfig.stage, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition); - - this.redrawBlockRestoreConfig = false; - } else { - - if (this.redrawBlockRederInPosition) { - - this.reRenderInPosition(); - } - } - - this.redrawBlockRederInPosition = false; - }; - - //redraw table - - RowManager.prototype.redraw = function (force) { - - var pos = 0, - left = this.scrollLeft; - - this.adjustTableSize(); - - this.table.tableWidth = this.table.element.clientWidth; - - if (!force) { - - if (this.renderMode == "classic") { - - if (this.table.options.groupBy) { - - this.refreshActiveData("group", false, false); - } else { - - this._simpleRender(); - } - } else { - - this.reRenderInPosition(); - - this.scrollHorizontal(left); - } - - if (!this.displayRowsCount) { - - if (this.table.options.placeholder) { - - this.getElement().appendChild(this.table.options.placeholder); - } - } - } else { - - this.renderTable(); - } - }; - - RowManager.prototype.resetScroll = function () { - - this.element.scrollLeft = 0; - - this.element.scrollTop = 0; - - if (this.table.browser === "ie") { - - var event = document.createEvent("Event"); - - event.initEvent("scroll", false, true); - - this.element.dispatchEvent(event); - } else { - - this.element.dispatchEvent(new Event('scroll')); - } - }; - - //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)) { - - this._row.table.modules.dataTree.toggleRow(this._row); - } - }; - - RowComponent.prototype.getTreeParent = function () { - - if (this._row.table.modExists("dataTree", true)) { - - return this._row.table.modules.dataTree.getTreeParent(this._row); - } - - return false; - }; - - RowComponent.prototype.getTreeChildren = function () { - - if (this._row.table.modExists("dataTree", true)) { - - return this._row.table.modules.dataTree.getTreeChildren(this._row); - } - - return false; - }; - - RowComponent.prototype.addTreeChild = function (data, pos, index) { - - if (this._row.table.modExists("dataTree", true)) { - - return this._row.table.modules.dataTree.addTreeChildRow(this._row, data, pos, index); - } - - return false; - }; - - 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 && arguments[2] !== undefined ? arguments[2] : "row"; - - - this.table = parent.table; - - this.parent = parent; - - this.data = {}; - - this.type = type; //type of element - - this.element = this.createElement(); - - this.modules = {}; //hold module variables; - - this.cells = []; - - this.height = 0; //hold element height - - this.heightStyled = ""; //hold element height prestyled to improve render efficiency - - this.manualHeight = false; //user has manually set row height - - this.outerHeight = 0; //holde lements outer height - - this.initialized = false; //element has been rendered - - this.heightInitialized = false; //element has resized cells to fit - - - this.component = null; - - this.setData(data); - - this.generateElement(); - }; - - Row.prototype.createElement = function () { - - var el = document.createElement("div"); - - el.classList.add("tabulator-row"); - - el.setAttribute("role", "row"); - - return el; - }; - - Row.prototype.getElement = function () { - - return this.element; - }; - - Row.prototype.detachElement = function () { - - if (this.element && this.element.parentNode) { - - this.element.parentNode.removeChild(this.element); - } - }; - - Row.prototype.generateElement = function () { - - var self = this, - dblTap, - tapHold, - tap; - - //set row selection characteristics - - if (self.table.options.selectable !== false && self.table.modExists("selectRow")) { - - self.table.modules.selectRow.initializeRow(this); - } - - //setup movable rows - - if (self.table.options.movableRows !== false && self.table.modExists("moveRow")) { - - self.table.modules.moveRow.initializeRow(this); - } - - //setup data tree - - if (self.table.options.dataTree !== false && self.table.modExists("dataTree")) { - - self.table.modules.dataTree.initializeRow(this); - } - - //setup column colapse container - - if (self.table.options.responsiveLayout === "collapse" && self.table.modExists("responsiveLayout")) { - - self.table.modules.responsiveLayout.initializeRow(this); - } - - //set column menu - - if (self.table.options.rowContextMenu && this.table.modExists("menu")) { - - self.table.modules.menu.initializeRow(this); - } - - //handle row click events - - if (self.table.options.rowClick) { - - self.element.addEventListener("click", function (e) { - - self.table.options.rowClick(e, self.getComponent()); - }); - } - - if (self.table.options.rowDblClick) { - - self.element.addEventListener("dblclick", function (e) { - - self.table.options.rowDblClick(e, self.getComponent()); - }); - } - - if (self.table.options.rowContext) { - - self.element.addEventListener("contextmenu", function (e) { - - self.table.options.rowContext(e, self.getComponent()); - }); - } - - //handle mouse events - - if (self.table.options.rowMouseEnter) { - - self.element.addEventListener("mouseenter", function (e) { - - self.table.options.rowMouseEnter(e, self.getComponent()); - }); - } - - if (self.table.options.rowMouseLeave) { - - self.element.addEventListener("mouseleave", function (e) { - - self.table.options.rowMouseLeave(e, self.getComponent()); - }); - } - - if (self.table.options.rowMouseOver) { - - self.element.addEventListener("mouseover", function (e) { - - self.table.options.rowMouseOver(e, self.getComponent()); - }); - } - - if (self.table.options.rowMouseOut) { - - self.element.addEventListener("mouseout", function (e) { - - self.table.options.rowMouseOut(e, self.getComponent()); - }); - } - - if (self.table.options.rowMouseMove) { - - self.element.addEventListener("mousemove", function (e) { - - self.table.options.rowMouseMove(e, self.getComponent()); - }); - } - - if (self.table.options.rowTap) { - - tap = false; - - self.element.addEventListener("touchstart", function (e) { - - tap = true; - }, { passive: true }); - - self.element.addEventListener("touchend", function (e) { - - if (tap) { - - self.table.options.rowTap(e, self.getComponent()); - } - - tap = false; - }); - } - - if (self.table.options.rowDblTap) { - - dblTap = null; - - self.element.addEventListener("touchend", function (e) { - - if (dblTap) { - - clearTimeout(dblTap); - - dblTap = null; - - self.table.options.rowDblTap(e, self.getComponent()); - } else { - - dblTap = setTimeout(function () { - - clearTimeout(dblTap); - - dblTap = null; - }, 300); - } - }); - } - - if (self.table.options.rowTapHold) { - - tapHold = null; - - self.element.addEventListener("touchstart", function (e) { - - clearTimeout(tapHold); - - tapHold = setTimeout(function () { - - clearTimeout(tapHold); - - tapHold = null; - - tap = false; - - self.table.options.rowTapHold(e, self.getComponent()); - }, 1000); - }, { passive: true }); - - self.element.addEventListener("touchend", function (e) { - - clearTimeout(tapHold); - - tapHold = null; - }); - } - }; - - Row.prototype.generateCells = function () { - - this.cells = this.table.columnManager.generateCells(this); - }; - - //functions to setup on first render - - Row.prototype.initialize = function (force) { - - var self = this; - - if (!self.initialized || force) { - - self.deleteCells(); - - while (self.element.firstChild) { - self.element.removeChild(self.element.firstChild); - } //handle frozen cells - - if (this.table.modExists("frozenColumns")) { - - this.table.modules.frozenColumns.layoutRow(this); - } - - this.generateCells(); - - self.cells.forEach(function (cell) { - - self.element.appendChild(cell.getElement()); - - cell.cellRendered(); - }); - - if (force) { - - self.normalizeHeight(); - } - - //setup movable rows - - if (self.table.options.dataTree && self.table.modExists("dataTree")) { - - self.table.modules.dataTree.layoutRow(this); - } - - //setup column colapse container - - if (self.table.options.responsiveLayout === "collapse" && self.table.modExists("responsiveLayout")) { - - self.table.modules.responsiveLayout.layoutRow(this); - } - - if (self.table.options.rowFormatter) { - - self.table.options.rowFormatter(self.getComponent()); - } - - //set resizable handles - - if (self.table.options.resizableRows && self.table.modExists("resizeRows")) { - - self.table.modules.resizeRows.initializeRow(self); - } - - self.initialized = true; - } - }; - - Row.prototype.reinitializeHeight = function () { - - this.heightInitialized = false; - - if (this.element.offsetParent !== null) { - - this.normalizeHeight(true); - } - }; - - Row.prototype.reinitialize = function () { - - this.initialized = false; - - this.heightInitialized = false; - - if (!this.manualHeight) { - - this.height = 0; - - this.heightStyled = ""; - } - - if (this.element.offsetParent !== null) { - - this.initialize(true); - } - }; - - //get heights when doing bulk row style calcs in virtual DOM - - 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(); - - if (height > maxHeight) { - - maxHeight = height; - } - }); - - if (force) { - - this.height = Math.max(maxHeight, minHeight); - } else { - - this.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight); - } - - this.heightStyled = this.height ? this.height + "px" : ""; - - this.outerHeight = this.element.offsetHeight; - }; - - //set of cells - - Row.prototype.setCellHeight = function () { - - this.cells.forEach(function (cell) { - - cell.setHeight(); - }); - - this.heightInitialized = true; - }; - - Row.prototype.clearCellHeight = function () { - - this.cells.forEach(function (cell) { - - cell.clearHeight(); - }); - }; - - //normalize the height of elements in the row - - Row.prototype.normalizeHeight = function (force) { - - if (force) { - - this.clearCellHeight(); - } - - this.calcHeight(force); - - this.setCellHeight(); - }; - - // Row.prototype.setHeight = function(height){ - - // this.height = height; - - - // this.setCellHeight(); - - // }; - - - //set height of rows - - Row.prototype.setHeight = function (height, force) { - - if (this.height != height || force) { - - this.manualHeight = true; - - this.height = height; - - this.heightStyled = height ? height + "px" : ""; - - this.setCellHeight(); - - // this.outerHeight = this.element.outerHeight(); - - this.outerHeight = this.element.offsetHeight; - } - }; - - //return rows outer height - - Row.prototype.getHeight = function () { - - return this.outerHeight; - }; - - //return rows outer Width - - Row.prototype.getWidth = function () { - - return this.element.offsetWidth; - }; - - //////////////// Cell Management ///////////////// - - - Row.prototype.deleteCell = function (cell) { - - var index = this.cells.indexOf(cell); - - if (index > -1) { - - this.cells.splice(index, 1); - } - }; - - //////////////// Data Management ///////////////// - - - Row.prototype.setData = function (data) { - - if (this.table.modExists("mutator")) { - - data = this.table.modules.mutator.transformRow(data, "data"); - } - - this.data = data; - - if (this.table.options.reactiveData && this.table.modExists("reactiveData", true)) { - - this.table.modules.reactiveData.watchRow(this); - } - }; - - //update the rows data - - Row.prototype.updateData = function (updatedData) { - var _this15 = this; - - var visible = Tabulator.prototype.helpers.elVisible(this.element), - tempData = {}, - newRowData; - - return new Promise(function (resolve, reject) { - - if (typeof updatedData === "string") { - - updatedData = JSON.parse(updatedData); - } - - if (_this15.table.options.reactiveData && _this15.table.modExists("reactiveData", true)) { - - _this15.table.modules.reactiveData.block(); - } - - //mutate incomming data if needed - - if (_this15.table.modExists("mutator")) { - - tempData = Object.assign(tempData, _this15.data); - - tempData = Object.assign(tempData, updatedData); - - newRowData = _this15.table.modules.mutator.transformRow(tempData, "data", updatedData); - } else { - - newRowData = updatedData; - } - - //set data - - for (var attrname in newRowData) { - - _this15.data[attrname] = newRowData[attrname]; - } - - 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 = _this15.table.columnManager.getColumnsByFieldRoot(attrname); - - columns.forEach(function (column) { - - var cell = _this15.getCell(column.getField()); - - if (cell) { - - var value = column.getFieldValue(newRowData); - - if (cell.getValue() != value) { - - cell.setValueProcessData(value); - - if (visible) { - - cell.cellRendered(); - } - } - } - }); - } - - //Partial reinitialization if visible - - if (visible) { - - _this15.normalizeHeight(true); - - if (_this15.table.options.rowFormatter) { - - _this15.table.options.rowFormatter(_this15.getComponent()); - } - } else { - - _this15.initialized = false; - - _this15.height = 0; - - _this15.heightStyled = ""; - } - - 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(); - - - _this15.table.options.rowUpdated.call(_this15.table, _this15.getComponent()); - - resolve(); - }); - }; - - Row.prototype.getData = function (transform) { - - var self = this; - - if (transform) { - - if (self.table.modExists("accessor")) { - - return self.table.modules.accessor.transformRow(self.data, transform); - } - } else { - - return this.data; - } - }; - - Row.prototype.getCell = function (column) { - - var match = false; - - column = this.table.columnManager.findColumn(column); - - match = this.cells.find(function (cell) { - - return cell.column === column; - }); - - return match; - }; - - Row.prototype.getCellIndex = function (findCell) { - - return this.cells.findIndex(function (cell) { - - return cell === findCell; - }); - }; - - Row.prototype.findNextEditableCell = function (index) { - - var nextCell = false; - - if (index < this.cells.length - 1) { - - for (var i = index + 1; i < this.cells.length; i++) { - - var cell = this.cells[i]; - - if (cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())) { - - var allowEdit = true; - - if (typeof cell.column.modules.edit.check == "function") { - - allowEdit = cell.column.modules.edit.check(cell.getComponent()); - } - - if (allowEdit) { - - nextCell = cell; - - break; - } - } - } - } - - return nextCell; - }; - - Row.prototype.findPrevEditableCell = function (index) { - - var prevCell = false; - - if (index > 0) { - - for (var i = index - 1; i >= 0; i--) { - - var cell = this.cells[i], - allowEdit = true; - - if (cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())) { - - if (typeof cell.column.modules.edit.check == "function") { - - allowEdit = cell.column.modules.edit.check(cell.getComponent()); - } - - if (allowEdit) { - - prevCell = cell; - - break; - } - } - } - } - - return prevCell; - }; - - Row.prototype.getCells = function () { - - return this.cells; - }; - - Row.prototype.nextRow = function () { - - var row = this.table.rowManager.nextDisplayRow(this, true); - - return row || false; - }; - - Row.prototype.prevRow = function () { - - var row = this.table.rowManager.prevDisplayRow(this, true); - - return row || false; - }; - - Row.prototype.moveToRow = function (to, before) { - - var toRow = this.table.rowManager.findRow(to); - - if (toRow) { - - this.table.rowManager.moveRowActual(this, toRow, !before); - - this.table.rowManager.refreshActiveData("display", false, true); - } else { - - console.warn("Move Error - No matching row found:", to); - } - }; - - Row.prototype.validate = function () { - - var invalid = []; - - this.cells.forEach(function (cell) { - - if (!cell.validate()) { - - invalid.push(cell.getComponent()); - } - }); - - return invalid.length ? invalid : true; - }; - - ///////////////////// Actions ///////////////////// - - - Row.prototype.delete = function () { - var _this16 = this; - - return new Promise(function (resolve, reject) { - - var index, rows; - - if (_this16.table.options.history && _this16.table.modExists("history")) { - - 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 = _this16.table.rowManager.getRowIndex(_this16); - - if (index) { - - 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); - - //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); - - // } - - - //remove any reactive data watchers from row object - - if (this.table.options.reactiveData && this.table.modExists("reactiveData", true)) {} - - // this.table.modules.reactiveData.unwatchRow(this); - - //remove from group - - if (this.modules.group) { - - this.modules.group.removeRow(this); - } - - this.table.rowManager.deleteRow(this, blockRedraw); - - this.deleteCells(); - - this.initialized = false; - - this.heightInitialized = false; - - if (this.table.options.dataTree && this.table.modExists("dataTree", true)) { - - this.table.modules.dataTree.rowDelete(this); - } - - //recalc column calculations if present - - if (this.table.modExists("columnCalcs")) { - - 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.deleteCells = function () { - - var cellCount = this.cells.length; - - for (var _i5 = 0; _i5 < cellCount; _i5++) { - - this.cells[0].delete(); - } - }; - - Row.prototype.wipe = function () { - - this.deleteCells(); - - while (this.element.firstChild) { - this.element.removeChild(this.element.firstChild); - }this.element = false; - - this.modules = {}; - - if (this.element.parentNode) { - - this.element.parentNode.removeChild(this.element); - } - }; - - Row.prototype.getGroup = function () { - - return this.modules.group || false; - }; - - //////////////// Object Generation ///////////////// - - Row.prototype.getComponent = function () { - - if (!this.component) { - - this.component = new RowComponent(this); - } - - return this.component; - }; - - //public row object - - var CellComponent = function CellComponent(cell) { - - this._cell = cell; - }; - - CellComponent.prototype.getValue = function () { - - return this._cell.getValue(); - }; - - CellComponent.prototype.getOldValue = function () { - - return this._cell.getOldValue(); - }; - - CellComponent.prototype.getElement = function () { - - return this._cell.getElement(); - }; - - CellComponent.prototype.getRow = function () { - - return this._cell.row.getComponent(); - }; - - CellComponent.prototype.getData = function () { - - return this._cell.row.getData(); - }; - - CellComponent.prototype.getField = function () { - - return this._cell.column.getField(); - }; - - CellComponent.prototype.getColumn = function () { - - return this._cell.column.getComponent(); - }; - - CellComponent.prototype.setValue = function (value, mutate) { - - if (typeof mutate == "undefined") { - - mutate = true; - } - - this._cell.setValue(value, mutate); - }; - - CellComponent.prototype.restoreOldValue = function () { - - this._cell.setValueActual(this._cell.getOldValue()); - }; - - CellComponent.prototype.edit = function (force) { - - return this._cell.edit(force); - }; - - CellComponent.prototype.cancelEdit = function () { - - this._cell.cancelEdit(); - }; - - CellComponent.prototype.isEdited = function () { - - return !!this._cell.modules.edit && this._cell.modules.edit.edited; - }; - - CellComponent.prototype.clearEdited = function () { - - if (self.table.modExists("edit", true)) { - - this._cell.table.modules.edit.clearEdited(this._cell); - } - }; - - CellComponent.prototype.isValid = function () { - - return this._cell.modules.validate ? !this._cell.modules.validate.invalid : true; - }; - - CellComponent.prototype.validate = function () { - - return this._cell.validate(); - }; - - CellComponent.prototype.clearValidation = function () { - - if (self.table.modExists("validate", true)) { - - this._cell.table.modules.validate.clearValidation(this._cell); - } - }; - - CellComponent.prototype.nav = function () { - - return this._cell.nav(); - }; - - CellComponent.prototype.checkHeight = function () { - - this._cell.checkHeight(); - }; - - CellComponent.prototype.getTable = function () { - - return this._cell.table; - }; - - CellComponent.prototype._getSelf = function () { - - return this._cell; - }; - - var Cell = function Cell(column, row) { - - this.table = column.table; - - this.column = column; - - this.row = row; - - this.element = null; - - this.value = null; - - this.oldValue = null; - - this.modules = {}; - - this.height = null; - - this.width = null; - - this.minWidth = null; - - this.component = null; - - this.build(); - }; - - //////////////// Setup Functions ///////////////// - - - //generate element - - Cell.prototype.build = function () { - - this.generateElement(); - - this.setWidth(); - - this._configureCell(); - - this.setValueActual(this.column.getFieldValue(this.row.data)); - }; - - Cell.prototype.generateElement = function () { - - this.element = document.createElement('div'); - - this.element.className = "tabulator-cell"; - - this.element.setAttribute("role", "gridcell"); - - this.element = this.element; - }; - - Cell.prototype._configureCell = function () { - - var self = this, - cellEvents = self.column.cellEvents, - element = self.element, - field = this.column.getField(), - vertAligns = { - - top: "flex-start", - - bottom: "flex-end", - - middle: "center" - - }, - hozAligns = { - - left: "flex-start", - - right: "flex-end", - - center: "center" - - }; - - //set text alignment - - element.style.textAlign = self.column.hozAlign; - - if (self.column.vertAlign) { - - element.style.display = "inline-flex"; - - element.style.alignItems = vertAligns[self.column.vertAlign] || ""; - - if (self.column.hozAlign) { - - element.style.justifyContent = hozAligns[self.column.hozAlign] || ""; - } - } - - if (field) { - - element.setAttribute("tabulator-field", field); - } - - //add class to cell if needed - - if (self.column.definition.cssClass) { - - var classNames = self.column.definition.cssClass.split(" "); - - classNames.forEach(function (className) { - - element.classList.add(className); - }); - } - - //update tooltip on mouse enter - - if (this.table.options.tooltipGenerationMode === "hover") { - - element.addEventListener("mouseenter", function (e) { - - self._generateTooltip(); - }); - } - - self._bindClickEvents(cellEvents); - - self._bindTouchEvents(cellEvents); - - self._bindMouseEvents(cellEvents); - - if (self.column.modules.edit) { - - self.table.modules.edit.bindEditor(self); - } - - if (self.column.definition.rowHandle && self.table.options.movableRows !== false && self.table.modExists("moveRow")) { - - self.table.modules.moveRow.initializeCell(self); - } - - //hide cell if not visible - - if (!self.column.visible) { - - self.hide(); - } - }; - - Cell.prototype._bindClickEvents = function (cellEvents) { - - var self = this, - element = self.element; - - //set event bindings - - if (cellEvents.cellClick || self.table.options.cellClick) { - - element.addEventListener("click", function (e) { - - var component = self.getComponent(); - - if (cellEvents.cellClick) { - - cellEvents.cellClick.call(self.table, e, component); - } - - if (self.table.options.cellClick) { - - self.table.options.cellClick.call(self.table, e, component); - } - }); - } - - if (cellEvents.cellDblClick || this.table.options.cellDblClick) { - - element.addEventListener("dblclick", function (e) { - - var component = self.getComponent(); - - if (cellEvents.cellDblClick) { - - cellEvents.cellDblClick.call(self.table, e, component); - } - - if (self.table.options.cellDblClick) { - - self.table.options.cellDblClick.call(self.table, e, component); - } - }); - } else { - - element.addEventListener("dblclick", function (e) { - - if (self.table.modExists("edit")) { - - if (self.table.modules.edit.currentCell === self) { - - return; //prevent instant selection of editor content - } - } - - e.preventDefault(); - - try { - - if (document.selection) { - // IE - - var range = document.body.createTextRange(); - - range.moveToElementText(self.element); - - range.select(); - } else if (window.getSelection) { - - var range = document.createRange(); - - range.selectNode(self.element); - - window.getSelection().removeAllRanges(); - - window.getSelection().addRange(range); - } - } catch (e) {} - }); - } - - if (cellEvents.cellContext || this.table.options.cellContext) { - - element.addEventListener("contextmenu", function (e) { - - var component = self.getComponent(); - - if (cellEvents.cellContext) { - - cellEvents.cellContext.call(self.table, e, component); - } - - if (self.table.options.cellContext) { - - self.table.options.cellContext.call(self.table, e, component); - } - }); - } - }; - - Cell.prototype._bindMouseEvents = function (cellEvents) { - - var self = this, - element = self.element; - - if (cellEvents.cellMouseEnter || self.table.options.cellMouseEnter) { - - element.addEventListener("mouseenter", function (e) { - - var component = self.getComponent(); - - if (cellEvents.cellMouseEnter) { - - cellEvents.cellMouseEnter.call(self.table, e, component); - } - - if (self.table.options.cellMouseEnter) { - - self.table.options.cellMouseEnter.call(self.table, e, component); - } - }); - } - - if (cellEvents.cellMouseLeave || self.table.options.cellMouseLeave) { - - element.addEventListener("mouseleave", function (e) { - - var component = self.getComponent(); - - if (cellEvents.cellMouseLeave) { - - cellEvents.cellMouseLeave.call(self.table, e, component); - } - - if (self.table.options.cellMouseLeave) { - - self.table.options.cellMouseLeave.call(self.table, e, component); - } - }); - } - - if (cellEvents.cellMouseOver || self.table.options.cellMouseOver) { - - element.addEventListener("mouseover", function (e) { - - var component = self.getComponent(); - - if (cellEvents.cellMouseOver) { - - cellEvents.cellMouseOver.call(self.table, e, component); - } - - if (self.table.options.cellMouseOver) { - - self.table.options.cellMouseOver.call(self.table, e, component); - } - }); - } - - if (cellEvents.cellMouseOut || self.table.options.cellMouseOut) { - - element.addEventListener("mouseout", function (e) { - - var component = self.getComponent(); - - if (cellEvents.cellMouseOut) { - - cellEvents.cellMouseOut.call(self.table, e, component); - } - - if (self.table.options.cellMouseOut) { - - self.table.options.cellMouseOut.call(self.table, e, component); - } - }); - } - - if (cellEvents.cellMouseMove || self.table.options.cellMouseMove) { - - element.addEventListener("mousemove", function (e) { - - var component = self.getComponent(); - - if (cellEvents.cellMouseMove) { - - cellEvents.cellMouseMove.call(self.table, e, component); - } - - if (self.table.options.cellMouseMove) { - - self.table.options.cellMouseMove.call(self.table, e, component); - } - }); - } - }; - - Cell.prototype._bindTouchEvents = function (cellEvents) { - - var self = this, - element = self.element, - dblTap, - tapHold, - tap; - - if (cellEvents.cellTap || this.table.options.cellTap) { - - tap = false; - - element.addEventListener("touchstart", function (e) { - - tap = true; - }, { passive: true }); - - element.addEventListener("touchend", function (e) { - - if (tap) { - - var component = self.getComponent(); - - if (cellEvents.cellTap) { - - cellEvents.cellTap.call(self.table, e, component); - } - - if (self.table.options.cellTap) { - - self.table.options.cellTap.call(self.table, e, component); - } - } - - tap = false; - }); - } - - if (cellEvents.cellDblTap || this.table.options.cellDblTap) { - - dblTap = null; - - element.addEventListener("touchend", function (e) { - - if (dblTap) { - - clearTimeout(dblTap); - - dblTap = null; - - var component = self.getComponent(); - - if (cellEvents.cellDblTap) { - - cellEvents.cellDblTap.call(self.table, e, component); - } - - if (self.table.options.cellDblTap) { - - self.table.options.cellDblTap.call(self.table, e, component); - } - } else { - - dblTap = setTimeout(function () { - - clearTimeout(dblTap); - - dblTap = null; - }, 300); - } - }); - } - - if (cellEvents.cellTapHold || this.table.options.cellTapHold) { - - tapHold = null; - - element.addEventListener("touchstart", function (e) { - - clearTimeout(tapHold); - - tapHold = setTimeout(function () { - - clearTimeout(tapHold); - - tapHold = null; - - tap = false; - - var component = self.getComponent(); - - if (cellEvents.cellTapHold) { - - cellEvents.cellTapHold.call(self.table, e, component); - } - - if (self.table.options.cellTapHold) { - - self.table.options.cellTapHold.call(self.table, e, component); - } - }, 1000); - }, { passive: true }); - - element.addEventListener("touchend", function (e) { - - clearTimeout(tapHold); - - tapHold = null; - }); - } - }; - - //generate cell contents - - Cell.prototype._generateContents = function () { - - var val; - - if (this.table.modExists("format")) { - - val = this.table.modules.format.formatValue(this); - } else { - - val = this.element.innerHTML = this.value; - } - - switch (typeof val === 'undefined' ? 'undefined' : _typeof(val)) { - - case "object": - - if (val instanceof Node) { - - //clear previous cell contents - - while (this.element.firstChild) { - this.element.removeChild(this.element.firstChild); - }this.element.appendChild(val); - } else { - - this.element.innerHTML = ""; - - if (val != null) { - - console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", val); - } - } - - break; - - case "undefined": - - case "null": - - this.element.innerHTML = ""; - - break; - - default: - - this.element.innerHTML = val; - - } - }; - - Cell.prototype.cellRendered = function () { - - if (this.table.modExists("format") && this.table.modules.format.cellRendered) { - - this.table.modules.format.cellRendered(this); - } - }; - - //generate tooltip text - - Cell.prototype._generateTooltip = function () { - - var tooltip = this.column.tooltip; - - if (tooltip) { - - if (tooltip === true) { - - tooltip = this.value; - } else if (typeof tooltip == "function") { - - tooltip = tooltip(this.getComponent()); - - if (tooltip === false) { - - tooltip = ""; - } - } - - if (typeof tooltip === "undefined") { - - tooltip = ""; - } - - this.element.setAttribute("title", tooltip); - } else { - - this.element.setAttribute("title", ""); - } - }; - - //////////////////// Getters //////////////////// - - Cell.prototype.getElement = function () { - - return this.element; - }; - - Cell.prototype.getValue = function () { - - return this.value; - }; - - Cell.prototype.getOldValue = function () { - - return this.oldValue; - }; - - //////////////////// Actions //////////////////// - - - Cell.prototype.setValue = function (value, mutate) { - - var changed = this.setValueProcessData(value, mutate), - component; - - if (changed) { - - if (this.table.options.history && this.table.modExists("history")) { - - this.table.modules.history.action("cellEdit", this, { oldValue: this.oldValue, newValue: this.value }); - } - - component = this.getComponent(); - - if (this.column.cellEvents.cellEdited) { - - this.column.cellEvents.cellEdited.call(this.table, component); - } - - this.cellRendered(); - - this.table.options.cellEdited.call(this.table, component); - - this.table.options.dataEdited.call(this.table, this.table.rowManager.getData()); - } - }; - - Cell.prototype.setValueProcessData = function (value, mutate) { - - var changed = false; - - if (this.value != value) { - - changed = true; - - if (mutate) { - - if (this.column.modules.mutate) { - - value = this.table.modules.mutator.transformCell(this, value); - } - } - } - - this.setValueActual(value); - - if (changed && this.table.modExists("columnCalcs")) { - - if (this.column.definition.topCalc || this.column.definition.bottomCalc) { - - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - - if (this.table.options.columnCalcs == "table" || this.table.options.columnCalcs == "both") { - - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } - - if (this.table.options.columnCalcs != "table") { - - this.table.modules.columnCalcs.recalcRowGroup(this.row); - } - } else { - - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } - } - } - - return changed; - }; - - Cell.prototype.setValueActual = function (value) { - - this.oldValue = this.value; - - this.value = value; - - if (this.table.options.reactiveData && this.table.modExists("reactiveData")) { - - this.table.modules.reactiveData.block(); - } - - this.column.setFieldValue(this.row.data, value); - - if (this.table.options.reactiveData && this.table.modExists("reactiveData")) { - - this.table.modules.reactiveData.unblock(); - } - - this._generateContents(); - - this._generateTooltip(); - - //set resizable handles - - if (this.table.options.resizableColumns && this.table.modExists("resizeColumns")) { - - this.table.modules.resizeColumns.initializeColumn("cell", this.column, this.element); - } - - //set column menu - - if (this.column.definition.contextMenu && this.table.modExists("menu")) { - - this.table.modules.menu.initializeCell(this); - } - - //handle frozen cells - - if (this.table.modExists("frozenColumns")) { - - this.table.modules.frozenColumns.layoutElement(this.element, this.column); - } - }; - - Cell.prototype.setWidth = function () { - - this.width = this.column.width; - - this.element.style.width = this.column.widthStyled; - }; - - Cell.prototype.clearWidth = function () { - - this.width = ""; - - this.element.style.width = ""; - }; - - Cell.prototype.getWidth = function () { - - return this.width || this.element.offsetWidth; - }; - - Cell.prototype.setMinWidth = function () { - - this.minWidth = this.column.minWidth; - - this.element.style.minWidth = this.column.minWidthStyled; - }; - - Cell.prototype.checkHeight = function () { - - // var height = this.element.css("height"); - - this.row.reinitializeHeight(); - }; - - Cell.prototype.clearHeight = function () { - - this.element.style.height = ""; - - this.height = null; - }; - - Cell.prototype.setHeight = function () { - - this.height = this.row.height; - - this.element.style.height = this.row.heightStyled; - }; - - Cell.prototype.getHeight = function () { - - return this.height || this.element.offsetHeight; - }; - - Cell.prototype.show = function () { - - this.element.style.display = ""; - }; - - Cell.prototype.hide = function () { - - this.element.style.display = "none"; - }; - - Cell.prototype.edit = function (force) { - - if (this.table.modExists("edit", true)) { - - return this.table.modules.edit.editCell(this, force); - } - }; - - Cell.prototype.cancelEdit = function () { - - if (this.table.modExists("edit", true)) { - - var editing = this.table.modules.edit.getCurrentCell(); - - if (editing && editing._getSelf() === this) { - - this.table.modules.edit.cancelEdit(); - } else { - - console.warn("Cancel Editor Error - This cell is not currently being edited "); - } - } - }; - - Cell.prototype.validate = function () { - - if (this.column.modules.validate && this.table.modExists("validate", true)) { - - var valid = this.table.modules.validate.validate(this.column.modules.validate, this, this.getValue()); - - return valid === true; - } else { - - return true; - } - }; - - Cell.prototype.delete = function () { - - if (!this.table.rowManager.redrawBlock) { - - this.element.parentNode.removeChild(this.element); - } - - if (this.modules.validate && this.modules.validate.invalid) { - - this.table.modules.validate.clearValidation(this); - } - - if (this.modules.edit && this.modules.edit.edited) { - - this.table.modules.edit.clearEdited(this); - } - - this.element = false; - - this.column.deleteCell(this); - - this.row.deleteCell(this); - - this.calcs = {}; - }; - - //////////////// Navigation ///////////////// - - - Cell.prototype.nav = function () { - - var self = this, - nextCell = false, - index = this.row.getCellIndex(this); - - return { - - next: function next() { - - var nextCell = this.right(), - nextRow; - - if (!nextCell) { - - nextRow = self.table.rowManager.nextDisplayRow(self.row, true); - - if (nextRow) { - - nextCell = nextRow.findNextEditableCell(-1); - - if (nextCell) { - - nextCell.edit(); - - return true; - } - } - } else { - - return true; - } - - return false; - }, - - prev: function prev() { - - var nextCell = this.left(), - prevRow; - - if (!nextCell) { - - prevRow = self.table.rowManager.prevDisplayRow(self.row, true); - - if (prevRow) { - - nextCell = prevRow.findPrevEditableCell(prevRow.cells.length); - - if (nextCell) { - - nextCell.edit(); - - return true; - } - } - } else { - - return true; - } - - return false; - }, - - left: function left() { - - nextCell = self.row.findPrevEditableCell(index); - - if (nextCell) { - - nextCell.edit(); - - return true; - } else { - - return false; - } - }, - - right: function right() { - - nextCell = self.row.findNextEditableCell(index); - - if (nextCell) { - - nextCell.edit(); - - return true; - } else { - - return false; - } - }, - - up: function up() { - - var nextRow = self.table.rowManager.prevDisplayRow(self.row, true); - - if (nextRow) { - - nextRow.cells[index].edit(); - } - }, - - down: function down() { - - var nextRow = self.table.rowManager.nextDisplayRow(self.row, true); - - if (nextRow) { - - nextRow.cells[index].edit(); - } - } - - }; - }; - - Cell.prototype.getIndex = function () { - - this.row.getCellIndex(this); - }; - - //////////////// Object Generation ///////////////// - - Cell.prototype.getComponent = function () { - - if (!this.component) { - - this.component = new CellComponent(this); - } - - return this.component; - }; - - var FooterManager = function FooterManager(table) { - - this.table = table; - - this.active = false; - - this.element = this.createElement(); //containing element - - this.external = false; - - this.links = []; - - this._initialize(); - }; - - FooterManager.prototype.createElement = function () { - - var el = document.createElement("div"); - - el.classList.add("tabulator-footer"); - - return el; - }; - - FooterManager.prototype._initialize = function (element) { - - if (this.table.options.footerElement) { - - switch (_typeof(this.table.options.footerElement)) { - - case "string": - - if (this.table.options.footerElement[0] === "<") { - - this.element.innerHTML = this.table.options.footerElement; - } else { - - this.external = true; - - this.element = document.querySelector(this.table.options.footerElement); - } - - break; - - default: - - this.element = this.table.options.footerElement; - - break; - - } - } - }; - - FooterManager.prototype.getElement = function () { - - return this.element; - }; - - FooterManager.prototype.append = function (element, parent) { - - this.activate(parent); - - this.element.appendChild(element); - - this.table.rowManager.adjustTableSize(); - }; - - FooterManager.prototype.prepend = function (element, parent) { - - this.activate(parent); - - this.element.insertBefore(element, this.element.firstChild); - - this.table.rowManager.adjustTableSize(); - }; - - FooterManager.prototype.remove = function (element) { - - element.parentNode.removeChild(element); - - this.deactivate(); - }; - - FooterManager.prototype.deactivate = function (force) { - - if (!this.element.firstChild || force) { - - if (!this.external) { - - this.element.parentNode.removeChild(this.element); - } - - this.active = false; - } - - // this.table.rowManager.adjustTableSize(); - }; - - FooterManager.prototype.activate = function (parent) { - - if (!this.active) { - - this.active = true; - - if (!this.external) { - - this.table.element.appendChild(this.getElement()); - - this.table.element.style.display = ''; - } - } - - if (parent) { - - this.links.push(parent); - } - }; - - FooterManager.prototype.redraw = function () { - - this.links.forEach(function (link) { - - link.footerRedraw(); - }); - }; - - var Tabulator = function Tabulator(element, options) { - - this.options = {}; - - this.columnManager = null; // hold Column Manager - - this.rowManager = null; //hold Row Manager - - this.footerManager = null; //holder Footer Manager - - 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.modules = {}; //hold all modules bound to this table - - - this.initializeElement(element); - - this.initializeOptions(options || {}); - - this._create(); - - Tabulator.prototype.comms.register(this); //register table for inderdevice communication - }; - - //default setup options - - Tabulator.prototype.defaultOptions = { - - height: false, //height of tabulator - - minHeight: false, //minimum height of tabulator - - maxHeight: false, //maximum height of tabulator - - - layout: "fitData", ///layout type "fitColumns" | "fitData" - - layoutColumnsOnNewData: false, //update column widths on setData - - - columnMinWidth: 40, //minimum global width for a column - - columnHeaderVertAlign: "top", //vertical alignment of column headers - - columnVertAlign: false, // DEPRECATED - Left to allow warning - - - resizableColumns: true, //resizable columns - - resizableRows: false, //resizable rows - - autoResize: true, //auto resize table - - - columns: [], //store for colum header info - - - cellHozAlign: "", //horizontal align columns - - cellVertAlign: "", //certical align columns - - - data: [], //default starting data - - - autoColumns: false, //build columns from data row structure - - - reactiveData: false, //enable data reactivity - - - nestedFieldSeparator: ".", //seperatpr for nested data - - - tooltips: false, //Tool tip value - - tooltipsHeader: false, //Tool tip for headers - - tooltipGenerationMode: "load", //when to generate tooltips - - - initialSort: false, //initial sorting criteria - - initialFilter: false, //initial filtering criteria - - initialHeaderFilter: false, //initial header filtering criteria - - - columnHeaderSortMulti: true, //multiple or single column sorting - - - sortOrderReverse: false, //reverse internal sort ordering - - - headerSort: true, //set default global header sort - - headerSortTristate: false, //set default tristate header sorting - - - footerElement: false, //hold footer element - - - index: "id", //filed for row index - - - keybindings: [], //array for keybindings - - - tabEndNewRow: false, //create new row when tab to end of table - - - invalidOptionWarnings: true, //allow toggling of invalid option warnings - - - clipboard: false, //enable clipboard - - clipboardCopyStyled: true, //formatted table data - - clipboardCopyConfig: false, //clipboard config - - clipboardCopyFormatter: false, //DEPRICATED - REMOVE in 5.0 - - clipboardCopyRowRange: "active", //restrict clipboard to visible rows only - - clipboardPasteParser: "table", //convert pasted clipboard data to rows - - clipboardPasteAction: "insert", //how to insert pasted data into the table - - - clipboardCopied: function clipboardCopied() {}, //data has been copied to the clipboard - - clipboardPasted: function clipboardPasted() {}, //data has been pasted into the table - - clipboardPasteError: function clipboardPasteError() {}, //data has not successfully been pasted into the table - - - downloadDataFormatter: false, //function to manipulate table data before it is downloaded - - downloadReady: function downloadReady(data, blob) { - return blob; - }, //function to manipulate download data - - downloadComplete: false, //function to manipulate download data - - downloadConfig: {}, //download config - - downloadRowRange: "active", //restrict download to active rows only - - - dataTree: false, //enable data tree - - dataTreeElementColumn: false, - - dataTreeBranchElement: true, //show data tree branch element - - dataTreeChildIndent: 9, //data tree child indent in px - - dataTreeChildField: "_children", //data tre column field to look for child rows - - dataTreeCollapseElement: false, //data tree row collapse element - - dataTreeExpandElement: false, //data tree row expand element - - dataTreeStartExpanded: false, - - dataTreeRowExpanded: function dataTreeRowExpanded() {}, //row has been expanded - - dataTreeRowCollapsed: function dataTreeRowCollapsed() {}, //row has been collapsed - - dataTreeChildColumnCalcs: false, //include visible data tree rows in column calculations - - dataTreeSelectPropagate: false, //seleccting a parent row selects its children - - - printAsHtml: false, //enable print as html - - printFormatter: false, //printing page formatter - - printHeader: false, //page header contents - - printFooter: false, //page footer contents - - printCopyStyle: true, //DEPRICATED - REMOVE in 5.0 - - printStyled: true, //enable print as html styling - - printVisibleRows: true, //DEPRICATED - REMOVE in 5.0 - - printRowRange: "visible", //restrict print to visible rows only - - printConfig: {}, //print config options - - - addRowPos: "bottom", //position to insert blank rows, top|bottom - - - selectable: "highlight", //highlight rows on hover - - selectableRangeMode: "drag", //highlight rows on hover - - selectableRollingSelection: true, //roll selection once maximum number of selectable rows is reached - - selectablePersistence: true, // maintain selection when table view is updated - - selectableCheck: function selectableCheck(data, row) { - return true; - }, //check wheather row is selectable - - - headerFilterLiveFilterDelay: 300, //delay before updating column after user types in header filter - - headerFilterPlaceholder: false, //placeholder text to display in header filters - - - headerVisible: true, //hide header - - - history: false, //enable edit history - - - locale: false, //current system language - - langs: {}, - - virtualDom: true, //enable DOM virtualization - - virtualDomBuffer: 0, // set virtual DOM buffer size - - - persistentLayout: false, //DEPRICATED - REMOVE in 5.0 - - persistentSort: false, //DEPRICATED - REMOVE in 5.0 - - persistentFilter: false, //DEPRICATED - REMOVE in 5.0 - - persistenceID: "", //key for persistent storage - - persistenceMode: true, //mode for storing persistence information - - persistenceReaderFunc: false, //function for handling persistence data reading - - persistenceWriterFunc: false, //function for handling persistence data writing - - - persistence: false, - - responsiveLayout: false, //responsive layout flags - - responsiveLayoutCollapseStartOpen: true, //start showing collapsed data - - responsiveLayoutCollapseUseFormatters: true, //responsive layout collapse formatter - - responsiveLayoutCollapseFormatter: false, //responsive layout collapse formatter - - - pagination: false, //set pagination type - - paginationSize: false, //set number of rows to a page - - paginationInitialPage: 1, //initail page to show on load - - paginationButtonCount: 5, // set count of page button - - paginationSizeSelector: false, //add pagination size selector element - - paginationElement: false, //element to hold pagination numbers - - paginationDataSent: {}, //pagination data sent to the server - - paginationDataReceived: {}, //pagination data received from the server - - paginationAddRow: "page", //add rows on table or page - - - ajaxURL: false, //url for ajax loading - - ajaxURLGenerator: false, - - ajaxParams: {}, //params for ajax loading - - ajaxConfig: "get", //ajax request type - - ajaxContentType: "form", //ajax request type - - ajaxRequestFunc: false, //promise function - - ajaxLoader: true, //show loader - - ajaxLoaderLoading: false, //loader element - - ajaxLoaderError: false, //loader element - - ajaxFiltering: false, - - ajaxSorting: false, - - ajaxProgressiveLoad: false, //progressive loading - - ajaxProgressiveLoadDelay: 0, //delay between requests - - ajaxProgressiveLoadScrollMargin: 0, //margin before scroll begins - - - groupBy: false, //enable table grouping and set field to group by - - groupStartOpen: true, //starting state of group - - groupValues: false, - - groupHeader: false, //header generation function - - groupHeaderPrint: null, - - groupHeaderClipboard: null, - - groupHeaderHtmlOutput: null, - - groupHeaderDownload: null, - - htmlOutputConfig: false, //html outypu config - - - movableColumns: false, //enable movable columns - - - movableRows: false, //enable movable rows - - movableRowsConnectedTables: false, //tables for movable rows to be connected to - - movableRowsConnectedElements: false, //other elements for movable rows to be connected to - - movableRowsSender: false, - - movableRowsReceiver: "insert", - - movableRowsSendingStart: function movableRowsSendingStart() {}, - - movableRowsSent: function movableRowsSent() {}, - - movableRowsSentFailed: function movableRowsSentFailed() {}, - - movableRowsSendingStop: function movableRowsSendingStop() {}, - - movableRowsReceivingStart: function movableRowsReceivingStart() {}, - - movableRowsReceived: function movableRowsReceived() {}, - - movableRowsReceivedFailed: function movableRowsReceivedFailed() {}, - - movableRowsReceivingStop: function movableRowsReceivingStop() {}, - - movableRowsElementDrop: function movableRowsElementDrop() {}, - - scrollToRowPosition: "top", - - scrollToRowIfVisible: true, - - scrollToColumnPosition: "left", - - scrollToColumnIfVisible: true, - - rowFormatter: false, - - rowFormatterPrint: null, - - rowFormatterClipboard: null, - - rowFormatterHtmlOutput: null, - - placeholder: false, - - //table building callbacks - - tableBuilding: function tableBuilding() {}, - - tableBuilt: function tableBuilt() {}, - - //render callbacks - - renderStarted: function renderStarted() {}, - - renderComplete: function renderComplete() {}, - - //row callbacks - - rowClick: false, - - rowDblClick: false, - - rowContext: false, - - rowTap: false, - - rowDblTap: false, - - rowTapHold: false, - - rowMouseEnter: false, - - rowMouseLeave: false, - - rowMouseOver: false, - - rowMouseOut: false, - - rowMouseMove: false, - - rowContextMenu: false, - - rowAdded: function rowAdded() {}, - - rowDeleted: function rowDeleted() {}, - - rowMoved: function rowMoved() {}, - - rowUpdated: function rowUpdated() {}, - - rowSelectionChanged: function rowSelectionChanged() {}, - - rowSelected: function rowSelected() {}, - - rowDeselected: function rowDeselected() {}, - - rowResized: function rowResized() {}, - - //cell callbacks - - //row callbacks - - cellClick: false, - - cellDblClick: false, - - cellContext: false, - - cellTap: false, - - cellDblTap: false, - - cellTapHold: false, - - cellMouseEnter: false, - - cellMouseLeave: false, - - cellMouseOver: false, - - cellMouseOut: false, - - cellMouseMove: false, - - cellEditing: function cellEditing() {}, - - cellEdited: function cellEdited() {}, - - cellEditCancelled: function cellEditCancelled() {}, - - //column callbacks - - columnMoved: false, - - columnResized: function columnResized() {}, - - columnTitleChanged: function columnTitleChanged() {}, - - columnVisibilityChanged: function columnVisibilityChanged() {}, - - //HTML iport callbacks - - htmlImporting: function htmlImporting() {}, - - htmlImported: function htmlImported() {}, - - //data callbacks - - dataLoading: function dataLoading() {}, - - dataLoaded: function dataLoaded() {}, - - dataEdited: function dataEdited() {}, - - //ajax callbacks - - ajaxRequesting: function ajaxRequesting() {}, - - ajaxResponse: false, - - ajaxError: function ajaxError() {}, - - //filtering callbacks - - dataFiltering: false, - - dataFiltered: false, - - //sorting callbacks - - dataSorting: function dataSorting() {}, - - dataSorted: function dataSorted() {}, - - //grouping callbacks - - groupToggleElement: "arrow", - - groupClosedShowCalcs: false, - - dataGrouping: function dataGrouping() {}, - - dataGrouped: false, - - groupVisibilityChanged: function groupVisibilityChanged() {}, - - groupClick: false, - - groupDblClick: false, - - groupContext: false, - - groupContextMenu: false, - - groupTap: false, - - groupDblTap: false, - - groupTapHold: false, - - columnCalcs: true, - - //pagination callbacks - - pageLoaded: function pageLoaded() {}, - - //localization callbacks - - localized: function localized() {}, - - //validation callbacks - - validationMode: "blocking", - - validationFailed: function validationFailed() {}, - - //history callbacks - - historyUndo: function historyUndo() {}, - - historyRedo: function historyRedo() {}, - - //scroll callbacks - - scrollHorizontal: function scrollHorizontal() {}, - - scrollVertical: function scrollVertical() {} - - }; - - Tabulator.prototype.initializeOptions = function (options) { - - //warn user if option is not available - - if (options.invalidOptionWarnings !== false) { - - for (var key in options) { - - if (typeof this.defaultOptions[key] === "undefined") { - - console.warn("Invalid table constructor option:", key); - } - } - } - - //assign options to table - - for (var key in this.defaultOptions) { - - if (key in options) { - - this.options[key] = options[key]; - } else { - - if (Array.isArray(this.defaultOptions[key])) { - - this.options[key] = []; - } else if (_typeof(this.defaultOptions[key]) === "object" && this.defaultOptions[key] !== null) { - - this.options[key] = {}; - } else { - - this.options[key] = this.defaultOptions[key]; - } - } - } - }; - - Tabulator.prototype.initializeElement = function (element) { - - if (typeof HTMLElement !== "undefined" && element instanceof HTMLElement) { - - this.element = element; - - return true; - } else if (typeof element === "string") { - - this.element = document.querySelector(element); - - if (this.element) { - - return true; - } else { - - console.error("Tabulator Creation Error - no element found matching selector: ", element); - - return false; - } - } else { - - console.error("Tabulator Creation Error - Invalid element provided:", element); - - return false; - } - }; - - //convert depricated functionality to new functions - - Tabulator.prototype._mapDepricatedFunctionality = function () { - - //map depricated persistance setup options - - if (this.options.persistentLayout || this.options.persistentSort || this.options.persistentFilter) { - - if (!this.options.persistence) { - - this.options.persistence = {}; - } - } - - if (this.options.downloadDataFormatter) { - - console.warn("DEPRECATION WARNING - downloadDataFormatter option has been deprecated"); - } - - if (typeof this.options.clipboardCopyHeader !== "undefined") { - - this.options.columnHeaders = this.options.clipboardCopyHeader; - - console.warn("DEPRECATION WARNING - clipboardCopyHeader option has been deprecated, please use the columnHeaders property on the clipboardCopyConfig option"); - } - - if (this.options.printVisibleRows !== true) { - - console.warn("printVisibleRows option is deprecated, you should now use the printRowRange option"); - - this.options.persistence.printRowRange = "active"; - } - - if (this.options.printCopyStyle !== true) { - - console.warn("printCopyStyle option is deprecated, you should now use the printStyled option"); - - this.options.persistence.printStyled = this.options.printCopyStyle; - } - - if (this.options.persistentLayout) { - - console.warn("persistentLayout option is deprecated, you should now use the persistence option"); - - if (this.options.persistence !== true && typeof this.options.persistence.columns === "undefined") { - - this.options.persistence.columns = true; - } - } - - if (this.options.persistentSort) { - - console.warn("persistentSort option is deprecated, you should now use the persistence option"); - - if (this.options.persistence !== true && typeof this.options.persistence.sort === "undefined") { - - this.options.persistence.sort = true; - } - } - - if (this.options.persistentFilter) { - - console.warn("persistentFilter option is deprecated, you should now use the persistence option"); - - if (this.options.persistence !== true && typeof this.options.persistence.filter === "undefined") { - - this.options.persistence.filter = true; - } - } - - if (this.options.columnVertAlign) { - - console.warn("columnVertAlign option is deprecated, you should now use the columnHeaderVertAlign option"); - - this.options.columnHeaderVertAlign = this.options.columnVertAlign; - } - }; - - Tabulator.prototype._clearSelection = function () { - - this.element.classList.add("tabulator-block-select"); - - if (window.getSelection) { - - if (window.getSelection().empty) { - // Chrome - - window.getSelection().empty(); - } else if (window.getSelection().removeAllRanges) { - // Firefox - - window.getSelection().removeAllRanges(); - } - } else if (document.selection) { - // IE? - - document.selection.empty(); - } - - this.element.classList.remove("tabulator-block-select"); - }; - - //concreate table - - Tabulator.prototype._create = function () { - - this._clearObjectPointers(); - - this._mapDepricatedFunctionality(); - - this.bindModules(); - - if (this.element.tagName === "TABLE") { - - if (this.modExists("htmlTableImport", true)) { - - this.modules.htmlTableImport.parseTable(); - } - } - - this.columnManager = new ColumnManager(this); - - this.rowManager = new RowManager(this); - - this.footerManager = new FooterManager(this); - - this.columnManager.setRowManager(this.rowManager); - - this.rowManager.setColumnManager(this.columnManager); - - this._buildElement(); - - this._loadInitialData(); - }; - - //clear pointers to objects in default config object - - Tabulator.prototype._clearObjectPointers = function () { - - this.options.columns = this.options.columns.slice(0); - - if (!this.options.reactiveData) { - - this.options.data = this.options.data.slice(0); - } - }; - - //build tabulator element - - Tabulator.prototype._buildElement = function () { - var _this17 = this; - - var element = this.element, - mod = this.modules, - options = this.options; - - options.tableBuilding.call(this); - - element.classList.add("tabulator"); - - element.setAttribute("role", "grid"); - - //empty element - - while (element.firstChild) { - element.removeChild(element.firstChild); - } //set table height - - if (options.height) { - - options.height = isNaN(options.height) ? options.height : options.height + "px"; - - element.style.height = options.height; - } - - //set table min height - - if (options.minHeight !== false) { - - options.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + "px"; - - element.style.minHeight = options.minHeight; - } - - //set table maxHeight - - if (options.maxHeight !== false) { - - options.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + "px"; - - element.style.maxHeight = options.maxHeight; - } - - this.columnManager.initialize(); - - this.rowManager.initialize(); - - this._detectBrowser(); - - if (this.modExists("layout", true)) { - - mod.layout.initialize(options.layout); - } - - //set localization - - if (options.headerFilterPlaceholder !== false) { - - mod.localize.setHeaderFilterPlaceholder(options.headerFilterPlaceholder); - } - - for (var locale in options.langs) { - - mod.localize.installLang(locale, options.langs[locale]); - } - - mod.localize.setLocale(options.locale); - - //configure placeholder element - - if (typeof options.placeholder == "string") { - - var el = document.createElement("div"); - - el.classList.add("tabulator-placeholder"); - - var span = document.createElement("span"); - - span.innerHTML = options.placeholder; - - el.appendChild(span); - - options.placeholder = el; - } - - //build table elements - - element.appendChild(this.columnManager.getElement()); - - element.appendChild(this.rowManager.getElement()); - - if (options.footerElement) { - - this.footerManager.activate(); - } - - if (options.persistence && this.modExists("persistence", true)) { - - mod.persistence.initialize(); - } - - if (options.persistence && this.modExists("persistence", true) && mod.persistence.config.columns) { - - options.columns = mod.persistence.load("columns", options.columns); - } - - if (options.movableRows && this.modExists("moveRow")) { - - mod.moveRow.initialize(); - } - - if (options.autoColumns && this.options.data) { - - this.columnManager.generateColumnsFromRowData(this.options.data); - } - - if (this.modExists("columnCalcs")) { - - mod.columnCalcs.initialize(); - } - - this.columnManager.setColumns(options.columns); - - if (options.dataTree && this.modExists("dataTree", true)) { - - mod.dataTree.initialize(); - } - - if (this.modExists("frozenRows")) { - - this.modules.frozenRows.initialize(); - } - - if ((options.persistence && this.modExists("persistence", true) && mod.persistence.config.sort || options.initialSort) && this.modExists("sort", true)) { - - var sorters = []; - - if (options.persistence && this.modExists("persistence", true) && mod.persistence.config.sort) { - - sorters = mod.persistence.load("sort"); - - if (sorters === false && options.initialSort) { - - sorters = options.initialSort; - } - } else if (options.initialSort) { - - sorters = options.initialSort; - } - - mod.sort.setSort(sorters); - } - - if ((options.persistence && this.modExists("persistence", true) && mod.persistence.config.filter || options.initialFilter) && this.modExists("filter", true)) { - - var filters = []; - - if (options.persistence && this.modExists("persistence", true) && mod.persistence.config.filter) { - - filters = mod.persistence.load("filter"); - - if (filters === false && options.initialFilter) { - - filters = options.initialFilter; - } - } else if (options.initialFilter) { - - filters = options.initialFilter; - } - - mod.filter.setFilter(filters); - } - - if (options.initialHeaderFilter && this.modExists("filter", true)) { - - options.initialHeaderFilter.forEach(function (item) { - - var column = _this17.columnManager.findColumn(item.field); - - if (column) { - - mod.filter.setHeaderFilterValue(column, item.value); - } else { - - console.warn("Column Filter Error - No matching column found:", item.field); - - return false; - } - }); - } - - if (this.modExists("ajax")) { - - mod.ajax.initialize(); - } - - if (options.pagination && this.modExists("page", true)) { - - mod.page.initialize(); - } - - if (options.groupBy && this.modExists("groupRows", true)) { - - mod.groupRows.initialize(); - } - - if (this.modExists("keybindings")) { - - mod.keybindings.initialize(); - } - - if (this.modExists("selectRow")) { - - mod.selectRow.clearSelectionData(true); - } - - if (options.autoResize && this.modExists("resizeTable")) { - - mod.resizeTable.initialize(); - } - - if (this.modExists("clipboard")) { - - mod.clipboard.initialize(); - } - - if (options.printAsHtml && this.modExists("print")) { - - mod.print.initialize(); - } - - options.tableBuilt.call(this); - }; - - Tabulator.prototype._loadInitialData = function () { - - var self = this; - - if (self.options.pagination && self.modExists("page")) { - - self.modules.page.reset(true, true); - - if (self.options.pagination == "local") { - - if (self.options.data.length) { - - self.rowManager.setData(self.options.data, false, true); - } else { - - if ((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists("ajax")) { - - self.modules.ajax.loadData(false, true).then(function () {}).catch(function () { - - if (self.options.paginationInitialPage) { - - self.modules.page.setPage(self.options.paginationInitialPage); - } - }); - - return; - } else { - - self.rowManager.setData(self.options.data, false, true); - } - } - - if (self.options.paginationInitialPage) { - - self.modules.page.setPage(self.options.paginationInitialPage); - } - } else { - - if (self.options.ajaxURL) { - - self.modules.page.setPage(self.options.paginationInitialPage).then(function () {}).catch(function () {}); - } else { - - self.rowManager.setData([], false, true); - } - } - } else { - - if (self.options.data.length) { - - self.rowManager.setData(self.options.data); - } else { - - if ((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists("ajax")) { - - self.modules.ajax.loadData(false, true).then(function () {}).catch(function () {}); - } else { - - self.rowManager.setData(self.options.data, false, true); - } - } - } - }; - - //deconstructor - - Tabulator.prototype.destroy = function () { - - var element = this.element; - - Tabulator.prototype.comms.deregister(this); //deregister table from inderdevice communication - - - if (this.options.reactiveData && this.modExists("reactiveData", true)) { - - this.modules.reactiveData.unwatchData(); - } - - //clear row data - - this.rowManager.rows.forEach(function (row) { - - row.wipe(); - }); - - this.rowManager.rows = []; - - this.rowManager.activeRows = []; - - this.rowManager.displayRows = []; - - //clear event bindings - - if (this.options.autoResize && this.modExists("resizeTable")) { - - this.modules.resizeTable.clearBindings(); - } - - if (this.modExists("keybindings")) { - - this.modules.keybindings.clearBindings(); - } - - //clear DOM - - while (element.firstChild) { - element.removeChild(element.firstChild); - }element.classList.remove("tabulator"); - }; - - Tabulator.prototype._detectBrowser = function () { - - var ua = navigator.userAgent || navigator.vendor || window.opera; - - if (ua.indexOf("Trident") > -1) { - - this.browser = "ie"; - - this.browserSlow = true; - } else if (ua.indexOf("Edge") > -1) { - - this.browser = "edge"; - - this.browserSlow = true; - } else if (ua.indexOf("Firefox") > -1) { - - this.browser = "firefox"; - - this.browserSlow = false; - } else { - - this.browser = "other"; - - this.browserSlow = false; - } - - 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)); - }; - - ////////////////// Data Handling ////////////////// - - - //block table redrawing - - Tabulator.prototype.blockRedraw = function () { - - return this.rowManager.blockRedraw(); - }; - - //restore table redrawing - - Tabulator.prototype.restoreRedraw = function () { - - return this.rowManager.restoreRedraw(); - }; - - //local data from local file - - 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) { - - console.warn("File Load Error - File contents is invalid JSON", e); - - reject(e); - - return; - } - - _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(); - }); - }; - - //load data - - Tabulator.prototype.setData = function (data, params, config) { - - if (this.modExists("ajax")) { - - this.modules.ajax.blockActiveRequest(); - } - - return this._setData(data, params, config, false, true); - }; - - Tabulator.prototype._setData = function (data, params, config, inPosition, columnsChanged) { - - var self = this; - - if (typeof data === "string") { - - if (data.indexOf("{") == 0 || data.indexOf("[") == 0) { - - //data is a json encoded string - - return self.rowManager.setData(JSON.parse(data), inPosition, columnsChanged); - } else { - - if (self.modExists("ajax", true)) { - - if (params) { - - self.modules.ajax.setParams(params); - } - - if (config) { - - self.modules.ajax.setConfig(config); - } - - self.modules.ajax.setUrl(data); - - if (self.options.pagination == "remote" && self.modExists("page", true)) { - - self.modules.page.reset(true, true); - - return self.modules.page.setPage(1); - } else { - - //assume data is url, make ajax call to url to get data - - return self.modules.ajax.loadData(inPosition, columnsChanged); - } - } - } - } else { - - if (data) { - - //asume data is already an object - - return self.rowManager.setData(data, inPosition, columnsChanged); - } else { - - //no data provided, check if ajaxURL is present; - - if (self.modExists("ajax") && (self.modules.ajax.getUrl || self.options.ajaxURLGenerator)) { - - if (self.options.pagination == "remote" && self.modExists("page", true)) { - - self.modules.page.reset(true, true); - - return self.modules.page.setPage(1); - } else { - - return self.modules.ajax.loadData(inPosition, columnsChanged); - } - } else { - - //empty data - - return self.rowManager.setData([], inPosition, columnsChanged); - } - } - } - }; - - //clear data - - Tabulator.prototype.clearData = function () { - - if (this.modExists("ajax")) { - - this.modules.ajax.blockActiveRequest(); - } - - this.rowManager.clearData(); - }; - - //get table data array - - Tabulator.prototype.getData = function (active) { - - if (active === true) { - - console.warn("passing a boolean to the getData function is deprecated, you should now pass the string 'active'"); - - active = "active"; - } - - return this.rowManager.getData(active); - }; - - //get table data array count - - Tabulator.prototype.getDataCount = function (active) { - - if (active === true) { - - console.warn("passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'"); - - active = "active"; - } - - return this.rowManager.getDataCount(active); - }; - - //search for specific row components - - Tabulator.prototype.searchRows = function (field, type, value) { - - if (this.modExists("filter", true)) { - - return this.modules.filter.search("rows", field, type, value); - } - }; - - //search for specific data - - Tabulator.prototype.searchData = function (field, type, value) { - - if (this.modExists("filter", true)) { - - return this.modules.filter.search("data", field, type, value); - } - }; - - //get table html - - Tabulator.prototype.getHtml = function (visible, style, config) { - - if (this.modExists("export", true)) { - - return this.modules.export.getHtml(visible, style, config); - } - }; - - //get print html - - Tabulator.prototype.print = function (visible, style, config) { - - if (this.modExists("print", true)) { - - return this.modules.print.printFullscreen(visible, style, config); - } - }; - - //retrieve Ajax URL - - Tabulator.prototype.getAjaxUrl = function () { - - if (this.modExists("ajax", true)) { - - return this.modules.ajax.getUrl(); - } - }; - - //replace data, keeping table in position with same sort - - Tabulator.prototype.replaceData = function (data, params, config) { - - if (this.modExists("ajax")) { - - this.modules.ajax.blockActiveRequest(); - } - - return this._setData(data, params, config, true); - }; - - //update table data - - Tabulator.prototype.updateData = function (data) { - var _this19 = this; - - var self = this; - - var responses = 0; - - return new Promise(function (resolve, reject) { - - if (_this19.modExists("ajax")) { - - _this19.modules.ajax.blockActiveRequest(); - } - - if (typeof data === "string") { - - data = JSON.parse(data); - } - - if (data) { - - data.forEach(function (item) { - - var row = self.rowManager.findRow(item[self.options.index]); - - if (row) { - - responses++; - - row.updateData(item).then(function () { - - responses--; - - if (!responses) { - - resolve(); - } - }); - } - }); - } else { - - 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) { - - if (_this20.modExists("ajax")) { - - _this20.modules.ajax.blockActiveRequest(); - } - - if (typeof data === "string") { - - data = JSON.parse(data); - } - - if (data) { - - _this20.rowManager.addRows(data, pos, index).then(function (rows) { - - var output = []; - - rows.forEach(function (row) { - - output.push(row.getComponent()); - }); - - resolve(output); - }); - } else { - - console.warn("Update Error - No data provided"); - - reject("Update Error - No data provided"); - } - }); - }; - - //update table data - - Tabulator.prototype.updateOrAddData = function (data) { - var _this21 = this; - - var self = this, - rows = [], - responses = 0; - - return new Promise(function (resolve, reject) { - - if (_this21.modExists("ajax")) { - - _this21.modules.ajax.blockActiveRequest(); - } - - if (typeof data === "string") { - - data = JSON.parse(data); - } - - if (data) { - - data.forEach(function (item) { - - var row = self.rowManager.findRow(item[self.options.index]); - - responses++; - - if (row) { - - row.updateData(item).then(function () { - - responses--; - - rows.push(row.getComponent()); - - if (!responses) { - - resolve(rows); - } - }); - } else { - - self.rowManager.addRows(item).then(function (newRows) { - - responses--; - - rows.push(newRows[0].getComponent()); - - if (!responses) { - - resolve(rows); - } - }); - } - }); - } else { - - console.warn("Update Error - No data provided"); - - reject("Update Error - No data provided"); - } - }); - }; - - //get row object - - Tabulator.prototype.getRow = function (index) { - - var row = this.rowManager.findRow(index); - - if (row) { - - return row.getComponent(); - } else { - - console.warn("Find Error - No matching row found:", index); - - return false; - } - }; - - //get row object - - Tabulator.prototype.getRowFromPosition = function (position, active) { - - var row = this.rowManager.getRowFromPosition(position, active); - - if (row) { - - return row.getComponent(); - } else { - - console.warn("Find Error - No matching row found:", position); - - return false; - } - }; - - //delete row from table - - 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++; - - if (count == index.length) { - - if (successCount) { - - self.rowManager.reRenderInPosition(); - - resolve(); - } - } - } - - if (!Array.isArray(index)) { - - index = [index]; - } - - //find matching rows - - index.forEach(function (item) { - - var row = _this22.rowManager.findRow(item, true); - - if (row) { - - foundRows.push(row); - } else { - - console.warn("Delete Error - No matching row found:", item); - - reject("Delete Error - No matching row found"); - - doneCheck(); - } - }); - - //sort rows into correct order to ensure smooth delete from table - - 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); - }); - }); - }); - }; - - //add row to table - - Tabulator.prototype.addRow = function (data, pos, index) { - var _this23 = this; - - return new Promise(function (resolve, reject) { - - if (typeof data === "string") { - - data = JSON.parse(data); - } - - _this23.rowManager.addRows(data, pos, index).then(function (rows) { - - //recalc column calculations if present - - if (_this23.modExists("columnCalcs")) { - - _this23.modules.columnCalcs.recalc(_this23.rowManager.activeRows); - } - - resolve(rows[0].getComponent()); - }); - }); - }; - - //update a row if it exitsts otherwise create it - - Tabulator.prototype.updateOrAddRow = function (index, data) { - var _this24 = this; - - return new Promise(function (resolve, reject) { - - var row = _this24.rowManager.findRow(index); - - if (typeof data === "string") { - - data = JSON.parse(data); - } - - if (row) { - - row.updateData(data).then(function () { - - //recalc column calculations if present - - if (_this24.modExists("columnCalcs")) { - - _this24.modules.columnCalcs.recalc(_this24.rowManager.activeRows); - } - - resolve(row.getComponent()); - }).catch(function (err) { - - reject(err); - }); - } else { - - row = _this24.rowManager.addRows(data).then(function (rows) { - - //recalc column calculations if present - - if (_this24.modExists("columnCalcs")) { - - _this24.modules.columnCalcs.recalc(_this24.rowManager.activeRows); - } - - resolve(rows[0].getComponent()); - }).catch(function (err) { - - reject(err); - }); - } - }); - }; - - //update row data - - Tabulator.prototype.updateRow = function (index, data) { - var _this25 = this; - - return new Promise(function (resolve, reject) { - - var row = _this25.rowManager.findRow(index); - - if (typeof data === "string") { - - data = JSON.parse(data); - } - - if (row) { - - row.updateData(data).then(function () { - - resolve(row.getComponent()); - }).catch(function (err) { - - reject(err); - }); - } else { - - console.warn("Update Error - No matching row found:", index); - - reject("Update Error - No matching row found"); - } - }); - }; - - //scroll to row in DOM - - Tabulator.prototype.scrollToRow = function (index, position, ifVisible) { - var _this26 = this; - - return new Promise(function (resolve, reject) { - - var row = _this26.rowManager.findRow(index); - - if (row) { - - _this26.rowManager.scrollToRow(row, position, ifVisible).then(function () { - - resolve(); - }).catch(function (err) { - - reject(err); - }); - } else { - - 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); - - if (fromRow) { - - fromRow.moveToRow(to, after); - } else { - - console.warn("Move Error - No matching row found:", from); - } - }; - - Tabulator.prototype.getRows = function (active) { - - if (active === true) { - - console.warn("passing a boolean to the getRows function is deprecated, you should now pass the string 'active'"); - - active = "active"; - } - - return this.rowManager.getComponents(active); - }; - - //get position of row in table - - Tabulator.prototype.getRowPosition = function (index, active) { - - var row = this.rowManager.findRow(index); - - if (row) { - - return this.rowManager.getRowPosition(row, active); - } else { - - console.warn("Position Error - No matching row found:", index); - - return false; - } - }; - - //copy table data to clipboard - - Tabulator.prototype.copyToClipboard = function (selector) { - - if (this.modExists("clipboard", true)) { - - this.modules.clipboard.copy(selector); - } - }; - - /////////////// Column Functions /////////////// - - - 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); - - if (col) { - - return col.getComponent(); - } else { - - console.warn("Find Error - No matching column found:", field); - - return false; - } - }; - - Tabulator.prototype.getColumnDefinitions = function () { - - return this.columnManager.getDefinitionTree(); - }; - - Tabulator.prototype.getColumnLayout = function () { - - if (this.modExists("persistence", true)) { - - return this.modules.persistence.parseColumns(this.columnManager.getColumns()); - } - }; - - Tabulator.prototype.setColumnLayout = function (layout) { - - if (this.modExists("persistence", true)) { - - this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns, layout)); - - return true; - } - - return false; - }; - - Tabulator.prototype.showColumn = function (field) { - - var column = this.columnManager.findColumn(field); - - if (column) { - - column.show(); - - if (this.options.responsiveLayout && this.modExists("responsiveLayout", true)) { - - this.modules.responsiveLayout.update(); - } - } else { - - console.warn("Column Show Error - No matching column found:", field); - - return false; - } - }; - - Tabulator.prototype.hideColumn = function (field) { - - var column = this.columnManager.findColumn(field); - - if (column) { - - column.hide(); - - if (this.options.responsiveLayout && this.modExists("responsiveLayout", true)) { - - this.modules.responsiveLayout.update(); - } - } else { - - console.warn("Column Hide Error - No matching column found:", field); - - return false; - } - }; - - Tabulator.prototype.toggleColumn = function (field) { - - var column = this.columnManager.findColumn(field); - - if (column) { - - if (column.visible) { - - column.hide(); - } else { - - column.show(); - } - } else { - - console.warn("Column Visibility Toggle Error - No matching column found:", field); - - return false; - } - }; - - 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); - - if (column) { - - column.delete().then(function () { - - resolve(); - }).catch(function (err) { - - reject(err); - }); - } else { - - 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); - - if (column) { - - column.updateDefinition(definition).then(function (col) { - - resolve(col); - }).catch(function (err) { - - reject(err); - }); - } else { - - console.warn("Column Update Error - No matching column found:", field); - - reject(); - } - }); - }; - - Tabulator.prototype.moveColumn = function (from, to, after) { - - var fromColumn = this.columnManager.findColumn(from); - - var toColumn = this.columnManager.findColumn(to); - - if (fromColumn) { - - if (toColumn) { - - this.columnManager.moveColumn(fromColumn, toColumn, after); - } else { - - console.warn("Move Error - No matching column found:", toColumn); - } - } else { - - console.warn("Move Error - No matching column found:", from); - } - }; - - //scroll to column in DOM - - Tabulator.prototype.scrollToColumn = function (field, position, ifVisible) { - var _this30 = this; - - return new Promise(function (resolve, reject) { - - var column = _this30.columnManager.findColumn(field); - - if (column) { - - _this30.columnManager.scrollToColumn(column, position, ifVisible).then(function () { - - resolve(); - }).catch(function (err) { - - reject(err); - }); - } else { - - console.warn("Scroll Error - No matching column found:", field); - - reject("Scroll Error - No matching column found"); - } - }); - }; - - //////////// Localization Functions //////////// - - 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); - }; - - //////////// General Public Functions //////////// - - - //redraw list without updating data - - Tabulator.prototype.redraw = function (force) { - - this.columnManager.redraw(force); - - this.rowManager.redraw(force); - }; - - Tabulator.prototype.setHeight = function (height) { - - if (this.rowManager.renderMode !== "classic") { - - this.options.height = isNaN(height) ? height : height + "px"; - - this.element.style.height = this.options.height; - - this.rowManager.setRenderMode(); - - this.rowManager.redraw(); - } else { - - console.warn("setHeight function is not available in classic render mode"); - } - }; - - ///////////////////// Sorting //////////////////// - - - //trigger sort - - Tabulator.prototype.setSort = function (sortList, dir) { - - if (this.modExists("sort", true)) { - - this.modules.sort.setSort(sortList, dir); - - this.rowManager.sorterRefresh(); - } - }; - - Tabulator.prototype.getSorters = function () { - - if (this.modExists("sort", true)) { - - return this.modules.sort.getSort(); - } - }; - - Tabulator.prototype.clearSort = function () { - - if (this.modExists("sort", true)) { - - this.modules.sort.clear(); - - this.rowManager.sorterRefresh(); - } - }; - - ///////////////////// Filtering //////////////////// - - - //set standard filters - - Tabulator.prototype.setFilter = function (field, type, value, params) { - - if (this.modExists("filter", true)) { - - this.modules.filter.setFilter(field, type, value, params); - - this.rowManager.filterRefresh(); - } - }; - - //add filter to array - - Tabulator.prototype.addFilter = function (field, type, value, params) { - - if (this.modExists("filter", true)) { - - this.modules.filter.addFilter(field, type, value, params); - - this.rowManager.filterRefresh(); - } - }; - - //get all filters - - Tabulator.prototype.getFilters = function (all) { - - if (this.modExists("filter", true)) { - - return this.modules.filter.getFilters(all); - } - }; - - Tabulator.prototype.setHeaderFilterFocus = function (field) { - - if (this.modExists("filter", true)) { - - var column = this.columnManager.findColumn(field); - - if (column) { - - this.modules.filter.setHeaderFilterFocus(column); - } else { - - console.warn("Column Filter Focus Error - No matching column found:", field); - - return false; - } - } - }; - - Tabulator.prototype.getHeaderFilterValue = function (field) { - - if (this.modExists("filter", true)) { - - var column = this.columnManager.findColumn(field); - - if (column) { - - return this.modules.filter.getHeaderFilterValue(column); - } else { - - console.warn("Column Filter Error - No matching column found:", field); - } - } - }; - - Tabulator.prototype.setHeaderFilterValue = function (field, value) { - - if (this.modExists("filter", true)) { - - var column = this.columnManager.findColumn(field); - - if (column) { - - this.modules.filter.setHeaderFilterValue(column, value); - } else { - - console.warn("Column Filter Error - No matching column found:", field); - - return false; - } - } - }; - - Tabulator.prototype.getHeaderFilters = function () { - - if (this.modExists("filter", true)) { - - return this.modules.filter.getHeaderFilters(); - } - }; - - //remove filter from array - - Tabulator.prototype.removeFilter = function (field, type, value) { - - if (this.modExists("filter", true)) { - - this.modules.filter.removeFilter(field, type, value); - - this.rowManager.filterRefresh(); - } - }; - - //clear filters - - Tabulator.prototype.clearFilter = function (all) { - - if (this.modExists("filter", true)) { - - this.modules.filter.clearFilter(all); - - this.rowManager.filterRefresh(); - } - }; - - //clear header filters - - Tabulator.prototype.clearHeaderFilter = function () { - - if (this.modExists("filter", true)) { - - this.modules.filter.clearHeaderFilter(); - - this.rowManager.filterRefresh(); - } - }; - - ///////////////////// select //////////////////// - - Tabulator.prototype.selectRow = function (rows) { - - if (this.modExists("selectRow", true)) { - - if (rows === true) { - - 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) { - - if (this.modExists("selectRow", true)) { - - this.modules.selectRow.deselectRows(rows); - } - }; - - Tabulator.prototype.toggleSelectRow = function (row) { - - if (this.modExists("selectRow", true)) { - - this.modules.selectRow.toggleRow(row); - } - }; - - Tabulator.prototype.getSelectedRows = function () { - - if (this.modExists("selectRow", true)) { - - return this.modules.selectRow.getSelectedRows(); - } - }; - - Tabulator.prototype.getSelectedData = function () { - - if (this.modExists("selectRow", true)) { - - return this.modules.selectRow.getSelectedData(); - } - }; - - ///////////////////// validation //////////////////// - - Tabulator.prototype.getInvalidCells = function () { - - if (this.modExists("validate", true)) { - - return this.modules.validate.getInvalidCells(); - } - }; - - Tabulator.prototype.clearCellValidation = function (cells) { - var _this31 = this; - - if (this.modExists("validate", true)) { - - if (!cells) { - - cells = this.modules.validate.getInvalidCells(); - } - - if (!Array.isArray(cells)) { - - cells = [cells]; - } - - cells.forEach(function (cell) { - - _this31.modules.validate.clearValidation(cell._getSelf()); - }); - } - }; - - Tabulator.prototype.validate = function (cells) { - - var output = []; - - //clear row data - - this.rowManager.rows.forEach(function (row) { - - var valid = row.validate(); - - if (valid !== true) { - - output = output.concat(valid); - } - }); - - return output.length ? output : true; - }; - - //////////// Pagination Functions //////////// - - - Tabulator.prototype.setMaxPage = function (max) { - - if (this.options.pagination && this.modExists("page")) { - - this.modules.page.setMaxPage(max); - } else { - - return false; - } - }; - - Tabulator.prototype.setPage = function (page) { - - if (this.options.pagination && this.modExists("page")) { - - return this.modules.page.setPage(page); - } else { - - return new Promise(function (resolve, reject) { - reject(); - }); - } - }; - - Tabulator.prototype.setPageToRow = function (row) { - var _this32 = this; - - return new Promise(function (resolve, reject) { - - if (_this32.options.pagination && _this32.modExists("page")) { - - row = _this32.rowManager.findRow(row); - - if (row) { - - _this32.modules.page.setPageToRow(row).then(function () { - - resolve(); - }).catch(function () { - - reject(); - }); - } else { - - reject(); - } - } else { - - reject(); - } - }); - }; - - Tabulator.prototype.setPageSize = function (size) { - - if (this.options.pagination && this.modExists("page")) { - - this.modules.page.setPageSize(size); - - this.modules.page.setPage(1).then(function () {}).catch(function () {}); - } else { - - return false; - } - }; - - Tabulator.prototype.getPageSize = function () { - - if (this.options.pagination && this.modExists("page", true)) { - - return this.modules.page.getPageSize(); - } - }; - - Tabulator.prototype.previousPage = function () { - - if (this.options.pagination && this.modExists("page")) { - - this.modules.page.previousPage(); - } else { - - return false; - } - }; - - Tabulator.prototype.nextPage = function () { - - if (this.options.pagination && this.modExists("page")) { - - this.modules.page.nextPage(); - } else { - - return false; - } - }; - - Tabulator.prototype.getPage = function () { - - if (this.options.pagination && this.modExists("page")) { - - return this.modules.page.getPage(); - } else { - - return false; - } - }; - - Tabulator.prototype.getPageMax = function () { - - if (this.options.pagination && this.modExists("page")) { - - return this.modules.page.getPageMax(); - } else { - - return false; - } - }; - - ///////////////// Grouping Functions /////////////// - - - Tabulator.prototype.setGroupBy = function (groups) { - - if (this.modExists("groupRows", true)) { - - this.options.groupBy = groups; - - 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; - - this.modules.groupRows.initialize(); - - if (this.options.groupBy) { - - this.rowManager.refreshActiveData("group"); - - if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) { - - this.modules.persistence.save("group"); - } - } else { - - console.warn("Grouping Update - cant refresh view, no groups have been set"); - } - } else { - - return false; - } - }; - - Tabulator.prototype.setGroupHeader = function (values) { - - if (this.modExists("groupRows", true)) { - - this.options.groupHeader = values; - - this.modules.groupRows.initialize(); - - if (this.options.groupBy) { - - this.rowManager.refreshActiveData("group"); - - if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) { - - this.modules.persistence.save("group"); - } - } else { - - console.warn("Grouping Update - cant refresh view, no groups have been set"); - } - } else { - - return false; - } - }; - - Tabulator.prototype.getGroups = function (values) { - - if (this.modExists("groupRows", true)) { - - return this.modules.groupRows.getGroups(true); - } else { - - return false; - } - }; - - // get grouped table data in the same format as getData() - - Tabulator.prototype.getGroupedData = function () { - - if (this.modExists("groupRows", true)) { - - return this.options.groupBy ? this.modules.groupRows.getGroupedData() : this.getData(); - } - }; - - Tabulator.prototype.getEditedCells = function () { - - if (this.modExists("edit", true)) { - - return this.modules.edit.getEditedCells(); - } - }; - - Tabulator.prototype.clearCellEdited = function (cells) { - var _this33 = this; - - if (this.modExists("edit", true)) { - - if (!cells) { - - cells = this.modules.edit.getEditedCells(); - } - - if (!Array.isArray(cells)) { - - cells = [cells]; - } - - cells.forEach(function (cell) { - - _this33.modules.edit.clearEdited(cell._getSelf()); - }); - } - }; - - ///////////////// Column Calculation Functions /////////////// - - Tabulator.prototype.getCalcResults = function () { - - if (this.modExists("columnCalcs", true)) { - - return this.modules.columnCalcs.getResults(); - } else { - - return false; - } - }; - - Tabulator.prototype.recalc = function () { - - if (this.modExists("columnCalcs", true)) { - - this.modules.columnCalcs.recalcAll(this.rowManager.activeRows); - } - }; - - /////////////// Navigation Management ////////////// - - - Tabulator.prototype.navigatePrev = function () { - - var cell = false; - - if (this.modExists("edit", true)) { - - cell = this.modules.edit.currentCell; - - if (cell) { - - return cell.nav().prev(); - } - } - - return false; - }; - - Tabulator.prototype.navigateNext = function () { - - var cell = false; - - if (this.modExists("edit", true)) { - - cell = this.modules.edit.currentCell; - - if (cell) { - - return cell.nav().next(); - } - } - - return false; - }; - - Tabulator.prototype.navigateLeft = function () { - - var cell = false; - - if (this.modExists("edit", true)) { - - cell = this.modules.edit.currentCell; - - if (cell) { - - e.preventDefault(); - - return cell.nav().left(); - } - } - - return false; - }; - - Tabulator.prototype.navigateRight = function () { - - var cell = false; - - if (this.modExists("edit", true)) { - - cell = this.modules.edit.currentCell; - - if (cell) { - - e.preventDefault(); - - return cell.nav().right(); - } - } - - return false; - }; - - Tabulator.prototype.navigateUp = function () { - - var cell = false; - - if (this.modExists("edit", true)) { - - cell = this.modules.edit.currentCell; - - if (cell) { - - e.preventDefault(); - - return cell.nav().up(); - } - } - - return false; - }; - - Tabulator.prototype.navigateDown = function () { - - var cell = false; - - if (this.modExists("edit", true)) { - - cell = this.modules.edit.currentCell; - - if (cell) { - - e.preventDefault(); - - return cell.nav().down(); - } - } - - return false; - }; - - /////////////// History Management ////////////// - - Tabulator.prototype.undo = function () { - - if (this.options.history && this.modExists("history", true)) { - - return this.modules.history.undo(); - } else { - - return false; - } - }; - - Tabulator.prototype.redo = function () { - - if (this.options.history && this.modExists("history", true)) { - - return this.modules.history.redo(); - } else { - - return false; - } - }; - - Tabulator.prototype.getHistoryUndoSize = function () { - - if (this.options.history && this.modExists("history", true)) { - - return this.modules.history.getHistoryUndoSize(); - } else { - - return false; - } - }; - - Tabulator.prototype.getHistoryRedoSize = function () { - - if (this.options.history && this.modExists("history", true)) { - - return this.modules.history.getHistoryRedoSize(); - } else { - - return false; - } - }; - - /////////////// Download Management ////////////// - - - Tabulator.prototype.download = function (type, filename, options, active) { - - if (this.modExists("download", true)) { - - this.modules.download.download(type, filename, options, active); - } - }; - - Tabulator.prototype.downloadToTab = function (type, filename, options, active) { - - if (this.modExists("download", true)) { - - this.modules.download.download(type, filename, options, active, true); - } - }; - - /////////// Inter Table Communications /////////// - - - Tabulator.prototype.tableComms = function (table, module, action, data) { - - this.modules.comms.receive(table, module, action, data); - }; - - ////////////// Extension Management ////////////// - - - //object to hold module - - Tabulator.prototype.moduleBindings = {}; - - //extend module - - Tabulator.prototype.extendModule = function (name, property, values) { - - if (Tabulator.prototype.moduleBindings[name]) { - - var source = Tabulator.prototype.moduleBindings[name].prototype[property]; - - if (source) { - - if ((typeof values === 'undefined' ? 'undefined' : _typeof(values)) == "object") { - - 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); - } - }; - - //add module to tabulator - - Tabulator.prototype.registerModule = function (name, module) { - - var self = this; - - Tabulator.prototype.moduleBindings[name] = module; - }; - - //ensure that module are bound to instantiated function - - Tabulator.prototype.bindModules = function () { - - this.modules = {}; - - for (var name in Tabulator.prototype.moduleBindings) { - - this.modules[name] = new Tabulator.prototype.moduleBindings[name](this); - } - }; - - //Check for module - - Tabulator.prototype.modExists = function (plugin, required) { - - if (this.modules[plugin]) { - - return true; - } else { - - if (required) { - - console.error("Tabulator Module Not Installed: " + plugin); - } - - return false; - } - }; - - 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) { - - if (obj[i] != null && _typeof(obj[i]) === "object") { - - if (obj[i] instanceof Date) { - - clone[i] = new Date(obj[i]); - } else { - - clone[i] = this.deepClone(obj[i]); - } - } else { - - 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); - - if (index > -1) { - - Tabulator.prototype.comms.tables.splice(index, 1); - } - }, - - lookupTable: function lookupTable(query, silent) { - - var results = [], - matches, - match; - - if (typeof query === "string") { - - matches = document.querySelectorAll(query); - - if (matches.length) { - - for (var i = 0; i < matches.length; i++) { - - match = Tabulator.prototype.comms.matchElement(matches[i]); - - if (match) { - - results.push(match); - } - } - } - } else if (typeof HTMLElement !== "undefined" && query instanceof HTMLElement || query instanceof Tabulator) { - - match = Tabulator.prototype.comms.matchElement(query); - - if (match) { - - results.push(match); - } - } else if (Array.isArray(query)) { - - query.forEach(function (item) { - - results = results.concat(Tabulator.prototype.comms.lookupTable(item)); - }); - } else { - - if (!silent) { - - console.warn("Table Connection Error - Invalid Selector", query); - } - } - - return results; - }, - - matchElement: function matchElement(element) { - - return Tabulator.prototype.comms.tables.find(function (table) { - - return element instanceof Tabulator ? table === element : table.element === element; - }); - } - - }; - - Tabulator.prototype.findTable = function (query) { - - var results = Tabulator.prototype.comms.lookupTable(query, true); - - return Array.isArray(results) && !results.length ? false : results; - }; - - var Layout = function Layout(table) { - - this.table = table; - - this.mode = null; - }; - - //initialize layout system - - - Layout.prototype.initialize = function (layout) { - - if (this.modes[layout]) { - - this.mode = layout; - } else { - - console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : " + layout); - - this.mode = 'fitData'; - } - - this.table.element.setAttribute("tabulator-layout", this.mode); - }; - - Layout.prototype.getMode = function () { - - return this.mode; - }; - - //trigger table layout - - - Layout.prototype.layout = function () { - - this.modes[this.mode].call(this, this.table.columnManager.columnsByIndex); - }; - - //layout render functions - - - Layout.prototype.modes = { - - //resize columns to fit data they contain - - - "fitData": function fitData(columns) { - - columns.forEach(function (column) { - - column.reinitializeWidth(); - }); - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.update(); - } - }, - - //resize columns to fit data they contain and stretch row to fill table - - - "fitDataFill": function fitDataFill(columns) { - - columns.forEach(function (column) { - - column.reinitializeWidth(); - }); - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.update(); - } - }, - - //resize columns to fit data they contain - - - "fitDataTable": function fitDataTable(columns) { - - columns.forEach(function (column) { - - column.reinitializeWidth(); - }); - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.update(); - } - }, - - //resize columns to fit data the contain and stretch last column to fill table - - - "fitDataStretch": function fitDataStretch(columns) { - var _this34 = this; - - var colsWidth = 0, - tableWidth = this.table.rowManager.element.clientWidth, - gap = 0, - lastCol = false; - - columns.forEach(function (column, i) { - - if (!column.widthFixed) { - - column.reinitializeWidth(); - } - - if (_this34.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible) { - - lastCol = column; - } - - if (column.visible) { - - colsWidth += column.getWidth(); - } - }); - - if (lastCol) { - - gap = tableWidth - colsWidth + lastCol.getWidth(); - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - lastCol.setWidth(0); - - this.table.modules.responsiveLayout.update(); - } - - if (gap > 0) { - - lastCol.setWidth(gap); - } else { - - lastCol.reinitializeWidth(); - } - } else { - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.update(); - } - } - }, - - //resize columns to fit - - - "fitColumns": function fitColumns(columns) { - - var self = this; - - var totalWidth = self.table.element.clientWidth; //table element width - - - var fixedWidth = 0; //total width of columns with a defined width - - - var flexWidth = 0; //total width available to flexible columns - - - var flexGrowUnits = 0; //total number of widthGrow blocks accross all columns - - - var flexColWidth = 0; //desired width of flexible columns - - - var flexColumns = []; //array of flexible width columns - - - var fixedShrinkColumns = []; //array of fixed width columns that can shrink - - - var flexShrinkUnits = 0; //total number of widthShrink blocks accross all columns - - - var overflowWidth = 0; //horizontal overflow width - - - var gapFill = 0; //number of pixels to be added to final column to close and half pixel gaps - - - function calcWidth(width) { - - var colWidth; - - if (typeof width == "string") { - - if (width.indexOf("%") > -1) { - - colWidth = totalWidth / 100 * parseInt(width); - } else { - - colWidth = parseInt(width); - } - } else { - - colWidth = width; - } - - return colWidth; - } - - //ensure columns resize to take up the correct amount of space - - - 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); - } - - columns.forEach(function (col, i) { - - var width = shrinkCols ? calcShrink(col) : calcGrow(col); - - if (col.column.minWidth >= width) { - - oversizeCols.push(col); - } else { - - undersizeCols.push(col); - - changeUnits += shrinkCols ? col.column.definition.widthShrink || 1 : col.column.definition.widthGrow || 1; - } - }); - - if (oversizeCols.length) { - - oversizeCols.forEach(function (col) { - - oversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth; - - col.width = col.column.minWidth; - }); - - remainingSpace = freeSpace - oversizeSpace; - - nextColWidth = changeUnits ? Math.floor(remainingSpace / changeUnits) : remainingSpace; - - gap = remainingSpace - nextColWidth * changeUnits; - - gap += scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols); - } else { - - gap = changeUnits ? freeSpace - Math.floor(freeSpace / changeUnits) * changeUnits : freeSpace; - - undersizeCols.forEach(function (column) { - - column.width = shrinkCols ? calcShrink(column) : calcGrow(column); - }); - } - - return gap; - } - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.update(); - } - - //adjust for vertical scrollbar if present - - - if (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; - - if (column.visible) { - - width = column.definition.width; - - minWidth = parseInt(column.minWidth); - - if (width) { - - colWidth = calcWidth(width); - - fixedWidth += colWidth > minWidth ? colWidth : minWidth; - - if (column.definition.widthShrink) { - - fixedShrinkColumns.push({ - - column: column, - - width: colWidth > minWidth ? colWidth : minWidth - - }); - - flexShrinkUnits += column.definition.widthShrink; - } - } else { - - flexColumns.push({ - - column: column, - - width: 0 - - }); - - flexGrowUnits += column.definition.widthGrow || 1; - } - } - }); - - //calculate available space - - - flexWidth = totalWidth - fixedWidth; - - //calculate correct column size - - - flexColWidth = Math.floor(flexWidth / flexGrowUnits); - - //generate column widths - - - var gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false); - - //increase width of last column to account for rounding errors - - - if (flexColumns.length && gapFill > 0) { - - flexColumns[flexColumns.length - 1].width += +gapFill; - } - - //caculate space for columns to be shrunk into - - - flexColumns.forEach(function (col) { - - flexWidth -= col.width; - }); - - overflowWidth = Math.abs(gapFill) + flexWidth; - - //shrink oversize columns if there is no available space - - - if (overflowWidth > 0 && flexShrinkUnits) { - - gapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true); - } - - //decrease width of last column to account for rounding errors - - - if (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; //hold Tabulator object - - this.locale = "default"; //current locale - - this.lang = false; //current language - - this.bindings = {}; //update events to call when locale is changed - }; - - //set header placehoder - - Localize.prototype.setHeaderFilterPlaceholder = function (placeholder) { - - this.langs.default.headerFilters.default = placeholder; - }; - - //set header filter placeholder by column - - Localize.prototype.setHeaderFilterColumnPlaceholder = function (column, placeholder) { - - this.langs.default.headerFilters.columns[column] = placeholder; - - if (this.lang && !this.lang.headerFilters.columns[column]) { - - this.lang.headerFilters.columns[column] = placeholder; - } - }; - - //setup a lang description object - - Localize.prototype.installLang = function (locale, lang) { - - if (this.langs[locale]) { - - this._setLangProp(this.langs[locale], lang); - } else { - - this.langs[locale] = lang; - } - }; - - Localize.prototype._setLangProp = function (lang, values) { - - for (var key in values) { - - if (lang[key] && _typeof(lang[key]) == "object") { - - this._setLangProp(lang[key], values[key]); - } else { - - lang[key] = values[key]; - } - } - }; - - //set current locale - - Localize.prototype.setLocale = function (desiredLocale) { - - var self = this; - - desiredLocale = desiredLocale || "default"; - - //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] = {}; - } - - traverseLang(trans[prop], path[prop]); - } else { - - path[prop] = trans[prop]; - } - } - } - - //determing correct locale to load - - if (desiredLocale === true && navigator.language) { - - //get local from system - - desiredLocale = navigator.language.toLowerCase(); - } - - if (desiredLocale) { - - //if locale is not set, check for matching top level locale else use default - - if (!self.langs[desiredLocale]) { - - var prefix = desiredLocale.split("-")[0]; - - if (self.langs[prefix]) { - - console.warn("Localization Error - Exact matching locale not found, using closest match: ", desiredLocale, prefix); - - desiredLocale = prefix; - } else { - - console.warn("Localization Error - Matching locale not found, using default: ", desiredLocale); - - desiredLocale = "default"; - } - } - } - - self.locale = desiredLocale; - - //load default lang template - - self.lang = Tabulator.prototype.helpers.deepClone(self.langs.default || {}); - - if (desiredLocale != "default") { - - traverseLang(self.langs[desiredLocale], self.lang); - } - - self.table.options.localized.call(self.table, self.locale, self.lang); - - self._executeBindings(); - }; - - //get current locale - - Localize.prototype.getLocale = function (locale) { - - return self.locale; - }; - - //get lang object for given local or current if none provided - - Localize.prototype.getLang = function (locale) { - - return locale ? this.langs[locale] : this.lang; - }; - - //get text for current locale - - Localize.prototype.getText = function (path, value) { - - var path = value ? path + "|" + value : path, - pathArray = path.split("|"), - text = this._getLangElement(pathArray, this.locale); - - // if(text === false){ - - // console.warn("Localization Error - Matching localized text not found for given path: ", path); - - // } - - - return text || ""; - }; - - //traverse langs object and find localized copy - - Localize.prototype._getLangElement = function (path, locale) { - - var self = this; - - var root = self.lang; - - path.forEach(function (level) { - - var rootPath; - - if (root) { - - rootPath = root[level]; - - if (typeof rootPath != "undefined") { - - root = rootPath; - } else { - - root = false; - } - } - }); - - return root; - }; - - //set update binding - - Localize.prototype.bind = function (path, callback) { - - if (!this.bindings[path]) { - - this.bindings[path] = []; - } - - this.bindings[path].push(callback); - - callback(this.getText(path), this.lang); - }; - - //itterate through bindings and trigger updates - - Localize.prototype._executeBindings = function () { - - var self = this; - - var _loop = function _loop(path) { - - self.bindings[path].forEach(function (binding) { - - binding(self.getText(path), self.lang); - }); - }; - - for (var path in self.bindings) { - _loop(path); - } - }; - - //Localized text listings - - Localize.prototype.langs = { - - "default": { //hold default locale text - - "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; - - connection = Tabulator.prototype.comms.lookupTable(selectors); - - connection.forEach(function (con) { - - if (self.table !== con) { - - connections.push(con); - } - }); - - return 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); - }); - - if (!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); - } else { - - console.warn("Inter-table Comms Error - no such module:", module); - } - }; - - Tabulator.prototype.registerModule("comms", Comms); - - var Accessor = function Accessor(table) { - this.table = table; //hold Tabulator object - this.allowedTypes = ["", "data", "download", "clipboard", "print", "htmlOutput"]; //list of accessor types - }; - - //initialize column accessor - Accessor.prototype.initializeColumn = function (column) { - var self = this, - match = false, - config = {}; - - this.allowedTypes.forEach(function (type) { - var key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)), - accessor; - - if (column.definition[key]) { - accessor = self.lookupAccessor(column.definition[key]); - - if (accessor) { - match = true; - - config[key] = { - accessor: accessor, - params: column.definition[key + "Params"] || {} - }; - } - } - }); - - if (match) { - column.modules.accessor = config; - } - }; - - Accessor.prototype.lookupAccessor = function (value) { - var accessor = false; - - //set column accessor - switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) { - case "string": - if (this.accessors[value]) { - accessor = this.accessors[value]; - } else { - console.warn("Accessor Error - No such accessor found, ignoring: ", value); - } - break; - - case "function": - accessor = value; - break; - } - - return accessor; - }; - - //apply accessor to row - 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(dataIn || {}); - - self.table.columnManager.traverse(function (column) { - var value, accessor, params, component; - - if (column.modules.accessor) { - - accessor = column.modules.accessor[key] || column.modules.accessor.accessor || false; - - if (accessor) { - value = column.getFieldValue(data); - - if (value != "undefined") { - 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)); - } - } - } - }); - - return data; - }, - - //default accessors - Accessor.prototype.accessors = {}; - - Tabulator.prototype.registerModule("accessor", Accessor); - var Ajax = function Ajax(table) { - - this.table = table; //hold Tabulator object - this.config = false; //hold config object for ajax request - this.url = ""; //request URL - this.urlGenerator = false; - this.params = false; //request parameters - - this.loaderElement = this.createLoaderElement(); //loader message div - this.msgElement = this.createMsgElement(); //message element - this.loadingElement = false; - this.errorElement = false; - this.loaderPromise = false; - - this.progressiveLoad = false; - this.loading = false; - - this.requestOrder = 0; //prevent requests comming out of sequence if overridden by another load request - }; - - //initialize setup options - Ajax.prototype.initialize = function () { - var template; - - this.loaderElement.appendChild(this.msgElement); - - if (this.table.options.ajaxLoaderLoading) { - if (typeof this.table.options.ajaxLoaderLoading == "string") { - template = document.createElement('template'); - template.innerHTML = this.table.options.ajaxLoaderLoading.trim(); - this.loadingElement = template.content.firstChild; - } else { - this.loadingElement = this.table.options.ajaxLoaderLoading; - } - } - - this.loaderPromise = this.table.options.ajaxRequestFunc || this.defaultLoaderPromise; - - this.urlGenerator = this.table.options.ajaxURLGenerator || this.defaultURLGenerator; - - if (this.table.options.ajaxLoaderError) { - if (typeof this.table.options.ajaxLoaderError == "string") { - template = document.createElement('template'); - template.innerHTML = this.table.options.ajaxLoaderError.trim(); - this.errorElement = template.content.firstChild; - } else { - this.errorElement = this.table.options.ajaxLoaderError; - } - } - - if (this.table.options.ajaxParams) { - this.setParams(this.table.options.ajaxParams); - } - - if (this.table.options.ajaxConfig) { - this.setConfig(this.table.options.ajaxConfig); - } - - if (this.table.options.ajaxURL) { - this.setUrl(this.table.options.ajaxURL); - } - - if (this.table.options.ajaxProgressiveLoad) { - if (this.table.options.pagination) { - this.progressiveLoad = false; - console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time"); - } else { - if (this.table.modExists("page")) { - this.progressiveLoad = this.table.options.ajaxProgressiveLoad; - this.table.modules.page.initializeProgressive(this.progressiveLoad); - } else { - console.error("Pagination plugin is required for progressive ajax loading"); - } - } - } - }; - - Ajax.prototype.createLoaderElement = function () { - var el = document.createElement("div"); - el.classList.add("tabulator-loader"); - return el; - }; - - Ajax.prototype.createMsgElement = function () { - var el = document.createElement("div"); - - el.classList.add("tabulator-loader-msg"); - el.setAttribute("role", "alert"); - - return el; - }; - - //set ajax params - Ajax.prototype.setParams = function (params, update) { - if (update) { - this.params = this.params || {}; - - for (var key in params) { - this.params[key] = params[key]; - } - } else { - this.params = params; - } - }; - - Ajax.prototype.getParams = function () { - return this.params || {}; - }; - - //load config object - Ajax.prototype.setConfig = function (config) { - this._loadDefaultConfig(); - - if (typeof config == "string") { - this.config.method = config; - } else { - for (var key in config) { - this.config[key] = config[key]; - } - } - }; - - //create config object from default - Ajax.prototype._loadDefaultConfig = function (force) { - var self = this; - if (!self.config || force) { - - self.config = {}; - - //load base config from defaults - for (var key in self.defaultConfig) { - self.config[key] = self.defaultConfig[key]; - } - } - }; - - //set request url - Ajax.prototype.setUrl = function (url) { - this.url = url; - }; - - //get request url - Ajax.prototype.getUrl = function () { - return this.url; - }; - - //lstandard loading function - Ajax.prototype.loadData = function (inPosition, columnsChanged) { - var self = this; - - if (this.progressiveLoad) { - return this._loadDataProgressive(); - } else { - return this._loadDataStandard(inPosition, columnsChanged); - } - }; - - Ajax.prototype.nextPage = function (diff) { - var margin; - - if (!this.loading) { - - margin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.getElement().clientHeight * 2; - - if (diff < margin) { - this.table.modules.page.nextPage().then(function () {}).catch(function () {}); - } - } - }; - - Ajax.prototype.blockActiveRequest = function () { - this.requestOrder++; - }; - - Ajax.prototype._loadDataProgressive = function () { - this.table.rowManager.setData([]); - return 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 = []; - - prefix = prefix || ""; - - if (Array.isArray(data)) { - data.forEach(function (item, i) { - output = output.concat(self.generateParamsList(item, prefix ? prefix + "[" + i + "]" : i)); - }); - } else if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) === "object") { - 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 = []; - - output.forEach(function (item) { - encoded.push(encodeURIComponent(item.key) + "=" + encodeURIComponent(item.value)); - }); - - return encoded.join("&"); - }; - - //send ajax request - Ajax.prototype.sendRequest = function (silent) { - var _this36 = this; - - var self = this, - url = self.url, - requestNo, - esc, - query; - - self.requestOrder++; - requestNo = self.requestOrder; - - self._loadDefaultConfig(); - - return new Promise(function (resolve, reject) { - if (self.table.options.ajaxRequesting.call(_this36.table, self.url, self.params) !== false) { - - self.loading = true; - - if (!silent) { - self.showLoader(); - } - - _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); - } - resolve(data); - - self.hideLoader(); - self.loading = false; - } else { - 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(); - }, 3000); - - self.loading = false; - - reject(); - }); - } else { - reject(); - } - }); - }; - - Ajax.prototype.showLoader = function () { - var shouldLoad = typeof this.table.options.ajaxLoader === "function" ? this.table.options.ajaxLoader() : this.table.options.ajaxLoader; - - if (shouldLoad) { - - this.hideLoader(); - - while (this.msgElement.firstChild) { - this.msgElement.removeChild(this.msgElement.firstChild); - }this.msgElement.classList.remove("tabulator-error"); - this.msgElement.classList.add("tabulator-loading"); - - if (this.loadingElement) { - this.msgElement.appendChild(this.loadingElement); - } else { - this.msgElement.innerHTML = this.table.modules.localize.getText("ajax|loading"); - } - - this.table.element.appendChild(this.loaderElement); - } - }; - - Ajax.prototype.showError = function () { - this.hideLoader(); - - while (this.msgElement.firstChild) { - this.msgElement.removeChild(this.msgElement.firstChild); - }this.msgElement.classList.remove("tabulator-loading"); - this.msgElement.classList.add("tabulator-error"); - - if (this.errorElement) { - this.msgElement.appendChild(this.errorElement); - } else { - this.msgElement.innerHTML = this.table.modules.localize.getText("ajax|error"); - } - - this.table.element.appendChild(this.loaderElement); - }; - - Ajax.prototype.hideLoader = function () { - if (this.loaderElement.parentNode) { - this.loaderElement.parentNode.removeChild(this.loaderElement); - } - }; - - //default ajax config object - Ajax.prototype.defaultConfig = { - method: "GET" - }; - - Ajax.prototype.defaultURLGenerator = function (url, config, params) { - - if (url) { - if (params && Object.keys(params).length) { - if (!config.method || config.method.toLowerCase() == "get") { - config.method = "get"; - - url += (url.includes("?") ? "&" : "?") + this.serializeParams(params); - } - } - } - - return url; - }; - - Ajax.prototype.defaultLoaderPromise = function (url, config, params) { - var self = this, - contentType; - - return new Promise(function (resolve, reject) { - - //set url - url = self.urlGenerator(url, config, params); - - //set body content if not GET request - if (config.method.toUpperCase() != "GET") { - contentType = _typeof(self.table.options.ajaxContentType) === "object" ? self.table.options.ajaxContentType : self.contentTypeFormatters[self.table.options.ajaxContentType]; - if (contentType) { - - for (var key in contentType.headers) { - if (!config.headers) { - config.headers = {}; - } - - if (typeof config.headers[key] === "undefined") { - 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); - } - } - - if (url) { - - //configure headers - if (typeof config.headers === "undefined") { - config.headers = {}; - } - - if (typeof config.headers.Accept === "undefined") { - config.headers.Accept = "application/json"; - } - - if (typeof config.headers["X-Requested-With"] === "undefined") { - config.headers["X-Requested-With"] = "XMLHttpRequest"; - } - - if (typeof config.mode === "undefined") { - config.mode = "cors"; - } - - if (config.mode == "cors") { - - if (typeof config.headers["Access-Control-Allow-Origin"] === "undefined") { - config.headers["Access-Control-Allow-Origin"] = window.location.origin; - } - - if (typeof config.credentials === "undefined") { - config.credentials = 'same-origin'; - } - } else { - if (typeof config.credentials === "undefined") { - config.credentials = 'include'; - } - } - - //send request - fetch(url, config).then(function (response) { - if (response.ok) { - response.json().then(function (data) { - resolve(data); - }).catch(function (error) { - reject(error); - console.warn("Ajax Load Error - Invalid JSON returned", error); - }); - } else { - 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); - }); - } else { - 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(); - - output.forEach(function (item) { - form.append(item.key, item.value); - }); - - return form; - } - } - }; - - Tabulator.prototype.registerModule("ajax", Ajax); - - var ColumnCalcs = function ColumnCalcs(table) { - this.table = table; //hold Tabulator object - this.topCalcs = []; - this.botCalcs = []; - this.genColumn = false; - this.topElement = this.createElement(); - this.botElement = this.createElement(); - this.topRow = false; - this.botRow = false; - this.topInitialized = false; - this.botInitialized = false; - - this.initialize(); - }; - - ColumnCalcs.prototype.createElement = function () { - var el = document.createElement("div"); - el.classList.add("tabulator-calcs-holder"); - return el; - }; - - ColumnCalcs.prototype.initialize = function () { - this.genColumn = new Column({ field: "value" }, this); - }; - - //dummy functions to handle being mock column manager - ColumnCalcs.prototype.registerColumnField = function () {}; - - //initialize column calcs - ColumnCalcs.prototype.initializeColumn = function (column) { - var def = column.definition; - - var config = { - topCalcParams: def.topCalcParams || {}, - botCalcParams: def.bottomCalcParams || {} - }; - - if (def.topCalc) { - - switch (_typeof(def.topCalc)) { - case "string": - if (this.calculations[def.topCalc]) { - config.topCalc = this.calculations[def.topCalc]; - } else { - console.warn("Column Calc Error - No such calculation found, ignoring: ", def.topCalc); - } - break; - - case "function": - config.topCalc = def.topCalc; - break; - - } - - if (config.topCalc) { - column.modules.columnCalcs = config; - this.topCalcs.push(column); - - if (this.table.options.columnCalcs != "group") { - this.initializeTopRow(); - } - } - } - - if (def.bottomCalc) { - switch (_typeof(def.bottomCalc)) { - case "string": - if (this.calculations[def.bottomCalc]) { - config.botCalc = this.calculations[def.bottomCalc]; - } else { - console.warn("Column Calc Error - No such calculation found, ignoring: ", def.bottomCalc); - } - break; - - case "function": - config.botCalc = def.bottomCalc; - break; - - } - - if (config.botCalc) { - column.modules.columnCalcs = config; - this.botCalcs.push(column); - - if (this.table.options.columnCalcs != "group") { - this.initializeBottomRow(); - } - } - } - }; - - ColumnCalcs.prototype.removeCalcs = function () { - var changed = false; - - if (this.topInitialized) { - this.topInitialized = false; - this.topElement.parentNode.removeChild(this.topElement); - changed = true; - } - - if (this.botInitialized) { - this.botInitialized = false; - this.table.footerManager.remove(this.botElement); - changed = true; - } - - if (changed) { - this.table.rowManager.adjustTableSize(); - } - }; - - ColumnCalcs.prototype.initializeTopRow = function () { - if (!this.topInitialized) { - // this.table.columnManager.headersElement.after(this.topElement); - this.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling); - this.topInitialized = true; - } - }; - - ColumnCalcs.prototype.initializeBottomRow = function () { - if (!this.botInitialized) { - this.table.footerManager.prepend(this.botElement); - this.botInitialized = true; - } - }; - - ColumnCalcs.prototype.scrollHorizontal = function (left) { - var hozAdjust = 0, - scrollWidth = this.table.columnManager.getElement().scrollWidth - this.table.element.clientWidth; - - if (this.botInitialized) { - this.botRow.getElement().style.marginLeft = -left + "px"; - } - }; - - ColumnCalcs.prototype.recalc = function (rows) { - var data, row; - - if (this.topInitialized || this.botInitialized) { - data = this.rowsToData(rows); - - if (this.topInitialized) { - if (this.topRow) { - this.topRow.deleteCells(); - } - - row = this.generateRow("top", this.rowsToData(rows)); - this.topRow = row; - while (this.topElement.firstChild) { - this.topElement.removeChild(this.topElement.firstChild); - }this.topElement.appendChild(row.getElement()); - row.initialize(true); - } - - if (this.botInitialized) { - if (this.botRow) { - this.botRow.deleteCells(); - } - - row = this.generateRow("bottom", this.rowsToData(rows)); - this.botRow = row; - while (this.botElement.firstChild) { - this.botElement.removeChild(this.botElement.firstChild); - }this.botElement.appendChild(row.getElement()); - row.initialize(true); - } - - this.table.rowManager.adjustTableSize(); - - //set resizable handles - if (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; - - if (this.topCalcs.length || this.botCalcs.length) { - if (this.table.options.columnCalcs !== "group") { - this.recalc(this.table.rowManager.activeRows); - } - - if (this.table.options.groupBy && this.table.options.columnCalcs !== "table") { - - var groups = table.modules.groupRows.getChildGroups(); - - groups.forEach(function (group) { - _this37.recalcGroup(group); - }); - } - } - }; - - ColumnCalcs.prototype.recalcGroup = function (group) { - var data, rowData; - - if (group) { - if (group.calcs) { - if (group.calcs.bottom) { - data = this.rowsToData(group.rows); - rowData = this.generateRowData("bottom", data); - - group.calcs.bottom.updateData(rowData); - group.calcs.bottom.reinitialize(); - } - - if (group.calcs.top) { - data = this.rowsToData(group.rows); - rowData = this.generateRowData("top", data); - - group.calcs.top.updateData(rowData); - group.calcs.top.reinitialize(); - } - } - } - }; - - //generate top stats row - ColumnCalcs.prototype.generateTopRow = function (rows) { - return this.generateRow("top", this.rowsToData(rows)); - }; - //generate bottom stats row - ColumnCalcs.prototype.generateBottomRow = function (rows) { - return this.generateRow("bottom", this.rowsToData(rows)); - }; - - ColumnCalcs.prototype.rowsToData = function (rows) { - var _this38 = this; - - var data = []; - - rows.forEach(function (row) { - data.push(row.getData()); - - if (_this38.table.options.dataTree && _this38.table.options.dataTreeChildColumnCalcs) { - if (row.modules.dataTree.open) { - var children = _this38.rowsToData(_this38.table.modules.dataTree.getFilteredTreeChildren(row)); - data = data.concat(children); - } - } - }); - - return data; - }; - - //generate stats row - ColumnCalcs.prototype.generateRow = function (pos, data) { - var self = this, - rowData = this.generateRowData(pos, data), - row; - - if (self.table.modExists("mutator")) { - self.table.modules.mutator.disable(); - } - - row = new Row(rowData, this, "calc"); - - if (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) { - - //set field name of mock column - self.genColumn.setField(column.getField()); - 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"] - }; - } else { - self.genColumn.modules.format = { - formatter: self.table.modules.format.getFormatter("plaintext"), - params: {} - }; - } - - //ensure css class defintion is replicated to calculation cell - self.genColumn.definition.cssClass = column.definition.cssClass; - - //generate cell and assign to correct column - var cell = new Cell(self.genColumn, row); - cell.column = column; - cell.setWidth(); - - column.cells.push(cell); - cells.push(cell); - - if (!column.visible) { - cell.hide(); - } - }); - - this.cells = cells; - }; - - return row; - }; - - //generate stats row - ColumnCalcs.prototype.generateRowData = function (pos, data) { - var rowData = {}, - calcs = pos == "top" ? this.topCalcs : this.botCalcs, - type = pos == "top" ? "topCalc" : "botCalc", - params, - paramKey; - - calcs.forEach(function (column) { - var values = []; - - if (column.modules.columnCalcs && column.modules.columnCalcs[type]) { - data.forEach(function (item) { - values.push(column.getFieldValue(item)); - }); - - paramKey = type + "Params"; - params = typeof column.modules.columnCalcs[paramKey] === "function" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey]; - - column.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params)); - } - }); - - return rowData; - }; - - ColumnCalcs.prototype.hasTopCalcs = function () { - return !!this.topCalcs.length; - }; - - ColumnCalcs.prototype.hasBottomCalcs = function () { - return !!this.botCalcs.length; - }; - - //handle table redraw - ColumnCalcs.prototype.redraw = function () { - if (this.topRow) { - this.topRow.normalizeHeight(true); - } - if (this.botRow) { - this.botRow.normalizeHeight(true); - } - }; - - //return the calculated - ColumnCalcs.prototype.getResults = function () { - var self = this, - results = {}, - groups; - - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - groups = this.table.modules.groupRows.getGroups(true); - - groups.forEach(function (group) { - results[group.getKey()] = self.getGroupResults(group); - }); - } else { - results = { - top: this.topRow ? this.topRow.getData() : {}, - bottom: this.botRow ? this.botRow.getData() : {} - }; - } - - return results; - }; - - //get results from a group - ColumnCalcs.prototype.getGroupResults = function (group) { - var self = this, - groupObj = group._getSelf(), - subGroups = group.getSubGroups(), - subGroupResults = {}, - results = {}; - - 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 - }; - - return results; - }; - - //default calculations - ColumnCalcs.prototype.calculations = { - "avg": function avg(values, data, calcParams) { - var output = 0, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : 2; - - if (values.length) { - output = values.reduce(function (sum, value) { - value = Number(value); - return sum + value; - }); - - output = output / values.length; - - output = precision !== false ? output.toFixed(precision) : output; - } - - return parseFloat(output).toString(); - }, - "max": function max(values, data, calcParams) { - var output = null, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false; - - values.forEach(function (value) { - - value = Number(value); - - if (value > output || output === null) { - output = value; - } - }); - - return output !== null ? precision !== false ? output.toFixed(precision) : output : ""; - }, - "min": function min(values, data, calcParams) { - var output = null, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false; - - values.forEach(function (value) { - - value = Number(value); - - if (value < output || output === null) { - output = value; - } - }); - - return output !== null ? precision !== false ? output.toFixed(precision) : output : ""; - }, - "sum": function sum(values, data, calcParams) { - var output = 0, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false; - - if (values.length) { - values.forEach(function (value) { - value = Number(value); - - output += !isNaN(value) ? Number(value) : 0; - }); - } - - return precision !== false ? output.toFixed(precision) : output; - }, - "concat": function concat(values, data, calcParams) { - var output = 0; - - if (values.length) { - output = values.reduce(function (sum, value) { - return String(sum) + String(value); - }); - } - - return output; - }, - "count": function count(values, data, calcParams) { - var output = 0; - - if (values.length) { - values.forEach(function (value) { - if (value) { - output++; - } - }); - } - - return output; - } - }; - - Tabulator.prototype.registerModule("columnCalcs", ColumnCalcs); - - var Clipboard = function Clipboard(table) { - this.table = table; - this.mode = true; - - this.pasteParser = function () {}; - this.pasteAction = function () {}; - this.customSelection = false; - this.rowRange = false; - this.blocked = true; //block copy actions not originating from this command - }; - - Clipboard.prototype.initialize = function () { - var _this39 = this; - - this.mode = this.table.options.clipboard; - - this.rowRange = this.table.options.clipboardCopyRowRange; - - if (this.mode === true || this.mode === "copy") { - this.table.element.addEventListener("copy", function (e) { - var plain, html, list; - - if (!_this39.blocked) { - e.preventDefault(); - - if (_this39.customSelection) { - plain = _this39.customSelection; - - if (_this39.table.options.clipboardCopyFormatter) { - plain = _this39.table.options.clipboardCopyFormatter("plain", plain); - } - } else { - - var list = _this39.table.modules.export.generateExportList(_this39.rowRange, _this39.table.options.clipboardCopyStyled, _this39.table.options.clipboardCopyConfig, "clipboard"); - - html = _this39.table.modules.export.genereateHTMLTable(list); - plain = html ? _this39.generatePlainContent(list) : ""; - - if (_this39.table.options.clipboardCopyFormatter) { - plain = _this39.table.options.clipboardCopyFormatter("plain", plain); - html = _this39.table.options.clipboardCopyFormatter("html", html); - } - } - - if (window.clipboardData && window.clipboardData.setData) { - window.clipboardData.setData('Text', plain); - } else if (e.clipboardData && e.clipboardData.setData) { - e.clipboardData.setData('text/plain', plain); - if (html) { - e.clipboardData.setData('text/html', html); - } - } else if (e.originalEvent && e.originalEvent.clipboardData.setData) { - e.originalEvent.clipboardData.setData('text/plain', plain); - if (html) { - e.originalEvent.clipboardData.setData('text/html', html); - } - } - - _this39.table.options.clipboardCopied.call(_this39.table, plain, html); - - _this39.reset(); - } - }); - } - - if (this.mode === true || this.mode === "paste") { - this.table.element.addEventListener("paste", function (e) { - _this39.paste(e); - }); - } - - this.setPasteParser(this.table.options.clipboardPasteParser); - this.setPasteAction(this.table.options.clipboardPasteAction); - }; - - Clipboard.prototype.reset = function () { - this.blocked = false; - this.originalSelectionText = ""; - }; - - Clipboard.prototype.generatePlainContent = function (list) { - var output = []; - - list.forEach(function (row) { - var rowData = []; - - row.columns.forEach(function (col) { - var value = ""; - - if (col) { - - if (row.type === "group") { - col.value = col.component.getKey(); - } - - switch (_typeof(col.value)) { - case "object": - value = JSON.stringify(col.value); - break; - - case "undefined": - case "null": - value = ""; - break; - - default: - value = col.value; - } - } - - rowData.push(value); - }); - - output.push(rowData.join("\t")); - }); - - return output.join("\n"); - }; - - Clipboard.prototype.copy = function (range, internal) { - var range, sel, textRange; - this.blocked = false; - this.customSelection = false; - - if (this.mode === true || this.mode === "copy") { - - this.rowRange = range || this.table.options.clipboardCopyRowRange; - - if (typeof window.getSelection != "undefined" && typeof document.createRange != "undefined") { - range = document.createRange(); - range.selectNodeContents(this.table.element); - sel = window.getSelection(); - - if (sel.toString() && internal) { - this.customSelection = sel.toString(); - } - - sel.removeAllRanges(); - sel.addRange(range); - } else if (typeof document.selection != "undefined" && typeof document.body.createTextRange != "undefined") { - textRange = document.body.createTextRange(); - textRange.moveToElementText(this.table.element); - textRange.select(); - } - - document.execCommand('copy'); - - if (sel) { - sel.removeAllRanges(); - } - } - }; - - //PASTE EVENT HANDLING - - Clipboard.prototype.setPasteAction = function (action) { - - switch (typeof action === 'undefined' ? 'undefined' : _typeof(action)) { - case "string": - this.pasteAction = this.pasteActions[action]; - - if (!this.pasteAction) { - console.warn("Clipboard Error - No such paste action found:", action); - } - break; - - case "function": - this.pasteAction = action; - break; - } - }; - - Clipboard.prototype.setPasteParser = function (parser) { - switch (typeof parser === 'undefined' ? 'undefined' : _typeof(parser)) { - case "string": - this.pasteParser = this.pasteParsers[parser]; - - if (!this.pasteParser) { - console.warn("Clipboard Error - No such paste parser found:", parser); - } - break; - - case "function": - this.pasteParser = parser; - break; - } - }; - - Clipboard.prototype.paste = function (e) { - var data, rowData, rows; - - if (this.checkPaseOrigin(e)) { - - data = this.getPasteData(e); - - rowData = this.pasteParser.call(this, data); - - if (rowData) { - e.preventDefault(); - - if (this.table.modExists("mutator")) { - rowData = this.mutateData(rowData); - } - - rows = this.pasteAction.call(this, rowData); - this.table.options.clipboardPasted.call(this.table, data, rowData, rows); - } else { - this.table.options.clipboardPasteError.call(this.table, data); - } - } - }; - - Clipboard.prototype.mutateData = function (data) { - var self = this, - output = []; - - if (Array.isArray(data)) { - data.forEach(function (row) { - output.push(self.table.modules.mutator.transformRow(row, "clipboard")); - }); - } else { - output = data; - } - - return output; - }; - - Clipboard.prototype.checkPaseOrigin = function (e) { - var valid = true; - - if (e.target.tagName != "DIV" || this.table.modules.edit.currentCell) { - valid = false; - } - - return valid; - }; - - Clipboard.prototype.getPasteData = function (e) { - var data; - - if (window.clipboardData && window.clipboardData.getData) { - data = window.clipboardData.getData('Text'); - } else if (e.clipboardData && e.clipboardData.getData) { - data = e.clipboardData.getData('text/plain'); - } else if (e.originalEvent && e.originalEvent.clipboardData.getData) { - data = e.originalEvent.clipboardData.getData('text/plain'); - } - - return data; - }; - - Clipboard.prototype.pasteParsers = { - table: function table(clipboard) { - var data = [], - success = false, - headerFindSuccess = true, - columns = this.table.columnManager.columns, - columnMap = [], - rows = []; - - //get data from clipboard into array of columns and rows. - clipboard = clipboard.split("\n"); - - clipboard.forEach(function (row) { - data.push(row.split("\t")); - }); - - if (data.length && !(data.length === 1 && data[0].length < 2)) { - success = true; - - //check if headers are present by title - data[0].forEach(function (value) { - var column = columns.find(function (column) { - return value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim(); - }); - - if (column) { - columnMap.push(column); - } else { - headerFindSuccess = false; - } - }); - - //check if column headers are present by field - if (!headerFindSuccess) { - headerFindSuccess = true; - columnMap = []; - - data[0].forEach(function (value) { - var column = columns.find(function (column) { - return value && column.field && value.trim() && column.field.trim() === value.trim(); - }); - - if (column) { - columnMap.push(column); - } else { - headerFindSuccess = false; - } - }); - - if (!headerFindSuccess) { - columnMap = this.table.columnManager.columnsByIndex; - } - } - - //remove header row if found - if (headerFindSuccess) { - data.shift(); - } - - data.forEach(function (item) { - var row = {}; - - item.forEach(function (value, i) { - if (columnMap[i]) { - row[columnMap[i].field] = value; - } - }); - - rows.push(row); - }); - - return rows; - } else { - return false; - } - } - }; - - Clipboard.prototype.pasteActions = { - replace: function replace(rows) { - return this.table.setData(rows); - }, - update: function update(rows) { - return this.table.updateOrAddData(rows); - }, - insert: function insert(rows) { - return this.table.addData(rows); - } - }; - - Tabulator.prototype.registerModule("clipboard", Clipboard); - - var DataTree = function DataTree(table) { - this.table = table; - this.indent = 10; - this.field = ""; - this.collapseEl = null; - this.expandEl = null; - this.branchEl = null; - this.elementField = false; - - this.startOpen = function () {}; - - this.displayIndex = 0; - }; - - DataTree.prototype.initialize = function () { - var dummyEl = null, - firstCol = this.table.columnManager.getFirstVisibileColumn(), - options = this.table.options; - - this.field = options.dataTreeChildField; - this.indent = options.dataTreeChildIndent; - this.elementField = options.dataTreeElementColumn || (firstCol ? firstCol.field : false); - - if (options.dataTreeBranchElement) { - - if (options.dataTreeBranchElement === true) { - this.branchEl = document.createElement("div"); - this.branchEl.classList.add("tabulator-data-tree-branch"); - } else { - if (typeof options.dataTreeBranchElement === "string") { - dummyEl = document.createElement("div"); - dummyEl.innerHTML = options.dataTreeBranchElement; - this.branchEl = dummyEl.firstChild; - } else { - this.branchEl = options.dataTreeBranchElement; - } - } - } - - if (options.dataTreeCollapseElement) { - if (typeof options.dataTreeCollapseElement === "string") { - dummyEl = document.createElement("div"); - dummyEl.innerHTML = options.dataTreeCollapseElement; - this.collapseEl = dummyEl.firstChild; - } else { - this.collapseEl = options.dataTreeCollapseElement; - } - } else { - this.collapseEl = document.createElement("div"); - this.collapseEl.classList.add("tabulator-data-tree-control"); - this.collapseEl.tabIndex = 0; - this.collapseEl.innerHTML = "
"; - } - - if (options.dataTreeExpandElement) { - if (typeof options.dataTreeExpandElement === "string") { - dummyEl = document.createElement("div"); - dummyEl.innerHTML = options.dataTreeExpandElement; - this.expandEl = dummyEl.firstChild; - } else { - this.expandEl = options.dataTreeExpandElement; - } - } else { - this.expandEl = document.createElement("div"); - this.expandEl.classList.add("tabulator-data-tree-control"); - this.expandEl.tabIndex = 0; - this.expandEl.innerHTML = "
"; - } - - switch (_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]; - }; - break; - } - }; - - DataTree.prototype.initializeRow = function (row) { - var childArray = row.getData()[this.field]; - var isArray = Array.isArray(childArray); - - var children = isArray || !isArray && (typeof childArray === 'undefined' ? 'undefined' : _typeof(childArray)) === "object" && childArray !== null; - - if (!children && row.modules.dataTree && row.modules.dataTree.branchEl) { - row.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl); - } - - if (!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) : false, - controlEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false, - branchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false, - parent: row.modules.dataTree ? row.modules.dataTree.parent : false, - children: children - }; - }; - - DataTree.prototype.layoutRow = function (row) { - var cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0], - el = cell.getElement(), - config = row.modules.dataTree; - - if (config.branchEl) { - if (config.branchEl.parentNode) { - config.branchEl.parentNode.removeChild(config.branchEl); - } - config.branchEl = false; - } - - if (config.controlEl) { - if (config.controlEl.parentNode) { - config.controlEl.parentNode.removeChild(config.controlEl); - } - config.controlEl = false; - } - - this.generateControlElement(row, el); - - row.element.classList.add("tabulator-tree-level-" + config.index); - - if (config.index) { - if (this.branchEl) { - config.branchEl = this.branchEl.cloneNode(true); - 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"; - } else { - 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; - - var config = row.modules.dataTree, - el = el || row.getCells()[0].getElement(), - oldControl = config.controlEl; - - if (config.children !== false) { - - if (config.open) { - config.controlEl = this.collapseEl.cloneNode(true); - config.controlEl.addEventListener("click", function (e) { - e.stopPropagation(); - _this40.collapseRow(row); - }); - } else { - config.controlEl = this.expandEl.cloneNode(true); - config.controlEl.addEventListener("click", function (e) { - e.stopPropagation(); - _this40.expandRow(row); - }); - } - - config.controlEl.addEventListener("mousedown", function (e) { - e.stopPropagation(); - }); - - if (oldControl && oldControl.parentNode === el) { - oldControl.parentNode.replaceChild(config.controlEl, oldControl); - } else { - 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; - - var output = []; - - rows.forEach(function (row, i) { - var config, children; - - output.push(row); - - if (row instanceof Row) { - - config = row.modules.dataTree.children; - - if (!config.index && config.children !== false) { - children = _this41.getChildren(row); - - children.forEach(function (child) { - output.push(child); - }); - } - } - }); - - return output; - }; - - DataTree.prototype.getChildren = function (row) { - var _this42 = this; - - var config = row.modules.dataTree, - children = [], - output = []; - - if (config.children !== false && config.open) { - if (!Array.isArray(config.children)) { - config.children = this.generateChildren(row); - } - - if (this.table.modExists("filter")) { - children = this.table.modules.filter.filter(config.children); - } else { - children = config.children; - } - - if (this.table.modExists("sort")) { - this.table.modules.sort.sort(children); - } - - children.forEach(function (child) { - output.push(child); - - var subChildren = _this42.getChildren(child); - - subChildren.forEach(function (sub) { - output.push(sub); - }); - }); - } - - return output; - }; - - DataTree.prototype.generateChildren = function (row) { - var _this43 = this; - - var children = []; - - var childArray = row.getData()[this.field]; - - if (!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; - if (childRow.modules.dataTree.children) { - childRow.modules.dataTree.open = _this43.startOpen(childRow.getComponent(), childRow.modules.dataTree.index); - } - children.push(childRow); - }); - - return children; - }; - - DataTree.prototype.expandRow = function (row, silent) { - var config = row.modules.dataTree; - - if (config.children !== false) { - config.open = true; - - row.reinitialize(); - - this.table.rowManager.refreshActiveData("tree", false, true); - - this.table.options.dataTreeRowExpanded(row.getComponent(), row.modules.dataTree.index); - } - }; - - DataTree.prototype.collapseRow = function (row) { - var config = row.modules.dataTree; - - if (config.children !== false) { - config.open = false; - - row.reinitialize(); - - this.table.rowManager.refreshActiveData("tree", false, true); - - this.table.options.dataTreeRowCollapsed(row.getComponent(), row.modules.dataTree.index); - } - }; - - DataTree.prototype.toggleRow = function (row) { - var config = row.modules.dataTree; - - if (config.children !== false) { - if (config.open) { - this.collapseRow(row); - } else { - this.expandRow(row); - } - } - }; - - DataTree.prototype.getTreeParent = function (row) { - return row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false; - }; - - DataTree.prototype.getFilteredTreeChildren = function (row) { - var config = row.modules.dataTree, - output = [], - children; - - if (config.children) { - - if (!Array.isArray(config.children)) { - config.children = this.generateChildren(row); - } - - if (this.table.modExists("filter")) { - children = this.table.modules.filter.filter(config.children); - } else { - children = config.children; - } - - children.forEach(function (childRow) { - if (childRow instanceof Row) { - output.push(childRow); - } - }); - } - - return output; - }; - - DataTree.prototype.rowDelete = function (row) { - var parent = row.modules.dataTree.parent, - childIndex; - - if (parent) { - childIndex = this.findChildIndex(row, parent); - - if (childIndex !== false) { - parent.data[this.field].splice(childIndex, 1); - } - - if (!parent.data[this.field].length) { - delete parent.data[this.field]; - } - - this.initializeRow(parent); - this.layoutRow(parent); - } - - this.table.rowManager.refreshActiveData("tree", false, true); - }; - - DataTree.prototype.addTreeChildRow = function (row, data, top, index) { - var childIndex = false; - - if (typeof data === "string") { - data = JSON.parse(data); - } - - if (!Array.isArray(row.data[this.field])) { - row.data[this.field] = []; - - row.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index); - } - - if (typeof index !== "undefined") { - childIndex = this.findChildIndex(index, row); - - if (childIndex !== false) { - row.data[this.field].splice(top ? childIndex : childIndex + 1, 0, data); - } - } - - if (childIndex === false) { - if (top) { - row.data[this.field].unshift(data); - } else { - row.data[this.field].push(data); - } - } - - this.initializeRow(row); - this.layoutRow(row); - - this.table.rowManager.refreshActiveData("tree", false, true); - }; - - DataTree.prototype.findChildIndex = function (subject, parent) { - var _this44 = this; - - var match = false; - - if ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == "object") { - - if (subject instanceof Row) { - //subject is row element - match = subject.data; - } else if (subject instanceof RowComponent) { - //subject is public row component - match = subject._getSelf().data; - } else if (typeof HTMLElement !== "undefined" && subject instanceof HTMLElement) { - if (parent.modules.dataTree) { - match = parent.modules.dataTree.children.find(function (childRow) { - return childRow instanceof Row ? childRow.element === subject : false; - }); - - if (match) { - match = match.data; - } - } - } - } else if (typeof subject == "undefined" || subject === null) { - match = false; - } else { - //subject should be treated as the index of the row - match = parent.data[this.field].find(function (row) { - return row.data[_this44.table.options.index] == subject; - }); - } - - if (match) { - - if (Array.isArray(parent.data[this.field])) { - match = parent.data[this.field].indexOf(match); - } - - if (match == -1) { - match = false; - } - } - - //catch all for any other type of input - - return match; - }; - - DataTree.prototype.getTreeChildren = function (row) { - var config = row.modules.dataTree, - output = []; - - if (config.children) { - - if (!Array.isArray(config.children)) { - config.children = this.generateChildren(row); - } - - config.children.forEach(function (childRow) { - if (childRow instanceof Row) { - output.push(childRow.getComponent()); - } - }); - } - - return output; - }; - - DataTree.prototype.checkForRestyle = function (cell) { - if (!cell.row.cells.indexOf(cell)) { - cell.row.reinitialize(); - } - }; - - DataTree.prototype.getChildField = function () { - return this.field; - }; - - DataTree.prototype.redrawNeeded = function (data) { - return (this.field ? typeof data[this.field] !== "undefined" : false) || (this.elementField ? typeof data[this.elementField] !== "undefined" : false); - }; - - Tabulator.prototype.registerModule("dataTree", DataTree); - - var Download = function Download(table) { - this.table = table; //hold Tabulator object - }; - - //trigger file download - Download.prototype.download = function (type, filename, options, range, interceptCallback) { - var self = this, - downloadFunc = false; - - function buildLink(data, mime) { - if (interceptCallback) { - if (interceptCallback === true) { - self.triggerDownload(data, mime, type, filename, true); - } else { - interceptCallback(data); - } - } else { - self.triggerDownload(data, mime, type, filename); - } - } - - if (typeof type == "function") { - downloadFunc = type; - } else { - if (self.downloaders[type]) { - downloadFunc = self.downloaders[type]; - } else { - console.warn("Download Error - No such download type found: ", type); - } - } - - if (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, false, range || this.table.options.downloadRowRange, "download"); - - //assign group header formatter - var groupHeader = this.table.options.groupHeaderDownload; - - if (groupHeader && !Array.isArray(groupHeader)) { - groupHeader = [groupHeader]; - } - - list.forEach(function (row) { - var group; - - if (row.type === "group") { - group = row.columns[0]; - - if (groupHeader && groupHeader[row.indent]) { - group.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component); - } - } - }); - - return list; - }; - - Download.prototype.triggerDownload = function (data, mime, type, filename, newTab) { - var element = document.createElement('a'), - blob = new Blob([data], { type: mime }), - filename = filename || "Tabulator." + (typeof type === "function" ? "txt" : type); - - blob = this.table.options.downloadReady.call(this.table, data, blob); - - if (blob) { - - if (newTab) { - window.open(window.URL.createObjectURL(blob)); - } else { - if (navigator.msSaveOrOpenBlob) { - navigator.msSaveOrOpenBlob(blob, filename); - } else { - element.setAttribute('href', window.URL.createObjectURL(blob)); - - //set file title - element.setAttribute('download', filename); - - //trigger download - element.style.display = 'none'; - document.body.appendChild(element); - element.click(); - - //remove temporary link element - document.body.removeChild(element); - } - } - - if (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); - break; - } - }; - - //downloaders - 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) { - if (col && col.depth === 1) { - headers[i] = typeof col.value == "undefined" || typeof col.value == "null" ? "" : 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 = ""; - break; - } - - item.push('"' + String(col.value).split('"').join('""') + '"'); - } - }); - - fileContents.push(item.join(delimiter)); - break; - } - }); - - if (headers.length) { - fileContents = [headers].concat(fileContents); - } - - fileContents = fileContents.join("\n"); - - if (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) { - if (col) { - item[col.component.getField()] = col.value; - } - }); - - fileContents.push(item); - break; - } - }); - - fileContents = JSON.stringify(fileContents, null, '\t'); - - setFileContents(fileContents, "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 : ""; - - if (!jsPDFParams.orientation) { - jsPDFParams.orientation = options.orientation || "landscape"; - } - - if (!jsPDFParams.unit) { - jsPDFParams.unit = "pt"; - } - - //parse row list - list.forEach(function (row) { - var item = {}; - - 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)); - break; - } - }); - - function parseRow(row, styles) { - var rowData = []; - - 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 = ""; - break; - } - - cell = { - content: col.value, - colSpan: col.width, - rowSpan: col.height - }; - - if (styles) { - cell.styles = styles; - } - - rowData.push(cell); - } else { - rowData.push(""); - } - }); - - return rowData; - } - - //configure PDF - var doc = new jsPDF(jsPDFParams); //set document to landscape, better for most tables - - if (options && options.autoTable) { - if (typeof options.autoTable === "function") { - autoTableParams = options.autoTable(doc) || {}; - } else { - autoTableParams = options.autoTable; - } - } - - if (title) { - autoTableParams.addPageContent = function (data) { - doc.text(title, 40, 30); - }; - } - - autoTableParams.head = header; - autoTableParams.body = body; - - doc.autoTable(autoTableParams); - - if (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; - - workbook.SheetNames = []; - workbook.Sheets = {}; - - 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 } }; - - //parse row list - list.forEach(function (row, i) { - var rowData = []; - - row.columns.forEach(function (col, j) { - - if (col) { - rowData.push(!(col.value instanceof Date) && _typeof(col.value) === "object" ? JSON.stringify(col.value) : col.value); - - if (col.width > 1 || col.height > -1) { - merges.push({ s: { r: i, c: j }, e: { r: i + col.height - 1, c: j + col.width - 1 } }); - } - } else { - rowData.push(""); - } - }); - - rows.push(rowData); - }); - - //convert rows to worksheet - XLSX.utils.sheet_add_aoa(worksheet, rows); - - worksheet['!ref'] = XLSX.utils.encode_range(range); - - if (merges.length) { - worksheet["!merges"] = merges; - } - - return worksheet; - } - - if (options.sheetOnly) { - setFileContents(generateSheet()); - return; - } - - if (options.sheets) { - for (var sheet in options.sheets) { - - if (options.sheets[sheet] === true) { - workbook.SheetNames.push(sheet); - workbook.Sheets[sheet] = generateSheet(); - } else { - - workbook.SheetNames.push(sheet); - - this.table.modules.comms.send(options.sheets[sheet], "download", "intercept", { - type: "xlsx", - options: { sheetOnly: true }, - active: self.active, - intercept: function intercept(data) { - workbook.Sheets[sheet] = data; - } - }); - } - } - } else { - workbook.SheetNames.push(sheetName); - workbook.Sheets[sheetName] = generateSheet(); - } - - if (options.documentProcessing) { - workbook = options.documentProcessing(workbook); - } - - //convert workbook to binary array - function s2ab(s) { - var buf = new ArrayBuffer(s.length); - var view = new Uint8Array(buf); - for (var i = 0; i != s.length; ++i) { - view[i] = s.charCodeAt(i) & 0xFF; - }return buf; - } - - output = XLSX.write(workbook, { bookType: 'xlsx', bookSST: true, type: 'binary' }); - - setFileContents(s2ab(output), "application/octet-stream"); - }, - - html: function html(list, options, setFileContents) { - if (this.modExists("export", true)) { - setFileContents(this.modules.export.genereateHTMLTable(list), "text/html"); - } - } - - }; - - Tabulator.prototype.registerModule("download", Download); - - var Edit = function Edit(table) { - this.table = table; //hold Tabulator object - this.currentCell = false; //hold currently editing cell - this.mouseClick = false; //hold mousedown state to prevent click binding being overriden by editor opening - this.recursionBlock = false; //prevent focus recursion - this.invalidEdit = false; - this.editedCells = []; - }; - - //initialize column editor - Edit.prototype.initializeColumn = function (column) { - var self = this, - config = { - editor: false, - blocked: false, - check: column.definition.editable, - params: column.definition.editorParams || {} - }; - - //set column editor - switch (_typeof(column.definition.editor)) { - case "string": - - if (column.definition.editor === "tick") { - column.definition.editor = "tickCross"; - console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor"); - } - - if (self.editors[column.definition.editor]) { - config.editor = self.editors[column.definition.editor]; - } else { - console.warn("Editor Error - No such editor found: ", column.definition.editor); - } - break; - - case "function": - config.editor = column.definition.editor; - break; - - case "boolean": - - if (column.definition.editor === true) { - - if (typeof column.definition.formatter !== "function") { - - if (column.definition.formatter === "tick") { - column.definition.formatter = "tickCross"; - console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor"); - } - - if (self.editors[column.definition.formatter]) { - config.editor = self.editors[column.definition.formatter]; - } else { - config.editor = self.editors["input"]; - } - } else { - console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ", column.definition.formatter); - } - } - break; - } - - if (config.editor) { - column.modules.edit = config; - } - }; - - Edit.prototype.getCurrentCell = function () { - return this.currentCell ? this.currentCell.getComponent() : false; - }; - - Edit.prototype.clearEditor = function (cancel) { - var cell = this.currentCell, - cellEl; - - this.invalidEdit = false; - - if (cell) { - this.currentCell = false; - - cellEl = cell.getElement(); - - if (cancel) { - cell.validate(); - } else { - cellEl.classList.remove("tabulator-validation-fail"); - } - - cellEl.classList.remove("tabulator-editing"); - while (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; - var component = this.currentCell.getComponent(); - - this.clearEditor(true); - cell.setValueActual(cell.getValue()); - cell.cellRendered(); - - if (cell.column.cellEvents.cellEditCancelled) { - cell.column.cellEvents.cellEditCancelled.call(this.table, component); - } - - this.table.options.cellEditCancelled.call(this.table, component); - } - }; - - //return a formatted value for a cell - Edit.prototype.bindEditor = function (cell) { - var self = this, - element = cell.getElement(); - - element.setAttribute("tabindex", 0); - - element.addEventListener("click", function (e) { - if (!element.classList.contains("tabulator-editing")) { - element.focus({ preventScroll: true }); - } - }); - - element.addEventListener("mousedown", function (e) { - self.mouseClick = true; - }); - - element.addEventListener("focus", function (e) { - if (!self.recursionBlock) { - self.edit(cell, e, false); - } - }); - }; - - Edit.prototype.focusCellNoEvent = function (cell, block) { - this.recursionBlock = true; - if (!(block && this.table.browser === "ie")) { - cell.getElement().focus({ preventScroll: true }); - } - this.recursionBlock = false; - }; - - Edit.prototype.editCell = function (cell, forceEdit) { - this.focusCellNoEvent(cell); - this.edit(cell, false, forceEdit); - }; - - Edit.prototype.focusScrollAdjust = function (cell) { - if (this.table.rowManager.getRenderMode() == "virtual") { - 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; - - if (rowEl.offsetTop < topEdge) { - this.table.rowManager.element.scrollTop -= topEdge - rowEl.offsetTop; - } else { - if (rowEl.offsetTop + rowEl.offsetHeight > bottomEdge) { - this.table.rowManager.element.scrollTop += rowEl.offsetTop + rowEl.offsetHeight - bottomEdge; - } - } - } - }; - - Edit.prototype.edit = function (cell, e, forceEdit) { - var self = this, - allowEdit = true, - rendered = function rendered() {}, - element = cell.getElement(), - cellEditor, - component, - params; - - //prevent editing if another cell is refusing to leave focus (eg. validation fail) - if (this.currentCell) { - if (!this.invalidEdit) { - this.cancelEdit(); - } - return; - } - - //handle successfull value change - function success(value) { - if (self.currentCell === cell) { - var valid = true; - - if (cell.column.modules.validate && self.table.modExists("validate") && self.table.options.validationMode != "manual") { - valid = self.table.modules.validate.validate(cell.column.modules.validate, cell, value); - } - - if (valid === true || self.table.options.validationMode === "highlight") { - self.clearEditor(); - cell.setValue(value, true); - - if (!cell.modules.edit) { - cell.modules.edit = {}; - } - - cell.modules.edit.edited = true; - - if (self.editedCells.indexOf(cell) == -1) { - self.editedCells.push(cell); - } - - if (self.table.options.dataTree && self.table.modExists("dataTree")) { - self.table.modules.dataTree.checkForRestyle(cell); - } - - if (valid !== true) { - element.classList.add("tabulator-validation-fail"); - return false; - } - - return true; - } else { - self.invalidEdit = true; - element.classList.add("tabulator-validation-fail"); - self.focusCellNoEvent(cell, true); - rendered(); - self.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid); - - return false; - } - } else { - // console.warn("Edit Success Error - cannot call success on a cell that is no longer being edited"); - } - } - - //handle aborted edit - function cancel() { - if (self.currentCell === cell) { - self.cancelEdit(); - - if (self.table.options.dataTree && self.table.modExists("dataTree")) { - self.table.modules.dataTree.checkForRestyle(cell); - } - } else { - // console.warn("Edit Success Error - cannot call cancel on a cell that is no longer being edited"); - } - } - - function onRendered(callback) { - rendered = callback; - } - - if (!cell.column.modules.edit.blocked) { - if (e) { - e.stopPropagation(); - } - - switch (_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; - break; - } - - if (allowEdit || forceEdit) { - - self.cancelEdit(); - - self.currentCell = cell; - - this.focusScrollAdjust(cell); - - component = cell.getComponent(); - - if (this.mouseClick) { - this.mouseClick = false; - - if (cell.column.cellEvents.cellClick) { - cell.column.cellEvents.cellClick.call(this.table, e, component); - } - } - - if (cell.column.cellEvents.cellEditing) { - cell.column.cellEvents.cellEditing.call(this.table, component); - } - - self.table.options.cellEditing.call(this.table, component); - - params = typeof cell.column.modules.edit.params === "function" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params; - - cellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params); - - //if editor returned, add to DOM, if false, abort edit - if (cellEditor !== false) { - - if (cellEditor instanceof Node) { - element.classList.add("tabulator-editing"); - cell.row.getElement().classList.add("tabulator-row-editing"); - while (element.firstChild) { - element.removeChild(element.firstChild); - }element.appendChild(cellEditor); - - //trigger onRendered Callback - rendered(); - - //prevent editing from triggering rowClick event - var children = element.children; - - for (var i = 0; i < children.length; i++) { - children[i].addEventListener("click", function (e) { - e.stopPropagation(); - }); - } - } else { - console.warn("Edit Error - Editor should return an instance of Node, the editor returned:", cellEditor); - element.blur(); - return false; - } - } else { - element.blur(); - return false; - } - - return true; - } else { - this.mouseClick = false; - element.blur(); - return false; - } - } else { - this.mouseClick = false; - element.blur(); - return false; - } - }; - - Edit.prototype.maskInput = function (el, options) { - var mask = options.mask, - maskLetter = typeof options.maskLetterChar !== "undefined" ? options.maskLetterChar : "A", - maskNumber = typeof options.maskNumberChar !== "undefined" ? options.maskNumberChar : "9", - maskWildcard = typeof options.maskWildcardChar !== "undefined" ? options.maskWildcardChar : "*", - success = false; - - function fillSymbols(index) { - var symbol = mask[index]; - if (typeof symbol !== "undefined" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber) { - el.value = el.value + "" + symbol; - fillSymbols(index + 1); - } - } - - el.addEventListener("keydown", function (e) { - var index = el.value.length, - char = e.key; - - if (e.keyCode > 46) { - if (index >= mask.length) { - e.preventDefault(); - e.stopPropagation(); - success = false; - return false; - } else { - switch (mask[index]) { - case maskLetter: - if (char.toUpperCase() == char.toLowerCase()) { - e.preventDefault(); - e.stopPropagation(); - success = false; - return false; - } - break; - - case maskNumber: - if (isNaN(char)) { - e.preventDefault(); - e.stopPropagation(); - success = false; - return false; - } - break; - - case maskWildcard: - break; - - default: - if (char !== mask[index]) { - e.preventDefault(); - e.stopPropagation(); - success = false; - return false; - } - } - } - - success = true; - } - - return; - }); - - el.addEventListener("keyup", function (e) { - if (e.keyCode > 46) { - if (options.maskAutoFill) { - fillSymbols(el.value.length); - } - } - }); - - if (!el.placeholder) { - el.placeholder = mask; - } - - if (options.maskAutoFill) { - fillSymbols(el.value.length); - } - }; - - Edit.prototype.getEditedCells = function () { - var output = []; - - this.editedCells.forEach(function (cell) { - output.push(cell.getComponent()); - }); - - return output; - }; - - Edit.prototype.clearEdited = function (cell) { - var editIndex; - - if (cell.modules.edit && cell.modules.edit.edited) { - cell.modules.validate.invalid = false; - - editIndex = this.editedCells.indexOf(cell); - - if (editIndex > -1) { - this.editedCells.splice(editIndex, 1); - } - } - }; - - //default data editors - Edit.prototype.editors = { - - //input element - input: function input(cell, onRendered, success, cancel, editorParams) { - - //create and style input - var cellValue = cell.getValue(), - input = document.createElement("input"); - - input.setAttribute("type", editorParams.search ? "search" : "text"); - - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") { - for (var key in editorParams.elementAttributes) { - if (key.charAt(0) == "+") { - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - } else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = typeof cellValue !== "undefined" ? cellValue : ""; - - onRendered(function () { - input.focus({ preventScroll: true }); - input.style.height = "100%"; - }); - - function onChange(e) { - if ((cellValue === null || typeof cellValue === "undefined") && input.value !== "" || input.value !== cellValue) { - if (success(input.value)) { - cellValue = input.value; //persist value if successfully validated incase editor is used as header filter - } - } else { - cancel(); - } - } - - //submit new value on blur or change - input.addEventListener("change", onChange); - input.addEventListener("blur", onChange); - - //submit new value on enter - input.addEventListener("keydown", function (e) { - switch (e.keyCode) { - // case 9: - case 13: - onChange(e); - break; - - case 27: - cancel(); - break; - } - }); - - if (editorParams.mask) { - this.table.modules.edit.maskInput(input, editorParams); - } - - return input; - }, - - //resizable text area element - textarea: function textarea(cell, onRendered, success, cancel, editorParams) { - var self = this, - cellValue = cell.getValue(), - vertNav = editorParams.verticalNavigation || "hybrid", - value = String(cellValue !== null && typeof cellValue !== "undefined" ? cellValue : ""), - count = (value.match(/(?:\r\n|\r|\n)/g) || []).length + 1, - input = document.createElement("textarea"), - scrollHeight = 0; - - //create and style input - 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"; - - if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") { - for (var key in editorParams.elementAttributes) { - if (key.charAt(0) == "+") { - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - } else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = value; - - onRendered(function () { - input.focus({ preventScroll: true }); - input.style.height = "100%"; - }); - - function onChange(e) { - - if ((cellValue === null || typeof cellValue === "undefined") && input.value !== "" || input.value !== cellValue) { - - if (success(input.value)) { - cellValue = input.value; //persist value if successfully validated incase editor is used as header filter - } - - setTimeout(function () { - cell.getRow().normalizeHeight(); - }, 300); - } else { - cancel(); - } - } - - //submit new value on blur or change - input.addEventListener("change", onChange); - input.addEventListener("blur", onChange); - - input.addEventListener("keyup", function () { - - input.style.height = ""; - - var heightNow = input.scrollHeight; - - input.style.height = heightNow + "px"; - - if (heightNow != scrollHeight) { - scrollHeight = heightNow; - cell.getRow().normalizeHeight(); - } - }); - - input.addEventListener("keydown", function (e) { - - switch (e.keyCode) { - case 27: - cancel(); - break; - - case 38: - //up arrow - if (vertNav == "editor" || vertNav == "hybrid" && input.selectionStart) { - e.stopImmediatePropagation(); - e.stopPropagation(); - } - - break; - - case 40: - //down arrow - if (vertNav == "editor" || vertNav == "hybrid" && input.selectionStart !== input.value.length) { - e.stopImmediatePropagation(); - e.stopPropagation(); - } - break; - } - }); - - if (editorParams.mask) { - this.table.modules.edit.maskInput(input, editorParams); - } - - return input; - }, - - //input element with type of number - number: function number(cell, onRendered, success, cancel, editorParams) { - - var cellValue = cell.getValue(), - vertNav = editorParams.verticalNavigation || "editor", - input = document.createElement("input"); - - input.setAttribute("type", "number"); - - if (typeof editorParams.max != "undefined") { - input.setAttribute("max", editorParams.max); - } - - if (typeof editorParams.min != "undefined") { - input.setAttribute("min", editorParams.min); - } - - if (typeof editorParams.step != "undefined") { - input.setAttribute("step", editorParams.step); - } - - //create and style input - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") { - for (var key in editorParams.elementAttributes) { - if (key.charAt(0) == "+") { - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - } else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = cellValue; - - var blurFunc = function blurFunc(e) { - onChange(); - }; - - onRendered(function () { - //submit new value on blur - input.removeEventListener("blur", blurFunc); - - input.focus({ preventScroll: true }); - input.style.height = "100%"; - - //submit new value on blur - input.addEventListener("blur", blurFunc); - }); - - function onChange() { - var value = input.value; - - if (!isNaN(value) && value !== "") { - value = Number(value); - } - - if (value !== cellValue) { - if (success(value)) { - cellValue = value; //persist value if successfully validated incase editor is used as header filter - } - } else { - cancel(); - } - } - - //submit new value on enter - input.addEventListener("keydown", function (e) { - switch (e.keyCode) { - case 13: - // case 9: - onChange(); - break; - - case 27: - cancel(); - break; - - case 38: //up arrow - case 40: - //down arrow - if (vertNav == "editor") { - e.stopImmediatePropagation(); - e.stopPropagation(); - } - break; - } - }); - - if (editorParams.mask) { - this.table.modules.edit.maskInput(input, editorParams); - } - - return input; - }, - - //input element with type of number - range: function range(cell, onRendered, success, cancel, editorParams) { - - var cellValue = cell.getValue(), - input = document.createElement("input"); - - input.setAttribute("type", "range"); - - if (typeof editorParams.max != "undefined") { - input.setAttribute("max", editorParams.max); - } - - if (typeof editorParams.min != "undefined") { - input.setAttribute("min", editorParams.min); - } - - if (typeof editorParams.step != "undefined") { - input.setAttribute("step", editorParams.step); - } - - //create and style input - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") { - for (var key in editorParams.elementAttributes) { - if (key.charAt(0) == "+") { - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - } else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = cellValue; - - onRendered(function () { - input.focus({ preventScroll: true }); - input.style.height = "100%"; - }); - - function onChange() { - var value = input.value; - - if (!isNaN(value) && value !== "") { - value = Number(value); - } - - if (value != cellValue) { - if (success(value)) { - cellValue = value; //persist value if successfully validated incase editor is used as header filter - } - } else { - cancel(); - } - } - - //submit new value on blur - input.addEventListener("blur", function (e) { - onChange(); - }); - - //submit new value on enter - input.addEventListener("keydown", function (e) { - switch (e.keyCode) { - case 13: - // case 9: - onChange(); - break; - - case 27: - cancel(); - break; - } - }); - - return input; - }, - - //select - select: function select(cell, onRendered, success, cancel, editorParams) { - var self = this, - cellEl = cell.getElement(), - initialValue = cell.getValue(), - vertNav = editorParams.verticalNavigation || "editor", - initialDisplayValue = typeof initialValue !== "undefined" || initialValue === null ? initialValue : typeof editorParams.defaultValue !== "undefined" ? editorParams.defaultValue : [], - input = document.createElement("input"), - listEl = document.createElement("div"), - multiselect = editorParams.multiselect, - dataItems = [], - currentItem = {}, - displayItems = [], - currentItems = [], - 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"); - editorParams = { values: editorParams }; - } - - function getUniqueColumnValues(field) { - var output = {}, - data = self.table.getData(), - column; - - if (field) { - column = self.table.columnManager.getColumnByField(field); - } else { - column = cell.getColumn()._getSelf(); - } - - if (column) { - data.forEach(function (row) { - var val = column.getFieldValue(row); - - if (val !== null && typeof val !== "undefined" && val !== "") { - output[val] = true; - } - }); - - if (editorParams.sortValuesList) { - if (editorParams.sortValuesList == "asc") { - output = Object.keys(output).sort(); - } else { - output = Object.keys(output).sort().reverse(); - } - } else { - output = Object.keys(output); - } - } else { - console.warn("unable to find matching column to create select lookup list:", field); - } - - return output; - } - - function parseItems(inputValues, curentValues) { - var dataList = []; - var displayList = []; - - function processComplexListItem(item) { - var item = { - label: item.label, - value: item.value, - itemParams: item.itemParams, - elementAttributes: item.elementAttributes, - element: false - }; - - // if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){ - // setCurrentItem(item); - // } - - if (curentValues.indexOf(item.value) > -1) { - setItem(item); - } - - dataList.push(item); - displayList.push(item); - - return item; - } - - if (typeof inputValues == "function") { - inputValues = inputValues(cell); - } - - if (Array.isArray(inputValues)) { - inputValues.forEach(function (value) { - var item; - - if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === "object") { - - if (value.options) { - item = { - label: value.label, - group: true, - itemParams: value.itemParams, - elementAttributes: value.elementAttributes, - element: false - }; - - displayList.push(item); - - value.options.forEach(function (item) { - processComplexListItem(item); - }); - } else { - processComplexListItem(value); - } - } else { - - item = { - label: value, - value: value, - element: false - }; - - // if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){ - // setCurrentItem(item); - // } - - if (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: false - }; - - // if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){ - // setCurrentItem(item); - // } - - if (curentValues.indexOf(item.value) > -1) { - setItem(item); - } - - dataList.push(item); - displayList.push(item); - } - } - - dataItems = dataList; - displayItems = displayList; - - fillList(); - } - - function fillList() { - while (listEl.firstChild) { - listEl.removeChild(listEl.firstChild); - }displayItems.forEach(function (item) { - - var el = item.element; - - if (!el) { - el = document.createElement("div"); - item.label = editorParams.listItemFormatter ? editorParams.listItemFormatter(item.value, item.label, cell, el, item.itemParams) : item.label; - if (item.group) { - el.classList.add("tabulator-edit-select-list-group"); - el.tabIndex = 0; - el.innerHTML = item.label === "" ? " " : item.label; - } else { - el.classList.add("tabulator-edit-select-list-item"); - el.tabIndex = 0; - el.innerHTML = item.label === "" ? " " : item.label; - - el.addEventListener("click", function () { - // setCurrentItem(item); - // chooseItem(); - if (multiselect) { - toggleItem(item); - input.focus(); - } else { - chooseItem(item); - } - }); - - // if(item === currentItem){ - // el.classList.add("active"); - // } - - if (currentItems.indexOf(item) > -1) { - el.classList.add("active"); - } - } - - if (item.elementAttributes && _typeof(item.elementAttributes) == "object") { - for (var key in item.elementAttributes) { - if (key.charAt(0) == "+") { - key = key.slice(1); - el.setAttribute(key, input.getAttribute(key) + item.elementAttributes["+" + key]); - } else { - el.setAttribute(key, item.elementAttributes[key]); - } - } - } - el.addEventListener("mousedown", function () { - blurable = false; - - setTimeout(function () { - blurable = true; - }, 10); - }); - - item.element = el; - } - - listEl.appendChild(el); - }); - } - - function setCurrentItem(item, active) { - - if (!multiselect && currentItem && currentItem.element) { - currentItem.element.classList.remove("active"); - } - - if (currentItem && currentItem.element) { - currentItem.element.classList.remove("focused"); - } - - currentItem = item; - - if (item.element) { - item.element.classList.add("focused"); - if (active) { - item.element.classList.add("active"); - } - } - } - - // function chooseItem(){ - // hideList(); - - // if(initialValue !== currentItem.value){ - // initialValue = currentItem.value; - // success(currentItem.value); - // }else{ - // cancel(); - // } - // } - - function setItem(item) { - var index = currentItems.indexOf(item); - - if (index == -1) { - currentItems.push(item); - setCurrentItem(item, true); - } - - fillInput(); - } - - function unsetItem(index) { - var item = currentItems[index]; - - if (index > -1) { - currentItems.splice(index, 1); - if (item.element) { - item.element.classList.remove("active"); - } - } - } - - function toggleItem(item) { - if (!item) { - item = currentItem; - } - - var index = currentItems.indexOf(item); - - if (index > -1) { - unsetItem(index); - } else { - if (multiselect !== true && currentItems.length >= multiselect) { - unsetItem(0); - } - - setItem(item); - } - - fillInput(); - } - - function chooseItem(item) { - hideList(); - - if (!item) { - item = currentItem; - } - - if (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) { - - if (editorParams.values === true) { - parseItems(getUniqueColumnValues(), initialDisplayValue); - } else if (typeof editorParams.values === "string") { - parseItems(getUniqueColumnValues(editorParams.values), initialDisplayValue); - } else { - 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 = false; - - setTimeout(function () { - blurable = true; - }, 10); - }); - - document.body.appendChild(listEl); - } - } - - function hideList() { - if (listEl.parentNode) { - listEl.parentNode.removeChild(listEl); - } - - removeScrollListener(); - } - - function removeScrollListener() { - self.table.rowManager.element.removeEventListener("scroll", cancelItem); - } - - //style input - input.setAttribute("type", "text"); - - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - input.style.cursor = "default"; - input.readOnly = this.currentCell != false; - - if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") { - for (var key in editorParams.elementAttributes) { - if (key.charAt(0) == "+") { - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - } else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = typeof initialValue !== "undefined" || initialValue === null ? initialValue : ""; - - // if(editorParams.values === true){ - // parseItems(getUniqueColumnValues(), initialValue); - // }else if(typeof editorParams.values === "string"){ - // parseItems(getUniqueColumnValues(editorParams.values), initialValue); - // }else{ - // parseItems(editorParams.values || [], initialValue); - // } - - //allow key based navigation - input.addEventListener("keydown", function (e) { - var index; - - switch (e.keyCode) { - case 38: - //up arrow - index = dataItems.indexOf(currentItem); - - if (vertNav == "editor" || vertNav == "hybrid" && index) { - e.stopImmediatePropagation(); - e.stopPropagation(); - e.preventDefault(); - - if (index > 0) { - setCurrentItem(dataItems[index - 1], !multiselect); - } - } - break; - - case 40: - //down arrow - index = dataItems.indexOf(currentItem); - - if (vertNav == "editor" || vertNav == "hybrid" && index < dataItems.length - 1) { - e.stopImmediatePropagation(); - e.stopPropagation(); - e.preventDefault(); - - if (index < dataItems.length - 1) { - if (index == -1) { - setCurrentItem(dataItems[0], !multiselect); - } else { - setCurrentItem(dataItems[index + 1], !multiselect); - } - } - } - break; - - case 37: //left arrow - case 39: - //right arrow - e.stopImmediatePropagation(); - e.stopPropagation(); - e.preventDefault(); - break; - - case 13: - //enter - // chooseItem(); - - if (multiselect) { - toggleItem(); - } else { - chooseItem(); - } - - break; - - case 27: - //escape - cancelItem(); - break; - } - }); - - input.addEventListener("blur", function (e) { - if (blurable) { - if (multiselect) { - chooseItems(); - } else { - cancelItem(); - } - } - }); - - input.addEventListener("focus", function (e) { - showList(); - }); - - //style list element - listEl = document.createElement("div"); - listEl.classList.add("tabulator-edit-select-list"); - - onRendered(function () { - input.style.height = "100%"; - input.focus({ preventScroll: true }); - }); - - return input; - }, - - //autocomplete - autocomplete: function autocomplete(cell, onRendered, success, cancel, editorParams) { - var self = this, - cellEl = cell.getElement(), - initialValue = cell.getValue(), - vertNav = editorParams.verticalNavigation || "editor", - initialDisplayValue = typeof initialValue !== "undefined" || initialValue === null ? initialValue : typeof editorParams.defaultValue !== "undefined" ? editorParams.defaultValue : "", - input = document.createElement("input"), - listEl = document.createElement("div"), - allItems = [], - displayItems = [], - values = [], - currentItem = false, - blurable = true, - uniqueColumnValues = false; - - this.table.rowManager.element.addEventListener("scroll", cancelItem); - - //style input - input.setAttribute("type", "search"); - - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") { - for (var key in editorParams.elementAttributes) { - if (key.charAt(0) == "+") { - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - } else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - //style list element - listEl.classList.add("tabulator-edit-select-list"); - - listEl.addEventListener("mousedown", function (e) { - blurable = false; - - setTimeout(function () { - blurable = true; - }, 10); - }); - - function genUniqueColumnValues() { - if (editorParams.values === true) { - uniqueColumnValues = getUniqueColumnValues(); - } else if (typeof editorParams.values === "string") { - uniqueColumnValues = getUniqueColumnValues(editorParams.values); - } - } - - function getUniqueColumnValues(field) { - var output = {}, - data = self.table.getData(), - column; - - if (field) { - column = self.table.columnManager.getColumnByField(field); - } else { - column = cell.getColumn()._getSelf(); - } - - if (column) { - data.forEach(function (row) { - var val = column.getFieldValue(row); - - if (val !== null && typeof val !== "undefined" && val !== "") { - output[val] = true; - } - }); - - if (editorParams.sortValuesList) { - if (editorParams.sortValuesList == "asc") { - output = Object.keys(output).sort(); - } else { - output = Object.keys(output).sort().reverse(); - } - } else { - output = Object.keys(output); - } - } else { - console.warn("unable to find matching column to create autocomplete lookup list:", field); - } - - return output; - } - - function filterList(term, intialLoad) { - var matches = [], - values, - items, - searchEl; - - //lookup base values list - if (uniqueColumnValues) { - values = uniqueColumnValues; - } else { - values = editorParams.values || []; - } - - if (editorParams.searchFunc) { - matches = editorParams.searchFunc(term, values); - - if (matches instanceof Promise) { - - addNotice(typeof editorParams.searchingPlaceholder !== "undefined" ? editorParams.searchingPlaceholder : "Searching..."); - - matches.then(function (result) { - fillListIfNotEmpty(parseItems(result), intialLoad); - }).catch(function (err) { - console.err("error in autocomplete search promise:", err); - }); - } else { - fillListIfNotEmpty(parseItems(matches), intialLoad); - } - } else { - items = parseItems(values); - - if (term === "") { - if (editorParams.showListOnEmpty) { - matches = items; - } - } else { - items.forEach(function (item) { - if (item.value !== null || typeof item.value !== "undefined") { - if (String(item.value).toLowerCase().indexOf(String(term).toLowerCase()) > -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(); - - if (notice !== false) { - searchEl.classList.add("tabulator-edit-select-list-notice"); - searchEl.tabIndex = 0; - - if (notice instanceof Node) { - searchEl.appendChild(notice); - } else { - searchEl.innerHTML = notice; - } - - listEl.appendChild(searchEl); - } - } - - function parseItems(inputValues) { - var itemList = []; - - if (Array.isArray(inputValues)) { - inputValues.forEach(function (value) { - - var item = {}; - - if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === "object") { - item.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value.value, value.label) : value.label; - item.value = value.value; - } else { - 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() { - while (listEl.firstChild) { - listEl.removeChild(listEl.firstChild); - } - } - - function fillListIfNotEmpty(items, intialLoad) { - if (items.length) { - fillList(items, intialLoad); - } else { - if (editorParams.emptyPlaceholder) { - addNotice(editorParams.emptyPlaceholder); - } - } - } - - function fillList(items, intialLoad) { - var current = false; - - clearList(); - - displayItems = items; - - displayItems.forEach(function (item) { - var el = item.element; - - if (!el) { - el = document.createElement("div"); - el.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 = false; - - setTimeout(function () { - blurable = true; - }, 10); - }); - - item.element = el; - - if (intialLoad && item.value == initialValue) { - input.value = item.title; - item.element.classList.add("active"); - current = true; - } - - if (item === currentItem) { - item.element.classList.add("active"); - current = true; - } - } - - listEl.appendChild(el); - }); - - if (!current) { - setCurrentItem(false); - } - } - - function chooseItem() { - hideList(); - - if (currentItem) { - if (initialValue !== currentItem.value) { - initialValue = currentItem.value; - input.value = currentItem.title; - success(currentItem.value); - } else { - cancel(); - } - } else { - if (editorParams.freetext) { - initialValue = input.value; - success(input.value); - } else { - if (editorParams.allowEmpty && input.value === "") { - initialValue = input.value; - success(input.value); - } else { - cancel(); - } - } - } - } - - function showList() { - if (!listEl.parentNode) { - while (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) { - if (currentItem && currentItem.element) { - currentItem.element.classList.remove("active"); - } - - currentItem = item; - - if (item && item.element) { - item.element.classList.add("active"); - } - } - - function hideList() { - if (listEl.parentNode) { - listEl.parentNode.removeChild(listEl); - } - - removeScrollListener(); - } - - function cancelItem() { - hideList(); - cancel(); - } - - function removeScrollListener() { - self.table.rowManager.element.removeEventListener("scroll", cancelItem); - } - - //allow key based navigation - input.addEventListener("keydown", function (e) { - var index; - - switch (e.keyCode) { - case 38: - //up arrow - index = displayItems.indexOf(currentItem); - - if (vertNav == "editor" || vertNav == "hybrid" && index) { - e.stopImmediatePropagation(); - e.stopPropagation(); - e.preventDefault(); - - if (index > 0) { - setCurrentItem(displayItems[index - 1]); - } else { - setCurrentItem(false); - } - } - break; - - case 40: - //down arrow - - index = displayItems.indexOf(currentItem); - - if (vertNav == "editor" || vertNav == "hybrid" && index < displayItems.length - 1) { - - e.stopImmediatePropagation(); - e.stopPropagation(); - e.preventDefault(); - - if (index < displayItems.length - 1) { - if (index == -1) { - setCurrentItem(displayItems[0]); - } else { - setCurrentItem(displayItems[index + 1]); - } - } - } - break; - - case 37: //left arrow - case 39: - //right arrow - e.stopImmediatePropagation(); - e.stopPropagation(); - // e.preventDefault(); - break; - - case 13: - //enter - chooseItem(); - break; - - case 27: - //escape - cancelItem(); - break; - - case 36: //home - case 35: - //end - //prevent table navigation while using input element - e.stopImmediatePropagation(); - break; - } - }); - - input.addEventListener("keyup", function (e) { - - switch (e.keyCode) { - case 38: //up arrow - case 37: //left arrow - case 39: //up arrow - case 40: //right arrow - case 13: //enter - case 27: - //escape - break; - - default: - filterList(input.value); - } - }); - - input.addEventListener("search", function (e) { - filterList(input.value); - }); - - input.addEventListener("blur", function (e) { - if (blurable) { - chooseItem(); - } - }); - - input.addEventListener("focus", function (e) { - var value = initialDisplayValue; - genUniqueColumnValues(); - showList(); - input.value = value; - filterList(value, true); - }); - - onRendered(function () { - input.style.height = "100%"; - input.focus({ preventScroll: true }); - }); - - if (editorParams.mask) { - this.table.modules.edit.maskInput(input, editorParams); - } - - return input; - }, - - //star rating - star: function star(cell, onRendered, success, cancel, editorParams) { - var self = this, - element = cell.getElement(), - value = cell.getValue(), - maxStars = element.getElementsByTagName("svg").length || 5, - size = element.getElementsByTagName("svg")[0] ? element.getElementsByTagName("svg")[0].getAttribute("width") : 14, - stars = [], - starsHolder = document.createElement("div"), - star = document.createElementNS('http://www.w3.org/2000/svg', "svg"); - - //change star type - function starChange(val) { - stars.forEach(function (star, i) { - if (i < val) { - if (self.table.browser == "ie") { - star.setAttribute("class", "tabulator-star-active"); - } else { - star.classList.replace("tabulator-star-inactive", "tabulator-star-active"); - } - - star.innerHTML = ''; - } else { - if (self.table.browser == "ie") { - star.setAttribute("class", "tabulator-star-inactive"); - } else { - star.classList.replace("tabulator-star-active", "tabulator-star-inactive"); - } - - star.innerHTML = ''; - } - }); - } - - //build stars - function buildStar(i) { - - var starHolder = document.createElement("span"); - var nextStar = star.cloneNode(true); - - 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); - } - - //handle keyboard navigation value change - function changeValue(val) { - value = val; - starChange(val); - } - - //style cell - element.style.whiteSpace = "nowrap"; - element.style.overflow = "hidden"; - element.style.textOverflow = "ellipsis"; - - //style holding element - starsHolder.style.verticalAlign = "middle"; - starsHolder.style.display = "inline-block"; - starsHolder.style.padding = "4px"; - - //style star - 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"; - - if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") { - for (var key in editorParams.elementAttributes) { - if (key.charAt(0) == "+") { - key = key.slice(1); - starsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes["+" + key]); - } else { - starsHolder.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - //create correct number of stars - for (var i = 1; i <= maxStars; i++) { - buildStar(i); - } - - //ensure value does not exceed number of stars - value = Math.min(parseInt(value), maxStars); - - // set initial styling of stars - starChange(value); - - starsHolder.addEventListener("mousemove", function (e) { - starChange(0); - }); - - starsHolder.addEventListener("click", function (e) { - success(0); - }); - - element.addEventListener("blur", function (e) { - cancel(); - }); - - //allow key based navigation - element.addEventListener("keydown", function (e) { - switch (e.keyCode) { - case 39: - //right arrow - changeValue(value + 1); - break; - - case 37: - //left arrow - changeValue(value - 1); - break; - - case 13: - //enter - success(value); - break; - - case 27: - //escape - cancel(); - break; - } - }); - - return starsHolder; - }, - - //draggable progress bar - progress: function progress(cell, onRendered, success, cancel, editorParams) { - var element = cell.getElement(), - max = typeof editorParams.max === "undefined" ? element.getElementsByTagName("div")[0].getAttribute("max") || 100 : editorParams.max, - min = typeof editorParams.min === "undefined" ? 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; - - //set new value - 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); - } - - //style handle - 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"); - - //style bar - bar.style.display = "inline-block"; - bar.style.position = "relative"; - // bar.style.top = "8px"; - // bar.style.bottom = "8px"; - // bar.style.left = "4px"; - // bar.style.marginRight = "4px"; - bar.style.height = "100%"; - bar.style.backgroundColor = "#488CE9"; - bar.style.maxWidth = "100%"; - bar.style.minWidth = "0%"; - - if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") { - for (var key in editorParams.elementAttributes) { - if (key.charAt(0) == "+") { - key = key.slice(1); - bar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes["+" + key]); - } else { - bar.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - //style cell - element.style.padding = "4px 4px"; - - //make sure value is in range - value = Math.min(parseFloat(value), max); - value = Math.max(parseFloat(value), min); - - //workout percentage - value = Math.round((value - min) / percent); - // bar.style.right = value + "%"; - 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) { - if (mouseDrag) { - bar.style.width = mouseDragWidth + e.screenX - mouseDrag + "px"; - } - }); - - element.addEventListener("mouseup", function (e) { - if (mouseDrag) { - e.stopPropagation(); - e.stopImmediatePropagation(); - - mouseDrag = false; - mouseDragWidth = false; - - updateValue(); - } - }); - - //allow key based navigation - element.addEventListener("keydown", function (e) { - switch (e.keyCode) { - case 39: - //right arrow - e.preventDefault(); - bar.style.width = bar.clientWidth + element.clientWidth / 100 + "px"; - break; - - case 37: - //left arrow - e.preventDefault(); - bar.style.width = bar.clientWidth - element.clientWidth / 100 + "px"; - break; - - case 9: //tab - case 13: - //enter - updateValue(); - break; - - case 27: - //escape - cancel(); - break; - - } - }); - - element.addEventListener("blur", function () { - cancel(); - }); - - return bar; - }, - - //checkbox - tickCross: function tickCross(cell, onRendered, success, cancel, editorParams) { - var value = cell.getValue(), - input = document.createElement("input"), - tristate = editorParams.tristate, - indetermValue = typeof editorParams.indeterminateValue === "undefined" ? null : editorParams.indeterminateValue, - indetermState = false; - - input.setAttribute("type", "checkbox"); - input.style.marginTop = "5px"; - input.style.boxSizing = "border-box"; - - if (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == "object") { - for (var key in editorParams.elementAttributes) { - if (key.charAt(0) == "+") { - key = key.slice(1); - input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes["+" + key]); - } else { - input.setAttribute(key, editorParams.elementAttributes[key]); - } - } - } - - input.value = value; - - if (tristate && (typeof value === "undefined" || value === indetermValue || value === "")) { - indetermState = true; - input.indeterminate = true; - } - - if (this.table.browser != "firefox") { - //prevent blur issue on mac firefox - onRendered(function () { - input.focus({ preventScroll: true }); - }); - } - - input.checked = value === true || value === "true" || value === "True" || value === 1; - - function setValue(blur) { - if (tristate) { - if (!blur) { - if (input.checked && !indetermState) { - input.checked = false; - input.indeterminate = true; - indetermState = true; - return indetermValue; - } else { - indetermState = false; - return input.checked; - } - } else { - if (indetermState) { - return indetermValue; - } else { - return input.checked; - } - } - } else { - return input.checked; - } - } - - //submit new value on blur - input.addEventListener("change", function (e) { - success(setValue()); - }); - - input.addEventListener("blur", function (e) { - success(setValue(true)); - }); - - //submit new value on enter - input.addEventListener("keydown", function (e) { - if (e.keyCode == 13) { - success(setValue()); - } - if (e.keyCode == 27) { - cancel(); - } - }); - - return input; - } - }; - - Tabulator.prototype.registerModule("edit", Edit); - - var ExportRow = function ExportRow(type, columns, component, indent) { - this.type = type; - this.columns = columns; - this.component = component || false; - this.indent = indent || 0; - }; - - var ExportColumn = function ExportColumn(value, component, width, height, depth) { - this.value = value; - this.component = component || false; - this.width = width; - this.height = height; - this.depth = depth; - }; - - var Export = function Export(table) { - this.table = table; //hold Tabulator object - this.config = {}; - this.cloneTableStyle = true; - this.colVisProp = ""; - }; - - Export.prototype.generateExportList = function (config, style, range, colVisProp) { - this.cloneTableStyle = style; - this.config = config || {}; - this.colVisProp = colVisProp; - - var headers = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : []; - var 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; - - var rows = []; - - if (typeof range == "function") { - range.call(this.table).forEach(function (row) { - row = _this45.table.rowManager.findRow(row); - - if (row) { - rows.push(row); - } - }); - } else { - switch (range) { - case true: - case "visible": - rows = this.table.rowManager.getVisibleRows(true); - 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; - - var output = []; - - var columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex; - - columns.forEach(function (column) { - var colData = _this46.processColumnGroup(column); - - if (colData) { - output.push(colData); - } - }); - - return output; - }; - - Export.prototype.processColumnGroup = function (column) { - var _this47 = this; - - var subGroups = column.columns, - maxDepth = 0, - title = column.definition["title" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title; - - var groupData = { - title: title, - column: column, - depth: 1 - }; - - if (subGroups.length) { - groupData.subGroups = []; - groupData.width = 0; - - subGroups.forEach(function (subGroup) { - var subGroupData = _this47.processColumnGroup(subGroup); - - if (subGroupData) { - groupData.width += subGroupData.width; - groupData.subGroups.push(subGroupData); - - if (subGroupData.depth > maxDepth) { - maxDepth = subGroupData.depth; - } - } - }); - - groupData.depth += maxDepth; - - if (!groupData.width) { - return false; - } - } else { - if (this.columnVisCheck(column)) { - groupData.width = 1; - } else { - return false; - } - } - - return groupData; - }; - - Export.prototype.columnVisCheck = function (column) { - return column.definition[this.colVisProp] !== false && (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 (typeof headers[level] === "undefined") { - headers[level] = []; - } - - column.height = column.subGroups ? 1 : depth - column.depth + 1; - - headers[level].push(column); - - if (column.height > 1) { - for (var _i6 = 1; _i6 < column.height; _i6++) { - - if (typeof headers[level + _i6] === "undefined") { - headers[level + _i6] = []; - } - - headers[level + _i6].push(false); - } - } - - if (column.width > 1) { - for (var _i7 = 1; _i7 < column.width; _i7++) { - headers[level].push(false); - } - } - - if (column.subGroups) { - column.subGroups.forEach(function (subGroup) { - parseColumnGroup(subGroup, level + 1); - }); - } - } - - //calculate maximum header debth - columns.forEach(function (column) { - if (column.depth > headerDepth) { - headerDepth = column.depth; - } - }); - - columns.forEach(function (column) { - parseColumnGroup(column, 0); - }); - - headers.forEach(function (header) { - var columns = []; - - header.forEach(function (col) { - if (col) { - columns.push(new ExportColumn(col.title, col.column.getComponent(), col.width, col.height, col.depth)); - } else { - columns.push(null); - } - }); - - exportRows.push(new ExportRow("header", columns)); - }); - - return exportRows; - }; - - Export.prototype.bodyToExportRows = function (rows) { - var _this48 = this; - - var columns = []; - var exportRows = []; - - this.table.columnManager.columnsByIndex.forEach(function (column) { - if (_this48.columnVisCheck(column)) { - columns.push(column.getComponent()); - } - }); - - if (this.config.columnCalcs !== false && this.table.modExists("columnCalcs")) { - if (this.table.modules.columnCalcs.topInitialized) { - rows.unshift(this.table.modules.columnCalcs.topRow); - } - - if (this.table.modules.columnCalcs.botInitialized) { - rows.push(this.table.modules.columnCalcs.botRow); - } - } - - rows = rows.filter(function (row) { - switch (row.type) { - case "group": - return _this48.config.rowGroups !== false; - break; - - case "calc": - return _this48.config.columnCalcs !== false; - break; - - case "row": - return !(_this48.table.options.dataTree && _this48.config.dataTree === false && row.modules.dataTree.parent); - break; - } - - return true; - }); - - rows.forEach(function (row, i) { - var rowData = row.getData(_this48.colVisProp); - var exportCols = []; - var 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)); - }); - - if (_this48.table.options.dataTree && _this48.config.dataTree !== false) { - indent = row.modules.dataTree.index; - } - break; - } - - exportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent)); - }); - - return exportRows; - }; - - Export.prototype.genereateTableElement = function (list) { - var _this49 = this; - - var 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 = {}; - - setup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter; - - if (this.table.options.dataTree && this.config.dataTree !== false && this.table.modExists("columnCalcs")) { - setup.treeElementField = this.table.modules.dataTree.elementField; - } - - //assign group header formatter - setup.groupHeader = this.table.options["groupHeader" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))]; - - if (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"]); - - if (list.length > 1000) { - 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); - break; - } - }); - - if (headerEl.innerHTML) { - table.appendChild(headerEl); - } - - table.appendChild(bodyEl); - - this.mapElementStyles(this.table.element, table, ["border-top", "border-left", "border-right", "border-bottom"]); - return table; - }; - - Export.prototype.lookupTableStyles = function () { - var styles = {}; - - //lookup row styles - if (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]; - - if (styles.firstRow) { - styles.styleCells = styles.firstRow.getElementsByClassName("tabulator-cell"); - styles.firstCell = styles.styleCells[0]; - styles.lastCell = styles.styleCells[styles.styleCells.length - 1]; - } - } - - return styles; - }; - - Export.prototype.genereateHeaderElement = function (row, setup, styles) { - var _this50 = this; - - var rowEl = document.createElement("tr"); - - row.columns.forEach(function (column) { - if (column) { - var cellEl = document.createElement("th"); - var classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(" ") : []; - - cellEl.colSpan = column.width; - cellEl.rowSpan = column.height; - - cellEl.innerHTML = column.value; - - if (_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"]); - - if (column.component._column.visible) { - _this50.mapElementStyles(column.component.getElement(), cellEl, ["width"]); - } else { - if (column.component._column.definition.width) { - cellEl.style.width = column.component._column.definition.width + "px"; - } - } - - if (column.component._column.parent) { - _this50.mapElementStyles(column.component._column.parent.groupElement, cellEl, ["border-top"]); - } - - rowEl.appendChild(cellEl); - } - }); - - return rowEl; - }; - - Export.prototype.genereateGroupElement = function (row, setup, styles) { - - var rowEl = document.createElement("tr"), - cellEl = document.createElement("td"), - group = row.columns[0]; - - rowEl.classList.add("tabulator-print-table-row"); - - if (setup.groupHeader && setup.groupHeader[row.indent]) { - group.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component); - } else { - if (setup.groupHeader === false) { - group.value = group.value; - } else { - 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); - - if (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); - - return rowEl; - }; - - Export.prototype.genereateCalcElement = function (row, setup, styles) { - var rowEl = this.genereateRowElement(row, setup, styles); - - 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"]); - - return rowEl; - }; - - Export.prototype.genereateRowElement = function (row, setup, styles) { - var _this51 = this; - - var rowEl = document.createElement("tr"); - - 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; - - var 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 - }; - - var classNames = column.definition.cssClass ? column.definition.cssClass.split(" ") : []; - - classNames.forEach(function (className) { - cellEl.classList.add(className); - }); - - 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": - value = JSON.stringify(value); - break; - - case "undefined": - case "null": - value = ""; - break; - - default: - value = value; - } - } - - if (value instanceof Node) { - cellEl.appendChild(value); - } else { - cellEl.innerHTML = value; - } - - if (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"]); - - if (column.definition.align) { - cellEl.style.textAlign = column.definition.align; - } - } - - 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); - } - if (row.component._row.modules.dataTree.branchEl) { - cellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild); - } - } - } - - rowEl.appendChild(cellEl); - - if (cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback) { - cellWrapper.modules.format.renderedCallback(); - } - - if (setup.rowFormatter && _this51.config.formatCells !== false) { - var rowComponent = row.getComponent(); - - rowComponent.getElement = function () { - return rowEl; - }; - - setup.rowFormatter(rowComponent); - } - } - }); - - return rowEl; - }; - - Export.prototype.genereateHTMLTable = function (list) { - var holder = document.createElement("div"); - - holder.appendChild(this.genereateTableElement(list)); - - return 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; //hold Tabulator object - - this.filterList = []; //hold filter list - this.headerFilters = {}; //hold column filters - this.headerFilterColumns = []; //hold columns that use header filters - - this.prevHeaderFilterChangeCheck = ""; - this.prevHeaderFilterChangeCheck = "{}"; - - this.changed = false; //has filtering changed since last render - }; - - //initialize column header filter - Filter.prototype.initializeColumn = function (column, value) { - var self = this, - field = column.getField(), - params; - - //handle successfull value change - function success(value) { - var filterType = column.modules.filter.tagType == "input" && column.modules.filter.attrType == "text" || column.modules.filter.tagType == "textarea" ? "partial" : "match", - type = "", - filterChangeCheck = "", - filterFunc; - - if (typeof column.modules.filter.prevSuccess === "undefined" || column.modules.filter.prevSuccess !== value) { - - column.modules.filter.prevSuccess = value; - - if (!column.modules.filter.emptyFunc(value)) { - column.modules.filter.value = value; - - switch (_typeof(column.definition.headerFilterFunc)) { - case "string": - if (self.filters[column.definition.headerFilterFunc]) { - type = column.definition.headerFilterFunc; - filterFunc = function filterFunc(data) { - var params = column.definition.headerFilterFuncParams || {}; - var fieldVal = column.getFieldValue(data); - - params = typeof params === "function" ? params(value, fieldVal, data) : params; - - return self.filters[column.definition.headerFilterFunc](value, fieldVal, data, params); - }; - } else { - console.warn("Header Filter Error - Matching filter function not found: ", column.definition.headerFilterFunc); - } - break; - - case "function": - filterFunc = function filterFunc(data) { - var params = column.definition.headerFilterFuncParams || {}; - var fieldVal = column.getFieldValue(data); - - params = typeof params === "function" ? params(value, fieldVal, data) : params; - - return column.definition.headerFilterFunc(value, fieldVal, data, params); - }; - - type = filterFunc; - break; - } - - if (!filterFunc) { - switch (filterType) { - case "partial": - filterFunc = function filterFunc(data) { - var colVal = column.getFieldValue(data); - - if (typeof colVal !== 'undefined' && colVal !== null) { - return String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1; - } else { - return false; - } - }; - type = "like"; - break; - - default: - filterFunc = function filterFunc(data) { - return column.getFieldValue(data) == value; - }; - type = "="; - } - } - - self.headerFilters[field] = { value: value, func: filterFunc, type: type, params: params || {} }; - } else { - delete self.headerFilters[field]; - } - - filterChangeCheck = JSON.stringify(self.headerFilters); - - if (self.prevHeaderFilterChangeCheck !== filterChangeCheck) { - self.prevHeaderFilterChangeCheck = filterChangeCheck; - - self.changed = true; - self.table.rowManager.filterRefresh(); - } - } - - return true; - } - - column.modules.filter = { - success: success, - attrType: false, - tagType: false, - emptyFunc: false - }; - - this.generateHeaderFilterElement(column); - }; - - Filter.prototype.generateHeaderFilterElement = function (column, initialValue, reinitialize) { - var _this52 = this; - - var self = this, - success = column.modules.filter.success, - field = column.getField(), - filterElement, - editor, - editorElement, - cellWrapper, - typingTimer, - searchTrigger, - params; - - //handle aborted edit - function cancel() {} - - if (column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode) { - column.contentElement.removeChild(column.modules.filter.headerElement.parentNode); - } - - if (field) { - - //set empty value function - column.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function (value) { - return !value && value !== "0"; - }; - - filterElement = document.createElement("div"); - filterElement.classList.add("tabulator-header-filter"); - - //set column editor - switch (_typeof(column.definition.headerFilter)) { - case "string": - if (self.table.modules.edit.editors[column.definition.headerFilter]) { - editor = self.table.modules.edit.editors[column.definition.headerFilter]; - - if ((column.definition.headerFilter === "tick" || column.definition.headerFilter === "tickCross") && !column.definition.headerFilterEmptyCheck) { - column.modules.filter.emptyFunc = function (value) { - return value !== true && value !== false; - }; - } - } else { - 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": - if (column.modules.edit && column.modules.edit.editor) { - editor = column.modules.edit.editor; - } else { - if (column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]) { - editor = self.table.modules.edit.editors[column.definition.formatter]; - - if ((column.definition.formatter === "tick" || column.definition.formatter === "tickCross") && !column.definition.headerFilterEmptyCheck) { - column.modules.filter.emptyFunc = function (value) { - return value !== true && value !== false; - }; - } - } else { - editor = self.table.modules.edit.editors["input"]; - } - } - break; - } - - if (editor) { - - cellWrapper = { - getValue: function getValue() { - return typeof initialValue !== "undefined" ? 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 = column.definition.headerFilterParams || {}; - - params = typeof params === "function" ? params.call(self.table) : params; - - editorElement = editor.call(this.table.modules.edit, cellWrapper, function () {}, success, cancel, params); - - if (!editorElement) { - console.warn("Filter Error - Cannot add filter to " + field + " column, editor returned a value of false"); - return; - } - - if (!(editorElement instanceof Node)) { - console.warn("Filter Error - Cannot add filter to " + field + " column, editor should return an instance of Node, the editor returned:", editorElement); - return; - } - - //set Placeholder Text - if (field) { - self.table.modules.localize.bind("headerFilters|columns|" + column.definition.field, function (value) { - editorElement.setAttribute("placeholder", typeof value !== "undefined" && value ? value : self.table.modules.localize.getText("headerFilters|default")); - }); - } else { - self.table.modules.localize.bind("headerFilters|default", function (value) { - editorElement.setAttribute("placeholder", typeof self.column.definition.headerFilterPlaceholder !== "undefined" && self.column.definition.headerFilterPlaceholder ? self.column.definition.headerFilterPlaceholder : value); - }); - } - - //focus on element on click - editorElement.addEventListener("click", function (e) { - e.stopPropagation(); - editorElement.focus(); - }); - - editorElement.addEventListener("focus", function (e) { - var left = _this52.table.columnManager.element.scrollLeft; - - if (left !== _this52.table.rowManager.element.scrollLeft) { - _this52.table.rowManager.scrollHorizontal(left); - _this52.table.columnManager.scrollHorizontal(left); - } - }); - - //live update filters as user types - typingTimer = false; - - searchTrigger = function searchTrigger(e) { - if (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(); - - if (column.definition.headerFilterLiveFilter !== false) { - - if (!(column.definition.headerFilter === 'autocomplete' || column.definition.headerFilter === 'tickCross' || (column.definition.editor === 'autocomplete' || column.definition.editor === 'tickCross') && column.definition.headerFilter === true)) { - editorElement.addEventListener("keyup", searchTrigger); - editorElement.addEventListener("search", searchTrigger); - - //update number filtered columns on change - if (column.modules.filter.attrType == "number") { - editorElement.addEventListener("change", function (e) { - success(editorElement.value); - }); - } - - //change text inputs to search inputs to allow for clearing of field - if (column.modules.filter.attrType == "text" && this.table.browser !== "ie") { - editorElement.setAttribute("type", "search"); - // editorElement.off("change blur"); //prevent blur from triggering filter and preventing selection click - } - } - - //prevent input and select elements from propegating click to column sorters etc - if (column.modules.filter.tagType == "input" || column.modules.filter.tagType == "select" || column.modules.filter.tagType == "textarea") { - editorElement.addEventListener("mousedown", function (e) { - e.stopPropagation(); - }); - } - } - - filterElement.appendChild(editorElement); - - column.contentElement.appendChild(filterElement); - - if (!reinitialize) { - self.headerFilterColumns.push(column); - } - } - } else { - console.warn("Filter Error - Cannot add header filter, column has no field set:", column.definition.title); - } - }; - - //hide all header filter elements (used to ensure correct column widths in "fitData" layout mode) - Filter.prototype.hideHeaderFilterElements = function () { - this.headerFilterColumns.forEach(function (column) { - if (column.modules.filter && column.modules.filter.headerElement) { - column.modules.filter.headerElement.style.display = 'none'; - } - }); - }; - - //show all header filter elements (used to ensure correct column widths in "fitData" layout mode) - Filter.prototype.showHeaderFilterElements = function () { - this.headerFilterColumns.forEach(function (column) { - if (column.modules.filter && column.modules.filter.headerElement) { - column.modules.filter.headerElement.style.display = ''; - } - }); - }; - - //programatically set focus of header filter - Filter.prototype.setHeaderFilterFocus = function (column) { - if (column.modules.filter && column.modules.filter.headerElement) { - column.modules.filter.headerElement.focus(); - } else { - console.warn("Column Filter Focus Error - No header filter set on column:", column.getField()); - } - }; - - //programmatically get value of header filter - Filter.prototype.getHeaderFilterValue = function (column) { - if (column.modules.filter && column.modules.filter.headerElement) { - return column.modules.filter.headerElement.value; - } else { - console.warn("Column Filter Error - No header filter set on column:", column.getField()); - } - }; - - //programatically set value of header filter - Filter.prototype.setHeaderFilterValue = function (column, value) { - if (column) { - if (column.modules.filter && column.modules.filter.headerElement) { - this.generateHeaderFilterElement(column, value, true); - column.modules.filter.success(value); - } else { - console.warn("Column Filter Error - No header filter set on column:", column.getField()); - } - } - }; - - Filter.prototype.reloadHeaderFilter = function (column) { - if (column) { - if (column.modules.filter && column.modules.filter.headerElement) { - this.generateHeaderFilterElement(column, column.modules.filter.value, true); - } else { - console.warn("Column Filter Error - No header filter set on column:", column.getField()); - } - } - }; - - //check if the filters has changed since last use - Filter.prototype.hasChanged = function () { - var changed = this.changed; - this.changed = false; - return changed; - }; - - //set standard filters - Filter.prototype.setFilter = function (field, type, value, params) { - var self = this; - - self.filterList = []; - - if (!Array.isArray(field)) { - field = [{ field: field, type: type, value: value, params: params }]; - } - - self.addFilter(field); - }; - - //add filter to array - Filter.prototype.addFilter = function (field, type, value, params) { - var self = this; - - if (!Array.isArray(field)) { - field = [{ field: field, type: type, value: value, params: params }]; - } - - field.forEach(function (filter) { - - filter = self.findFilter(filter); - - if (filter) { - self.filterList.push(filter); - - self.changed = true; - } - }); - - if (this.table.options.persistence && this.table.modExists("persistence", true) && 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 = false; - - if (typeof filter.field == "function") { - filterFunc = function filterFunc(data) { - return filter.field(data, filter.type || {}); // pass params to custom filter function - }; - } else { - - if (self.filters[filter.type]) { - - column = self.table.columnManager.getColumnByField(filter.field); - - if (column) { - filterFunc = function filterFunc(data) { - return self.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {}); - }; - } else { - filterFunc = function filterFunc(data) { - return self.filters[filter.type](filter.value, data[filter.field], data, filter.params || {}); - }; - } - } else { - console.warn("Filter Error - No such filter type found, ignoring: ", filter.type); - } - } - - filter.func = filterFunc; - - return filter.func ? filter : false; - }; - - Filter.prototype.findSubFilters = function (filters) { - var self = this, - output = []; - - filters.forEach(function (filter) { - filter = self.findFilter(filter); - - if (filter) { - output.push(filter); - } - }); - - return output.length ? output : false; - }; - - //get all filters - Filter.prototype.getFilters = function (all, ajax) { - var output = []; - - if (all) { - output = this.getHeaderFilters(); - } - - if (ajax) { - output.forEach(function (item) { - if (typeof item.type == "function") { - item.type = "function"; - } - }); - } - - output = output.concat(this.filtersToArray(this.filterList, ajax)); - - return output; - }; - - //filter to Object - Filter.prototype.filtersToArray = function (filterList, ajax) { - var _this53 = this; - - var output = []; - - filterList.forEach(function (filter) { - var item; - - if (Array.isArray(filter)) { - output.push(_this53.filtersToArray(filter, ajax)); - } else { - item = { field: filter.field, type: filter.type, value: filter.value }; - - if (ajax) { - if (typeof item.type == "function") { - item.type = "function"; - } - } - - output.push(item); - } - }); - - return output; - }; - - //get all filters - 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; - }; - - //remove filter from array - Filter.prototype.removeFilter = function (field, type, value) { - var self = this; - - if (!Array.isArray(field)) { - field = [{ field: field, type: type, value: value }]; - } - - field.forEach(function (filter) { - var index = -1; - - if (_typeof(filter.field) == "object") { - index = self.filterList.findIndex(function (element) { - return filter === element; - }); - } else { - index = self.filterList.findIndex(function (element) { - return filter.field === element.field && filter.type === element.type && filter.value === element.value; - }); - } - - if (index > -1) { - self.filterList.splice(index, 1); - self.changed = true; - } else { - console.warn("Filter Error - No matching filter type found, ignoring: ", filter.type); - } - }); - - if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.filter) { - this.table.modules.persistence.save("filter"); - } - }; - - //clear filters - Filter.prototype.clearFilter = function (all) { - this.filterList = []; - - if (all) { - this.clearHeaderFilter(); - } - - this.changed = true; - - if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.filter) { - this.table.modules.persistence.save("filter"); - } - }; - - //clear header filters - 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 = undefined; - self.reloadHeaderFilter(column); - }); - - this.changed = true; - }; - - //search data and return matching rows - Filter.prototype.search = function (searchType, field, type, value) { - var self = this, - activeRows = [], - filterList = []; - - if (!Array.isArray(field)) { - field = [{ field: field, type: type, value: value }]; - } - - field.forEach(function (filter) { - filter = self.findFilter(filter); - - if (filter) { - filterList.push(filter); - } - }); - - this.table.rowManager.rows.forEach(function (row) { - var match = true; - - filterList.forEach(function (filter) { - if (!self.filterRecurse(filter, row.getData())) { - match = false; - } - }); - - if (match) { - activeRows.push(searchType === "data" ? row.getData("data") : row.getComponent()); - } - }); - - return activeRows; - }; - - //filter row array - Filter.prototype.filter = function (rowList, filters) { - var self = this, - activeRows = [], - activeRowComponents = []; - - if (self.table.options.dataFiltering) { - self.table.options.dataFiltering.call(self.table, self.getFilters()); - } - - if (!self.table.options.ajaxFiltering && (self.filterList.length || Object.keys(self.headerFilters).length)) { - - rowList.forEach(function (row) { - if (self.filterRow(row)) { - activeRows.push(row); - } - }); - } else { - activeRows = rowList.slice(0); - } - - if (self.table.options.dataFiltered) { - - activeRows.forEach(function (row) { - activeRowComponents.push(row.getComponent()); - }); - - self.table.options.dataFiltered.call(self.table, self.getFilters(), activeRowComponents); - } - - return activeRows; - }; - - //filter individual row - Filter.prototype.filterRow = function (row, filters) { - var self = this, - match = true, - data = row.getData(); - - self.filterList.forEach(function (filter) { - if (!self.filterRecurse(filter, data)) { - match = false; - } - }); - - for (var field in self.headerFilters) { - if (!self.headerFilters[field].func(data)) { - match = false; - } - } - - return match; - }; - - Filter.prototype.filterRecurse = function (filter, data) { - var self = this, - match = false; - - if (Array.isArray(filter)) { - filter.forEach(function (subFilter) { - if (self.filterRecurse(subFilter, data)) { - match = true; - } - }); - } else { - match = filter.func(data); - } - - return match; - }; - - //list of available filters - Filter.prototype.filters = { - - //equal to - "=": function _(filterVal, rowVal, rowData, filterParams) { - return rowVal == filterVal ? true : false; - }, - - //less than - "<": function _(filterVal, rowVal, rowData, filterParams) { - return rowVal < filterVal ? true : false; - }, - - //less than or equal to - "<=": function _(filterVal, rowVal, rowData, filterParams) { - return rowVal <= filterVal ? true : false; - }, - - //greater than - ">": function _(filterVal, rowVal, rowData, filterParams) { - return rowVal > filterVal ? true : false; - }, - - //greater than or equal to - ">=": function _(filterVal, rowVal, rowData, filterParams) { - return rowVal >= filterVal ? true : false; - }, - - //not equal to - "!=": function _(filterVal, rowVal, rowData, filterParams) { - return rowVal != filterVal ? true : false; - }, - - "regex": function regex(filterVal, rowVal, rowData, filterParams) { - - if (typeof filterVal == "string") { - filterVal = new RegExp(filterVal); - } - - return filterVal.test(rowVal); - }, - - //contains the string - "like": function like(filterVal, rowVal, rowData, filterParams) { - if (filterVal === null || typeof filterVal === "undefined") { - return rowVal === filterVal ? true : false; - } else { - if (typeof rowVal !== 'undefined' && rowVal !== null) { - return String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1; - } else { - return false; - } - } - }, - - //contains the keywords - "keywords": function keywords(filterVal, rowVal, rowData, filterParams) { - var keywords = filterVal.toLowerCase().split(typeof filterParams.separator === "undefined" ? " " : filterParams.separator), - value = String(rowVal === null || typeof rowVal === "undefined" ? "" : rowVal).toLowerCase(), - matches = []; - - keywords.forEach(function (keyword) { - if (value.includes(keyword)) { - matches.push(true); - } - }); - - return filterParams.matchAll ? matches.length === keywords.length : !!matches.length; - }, - - //starts with the string - "starts": function starts(filterVal, rowVal, rowData, filterParams) { - if (filterVal === null || typeof filterVal === "undefined") { - return rowVal === filterVal ? true : false; - } else { - if (typeof rowVal !== 'undefined' && rowVal !== null) { - return String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase()); - } else { - return false; - } - } - }, - - //ends with the string - "ends": function ends(filterVal, rowVal, rowData, filterParams) { - if (filterVal === null || typeof filterVal === "undefined") { - return rowVal === filterVal ? true : false; - } else { - if (typeof rowVal !== 'undefined' && rowVal !== null) { - return String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase()); - } else { - return false; - } - } - }, - - //in array - "in": function _in(filterVal, rowVal, rowData, filterParams) { - if (Array.isArray(filterVal)) { - return filterVal.indexOf(rowVal) > -1; - } else { - console.warn("Filter Error - filter value is not an array:", filterVal); - return false; - } - } - }; - - Tabulator.prototype.registerModule("filter", Filter); - - var Format = function Format(table) { - this.table = table; //hold Tabulator object - }; - - //initialize column formatter - Format.prototype.initializeColumn = function (column) { - column.modules.format = this.lookupFormatter(column, ""); - - if (typeof column.definition.formatterPrint !== "undefined") { - column.modules.format.print = this.lookupFormatter(column, "Print"); - } - - if (typeof column.definition.formatterClipboard !== "undefined") { - column.modules.format.clipboard = this.lookupFormatter(column, "Clipboard"); - } - - if (typeof column.definition.formatterHtmlOutput !== "undefined") { - 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]; - - //set column formatter - switch (typeof formatter === 'undefined' ? 'undefined' : _typeof(formatter)) { - case "string": - - if (formatter === "tick") { - formatter = "tickCross"; - - if (typeof config.params.crossElement == "undefined") { - config.params.crossElement = false; - } - - console.warn("DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false"); - } - - if (this.formatters[formatter]) { - config.formatter = this.formatters[formatter]; - } else { - 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; - break; - } - - return config; - }; - - Format.prototype.cellRendered = function (cell) { - if (cell.modules.format && cell.modules.format.renderedCallback) { - cell.modules.format.renderedCallback(); - } - }; - - //return a formatted value for a cell - Format.prototype.formatValue = function (cell) { - var component = cell.getComponent(), - params = typeof cell.column.modules.format.params === "function" ? cell.column.modules.format.params(component) : cell.column.modules.format.params; - - function onRendered(callback) { - if (!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) { - if (!cell.modules.format) { - cell.modules.format = {}; - } - - cell.modules.format.renderedCallback = callback; - }; - - params = typeof formatter.params === "function" ? formatter.params(component) : formatter.params; - - return formatter.formatter.call(this, cell.getComponent(), params, onRendered); - } else { - return this.formatValue(cell); - } - }; - - Format.prototype.sanitizeHTML = function (value) { - if (value) { - var entityMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '/': '/', - '`': '`', - '=': '=' - }; - - return String(value).replace(/[&<>"'`=\/]/g, function (s) { - return entityMap[s]; - }); - } else { - return value; - } - }; - - Format.prototype.emptyToSpace = function (value) { - return value === null || typeof value === "undefined" || value === "" ? " " : value; - }; - - //get formatter for cell - Format.prototype.getFormatter = function (formatter) { - var formatter; - - switch (typeof formatter === 'undefined' ? 'undefined' : _typeof(formatter)) { - case "string": - if (this.formatters[formatter]) { - formatter = this.formatters[formatter]; - } else { - console.warn("Formatter Error - No such formatter found: ", formatter); - formatter = this.formatters.plaintext; - } - break; - - case "function": - formatter = formatter; - break; - - default: - formatter = this.formatters.plaintext; - break; - } - - return formatter; - }; - - //default data formatters - Format.prototype.formatters = { - //plain text value - plaintext: function plaintext(cell, formatterParams, onRendered) { - return this.emptyToSpace(this.sanitizeHTML(cell.getValue())); - }, - - //html text value - html: function html(cell, formatterParams, onRendered) { - return cell.getValue(); - }, - - //multiline text area - textarea: function textarea(cell, formatterParams, onRendered) { - cell.getElement().style.whiteSpace = "pre-wrap"; - return this.emptyToSpace(this.sanitizeHTML(cell.getValue())); - }, - - //currency formatting - money: function money(cell, formatterParams, onRendered) { - var floatVal = parseFloat(cell.getValue()), - number, - integer, - decimal, - rgx; - - var decimalSym = formatterParams.decimal || "."; - var thousandSym = formatterParams.thousand || ","; - var symbol = formatterParams.symbol || ""; - var after = !!formatterParams.symbolAfter; - var precision = typeof formatterParams.precision !== "undefined" ? formatterParams.precision : 2; - - if (isNaN(floatVal)) { - return this.emptyToSpace(this.sanitizeHTML(cell.getValue())); - } - - number = precision !== false ? floatVal.toFixed(precision) : floatVal; - number = String(number).split("."); - - integer = number[0]; - decimal = number.length > 1 ? decimalSym + number[1] : ""; - - rgx = /(\d+)(\d{3})/; - - while (rgx.test(integer)) { - integer = integer.replace(rgx, "$1" + thousandSym + "$2"); - } - - return after ? integer + decimal + symbol : symbol + integer + decimal; - }, - - //clickable anchor tag - 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) { - data = cell.getData(); - label = data[formatterParams.labelField]; - } - - if (formatterParams.label) { - switch (_typeof(formatterParams.label)) { - case "string": - label = formatterParams.label; - break; - - case "function": - label = formatterParams.label(cell); - break; - } - } - - if (label) { - if (formatterParams.urlField) { - data = cell.getData(); - value = data[formatterParams.urlField]; - } - - if (formatterParams.url) { - switch (_typeof(formatterParams.url)) { - case "string": - value = formatterParams.url; - break; - - case "function": - value = formatterParams.url(cell); - break; - } - } - - el.setAttribute("href", urlPrefix + value); - - if (formatterParams.target) { - el.setAttribute("target", formatterParams.target); - } - - if (formatterParams.download) { - - if (typeof download == "function") { - download = download(cell); - } else { - download = download === true ? "" : download; - } - - el.setAttribute("download", download); - } - - el.innerHTML = this.emptyToSpace(this.sanitizeHTML(label)); - - return el; - } else { - return " "; - } - }, - - //image element - image: function image(cell, formatterParams, onRendered) { - var el = document.createElement("img"); - el.setAttribute("src", cell.getValue()); - - switch (_typeof(formatterParams.height)) { - case "number": - el.style.height = formatterParams.height + "px"; - break; - - case "string": - el.style.height = formatterParams.height; - break; - } - - switch (_typeof(formatterParams.width)) { - case "number": - el.style.width = formatterParams.width + "px"; - break; - - case "string": - el.style.width = formatterParams.width; - break; - } - - el.addEventListener("load", function () { - cell.getRow().normalizeHeight(); - }); - - return el; - }, - - //tick or cross - tickCross: function tickCross(cell, formatterParams, onRendered) { - var value = cell.getValue(), - element = cell.getElement(), - empty = formatterParams.allowEmpty, - truthy = formatterParams.allowTruthy, - tick = typeof formatterParams.tickElement !== "undefined" ? formatterParams.tickElement : '', - cross = typeof formatterParams.crossElement !== "undefined" ? formatterParams.crossElement : ''; - - if (truthy && value || value === true || value === "true" || value === "True" || value === 1 || value === "1") { - element.setAttribute("aria-checked", true); - return tick || ""; - } else { - if (empty && (value === "null" || value === "" || value === null || typeof value === "undefined")) { - element.setAttribute("aria-checked", "mixed"); - return ""; - } else { - element.setAttribute("aria-checked", false); - return cross || ""; - } - } - }, - - datetime: function datetime(cell, formatterParams, onRendered) { - var inputFormat = formatterParams.inputFormat || "YYYY-MM-DD hh:mm:ss"; - var outputFormat = formatterParams.outputFormat || "DD/MM/YYYY hh:mm:ss"; - var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : ""; - var value = cell.getValue(); - - var newDatetime = moment(value, inputFormat); - - if (newDatetime.isValid()) { - return formatterParams.timezone ? newDatetime.tz(formatterParams.timezone).format(outputFormat) : newDatetime.format(outputFormat); - } else { - - if (invalid === true) { - return value; - } else if (typeof invalid === "function") { - return invalid(value); - } else { - return invalid; - } - } - }, - - datetimediff: function datetime(cell, formatterParams, onRendered) { - var inputFormat = formatterParams.inputFormat || "YYYY-MM-DD hh:mm:ss"; - var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : ""; - var suffix = typeof formatterParams.suffix !== "undefined" ? formatterParams.suffix : false; - var unit = typeof formatterParams.unit !== "undefined" ? formatterParams.unit : undefined; - var humanize = typeof formatterParams.humanize !== "undefined" ? formatterParams.humanize : false; - var date = typeof formatterParams.date !== "undefined" ? formatterParams.date : moment(); - var value = cell.getValue(); - - var newDatetime = moment(value, inputFormat); - - if (newDatetime.isValid()) { - if (humanize) { - return moment.duration(newDatetime.diff(date)).humanize(suffix); - } else { - return newDatetime.diff(date, unit) + (suffix ? " " + suffix : ""); - } - } else { - - if (invalid === true) { - return value; - } else if (typeof invalid === "function") { - return invalid(value); - } else { - return invalid; - } - } - }, - - //select - lookup: function lookup(cell, formatterParams, onRendered) { - var value = cell.getValue(); - - if (typeof formatterParams[value] === "undefined") { - console.warn('Missing display value for ' + value); - return value; - } - - return formatterParams[value]; - }, - - //star rating - 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 = ''; - - //style stars holder - stars.style.verticalAlign = "middle"; - - //style star - 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(true); - nextStar.innerHTML = i <= value ? starActive : starInactive; - - stars.appendChild(nextStar); - } - - element.style.whiteSpace = "nowrap"; - element.style.overflow = "hidden"; - element.style.textOverflow = "ellipsis"; - - element.setAttribute("aria-label", value); - - return 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 && typeof formatterParams.color !== "undefined" ? formatterParams.color : ["red", "orange", "green"], - color = "#666666", - percent, - percentValue; - - if (isNaN(value) || typeof cell.getValue() === "undefined") { - return; - } - - el.classList.add("tabulator-traffic-light"); - - //make sure value is in range - percentValue = parseFloat(value) <= max ? parseFloat(value) : max; - percentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min; - - //workout percentage - percent = (max - min) / 100; - percentValue = Math.round((percentValue - min) / percent); - - //set color - switch (typeof colors === 'undefined' ? '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; - var index = Math.floor(percentValue / unit); - - index = Math.min(index, colors.length - 1); - index = Math.max(index, 0); - color = colors[index]; - break; - } - } - - el.style.backgroundColor = color; - - return el; - }, - - //progress bar - progress: function progress(cell, formatterParams, onRendered) { - //progress bar - 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; - - //make sure value is in range - percentValue = parseFloat(value) <= max ? parseFloat(value) : max; - percentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min; - - //workout percentage - percent = (max - min) / 100; - percentValue = Math.round((percentValue - min) / percent); - - //set bar color - switch (_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; - var 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"; - } - - //generate legend - switch (_typeof(formatterParams.legend)) { - case "string": - legend = formatterParams.legend; - break; - case "function": - legend = formatterParams.legend(value); - break; - case "boolean": - legend = value; - break; - default: - legend = false; - } - - //set legend color - 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; - var 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"); - 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); - - if (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; - } - - onRendered(function () { - - //handle custom element needed if formatter is to be included in printed/downloaded output - 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); - - if (legend) { - element.appendChild(legendEl); - } - }); - - return ""; - }, - - //background color - color: function color(cell, formatterParams, onRendered) { - cell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue()); - return ""; - }, - - //tick icon - buttonTick: function buttonTick(cell, formatterParams, onRendered) { - return ''; - }, - - //cross icon - buttonCross: function buttonCross(cell, formatterParams, onRendered) { - return ''; - }, - - //current row number - rownum: function rownum(cell, formatterParams, onRendered) { - return this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf()) + 1; - }, - - //row handle - handle: function handle(cell, formatterParams, onRendered) { - cell.getElement().classList.add("tabulator-row-handle"); - return "
"; - }, - - responsiveCollapse: function responsiveCollapse(cell, formatterParams, onRendered) { - var self = this, - open = false, - el = document.createElement("div"), - config = cell.getRow()._row.modules.responsiveLayout; - - el.classList.add("tabulator-responsive-collapse-toggle"); - el.innerHTML = "+-"; - - cell.getElement().classList.add("tabulator-row-handle"); - - function toggleList(isOpen) { - var collapseEl = config.element; - - config.open = isOpen; - - if (collapseEl) { - - if (config.open) { - el.classList.add("open"); - collapseEl.style.display = ''; - } else { - el.classList.remove("open"); - collapseEl.style.display = 'none'; - } - } - } - - el.addEventListener("click", function (e) { - e.stopImmediatePropagation(); - toggleList(!config.open); - }); - - toggleList(config.open); - - return el; - }, - - rowSelection: function rowSelection(cell) { - var _this54 = this; - - var checkbox = document.createElement("input"); - - checkbox.type = 'checkbox'; - - if (this.table.modExists("selectRow", true)) { - - checkbox.addEventListener("click", function (e) { - e.stopPropagation(); - }); - - if (typeof cell.getRow == 'function') { - 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) { - if (_this54.table.modules.selectRow.selectedRows.length) { - _this54.table.deselectRow(); - } else { - _this54.table.selectRow(); - } - }); - - this.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox); - } - } - return checkbox; - } - }; - - Tabulator.prototype.registerModule("format", Format); - - var FrozenColumns = function FrozenColumns(table) { - this.table = table; //hold Tabulator object - this.leftColumns = []; - this.rightColumns = []; - this.leftMargin = 0; - this.rightMargin = 0; - this.rightPadding = 0; - this.initializationMode = "left"; - this.active = false; - this.scrollEndTimer = false; - }; - - //reset initial state - FrozenColumns.prototype.reset = function () { - this.initializationMode = "left"; - this.leftColumns = []; - this.rightColumns = []; - this.leftMargin = 0; - this.rightMargin = 0; - this.rightMargin = 0; - this.active = false; - - this.table.columnManager.headersElement.style.marginLeft = 0; - this.table.columnManager.element.style.paddingRight = 0; - }; - - //initialize specific column - FrozenColumns.prototype.initializeColumn = function (column) { - var config = { margin: 0, edge: false }; - - if (!column.isGroup) { - - if (this.frozenCheck(column)) { - - config.position = this.initializationMode; - - if (this.initializationMode == "left") { - this.leftColumns.push(column); - } else { - this.rightColumns.unshift(column); - } - - this.active = true; - - column.modules.frozen = config; - } else { - this.initializationMode = "right"; - } - } - }; - - FrozenColumns.prototype.frozenCheck = function (column) { - var frozen = false; - - if (column.parent.isGroup && column.definition.frozen) { - console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"); - } - - if (column.parent.isGroup) { - return this.frozenCheck(column.parent); - } else { - return column.definition.frozen; - } - - return frozen; - }; - - //quick layout to smooth horizontal scrolling - FrozenColumns.prototype.scrollHorizontal = function () { - var _this55 = this; - - var rows; - - if (this.active) { - clearTimeout(this.scrollEndTimer); - - //layout all rows after scroll is complete - this.scrollEndTimer = setTimeout(function () { - _this55.layout(); - }, 100); - - rows = this.table.rowManager.getVisibleRows(); - - this.calcMargins(); - - this.layoutColumnPosition(); - - this.layoutCalcRows(); - - rows.forEach(function (row) { - if (row.type === "row") { - _this55.layoutRow(row); - } - }); - - this.table.rowManager.tableElement.style.marginRight = this.rightMargin; - } - }; - - //calculate margins for rows - 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; - - //calculate right frozen columns - this.rightPadding = this.table.rowManager.element.clientWidth + this.table.columnManager.scrollLeft; - }; - - //layout calculation rows - FrozenColumns.prototype.layoutCalcRows = function () { - if (this.table.modExists("columnCalcs")) { - if (this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow) { - this.layoutRow(this.table.modules.columnCalcs.topRow); - } - if (this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow) { - this.layoutRow(this.table.modules.columnCalcs.botRow); - } - } - }; - - //calculate column positions and layout headers - FrozenColumns.prototype.layoutColumnPosition = function (allCells) { - var _this56 = this; - - var leftParents = []; - - this.leftColumns.forEach(function (column, i) { - column.modules.frozen.margin = _this56._calcSpace(_this56.leftColumns, i) + _this56.table.columnManager.scrollLeft + "px"; - - if (i == _this56.leftColumns.length - 1) { - column.modules.frozen.edge = true; - } else { - column.modules.frozen.edge = false; - } - - if (column.parent.isGroup) { - var parentEl = _this56.getColGroupParentElement(column); - if (!leftParents.includes(parentEl)) { - _this56.layoutElement(parentEl, column); - leftParents.push(parentEl); - } - - if (column.modules.frozen.edge) { - parentEl.classList.add("tabulator-frozen-" + column.modules.frozen.position); - } - } else { - _this56.layoutElement(column.getElement(), column); - } - - if (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"; - - if (i == _this56.rightColumns.length - 1) { - column.modules.frozen.edge = true; - } else { - column.modules.frozen.edge = false; - } - - if (column.parent.isGroup) { - _this56.layoutElement(_this56.getColGroupParentElement(column), column); - } else { - _this56.layoutElement(column.getElement(), column); - } - - if (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(); - }; - - //layout columns appropropriatly - FrozenColumns.prototype.layout = function () { - var self = this, - rightMargin = 0; - - if (self.active) { - - //calculate row padding - this.calcMargins(); - - // self.table.rowManager.activeRows.forEach(function(row){ - // self.layoutRow(row); - // }); - - // if(self.table.options.dataTree){ - self.table.rowManager.getDisplayRows().forEach(function (row) { - if (row.type === "row") { - self.layoutRow(row); - } - }); - // } - - this.layoutCalcRows(); - - //calculate left columns - this.layoutColumnPosition(true); - - // if(tableHolder.scrollHeight > tableHolder.clientHeight){ - // rightMargin -= tableHolder.offsetWidth - tableHolder.clientWidth; - // } - - this.table.rowManager.tableElement.style.marginRight = this.rightMargin; - } - }; - - FrozenColumns.prototype.layoutRow = function (row) { - var _this57 = this; - - var rowEl = row.getElement(); - - rowEl.style.paddingLeft = this.leftMargin; - // rowEl.style.paddingRight = this.rightMargin + "px"; - - this.leftColumns.forEach(function (column) { - var cell = row.getCell(column); - - if (cell) { - _this57.layoutElement(cell.getElement(), column); - } - }); - - this.rightColumns.forEach(function (column) { - var cell = row.getCell(column); - - if (cell) { - _this57.layoutElement(cell.getElement(), column); - } - }); - }; - - FrozenColumns.prototype.layoutElement = function (element, column) { - - if (column.modules.frozen) { - element.style.position = "absolute"; - element.style.left = column.modules.frozen.margin; - - element.classList.add("tabulator-frozen"); - - if (column.modules.frozen.edge) { - element.classList.add("tabulator-frozen-" + column.modules.frozen.position); - } - } - }; - - FrozenColumns.prototype._calcSpace = function (columns, index) { - var width = 0; - - for (var _i8 = 0; _i8 < index; _i8++) { - if (columns[_i8].visible) { - width += columns[_i8].getWidth(); - } - } - - return width; - }; - - Tabulator.prototype.registerModule("frozenColumns", FrozenColumns); - var FrozenRows = function FrozenRows(table) { - this.table = table; //hold Tabulator object - this.topElement = document.createElement("div"); - this.rows = []; - this.displayIndex = 0; //index in display pipeline - }; - - FrozenRows.prototype.initialize = function () { - this.rows = []; - - this.topElement.classList.add("tabulator-frozen-rows-holder"); - - // this.table.columnManager.element.append(this.topElement); - this.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling); - }; - - FrozenRows.prototype.setDisplayIndex = function (index) { - this.displayIndex = index; - }; - - FrozenRows.prototype.getDisplayIndex = function () { - return this.displayIndex; - }; - - FrozenRows.prototype.isFrozen = function () { - return !!this.rows.length; - }; - - //filter frozen rows out of display data - FrozenRows.prototype.getRows = function (rows) { - var self = this, - frozen = [], - output = rows.slice(0); - - this.rows.forEach(function (row) { - var index = output.indexOf(row); - - if (index > -1) { - output.splice(index, 1); - } - }); - - return output; - }; - - FrozenRows.prototype.freezeRow = function (row) { - if (!row.modules.frozen) { - row.modules.frozen = true; - this.topElement.appendChild(row.getElement()); - row.initialize(); - row.normalizeHeight(); - this.table.rowManager.adjustTableSize(); - - this.rows.push(row); - - this.table.rowManager.refreshActiveData("display"); - - this.styleRows(); - } else { - console.warn("Freeze Error - Row is already frozen"); - } - }; - - FrozenRows.prototype.unfreezeRow = function (row) { - var index = this.rows.indexOf(row); - - if (row.modules.frozen) { - - row.modules.frozen = false; - - 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) { - 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); - - //public group object - 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(true); - }; - - GroupComponent.prototype.getSubGroups = function () { - return this._group.getSubGroups(true); - }; - - GroupComponent.prototype.getParentGroup = function () { - return this._group.parent ? this._group.parent.getComponent() : false; - }; - - GroupComponent.prototype.getVisibility = function () { - console.warn("getVisibility function is deprecated, you should now use the isVisible function"); - return 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; - }; - - ////////////////////////////////////////////////// - //////////////// Group Functions ///////////////// - ////////////////////////////////////////////////// - - 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 < groupManager.groupIDLookups.length - 1; - this.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow; - this.type = "group"; //type of element - this.old = oldGroup; - this.rows = []; - this.groups = []; - this.groupList = []; - this.generator = generator; - this.elementContents = false; - this.height = 0; - this.outerHeight = 0; - this.initialized = false; - this.calcs = {}; - this.initialized = false; - this.modules = {}; - this.arrowElement = false; - - this.visible = oldGroup ? oldGroup.visible : typeof groupManager.startOpen[level] !== "undefined" ? groupManager.startOpen[level] : groupManager.startOpen[0]; - - this.component = null; - - this.createElements(); - this.addBindings(); - - this.createValueGroups(); - }; - - Group.prototype.wipe = function () { - if (this.groupList.length) { - this.groupList.forEach(function (group) { - group.wipe(); - }); - } else { - this.element = false; - this.arrowElement = false; - this.elementContents = false; - } - }; - - Group.prototype.createElements = function () { - var arrow = document.createElement("div"); - arrow.classList.add("tabulator-arrow"); - - this.element = document.createElement("div"); - this.element.classList.add("tabulator-row"); - this.element.classList.add("tabulator-group"); - this.element.classList.add("tabulator-group-level-" + this.level); - this.element.setAttribute("role", "rowgroup"); - - this.arrowElement = document.createElement("div"); - this.arrowElement.classList.add("tabulator-group-toggle"); - this.arrowElement.appendChild(arrow); - - //setup movable rows - if (this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists("moveRow")) { - this.groupManager.table.modules.moveRow.initializeGroupHeader(this); - } - }; - - Group.prototype.createValueGroups = function () { - var _this58 = this; - - var level = this.level + 1; - if (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) { - this.groupManager.allowedValues[level].forEach(function (value) { - _this58._createGroup(value, level); - }); - } - }; - - Group.prototype.addBindings = function () { - var self = this, - dblTap, - tapHold, - tap, - toggleElement; - - //handle group click events - if (self.groupManager.table.options.groupClick) { - self.element.addEventListener("click", function (e) { - self.groupManager.table.options.groupClick.call(self.groupManager.table, e, self.getComponent()); - }); - } - - if (self.groupManager.table.options.groupDblClick) { - self.element.addEventListener("dblclick", function (e) { - self.groupManager.table.options.groupDblClick.call(self.groupManager.table, e, self.getComponent()); - }); - } - - if (self.groupManager.table.options.groupContext) { - self.element.addEventListener("contextmenu", function (e) { - self.groupManager.table.options.groupContext.call(self.groupManager.table, e, self.getComponent()); - }); - } - - if (self.groupManager.table.options.groupContextMenu && self.groupManager.table.modExists("menu")) { - self.groupManager.table.modules.menu.initializeGroup.call(self.groupManager.table.modules.menu, self); - } - - if (self.groupManager.table.options.groupTap) { - - tap = false; - - self.element.addEventListener("touchstart", function (e) { - tap = true; - }, { passive: true }); - - self.element.addEventListener("touchend", function (e) { - if (tap) { - self.groupManager.table.options.groupTap(e, self.getComponent()); - } - - tap = false; - }); - } - - if (self.groupManager.table.options.groupDblTap) { - - dblTap = null; - - self.element.addEventListener("touchend", function (e) { - - if (dblTap) { - clearTimeout(dblTap); - dblTap = null; - - self.groupManager.table.options.groupDblTap(e, self.getComponent()); - } else { - - dblTap = setTimeout(function () { - clearTimeout(dblTap); - dblTap = null; - }, 300); - } - }); - } - - if (self.groupManager.table.options.groupTapHold) { - - tapHold = null; - - self.element.addEventListener("touchstart", function (e) { - clearTimeout(tapHold); - - tapHold = setTimeout(function () { - clearTimeout(tapHold); - tapHold = null; - tap = false; - self.groupManager.table.options.groupTapHold(e, self.getComponent()); - }, 1000); - }, { passive: true }); - - self.element.addEventListener("touchend", function (e) { - clearTimeout(tapHold); - tapHold = null; - }); - } - - if (self.groupManager.table.options.groupToggleElement) { - toggleElement = self.groupManager.table.options.groupToggleElement == "arrow" ? self.arrowElement : self.element; - - toggleElement.addEventListener("click", function (e) { - e.stopPropagation(); - e.stopImmediatePropagation(); - self.toggleVisibility(); - }); - } - }; - - Group.prototype._createGroup = function (groupID, level) { - var groupKey = level + "_" + groupID; - var group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false); - - this.groups[groupKey] = group; - this.groupList.push(group); - }; - - Group.prototype._addRowToGroup = function (row) { - - var level = this.level + 1; - - if (this.hasSubGroups) { - var groupID = this.groupManager.groupIDLookups[level].func(row.getData()), - groupKey = level + "_" + groupID; - - if (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) { - if (this.groups[groupKey]) { - this.groups[groupKey].addRow(row); - } - } else { - if (!this.groups[groupKey]) { - this._createGroup(groupID, level); - } - - this.groups[groupKey].addRow(row); - } - } - }; - - Group.prototype._addRow = function (row) { - this.rows.push(row); - row.modules.group = this; - }; - - Group.prototype.insertRow = function (row, to, after) { - var data = this.conformRowData({}); - - row.updateData(data); - - var toIndex = this.rows.indexOf(to); - - if (toIndex > -1) { - if (after) { - this.rows.splice(toIndex + 1, 0, row); - } else { - this.rows.splice(toIndex, 0, row); - } - } else { - if (after) { - this.rows.push(row); - } else { - this.rows.unshift(row); - } - } - - row.modules.group = this; - - this.generateGroupHeaderContents(); - - if (this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table") { - this.groupManager.table.modules.columnCalcs.recalcGroup(this); - } - - this.groupManager.updateGroupRows(true); - }; - - Group.prototype.scrollHeader = function (left) { - this.arrowElement.style.marginLeft = left; - - this.groupList.forEach(function (child) { - child.scrollHeader(left); - }); - }; - - Group.prototype.getRowIndex = function (row) {}; - - //update row data to match grouping contraints - Group.prototype.conformRowData = function (data) { - if (this.field) { - data[this.field] = this.key; - } else { - console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"); - } - - if (this.parent) { - data = this.parent.conformRowData(data); - } - - return data; - }; - - Group.prototype.removeRow = function (row) { - var index = this.rows.indexOf(row); - var el = row.getElement(); - - if (index > -1) { - this.rows.splice(index, 1); - } - - if (!this.groupManager.table.options.groupValues && !this.rows.length) { - if (this.parent) { - this.parent.removeGroup(this); - } else { - this.groupManager.removeGroup(this); - } - - this.groupManager.updateGroupRows(true); - } else { - - if (el.parentNode) { - el.parentNode.removeChild(el); - } - - this.generateGroupHeaderContents(); - - if (this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table") { - this.groupManager.table.modules.columnCalcs.recalcGroup(this); - } - } - }; - - Group.prototype.removeGroup = function (group) { - var groupKey = group.level + "_" + group.key, - index; - - if (this.groups[groupKey]) { - delete this.groups[groupKey]; - - index = this.groupList.indexOf(group); - - if (index > -1) { - this.groupList.splice(index, 1); - } - - if (!this.groupList.length) { - if (this.parent) { - this.parent.removeGroup(this); - } else { - this.groupManager.removeGroup(this); - } - } - } - }; - - Group.prototype.getHeadersAndRows = function (noCalc) { - var output = []; - - output.push(this); - - this._visSet(); - - if (this.visible) { - if (this.groupList.length) { - this.groupList.forEach(function (group) { - output = output.concat(group.getHeadersAndRows(noCalc)); - }); - } else { - if (!noCalc && this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()) { - if (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); - - if (!noCalc && this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()) { - if (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); - } - } - } else { - if (!this.groupList.length && this.groupManager.table.options.columnCalcs != "table") { - - if (this.groupManager.table.modExists("columnCalcs")) { - - if (!noCalc && this.groupManager.table.modules.columnCalcs.hasTopCalcs()) { - if (this.calcs.top) { - this.calcs.top.detachElement(); - this.calcs.top.deleteCells(); - } - - if (this.groupManager.table.options.groupClosedShowCalcs) { - this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows); - output.push(this.calcs.top); - } - } - - if (!noCalc && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()) { - if (this.calcs.bottom) { - this.calcs.bottom.detachElement(); - this.calcs.bottom.deleteCells(); - } - - if (this.groupManager.table.options.groupClosedShowCalcs) { - this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows); - output.push(this.calcs.bottom); - } - } - } - } - } - - return output; - }; - - Group.prototype.getData = function (visible, transform) { - var self = this, - output = []; - - this._visSet(); - - if (!visible || visible && this.visible) { - this.rows.forEach(function (row) { - output.push(row.getData(transform || "data")); - }); - } - - return output; - }; - - // Group.prototype.getRows = function(){ - // this._visSet(); - - // return this.visible ? this.rows : []; - // }; - - Group.prototype.getRowCount = function () { - var count = 0; - - if (this.groupList.length) { - this.groupList.forEach(function (group) { - count += group.getRowCount(); - }); - } else { - count = this.rows.length; - } - return count; - }; - - Group.prototype.toggleVisibility = function () { - if (this.visible) { - this.hide(); - } else { - this.show(); - } - }; - - Group.prototype.hide = function () { - this.visible = false; - - if (this.groupManager.table.rowManager.getRenderMode() == "classic" && !this.groupManager.table.options.pagination) { - - this.element.classList.remove("tabulator-group-visible"); - - if (this.groupList.length) { - this.groupList.forEach(function (group) { - - var rows = group.getHeadersAndRows(); - - rows.forEach(function (row) { - row.detachElement(); - }); - }); - } else { - 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(); - } else { - this.groupManager.updateGroupRows(true); - } - - this.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), false); - }; - - Group.prototype.show = function () { - var self = this; - - self.visible = true; - - if (this.groupManager.table.rowManager.getRenderMode() == "classic" && !this.groupManager.table.options.pagination) { - - this.element.classList.add("tabulator-group-visible"); - - var prev = self.getElement(); - - if (this.groupList.length) { - this.groupList.forEach(function (group) { - var rows = group.getHeadersAndRows(); - - rows.forEach(function (row) { - var rowEl = row.getElement(); - prev.parentNode.insertBefore(rowEl, prev.nextSibling); - row.initialize(); - prev = rowEl; - }); - }); - } else { - self.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(); - } else { - this.groupManager.updateGroupRows(true); - } - - this.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), true); - }; - - Group.prototype._visSet = function () { - var data = []; - - if (typeof this.visible == "function") { - - 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 = false; - if (this.groupList.length) { - this.groupList.forEach(function (group) { - var result = group.getRowGroup(row); - - if (result) { - match = result; - } - }); - } else { - if (this.rows.find(function (item) { - return item === row; - })) { - match = this; - } - } - - return match; - }; - - Group.prototype.getSubGroups = function (component) { - var output = []; - - this.groupList.forEach(function (child) { - output.push(component ? child.getComponent() : child); - }); - - return output; - }; - - Group.prototype.getRows = function (compoment) { - var output = []; - - this.rows.forEach(function (row) { - output.push(compoment ? row.getComponent() : row); - }); - - return output; - }; - - Group.prototype.generateGroupHeaderContents = function () { - var data = []; - - this.rows.forEach(function (row) { - data.push(row.getData()); - }); - - this.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent()); - - while (this.element.firstChild) { - this.element.removeChild(this.element.firstChild); - }if (typeof this.elementContents === "string") { - this.element.innerHTML = this.elementContents; - } else { - this.element.appendChild(this.elementContents); - } - - this.element.insertBefore(this.arrowElement, this.element.firstChild); - }; - - ////////////// Standard Row Functions ////////////// - - Group.prototype.getElement = function () { - this.addBindingsd = false; - - this._visSet(); - - if (this.visible) { - this.element.classList.add("tabulator-group-visible"); - } else { - this.element.classList.remove("tabulator-group-visible"); - } - - for (var i = 0; i < this.element.childNodes.length; ++i) { - this.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]); - } - - this.generateGroupHeaderContents(); - - // this.addBindings(); - - return this.element; - }; - - Group.prototype.detachElement = function () { - if (this.element && this.element.parentNode) { - this.element.parentNode.removeChild(this.element); - } - }; - - //normalize the height of elements in the row - Group.prototype.normalizeHeight = function () { - this.setHeight(this.element.clientHeight); - }; - - Group.prototype.initialize = function (force) { - if (!this.initialized || force) { - this.normalizeHeight(); - this.initialized = true; - } - }; - - Group.prototype.reinitialize = function () { - this.initialized = false; - this.height = 0; - - if (Tabulator.prototype.helpers.elVisible(this.element)) { - this.initialize(true); - } - }; - - Group.prototype.setHeight = function (height) { - if (this.height != height) { - this.height = height; - this.outerHeight = this.element.offsetHeight; - } - }; - - //return rows outer height - Group.prototype.getHeight = function () { - return this.outerHeight; - }; - - Group.prototype.getGroup = function () { - return this; - }; - - Group.prototype.reinitializeHeight = function () {}; - Group.prototype.calcHeight = function () {}; - Group.prototype.setCellHeight = function () {}; - Group.prototype.clearCellHeight = function () {}; - - //////////////// Object Generation ///////////////// - Group.prototype.getComponent = function () { - if (!this.component) { - this.component = new GroupComponent(this); - } - - return this.component; - }; - - ////////////////////////////////////////////////// - ////////////// Group Row Extension /////////////// - ////////////////////////////////////////////////// - - var GroupRows = function GroupRows(table) { - - this.table = table; //hold Tabulator object - - this.groupIDLookups = false; //enable table grouping and set field to group by - this.startOpen = [function () { - return false; - }]; //starting state of group - this.headerGenerator = [function () { - return ""; - }]; - this.groupList = []; //ordered list of groups - this.allowedValues = false; - this.groups = {}; //hold row groups - this.displayIndex = 0; //index in display pipeline - }; - - //initialize group configuration - GroupRows.prototype.initialize = function () { - var self = this, - groupBy = self.table.options.groupBy, - startOpen = self.table.options.groupStartOpen, - groupHeader = self.table.options.groupHeader; - - this.allowedValues = self.table.options.groupValues; - - if (Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length) { - console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"); - } - - self.headerGenerator = [function () { - return ""; - }]; - this.startOpen = [function () { - return false; - }]; //starting state of group - - self.table.modules.localize.bind("groups|item", function (langValue, lang) { - self.headerGenerator[0] = function (value, count, data) { - //header layout function - return (typeof value === "undefined" ? "" : value) + "(" + count + " " + (count === 1 ? langValue : lang.groups.items) + ")"; - }; - }); - - this.groupIDLookups = []; - - if (Array.isArray(groupBy) || groupBy) { - if (this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "table" && this.table.options.columnCalcs != "both") { - this.table.modules.columnCalcs.removeCalcs(); - } - } else { - if (this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "group") { - - var cols = this.table.columnManager.getRealColumns(); - - cols.forEach(function (col) { - if (col.definition.topCalc) { - self.table.modules.columnCalcs.initializeTopRow(); - } - - if (col.definition.bottomCalc) { - self.table.modules.columnCalcs.initializeBottomRow(); - } - }); - } - } - - if (!Array.isArray(groupBy)) { - groupBy = [groupBy]; - } - - groupBy.forEach(function (group, i) { - var lookupFunc, column; - - if (typeof group == "function") { - lookupFunc = group; - } else { - column = self.table.columnManager.getColumnByField(group); - - if (column) { - lookupFunc = function lookupFunc(data) { - return column.getFieldValue(data); - }; - } else { - lookupFunc = function lookupFunc(data) { - return data[group]; - }; - } - } - - self.groupIDLookups.push({ - field: typeof group === "function" ? false : group, - func: lookupFunc, - values: self.allowedValues ? self.allowedValues[i] : false - }); - }); - - if (startOpen) { - - if (!Array.isArray(startOpen)) { - startOpen = [startOpen]; - } - - startOpen.forEach(function (level) { - level = typeof level == "function" ? level : function () { - return true; - }; - }); - - self.startOpen = startOpen; - } - - if (groupHeader) { - self.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader]; - } - - this.initialized = true; - }; - - GroupRows.prototype.setDisplayIndex = function (index) { - this.displayIndex = index; - }; - - GroupRows.prototype.getDisplayIndex = function () { - return this.displayIndex; - }; - - //return appropriate rows with group headers - GroupRows.prototype.getRows = function (rows) { - if (this.groupIDLookups.length) { - - this.table.options.dataGrouping.call(this.table); - - this.generateGroups(rows); - - if (this.table.options.dataGrouped) { - this.table.options.dataGrouped.call(this.table, this.getGroups(true)); - } - - return this.updateGroupRows(); - } else { - return rows.slice(0); - } - }; - - GroupRows.prototype.getGroups = function (compoment) { - var groupComponents = []; - - this.groupList.forEach(function (group) { - groupComponents.push(compoment ? group.getComponent() : group); - }); - - return groupComponents; - }; - - GroupRows.prototype.getChildGroups = function (group) { - var _this59 = this; - - var groupComponents = []; - - if (!group) { - group = this; - } - - group.groupList.forEach(function (child) { - if (child.groupList.length) { - groupComponents = groupComponents.concat(_this59.getChildGroups(child)); - } else { - groupComponents.push(child); - } - }); - - return groupComponents; - }; - - GroupRows.prototype.wipe = function () { - this.groupList.forEach(function (group) { - group.wipe(); - }); - }; - - GroupRows.prototype.pullGroupListData = function (groupList) { - var self = this; - var groupListData = []; - - groupList.forEach(function (group) { - var groupHeader = {}; - groupHeader.level = 0; - groupHeader.rowCount = 0; - groupHeader.headerContent = ""; - var childData = []; - - if (group.hasSubGroups) { - childData = self.pullGroupListData(group.groupList); - - groupHeader.level = group.level; - groupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers - groupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group); - - groupListData.push(groupHeader); - groupListData = groupListData.concat(childData); - } else { - 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")); - }); - } - }); - - return groupListData; - }; - - GroupRows.prototype.getGroupedData = function () { - - return this.pullGroupListData(this.groupList); - }; - - GroupRows.prototype.getRowGroup = function (row) { - var match = false; - - this.groupList.forEach(function (group) { - var result = group.getRowGroup(row); - - if (result) { - match = result; - } - }); - - return match; - }; - - GroupRows.prototype.countGroups = function () { - return this.groupList.length; - }; - - GroupRows.prototype.generateGroups = function (rows) { - var self = this, - oldGroups = self.groups; - - self.groups = {}; - self.groupList = []; - - if (this.allowedValues && this.allowedValues[0]) { - this.allowedValues[0].forEach(function (value) { - self.createGroup(value, 0, oldGroups); - }); - - rows.forEach(function (row) { - self.assignRowToExistingGroup(row, oldGroups); - }); - } else { - 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, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]); - - this.groups[groupKey] = group; - this.groupList.push(group); - }; - - // GroupRows.prototype.assignRowToGroup = function(row, oldGroups){ - // var groupID = this.groupIDLookups[0].func(row.getData()), - // groupKey = "0_" + groupID; - - // if(!this.groups[groupKey]){ - // this.createGroup(groupID, 0, oldGroups); - // } - - // this.groups[groupKey].addRow(row); - // }; - - GroupRows.prototype.assignRowToExistingGroup = function (row, oldGroups) { - var groupID = this.groupIDLookups[0].func(row.getData()), - groupKey = "0_" + groupID; - - if (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]; - - if (newGroupNeeded) { - this.createGroup(groupID, 0, oldGroups); - } - - this.groups["0_" + groupID].addRow(row); - - return !newGroupNeeded; - }; - - GroupRows.prototype.updateGroupRows = function (force) { - var self = this, - output = [], - oldRowCount; - - self.groupList.forEach(function (group) { - output = output.concat(group.getHeadersAndRows()); - }); - - //force update of table display - if (force) { - - var displayIndex = self.table.rowManager.setDisplayRows(output, this.getDisplayIndex()); - - if (displayIndex !== true) { - this.setDisplayIndex(displayIndex); - } - - self.table.rowManager.refreshActiveData("group", true, true); - } - - return output; - }; - - GroupRows.prototype.scrollHeaders = function (left) { - left = left + "px"; - - this.groupList.forEach(function (group) { - group.scrollHeader(left); - }); - }; - - GroupRows.prototype.removeGroup = function (group) { - var groupKey = group.level + "_" + group.key, - index; - - if (this.groups[groupKey]) { - delete this.groups[groupKey]; - - index = this.groupList.indexOf(group); - - if (index > -1) { - this.groupList.splice(index, 1); - } - } - }; - - Tabulator.prototype.registerModule("groupRows", GroupRows); - var History = function History(table) { - this.table = table; //hold Tabulator object - - 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]; - - this.undoers[action.type].call(this, action); - - this.index--; - - this.table.options.historyUndo.call(this.table, action.type, action.component.getComponent(), action.data); - - return true; - } else { - console.warn("History Undo Error - No more history to undo"); - return false; - } - }; - - History.prototype.redo = function () { - if (this.history.length - 1 > this.index) { - - this.index++; - - var action = this.history[this.index]; - - this.redoers[action.type].call(this, action); - - this.table.options.historyRedo.call(this.table, action.type, action.component.getComponent(), action.data); - - return true; - } else { - console.warn("History Redo Error - No more history to redo"); - return false; - } - }; - - 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); - - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - this.table.modules.groupRows.updateGroupRows(true); - } - - 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); - - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - this.table.modules.groupRows.updateGroupRows(true); - } - - 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(); - } - }; - - //rebind rows to new element after deletion - History.prototype._rebindRow = function (oldRow, newRow) { - this.history.forEach(function (action) { - if (action.component instanceof Row) { - if (action.component === oldRow) { - action.component = newRow; - } - } else if (action.component instanceof Cell) { - if (action.component.row === oldRow) { - var field = action.component.column.getField(); - - if (field) { - action.component = newRow.getCell(field); - } - } - } - }); - }; - - Tabulator.prototype.registerModule("history", History); - var HtmlTableImport = function HtmlTableImport(table) { - this.table = table; //hold Tabulator object - this.fieldIndex = []; - this.hasIndex = false; - }; - - HtmlTableImport.prototype.parseTable = function () { - var self = this, - element = self.table.element, - options = self.table.options, - columns = options.columns, - headers = element.getElementsByTagName("th"), - rows = element.getElementsByTagName("tbody")[0], - data = [], - newTable; - - self.hasIndex = false; - - self.table.options.htmlImporting.call(this.table); - - rows = rows ? rows.getElementsByTagName("tr") : []; - - //check for tablator inline options - self._extractOptions(element, options); - - if (headers.length) { - self._extractHeaders(headers, rows); - } else { - self._generateBlankHeaders(headers, rows); - } - - //iterate through table rows and build data set - for (var index = 0; index < rows.length; index++) { - var row = rows[index], - cells = row.getElementsByTagName("td"), - item = {}; - - //create index if the dont exist in table - if (!self.hasIndex) { - item[options.index] = index; - } - - for (var i = 0; i < cells.length; i++) { - var cell = cells[i]; - if (typeof this.fieldIndex[i] !== "undefined") { - item[this.fieldIndex[i]] = cell.innerHTML; - } - } - - //add row data to item - data.push(item); - } - - //create new element - var newElement = document.createElement("div"); - - //transfer attributes to new element - var attributes = element.attributes; - - // loop through attributes and apply them on div - - for (var i in attributes) { - if (_typeof(attributes[i]) == "object") { - newElement.setAttribute(attributes[i].name, attributes[i].value); - } - } - - // replace table with div element - element.parentNode.replaceChild(newElement, element); - - options.data = data; - - self.table.options.htmlImported.call(this.table); - - // // newElement.tabulator(options); - - this.table.element = newElement; - }; - - //extract tabulator attribute options - HtmlTableImport.prototype._extractOptions = function (element, options, defaultOptions) { - var attributes = element.attributes; - var optionsArr = defaultOptions ? Object.assign([], defaultOptions) : Object.keys(options); - var optionsList = {}; - - optionsArr.forEach(function (item) { - optionsList[item.toLowerCase()] = item; - }); - - for (var index in attributes) { - var attrib = attributes[index]; - var name; - - if (attrib && (typeof attrib === 'undefined' ? 'undefined' : _typeof(attrib)) == "object" && attrib.name && attrib.name.indexOf("tabulator-") === 0) { - name = attrib.name.replace("tabulator-", ""); - - if (typeof optionsList[name] !== "undefined") { - options[optionsList[name]] = this._attribValue(attrib.value); - } - } - } - }; - - //get value of attribute - HtmlTableImport.prototype._attribValue = function (value) { - if (value === "true") { - return true; - } - - if (value === "false") { - return false; - } - - return value; - }; - - //find column if it has already been defined - HtmlTableImport.prototype._findCol = function (title) { - var match = this.table.options.columns.find(function (column) { - return column.title === title; - }); - - return match || false; - }; - - //extract column from headers - HtmlTableImport.prototype._extractHeaders = function (headers, rows) { - for (var index = 0; index < headers.length; index++) { - var header = headers[index], - exists = false, - col = this._findCol(header.textContent), - width, - attributes; - - if (col) { - exists = true; - } else { - col = { title: header.textContent.trim() }; - } - - if (!col.field) { - col.field = header.textContent.trim().toLowerCase().replace(" ", "_"); - } - - width = header.getAttribute("width"); - - if (width && !col.width) { - col.width = width; - } - - //check for tablator inline options - attributes = header.attributes; - - // //check for tablator inline options - this._extractOptions(header, col, Column.prototype.defaultOptionList); - - this.fieldIndex[index] = col.field; - - if (col.field == this.table.options.index) { - this.hasIndex = true; - } - - if (!exists) { - this.table.options.columns.push(col); - } - } - }; - - //generate blank headers - HtmlTableImport.prototype._generateBlankHeaders = function (headers, rows) { - for (var index = 0; index < headers.length; index++) { - var header = headers[index], - col = { title: "", field: "col" + index }; - - this.fieldIndex[index] = col.field; - - var width = header.getAttribute("width"); - - if (width) { - col.width = width; - } - - this.table.options.columns.push(col); - } - }; - - Tabulator.prototype.registerModule("htmlTableImport", HtmlTableImport); - var Keybindings = function Keybindings(table) { - this.table = table; //hold Tabulator object - this.watchKeys = null; - this.pressedKeys = null; - this.keyupBinding = false; - this.keydownBinding = false; - }; - - Keybindings.prototype.initialize = function () { - var bindings = this.table.options.keybindings, - mergedBindings = {}; - - this.watchKeys = {}; - this.pressedKeys = []; - - if (bindings !== false) { - - for (var key in this.bindings) { - mergedBindings[key] = this.bindings[key]; - } - - if (Object.keys(bindings).length) { - - for (var _key in bindings) { - mergedBindings[_key] = bindings[_key]; - } - } - - this.mapBindings(mergedBindings); - this.bindEvents(); - } - }; - - Keybindings.prototype.mapBindings = function (bindings) { - var _this60 = this; - - var self = this; - - var _loop2 = function _loop2(key) { - - if (_this60.actions[key]) { - - if (bindings[key]) { - - if (_typeof(bindings[key]) !== "object") { - bindings[key] = [bindings[key]]; - } - - bindings[key].forEach(function (binding) { - self.mapBinding(key, binding); - }); - } - } else { - console.warn("Key Binding Error - no such action:", key); - } - }; - - for (var key in bindings) { - _loop2(key); - } - }; - - Keybindings.prototype.mapBinding = function (action, symbolsList) { - var self = this; - - var binding = { - action: this.actions[action], - keys: [], - ctrl: false, - shift: false, - meta: false - }; - - var symbols = symbolsList.toString().toLowerCase().split(" ").join("").split("+"); - - symbols.forEach(function (symbol) { - switch (symbol) { - case "ctrl": - binding.ctrl = true; - break; - - case "shift": - binding.shift = true; - break; - - case "meta": - binding.meta = true; - break; - - default: - symbol = parseInt(symbol); - binding.keys.push(symbol); - - if (!self.watchKeys[symbol]) { - self.watchKeys[symbol] = []; - } - - self.watchKeys[symbol].push(binding); - } - }); - }; - - Keybindings.prototype.bindEvents = function () { - var self = this; - - this.keyupBinding = function (e) { - var code = e.keyCode; - var bindings = self.watchKeys[code]; - - if (bindings) { - - self.pressedKeys.push(code); - - bindings.forEach(function (binding) { - self.checkBinding(e, binding); - }); - } - }; - - this.keydownBinding = function (e) { - var code = e.keyCode; - var bindings = self.watchKeys[code]; - - if (bindings) { - - var index = self.pressedKeys.indexOf(code); - - if (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 () { - if (this.keyupBinding) { - this.table.element.removeEventListener("keydown", this.keyupBinding); - } - - if (this.keydownBinding) { - this.table.element.removeEventListener("keyup", this.keydownBinding); - } - }; - - Keybindings.prototype.checkBinding = function (e, binding) { - var self = this, - match = true; - - if (e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta) { - binding.keys.forEach(function (key) { - var index = self.pressedKeys.indexOf(key); - - if (index == -1) { - match = false; - } - }); - - if (match) { - binding.action.call(self, e); - } - - return true; - } - - return false; - }; - - //default bindings - 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" - }; - - //default actions - 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(); - - if (rowManager.displayRowsCount) { - if (newPos >= 0) { - rowManager.element.scrollTop = newPos; - } else { - 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(); - - if (rowManager.displayRowsCount) { - if (newPos <= scrollMax) { - rowManager.element.scrollTop = newPos; - } else { - rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]); - } - } - - this.table.element.focus(); - }, - scrollToStart: function scrollToStart(e) { - var rowManager = this.table.rowManager; - - e.preventDefault(); - - if (rowManager.displayRowsCount) { - rowManager.scrollToRow(rowManager.getDisplayRows()[0]); - } - - this.table.element.focus(); - }, - scrollToEnd: function scrollToEnd(e) { - var rowManager = this.table.rowManager; - - e.preventDefault(); - - if (rowManager.displayRowsCount) { - rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]); - } - - this.table.element.focus(); - }, - navPrev: function navPrev(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().prev(); - } - } - }, - - navNext: function navNext(e) { - var cell = false; - var newRow = this.table.options.tabEndNewRow; - var nav; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - - nav = cell.nav(); - - if (!nav.next()) { - if (newRow) { - - cell.getElement().firstChild.blur(); - - if (newRow === true) { - newRow = this.table.addRow({}); - } else { - if (typeof newRow == "function") { - newRow = this.table.addRow(newRow(cell.row.getComponent())); - } else { - newRow = this.table.addRow(Object.assign({}, newRow)); - } - } - - newRow.then(function () { - setTimeout(function () { - nav.next(); - }); - }); - } - } - } - } - }, - - navLeft: function navLeft(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().left(); - } - } - }, - - navRight: function navRight(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().right(); - } - } - }, - - navUp: function navUp(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().up(); - } - } - }, - - navDown: function navDown(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().down(); - } - } - }, - - undo: function undo(e) { - var cell = false; - if (this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")) { - - cell = this.table.modules.edit.currentCell; - - if (!cell) { - e.preventDefault(); - this.table.modules.history.undo(); - } - } - }, - - redo: function redo(e) { - var cell = false; - if (this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")) { - - cell = this.table.modules.edit.currentCell; - - if (!cell) { - e.preventDefault(); - this.table.modules.history.redo(); - } - } - }, - - copyToClipboard: function copyToClipboard(e) { - if (!this.table.modules.edit.currentCell) { - if (this.table.modExists("clipboard", true)) { - this.table.modules.clipboard.copy(false, true); - } - } - } - }; - - Tabulator.prototype.registerModule("keybindings", Keybindings); - var Menu = function Menu(table) { - this.table = table; //hold Tabulator object - this.menuEl = false; - this.blurEvent = this.hideMenu.bind(this); - this.escEvent = this.escMenu.bind(this); - this.nestedMenuBlock = false; - }; - - Menu.prototype.initializeColumnHeader = function (column) { - var _this61 = this; - - var headerMenuEl; - - if (column.definition.headerContextMenu) { - column.getElement().addEventListener("contextmenu", function (e) { - var menu = typeof column.definition.headerContextMenu == "function" ? column.definition.headerContextMenu(column.getComponent()) : column.definition.headerContextMenu; - - e.preventDefault(); - - _this61.loadMenu(e, column, menu); - }); - } - - if (column.definition.headerMenu) { - - headerMenuEl = document.createElement("span"); - headerMenuEl.classList.add("tabulator-header-menu-button"); - headerMenuEl.innerHTML = "⋮"; - - headerMenuEl.addEventListener("click", function (e) { - var menu = typeof column.definition.headerMenu == "function" ? 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 = typeof cell.column.definition.contextMenu == "function" ? 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 = 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) { - var _this64 = this; - - 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 _this65 = this; - - var docHeight = Math.max(document.body.offsetHeight, window.innerHeight); - - e.preventDefault(); - - //abort if no menu set - if (!menu || !menu.length) { - return; - } - - if (this.nestedMenuBlock) { - //abort if child menu already open - if (this.isOpen()) { - return; - } - } else { - this.nestedMenuBlock = setTimeout(function () { - _this65.nestedMenuBlock = false; - }, 100); - } - - this.hideMenu(); - - this.menuEl = document.createElement("div"); - this.menuEl.classList.add("tabulator-menu"); - - menu.forEach(function (item) { - var itemEl = document.createElement("div"); - var label = item.label; - var disabled = item.disabled; - - if (item.separator) { - itemEl.classList.add("tabulator-menu-separator"); - } else { - itemEl.classList.add("tabulator-menu-item"); - - if (typeof label == "function") { - label = label(component.getComponent()); - } - - if (label instanceof Node) { - itemEl.appendChild(label); - } else { - itemEl.innerHTML = label; - } - - if (typeof disabled == "function") { - disabled = disabled(component.getComponent()); - } - - if (disabled) { - itemEl.classList.add("tabulator-menu-item-disabled"); - itemEl.addEventListener("click", function (e) { - e.stopPropagation(); - }); - } else { - 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); - - //move menu to start on right edge if it is too close to the edge of the screen - if (e.pageX + this.menuEl.offsetWidth >= document.body.offsetWidth) { - this.menuEl.style.left = ""; - this.menuEl.style.right = document.body.offsetWidth - e.pageX + "px"; - } - - //move menu to start on bottom edge if it is too close to the edge of the screen - if (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) { - if (e.keyCode == 27) { - this.hideMenu(); - } - }; - - Menu.prototype.hideMenu = function () { - if (this.menuEl.parentNode) { - this.menuEl.parentNode.removeChild(this.menuEl); - } - - if (this.escEvent) { - document.body.removeEventListener("keydown", this.escEvent); - } - - if (this.blurEvent) { - document.body.removeEventListener("click", this.blurEvent); - document.body.removeEventListener("contextmenu", this.blurEvent); - this.table.rowManager.element.removeEventListener("scroll", this.blurEvent); - } - }; - - //default accessors - Menu.prototype.menus = {}; - - Tabulator.prototype.registerModule("menu", Menu); - var MoveColumns = function MoveColumns(table) { - this.table = table; //hold Tabulator object - this.placeholderElement = this.createPlaceholderElement(); - this.hoverElement = false; //floating column header element - this.checkTimeout = false; //click check timeout holder - this.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click - this.moving = false; //currently moving column - this.toCol = false; //destination column - this.toColAfter = false; //position of moving column relative to the desitnation column - this.startX = 0; //starting position within header element - this.autoScrollMargin = 40; //auto scroll on edge when within margin - this.autoScrollStep = 5; //auto scroll distance in pixels - this.autoScrollTimeout = false; //auto scroll timeout - this.touchMove = false; - - this.moveHover = this.moveHover.bind(this); - this.endMove = this.endMove.bind(this); - }; - - MoveColumns.prototype.createPlaceholderElement = function () { - var el = document.createElement("div"); - - el.classList.add("tabulator-col"); - el.classList.add("tabulator-col-placeholder"); - - return el; - }; - - MoveColumns.prototype.initializeColumn = function (column) { - var self = this, - config = {}, - colEl; - - if (!column.modules.frozen) { - - colEl = column.getElement(); - - config.mousemove = function (e) { - if (column.parent === self.moving.parent) { - if ((self.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(colEl).left + self.table.columnManager.element.scrollLeft > column.getWidth() / 2) { - if (self.toCol !== column || !self.toColAfter) { - colEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling); - self.moveColumn(column, true); - } - } else { - if (self.toCol !== column || self.toColAfter) { - colEl.parentNode.insertBefore(self.placeholderElement, colEl); - self.moveColumn(column, false); - } - } - } - }.bind(self); - - colEl.addEventListener("mousedown", function (e) { - self.touchMove = false; - if (e.which === 1) { - self.checkTimeout = setTimeout(function () { - self.startMove(e, column); - }, self.checkPeriod); - } - }); - - colEl.addEventListener("mouseup", function (e) { - if (e.which === 1) { - if (self.checkTimeout) { - clearTimeout(self.checkTimeout); - } - } - }); - - self.bindTouchEvents(column); - } - - column.modules.moveColumn = config; - }; - - MoveColumns.prototype.bindTouchEvents = function (column) { - var self = this, - colEl = column.getElement(), - startXMove = false, - //shifting center position of the cell - dir = false, - currentCol, - nextCol, - prevCol, - nextColWidth, - prevColWidth, - nextColWidthLast, - prevColWidthLast; - - colEl.addEventListener("touchstart", function (e) { - self.checkTimeout = setTimeout(function () { - self.touchMove = true; - 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 = false; - - self.startMove(e, column); - }, self.checkPeriod); - }, { passive: true }); - - colEl.addEventListener("touchmove", function (e) { - var halfCol, diff, moveToCol; - - if (self.moving) { - self.moveHover(e); - - if (!startXMove) { - startXMove = e.touches[0].pageX; - } - - diff = e.touches[0].pageX - startXMove; - - if (diff > 0) { - if (nextCol && diff - nextColWidthLast > nextColWidth) { - moveToCol = nextCol; - - if (moveToCol !== column) { - startXMove = e.touches[0].pageX; - moveToCol.getElement().parentNode.insertBefore(self.placeholderElement, moveToCol.getElement().nextSibling); - self.moveColumn(moveToCol, true); - } - } - } else { - if (prevCol && -diff - prevColWidthLast > prevColWidth) { - moveToCol = prevCol; - - if (moveToCol !== column) { - startXMove = e.touches[0].pageX; - moveToCol.getElement().parentNode.insertBefore(self.placeholderElement, moveToCol.getElement()); - self.moveColumn(moveToCol, false); - } - } - } - - if (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: true }); - - colEl.addEventListener("touchend", function (e) { - if (self.checkTimeout) { - clearTimeout(self.checkTimeout); - } - if (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"); - - //create placeholder - this.placeholderElement.style.width = column.getWidth() + "px"; - this.placeholderElement.style.height = column.getHeight() + "px"; - - element.parentNode.insertBefore(this.placeholderElement, element); - element.parentNode.removeChild(element); - - //create hover element - this.hoverElement = element.cloneNode(true); - this.hoverElement.classList.add("tabulator-moving"); - - this.table.columnManager.getElement().appendChild(this.hoverElement); - - this.hoverElement.style.left = "0"; - this.hoverElement.style.bottom = "0"; - - if (!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) { - if (column.modules.moveColumn.mousemove) { - column.getElement().addEventListener("mousemove", column.modules.moveColumn.mousemove); - } - }); - }; - - MoveColumns.prototype._unbindMouseMove = function () { - this.table.columnManager.columnsByIndex.forEach(function (column) { - if (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; - - if (after) { - column.getCells().forEach(function (cell, i) { - var cellEl = cell.getElement(); - cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling); - }); - } else { - column.getCells().forEach(function (cell, i) { - var cellEl = cell.getElement(); - cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl); - }); - } - }; - - MoveColumns.prototype.endMove = function (e) { - if (e.which === 1 || 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"); - - if (this.toCol) { - this.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter); - } - - this.moving = false; - this.toCol = false; - this.toColAfter = false; - - if (!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"; - - if (xPos - scrollLeft < self.autoScrollMargin) { - if (!self.autoScrollTimeout) { - self.autoScrollTimeout = setTimeout(function () { - scrollPos = Math.max(0, scrollLeft - 5); - self.table.rowManager.getElement().scrollLeft = scrollPos; - self.autoScrollTimeout = false; - }, 1); - } - } - - if (scrollLeft + columnHolder.clientWidth - xPos < self.autoScrollMargin) { - if (!self.autoScrollTimeout) { - self.autoScrollTimeout = setTimeout(function () { - scrollPos = Math.min(columnHolder.clientWidth, scrollLeft + 5); - self.table.rowManager.getElement().scrollLeft = scrollPos; - self.autoScrollTimeout = false; - }, 1); - } - } - }; - - Tabulator.prototype.registerModule("moveColumn", MoveColumns); - - var MoveRows = function MoveRows(table) { - - this.table = table; //hold Tabulator object - this.placeholderElement = this.createPlaceholderElement(); - this.hoverElement = false; //floating row header element - this.checkTimeout = false; //click check timeout holder - this.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click - this.moving = false; //currently moving row - this.toRow = false; //destination row - this.toRowAfter = false; //position of moving row relative to the desitnation row - this.hasHandle = false; //row has handle instead of fully movable row - this.startY = 0; //starting Y position within header element - this.startX = 0; //starting X position within header element - - this.moveHover = this.moveHover.bind(this); - this.endMove = this.endMove.bind(this); - this.tableRowDropEvent = false; - - this.touchMove = false; - - this.connection = false; - this.connectionSelectorsTables = false; - this.connectionSelectorsElements = false; - this.connectionElements = []; - this.connections = []; - - this.connectedTable = false; - this.connectedRow = false; - }; - - MoveRows.prototype.createPlaceholderElement = function () { - var el = document.createElement("div"); - - el.classList.add("tabulator-row"); - el.classList.add("tabulator-row-placeholder"); - - return el; - }; - - MoveRows.prototype.initialize = function (handle) { - this.connectionSelectorsTables = this.table.options.movableRowsConnectedTables; - this.connectionSelectorsElements = this.table.options.movableRowsConnectedElements; - - this.connection = this.connectionSelectorsTables || this.connectionSelectorsElements; - }; - - MoveRows.prototype.setHandle = function (handle) { - this.hasHandle = handle; - }; - - MoveRows.prototype.initializeGroupHeader = function (group) { - var self = this, - config = {}, - rowEl; - - //inter table drag drop - config.mouseup = function (e) { - self.tableRowDrop(e, row); - }.bind(self); - - //same table drag drop - config.mousemove = function (e) { - if (e.pageY - Tabulator.prototype.helpers.elOffset(group.element).top + self.table.rowManager.element.scrollTop > group.getHeight() / 2) { - if (self.toRow !== group || !self.toRowAfter) { - var rowEl = group.getElement(); - rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling); - self.moveRow(group, true); - } - } else { - if (self.toRow !== group || self.toRowAfter) { - var rowEl = group.getElement(); - if (rowEl.previousSibling) { - rowEl.parentNode.insertBefore(self.placeholderElement, rowEl); - self.moveRow(group, false); - } - } - } - }.bind(self); - - group.modules.moveRow = config; - }; - - MoveRows.prototype.initializeRow = function (row) { - var self = this, - config = {}, - rowEl; - - //inter table drag drop - config.mouseup = function (e) { - self.tableRowDrop(e, row); - }.bind(self); - - //same table drag drop - config.mousemove = function (e) { - if (e.pageY - Tabulator.prototype.helpers.elOffset(row.element).top + self.table.rowManager.element.scrollTop > row.getHeight() / 2) { - if (self.toRow !== row || !self.toRowAfter) { - var rowEl = row.getElement(); - rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling); - self.moveRow(row, true); - } - } else { - if (self.toRow !== row || self.toRowAfter) { - var rowEl = row.getElement(); - rowEl.parentNode.insertBefore(self.placeholderElement, rowEl); - self.moveRow(row, false); - } - } - }.bind(self); - - if (!this.hasHandle) { - - rowEl = row.getElement(); - - rowEl.addEventListener("mousedown", function (e) { - if (e.which === 1) { - self.checkTimeout = setTimeout(function () { - self.startMove(e, row); - }, self.checkPeriod); - } - }); - - rowEl.addEventListener("mouseup", function (e) { - if (e.which === 1) { - if (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) { - if (e.which === 1) { - self.checkTimeout = setTimeout(function () { - self.startMove(e, cell.row); - }, self.checkPeriod); - } - }); - - cellEl.addEventListener("mouseup", function (e) { - if (e.which === 1) { - if (self.checkTimeout) { - clearTimeout(self.checkTimeout); - } - } - }); - - this.bindTouchEvents(cell.row, cell.getElement()); - }; - - MoveRows.prototype.bindTouchEvents = function (row, element) { - var self = this, - startYMove = false, - //shifting center position of the cell - dir = false, - currentRow, - nextRow, - prevRow, - nextRowHeight, - prevRowHeight, - nextRowHeightLast, - prevRowHeightLast; - - element.addEventListener("touchstart", function (e) { - self.checkTimeout = setTimeout(function () { - self.touchMove = true; - 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 = false; - - self.startMove(e, row); - }, self.checkPeriod); - }, { passive: true }); - this.moving, this.toRow, this.toRowAfter; - element.addEventListener("touchmove", function (e) { - - var halfCol, diff, moveToRow; - - if (self.moving) { - e.preventDefault(); - - self.moveHover(e); - - if (!startYMove) { - startYMove = e.touches[0].pageY; - } - - diff = e.touches[0].pageY - startYMove; - - if (diff > 0) { - if (nextRow && diff - nextRowHeightLast > nextRowHeight) { - moveToRow = nextRow; - - if (moveToRow !== row) { - startYMove = e.touches[0].pageY; - moveToRow.getElement().parentNode.insertBefore(self.placeholderElement, moveToRow.getElement().nextSibling); - self.moveRow(moveToRow, true); - } - } - } else { - if (prevRow && -diff - prevRowHeightLast > prevRowHeight) { - moveToRow = prevRow; - - if (moveToRow !== row) { - startYMove = e.touches[0].pageY; - moveToRow.getElement().parentNode.insertBefore(self.placeholderElement, moveToRow.getElement()); - self.moveRow(moveToRow, false); - } - } - } - - if (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) { - if (self.checkTimeout) { - clearTimeout(self.checkTimeout); - } - if (self.moving) { - self.endMove(e); - self.touchMove = false; - } - }); - }; - - MoveRows.prototype._bindMouseMove = function () { - var self = this; - - self.table.rowManager.getDisplayRows().forEach(function (row) { - if ((row.type === "row" || row.type === "group") && row.modules.moveRow.mousemove) { - row.getElement().addEventListener("mousemove", row.modules.moveRow.mousemove); - } - }); - }; - - MoveRows.prototype._unbindMouseMove = function () { - var self = this; - - self.table.rowManager.getDisplayRows().forEach(function (row) { - if ((row.type === "row" || row.type === "group") && 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"); - - //create placeholder - this.placeholderElement.style.width = row.getWidth() + "px"; - this.placeholderElement.style.height = row.getHeight() + "px"; - - if (!this.connection) { - element.parentNode.insertBefore(this.placeholderElement, element); - element.parentNode.removeChild(element); - } else { - this.table.element.classList.add("tabulator-movingrow-sending"); - this.connectToTables(row); - } - - //create hover element - this.hoverElement = element.cloneNode(true); - this.hoverElement.classList.add("tabulator-moving"); - - if (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"; - } else { - 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(); - if (this.connection) { - position = element.getBoundingClientRect(); - - this.startX = position.left - pageX + window.pageXOffset; - this.startY = position.top - pageY + window.pageYOffset; - } else { - this.startY = pageY - element.getBoundingClientRect().top; - } - }; - - MoveRows.prototype.endMove = function (e) { - if (!e || e.which === 1 || this.touchMove) { - this._unbindMouseMove(); - - if (!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"); - - if (this.toRow) { - this.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter); - } - - this.moving = false; - this.toRow = false; - this.toRowAfter = false; - - document.body.removeEventListener("mousemove", this.moveHover); - document.body.removeEventListener("mouseup", this.endMove); - - if (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) { - if (this.connection) { - this.moveHoverConnections.call(this, e); - } else { - 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) { - if (this.table.options.movableRowsElementDrop) { - this.table.options.movableRowsElementDrop(e, element, row ? row.getComponent() : false); - } - }; - - //establish connection with other tables - MoveRows.prototype.connectToTables = function (row) { - var _this66 = this; - - var connectionTables; - - if (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 - }); - } - - if (this.connectionSelectorsElements) { - - this.connectionElements = []; - - if (!Array.isArray(this.connectionSelectorsElements)) { - this.connectionSelectorsElements = [this.connectionSelectorsElements]; - } - - this.connectionSelectorsElements.forEach(function (query) { - if (typeof query === "string") { - _this66.connectionElements = _this66.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query))); - } else { - _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"); - }); - } - }; - - //disconnect from other tables - MoveRows.prototype.disconnectFromTables = function () { - var connectionTables; - - if (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; - }); - }; - - //accept incomming connection - MoveRows.prototype.connect = function (table, row) { - var self = this; - if (!this.connectedTable) { - this.connectedTable = table; - this.connectedRow = row; - - this.table.element.classList.add("tabulator-movingrow-receiving"); - - self.table.rowManager.getDisplayRows().forEach(function (row) { - if (row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup) { - row.getElement().addEventListener("mouseup", row.modules.moveRow.mouseup); - } - }); - - self.tableRowDropEvent = self.tableRowDrop.bind(self); - - self.table.element.addEventListener("mouseup", self.tableRowDropEvent); - - this.table.options.movableRowsReceivingStart.call(this.table, row, table); - - return true; - } else { - console.warn("Move Row Error - Table cannot accept connection, already connected to table:", this.connectedTable); - return false; - } - }; - - //close incomming connection - MoveRows.prototype.disconnect = function (table) { - var self = this; - if (table === this.connectedTable) { - this.connectedTable = false; - this.connectedRow = false; - - this.table.element.classList.remove("tabulator-movingrow-receiving"); - - self.table.rowManager.getDisplayRows().forEach(function (row) { - if (row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup) { - row.getElement().removeEventListener("mouseup", row.modules.moveRow.mouseup); - } - }); - - self.table.element.removeEventListener("mouseup", self.tableRowDropEvent); - - this.table.options.movableRowsReceivingStop.call(this.table, table); - } else { - console.warn("Move Row Error - trying to disconnect from non connected table"); - } - }; - - MoveRows.prototype.dropComplete = function (table, row, success) { - var sender = false; - - 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; - break; - } - - if (sender) { - sender.call(this, this.moving.getComponent(), row ? row.getComponent() : undefined, table); - } else { - if (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() : undefined, table); - } else { - this.table.options.movableRowsSentFailed.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table); - } - - this.endMove(); - }; - - MoveRows.prototype.tableRowDrop = function (e, row) { - var receiver = false, - success = false; - - console.trace("drop"); - - e.stopImmediatePropagation(); - - switch (_typeof(this.table.options.movableRowsReceiver)) { - case "string": - receiver = this.receivers[this.table.options.movableRowsReceiver]; - break; - - case "function": - receiver = this.table.options.movableRowsReceiver; - break; - } - - if (receiver) { - success = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); - } else { - console.warn("Mover Row Error - no matching receiver found:", this.table.options.movableRowsReceiver); - } - - if (success) { - this.table.options.movableRowsReceived.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); - } else { - this.table.options.movableRowsReceivedFailed.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); - } - - this.table.modules.comms.send(this.connectedTable, "moveRow", "dropcomplete", { - row: row, - success: success - }); - }; - - MoveRows.prototype.receivers = { - insert: function insert(fromRow, toRow, fromTable) { - this.table.addRow(fromRow.getData(), undefined, toRow); - return true; - }, - - add: function add(fromRow, toRow, fromTable) { - this.table.addRow(fromRow.getData()); - return true; - }, - - update: function update(fromRow, toRow, fromTable) { - if (toRow) { - toRow.update(fromRow.getData()); - return true; - } - - return false; - }, - - replace: function replace(fromRow, toRow, fromTable) { - if (toRow) { - this.table.addRow(fromRow.getData(), undefined, toRow); - toRow.delete(); - return true; - } - - return false; - } - }; - - 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); - break; - - case "disconnect": - return this.disconnect(table); - break; - - case "dropcomplete": - return this.dropComplete(table, data.row, data.success); - break; - } - }; - - Tabulator.prototype.registerModule("moveRow", MoveRows); - var Mutator = function Mutator(table) { - this.table = table; //hold Tabulator object - this.allowedTypes = ["", "data", "edit", "clipboard"]; //list of muatation types - this.enabled = true; - }; - - //initialize column mutator - Mutator.prototype.initializeColumn = function (column) { - var self = this, - match = false, - config = {}; - - this.allowedTypes.forEach(function (type) { - var key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)), - mutator; - - if (column.definition[key]) { - mutator = self.lookupMutator(column.definition[key]); - - if (mutator) { - match = true; - - config[key] = { - mutator: mutator, - params: column.definition[key + "Params"] || {} - }; - } - } - }); - - if (match) { - column.modules.mutate = config; - } - }; - - Mutator.prototype.lookupMutator = function (value) { - var mutator = false; - - //set column mutator - switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) { - case "string": - if (this.mutators[value]) { - mutator = this.mutators[value]; - } else { - console.warn("Mutator Error - No such mutator found, ignoring: ", value); - } - break; - - case "function": - mutator = value; - break; - } - - return mutator; - }; - - //apply mutator to row - Mutator.prototype.transformRow = function (data, type, updatedData) { - var self = this, - key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)), - value; - - if (this.enabled) { - - self.table.columnManager.traverse(function (column) { - var mutator, params, component; - - if (column.modules.mutate) { - mutator = column.modules.mutate[key] || column.modules.mutate.mutator || false; - - if (mutator) { - value = column.getFieldValue(typeof updatedData !== "undefined" ? updatedData : data); - - if (type == "data" || typeof value !== "undefined") { - component = column.getComponent(); - params = typeof mutator.params === "function" ? mutator.params(value, data, type, component) : mutator.params; - column.setFieldValue(data, mutator.mutator(value, data, type, params, component)); - } - } - } - }); - } - - return data; - }; - - //apply mutator to new cell value - Mutator.prototype.transformCell = function (cell, value) { - var mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false, - tempData = {}; - - if (mutator) { - tempData = Object.assign(tempData, cell.row.getData()); - cell.column.setFieldValue(tempData, value); - return mutator.mutator(value, tempData, "edit", mutator.params, cell.getComponent()); - } else { - return value; - } - }; - - Mutator.prototype.enable = function () { - this.enabled = true; - }; - - Mutator.prototype.disable = function () { - this.enabled = false; - }; - - //default mutators - Mutator.prototype.mutators = {}; - - Tabulator.prototype.registerModule("mutator", Mutator); - var Page = function Page(table) { - - this.table = table; //hold Tabulator object - - this.mode = "local"; - this.progressiveLoad = false; - - this.size = 0; - this.page = 1; - this.count = 5; - this.max = 1; - - this.displayIndex = 0; //index in display pipeline - - this.initialLoad = true; - - 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"); - button.classList.add("tabulator-page"); - button.setAttribute("type", "button"); - button.setAttribute("role", "button"); - button.setAttribute("aria-label", ""); - button.setAttribute("title", ""); - - this.firstBut = button.cloneNode(true); - this.firstBut.setAttribute("data-page", "first"); - - this.prevBut = button.cloneNode(true); - this.prevBut.setAttribute("data-page", "prev"); - - this.nextBut = button.cloneNode(true); - this.nextBut.setAttribute("data-page", "next"); - - this.lastBut = button.cloneNode(true); - this.lastBut.setAttribute("data-page", "last"); - - if (this.table.options.paginationSizeSelector) { - this.pageSizeSelect = document.createElement("select"); - this.pageSizeSelect.classList.add("tabulator-page-size"); - } - }; - - Page.prototype.generatePageSizeSelectList = function () { - var _this67 = this; - - var pageSizes = []; - - if (this.pageSizeSelect) { - - if (Array.isArray(this.table.options.paginationSizeSelector)) { - pageSizes = this.table.options.paginationSizeSelector; - this.pageSizes = pageSizes; - - if (this.pageSizes.indexOf(this.size) == -1) { - pageSizes.unshift(this.size); - } - } else { - - if (this.pageSizes.indexOf(this.size) == -1) { - pageSizes = []; - - for (var _i9 = 1; _i9 < 5; _i9++) { - pageSizes.push(this.size * _i9); - } - - this.pageSizes = pageSizes; - } else { - pageSizes = this.pageSizes; - } - } - - while (this.pageSizeSelect.firstChild) { - this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild); - }pageSizes.forEach(function (item) { - var itemEl = document.createElement("option"); - itemEl.value = item; - - if (item === true) { - _this67.table.modules.localize.bind("pagination|all", function (value) { - itemEl.innerHTML = value; - }); - } else { - itemEl.innerHTML = item; - } - - _this67.pageSizeSelect.appendChild(itemEl); - }); - - this.pageSizeSelect.value = this.size; - } - }; - - //setup pageination - Page.prototype.initialize = function (hidden) { - var self = this, - pageSelectLabel, - testElRow, - testElCell; - - //update param names - 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); - - //build pagination element - - //bind localizations - 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); - }); - - //click bindings - 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); - }); - - if (self.table.options.paginationElement) { - self.element = self.table.options.paginationElement; - } - - if (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(self.pageSizeSelect.value == "true" ? true : self.pageSizeSelect.value); - self.setPage(1).then(function () {}).catch(function () {}); - }); - } - - //append to DOM - 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); - - if (!self.table.options.paginationElement && !hidden) { - self.table.footerManager.append(self.element, self); - } - - //set default values - self.mode = self.table.options.pagination; - - if (self.table.options.paginationSize) { - self.size = self.table.options.paginationSize; - } else { - testElRow = document.createElement("div"); - testElRow.classList.add("tabulator-row"); - testElRow.style.visibility = hidden; - - testElCell = document.createElement("div"); - testElCell.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.page = self.table.options.paginationInitialPage || 1; - self.count = self.table.options.paginationButtonCount; - - self.generatePageSizeSelectList(); - }; - - Page.prototype.initializeProgressive = function (mode) { - this.initialize(true); - this.mode = "progressive_" + mode; - this.progressiveLoad = true; - }; - - Page.prototype.setDisplayIndex = function (index) { - this.displayIndex = index; - }; - - Page.prototype.getDisplayIndex = function () { - return this.displayIndex; - }; - - //calculate maximum page from number of rows - Page.prototype.setMaxRows = function (rowCount) { - if (!rowCount) { - this.max = 1; - } else { - this.max = this.size === true ? 1 : Math.ceil(rowCount / this.size); - } - - if (this.page > this.max) { - this.page = this.max; - } - }; - - //reset to first page without triggering action - Page.prototype.reset = function (force, columnsChanged) { - if (this.mode == "local" || force) { - this.page = 1; - } - - if (columnsChanged) { - this.initialLoad = true; - } - - return true; - }; - - //set the maxmum page - Page.prototype.setMaxPage = function (max) { - - max = parseInt(max); - - this.max = max || 1; - - if (this.page > this.max) { - this.page = this.max; - this.trigger(); - } - }; - - //set current page number - Page.prototype.setPage = function (page) { - var _this68 = this; - - var self = this; - - switch (page) { - case "first": - return this.setPage(1); - break; - - case "prev": - return this.previousPage(); - break; - - case "next": - return this.nextPage(); - break; - - case "last": - return this.setPage(this.max); - break; - } - - return new Promise(function (resolve, reject) { - - page = parseInt(page); - - if (page > 0 && page <= _this68.max) { - _this68.page = page; - _this68.trigger().then(function () { - resolve(); - }).catch(function () { - reject(); - }); - - if (self.table.options.persistence && self.table.modExists("persistence", true) && self.table.modules.persistence.config.page) { - self.table.modules.persistence.save("page"); - } - } else { - 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 = _this69.table.rowManager.getDisplayRows(_this69.displayIndex - 1); - var index = rows.indexOf(row); - - if (index > -1) { - var page = _this69.size === true ? 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) { - if (size !== true) { - size = parseInt(size); - } - - if (size > 0) { - this.size = size; - } - - if (this.pageSizeSelect) { - // this.pageSizeSelect.value = size; - this.generatePageSizeSelectList(); - } - - if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.page) { - this.table.modules.persistence.save("page"); - } - }; - - //setup the pagination buttons - Page.prototype._setPageButtons = function () { - var self = this; - - var leftSize = Math.floor((this.count - 1) / 2); - var rightSize = Math.ceil((this.count - 1) / 2); - var min = this.max - this.page + leftSize + 1 < this.count ? this.max - this.count + 1 : Math.max(this.page - leftSize, 1); - var max = this.page <= rightSize ? Math.min(this.count, this.max) : Math.min(this.page + rightSize, this.max); - - while (self.pagesElement.firstChild) { - self.pagesElement.removeChild(self.pagesElement.firstChild); - }if (self.page == 1) { - self.firstBut.disabled = true; - self.prevBut.disabled = true; - } else { - self.firstBut.disabled = false; - self.prevBut.disabled = false; - } - - if (self.page == self.max) { - self.lastBut.disabled = true; - self.nextBut.disabled = true; - } else { - self.lastBut.disabled = false; - self.nextBut.disabled = false; - } - - for (var _i10 = min; _i10 <= max; _i10++) { - if (_i10 > 0 && _i10 <= self.max) { - self.pagesElement.appendChild(self._generatePageButton(_i10)); - } - } - - this.footerRedraw(); - }; - - Page.prototype._generatePageButton = function (page) { - var self = this, - button = document.createElement("button"); - - button.classList.add("tabulator-page"); - if (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); - }); - - return button; - }; - - //previous page - Page.prototype.previousPage = function () { - var _this70 = this; - - return new Promise(function (resolve, reject) { - if (_this70.page > 1) { - _this70.page--; - _this70.trigger().then(function () { - resolve(); - }).catch(function () { - reject(); - }); - - 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); - reject(); - } - }); - }; - - //next page - Page.prototype.nextPage = function () { - var _this71 = this; - - return new Promise(function (resolve, reject) { - if (_this71.page < _this71.max) { - _this71.page++; - _this71.trigger().then(function () { - resolve(); - }).catch(function () { - reject(); - }); - - if (_this71.table.options.persistence && _this71.table.modExists("persistence", true) && _this71.table.modules.persistence.config.page) { - _this71.table.modules.persistence.save("page"); - } - } else { - if (!_this71.progressiveLoad) { - console.warn("Pagination Error - Next page would be greater than maximum page of " + _this71.max + ":", _this71.max + 1); - } - reject(); - } - }); - }; - - //return current page number - Page.prototype.getPage = function () { - return this.page; - }; - - //return max page number - Page.prototype.getPageMax = function () { - return this.max; - }; - - Page.prototype.getPageSize = function (size) { - return this.size; - }; - - Page.prototype.getMode = function () { - return this.mode; - }; - - //return appropriate rows for current page - Page.prototype.getRows = function (data) { - var output, start, end; - - if (this.mode == "local") { - output = []; - - if (this.size === true) { - start = 0; - end = data.length - 1; - } else { - start = this.size * (this.page - 1); - end = start + parseInt(this.size); - } - - this._setPageButtons(); - - for (var _i11 = start; _i11 < end; _i11++) { - if (data[_i11]) { - output.push(data[_i11]); - } - } - - return output; - } else { - - this._setPageButtons(); - - return data.slice(0); - } - }; - - Page.prototype.trigger = function () { - var _this72 = this; - - var left; - - return new Promise(function (resolve, reject) { - - switch (_this72.mode) { - case "local": - left = _this72.table.rowManager.scrollLeft; - - _this72.table.rowManager.refreshActiveData("page"); - _this72.table.rowManager.scrollHorizontal(left); - - _this72.table.options.pageLoaded.call(_this72.table, _this72.getPage()); - resolve(); - break; - - case "remote": - case "progressive_load": - case "progressive_scroll": - _this72.table.modules.ajax.blockActiveRequest(); - _this72._getRemotePage().then(function () { - resolve(); - }).catch(function () { - reject(); - }); - break; - - default: - console.warn("Pagination Error - no such pagination mode:", _this72.mode); - reject(); - } - }); - }; - - Page.prototype._getRemotePage = function () { - var _this73 = this; - - var self = this, - oldParams, - pageParams; - - return new Promise(function (resolve, reject) { - - if (!self.table.modExists("ajax", true)) { - reject(); - } - - //record old params and restore after request has been made - oldParams = Tabulator.prototype.helpers.deepClone(self.table.modules.ajax.getParams() || {}); - pageParams = self.table.modules.ajax.getParams(); - - //configure request params - pageParams[_this73.dataSentNames.page] = self.page; - - //set page size if defined - if (_this73.size) { - pageParams[_this73.dataSentNames.size] = _this73.size; - } - - //set sort data if defined - if (_this73.table.options.ajaxSorting && _this73.table.modExists("sort")) { - var sorters = self.table.modules.sort.getSort(); - - sorters.forEach(function (item) { - delete item.column; - }); - - pageParams[_this73.dataSentNames.sorters] = sorters; - } - - //set filter data if defined - if (_this73.table.options.ajaxFiltering && _this73.table.modExists("filter")) { - var filters = self.table.modules.filter.getFilters(true, true); - pageParams[_this73.dataSentNames.filters] = filters; - } - - self.table.modules.ajax.setParams(pageParams); - - self.table.modules.ajax.sendRequest(_this73.progressiveLoad).then(function (data) { - self._parseRemoteData(data); - resolve(); - }).catch(function (e) { - reject(); - }); - - self.table.modules.ajax.setParams(oldParams); - }); - }; - - Page.prototype._parseRemoteData = function (data) { - var self = this, - left, - data, - margin; - - if (typeof data[this.dataReceivedNames.last_page] === "undefined") { - console.warn("Remote Pagination Error - Server response missing '" + this.dataReceivedNames.last_page + "' property"); - } - - if (data[this.dataReceivedNames.data]) { - this.max = parseInt(data[this.dataReceivedNames.last_page]) || 1; - - if (this.progressiveLoad) { - switch (this.mode) { - case "progressive_load": - - if (this.page == 1) { - this.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1); - } else { - this.table.rowManager.addRows(data[this.dataReceivedNames.data]); - } - - if (this.page < this.max) { - setTimeout(function () { - self.nextPage().then(function () {}).catch(function () {}); - }, self.table.options.ajaxProgressiveLoadDelay); - } - break; - - case "progressive_scroll": - data = this.table.rowManager.getData().concat(data[this.dataReceivedNames.data]); - - this.table.rowManager.setData(data, true, this.initialLoad && this.page == 1); - - margin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.element.clientHeight * 2; - - if (self.table.rowManager.element.scrollHeight <= self.table.rowManager.element.clientHeight + margin) { - self.nextPage().then(function () {}).catch(function () {}); - } - break; - } - } else { - left = this.table.rowManager.scrollLeft; - - this.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1); - - this.table.rowManager.scrollHorizontal(left); - - this.table.columnManager.scrollHorizontal(left); - - this.table.options.pageLoaded.call(this.table, this.getPage()); - } - - this.initialLoad = false; - } else { - console.warn("Remote Pagination Error - Server response missing '" + this.dataReceivedNames.data + "' property"); - } - }; - - //handle the footer element being redrawn - Page.prototype.footerRedraw = function () { - var footer = this.table.footerManager.element; - - if (Math.ceil(footer.clientWidth) - footer.scrollWidth < 0) { - this.pagesElement.style.display = 'none'; - } else { - this.pagesElement.style.display = ''; - - if (Math.ceil(footer.clientWidth) - footer.scrollWidth < 0) { - this.pagesElement.style.display = 'none'; - } - } - }; - - //set the paramter names for pagination requests - Page.prototype.paginationDataSentNames = { - "page": "page", - "size": "size", - "sorters": "sorters", - // "sort_dir":"sort_dir", - "filters": "filters" - // "filter_value":"filter_value", - // "filter_type":"filter_type", - }; - - //set the property names for pagination responses - Page.prototype.paginationDataReceivedNames = { - "current_page": "current_page", - "last_page": "last_page", - "data": "data" - }; - - Tabulator.prototype.registerModule("page", Page); - - var Persistence = function Persistence(table) { - this.table = table; //hold Tabulator object - this.mode = ""; - this.id = ""; - // this.persistProps = ["field", "width", "visible"]; - this.defWatcherBlock = false; - this.config = {}; - this.readFunc = false; - this.writeFunc = false; - }; - - // Test for whether localStorage is available for use. - Persistence.prototype.localStorageTest = function () { - var testKey = "_tabulator_test"; - - try { - window.localStorage.setItem(testKey, testKey); - window.localStorage.removeItem(testKey); - return true; - } catch (e) { - return false; - } - }; - - //setup parameters - Persistence.prototype.initialize = function () { - //determine persistent layout storage type - - var mode = this.table.options.persistenceMode, - id = this.table.options.persistenceID, - retreivedData; - - this.mode = mode !== true ? mode : this.localStorageTest() ? "local" : "cookie"; - - if (this.table.options.persistenceReaderFunc) { - if (typeof this.table.options.persistenceReaderFunc === "function") { - this.readFunc = this.table.options.persistenceReaderFunc; - } else { - if (this.readers[this.table.options.persistenceReaderFunc]) { - this.readFunc = this.readers[this.table.options.persistenceReaderFunc]; - } else { - console.warn("Persistence Read Error - invalid reader set", this.table.options.persistenceReaderFunc); - } - } - } else { - if (this.readers[this.mode]) { - this.readFunc = this.readers[this.mode]; - } else { - console.warn("Persistence Read Error - invalid reader set", this.mode); - } - } - - if (this.table.options.persistenceWriterFunc) { - if (typeof this.table.options.persistenceWriterFunc === "function") { - this.writeFunc = this.table.options.persistenceWriterFunc; - } else { - if (this.readers[this.table.options.persistenceWriterFunc]) { - this.writeFunc = this.readers[this.table.options.persistenceWriterFunc]; - } else { - console.warn("Persistence Write Error - invalid reader set", this.table.options.persistenceWriterFunc); - } - } - } else { - if (this.writers[this.mode]) { - this.writeFunc = this.writers[this.mode]; - } else { - console.warn("Persistence Write Error - invalid writer set", this.mode); - } - } - - //set storage tag - this.id = "tabulator-" + (id || this.table.element.getAttribute("id") || ""); - - this.config = { - sort: this.table.options.persistence === true || this.table.options.persistence.sort, - filter: this.table.options.persistence === true || this.table.options.persistence.filter, - group: this.table.options.persistence === true || this.table.options.persistence.group, - page: this.table.options.persistence === true || this.table.options.persistence.page, - columns: this.table.options.persistence === true ? ["title", "width", "visible"] : this.table.options.persistence.columns - }; - - //load pagination data if needed - if (this.config.page) { - retreivedData = this.retreiveData("page"); - - if (retreivedData) { - if (typeof retreivedData.paginationSize !== "undefined" && (this.config.page === true || this.config.page.size)) { - this.table.options.paginationSize = retreivedData.paginationSize; - } - - if (typeof retreivedData.paginationInitialPage !== "undefined" && (this.config.page === true || this.config.page.page)) { - this.table.options.paginationInitialPage = retreivedData.paginationInitialPage; - } - } - } - - //load group data if needed - if (this.config.group) { - retreivedData = this.retreiveData("group"); - - if (retreivedData) { - if (typeof retreivedData.groupBy !== "undefined" && (this.config.group === true || this.config.group.groupBy)) { - this.table.options.groupBy = retreivedData.groupBy; - } - if (typeof retreivedData.groupStartOpen !== "undefined" && (this.config.group === true || this.config.group.groupStartOpen)) { - this.table.options.groupStartOpen = retreivedData.groupStartOpen; - } - if (typeof retreivedData.groupHeader !== "undefined" && (this.config.group === true || this.config.group.groupHeader)) { - this.table.options.groupHeader = retreivedData.groupHeader; - } - } - } - }; - - Persistence.prototype.initializeColumn = function (column) { - var self = this, - def, - keys; - - if (this.config.columns) { - this.defWatcherBlock = true; - - def = column.getDefinition(); - - keys = this.config.columns === true ? Object.keys(def) : this.config.columns; - - keys.forEach(function (key) { - var props = Object.getOwnPropertyDescriptor(def, key); - var value = def[key]; - if (props) { - Object.defineProperty(def, key, { - set: function set(newValue) { - value = newValue; - - if (!self.defWatcherBlock) { - self.save("columns"); - } - - if (props.set) { - props.set(newValue); - } - }, - get: function get() { - if (props.get) { - props.get(); - } - return value; - } - }); - } - }); - - this.defWatcherBlock = false; - } - }; - - //load saved definitions - Persistence.prototype.load = function (type, current) { - var data = this.retreiveData(type); - - if (current) { - data = data ? this.mergeDefinition(current, data) : current; - } - - return data; - }; - - //retreive data from memory - Persistence.prototype.retreiveData = function (type) { - return this.readFunc ? this.readFunc(this.id, type) : false; - }; - - //merge old and new column definitions - Persistence.prototype.mergeDefinition = function (oldCols, newCols) { - var self = this, - output = []; - - // oldCols = oldCols || []; - newCols = newCols || []; - - newCols.forEach(function (column, to) { - - var from = self._findColumn(oldCols, column), - keys; - - if (from) { - - if (self.config.columns === true || self.config.columns == undefined) { - keys = Object.keys(from); - keys.push("width"); - } else { - keys = self.config.columns; - } - - keys.forEach(function (key) { - if (typeof column[key] !== "undefined") { - from[key] = column[key]; - } - }); - - if (from.columns) { - from.columns = self.mergeDefinition(from.columns, column.columns); - } - - output.push(from); - } - }); - - oldCols.forEach(function (column, i) { - var from = self._findColumn(newCols, column); - if (!from) { - if (output.length > i) { - output.splice(i, 0, column); - } else { - output.push(column); - } - } - }); - - return output; - }; - - //find matching columns - 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; - break; - - case "field": - return col.field === subject.field; - break; - - case "object": - return col === subject; - break; - } - }); - }; - - //save data - 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(); - break; - } - - if (this.writeFunc) { - this.writeFunc(this.id, type, data); - } - }; - - //ensure sorters contain no function data - Persistence.prototype.validateSorters = function (data) { - data.forEach(function (item) { - item.column = item.field; - delete item.field; - }); - - return data; - }; - - Persistence.prototype.getGroupConfig = function () { - if (this.config.group) { - if (this.config.group === true || this.config.group.groupBy) { - data.groupBy = this.table.options.groupBy; - } - - if (this.config.group === true || this.config.group.groupStartOpen) { - data.groupStartOpen = this.table.options.groupStartOpen; - } - - if (this.config.group === true || this.config.group.groupHeader) { - data.groupHeader = this.table.options.groupHeader; - } - } - - return data; - }; - - Persistence.prototype.getPageConfig = function () { - var data = {}; - - if (this.config.page) { - if (this.config.page === true || this.config.page.size) { - data.paginationSize = this.table.modules.page.getPageSize(); - } - - if (this.config.page === true || this.config.page.page) { - data.paginationInitialPage = this.table.modules.page.getPage(); - } - } - - return data; - }; - - //parse columns for data to store - Persistence.prototype.parseColumns = function (columns) { - var self = this, - definitions = []; - - columns.forEach(function (column) { - var defStore = {}, - colDef = column.getDefinition(), - keys; - - if (column.isGroup) { - defStore.title = colDef.title; - defStore.columns = self.parseColumns(column.getColumns()); - } else { - defStore.field = column.getField(); - - if (self.config.columns === true || self.config.columns == undefined) { - keys = Object.keys(colDef); - keys.push("width"); - } else { - 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); - }); - - return definitions; - }; - - // read peristence information from storage - Persistence.prototype.readers = { - local: function local(id, type) { - var data = localStorage.getItem(id + "-" + type); - - return data ? JSON.parse(data) : false; - }, - cookie: function cookie(id, type) { - var cookie = document.cookie, - key = id + "-" + type, - cookiePos = cookie.indexOf(key + "="), - end, - data; - - //if cookie exists, decode and load column data into tabulator - if (cookiePos > -1) { - cookie = cookie.substr(cookiePos); - - end = cookie.indexOf(";"); - - if (end > -1) { - cookie = cookie.substr(0, end); - } - - data = cookie.replace(key + "=", ""); - } - - return data ? JSON.parse(data) : false; - } - }; - - //write persistence information to storage - 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() + 10000); - - document.cookie = id + "-" + type + "=" + JSON.stringify(data) + "; expires=" + expireDate.toUTCString(); - } - }; - - Tabulator.prototype.registerModule("persistence", Persistence); - - var Print = function Print(table) { - this.table = table; //hold Tabulator object - this.element = false; - this.manualBlock = false; - }; - - Print.prototype.initialize = function () { - window.addEventListener("beforeprint", this.replaceTable.bind(this)); - window.addEventListener("afterprint", this.cleanup.bind(this)); - }; - - Print.prototype.replaceTable = function () { - if (!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"); - - if (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(typeof config != "undefined" ? config : this.table.options.printConfig, typeof style != "undefined" ? style : this.table.options.printStyled, visible, "print"), - headerContent, - footerContent; - - this.manualBlock = true; - - this.element = document.createElement("div"); - this.element.classList.add("tabulator-print-fullscreen"); - - if (this.table.options.printHeader) { - headerEl.classList.add("tabulator-print-header"); - - headerContent = typeof this.table.options.printHeader == "function" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader; - - if (typeof headerContent == "string") { - headerEl.innerHTML = headerContent; - } else { - headerEl.appendChild(headerContent); - } - - this.element.appendChild(headerEl); - } - - this.element.appendChild(tableEl); - - if (this.table.options.printFooter) { - footerEl.classList.add("tabulator-print-footer"); - - footerContent = typeof this.table.options.printFooter == "function" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter; - - if (typeof footerContent == "string") { - footerEl.innerHTML = footerContent; - } else { - footerEl.appendChild(footerContent); - } - - this.element.appendChild(footerEl); - } - - document.body.classList.add("tabulator-print-fullscreen-hide"); - document.body.appendChild(this.element); - - if (this.table.options.printFormatter) { - this.table.options.printFormatter(this.element, tableEl); - } - - window.print(); - - this.cleanup(); - - window.scrollTo(scrollX, scrollY); - - this.manualBlock = false; - }; - - Tabulator.prototype.registerModule("print", Print); - var ReactiveData = function ReactiveData(table) { - this.table = table; //hold Tabulator object - this.data = false; - this.blocked = false; //block reactivity while performing update - this.origFuncs = {}; // hold original data array functions to allow replacement after data is done with - this.currentVersion = 0; - }; - - ReactiveData.prototype.watchData = function (data) { - var self = this, - pushFunc, - version; - - this.currentVersion++; - - version = this.currentVersion; - - self.unwatchData(); - - self.data = data; - - //override array push function - self.origFuncs.push = data.push; - - Object.defineProperty(self.data, "push", { - enumerable: false, - configurable: true, - value: function value() { - var args = Array.from(arguments); - - if (!self.blocked && version === self.currentVersion) { - args.forEach(function (arg) { - self.table.rowManager.addRowActual(arg, false); - }); - } - - return self.origFuncs.push.apply(data, arguments); - } - }); - - //override array unshift function - self.origFuncs.unshift = data.unshift; - - Object.defineProperty(self.data, "unshift", { - enumerable: false, - configurable: true, - value: function value() { - var args = Array.from(arguments); - - if (!self.blocked && version === self.currentVersion) { - args.forEach(function (arg) { - self.table.rowManager.addRowActual(arg, true); - }); - } - - return self.origFuncs.unshift.apply(data, arguments); - } - }); - - //override array shift function - self.origFuncs.shift = data.shift; - - Object.defineProperty(self.data, "shift", { - enumerable: false, - configurable: true, - value: function value() { - var row; - - if (!self.blocked && version === self.currentVersion) { - if (self.data.length) { - row = self.table.rowManager.getRowFromDataObject(self.data[0]); - - if (row) { - row.deleteActual(); - } - } - } - - return self.origFuncs.shift.call(data); - } - }); - - //override array pop function - self.origFuncs.pop = data.pop; - - Object.defineProperty(self.data, "pop", { - enumerable: false, - configurable: true, - value: function value() { - var row; - if (!self.blocked && version === self.currentVersion) { - if (self.data.length) { - row = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]); - - if (row) { - row.deleteActual(); - } - } - } - return self.origFuncs.pop.call(data); - } - }); - - //override array splice function - self.origFuncs.splice = data.splice; - - Object.defineProperty(self.data, "splice", { - enumerable: false, - configurable: true, - 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) : false, - startRow; - - if (!self.blocked && version === self.currentVersion) { - - //add new rows - if (newRows) { - startRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false; - - if (startRow) { - newRows.forEach(function (rowData) { - self.table.rowManager.addRowActual(rowData, true, startRow, true); - }); - } else { - newRows = newRows.slice().reverse(); - - newRows.forEach(function (rowData) { - self.table.rowManager.addRowActual(rowData, true, false, true); - }); - } - } - - //delete removed rows - if (end !== 0) { - var oldRows = data.slice(start, typeof args[1] === "undefined" ? args[1] : start + end); - - oldRows.forEach(function (rowData, i) { - var row = self.table.rowManager.getRowFromDataObject(rowData); - - if (row) { - row.deleteActual(i !== oldRows.length - 1); - } - }); - } - - if (newRows || end !== 0) { - self.table.rowManager.reRenderInPosition(); - } - } - - return self.origFuncs.splice.apply(data, arguments); - } - }); - }; - - ReactiveData.prototype.unwatchData = function () { - if (this.data !== false) { - for (var key in this.origFuncs) { - Object.defineProperty(this.data, key, { - enumerable: true, - configurable: true, - writable: true, - value: this.origFuncs.key - }); - } - } - }; - - ReactiveData.prototype.watchRow = function (row) { - var self = this, - data = row.getData(); - - this.blocked = true; - - for (var key in data) { - this.watchKey(row, data, key); - } - - this.blocked = false; - }; - - 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) { - value = newValue; - if (!self.blocked && version === self.currentVersion) { - var update = {}; - update[key] = newValue; - row.updateData(update); - } - - if (props.set) { - props.set(newValue); - } - }, - get: function get() { - - if (props.get) { - props.get(); - } - - return 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 = true; - }; - - ReactiveData.prototype.unblock = function () { - this.blocked = false; - }; - - Tabulator.prototype.registerModule("reactiveData", ReactiveData); - - var ResizeColumns = function ResizeColumns(table) { - this.table = table; //hold Tabulator object - this.startColumn = false; - this.startX = false; - this.startWidth = false; - this.handle = null; - this.prevHandle = null; - }; - - ResizeColumns.prototype.initializeColumn = function (type, column, element) { - var self = this, - variableHeight = false, - mode = this.table.options.resizableColumns; - - //set column resize mode - if (type === "header") { - variableHeight = column.definition.formatter == "textarea" || column.definition.variableHeight; - column.modules.resize = { variableHeight: variableHeight }; - } - - if (mode === true || 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(); - - if (nearestColumn && self._checkResizability(nearestColumn)) { - self.startColumn = column; - self._mouseDown(e, nearestColumn, handle); - } - }; - - handle.addEventListener("mousedown", handleDown); - handle.addEventListener("touchstart", handleDown, { passive: true }); - - //reszie column on double click - handle.addEventListener("dblclick", function (e) { - var col = column.getLastColumn(); - - if (col && self._checkResizability(col)) { - e.stopPropagation(); - col.reinitializeWidth(true); - } - }); - - prevHandle.addEventListener("click", function (e) { - e.stopPropagation(); - }); - - var prevHandleDown = function prevHandleDown(e) { - var nearestColumn, colIndex, prevColumn; - - nearestColumn = column.getFirstColumn(); - - if (nearestColumn) { - colIndex = self.table.columnManager.findColumnIndex(nearestColumn); - prevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false; - - if (prevColumn && self._checkResizability(prevColumn)) { - self.startColumn = column; - self._mouseDown(e, prevColumn, prevHandle); - } - } - }; - - prevHandle.addEventListener("mousedown", prevHandleDown); - prevHandle.addEventListener("touchstart", prevHandleDown, { passive: true }); - - //resize column on double click - prevHandle.addEventListener("dblclick", function (e) { - var nearestColumn, colIndex, prevColumn; - - nearestColumn = column.getFirstColumn(); - - if (nearestColumn) { - colIndex = self.table.columnManager.findColumnIndex(nearestColumn); - prevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false; - - if (prevColumn && self._checkResizability(prevColumn)) { - e.stopPropagation(); - prevColumn.reinitializeWidth(true); - } - } - }); - - element.appendChild(handle); - element.appendChild(prevHandle); - } - }; - - ResizeColumns.prototype._checkResizability = function (column) { - return typeof column.definition.resizable != "undefined" ? column.definition.resizable : this.table.options.resizableColumns; - }; - - ResizeColumns.prototype._mouseDown = function (e, column, handle) { - var self = this; - - self.table.element.classList.add("tabulator-block-select"); - - function mouseMove(e) { - // self.table.columnManager.tempScrollBlock(); - - 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(); - } - } - - function mouseUp(e) { - - //block editor from taking action while resizing is taking place - if (self.startColumn.modules.edit) { - self.startColumn.modules.edit.blocked = false; - } - - if (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"); - - if (self.table.options.persistence && self.table.modExists("persistence", true) && self.table.modules.persistence.config.columns) { - self.table.modules.persistence.save("columns"); - } - - self.table.options.columnResized.call(self.table, column.getComponent()); - } - - e.stopPropagation(); //prevent resize from interfereing with movable columns - - //block editor from taking action while resizing is taking place - if (self.startColumn.modules.edit) { - self.startColumn.modules.edit.blocked = true; - } - - self.startX = typeof e.screenX === "undefined" ? 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: true }); - handle.addEventListener("touchend", mouseUp); - }; - - Tabulator.prototype.registerModule("resizeColumns", ResizeColumns); - var ResizeRows = function ResizeRows(table) { - this.table = table; //hold Tabulator object - this.startColumn = false; - this.startY = false; - this.startHeight = false; - this.handle = null; - this.prevHandle = null; - }; - - ResizeRows.prototype.initializeRow = function (row) { - var self = this, - rowEl = row.getElement(); - - var 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: true }); - - prevHandle.addEventListener("click", function (e) { - e.stopPropagation(); - }); - - var prevHandleDown = function prevHandleDown(e) { - var prevRow = self.table.rowManager.prevDisplayRow(row); - - if (prevRow) { - self.startRow = prevRow; - self._mouseDown(e, prevRow, prevHandle); - } - }; - - prevHandle.addEventListener("mousedown", prevHandleDown); - prevHandle.addEventListener("touchstart", prevHandleDown, { passive: true }); - - rowEl.appendChild(handle); - rowEl.appendChild(prevHandle); - }; - - ResizeRows.prototype._mouseDown = function (e, row, handle) { - var self = this; - - self.table.element.classList.add("tabulator-block-select"); - - function mouseMove(e) { - row.setHeight(self.startHeight + ((typeof e.screenY === "undefined" ? e.touches[0].screenY : e.screenY) - self.startY)); - } - - function mouseUp(e) { - - // //block editor from taking action while resizing is taking place - // if(self.startColumn.modules.edit){ - // self.startColumn.modules.edit.blocked = false; - // } - - 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()); - } - - e.stopPropagation(); //prevent resize from interfereing with movable columns - - //block editor from taking action while resizing is taking place - // if(self.startColumn.modules.edit){ - // self.startColumn.modules.edit.blocked = true; - // } - - self.startY = typeof e.screenY === "undefined" ? 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: true }); - handle.addEventListener("touchend", mouseUp); - }; - - Tabulator.prototype.registerModule("resizeRows", ResizeRows); - var ResizeTable = function ResizeTable(table) { - this.table = table; //hold Tabulator object - this.binding = false; - this.observer = false; - this.containerObserver = false; - - this.tableHeight = 0; - this.tableWidth = 0; - this.containerHeight = 0; - this.containerWidth = 0; - - this.autoResize = false; - }; - - ResizeTable.prototype.initialize = function (row) { - var _this74 = this; - - var table = this.table, - tableStyle; - - this.tableHeight = table.element.clientHeight; - this.tableWidth = table.element.clientWidth; - - if (table.element.parentNode) { - this.containerHeight = table.element.parentNode.clientHeight; - this.containerWidth = table.element.parentNode.clientWidth; - } - - if (typeof ResizeObserver !== "undefined" && table.rowManager.getRenderMode() === "virtual") { - - this.autoResize = true; - - this.observer = new ResizeObserver(function (entry) { - if (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) { - - var nodeHeight = Math.floor(entry[0].contentRect.height); - var nodeWidth = Math.floor(entry[0].contentRect.width); - - if (_this74.tableHeight != nodeHeight || _this74.tableWidth != nodeWidth) { - _this74.tableHeight = nodeHeight; - _this74.tableWidth = nodeWidth; - - if (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); - - if (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); - var nodeWidth = Math.floor(entry[0].contentRect.width); - - if (_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); - } - } else { - this.binding = function () { - if (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) { - table.redraw(); - } - }; - - window.addEventListener("resize", this.binding); - } - }; - - ResizeTable.prototype.clearBindings = function (row) { - if (this.binding) { - window.removeEventListener("resize", this.binding); - } - - if (this.observer) { - this.observer.unobserve(this.table.element); - } - - if (this.containerObserver) { - this.containerObserver.unobserve(this.table.element.parentNode); - } - }; - - Tabulator.prototype.registerModule("resizeTable", ResizeTable); - var ResponsiveLayout = function ResponsiveLayout(table) { - this.table = table; //hold Tabulator object - this.columns = []; - this.hiddenColumns = []; - this.mode = ""; - this.index = 0; - this.collapseFormatter = []; - this.collapseStartOpen = true; - this.collapseHandleColumn = false; - }; - - //generate resposive columns list - 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 = []; - - //detemine level of responsivity for each column - this.table.columnManager.columnsByIndex.forEach(function (column, i) { - if (column.modules.responsive) { - if (column.modules.responsive.order && column.modules.responsive.visible) { - column.modules.responsive.index = i; - columns.push(column); - - if (!column.visible && self.mode === "collapse") { - self.hiddenColumns.push(column); - } - } - } - }); - - //sort list by responsivity - columns = columns.reverse(); - columns = columns.sort(function (a, b) { - var diff = b.modules.responsive.order - a.modules.responsive.order; - return diff || b.modules.responsive.index - a.modules.responsive.index; - }); - - this.columns = columns; - - if (this.mode === "collapse") { - this.generateCollapsedContent(); - } - - //assign collapse column - 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 { - _i12 = _iterator.next(); - if (_i12.done) break; - _ref = _i12.value; - } - - var col = _ref; - - if (col.definition.formatter == "responsiveCollapse") { - this.collapseHandleColumn = col; - break; - } - } - - if (this.collapseHandleColumn) { - if (this.hiddenColumns.length) { - this.collapseHandleColumn.show(); - } else { - this.collapseHandleColumn.hide(); - } - } - }; - - //define layout information - ResponsiveLayout.prototype.initializeColumn = function (column) { - var def = column.getDefinition(); - - column.modules.responsive = { order: typeof def.responsive === "undefined" ? 1 : def.responsive, visible: def.visible === false ? false : true }; - }; - - ResponsiveLayout.prototype.initializeRow = function (row) { - var el; - - if (row.type !== "calc") { - el = document.createElement("div"); - el.classList.add("tabulator-responsive-collapse"); - - row.modules.responsiveLayout = { - element: el, - open: this.collapseStartOpen - }; - - if (!this.collapseStartOpen) { - el.style.display = 'none'; - } - } - }; - - ResponsiveLayout.prototype.layoutRow = function (row) { - var rowEl = row.getElement(); - - if (row.modules.responsiveLayout) { - rowEl.appendChild(row.modules.responsiveLayout.element); - this.generateCollapsedRowContent(row); - } - }; - - //update column visibility - ResponsiveLayout.prototype.updateColumnVisibility = function (column, visible) { - var index; - if (column.modules.responsive) { - column.modules.responsive.visible = visible; - this.initialize(); - } - }; - - ResponsiveLayout.prototype.hideColumn = function (column) { - var colCount = this.hiddenColumns.length; - - column.hide(false, true); - - if (this.mode === "collapse") { - this.hiddenColumns.unshift(column); - this.generateCollapsedContent(); - - if (this.collapseHandleColumn && !colCount) { - this.collapseHandleColumn.show(); - } - } - }; - - ResponsiveLayout.prototype.showColumn = function (column) { - var index; - - column.show(false, true); - //set column width to prevent calculation loops on uninitialized columns - column.setWidth(column.getWidth()); - - if (this.mode === "collapse") { - index = this.hiddenColumns.indexOf(column); - - if (index > -1) { - this.hiddenColumns.splice(index, 1); - } - - this.generateCollapsedContent(); - - if (this.collapseHandleColumn && !this.hiddenColumns.length) { - this.collapseHandleColumn.hide(); - } - } - }; - - //redraw columns to fit space - ResponsiveLayout.prototype.update = function () { - var self = this, - working = true; - - while (working) { - - var width = self.table.modules.layout.getMode() == "fitColumns" ? self.table.columnManager.getFlexBaseWidth() : self.table.columnManager.getWidth(); - - var diff = (self.table.options.headerVisible ? self.table.columnManager.element.clientWidth : self.table.element.clientWidth) - width; - - if (diff < 0) { - //table is too wide - var column = self.columns[self.index]; - - if (column) { - self.hideColumn(column); - self.index++; - } else { - working = false; - } - } else { - - //table has spare space - var _column = self.columns[self.index - 1]; - - if (_column) { - if (diff > 0) { - if (diff >= _column.getWidth()) { - self.showColumn(_column); - self.index--; - } else { - working = false; - } - } else { - working = false; - } - } else { - working = false; - } - } - - if (!self.table.rowManager.activeRowsCount) { - self.table.rowManager.renderEmptyScroll(); - } - } - }; - - ResponsiveLayout.prototype.generateCollapsedContent = function () { - var self = this, - rows = this.table.rowManager.getDisplayRows(); - - rows.forEach(function (row) { - self.generateCollapsedRowContent(row); - }); - }; - - ResponsiveLayout.prototype.generateCollapsedRowContent = function (row) { - var el, contents; - - if (row.modules.responsiveLayout) { - el = row.modules.responsiveLayout.element; - - while (el.firstChild) { - el.removeChild(el.firstChild); - }contents = this.collapseFormatter(this.generateCollapsedRowData(row)); - if (contents) { - el.appendChild(contents); - } - } - }; - - ResponsiveLayout.prototype.generateCollapsedRowData = function (row) { - var self = this, - data = row.getData(), - output = [], - mockCellComponent; - - this.hiddenColumns.forEach(function (column) { - var value = column.getFieldValue(data); - - if (column.definition.title && column.field) { - if (column.modules.format && self.table.options.responsiveLayoutCollapseUseFormatters) { - - mockCellComponent = { - value: false, - 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) - }); - } else { - output.push({ - title: column.definition.title, - value: value - }); - } - } - }); - - return output; - }; - - ResponsiveLayout.prototype.formatCollapsedData = function (data) { - var list = document.createElement("table"), - listContents = ""; - - data.forEach(function (item) { - var div = document.createElement("div"); - - if (item.value instanceof Node) { - div.appendChild(item.value); - item.value = div.innerHTML; - } - - listContents += "" + item.title + "" + item.value + ""; - }); - - list.innerHTML = listContents; - - return Object.keys(data).length ? list : ""; - }; - - Tabulator.prototype.registerModule("responsiveLayout", ResponsiveLayout); - - var SelectRow = function SelectRow(table) { - this.table = table; //hold Tabulator object - this.selecting = false; //flag selecting in progress - this.lastClickedRow = false; //last clicked row - this.selectPrev = []; //hold previously selected element for drag drop selection - this.selectedRows = []; //hold selected rows - this.headerCheckboxElement = null; // hold header select element - }; - - SelectRow.prototype.clearSelectionData = function (silent) { - this.selecting = false; - this.lastClickedRow = false; - this.selectPrev = []; - this.selectedRows = []; - - if (!silent) { - this._rowSelectionChanged(); - } - }; - - SelectRow.prototype.initializeRow = function (row) { - var self = this, - element = row.getElement(); - - // trigger end of row selection - var endSelect = function endSelect() { - - setTimeout(function () { - self.selecting = false; - }, 50); - - document.body.removeEventListener("mouseup", endSelect); - }; - - row.modules.select = { selected: false }; - - //set row selection class - if (self.table.options.selectableCheck.call(this.table, row.getComponent())) { - element.classList.add("tabulator-selectable"); - element.classList.remove("tabulator-unselectable"); - - if (self.table.options.selectable && self.table.options.selectable != "highlight") { - if (self.table.options.selectableRangeMode === "click") { - element.addEventListener("click", function (e) { - if (e.shiftKey) { - self.table._clearSelection(); - self.lastClickedRow = self.lastClickedRow || row; - - var lastClickedRowIdx = self.table.rowManager.getDisplayRowIndex(self.lastClickedRow); - var rowIdx = self.table.rowManager.getDisplayRowIndex(row); - - var fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx; - var toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx; - - var rows = self.table.rowManager.getDisplayRows().slice(0); - var toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1); - - if (e.ctrlKey || e.metaKey) { - toggledRows.forEach(function (toggledRow) { - if (toggledRow !== self.lastClickedRow) { - - if (self.table.options.selectable !== true && !self.isRowSelected(row)) { - if (self.selectedRows.length < self.table.options.selectable) { - self.toggleRow(toggledRow); - } - } else { - self.toggleRow(toggledRow); - } - } - }); - self.lastClickedRow = row; - } else { - self.deselectRows(undefined, true); - - if (self.table.options.selectable !== true) { - if (toggledRows.length > self.table.options.selectable) { - toggledRows = toggledRows.slice(0, self.table.options.selectable); - } - } - - self.selectRows(toggledRows); - } - self.table._clearSelection(); - } else if (e.ctrlKey || e.metaKey) { - self.toggleRow(row); - self.lastClickedRow = row; - } else { - self.deselectRows(undefined, true); - self.selectRows(row); - self.lastClickedRow = row; - } - }); - } else { - element.addEventListener("click", function (e) { - if (!self.table.modExists("edit") || !self.table.modules.edit.getCurrentCell()) { - self.table._clearSelection(); - } - - if (!self.selecting) { - self.toggleRow(row); - } - }); - - element.addEventListener("mousedown", function (e) { - if (e.shiftKey) { - self.table._clearSelection(); - - self.selecting = true; - - self.selectPrev = []; - - document.body.addEventListener("mouseup", endSelect); - document.body.addEventListener("keyup", endSelect); - - self.toggleRow(row); - - return false; - } - }); - - element.addEventListener("mouseenter", function (e) { - if (self.selecting) { - self.table._clearSelection(); - self.toggleRow(row); - - if (self.selectPrev[1] == row) { - self.toggleRow(self.selectPrev[0]); - } - } - }); - - element.addEventListener("mouseout", function (e) { - if (self.selecting) { - self.table._clearSelection(); - self.selectPrev.unshift(row); - } - }); - } - } - } else { - element.classList.add("tabulator-unselectable"); - element.classList.remove("tabulator-selectable"); - } - }; - - //toggle row selection - SelectRow.prototype.toggleRow = function (row) { - if (this.table.options.selectableCheck.call(this.table, row.getComponent())) { - if (row.modules.select && row.modules.select.selected) { - this._deselectRow(row); - } else { - this._selectRow(row); - } - } - }; - - //select a number of rows - SelectRow.prototype.selectRows = function (rows) { - var _this75 = this; - - var rowMatch; - - switch (typeof rows === 'undefined' ? 'undefined' : _typeof(rows)) { - case "undefined": - this.table.rowManager.rows.forEach(function (row) { - _this75._selectRow(row, true, true); - }); - - this._rowSelectionChanged(); - break; - - case "string": - - rowMatch = this.table.rowManager.findRow(rows); - - if (rowMatch) { - this._selectRow(rowMatch, true, true); - } else { - this.table.rowManager.getRows(rows).forEach(function (row) { - _this75._selectRow(row, true, true); - }); - } - - this._rowSelectionChanged(); - break; - - default: - if (Array.isArray(rows)) { - rows.forEach(function (row) { - _this75._selectRow(row, true, true); - }); - - this._rowSelectionChanged(); - } else { - this._selectRow(rows, false, true); - } - break; - } - }; - - //select an individual row - SelectRow.prototype._selectRow = function (rowInfo, silent, force) { - var index; - - //handle max row count - if (!isNaN(this.table.options.selectable) && this.table.options.selectable !== true && !force) { - if (this.selectedRows.length >= this.table.options.selectable) { - if (this.table.options.selectableRollingSelection) { - this._deselectRow(this.selectedRows[0]); - } else { - return false; - } - } - } - - var row = this.table.rowManager.findRow(rowInfo); - - if (row) { - if (this.selectedRows.indexOf(row) == -1) { - if (!row.modules.select) { - row.modules.select = {}; - } - - row.modules.select.selected = true; - if (row.modules.select.checkboxEl) { - row.modules.select.checkboxEl.checked = true; - } - row.getElement().classList.add("tabulator-selected"); - - this.selectedRows.push(row); - - if (this.table.options.dataTreeSelectPropagate) { - this.childRowSelection(row, true); - } - - if (!silent) { - this.table.options.rowSelected.call(this.table, row.getComponent()); - } - - this._rowSelectionChanged(silent); - } - } else { - if (!silent) { - console.warn("Selection Error - No such row found, ignoring selection:" + rowInfo); - } - } - }; - - SelectRow.prototype.isRowSelected = function (row) { - return this.selectedRows.indexOf(row) !== -1; - }; - - //deselect a number of rows - SelectRow.prototype.deselectRows = function (rows, silent) { - var self = this, - rowCount; - - if (typeof rows == "undefined") { - - rowCount = self.selectedRows.length; - - for (var _i13 = 0; _i13 < rowCount; _i13++) { - self._deselectRow(self.selectedRows[0], true); - } - - self._rowSelectionChanged(silent); - } else { - if (Array.isArray(rows)) { - rows.forEach(function (row) { - self._deselectRow(row, true); - }); - - self._rowSelectionChanged(silent); - } else { - self._deselectRow(rows, silent); - } - } - }; - - //deselect an individual row - SelectRow.prototype._deselectRow = function (rowInfo, silent) { - var self = this, - row = self.table.rowManager.findRow(rowInfo), - index; - - if (row) { - index = self.selectedRows.findIndex(function (selectedRow) { - return selectedRow == row; - }); - - if (index > -1) { - - if (!row.modules.select) { - row.modules.select = {}; - } - - row.modules.select.selected = false; - if (row.modules.select.checkboxEl) { - row.modules.select.checkboxEl.checked = false; - } - row.getElement().classList.remove("tabulator-selected"); - self.selectedRows.splice(index, 1); - - if (this.table.options.dataTreeSelectPropagate) { - this.childRowSelection(row, false); - } - - if (!silent) { - self.table.options.rowDeselected.call(this.table, row.getComponent()); - } - - self._rowSelectionChanged(silent); - } - } else { - if (!silent) { - console.warn("Deselection Error - No such row found, ignoring selection:" + rowInfo); - } - } - }; - - SelectRow.prototype.getSelectedData = function () { - var data = []; - - this.selectedRows.forEach(function (row) { - data.push(row.getData()); - }); - - return data; - }; - - SelectRow.prototype.getSelectedRows = function () { - - var rows = []; - - this.selectedRows.forEach(function (row) { - rows.push(row.getComponent()); - }); - - return rows; - }; - - SelectRow.prototype._rowSelectionChanged = function (silent) { - if (this.headerCheckboxElement) { - if (this.selectedRows.length === 0) { - this.headerCheckboxElement.checked = false; - this.headerCheckboxElement.indeterminate = false; - } else if (this.table.rowManager.rows.length === this.selectedRows.length) { - this.headerCheckboxElement.checked = true; - this.headerCheckboxElement.indeterminate = false; - } else { - this.headerCheckboxElement.indeterminate = true; - this.headerCheckboxElement.checked = false; - } - } - - if (!silent) { - this.table.options.rowSelectionChanged.call(this.table, this.getSelectedData(), this.getSelectedRows()); - } - }; - - SelectRow.prototype.registerRowSelectCheckbox = function (row, element) { - if (!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 { - _i14 = _iterator2.next(); - if (_i14.done) break; - _ref2 = _i14.value; - } - - var child = _ref2; - - this._selectRow(child, true); - } - } 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 { - _i15 = _iterator3.next(); - if (_i15.done) break; - _ref3 = _i15.value; - } - - var _child = _ref3; - - this._deselectRow(_child, true); - } - } - }; - - Tabulator.prototype.registerModule("selectRow", SelectRow); - - var Sort = function Sort(table) { - this.table = table; //hold Tabulator object - this.sortList = []; //holder current sort - this.changed = false; //has the sort changed since last render - }; - - //initialize column header for sorting - Sort.prototype.initializeColumn = function (column, content) { - var self = this, - sorter = false, - colEl, - arrowEl; - - switch (_typeof(column.definition.sorter)) { - case "string": - if (self.sorters[column.definition.sorter]) { - sorter = self.sorters[column.definition.sorter]; - } else { - console.warn("Sort Error - No such sorter found: ", column.definition.sorter); - } - break; - - case "function": - sorter = column.definition.sorter; - break; - } - - column.modules.sort = { - sorter: sorter, dir: "none", - params: column.definition.sorterParams || {}, - startingDir: column.definition.headerSortStartingDir || "asc", - tristate: typeof column.definition.headerSortTristate !== "undefined" ? column.definition.headerSortTristate : this.table.options.headerSortTristate - }; - - if (typeof column.definition.headerSort === "undefined" ? this.table.options.headerSort !== false : column.definition.headerSort !== false) { - - colEl = column.getElement(); - - colEl.classList.add("tabulator-sortable"); - - arrowEl = document.createElement("div"); - arrowEl.classList.add("tabulator-arrow"); - //create sorter arrow - content.appendChild(arrowEl); - - //sort on click - colEl.addEventListener("click", function (e) { - var dir = "", - sorters = [], - match = false; - - if (column.modules.sort) { - if (column.modules.sort.tristate) { - if (column.modules.sort.dir == "none") { - dir = column.modules.sort.startingDir; - } else { - if (column.modules.sort.dir == column.modules.sort.startingDir) { - dir = column.modules.sort.dir == "asc" ? "desc" : "asc"; - } else { - dir = "none"; - } - } - } else { - switch (column.modules.sort.dir) { - case "asc": - dir = "desc"; - break; - - case "desc": - dir = "asc"; - break; - - default: - dir = column.modules.sort.startingDir; - } - } - - if (self.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) { - sorters = self.getSort(); - - match = sorters.findIndex(function (sorter) { - return sorter.field === column.getField(); - }); - - if (match > -1) { - sorters[match].dir = dir; - - if (match != sorters.length - 1) { - match = sorters.splice(match, 1)[0]; - if (dir != "none") { - sorters.push(match); - } - } - } else { - if (dir != "none") { - sorters.push({ column: column, dir: dir }); - } - } - - //add to existing sort - self.setSort(sorters); - } else { - if (dir == "none") { - self.clear(); - } else { - //sort by column only - self.setSort(column, dir); - } - } - - self.table.rowManager.sorterRefresh(!self.sortList.length); - } - }); - } - }; - - //check if the sorters have changed since last use - Sort.prototype.hasChanged = function () { - var changed = this.changed; - this.changed = false; - return changed; - }; - - //return current sorters - Sort.prototype.getSort = function () { - var self = this, - sorters = []; - - self.sortList.forEach(function (item) { - if (item.column) { - sorters.push({ column: item.column.getComponent(), field: item.column.getField(), dir: item.dir }); - } - }); - - return sorters; - }; - - //change sort list and trigger sort - Sort.prototype.setSort = function (sortList, dir) { - var self = this, - newSortList = []; - - if (!Array.isArray(sortList)) { - sortList = [{ column: sortList, dir: dir }]; - } - - sortList.forEach(function (item) { - var column; - - column = self.table.columnManager.findColumn(item.column); - - if (column) { - item.column = column; - newSortList.push(item); - self.changed = true; - } else { - console.warn("Sort Warning - Sort field does not exist and is being ignored: ", item.column); - } - }); - - self.sortList = newSortList; - - if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.sort) { - this.table.modules.persistence.save("sort"); - } - }; - - //clear sorters - Sort.prototype.clear = function () { - this.setSort([]); - }; - - //find appropriate sorter for column - Sort.prototype.findSorter = function (column) { - var row = this.table.rowManager.activeRows[0], - sorter = "string", - field, - value; - - if (row) { - row = row.getData(); - field = column.getField(); - - if (field) { - - value = column.getFieldValue(row); - - switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) { - case "undefined": - sorter = "string"; - break; - - case "boolean": - sorter = "boolean"; - break; - - default: - if (!isNaN(value) && value !== "") { - sorter = "number"; - } else { - if (value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)) { - sorter = "alphanum"; - } - } - break; - } - } - } - - return this.sorters[sorter]; - }; - - //work through sort list sorting data - Sort.prototype.sort = function (data) { - var self = this, - sortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList, - sortListActual = [], - rowComponents = [], - lastSort; - - if (self.table.options.dataSorting) { - self.table.options.dataSorting.call(self.table, self.getSort()); - } - - self.clearColumnHeaders(); - - if (!self.table.options.ajaxSorting) { - - //build list of valid sorters and trigger column specific callbacks before sort begins - sortList.forEach(function (item, i) { - var sortObj = item.column.modules.sort; - - if (item.column && sortObj) { - - //if no sorter has been defined, take a guess - if (!sortObj.sorter) { - sortObj.sorter = self.findSorter(item.column); - } - - item.params = typeof sortObj.params === "function" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params; - - sortListActual.push(item); - } - - self.setColumnHeader(item.column, item.dir); - }); - - //sort data - if (sortListActual.length) { - self._sortItems(data, sortListActual); - } - } else { - sortList.forEach(function (item, i) { - self.setColumnHeader(item.column, item.dir); - }); - } - - if (self.table.options.dataSorted) { - data.forEach(function (row) { - rowComponents.push(row.getComponent()); - }); - - self.table.options.dataSorted.call(self.table, self.getSort(), rowComponents); - } - }; - - //clear sort arrows on columns - Sort.prototype.clearColumnHeaders = function () { - this.table.columnManager.getRealColumns().forEach(function (column) { - if (column.modules.sort) { - column.modules.sort.dir = "none"; - column.getElement().setAttribute("aria-sort", "none"); - } - }); - }; - - //set the column header sort direction - Sort.prototype.setColumnHeader = function (column, dir) { - column.modules.sort.dir = dir; - column.getElement().setAttribute("aria-sort", dir); - }; - - //sort each item in sort list - Sort.prototype._sortItems = function (data, sortList) { - var _this76 = this; - - var sorterCount = sortList.length - 1; - - data.sort(function (a, b) { - var result; - - for (var i = sorterCount; i >= 0; i--) { - var sortItem = sortList[i]; - - result = _this76._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params); - - if (result !== 0) { - break; - } - } - - return result; - }); - }; - - //process individual rows for a sort function on active data - Sort.prototype._sortRow = function (a, b, column, dir, params) { - var el1Comp, el2Comp, colComp; - - //switch elements depending on search direction - var el1 = dir == "asc" ? a : b; - var el2 = dir == "asc" ? b : a; - - a = column.getFieldValue(el1.getData()); - b = column.getFieldValue(el2.getData()); - - a = typeof a !== "undefined" ? a : ""; - b = typeof b !== "undefined" ? b : ""; - - el1Comp = el1.getComponent(); - el2Comp = el2.getComponent(); - - return column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params); - }; - - //default data sorters - Sort.prototype.sorters = { - - //sort numbers - number: function number(a, b, aRow, bRow, column, dir, params) { - var alignEmptyValues = params.alignEmptyValues; - var decimal = params.decimalSeparator || "."; - var thousand = params.thousandSeparator || ","; - var emptyAlign = 0; - - a = parseFloat(String(a).split(thousand).join("").split(decimal).join(".")); - b = parseFloat(String(b).split(thousand).join("").split(decimal).join(".")); - - //handle non numeric values - if (isNaN(a)) { - emptyAlign = isNaN(b) ? 0 : -1; - } else if (isNaN(b)) { - emptyAlign = 1; - } else { - //compare valid values - return a - b; - } - - //fix empty values in position - if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") { - emptyAlign *= -1; - } - - return emptyAlign; - }, - - //sort strings - string: function string(a, b, aRow, bRow, column, dir, params) { - var alignEmptyValues = params.alignEmptyValues; - var emptyAlign = 0; - var locale; - - //handle empty values - if (!a) { - emptyAlign = !b ? 0 : -1; - } else if (!b) { - emptyAlign = 1; - } else { - //compare valid values - switch (_typeof(params.locale)) { - case "boolean": - if (params.locale) { - locale = this.table.modules.localize.getLocale(); - } - break; - case "string": - locale = params.locale; - break; - } - - return String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale); - } - - //fix empty values in position - if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") { - emptyAlign *= -1; - } - - return emptyAlign; - }, - - //sort date - date: function date(a, b, aRow, bRow, column, dir, params) { - if (!params.format) { - params.format = "DD/MM/YYYY"; - } - - return this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params); - }, - - //sort HH:mm formatted times - time: function time(a, b, aRow, bRow, column, dir, params) { - if (!params.format) { - params.format = "HH:mm"; - } - - return this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params); - }, - - //sort datetime - 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 (typeof moment != "undefined") { - a = moment(a, format); - b = moment(b, format); - - if (!a.isValid()) { - emptyAlign = !b.isValid() ? 0 : -1; - } else if (!b.isValid()) { - emptyAlign = 1; - } else { - //compare valid values - return a - b; - } - - //fix empty values in position - if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") { - emptyAlign *= -1; - } - - return emptyAlign; - } else { - console.error("Sort Error - 'datetime' sorter is dependant on moment.js"); - } - }, - - //sort booleans - boolean: function boolean(a, b, aRow, bRow, column, dir, params) { - var el1 = a === true || a === "true" || a === "True" || a === 1 ? 1 : 0; - var el2 = b === true || b === "true" || b === "True" || b === 1 ? 1 : 0; - - return el1 - el2; - }, - - //sort if element contains any data - array: function array(a, b, aRow, bRow, column, dir, params) { - var el1 = 0; - var el2 = 0; - var type = params.type || "length"; - var alignEmptyValues = params.alignEmptyValues; - var emptyAlign = 0; - - function calc(value) { - - switch (type) { - case "length": - return value.length; - break; - - case "sum": - return value.reduce(function (c, d) { - return c + d; - }); - break; - - case "max": - return Math.max.apply(null, value); - break; - - case "min": - return Math.min.apply(null, value); - break; - - case "avg": - return value.reduce(function (c, d) { - return c + d; - }) / value.length; - break; - } - } - - //handle non array values - if (!Array.isArray(a)) { - alignEmptyValues = !Array.isArray(b) ? 0 : -1; - } else if (!Array.isArray(b)) { - alignEmptyValues = 1; - } else { - - //compare valid values - el1 = a ? calc(a) : 0; - el2 = b ? calc(b) : 0; - - return el1 - el2; - } - - //fix empty values in position - if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") { - emptyAlign *= -1; - } - - return emptyAlign; - }, - - //sort if element contains any data - exists: function exists(a, b, aRow, bRow, column, dir, params) { - var el1 = typeof a == "undefined" ? 0 : 1; - var el2 = typeof b == "undefined" ? 0 : 1; - - return el1 - el2; - }, - - //sort alpha numeric strings - alphanum: function alphanum(as, bs, aRow, bRow, column, dir, params) { - var a, - b, - a1, - b1, - i = 0, - L, - rx = /(\d+)|(\D+)/g, - rd = /\d/; - var alignEmptyValues = params.alignEmptyValues; - var emptyAlign = 0; - - //handle empty values - if (!as && as !== 0) { - emptyAlign = !bs && bs !== 0 ? 0 : -1; - } else if (!bs && bs !== 0) { - emptyAlign = 1; - } else { - - if (isFinite(as) && isFinite(bs)) return as - bs; - a = String(as).toLowerCase(); - b = String(bs).toLowerCase(); - if (a === b) return 0; - if (!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1; - a = a.match(rx); - b = b.match(rx); - L = a.length > b.length ? b.length : a.length; - while (i < L) { - a1 = a[i]; - b1 = b[i++]; - if (a1 !== b1) { - if (isFinite(a1) && isFinite(b1)) { - if (a1.charAt(0) === "0") a1 = "." + a1; - if (b1.charAt(0) === "0") b1 = "." + b1; - return a1 - b1; - } else return a1 > b1 ? 1 : -1; - } - } - - return a.length > b.length; - } - - //fix empty values in position - if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") { - emptyAlign *= -1; - } - - return emptyAlign; - } - }; - - Tabulator.prototype.registerModule("sort", Sort); - - var Validate = function Validate(table) { - this.table = table; - this.invalidCells = []; - }; - - //validate - Validate.prototype.initializeColumn = function (column) { - var self = this, - config = [], - validator; - - if (column.definition.validator) { - - if (Array.isArray(column.definition.validator)) { - column.definition.validator.forEach(function (item) { - validator = self._extractValidator(item); - - if (validator) { - config.push(validator); - } - }); - } else { - validator = this._extractValidator(column.definition.validator); - - if (validator) { - config.push(validator); - } - } - - column.modules.validate = config.length ? config : false; - } - }; - - Validate.prototype._extractValidator = function (value) { - var type, params, pos; - - switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) { - case "string": - pos = value.indexOf(':'); - - if (pos > -1) { - type = value.substring(0, pos); - params = value.substring(pos + 1); - } else { - type = value; - } - - return this._buildValidator(type, params); - break; - - case "function": - return this._buildValidator(value); - break; - - case "object": - return this._buildValidator(value.type, value.parameters); - break; - } - }; - - Validate.prototype._buildValidator = function (type, params) { - - var func = typeof type == "function" ? type : this.validators[type]; - - if (!func) { - console.warn("Validator Setup Error - No matching validator found:", type); - return false; - } else { - return { - type: typeof type == "function" ? "function" : type, - func: func, - params: params - }; - } - }; - - Validate.prototype.validate = function (validators, cell, value) { - var self = this, - valid = [], - invalidIndex = this.invalidCells.indexOf(cell); - - if (validators) { - validators.forEach(function (item) { - if (!item.func.call(self, cell.getComponent(), value, item.params)) { - valid.push({ - type: item.type, - parameters: item.params - }); - } - }); - } - - valid = valid.length ? valid : true; - - if (!cell.modules.validate) { - cell.modules.validate = {}; - } - - if (valid === true) { - cell.modules.validate.invalid = false; - cell.getElement().classList.remove("tabulator-validation-fail"); - - if (invalidIndex > -1) { - this.invalidCells.splice(invalidIndex, 1); - } - } else { - cell.modules.validate.invalid = true; - - if (this.table.options.validationMode !== "manual") { - cell.getElement().classList.add("tabulator-validation-fail"); - } - - if (invalidIndex == -1) { - this.invalidCells.push(cell); - } - } - - return valid; - }; - - Validate.prototype.getInvalidCells = function () { - var output = []; - - this.invalidCells.forEach(function (cell) { - output.push(cell.getComponent()); - }); - - return output; - }; - - Validate.prototype.clearValidation = function (cell) { - var invalidIndex; - - if (cell.modules.validate && cell.modules.validate.invalid) { - - cell.element.classList.remove("tabulator-validation-fail"); - cell.modules.validate.invalid = false; - - invalidIndex = this.invalidCells.indexOf(cell); - - if (invalidIndex > -1) { - this.invalidCells.splice(invalidIndex, 1); - } - } - }; - - Validate.prototype.validators = { - - //is integer - integer: function integer(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - value = Number(value); - return typeof value === 'number' && isFinite(value) && Math.floor(value) === value; - }, - - //is float - float: function float(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - value = Number(value); - return typeof value === 'number' && isFinite(value) && value % 1 !== 0; - }, - - //must be a number - numeric: function numeric(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return !isNaN(value); - }, - - //must be a string - string: function string(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return isNaN(value); - }, - - //maximum value - max: function max(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return parseFloat(value) <= parameters; - }, - - //minimum value - min: function min(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return parseFloat(value) >= parameters; - }, - - //starts with value - starts: function starts(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return String(value).toLowerCase().startsWith(String(parameters).toLowerCase()); - }, - - //ends with value - ends: function ends(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return String(value).toLowerCase().endsWith(String(parameters).toLowerCase()); - }, - - //minimum string length - minLength: function minLength(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return String(value).length >= parameters; - }, - - //maximum string length - maxLength: function maxLength(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return String(value).length <= parameters; - }, - - //in provided value list - in: function _in(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - if (typeof parameters == "string") { - parameters = parameters.split("|"); - } - - return value === "" || parameters.indexOf(value) > -1; - }, - - //must match provided regex - regex: function regex(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - var reg = new RegExp(parameters); - - return reg.test(value); - }, - - //value must be unique in this column - unique: function unique(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - var unique = true; - - var cellData = cell.getData(); - var column = cell.getColumn()._getSelf(); - - this.table.rowManager.rows.forEach(function (row) { - var data = row.getData(); - - if (data !== cellData) { - if (value == column.getFieldValue(data)) { - unique = false; - } - } - }); - - return unique; - }, - - //must have a value - required: function required(cell, value, parameters) { - return value !== "" && value !== null && typeof value !== "undefined"; - } - }; - - Tabulator.prototype.registerModule("validate", Validate); - - return Tabulator; -}); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/tabulator.min.js b/website/appphp/static/vendors/tabulator/js/tabulator.min.js deleted file mode 100644 index 74f47800..00000000 --- a/website/appphp/static/vendors/tabulator/js/tabulator.min.js +++ /dev/null @@ -1,12 +0,0 @@ -/* 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/appphp/static/vendors/tabulator/js/tabulator_core.js b/website/appphp/static/vendors/tabulator/js/tabulator_core.js deleted file mode 100644 index 1c4797a4..00000000 --- a/website/appphp/static/vendors/tabulator/js/tabulator_core.js +++ /dev/null @@ -1,8906 +0,0 @@ -/* Tabulator v4.7.0 (c) Oliver Folkerd */ - -'use strict'; - -// https://tc39.github.io/ecma262/#sec-array.prototype.findIndex - -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; }; - -if (!Array.prototype.findIndex) { - - Object.defineProperty(Array.prototype, 'findIndex', { - - value: function value(predicate) { - - // 1. Let O be ? ToObject(this value). - - if (this == null) { - - throw new TypeError('"this" is null or not defined'); - } - - var o = Object(this); - - // 2. Let len be ? ToLength(? Get(O, "length")). - - var len = o.length >>> 0; - - // 3. If IsCallable(predicate) is false, throw a TypeError exception. - - if (typeof predicate !== 'function') { - - throw new TypeError('predicate must be a function'); - } - - // 4. If thisArg was supplied, let T be thisArg; else let T be undefined. - - var thisArg = arguments[1]; - - // 5. Let k be 0. - - var k = 0; - - // 6. Repeat, while k < len - - while (k < len) { - - // a. Let Pk be ! ToString(k). - - // b. Let kValue be ? Get(O, Pk). - - // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)). - - // d. If testResult is true, return k. - - var kValue = o[k]; - - if (predicate.call(thisArg, kValue, k, o)) { - - return k; - } - - // e. Increase k by 1. - - k++; - } - - // 7. Return -1. - - return -1; - } - - }); -} - -// https://tc39.github.io/ecma262/#sec-array.prototype.find - -if (!Array.prototype.find) { - - Object.defineProperty(Array.prototype, 'find', { - - value: function value(predicate) { - - // 1. Let O be ? ToObject(this value). - - if (this == null) { - - throw new TypeError('"this" is null or not defined'); - } - - var o = Object(this); - - // 2. Let len be ? ToLength(? Get(O, "length")). - - var len = o.length >>> 0; - - // 3. If IsCallable(predicate) is false, throw a TypeError exception. - - if (typeof predicate !== 'function') { - - throw new TypeError('predicate must be a function'); - } - - // 4. If thisArg was supplied, let T be thisArg; else let T be undefined. - - var thisArg = arguments[1]; - - // 5. Let k be 0. - - var k = 0; - - // 6. Repeat, while k < len - - while (k < len) { - - // a. Let Pk be ! ToString(k). - - // b. Let kValue be ? Get(O, Pk). - - // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)). - - // d. If testResult is true, return kValue. - - var kValue = o[k]; - - if (predicate.call(thisArg, kValue, k, o)) { - - return kValue; - } - - // e. Increase k by 1. - - k++; - } - - // 7. Return undefined. - - return undefined; - } - - }); -} - -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill - -if (!String.prototype.includes) { - - String.prototype.includes = function (search, start) { - - 'use strict'; - - if (search instanceof RegExp) { - - throw TypeError('first argument must not be a RegExp'); - } - - if (start === undefined) { - start = 0; - } - - return this.indexOf(search, start) !== -1; - }; -} - -// https://tc39.github.io/ecma262/#sec-array.prototype.includes - -if (!Array.prototype.includes) { - - Object.defineProperty(Array.prototype, 'includes', { - - value: function value(searchElement, fromIndex) { - - if (this == null) { - - throw new TypeError('"this" is null or not defined'); - } - - // 1. Let O be ? ToObject(this value). - - var o = Object(this); - - // 2. Let len be ? ToLength(? Get(O, "length")). - - var len = o.length >>> 0; - - // 3. If len is 0, return false. - - if (len === 0) { - - return false; - } - - // 4. Let n be ? ToInteger(fromIndex). - - // (If fromIndex is undefined, this step produces the value 0.) - - var n = fromIndex | 0; - - // 5. If n ≥ 0, then - - // a. Let k be n. - - // 6. Else n < 0, - - // a. Let k be len + n. - - // b. If k < 0, let k be 0. - - var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); - - function sameValueZero(x, y) { - - return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y); - } - - // 7. Repeat, while k < len - - while (k < len) { - - // a. Let elementK be the result of ? Get(O, ! ToString(k)). - - // b. If SameValueZero(searchElement, elementK) is true, return true. - - if (sameValueZero(o[k], searchElement)) { - - return true; - } - - // c. Increase k by 1. - - k++; - } - - // 8. Return false - - return false; - } - - }); -} - -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill - -if (typeof Object.assign !== 'function') { - - // Must be writable: true, enumerable: false, configurable: true - - Object.defineProperty(Object, "assign", { - - value: function assign(target, varArgs) { - // .length of function is 2 - - 'use strict'; - - if (target === null || target === undefined) { - - throw new TypeError('Cannot convert undefined or null to object'); - } - - var to = Object(target); - - for (var index = 1; index < arguments.length; index++) { - - var nextSource = arguments[index]; - - if (nextSource !== null && nextSource !== undefined) { - - for (var nextKey in nextSource) { - - // Avoid bugs when hasOwnProperty is shadowed - - if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { - - to[nextKey] = nextSource[nextKey]; - } - } - } - } - - return to; - }, - - writable: true, - - configurable: true - - }); -} - -var ColumnManager = function ColumnManager(table) { - - this.table = table; //hold parent table - - this.blockHozScrollEvent = false; - - this.headersElement = this.createHeadersElement(); - - this.element = this.createHeaderElement(); //containing element - - this.rowManager = null; //hold row manager object - - this.columns = []; // column definition object - - this.columnsByIndex = []; //columns by index - - this.columnsByField = {}; //columns by field - - this.scrollLeft = 0; - - this.element.insertBefore(this.headersElement, this.element.firstChild); -}; - -////////////// Setup Functions ///////////////// - - -ColumnManager.prototype.createHeadersElement = function () { - - var el = document.createElement("div"); - - el.classList.add("tabulator-headers"); - - return el; -}; - -ColumnManager.prototype.createHeaderElement = function () { - - var el = document.createElement("div"); - - el.classList.add("tabulator-header"); - - if (!this.table.options.headerVisible) { - - el.classList.add("tabulator-header-hidden"); - } - - return el; -}; - -ColumnManager.prototype.initialize = function () { - - var self = this; - - //scroll body along with header - - // self.element.addEventListener("scroll", function(e){ - - // if(!self.blockHozScrollEvent){ - - // self.table.rowManager.scrollHorizontal(self.element.scrollLeft); - - // } - - // }); -}; - -//link to row manager - -ColumnManager.prototype.setRowManager = function (manager) { - - this.rowManager = manager; -}; - -//return containing element - -ColumnManager.prototype.getElement = function () { - - return this.element; -}; - -//return header containing element - -ColumnManager.prototype.getHeadersElement = function () { - - return this.headersElement; -}; - -// ColumnManager.prototype.tempScrollBlock = function(){ - -// clearTimeout(this.blockHozScrollEvent); - -// this.blockHozScrollEvent = setTimeout(() => {this.blockHozScrollEvent = false;}, 50); - -// } - - -//scroll horizontally to match table body - -ColumnManager.prototype.scrollHorizontal = function (left) { - - var hozAdjust = 0, - scrollWidth = this.element.scrollWidth - this.table.element.clientWidth; - - // this.tempScrollBlock(); - - this.element.scrollLeft = left; - - //adjust for vertical scrollbar moving table when present - - if (left > scrollWidth) { - - hozAdjust = left - scrollWidth; - - this.element.style.marginLeft = -hozAdjust + "px"; - } else { - - this.element.style.marginLeft = 0; - } - - //keep frozen columns fixed in position - - //this._calcFrozenColumnsPos(hozAdjust + 3); - - - this.scrollLeft = left; - - if (this.table.modExists("frozenColumns")) { - - this.table.modules.frozenColumns.scrollHorizontal(); - } -}; - -///////////// Column Setup Functions ///////////// - - -ColumnManager.prototype.generateColumnsFromRowData = function (data) { - - var cols = [], - row, - sorter; - - if (data && data.length) { - - row = data[0]; - - for (var key in row) { - - var col = { - - field: key, - - title: key - - }; - - var value = row[key]; - - switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) { - - case "undefined": - - sorter = "string"; - - break; - - case "boolean": - - sorter = "boolean"; - - break; - - case "object": - - if (Array.isArray(value)) { - - sorter = "array"; - } else { - - sorter = "string"; - } - - break; - - default: - - if (!isNaN(value) && value !== "") { - - sorter = "number"; - } else { - - if (value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)) { - - sorter = "alphanum"; - } else { - - sorter = "string"; - } - } - - break; - - } - - col.sorter = sorter; - - cols.push(col); - } - - this.table.options.columns = cols; - - this.setColumns(this.table.options.columns); - } -}; - -ColumnManager.prototype.setColumns = function (cols, row) { - - var self = this; - - while (self.headersElement.firstChild) { - self.headersElement.removeChild(self.headersElement.firstChild); - }self.columns = []; - - self.columnsByIndex = []; - - self.columnsByField = {}; - - //reset frozen columns - - if (self.table.modExists("frozenColumns")) { - - self.table.modules.frozenColumns.reset(); - } - - cols.forEach(function (def, i) { - - self._addColumn(def); - }); - - self._reIndexColumns(); - - if (self.table.options.responsiveLayout && self.table.modExists("responsiveLayout", true)) { - - self.table.modules.responsiveLayout.initialize(); - } - - self.redraw(true); -}; - -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()); - - var nextEl = nextToColumn.getElement(); - - if (before) { - - this.columns.splice(parentIndex, 0, column); - - nextEl.parentNode.insertBefore(colEl, nextEl); - } else { - - this.columns.splice(parentIndex + 1, 0, column); - - nextEl.parentNode.insertBefore(colEl, nextEl.nextSibling); - } - } else { - - if (before) { - - this.columns.unshift(column); - - this.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild); - } else { - - this.columns.push(column); - - this.headersElement.appendChild(column.getElement()); - } - - column.columnRendered(); - } - - return column; -}; - -ColumnManager.prototype.registerColumnField = function (col) { - - if (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(); - }); -}; - -//ensure column headers take up the correct amount of space in column groups - -ColumnManager.prototype._verticalAlignHeaders = function () { - - var self = this, - minHeight = 0; - - self.columns.forEach(function (column) { - - var height; - - column.clearVerticalAlign(); - - height = column.getHeight(); - - if (height > minHeight) { - - minHeight = height; - } - }); - - self.columns.forEach(function (column) { - - column.verticalAlign(self.table.options.columnHeaderVertAlign, minHeight); - }); - - self.rowManager.adjustTableSize(); -}; - -//////////////// Column Details ///////////////// - - -ColumnManager.prototype.findColumn = function (subject) { - - var self = this; - - if ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == "object") { - - if (subject instanceof Column) { - - //subject is column element - - return subject; - } else if (subject instanceof ColumnComponent) { - - //subject is public column component - - return subject._getSelf() || false; - } else if (typeof HTMLElement !== "undefined" && subject instanceof HTMLElement) { - - //subject is a HTML element of the column header - - var match = self.columns.find(function (column) { - - return column.element === subject; - }); - - return match || false; - } - } else { - - //subject should be treated as the field name of the column - - return this.columnsByField[subject] || false; - } - - //catch all for any other type of input - - - return false; -}; - -ColumnManager.prototype.getColumnByField = function (field) { - - return this.columnsByField[field]; -}; - -ColumnManager.prototype.getColumnsByFieldRoot = function (root) { - var _this = this; - - var matches = []; - - Object.keys(this.columnsByField).forEach(function (field) { - - var fieldRoot = field.split(".")[0]; - - if (fieldRoot === root) { - - matches.push(_this.columnsByField[field]); - } - }); - - return matches; -}; - -ColumnManager.prototype.getColumnByIndex = function (index) { - - return this.columnsByIndex[index]; -}; - -ColumnManager.prototype.getFirstVisibileColumn = function (index) { - - var index = this.columnsByIndex.findIndex(function (col) { - - return col.visible; - }); - - return index > -1 ? this.columnsByIndex[index] : false; -}; - -ColumnManager.prototype.getColumns = function () { - - return this.columns; -}; - -ColumnManager.prototype.findColumnIndex = function (column) { - - return this.columnsByIndex.findIndex(function (col) { - - return column === col; - }); -}; - -//return all columns that are not groups - -ColumnManager.prototype.getRealColumns = function () { - - return this.columnsByIndex; -}; - -//travers across columns and call action - -ColumnManager.prototype.traverse = function (callback) { - - var self = this; - - self.columnsByIndex.forEach(function (column, i) { - - callback(column, i); - }); -}; - -//get defintions of actual columns - -ColumnManager.prototype.getDefinitions = function (active) { - - var self = this, - output = []; - - self.columnsByIndex.forEach(function (column) { - - if (!active || active && column.visible) { - - output.push(column.getDefinition()); - } - }); - - return output; -}; - -//get full nested definition tree - -ColumnManager.prototype.getDefinitionTree = function () { - - var self = this, - output = []; - - self.columns.forEach(function (column) { - - output.push(column.getDefinition(true)); - }); - - return output; -}; - -ColumnManager.prototype.getComponents = function (structured) { - - var self = this, - output = [], - columns = structured ? self.columns : self.columnsByIndex; - - columns.forEach(function (column) { - - output.push(column.getComponent()); - }); - - return output; -}; - -ColumnManager.prototype.getWidth = function () { - - var width = 0; - - this.columnsByIndex.forEach(function (column) { - - if (column.visible) { - - width += column.getWidth(); - } - }); - - return width; -}; - -ColumnManager.prototype.moveColumn = function (from, to, after) { - - this.moveColumnActual(from, to, after); - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.initialize(); - } - - if (this.table.modExists("columnCalcs")) { - - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } - - to.element.parentNode.insertBefore(from.element, to.element); - - if (after) { - - to.element.parentNode.insertBefore(to.element, from.element); - } - - this._verticalAlignHeaders(); - - this.table.rowManager.reinitialize(); -}; - -ColumnManager.prototype.moveColumnActual = function (from, to, after) { - - if (from.parent.isGroup) { - - this._moveColumnInArray(from.parent.columns, from, to, after); - } else { - - this._moveColumnInArray(this.columns, from, to, after); - } - - this._moveColumnInArray(this.columnsByIndex, from, to, after, true); - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.initialize(); - } - - if (this.table.options.columnMoved) { - - this.table.options.columnMoved.call(this.table, from.getComponent(), this.table.columnManager.getComponents()); - } - - if (this.table.options.persistence && this.table.modExists("persistence", true) && 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; - - if (fromIndex > -1) { - - columns.splice(fromIndex, 1); - - toIndex = columns.indexOf(to); - - if (toIndex > -1) { - - if (after) { - - toIndex = toIndex + 1; - } - } else { - - toIndex = fromIndex; - } - - columns.splice(toIndex, 0, from); - - if (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; - - var left = 0, - offset = 0, - adjust = 0, - colEl = column.getElement(); - - return new Promise(function (resolve, reject) { - - if (typeof position === "undefined") { - - position = _this2.table.options.scrollToColumnPosition; - } - - if (typeof ifVisible === "undefined") { - - ifVisible = _this2.table.options.scrollToColumnIfVisible; - } - - if (column.visible) { - - //align to correct position - - switch (position) { - - case "middle": - - case "center": - - adjust = -_this2.element.clientWidth / 2; - - break; - - case "right": - - adjust = colEl.clientWidth - _this2.headersElement.clientWidth; - - break; - - } - - //check column visibility - - if (!ifVisible) { - - offset = colEl.offsetLeft; - - if (offset > 0 && offset + colEl.offsetWidth < _this2.element.clientWidth) { - - return false; - } - } - - //calculate scroll position - - 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"); - } - }); -}; - -//////////////// Cell Management ///////////////// - - -ColumnManager.prototype.generateCells = function (row) { - - var self = this; - - var cells = []; - - self.columnsByIndex.forEach(function (column) { - - cells.push(column.generateCell(row)); - }); - - return cells; -}; - -//////////////// Column Management ///////////////// - - -ColumnManager.prototype.getFlexBaseWidth = function () { - - var self = this, - totalWidth = self.table.element.clientWidth, - //table element width - - fixedWidth = 0; - - //adjust for vertical scrollbar if present - - if (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; - - if (column.visible) { - - width = column.definition.width || 0; - - minWidth = typeof column.minWidth == "undefined" ? self.table.options.columnMinWidth : parseInt(column.minWidth); - - if (typeof width == "string") { - - if (width.indexOf("%") > -1) { - - colWidth = totalWidth / 100 * parseInt(width); - } else { - - colWidth = parseInt(width); - } - } else { - - colWidth = width; - } - - fixedWidth += colWidth > minWidth ? colWidth : minWidth; - } - }); - - return 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(); - - if (_this3.table.options.responsiveLayout && _this3.table.modExists("responsiveLayout", true)) { - - _this3.table.modules.responsiveLayout.initialize(); - } - - if (_this3.table.modExists("columnCalcs")) { - - _this3.table.modules.columnCalcs.recalc(_this3.table.rowManager.activeRows); - } - - _this3.redraw(); - - if (_this3.table.modules.layout.getMode() != "fitColumns") { - - column.reinitializeWidth(); - } - - _this3._verticalAlignHeaders(); - - _this3.table.rowManager.reinitialize(); - - resolve(column); - }); -}; - -//remove column from system - -ColumnManager.prototype.deregisterColumn = function (column) { - - var field = column.getField(), - index; - - //remove from field list - - if (field) { - - delete this.columnsByField[field]; - } - - //remove from index list - - index = this.columnsByIndex.indexOf(column); - - if (index > -1) { - - this.columnsByIndex.splice(index, 1); - } - - //remove from column list - - index = this.columns.indexOf(column); - - if (index > -1) { - - this.columns.splice(index, 1); - } - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.initialize(); - } - - this.redraw(); -}; - -//redraw columns - -ColumnManager.prototype.redraw = function (force) { - - if (force) { - - if (Tabulator.prototype.helpers.elVisible(this.element)) { - - this._verticalAlignHeaders(); - } - - this.table.rowManager.resetScroll(); - - this.table.rowManager.reinitialize(); - } - - if (["fitColumns", "fitDataStretch"].indexOf(this.table.modules.layout.getMode()) > -1) { - - this.table.modules.layout.layout(); - } else { - - if (force) { - - this.table.modules.layout.layout(); - } else { - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.update(); - } - } - } - - if (this.table.modExists("frozenColumns")) { - - this.table.modules.frozenColumns.layout(); - } - - if (this.table.modExists("columnCalcs")) { - - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } - - if (force) { - - if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) { - - this.table.modules.persistence.save("columns"); - } - - if (this.table.modExists("columnCalcs")) { - - this.table.modules.columnCalcs.redraw(); - } - } - - this.table.footerManager.redraw(); -}; - -//public column object -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 = []; - - this._column.cells.forEach(function (cell) { - cells.push(cell.getComponent()); - }); - - return cells; -}; - -ColumnComponent.prototype.getVisibility = function () { - console.warn("getVisibility function is deprecated, you should now use the isVisible function"); - return this._column.visible; -}; - -ColumnComponent.prototype.isVisible = function () { - return this._column.visible; -}; - -ColumnComponent.prototype.show = function () { - if (this._column.isGroup) { - this._column.columns.forEach(function (column) { - column.show(); - }); - } else { - this._column.show(); - } -}; - -ColumnComponent.prototype.hide = function () { - if (this._column.isGroup) { - this._column.columns.forEach(function (column) { - column.hide(); - }); - } else { - this._column.hide(); - } -}; - -ColumnComponent.prototype.toggle = function () { - if (this._column.visible) { - this.hide(); - } else { - this.show(); - } -}; - -ColumnComponent.prototype.delete = function () { - return this._column.delete(); -}; - -ColumnComponent.prototype.getSubColumns = function () { - var output = []; - - if (this._column.columns.length) { - this._column.columns.forEach(function (column) { - output.push(column.getComponent()); - }); - } - - return output; -}; - -ColumnComponent.prototype.getParentColumn = function () { - return this._column.parent instanceof Column ? this._column.parent.getComponent() : false; -}; - -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 () { - if (this._column.table.modExists("filter", true)) { - this._column.table.modules.filter.setHeaderFilterFocus(this._column); - } -}; - -ColumnComponent.prototype.reloadHeaderFilter = function () { - if (this._column.table.modExists("filter", true)) { - this._column.table.modules.filter.reloadHeaderFilter(this._column); - } -}; - -ColumnComponent.prototype.getHeaderFilterValue = function () { - if (this._column.table.modExists("filter", true)) { - return this._column.table.modules.filter.getHeaderFilterValue(this._column); - } -}; - -ColumnComponent.prototype.setHeaderFilterValue = function (value) { - if (this._column.table.modExists("filter", true)) { - this._column.table.modules.filter.setHeaderFilterValue(this._column, value); - } -}; - -ColumnComponent.prototype.move = function (to, after) { - var toColumn = this._column.table.columnManager.findColumn(to); - - if (toColumn) { - this._column.table.columnManager.moveColumn(this._column, toColumn, after); - } else { - console.warn("Move Error - No matching column found:", toColumn); - } -}; - -ColumnComponent.prototype.getNextColumn = function () { - var nextCol = this._column.nextColumn(); - - return nextCol ? nextCol.getComponent() : false; -}; - -ColumnComponent.prototype.getPrevColumn = function () { - var prevCol = this._column.prevColumn(); - - return prevCol ? prevCol.getComponent() : false; -}; - -ColumnComponent.prototype.updateDefinition = function (updates) { - return this._column.updateDefinition(updates); -}; - -ColumnComponent.prototype.getWidth = function () { - return this._column.getWidth(); -}; - -ColumnComponent.prototype.setWidth = function (width) { - if (width === true) { - return this._column.reinitializeWidth(true); - } else { - return 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; //column definition - this.parent = parent; //hold parent object - this.type = "column"; //type of element - this.columns = []; //child columns - this.cells = []; //cells bound to this column - this.element = this.createElement(); //column header element - this.contentElement = false; - this.titleElement = false; - this.groupElement = this.createGroupElement(); //column group holder element - this.isGroup = false; - this.tooltip = false; //hold column tooltip - this.hozAlign = ""; //horizontal text alignment - this.vertAlign = ""; //vert text alignment - - //multi dimensional filed handling - this.field = ""; - this.fieldStructure = ""; - this.getFieldValue = ""; - this.setFieldValue = ""; - - this.titleFormatterRendered = false; - - this.setField(this.definition.field); - - if (this.table.options.invalidOptionWarnings) { - this.checkDefinition(); - } - - this.modules = {}; //hold module variables; - - this.cellEvents = { - cellClick: false, - cellDblClick: false, - cellContext: false, - cellTap: false, - cellDblTap: false, - cellTapHold: false, - cellMouseEnter: false, - cellMouseLeave: false, - cellMouseOver: false, - cellMouseOut: false, - cellMouseMove: false - }; - - this.width = null; //column width - this.widthStyled = ""; //column width prestyled to improve render efficiency - this.minWidth = null; //column minimum width - this.minWidthStyled = ""; //column minimum prestyled to improve render efficiency - this.widthFixed = false; //user has specified a width for this column - - this.visible = true; //default visible state - - this.component = null; - - this._mapDepricatedFunctionality(); - - //initialize column - if (def.columns) { - - this.isGroup = true; - - def.columns.forEach(function (def, i) { - var newCol = new Column(def, self); - self.attachColumn(newCol); - }); - - self.checkColumnVisibility(); - } else { - parent.registerColumnField(this); - } - - if (def.rowHandle && this.table.options.movableRows !== false && this.table.modExists("moveRow")) { - this.table.modules.moveRow.setHandle(true); - } - - this._buildHeader(); - - this.bindModuleColumns(); -}; - -Column.prototype.createElement = function () { - var el = document.createElement("div"); - - el.classList.add("tabulator-col"); - el.setAttribute("role", "columnheader"); - el.setAttribute("aria-sort", "none"); - - return el; -}; - -Column.prototype.createGroupElement = function () { - var el = document.createElement("div"); - - el.classList.add("tabulator-col-group-cols"); - - return el; -}; - -Column.prototype.checkDefinition = function () { - var _this4 = this; - - Object.keys(this.definition).forEach(function (key) { - if (_this4.defaultOptionList.indexOf(key) === -1) { - 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; -}; - -//register column position with column manager -Column.prototype.registerColumnPosition = function (column) { - this.parent.registerColumnPosition(column); -}; - -//register column position with column manager -Column.prototype.registerColumnField = function (column) { - this.parent.registerColumnField(column); -}; - -//trigger position registration -Column.prototype.reRegisterPosition = function () { - if (this.isGroup) { - this.columns.forEach(function (column) { - column.reRegisterPosition(); - }); - } else { - this.registerColumnPosition(this); - } -}; - -Column.prototype._mapDepricatedFunctionality = function () { - if (typeof this.definition.hideInHtml !== "undefined") { - this.definition.htmlOutput = !this.definition.hideInHtml; - console.warn("hideInHtml column definition property is deprecated, you should now use htmlOutput"); - } - - if (typeof this.definition.align !== "undefined") { - this.definition.hozAlign = this.definition.align; - console.warn("align column definition property is deprecated, you should now use hozAlign"); - } - - if (typeof this.definition.downloadTitle !== "undefined") { - 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; - - //set header tooltips - var tooltip = def.headerTooltip || def.tooltip === false ? def.headerTooltip : self.table.options.tooltipsHeader; - - if (tooltip) { - if (tooltip === true) { - if (def.field) { - self.table.modules.localize.bind("columns|" + def.field, function (value) { - self.element.setAttribute("title", value || def.title); - }); - } else { - self.element.setAttribute("title", def.title); - } - } else { - if (typeof tooltip == "function") { - tooltip = tooltip(self.getComponent()); - - if (tooltip === false) { - tooltip = ""; - } - } - - self.element.setAttribute("title", tooltip); - } - } else { - self.element.setAttribute("title", ""); - } -}; - -//build header element -Column.prototype._buildHeader = function () { - var self = this, - def = self.definition; - - while (self.element.firstChild) { - self.element.removeChild(self.element.firstChild); - }if (def.headerVertical) { - self.element.classList.add("tabulator-col-vertical"); - - if (def.headerVertical === "flip") { - self.element.classList.add("tabulator-col-vertical-flip"); - } - } - - self.contentElement = self._bindEvents(); - - self.contentElement = self._buildColumnHeaderContent(); - - self.element.appendChild(self.contentElement); - - if (self.isGroup) { - self._buildGroupHeader(); - } else { - self._buildColumnHeader(); - } - - self.setTooltip(); - - //set resizable handles - if (self.table.options.resizableColumns && self.table.modExists("resizeColumns")) { - self.table.modules.resizeColumns.initializeColumn("header", self, self.element); - } - - //set resizable handles - if (def.headerFilter && self.table.modExists("filter") && self.table.modExists("edit")) { - if (typeof def.headerFilterPlaceholder !== "undefined" && def.field) { - self.table.modules.localize.setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder); - } - - self.table.modules.filter.initializeColumn(self); - } - - //set resizable handles - if (self.table.modExists("frozenColumns")) { - self.table.modules.frozenColumns.initializeColumn(self); - } - - //set movable column - if (self.table.options.movableColumns && !self.isGroup && self.table.modExists("moveColumn")) { - self.table.modules.moveColumn.initializeColumn(self); - } - - //set calcs column - if ((def.topCalc || def.bottomCalc) && self.table.modExists("columnCalcs")) { - self.table.modules.columnCalcs.initializeColumn(self); - } - - //handle persistence - if (self.table.modExists("persistence") && self.table.modules.persistence.config.columns) { - self.table.modules.persistence.initializeColumn(self); - } - - //update header tooltip on mouse enter - self.element.addEventListener("mouseenter", function (e) { - self.setTooltip(); - }); -}; - -Column.prototype._bindEvents = function () { - - var self = this, - def = self.definition, - dblTap, - tapHold, - tap; - - //setup header click event bindings - if (typeof def.headerClick == "function") { - self.element.addEventListener("click", function (e) { - def.headerClick(e, self.getComponent()); - }); - } - - if (typeof def.headerDblClick == "function") { - self.element.addEventListener("dblclick", function (e) { - def.headerDblClick(e, self.getComponent()); - }); - } - - if (typeof def.headerContext == "function") { - self.element.addEventListener("contextmenu", function (e) { - def.headerContext(e, self.getComponent()); - }); - } - - //setup header tap event bindings - if (typeof def.headerTap == "function") { - tap = false; - - self.element.addEventListener("touchstart", function (e) { - tap = true; - }, { passive: true }); - - self.element.addEventListener("touchend", function (e) { - if (tap) { - def.headerTap(e, self.getComponent()); - } - - tap = false; - }); - } - - if (typeof def.headerDblTap == "function") { - dblTap = null; - - self.element.addEventListener("touchend", function (e) { - - if (dblTap) { - clearTimeout(dblTap); - dblTap = null; - - def.headerDblTap(e, self.getComponent()); - } else { - - dblTap = setTimeout(function () { - clearTimeout(dblTap); - dblTap = null; - }, 300); - } - }); - } - - if (typeof def.headerTapHold == "function") { - tapHold = null; - - self.element.addEventListener("touchstart", function (e) { - clearTimeout(tapHold); - - tapHold = setTimeout(function () { - clearTimeout(tapHold); - tapHold = null; - tap = false; - def.headerTapHold(e, self.getComponent()); - }, 1000); - }, { passive: true }); - - self.element.addEventListener("touchend", function (e) { - clearTimeout(tapHold); - tapHold = null; - }); - } - - //store column cell click event bindings - if (typeof def.cellClick == "function") { - self.cellEvents.cellClick = def.cellClick; - } - - if (typeof def.cellDblClick == "function") { - self.cellEvents.cellDblClick = def.cellDblClick; - } - - if (typeof def.cellContext == "function") { - self.cellEvents.cellContext = def.cellContext; - } - - //store column mouse event bindings - if (typeof def.cellMouseEnter == "function") { - self.cellEvents.cellMouseEnter = def.cellMouseEnter; - } - - if (typeof def.cellMouseLeave == "function") { - self.cellEvents.cellMouseLeave = def.cellMouseLeave; - } - - if (typeof def.cellMouseOver == "function") { - self.cellEvents.cellMouseOver = def.cellMouseOver; - } - - if (typeof def.cellMouseOut == "function") { - self.cellEvents.cellMouseOut = def.cellMouseOut; - } - - if (typeof def.cellMouseMove == "function") { - self.cellEvents.cellMouseMove = def.cellMouseMove; - } - - //setup column cell tap event bindings - if (typeof def.cellTap == "function") { - self.cellEvents.cellTap = def.cellTap; - } - - if (typeof def.cellDblTap == "function") { - self.cellEvents.cellDblTap = def.cellDblTap; - } - - if (typeof def.cellTapHold == "function") { - self.cellEvents.cellTapHold = def.cellTapHold; - } - - //setup column cell edit callbacks - if (typeof def.cellEdited == "function") { - self.cellEvents.cellEdited = def.cellEdited; - } - - if (typeof def.cellEditing == "function") { - self.cellEvents.cellEditing = def.cellEditing; - } - - if (typeof def.cellEditCancelled == "function") { - self.cellEvents.cellEditCancelled = def.cellEditCancelled; - } -}; - -//build header element for header -Column.prototype._buildColumnHeader = function () { - var self = this, - def = self.definition, - table = self.table, - sortable; - - //set column sorter - if (table.modExists("sort")) { - table.modules.sort.initializeColumn(self, self.contentElement); - } - - //set column header context menu - if ((def.headerContextMenu || def.headerMenu) && table.modExists("menu")) { - table.modules.menu.initializeColumnHeader(self); - } - - //set column formatter - if (table.modExists("format")) { - table.modules.format.initializeColumn(self); - } - - //set column editor - if (typeof def.editor != "undefined" && table.modExists("edit")) { - table.modules.edit.initializeColumn(self); - } - - //set colum validator - if (typeof def.validator != "undefined" && table.modExists("validate")) { - table.modules.validate.initializeColumn(self); - } - - //set column mutator - if (table.modExists("mutator")) { - table.modules.mutator.initializeColumn(self); - } - - //set column accessor - if (table.modExists("accessor")) { - table.modules.accessor.initializeColumn(self); - } - - //set respoviveLayout - if (_typeof(table.options.responsiveLayout) && table.modExists("responsiveLayout")) { - table.modules.responsiveLayout.initializeColumn(self); - } - - //set column visibility - if (typeof def.visible != "undefined") { - if (def.visible) { - self.show(true); - } else { - self.hide(true); - } - } - - //asign additional css classes to column header - if (def.cssClass) { - var classeNames = def.cssClass.split(" "); - classeNames.forEach(function (className) { - self.element.classList.add(className); - }); - } - - if (def.field) { - this.element.setAttribute("tabulator-field", def.field); - } - - //set min width if present - self.setMinWidth(typeof def.minWidth == "undefined" ? self.table.options.columnMinWidth : parseInt(def.minWidth)); - - self.reinitializeWidth(); - - //set tooltip if present - self.tooltip = self.definition.tooltip || self.definition.tooltip === false ? self.definition.tooltip : self.table.options.tooltips; - - //set orizontal text alignment - 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 () { - var def = this.definition, - table = this.table; - - var contentElement = document.createElement("div"); - contentElement.classList.add("tabulator-col-content"); - - this.titleElement = this._buildColumnHeaderTitle(); - - contentElement.appendChild(this.titleElement); - - return contentElement; -}; - -//build title element of column -Column.prototype._buildColumnHeaderTitle = function () { - var self = this, - def = self.definition, - table = self.table, - title; - - var titleHolderElement = document.createElement("div"); - titleHolderElement.classList.add("tabulator-col-title"); - - if (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); - - if (def.field) { - table.modules.localize.bind("columns|" + def.field, function (text) { - titleElement.value = text || def.title || " "; - }); - } else { - titleElement.value = def.title || " "; - } - } else { - if (def.field) { - table.modules.localize.bind("columns|" + def.field, function (text) { - self._formatColumnHeaderTitle(titleHolderElement, text || def.title || " "); - }); - } else { - self._formatColumnHeaderTitle(titleHolderElement, def.title || " "); - } - } - - return titleHolderElement; -}; - -Column.prototype._formatColumnHeaderTitle = function (el, title) { - var _this5 = this; - - var formatter, contents, params, mockCell, onRendered; - - if (this.definition.titleFormatter && this.table.modExists("format")) { - - 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 = this.definition.titleFormatterParams || {}; - - params = typeof params === "function" ? params() : params; - - contents = formatter.call(this.table.modules.format, mockCell, params, onRendered); - - switch (typeof contents === 'undefined' ? 'undefined' : _typeof(contents)) { - case "object": - if (contents instanceof Node) { - el.appendChild(contents); - } else { - 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; - } -}; - -//build header element for column group -Column.prototype._buildGroupHeader = function () { - var _this6 = this; - - this.element.classList.add("tabulator-col-group"); - this.element.setAttribute("role", "columngroup"); - this.element.setAttribute("aria-title", this.definition.title); - - //asign additional css classes to column header - if (this.definition.cssClass) { - var classeNames = this.definition.cssClass.split(" "); - classeNames.forEach(function (className) { - _this6.element.classList.add(className); - }); - } - - //set column header context menu - if ((this.definition.headerContextMenu || this.definition.headerMenu) && this.table.modExists("menu")) { - this.table.modules.menu.initializeColumnHeader(this); - } - - this.element.appendChild(this.groupElement); -}; - -//flat field lookup -Column.prototype._getFlatData = function (data) { - return data[this.field]; -}; - -//nested field lookup -Column.prototype._getNestedData = function (data) { - var dataObj = data, - structure = this.fieldStructure, - length = structure.length, - output; - - for (var i = 0; i < length; i++) { - - dataObj = dataObj[structure[i]]; - - output = dataObj; - - if (!dataObj) { - break; - } - } - - return output; -}; - -//flat field set -Column.prototype._setFlatData = function (data, value) { - if (this.field) { - data[this.field] = value; - } -}; - -//nested field set -Column.prototype._setNestedData = function (data, value) { - var dataObj = data, - structure = this.fieldStructure, - length = structure.length; - - for (var i = 0; i < length; i++) { - - if (i == length - 1) { - dataObj[structure[i]] = value; - } else { - if (!dataObj[structure[i]]) { - if (typeof value !== "undefined") { - dataObj[structure[i]] = {}; - } else { - break; - } - } - - dataObj = dataObj[structure[i]]; - } - } -}; - -//attach column to this group -Column.prototype.attachColumn = function (column) { - var self = this; - - if (self.groupElement) { - self.columns.push(column); - self.groupElement.appendChild(column.getElement()); - } else { - console.warn("Column Warning - Column being attached to another column instead of column group"); - } -}; - -//vertically align header in column -Column.prototype.verticalAlign = function (alignment, height) { - - //calculate height of column header and group holder element - var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : height || this.parent.getHeadersElement().clientHeight; - // var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight; - - this.element.style.height = parentHeight + "px"; - - if (this.isGroup) { - this.groupElement.style.minHeight = parentHeight - this.contentElement.offsetHeight + "px"; - } - - //vertically align cell contents - if (!this.isGroup && alignment !== "top") { - if (alignment === "bottom") { - this.element.style.paddingTop = this.element.clientHeight - this.contentElement.offsetHeight + "px"; - } else { - this.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) / 2 + "px"; - } - } - - this.columns.forEach(function (column) { - column.verticalAlign(alignment); - }); -}; - -//clear vertical alignmenet -Column.prototype.clearVerticalAlign = function () { - this.element.style.paddingTop = ""; - this.element.style.height = ""; - this.element.style.minHeight = ""; - this.groupElement.style.minHeight = ""; - - this.columns.forEach(function (column) { - column.clearVerticalAlign(); - }); -}; - -Column.prototype.bindModuleColumns = function () { - //check if rownum formatter is being used on a column - if (this.definition.formatter == "rownum") { - this.table.rowManager.rowNumColumn = this; - } -}; - -//// Retreive Column Information //// - -//return column header element -Column.prototype.getElement = function () { - return this.element; -}; - -//return colunm group element -Column.prototype.getGroupElement = function () { - return this.groupElement; -}; - -//return field name -Column.prototype.getField = function () { - return this.field; -}; - -//return the first column in a group -Column.prototype.getFirstColumn = function () { - if (!this.isGroup) { - return this; - } else { - if (this.columns.length) { - return this.columns[0].getFirstColumn(); - } else { - return false; - } - } -}; - -//return the last column in a group -Column.prototype.getLastColumn = function () { - if (!this.isGroup) { - return this; - } else { - if (this.columns.length) { - return this.columns[this.columns.length - 1].getLastColumn(); - } else { - return false; - } - } -}; - -//return all columns in a group -Column.prototype.getColumns = function () { - return this.columns; -}; - -//return all columns in a group -Column.prototype.getCells = function () { - return this.cells; -}; - -//retreive the top column in a group of columns -Column.prototype.getTopColumn = function () { - if (this.parent.isGroup) { - return this.parent.getTopColumn(); - } else { - return this; - } -}; - -//return column definition object -Column.prototype.getDefinition = function (updateBranches) { - var colDefs = []; - - if (this.isGroup && updateBranches) { - this.columns.forEach(function (column) { - colDefs.push(column.getDefinition(true)); - }); - - this.definition.columns = colDefs; - } - - return this.definition; -}; - -//////////////////// Actions //////////////////// - -Column.prototype.checkColumnVisibility = function () { - var visible = false; - - this.columns.forEach(function (column) { - if (column.visible) { - visible = true; - } - }); - - if (visible) { - this.show(); - this.parent.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false); - } else { - this.hide(); - } -}; - -//show column -Column.prototype.show = function (silent, responsiveToggle) { - if (!this.visible) { - this.visible = true; - - this.element.style.display = ""; - - if (this.parent.isGroup) { - this.parent.checkColumnVisibility(); - } - - this.cells.forEach(function (cell) { - cell.show(); - }); - - if (!this.isGroup && this.width === null) { - this.reinitializeWidth(); - } - - this.table.columnManager._verticalAlignHeaders(); - - if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) { - this.table.modules.persistence.save("columns"); - } - - if (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - this.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible); - } - - if (!silent) { - this.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), true); - } - - if (this.parent.isGroup) { - this.parent.matchChildWidths(); - } - } -}; - -//hide column -Column.prototype.hide = function (silent, responsiveToggle) { - if (this.visible) { - this.visible = false; - - this.element.style.display = "none"; - - this.table.columnManager._verticalAlignHeaders(); - - if (this.parent.isGroup) { - this.parent.checkColumnVisibility(); - } - - this.cells.forEach(function (cell) { - cell.hide(); - }); - - if (this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) { - this.table.modules.persistence.save("columns"); - } - - if (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - this.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible); - } - - if (!silent) { - this.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false); - } - - if (this.parent.isGroup) { - this.parent.matchChildWidths(); - } - } -}; - -Column.prototype.matchChildWidths = function () { - var childWidth = 0; - - if (this.contentElement && this.columns.length) { - this.columns.forEach(function (column) { - if (column.visible) { - childWidth += column.getWidth(); - } - }); - - this.contentElement.style.maxWidth = childWidth - 1 + "px"; - - if (this.parent.isGroup) { - this.parent.matchChildWidths(); - } - } -}; - -Column.prototype.setWidth = function (width) { - this.widthFixed = true; - this.setWidthActual(width); -}; - -Column.prototype.setWidthActual = function (width) { - if (isNaN(width)) { - width = Math.floor(this.table.element.clientWidth / 100 * parseInt(width)); - } - - width = Math.max(this.minWidth, width); - - this.width = width; - this.widthStyled = width ? width + "px" : ""; - - this.element.style.width = this.widthStyled; - - if (!this.isGroup) { - this.cells.forEach(function (cell) { - cell.setWidth(); - }); - } - - if (this.parent.isGroup) { - this.parent.matchChildWidths(); - } - - //set resizable handles - if (this.table.modExists("frozenColumns")) { - this.table.modules.frozenColumns.layout(); - } -}; - -Column.prototype.checkCellHeights = function () { - var rows = []; - - this.cells.forEach(function (cell) { - if (cell.row.heightInitialized) { - if (cell.row.getElement().offsetParent !== null) { - rows.push(cell.row); - cell.row.clearCellHeight(); - } else { - cell.row.heightInitialized = false; - } - } - }); - - rows.forEach(function (row) { - row.calcHeight(); - }); - - rows.forEach(function (row) { - row.setCellHeight(); - }); -}; - -Column.prototype.getWidth = function () { - var width = 0; - - if (this.isGroup) { - this.columns.forEach(function (column) { - if (column.visible) { - width += column.getWidth(); - } - }); - } else { - width = this.width; - } - - return width; -}; - -Column.prototype.getHeight = function () { - return this.element.offsetHeight; -}; - -Column.prototype.setMinWidth = function (minWidth) { - this.minWidth = minWidth; - this.minWidthStyled = minWidth ? minWidth + "px" : ""; - - this.element.style.minWidth = this.minWidthStyled; - - this.cells.forEach(function (cell) { - cell.setMinWidth(); - }); -}; - -Column.prototype.delete = function () { - var _this7 = this; - - return new Promise(function (resolve, reject) { - - if (_this7.isGroup) { - _this7.columns.forEach(function (column) { - column.delete(); - }); - } - - //cancel edit if column is currently being edited - if (_this7.table.modExists("edit")) { - if (_this7.table.modules.edit.currentCell.column === _this7) { - _this7.table.modules.edit.cancelEdit(); - } - } - - var cellCount = _this7.cells.length; - - for (var i = 0; i < cellCount; i++) { - _this7.cells[0].delete(); - } - - _this7.element.parentNode.removeChild(_this7.element); - - _this7.table.columnManager.deregisterColumn(_this7); - - resolve(); - }); -}; - -Column.prototype.columnRendered = function () { - if (this.titleFormatterRendered) { - this.titleFormatterRendered(); - } -}; - -Column.prototype.validate = function () { - var invalid = []; - - this.cells.forEach(function (cell) { - if (!cell.validate()) { - invalid.push(cell.getComponent()); - } - }); - - return invalid.length ? invalid : true; -}; - -//////////////// Cell Management ///////////////// - -//generate cell for this column -Column.prototype.generateCell = function (row) { - var self = this; - - var cell = new Cell(self, row); - - this.cells.push(cell); - - return cell; -}; - -Column.prototype.nextColumn = function () { - var index = this.table.columnManager.findColumnIndex(this); - return index > -1 ? this._nextVisibleColumn(index + 1) : false; -}; - -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) : false; -}; - -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 = false; - - //set width if present - if (typeof this.definition.width !== "undefined" && !force) { - this.setWidth(this.definition.width); - } - - //hide header filters to prevent them altering column width - if (this.table.modExists("filter")) { - this.table.modules.filter.hideHeaderFilterElements(); - } - - this.fitToData(); - - //show header filters again after layout is complete - if (this.table.modExists("filter")) { - this.table.modules.filter.showHeaderFilterElements(); - } -}; - -//set column width to maximum cell width -Column.prototype.fitToData = function () { - var self = this; - - if (!this.widthFixed) { - this.element.style.width = ""; - - self.cells.forEach(function (cell) { - cell.clearWidth(); - }); - } - - var maxWidth = this.element.offsetWidth; - - if (!self.width || !this.widthFixed) { - self.cells.forEach(function (cell) { - var width = cell.getWidth(); - - if (width > maxWidth) { - maxWidth = width; - } - }); - - if (maxWidth) { - self.setWidthActual(maxWidth + 1); - } - } -}; - -Column.prototype.updateDefinition = function (updates) { - var _this8 = this; - - return new Promise(function (resolve, reject) { - var definition; - - if (!_this8.isGroup) { - definition = Object.assign({}, _this8.getDefinition()); - definition = Object.assign(definition, updates); - - _this8.table.columnManager.addColumn(definition, false, _this8).then(function (column) { - - if (definition.field == _this8.field) { - _this8.field = false; //cleair field name to prevent deletion of duplicate column from arrays - } - - _this8.delete().then(function () { - resolve(column.getComponent()); - }).catch(function (err) { - reject(err); - }); - }).catch(function (err) { - reject(err); - }); - } else { - 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"); - } - }); -}; - -Column.prototype.deleteCell = function (cell) { - var index = this.cells.indexOf(cell); - - if (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"]; - -//////////////// Event Bindings ///////////////// - -//////////////// Object Generation ///////////////// -Column.prototype.getComponent = function () { - if (!this.component) { - this.component = new ColumnComponent(this); - } - - return this.component; -}; - -var RowManager = function RowManager(table) { - - this.table = table; - this.element = this.createHolderElement(); //containing element - this.tableElement = this.createTableElement(); //table element - this.heightFixer = this.createTableElement(); //table element - this.columnManager = null; //hold column manager object - this.height = 0; //hold height of table element - - this.firstRender = false; //handle first render - this.renderMode = "virtual"; //current rendering mode - this.fixedHeight = false; //current rendering mode - - this.rows = []; //hold row data objects - this.activeRows = []; //rows currently available to on display in the table - this.activeRowsCount = 0; //count of active rows - - this.displayRows = []; //rows currently on display in the table - this.displayRowsCount = 0; //count of display rows - - this.scrollTop = 0; - this.scrollLeft = 0; - - this.vDomRowHeight = 20; //approximation of row heights for padding - - this.vDomTop = 0; //hold position for first rendered row in the virtual DOM - this.vDomBottom = 0; //hold possition for last rendered row in the virtual DOM - - this.vDomScrollPosTop = 0; //last scroll position of the vDom top; - this.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom; - - this.vDomTopPad = 0; //hold value of padding for top of virtual DOM - this.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM - - this.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go - - this.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling - - this.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows) - this.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin - - this.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed - this.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed - - this.rowNumColumn = false; //hold column component for row number column - - this.redrawBlock = false; //prevent redraws to allow multiple data manipulations becore continuing - this.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed - this.redrawBlockRederInPosition = false; //store latest redraw function calls for when redraw is needed -}; - -//////////////// Setup Functions ///////////////// - -RowManager.prototype.createHolderElement = function () { - var el = document.createElement("div"); - - el.classList.add("tabulator-tableHolder"); - el.setAttribute("tabindex", 0); - - return el; -}; - -RowManager.prototype.createTableElement = function () { - var el = document.createElement("div"); - - el.classList.add("tabulator-table"); - - return el; -}; - -//return containing element -RowManager.prototype.getElement = function () { - return this.element; -}; - -//return table element -RowManager.prototype.getTableElement = function () { - return this.tableElement; -}; - -//return position of row in table -RowManager.prototype.getRowPosition = function (row, active) { - if (active) { - return this.activeRows.indexOf(row); - } else { - return this.rows.indexOf(row); - } -}; - -//link to column manager -RowManager.prototype.setColumnManager = function (manager) { - this.columnManager = manager; -}; - -RowManager.prototype.initialize = function () { - var self = this; - - self.setRenderMode(); - - //initialize manager - self.element.appendChild(self.tableElement); - - self.firstRender = true; - - //scroll header along with table body - self.element.addEventListener("scroll", function () { - var left = self.element.scrollLeft; - - //handle horizontal scrolling - if (self.scrollLeft != left) { - self.columnManager.scrollHorizontal(left); - - if (self.table.options.groupBy) { - self.table.modules.groupRows.scrollHeaders(left); - } - - if (self.table.modExists("columnCalcs")) { - self.table.modules.columnCalcs.scrollHorizontal(left); - } - - self.table.options.scrollHorizontal(left); - } - - self.scrollLeft = left; - }); - - //handle virtual dom scrolling - if (this.renderMode === "virtual") { - - self.element.addEventListener("scroll", function () { - var top = self.element.scrollTop; - var dir = self.scrollTop > top; - - //handle verical scrolling - if (self.scrollTop != top) { - self.scrollTop = top; - self.scrollVertical(dir); - - if (self.table.options.ajaxProgressiveLoad == "scroll") { - self.table.modules.ajax.nextPage(self.element.scrollHeight - self.element.clientHeight - top); - } - - self.table.options.scrollVertical(top); - } else { - self.scrollTop = top; - } - }); - } -}; - -////////////////// Row Manipulation ////////////////// - -RowManager.prototype.findRow = function (subject) { - var self = this; - - if ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == "object") { - - if (subject instanceof Row) { - //subject is row element - return subject; - } else if (subject instanceof RowComponent) { - //subject is public row component - return subject._getSelf() || false; - } else if (typeof HTMLElement !== "undefined" && subject instanceof HTMLElement) { - //subject is a HTML element of the row - var match = self.rows.find(function (row) { - return row.element === subject; - }); - - return match || false; - } - } else if (typeof subject == "undefined" || subject === null) { - return false; - } else { - //subject should be treated as the index of the row - var _match = self.rows.find(function (row) { - return row.data[self.table.options.index] == subject; - }); - - return _match || false; - } - - //catch all for any other type of input - - return false; -}; - -RowManager.prototype.getRowFromDataObject = function (data) { - var match = this.rows.find(function (row) { - return row.data === data; - }); - - return match || false; -}; - -RowManager.prototype.getRowFromPosition = function (position, active) { - if (active) { - return this.activeRows[position]; - } else { - return this.rows[position]; - } -}; - -RowManager.prototype.scrollToRow = function (row, position, ifVisible) { - var _this9 = this; - - var rowIndex = this.getDisplayRows().indexOf(row), - rowEl = row.getElement(), - rowTop, - offset = 0; - - return new Promise(function (resolve, reject) { - if (rowIndex > -1) { - - if (typeof position === "undefined") { - position = _this9.table.options.scrollToRowPosition; - } - - if (typeof ifVisible === "undefined") { - ifVisible = _this9.table.options.scrollToRowIfVisible; - } - - if (position === "nearest") { - 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"; - break; - } - } - - //check row visibility - if (!ifVisible) { - if (Tabulator.prototype.helpers.elVisible(rowEl)) { - offset = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this9.element).top; - - if (offset > 0 && offset < _this9.element.clientHeight - rowEl.offsetHeight) { - return false; - } - } - } - - //scroll to row - 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, true); - break; - } - - //align to correct position - switch (position) { - case "middle": - case "center": - - 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 { - _this9.element.scrollTop = _this9.element.scrollTop - _this9.element.clientHeight / 2; - } - - break; - - case "bottom": - - if (_this9.element.scrollHeight - _this9.element.scrollTop == _this9.element.clientHeight) { - _this9.element.scrollTop = _this9.element.scrollTop - (_this9.element.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight; - } else { - _this9.element.scrollTop = _this9.element.scrollTop - _this9.element.clientHeight + rowEl.offsetHeight; - } - - break; - } - - resolve(); - } else { - console.warn("Scroll Error - Row not visible"); - reject("Scroll Error - Row not visible"); - } - }); -}; - -////////////////// Data Handling ////////////////// - -RowManager.prototype.setData = function (data, renderInPosition, columnsChanged) { - var _this10 = this; - - var self = this; - - return new Promise(function (resolve, reject) { - if (renderInPosition && _this10.getDisplayRows().length) { - if (self.table.options.pagination) { - self._setDataActual(data, true); - } else { - _this10.reRenderInPosition(function () { - self._setDataActual(data); - }); - } - } else { - if (_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(); - - if (this.table.options.history && this.table.modExists("history")) { - this.table.modules.history.clear(); - } - - if (Array.isArray(data)) { - - if (this.table.modExists("selectRow")) { - this.table.modules.selectRow.clearSelectionData(); - } - - if (this.table.options.reactiveData && this.table.modExists("reactiveData", true)) { - this.table.modules.reactiveData.watchData(data); - } - - data.forEach(function (def, i) { - if (def && (typeof def === 'undefined' ? 'undefined' : _typeof(def)) === "object") { - 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(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); - } -}; - -RowManager.prototype._wipeElements = function () { - this.rows.forEach(function (row) { - row.wipe(); - }); - - if (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); - - if (activeIndex > -1) { - this.activeRows.splice(activeIndex, 1); - } - - if (allIndex > -1) { - this.rows.splice(allIndex, 1); - } - - this.setActiveRows(this.activeRows); - - this.displayRowIterator(function (rows) { - var displayIndex = rows.indexOf(row); - - if (displayIndex > -1) { - rows.splice(displayIndex, 1); - } - }); - - if (!blockRedraw) { - this.reRenderInPosition(); - } - - this.regenerateRowNumbers(); - - this.table.options.rowDeleted.call(this.table, row.getComponent()); - - this.table.options.dataEdited.call(this.table, this.getData()); - - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - this.table.modules.groupRows.updateGroupRows(true); - } else if (this.table.options.pagination && this.table.modExists("page")) { - this.refreshActiveData(false, false, true); - } else { - if (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); - - if (this.table.options.history && this.table.modExists("history")) { - this.table.modules.history.action("rowAdd", row, { data: data, pos: pos, index: index }); - } - - return row; -}; - -//add multiple rows -RowManager.prototype.addRows = function (data, pos, index) { - var _this11 = this; - - var self = this, - length = 0, - rows = []; - - return new Promise(function (resolve, reject) { - pos = _this11.findAddRowPos(pos); - - if (!Array.isArray(data)) { - data = [data]; - } - - length = data.length - 1; - - if (typeof index == "undefined" && pos || typeof index !== "undefined" && !pos) { - data.reverse(); - } - - data.forEach(function (item, i) { - var row = self.addRow(item, pos, index, true); - rows.push(row); - }); - - 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 { - _this11.reRenderInPosition(); - } - - //recalc column calculations if present - if (_this11.table.modExists("columnCalcs")) { - _this11.table.modules.columnCalcs.recalc(_this11.table.rowManager.activeRows); - } - - _this11.regenerateRowNumbers(); - resolve(rows); - }); -}; - -RowManager.prototype.findAddRowPos = function (pos) { - if (typeof pos === "undefined") { - pos = this.table.options.addRowPos; - } - - if (pos === "pos") { - pos = true; - } - - if (pos === "bottom") { - pos = false; - } - - return 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 && this.table.options.paginationAddRow == "page") { - dispRows = this.getDisplayRows(); - - if (top) { - if (dispRows.length) { - index = dispRows[0]; - } else { - if (this.activeRows.length) { - index = this.activeRows[this.activeRows.length - 1]; - top = false; - } - } - } else { - if (dispRows.length) { - index = dispRows[dispRows.length - 1]; - top = dispRows.length < this.table.modules.page.getPageSize() ? false : true; - } - } - } - - if (typeof index !== "undefined") { - index = this.findRow(index); - } - - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - this.table.modules.groupRows.assignRowToGroup(row); - - var groupRows = row.getGroup().rows; - - if (groupRows.length > 1) { - - if (!index || index && groupRows.indexOf(index) == -1) { - if (top) { - if (groupRows[0] !== row) { - index = groupRows[0]; - this._moveRowInArray(row.getGroup().rows, row, index, !top); - } - } else { - if (groupRows[groupRows.length - 1] !== row) { - index = groupRows[groupRows.length - 1]; - this._moveRowInArray(row.getGroup().rows, row, index, !top); - } - } - } else { - this._moveRowInArray(row.getGroup().rows, row, index, !top); - } - } - } - - if (index) { - allIndex = this.rows.indexOf(index); - } - - if (index && allIndex > -1) { - activeIndex = this.activeRows.indexOf(index); - - this.displayRowIterator(function (rows) { - var displayIndex = rows.indexOf(index); - - if (displayIndex > -1) { - rows.splice(top ? displayIndex : displayIndex + 1, 0, row); - } - }); - - if (activeIndex > -1) { - this.activeRows.splice(top ? activeIndex : activeIndex + 1, 0, row); - } - - this.rows.splice(top ? allIndex : allIndex + 1, 0, row); - } else { - - if (top) { - - this.displayRowIterator(function (rows) { - rows.unshift(row); - }); - - this.activeRows.unshift(row); - this.rows.unshift(row); - } else { - 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()); - - if (!blockRedraw) { - this.reRenderInPosition(); - } - - return row; -}; - -RowManager.prototype.moveRow = function (from, to, after) { - if (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; - - this._moveRowInArray(this.rows, from, to, after); - this._moveRowInArray(this.activeRows, from, to, after); - - this.displayRowIterator(function (rows) { - _this12._moveRowInArray(rows, from, to, after); - }); - - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - - if (!after && to instanceof Group) { - to = this.table.rowManager.prevDisplayRow(from) || to; - } - - var toGroup = to.getGroup(); - var fromGroup = from.getGroup(); - - if (toGroup === fromGroup) { - this._moveRowInArray(toGroup.rows, from, to, after); - } else { - if (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); - - if (fromIndex > -1) { - - rows.splice(fromIndex, 1); - - toIndex = rows.indexOf(to); - - if (toIndex > -1) { - - if (after) { - rows.splice(toIndex + 1, 0, from); - } else { - rows.splice(toIndex, 0, from); - } - } else { - rows.splice(fromIndex, 0, from); - } - } - - //restyle rows - if (rows === this.getDisplayRows()) { - - start = fromIndex < toIndex ? fromIndex : toIndex; - end = toIndex > fromIndex ? toIndex : fromIndex + 1; - - for (var i = start; i <= end; i++) { - if (rows[i]) { - this.styleRow(rows[i], i); - } - } - } - } -}; - -RowManager.prototype.clearData = function () { - this.setData([]); -}; - -RowManager.prototype.getRowIndex = function (row) { - return this.findRowIndex(row, this.rows); -}; - -RowManager.prototype.getDisplayRowIndex = function (row) { - var index = this.getDisplayRows().indexOf(row); - return index > -1 ? index : false; -}; - -RowManager.prototype.nextDisplayRow = function (row, rowOnly) { - var index = this.getDisplayRowIndex(row), - nextRow = false; - - if (index !== false && index < this.displayRowsCount - 1) { - nextRow = this.getDisplayRows()[index + 1]; - } - - if (nextRow && (!(nextRow instanceof Row) || nextRow.type != "row")) { - return this.nextDisplayRow(nextRow, rowOnly); - } - - return nextRow; -}; - -RowManager.prototype.prevDisplayRow = function (row, rowOnly) { - var index = this.getDisplayRowIndex(row), - prevRow = false; - - if (index) { - prevRow = this.getDisplayRows()[index - 1]; - } - - if (rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != "row")) { - return this.prevDisplayRow(prevRow, rowOnly); - } - - return prevRow; -}; - -RowManager.prototype.findRowIndex = function (row, list) { - var rowIndex; - - row = this.findRow(row); - - if (row) { - rowIndex = list.indexOf(row); - - if (rowIndex > -1) { - return rowIndex; - } - } - - return false; -}; - -RowManager.prototype.getData = function (active, transform) { - var output = [], - rows = this.getRows(active); - - rows.forEach(function (row) { - if (row.type == "row") { - output.push(row.getData(transform || "data")); - } - }); - - return output; -}; - -RowManager.prototype.getComponents = function (active) { - var output = [], - rows = this.getRows(active); - - rows.forEach(function (row) { - output.push(row.getComponent()); - }); - - return output; -}; - -RowManager.prototype.getDataCount = function (active) { - var rows = this.getRows(active); - - return rows.length; -}; - -RowManager.prototype._genRemoteRequest = function () { - var _this13 = this; - - var table = this.table, - options = table.options, - params = {}; - - if (table.modExists("page")) { - //set sort data if defined - 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; - } - - //set filter data if defined - if (options.ajaxFiltering) { - var filters = this.table.modules.filter.getFilters(true, true); - - params[this.table.modules.page.paginationDataSentNames.filters] = filters; - } - - this.table.modules.ajax.setParams(params, true); - } - - table.modules.ajax.sendRequest().then(function (data) { - _this13._setDataActual(data, true); - }).catch(function (e) {}); -}; - -//choose the path to refresh data after a filter update -RowManager.prototype.filterRefresh = function () { - var table = this.table, - options = table.options, - left = this.scrollLeft; - - if (options.ajaxFiltering) { - if (options.pagination == "remote" && table.modExists("page")) { - table.modules.page.reset(true); - table.modules.page.setPage(1).then(function () {}).catch(function () {}); - } else if (options.ajaxProgressiveLoad) { - table.modules.ajax.loadData().then(function () {}).catch(function () {}); - } else { - //assume data is url, make ajax call to url to get data - this._genRemoteRequest(); - } - } else { - this.refreshActiveData("filter"); - } - - this.scrollHorizontal(left); -}; - -//choose the path to refresh data after a sorter update -RowManager.prototype.sorterRefresh = function (loadOrignalData) { - var table = this.table, - options = this.table.options, - left = this.scrollLeft; - - if (options.ajaxSorting) { - if ((options.pagination == "remote" || options.progressiveLoad) && table.modExists("page")) { - table.modules.page.reset(true); - table.modules.page.setPage(1).then(function () {}).catch(function () {}); - } else if (options.ajaxProgressiveLoad) { - table.modules.ajax.loadData().then(function () {}).catch(function () {}); - } else { - //assume data is url, make ajax call to url to get data - this._genRemoteRequest(); - } - } else { - this.refreshActiveData(loadOrignalData ? "filter" : "sort"); - } - - this.scrollHorizontal(left); -}; - -RowManager.prototype.scrollHorizontal = function (left) { - this.scrollLeft = left; - this.element.scrollLeft = left; - - if (this.table.options.groupBy) { - this.table.modules.groupRows.scrollHeaders(left); - } - - if (this.table.modExists("columnCalcs")) { - this.table.modules.columnCalcs.scrollHorizontal(left); - } -}; - -//set active data set -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) { - - if (!this.redrawBlockRestoreConfig || cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage)) { - this.redrawBlockRestoreConfig = { - stage: stage, - skipStage: skipStage, - renderInPosition: renderInPosition - }; - } - - return; - } else { - - if (self.table.modExists("edit")) { - self.table.modules.edit.cancelEdit(); - } - - if (!stage) { - stage = "all"; - } - - if (table.options.selectable && !table.options.selectablePersistence && table.modExists("selectRow")) { - table.modules.selectRow.deselectRows(); - } - - //cascade through data refresh stages - switch (stage) { - case "all": - - case "filter": - if (!skipStage) { - if (table.modExists("filter")) { - self.setActiveRows(table.modules.filter.filter(self.rows)); - } else { - self.setActiveRows(self.rows.slice(0)); - } - } else { - skipStage = false; - } - - case "sort": - if (!skipStage) { - if (table.modExists("sort")) { - table.modules.sort.sort(this.activeRows); - } - } else { - skipStage = false; - } - - //regenerate row numbers for row number formatter if in use - this.regenerateRowNumbers(); - - //generic stage to allow for pipeline trigger after the data manipulation stage - case "display": - this.resetDisplayRows(); - - case "freeze": - if (!skipStage) { - if (this.table.modExists("frozenRows")) { - if (table.modules.frozenRows.isFrozen()) { - if (!table.modules.frozenRows.getDisplayIndex()) { - table.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex()); - } - - displayIndex = table.modules.frozenRows.getDisplayIndex(); - - displayIndex = self.setDisplayRows(table.modules.frozenRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex); - - if (displayIndex !== true) { - table.modules.frozenRows.setDisplayIndex(displayIndex); - } - } - } - } else { - skipStage = false; - } - - case "group": - if (!skipStage) { - if (table.options.groupBy && table.modExists("groupRows")) { - - if (!table.modules.groupRows.getDisplayIndex()) { - table.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex()); - } - - displayIndex = table.modules.groupRows.getDisplayIndex(); - - displayIndex = self.setDisplayRows(table.modules.groupRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex); - - if (displayIndex !== true) { - table.modules.groupRows.setDisplayIndex(displayIndex); - } - } - } else { - skipStage = false; - } - - case "tree": - - if (!skipStage) { - if (table.options.dataTree && table.modExists("dataTree")) { - if (!table.modules.dataTree.getDisplayIndex()) { - table.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex()); - } - - displayIndex = table.modules.dataTree.getDisplayIndex(); - - displayIndex = self.setDisplayRows(table.modules.dataTree.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex); - - if (displayIndex !== true) { - table.modules.dataTree.setDisplayIndex(displayIndex); - } - } - } else { - skipStage = false; - } - - if (table.options.pagination && table.modExists("page") && !renderInPosition) { - if (table.modules.page.getMode() == "local") { - table.modules.page.reset(); - } - } - - case "page": - if (!skipStage) { - if (table.options.pagination && table.modExists("page")) { - - if (!table.modules.page.getDisplayIndex()) { - table.modules.page.setDisplayIndex(this.getNextDisplayIndex()); - } - - displayIndex = table.modules.page.getDisplayIndex(); - - if (table.modules.page.getMode() == "local") { - table.modules.page.setMaxRows(this.getDisplayRows(displayIndex - 1).length); - } - - displayIndex = self.setDisplayRows(table.modules.page.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex); - - if (displayIndex !== true) { - table.modules.page.setDisplayIndex(displayIndex); - } - } - } else { - skipStage = false; - } - } - - if (Tabulator.prototype.helpers.elVisible(self.element)) { - if (renderInPosition) { - self.reRenderInPosition(); - } else { - self.renderTable(); - if (table.options.layoutColumnsOnNewData) { - self.table.columnManager.redraw(true); - } - } - } - - if (table.modExists("columnCalcs")) { - table.modules.columnCalcs.recalc(this.activeRows); - } - } -}; - -//regenerate row numbers for row number formatter if in use -RowManager.prototype.regenerateRowNumbers = function () { - var _this14 = this; - - if (this.rowNumColumn) { - this.activeRows.forEach(function (row) { - var cell = row.getCell(_this14.rowNumColumn); - - if (cell) { - cell._generateContents(); - } - }); - } -}; - -RowManager.prototype.setActiveRows = function (activeRows) { - this.activeRows = activeRows; - this.activeRowsCount = this.activeRows.length; -}; - -//reset display rows array -RowManager.prototype.resetDisplayRows = function () { - this.displayRows = []; - - this.displayRows.push(this.activeRows.slice(0)); - - this.displayRowsCount = this.displayRows[0].length; - - if (this.table.modExists("frozenRows")) { - this.table.modules.frozenRows.setDisplayIndex(0); - } - - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - this.table.modules.groupRows.setDisplayIndex(0); - } - - if (this.table.options.pagination && this.table.modExists("page")) { - this.table.modules.page.setDisplayIndex(0); - } -}; - -RowManager.prototype.getNextDisplayIndex = function () { - return this.displayRows.length; -}; - -//set display row pipeline data -RowManager.prototype.setDisplayRows = function (displayRows, index) { - - var output = true; - - if (index && typeof this.displayRows[index] != "undefined") { - this.displayRows[index] = displayRows; - output = true; - } else { - this.displayRows.push(displayRows); - output = index = this.displayRows.length - 1; - } - - if (index == this.displayRows.length - 1) { - this.displayRowsCount = this.displayRows[this.displayRows.length - 1].length; - } - - return output; -}; - -RowManager.prototype.getDisplayRows = function (index) { - if (typeof index == "undefined") { - return this.displayRows.length ? this.displayRows[this.displayRows.length - 1] : []; - } else { - return this.displayRows[index] || []; - } -}; - -RowManager.prototype.getVisibleRows = function (viewable) { - var topEdge = this.element.scrollTop, - bottomEdge = this.element.clientHeight + topEdge, - topFound = false, - topRow = 0, - bottomRow = 0, - rows = this.getDisplayRows(); - - if (viewable) { - - this.getDisplayRows(); - for (var i = this.vDomTop; i <= this.vDomBottom; i++) { - if (rows[i]) { - if (!topFound) { - if (topEdge - rows[i].getElement().offsetTop >= 0) { - topRow = i; - } else { - topFound = true; - - if (bottomEdge - rows[i].getElement().offsetTop >= 0) { - bottomRow = i; - } else { - break; - } - } - } else { - if (bottomEdge - rows[i].getElement().offsetTop >= 0) { - bottomRow = i; - } else { - break; - } - } - } - } - } else { - topRow = this.vDomTop; - bottomRow = this.vDomBottom; - } - - return rows.slice(topRow, bottomRow + 1); -}; - -//repeat action accross display rows -RowManager.prototype.displayRowIterator = function (callback) { - this.displayRows.forEach(callback); - - this.displayRowsCount = this.displayRows[this.displayRows.length - 1].length; -}; - -//return only actual rows (not group headers etc) -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(true); - break; - - default: - rows = this.rows; - } - - return rows; -}; - -///////////////// Table Rendering ///////////////// - -//trigger rerender of table in current position -RowManager.prototype.reRenderInPosition = function (callback) { - if (this.getRenderMode() == "virtual") { - - if (this.redrawBlock) { - if (callback) { - callback(); - } else { - this.redrawBlockRederInPosition = true; - } - } else { - var scrollTop = this.element.scrollTop; - var topRow = false; - var topOffset = false; - - var left = this.scrollLeft; - - var rows = this.getDisplayRows(); - - for (var i = this.vDomTop; i <= this.vDomBottom; i++) { - - if (rows[i]) { - var diff = scrollTop - rows[i].getElement().offsetTop; - - if (topOffset === false || Math.abs(diff) < topOffset) { - topOffset = diff; - topRow = i; - } else { - break; - } - } - } - - if (callback) { - callback(); - } - - this._virtualRenderFill(topRow === false ? this.displayRowsCount - 1 : topRow, true, topOffset || 0); - - this.scrollHorizontal(left); - } - } else { - this.renderTable(); - - if (callback) { - callback(); - } - } -}; - -RowManager.prototype.setRenderMode = function () { - - if (this.table.options.virtualDom) { - - this.renderMode = "virtual"; - - if (this.table.element.clientHeight || this.table.options.height) { - this.fixedHeight = true; - } else { - this.fixedHeight = false; - } - } else { - this.renderMode = "classic"; - } -}; - -RowManager.prototype.getRenderMode = function () { - return this.renderMode; -}; - -RowManager.prototype.renderTable = function () { - - this.table.options.renderStarted.call(this.table); - - this.element.scrollTop = 0; - - switch (this.renderMode) { - case "classic": - this._simpleRender(); - break; - - case "virtual": - this._virtualRenderFill(); - break; - } - - if (this.firstRender) { - if (this.displayRowsCount) { - this.firstRender = false; - this.table.modules.layout.layout(); - } else { - this.renderEmptyScroll(); - } - } - - if (this.table.modExists("frozenColumns")) { - this.table.modules.frozenColumns.layout(); - } - - if (!this.displayRowsCount) { - if (this.table.options.placeholder) { - - this.table.options.placeholder.setAttribute("tabulator-render-mode", this.renderMode); - - this.getElement().appendChild(this.table.options.placeholder); - this.table.options.placeholder.style.width = this.table.columnManager.getWidth() + "px"; - } - } - - this.table.options.renderComplete.call(this.table); -}; - -//simple render on heightless table -RowManager.prototype._simpleRender = function () { - this._clearVirtualDom(); - - if (this.displayRowsCount) { - this.checkClassicModeGroupHeaderWidth(); - } else { - this.renderEmptyScroll(); - } -}; - -RowManager.prototype.checkClassicModeGroupHeaderWidth = function () { - var self = this, - element = this.tableElement, - onlyGroupHeaders = true; - - self.getDisplayRows().forEach(function (row, index) { - self.styleRow(row, index); - element.appendChild(row.getElement()); - row.initialize(true); - - if (row.type !== "group") { - onlyGroupHeaders = false; - } - }); - - if (onlyGroupHeaders) { - element.style.minWidth = self.table.columnManager.getWidth() + "px"; - } else { - element.style.minWidth = ""; - } -}; - -//show scrollbars on empty table div -RowManager.prototype.renderEmptyScroll = function () { - if (this.table.options.placeholder) { - 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"; - } -}; - -RowManager.prototype._clearVirtualDom = function () { - var element = this.tableElement; - - if (this.table.options.placeholder && this.table.options.placeholder.parentNode) { - this.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder); - } - - // element.children.detach(); - while (element.firstChild) { - element.removeChild(element.firstChild); - }element.style.paddingTop = ""; - element.style.paddingBottom = ""; - element.style.minWidth = ""; - element.style.minHeight = ""; - element.style.display = ""; - element.style.visibility = ""; - - this.scrollTop = 0; - this.scrollLeft = 0; - this.vDomTop = 0; - this.vDomBottom = 0; - this.vDomTopPad = 0; - this.vDomBottomPad = 0; -}; - -RowManager.prototype.styleRow = function (row, index) { - var rowEl = row.getElement(); - - if (index % 2) { - rowEl.classList.add("tabulator-row-even"); - rowEl.classList.remove("tabulator-row-odd"); - } else { - rowEl.classList.add("tabulator-row-odd"); - rowEl.classList.remove("tabulator-row-even"); - } -}; - -//full virtual render -RowManager.prototype._virtualRenderFill = function (position, forceMove, offset) { - var self = this, - element = self.tableElement, - holder = self.element, - topPad = 0, - rowsHeight = 0, - topPadHeight = 0, - i = 0, - onlyGroupHeaders = true, - rows = self.getDisplayRows(); - - position = position || 0; - - offset = offset || 0; - - if (!position) { - self._clearVirtualDom(); - } else { - while (element.firstChild) { - element.removeChild(element.firstChild); - } //check if position is too close to bottom of table - var heightOccupied = (self.displayRowsCount - position + 1) * self.vDomRowHeight; - - if (heightOccupied < self.height) { - position -= Math.ceil((self.height - heightOccupied) / self.vDomRowHeight); - - if (position < 0) { - position = 0; - } - } - - //calculate initial pad - topPad = Math.min(Math.max(Math.floor(self.vDomWindowBuffer / self.vDomRowHeight), self.vDomWindowMinMarginRows), position); - position -= topPad; - } - - if (self.displayRowsCount && Tabulator.prototype.helpers.elVisible(self.element)) { - - self.vDomTop = position; - - self.vDomBottom = position - 1; - - while ((rowsHeight <= self.height + self.vDomWindowBuffer || i < self.vDomWindowMinTotalRows) && self.vDomBottom < self.displayRowsCount - 1) { - var index = self.vDomBottom + 1, - row = rows[index], - rowHeight = 0; - - self.styleRow(row, index); - - element.appendChild(row.getElement()); - if (!row.initialized) { - row.initialize(true); - } else { - if (!row.heightInitialized) { - row.normalizeHeight(true); - } - } - - rowHeight = row.getHeight(); - - if (i < topPad) { - topPadHeight += rowHeight; - } else { - rowsHeight += rowHeight; - } - - if (rowHeight > this.vDomWindowBuffer) { - this.vDomWindowBuffer = rowHeight * 2; - } - - if (row.type !== "group") { - onlyGroupHeaders = false; - } - - self.vDomBottom++; - i++; - } - - if (!position) { - this.vDomTopPad = 0; - //adjust rowheight to match average of rendered elements - self.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / i); - self.vDomBottomPad = self.vDomRowHeight * (self.displayRowsCount - self.vDomBottom - 1); - - self.vDomScrollHeight = topPadHeight + rowsHeight + self.vDomBottomPad - self.height; - } else { - self.vDomTopPad = !forceMove ? self.scrollTop - topPadHeight : self.vDomRowHeight * this.vDomTop + offset; - self.vDomBottomPad = self.vDomBottom == self.displayRowsCount - 1 ? 0 : Math.max(self.vDomScrollHeight - self.vDomTopPad - rowsHeight - topPadHeight, 0); - } - - element.style.paddingTop = self.vDomTopPad + "px"; - element.style.paddingBottom = self.vDomBottomPad + "px"; - - if (forceMove) { - this.scrollTop = self.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); - - //adjust for horizontal scrollbar if present (and not at top of table) - if (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 ? self.table.columnManager.getWidth() + "px" : ""; - - if (self.table.options.groupBy) { - if (self.table.modules.layout.getMode() != "fitDataFill" && self.displayRowsCount == self.table.modules.groupRows.countGroups()) { - self.tableElement.style.minWidth = self.table.columnManager.getWidth(); - } - } - } else { - this.renderEmptyScroll(); - } - - if (!this.fixedHeight) { - this.adjustTableSize(); - } -}; - -//handle vertical scrolling -RowManager.prototype.scrollVertical = function (dir) { - var topDiff = this.scrollTop - this.vDomScrollPosTop; - var bottomDiff = this.scrollTop - this.vDomScrollPosBottom; - var margin = this.vDomWindowBuffer * 2; - - if (-topDiff > margin || bottomDiff > margin) { - //if big scroll redraw table; - var left = this.scrollLeft; - this._virtualRenderFill(Math.floor(this.element.scrollTop / this.element.scrollHeight * this.displayRowsCount)); - this.scrollHorizontal(left); - } else { - - if (dir) { - //scrolling up - if (topDiff < 0) { - - this._addTopRow(-topDiff); - } - - if (bottomDiff < 0) { - - //hide bottom row if needed - if (this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer) { - this._removeBottomRow(-bottomDiff); - } else { - this.vDomScrollPosBottom = this.scrollTop; - } - } - } else { - //scrolling down - if (topDiff >= 0) { - - //hide top row if needed - if (this.scrollTop > this.vDomWindowBuffer) { - - this._removeTopRow(topDiff); - } else { - this.vDomScrollPosTop = this.scrollTop; - } - } - - if (bottomDiff >= 0) { - - this._addBottomRow(bottomDiff); - } - } - } -}; - -RowManager.prototype._addTopRow = function (topDiff) { - var i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - - var table = this.tableElement, - rows = this.getDisplayRows(); - - if (this.vDomTop) { - var index = this.vDomTop - 1, - topRow = rows[index], - topRowHeight = topRow.getHeight() || this.vDomRowHeight; - - //hide top row if needed - if (topDiff >= topRowHeight) { - this.styleRow(topRow, index); - table.insertBefore(topRow.getElement(), table.firstChild); - if (!topRow.initialized || !topRow.heightInitialized) { - this.vDomTopNewRows.push(topRow); - - if (!topRow.heightInitialized) { - topRow.clearCellHeight(); - } - } - topRow.initialize(); - - this.vDomTopPad -= topRowHeight; - - if (this.vDomTopPad < 0) { - this.vDomTopPad = index * this.vDomRowHeight; - } - - if (!index) { - this.vDomTopPad = 0; - } - - table.style.paddingTop = this.vDomTopPad + "px"; - this.vDomScrollPosTop -= topRowHeight; - this.vDomTop--; - } - - topDiff = -(this.scrollTop - this.vDomScrollPosTop); - - if (topRow.getHeight() > this.vDomWindowBuffer) { - this.vDomWindowBuffer = topRow.getHeight() * 2; - } - - if (i < this.vDomMaxRenderChain && this.vDomTop && topDiff >= (rows[this.vDomTop - 1].getHeight() || this.vDomRowHeight)) { - this._addTopRow(topDiff, i + 1); - } else { - 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 && arguments[1] !== undefined ? arguments[1] : 0; - - var table = this.tableElement, - rows = this.getDisplayRows(); - - if (this.vDomBottom < this.displayRowsCount - 1) { - var index = this.vDomBottom + 1, - bottomRow = rows[index], - bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight; - - //hide bottom row if needed - if (bottomDiff >= bottomRowHeight) { - this.styleRow(bottomRow, index); - table.appendChild(bottomRow.getElement()); - - if (!bottomRow.initialized || !bottomRow.heightInitialized) { - this.vDomBottomNewRows.push(bottomRow); - - if (!bottomRow.heightInitialized) { - bottomRow.clearCellHeight(); - } - } - - bottomRow.initialize(); - - this.vDomBottomPad -= bottomRowHeight; - - if (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; - - if (bottomRow.getHeight() > this.vDomWindowBuffer) { - this.vDomWindowBuffer = bottomRow.getHeight() * 2; - } - - if (i < this.vDomMaxRenderChain && this.vDomBottom < this.displayRowsCount - 1 && bottomDiff >= (rows[this.vDomBottom + 1].getHeight() || this.vDomRowHeight)) { - this._addBottomRow(bottomDiff, i + 1); - } else { - 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(); - - if (rowEl.parentNode) { - rowEl.parentNode.removeChild(rowEl); - } - - this.vDomBottomPad += bottomRowHeight; - - if (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; -}; - -//normalize height of active rows -RowManager.prototype.normalizeHeight = function () { - this.activeRows.forEach(function (row) { - row.normalizeHeight(); - }); -}; - -//adjust the height of the table holder to fit in the Tabulator element -RowManager.prototype.adjustTableSize = function () { - var initialHeight = this.element.clientHeight, - modExists; - - if (this.renderMode === "virtual") { - 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)"; - this.element.style.height = "calc(100% - " + otherHeight + "px)"; - this.element.style.maxHeight = "calc(100% - " + otherHeight + "px)"; - } else { - 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; - - //check if the table has changed size when dealing with variable height tables - if (!this.fixedHeight && initialHeight != this.element.clientHeight) { - modExists = this.table.modExists("resizeTable"); - - if (modExists && !this.table.modules.resizeTable.autoResize || !modExists) { - this.redraw(); - } - } - } -}; - -//renitialize all rows -RowManager.prototype.reinitialize = function () { - this.rows.forEach(function (row) { - row.reinitialize(); - }); -}; - -//prevent table from being redrawn -RowManager.prototype.blockRedraw = function () { - this.redrawBlock = true; - this.redrawBlockRestoreConfig = false; -}; - -//restore table redrawing -RowManager.prototype.restoreRedraw = function () { - this.redrawBlock = false; - - if (this.redrawBlockRestoreConfig) { - this.refreshActiveData(this.redrawBlockRestoreConfig.stage, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition); - - this.redrawBlockRestoreConfig = false; - } else { - if (this.redrawBlockRederInPosition) { - this.reRenderInPosition(); - } - } - - this.redrawBlockRederInPosition = false; -}; - -//redraw table -RowManager.prototype.redraw = function (force) { - var pos = 0, - left = this.scrollLeft; - - this.adjustTableSize(); - - this.table.tableWidth = this.table.element.clientWidth; - - if (!force) { - if (this.renderMode == "classic") { - - if (this.table.options.groupBy) { - this.refreshActiveData("group", false, false); - } else { - this._simpleRender(); - } - } else { - this.reRenderInPosition(); - this.scrollHorizontal(left); - } - - if (!this.displayRowsCount) { - if (this.table.options.placeholder) { - this.getElement().appendChild(this.table.options.placeholder); - } - } - } else { - this.renderTable(); - } -}; - -RowManager.prototype.resetScroll = function () { - this.element.scrollLeft = 0; - this.element.scrollTop = 0; - - if (this.table.browser === "ie") { - var event = document.createEvent("Event"); - event.initEvent("scroll", false, true); - this.element.dispatchEvent(event); - } else { - this.element.dispatchEvent(new Event('scroll')); - } -}; - -//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)) { - this._row.table.modules.dataTree.toggleRow(this._row); - } -}; - -RowComponent.prototype.getTreeParent = function () { - if (this._row.table.modExists("dataTree", true)) { - return this._row.table.modules.dataTree.getTreeParent(this._row); - } - - return false; -}; - -RowComponent.prototype.getTreeChildren = function () { - if (this._row.table.modExists("dataTree", true)) { - return this._row.table.modules.dataTree.getTreeChildren(this._row); - } - - return false; -}; - -RowComponent.prototype.addTreeChild = function (data, pos, index) { - if (this._row.table.modExists("dataTree", true)) { - return this._row.table.modules.dataTree.addTreeChildRow(this._row, data, pos, index); - } - - return false; -}; - -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 && arguments[2] !== undefined ? arguments[2] : "row"; - - this.table = parent.table; - this.parent = parent; - this.data = {}; - this.type = type; //type of element - this.element = this.createElement(); - this.modules = {}; //hold module variables; - this.cells = []; - this.height = 0; //hold element height - this.heightStyled = ""; //hold element height prestyled to improve render efficiency - this.manualHeight = false; //user has manually set row height - this.outerHeight = 0; //holde lements outer height - this.initialized = false; //element has been rendered - this.heightInitialized = false; //element has resized cells to fit - - this.component = null; - - this.setData(data); - this.generateElement(); -}; - -Row.prototype.createElement = function () { - var el = document.createElement("div"); - - el.classList.add("tabulator-row"); - el.setAttribute("role", "row"); - - return el; -}; - -Row.prototype.getElement = function () { - return this.element; -}; - -Row.prototype.detachElement = function () { - if (this.element && this.element.parentNode) { - this.element.parentNode.removeChild(this.element); - } -}; - -Row.prototype.generateElement = function () { - var self = this, - dblTap, - tapHold, - tap; - - //set row selection characteristics - if (self.table.options.selectable !== false && self.table.modExists("selectRow")) { - self.table.modules.selectRow.initializeRow(this); - } - - //setup movable rows - if (self.table.options.movableRows !== false && self.table.modExists("moveRow")) { - self.table.modules.moveRow.initializeRow(this); - } - - //setup data tree - if (self.table.options.dataTree !== false && self.table.modExists("dataTree")) { - self.table.modules.dataTree.initializeRow(this); - } - - //setup column colapse container - if (self.table.options.responsiveLayout === "collapse" && self.table.modExists("responsiveLayout")) { - self.table.modules.responsiveLayout.initializeRow(this); - } - - //set column menu - if (self.table.options.rowContextMenu && this.table.modExists("menu")) { - self.table.modules.menu.initializeRow(this); - } - - //handle row click events - if (self.table.options.rowClick) { - self.element.addEventListener("click", function (e) { - self.table.options.rowClick(e, self.getComponent()); - }); - } - - if (self.table.options.rowDblClick) { - self.element.addEventListener("dblclick", function (e) { - self.table.options.rowDblClick(e, self.getComponent()); - }); - } - - if (self.table.options.rowContext) { - self.element.addEventListener("contextmenu", function (e) { - self.table.options.rowContext(e, self.getComponent()); - }); - } - - //handle mouse events - if (self.table.options.rowMouseEnter) { - self.element.addEventListener("mouseenter", function (e) { - self.table.options.rowMouseEnter(e, self.getComponent()); - }); - } - - if (self.table.options.rowMouseLeave) { - self.element.addEventListener("mouseleave", function (e) { - self.table.options.rowMouseLeave(e, self.getComponent()); - }); - } - - if (self.table.options.rowMouseOver) { - self.element.addEventListener("mouseover", function (e) { - self.table.options.rowMouseOver(e, self.getComponent()); - }); - } - - if (self.table.options.rowMouseOut) { - self.element.addEventListener("mouseout", function (e) { - self.table.options.rowMouseOut(e, self.getComponent()); - }); - } - - if (self.table.options.rowMouseMove) { - self.element.addEventListener("mousemove", function (e) { - self.table.options.rowMouseMove(e, self.getComponent()); - }); - } - - if (self.table.options.rowTap) { - - tap = false; - - self.element.addEventListener("touchstart", function (e) { - tap = true; - }, { passive: true }); - - self.element.addEventListener("touchend", function (e) { - if (tap) { - self.table.options.rowTap(e, self.getComponent()); - } - - tap = false; - }); - } - - if (self.table.options.rowDblTap) { - - dblTap = null; - - self.element.addEventListener("touchend", function (e) { - - if (dblTap) { - clearTimeout(dblTap); - dblTap = null; - - self.table.options.rowDblTap(e, self.getComponent()); - } else { - - dblTap = setTimeout(function () { - clearTimeout(dblTap); - dblTap = null; - }, 300); - } - }); - } - - if (self.table.options.rowTapHold) { - - tapHold = null; - - self.element.addEventListener("touchstart", function (e) { - clearTimeout(tapHold); - - tapHold = setTimeout(function () { - clearTimeout(tapHold); - tapHold = null; - tap = false; - self.table.options.rowTapHold(e, self.getComponent()); - }, 1000); - }, { passive: true }); - - self.element.addEventListener("touchend", function (e) { - clearTimeout(tapHold); - tapHold = null; - }); - } -}; - -Row.prototype.generateCells = function () { - this.cells = this.table.columnManager.generateCells(this); -}; - -//functions to setup on first render -Row.prototype.initialize = function (force) { - var self = this; - - if (!self.initialized || force) { - - self.deleteCells(); - - while (self.element.firstChild) { - self.element.removeChild(self.element.firstChild); - } //handle frozen cells - if (this.table.modExists("frozenColumns")) { - this.table.modules.frozenColumns.layoutRow(this); - } - - this.generateCells(); - - self.cells.forEach(function (cell) { - self.element.appendChild(cell.getElement()); - cell.cellRendered(); - }); - - if (force) { - self.normalizeHeight(); - } - - //setup movable rows - if (self.table.options.dataTree && self.table.modExists("dataTree")) { - self.table.modules.dataTree.layoutRow(this); - } - - //setup column colapse container - if (self.table.options.responsiveLayout === "collapse" && self.table.modExists("responsiveLayout")) { - self.table.modules.responsiveLayout.layoutRow(this); - } - - if (self.table.options.rowFormatter) { - self.table.options.rowFormatter(self.getComponent()); - } - - //set resizable handles - if (self.table.options.resizableRows && self.table.modExists("resizeRows")) { - self.table.modules.resizeRows.initializeRow(self); - } - - self.initialized = true; - } -}; - -Row.prototype.reinitializeHeight = function () { - this.heightInitialized = false; - - if (this.element.offsetParent !== null) { - this.normalizeHeight(true); - } -}; - -Row.prototype.reinitialize = function () { - this.initialized = false; - this.heightInitialized = false; - - if (!this.manualHeight) { - this.height = 0; - this.heightStyled = ""; - } - - if (this.element.offsetParent !== null) { - this.initialize(true); - } -}; - -//get heights when doing bulk row style calcs in virtual DOM -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(); - if (height > maxHeight) { - maxHeight = height; - } - }); - - if (force) { - this.height = Math.max(maxHeight, minHeight); - } else { - this.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight); - } - - this.heightStyled = this.height ? this.height + "px" : ""; - this.outerHeight = this.element.offsetHeight; -}; - -//set of cells -Row.prototype.setCellHeight = function () { - this.cells.forEach(function (cell) { - cell.setHeight(); - }); - - this.heightInitialized = true; -}; - -Row.prototype.clearCellHeight = function () { - this.cells.forEach(function (cell) { - cell.clearHeight(); - }); -}; - -//normalize the height of elements in the row -Row.prototype.normalizeHeight = function (force) { - - if (force) { - this.clearCellHeight(); - } - - this.calcHeight(force); - - this.setCellHeight(); -}; - -// Row.prototype.setHeight = function(height){ -// this.height = height; - -// this.setCellHeight(); -// }; - -//set height of rows -Row.prototype.setHeight = function (height, force) { - if (this.height != height || force) { - - this.manualHeight = true; - - this.height = height; - this.heightStyled = height ? height + "px" : ""; - - this.setCellHeight(); - - // this.outerHeight = this.element.outerHeight(); - this.outerHeight = this.element.offsetHeight; - } -}; - -//return rows outer height -Row.prototype.getHeight = function () { - return this.outerHeight; -}; - -//return rows outer Width -Row.prototype.getWidth = function () { - return this.element.offsetWidth; -}; - -//////////////// Cell Management ///////////////// - -Row.prototype.deleteCell = function (cell) { - var index = this.cells.indexOf(cell); - - if (index > -1) { - this.cells.splice(index, 1); - } -}; - -//////////////// Data Management ///////////////// - -Row.prototype.setData = function (data) { - if (this.table.modExists("mutator")) { - data = this.table.modules.mutator.transformRow(data, "data"); - } - - this.data = data; - - if (this.table.options.reactiveData && this.table.modExists("reactiveData", true)) { - this.table.modules.reactiveData.watchRow(this); - } -}; - -//update the rows data -Row.prototype.updateData = function (updatedData) { - var _this15 = this; - - var visible = Tabulator.prototype.helpers.elVisible(this.element), - tempData = {}, - newRowData; - - return new Promise(function (resolve, reject) { - - if (typeof updatedData === "string") { - updatedData = JSON.parse(updatedData); - } - - if (_this15.table.options.reactiveData && _this15.table.modExists("reactiveData", true)) { - _this15.table.modules.reactiveData.block(); - } - - //mutate incomming data if needed - if (_this15.table.modExists("mutator")) { - - tempData = Object.assign(tempData, _this15.data); - tempData = Object.assign(tempData, updatedData); - - newRowData = _this15.table.modules.mutator.transformRow(tempData, "data", updatedData); - } else { - newRowData = updatedData; - } - - //set data - for (var attrname in newRowData) { - _this15.data[attrname] = newRowData[attrname]; - } - - 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 = _this15.table.columnManager.getColumnsByFieldRoot(attrname); - - columns.forEach(function (column) { - var cell = _this15.getCell(column.getField()); - - if (cell) { - var value = column.getFieldValue(newRowData); - if (cell.getValue() != value) { - cell.setValueProcessData(value); - - if (visible) { - cell.cellRendered(); - } - } - } - }); - } - - //Partial reinitialization if visible - if (visible) { - _this15.normalizeHeight(true); - - if (_this15.table.options.rowFormatter) { - _this15.table.options.rowFormatter(_this15.getComponent()); - } - } else { - _this15.initialized = false; - _this15.height = 0; - _this15.heightStyled = ""; - } - - 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(); - - _this15.table.options.rowUpdated.call(_this15.table, _this15.getComponent()); - - resolve(); - }); -}; - -Row.prototype.getData = function (transform) { - var self = this; - - if (transform) { - if (self.table.modExists("accessor")) { - return self.table.modules.accessor.transformRow(self.data, transform); - } - } else { - return this.data; - } -}; - -Row.prototype.getCell = function (column) { - var match = false; - - column = this.table.columnManager.findColumn(column); - - match = this.cells.find(function (cell) { - return cell.column === column; - }); - - return match; -}; - -Row.prototype.getCellIndex = function (findCell) { - return this.cells.findIndex(function (cell) { - return cell === findCell; - }); -}; - -Row.prototype.findNextEditableCell = function (index) { - var nextCell = false; - - if (index < this.cells.length - 1) { - for (var i = index + 1; i < this.cells.length; i++) { - var cell = this.cells[i]; - - if (cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())) { - var allowEdit = true; - - if (typeof cell.column.modules.edit.check == "function") { - allowEdit = cell.column.modules.edit.check(cell.getComponent()); - } - - if (allowEdit) { - nextCell = cell; - break; - } - } - } - } - - return nextCell; -}; - -Row.prototype.findPrevEditableCell = function (index) { - var prevCell = false; - - if (index > 0) { - for (var i = index - 1; i >= 0; i--) { - var cell = this.cells[i], - allowEdit = true; - - if (cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())) { - if (typeof cell.column.modules.edit.check == "function") { - allowEdit = cell.column.modules.edit.check(cell.getComponent()); - } - - if (allowEdit) { - prevCell = cell; - break; - } - } - } - } - - return prevCell; -}; - -Row.prototype.getCells = function () { - return this.cells; -}; - -Row.prototype.nextRow = function () { - var row = this.table.rowManager.nextDisplayRow(this, true); - return row || false; -}; - -Row.prototype.prevRow = function () { - var row = this.table.rowManager.prevDisplayRow(this, true); - return row || false; -}; - -Row.prototype.moveToRow = function (to, before) { - var toRow = this.table.rowManager.findRow(to); - - if (toRow) { - this.table.rowManager.moveRowActual(this, toRow, !before); - this.table.rowManager.refreshActiveData("display", false, true); - } else { - console.warn("Move Error - No matching row found:", to); - } -}; - -Row.prototype.validate = function () { - var invalid = []; - - this.cells.forEach(function (cell) { - if (!cell.validate()) { - invalid.push(cell.getComponent()); - } - }); - - return invalid.length ? invalid : true; -}; - -///////////////////// Actions ///////////////////// - -Row.prototype.delete = function () { - var _this16 = this; - - return new Promise(function (resolve, reject) { - var index, rows; - - if (_this16.table.options.history && _this16.table.modExists("history")) { - - 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 = _this16.table.rowManager.getRowIndex(_this16); - - if (index) { - 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); - - //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); - // } - - //remove any reactive data watchers from row object - if (this.table.options.reactiveData && this.table.modExists("reactiveData", true)) {} - // this.table.modules.reactiveData.unwatchRow(this); - - - //remove from group - if (this.modules.group) { - this.modules.group.removeRow(this); - } - - this.table.rowManager.deleteRow(this, blockRedraw); - - this.deleteCells(); - - this.initialized = false; - this.heightInitialized = false; - - if (this.table.options.dataTree && this.table.modExists("dataTree", true)) { - this.table.modules.dataTree.rowDelete(this); - } - - //recalc column calculations if present - if (this.table.modExists("columnCalcs")) { - 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.deleteCells = function () { - var cellCount = this.cells.length; - - for (var i = 0; i < cellCount; i++) { - this.cells[0].delete(); - } -}; - -Row.prototype.wipe = function () { - this.deleteCells(); - - while (this.element.firstChild) { - this.element.removeChild(this.element.firstChild); - }this.element = false; - this.modules = {}; - - if (this.element.parentNode) { - this.element.parentNode.removeChild(this.element); - } -}; - -Row.prototype.getGroup = function () { - return this.modules.group || false; -}; - -//////////////// Object Generation ///////////////// -Row.prototype.getComponent = function () { - if (!this.component) { - this.component = new RowComponent(this); - } - - return this.component; -}; - -//public row object -var CellComponent = function CellComponent(cell) { - this._cell = cell; -}; - -CellComponent.prototype.getValue = function () { - return this._cell.getValue(); -}; - -CellComponent.prototype.getOldValue = function () { - return this._cell.getOldValue(); -}; - -CellComponent.prototype.getElement = function () { - return this._cell.getElement(); -}; - -CellComponent.prototype.getRow = function () { - return this._cell.row.getComponent(); -}; - -CellComponent.prototype.getData = function () { - return this._cell.row.getData(); -}; - -CellComponent.prototype.getField = function () { - return this._cell.column.getField(); -}; - -CellComponent.prototype.getColumn = function () { - return this._cell.column.getComponent(); -}; - -CellComponent.prototype.setValue = function (value, mutate) { - if (typeof mutate == "undefined") { - mutate = true; - } - - this._cell.setValue(value, mutate); -}; - -CellComponent.prototype.restoreOldValue = function () { - this._cell.setValueActual(this._cell.getOldValue()); -}; - -CellComponent.prototype.edit = function (force) { - return this._cell.edit(force); -}; - -CellComponent.prototype.cancelEdit = function () { - this._cell.cancelEdit(); -}; - -CellComponent.prototype.isEdited = function () { - return !!this._cell.modules.edit && this._cell.modules.edit.edited; -}; - -CellComponent.prototype.clearEdited = function () { - if (self.table.modExists("edit", true)) { - this._cell.table.modules.edit.clearEdited(this._cell); - } -}; - -CellComponent.prototype.isValid = function () { - return this._cell.modules.validate ? !this._cell.modules.validate.invalid : true; -}; - -CellComponent.prototype.validate = function () { - return this._cell.validate(); -}; - -CellComponent.prototype.clearValidation = function () { - if (self.table.modExists("validate", true)) { - this._cell.table.modules.validate.clearValidation(this._cell); - } -}; - -CellComponent.prototype.nav = function () { - return this._cell.nav(); -}; - -CellComponent.prototype.checkHeight = function () { - this._cell.checkHeight(); -}; - -CellComponent.prototype.getTable = function () { - return this._cell.table; -}; - -CellComponent.prototype._getSelf = function () { - return this._cell; -}; - -var Cell = function Cell(column, row) { - - this.table = column.table; - this.column = column; - this.row = row; - this.element = null; - this.value = null; - this.oldValue = null; - this.modules = {}; - - this.height = null; - this.width = null; - this.minWidth = null; - - this.component = null; - - this.build(); -}; - -//////////////// Setup Functions ///////////////// - -//generate element -Cell.prototype.build = function () { - this.generateElement(); - - this.setWidth(); - - this._configureCell(); - - this.setValueActual(this.column.getFieldValue(this.row.data)); -}; - -Cell.prototype.generateElement = function () { - this.element = document.createElement('div'); - this.element.className = "tabulator-cell"; - this.element.setAttribute("role", "gridcell"); - this.element = this.element; -}; - -Cell.prototype._configureCell = function () { - var self = this, - cellEvents = self.column.cellEvents, - element = self.element, - field = this.column.getField(), - vertAligns = { - top: "flex-start", - bottom: "flex-end", - middle: "center" - }, - hozAligns = { - left: "flex-start", - right: "flex-end", - center: "center" - }; - - //set text alignment - element.style.textAlign = self.column.hozAlign; - - if (self.column.vertAlign) { - element.style.display = "inline-flex"; - - element.style.alignItems = vertAligns[self.column.vertAlign] || ""; - - if (self.column.hozAlign) { - element.style.justifyContent = hozAligns[self.column.hozAlign] || ""; - } - } - - if (field) { - element.setAttribute("tabulator-field", field); - } - - //add class to cell if needed - if (self.column.definition.cssClass) { - var classNames = self.column.definition.cssClass.split(" "); - classNames.forEach(function (className) { - element.classList.add(className); - }); - } - - //update tooltip on mouse enter - if (this.table.options.tooltipGenerationMode === "hover") { - element.addEventListener("mouseenter", function (e) { - self._generateTooltip(); - }); - } - - self._bindClickEvents(cellEvents); - - self._bindTouchEvents(cellEvents); - - self._bindMouseEvents(cellEvents); - - if (self.column.modules.edit) { - self.table.modules.edit.bindEditor(self); - } - - if (self.column.definition.rowHandle && self.table.options.movableRows !== false && self.table.modExists("moveRow")) { - self.table.modules.moveRow.initializeCell(self); - } - - //hide cell if not visible - if (!self.column.visible) { - self.hide(); - } -}; - -Cell.prototype._bindClickEvents = function (cellEvents) { - var self = this, - element = self.element; - - //set event bindings - if (cellEvents.cellClick || self.table.options.cellClick) { - element.addEventListener("click", function (e) { - var component = self.getComponent(); - - if (cellEvents.cellClick) { - cellEvents.cellClick.call(self.table, e, component); - } - - if (self.table.options.cellClick) { - self.table.options.cellClick.call(self.table, e, component); - } - }); - } - - if (cellEvents.cellDblClick || this.table.options.cellDblClick) { - element.addEventListener("dblclick", function (e) { - var component = self.getComponent(); - - if (cellEvents.cellDblClick) { - cellEvents.cellDblClick.call(self.table, e, component); - } - - if (self.table.options.cellDblClick) { - self.table.options.cellDblClick.call(self.table, e, component); - } - }); - } else { - element.addEventListener("dblclick", function (e) { - - if (self.table.modExists("edit")) { - if (self.table.modules.edit.currentCell === self) { - return; //prevent instant selection of editor content - } - } - - e.preventDefault(); - - try { - if (document.selection) { - // IE - var range = document.body.createTextRange(); - range.moveToElementText(self.element); - range.select(); - } else if (window.getSelection) { - var range = document.createRange(); - range.selectNode(self.element); - window.getSelection().removeAllRanges(); - window.getSelection().addRange(range); - } - } catch (e) {} - }); - } - - if (cellEvents.cellContext || this.table.options.cellContext) { - element.addEventListener("contextmenu", function (e) { - var component = self.getComponent(); - - if (cellEvents.cellContext) { - cellEvents.cellContext.call(self.table, e, component); - } - - if (self.table.options.cellContext) { - self.table.options.cellContext.call(self.table, e, component); - } - }); - } -}; - -Cell.prototype._bindMouseEvents = function (cellEvents) { - var self = this, - element = self.element; - - if (cellEvents.cellMouseEnter || self.table.options.cellMouseEnter) { - element.addEventListener("mouseenter", function (e) { - var component = self.getComponent(); - - if (cellEvents.cellMouseEnter) { - cellEvents.cellMouseEnter.call(self.table, e, component); - } - - if (self.table.options.cellMouseEnter) { - self.table.options.cellMouseEnter.call(self.table, e, component); - } - }); - } - - if (cellEvents.cellMouseLeave || self.table.options.cellMouseLeave) { - element.addEventListener("mouseleave", function (e) { - var component = self.getComponent(); - - if (cellEvents.cellMouseLeave) { - cellEvents.cellMouseLeave.call(self.table, e, component); - } - - if (self.table.options.cellMouseLeave) { - self.table.options.cellMouseLeave.call(self.table, e, component); - } - }); - } - - if (cellEvents.cellMouseOver || self.table.options.cellMouseOver) { - element.addEventListener("mouseover", function (e) { - var component = self.getComponent(); - - if (cellEvents.cellMouseOver) { - cellEvents.cellMouseOver.call(self.table, e, component); - } - - if (self.table.options.cellMouseOver) { - self.table.options.cellMouseOver.call(self.table, e, component); - } - }); - } - - if (cellEvents.cellMouseOut || self.table.options.cellMouseOut) { - element.addEventListener("mouseout", function (e) { - var component = self.getComponent(); - - if (cellEvents.cellMouseOut) { - cellEvents.cellMouseOut.call(self.table, e, component); - } - - if (self.table.options.cellMouseOut) { - self.table.options.cellMouseOut.call(self.table, e, component); - } - }); - } - - if (cellEvents.cellMouseMove || self.table.options.cellMouseMove) { - element.addEventListener("mousemove", function (e) { - var component = self.getComponent(); - - if (cellEvents.cellMouseMove) { - cellEvents.cellMouseMove.call(self.table, e, component); - } - - if (self.table.options.cellMouseMove) { - self.table.options.cellMouseMove.call(self.table, e, component); - } - }); - } -}; - -Cell.prototype._bindTouchEvents = function (cellEvents) { - var self = this, - element = self.element, - dblTap, - tapHold, - tap; - - if (cellEvents.cellTap || this.table.options.cellTap) { - tap = false; - - element.addEventListener("touchstart", function (e) { - tap = true; - }, { passive: true }); - - element.addEventListener("touchend", function (e) { - if (tap) { - var component = self.getComponent(); - - if (cellEvents.cellTap) { - cellEvents.cellTap.call(self.table, e, component); - } - - if (self.table.options.cellTap) { - self.table.options.cellTap.call(self.table, e, component); - } - } - - tap = false; - }); - } - - if (cellEvents.cellDblTap || this.table.options.cellDblTap) { - dblTap = null; - - element.addEventListener("touchend", function (e) { - - if (dblTap) { - clearTimeout(dblTap); - dblTap = null; - - var component = self.getComponent(); - - if (cellEvents.cellDblTap) { - cellEvents.cellDblTap.call(self.table, e, component); - } - - if (self.table.options.cellDblTap) { - self.table.options.cellDblTap.call(self.table, e, component); - } - } else { - - dblTap = setTimeout(function () { - clearTimeout(dblTap); - dblTap = null; - }, 300); - } - }); - } - - if (cellEvents.cellTapHold || this.table.options.cellTapHold) { - tapHold = null; - - element.addEventListener("touchstart", function (e) { - clearTimeout(tapHold); - - tapHold = setTimeout(function () { - clearTimeout(tapHold); - tapHold = null; - tap = false; - var component = self.getComponent(); - - if (cellEvents.cellTapHold) { - cellEvents.cellTapHold.call(self.table, e, component); - } - - if (self.table.options.cellTapHold) { - self.table.options.cellTapHold.call(self.table, e, component); - } - }, 1000); - }, { passive: true }); - - element.addEventListener("touchend", function (e) { - clearTimeout(tapHold); - tapHold = null; - }); - } -}; - -//generate cell contents -Cell.prototype._generateContents = function () { - var val; - - if (this.table.modExists("format")) { - val = this.table.modules.format.formatValue(this); - } else { - val = this.element.innerHTML = this.value; - } - - switch (typeof val === 'undefined' ? 'undefined' : _typeof(val)) { - case "object": - if (val instanceof Node) { - - //clear previous cell contents - while (this.element.firstChild) { - this.element.removeChild(this.element.firstChild); - }this.element.appendChild(val); - } else { - this.element.innerHTML = ""; - - if (val != null) { - console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", val); - } - } - break; - case "undefined": - case "null": - this.element.innerHTML = ""; - break; - default: - this.element.innerHTML = val; - } -}; - -Cell.prototype.cellRendered = function () { - if (this.table.modExists("format") && this.table.modules.format.cellRendered) { - this.table.modules.format.cellRendered(this); - } -}; - -//generate tooltip text -Cell.prototype._generateTooltip = function () { - var tooltip = this.column.tooltip; - - if (tooltip) { - if (tooltip === true) { - tooltip = this.value; - } else if (typeof tooltip == "function") { - tooltip = tooltip(this.getComponent()); - - if (tooltip === false) { - tooltip = ""; - } - } - - if (typeof tooltip === "undefined") { - tooltip = ""; - } - - this.element.setAttribute("title", tooltip); - } else { - this.element.setAttribute("title", ""); - } -}; - -//////////////////// Getters //////////////////// -Cell.prototype.getElement = function () { - return this.element; -}; - -Cell.prototype.getValue = function () { - return this.value; -}; - -Cell.prototype.getOldValue = function () { - return this.oldValue; -}; - -//////////////////// Actions //////////////////// - -Cell.prototype.setValue = function (value, mutate) { - - var changed = this.setValueProcessData(value, mutate), - component; - - if (changed) { - if (this.table.options.history && this.table.modExists("history")) { - this.table.modules.history.action("cellEdit", this, { oldValue: this.oldValue, newValue: this.value }); - } - - component = this.getComponent(); - - if (this.column.cellEvents.cellEdited) { - this.column.cellEvents.cellEdited.call(this.table, component); - } - - this.cellRendered(); - - this.table.options.cellEdited.call(this.table, component); - - this.table.options.dataEdited.call(this.table, this.table.rowManager.getData()); - } -}; - -Cell.prototype.setValueProcessData = function (value, mutate) { - var changed = false; - - if (this.value != value) { - - changed = true; - - if (mutate) { - if (this.column.modules.mutate) { - value = this.table.modules.mutator.transformCell(this, value); - } - } - } - - this.setValueActual(value); - - if (changed && this.table.modExists("columnCalcs")) { - if (this.column.definition.topCalc || this.column.definition.bottomCalc) { - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - - if (this.table.options.columnCalcs == "table" || this.table.options.columnCalcs == "both") { - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } - - if (this.table.options.columnCalcs != "table") { - this.table.modules.columnCalcs.recalcRowGroup(this.row); - } - } else { - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } - } - } - - return changed; -}; - -Cell.prototype.setValueActual = function (value) { - this.oldValue = this.value; - - this.value = value; - - if (this.table.options.reactiveData && this.table.modExists("reactiveData")) { - this.table.modules.reactiveData.block(); - } - - this.column.setFieldValue(this.row.data, value); - - if (this.table.options.reactiveData && this.table.modExists("reactiveData")) { - this.table.modules.reactiveData.unblock(); - } - - this._generateContents(); - this._generateTooltip(); - - //set resizable handles - if (this.table.options.resizableColumns && this.table.modExists("resizeColumns")) { - this.table.modules.resizeColumns.initializeColumn("cell", this.column, this.element); - } - - //set column menu - if (this.column.definition.contextMenu && this.table.modExists("menu")) { - this.table.modules.menu.initializeCell(this); - } - - //handle frozen cells - if (this.table.modExists("frozenColumns")) { - this.table.modules.frozenColumns.layoutElement(this.element, this.column); - } -}; - -Cell.prototype.setWidth = function () { - this.width = this.column.width; - this.element.style.width = this.column.widthStyled; -}; - -Cell.prototype.clearWidth = function () { - this.width = ""; - this.element.style.width = ""; -}; - -Cell.prototype.getWidth = function () { - return this.width || this.element.offsetWidth; -}; - -Cell.prototype.setMinWidth = function () { - this.minWidth = this.column.minWidth; - this.element.style.minWidth = this.column.minWidthStyled; -}; - -Cell.prototype.checkHeight = function () { - // var height = this.element.css("height"); - this.row.reinitializeHeight(); -}; - -Cell.prototype.clearHeight = function () { - this.element.style.height = ""; - this.height = null; -}; - -Cell.prototype.setHeight = function () { - this.height = this.row.height; - this.element.style.height = this.row.heightStyled; -}; - -Cell.prototype.getHeight = function () { - return this.height || this.element.offsetHeight; -}; - -Cell.prototype.show = function () { - this.element.style.display = ""; -}; - -Cell.prototype.hide = function () { - this.element.style.display = "none"; -}; - -Cell.prototype.edit = function (force) { - if (this.table.modExists("edit", true)) { - return this.table.modules.edit.editCell(this, force); - } -}; - -Cell.prototype.cancelEdit = function () { - if (this.table.modExists("edit", true)) { - var editing = this.table.modules.edit.getCurrentCell(); - - if (editing && editing._getSelf() === this) { - this.table.modules.edit.cancelEdit(); - } else { - console.warn("Cancel Editor Error - This cell is not currently being edited "); - } - } -}; - -Cell.prototype.validate = function () { - if (this.column.modules.validate && this.table.modExists("validate", true)) { - var valid = this.table.modules.validate.validate(this.column.modules.validate, this, this.getValue()); - - return valid === true; - } else { - return true; - } -}; - -Cell.prototype.delete = function () { - if (!this.table.rowManager.redrawBlock) { - this.element.parentNode.removeChild(this.element); - } - - if (this.modules.validate && this.modules.validate.invalid) { - this.table.modules.validate.clearValidation(this); - } - - if (this.modules.edit && this.modules.edit.edited) { - this.table.modules.edit.clearEdited(this); - } - - this.element = false; - this.column.deleteCell(this); - this.row.deleteCell(this); - this.calcs = {}; -}; - -//////////////// Navigation ///////////////// - -Cell.prototype.nav = function () { - - var self = this, - nextCell = false, - index = this.row.getCellIndex(this); - - return { - next: function next() { - var nextCell = this.right(), - nextRow; - - if (!nextCell) { - nextRow = self.table.rowManager.nextDisplayRow(self.row, true); - - if (nextRow) { - nextCell = nextRow.findNextEditableCell(-1); - - if (nextCell) { - nextCell.edit(); - return true; - } - } - } else { - return true; - } - - return false; - }, - prev: function prev() { - var nextCell = this.left(), - prevRow; - - if (!nextCell) { - prevRow = self.table.rowManager.prevDisplayRow(self.row, true); - - if (prevRow) { - nextCell = prevRow.findPrevEditableCell(prevRow.cells.length); - - if (nextCell) { - nextCell.edit(); - return true; - } - } - } else { - return true; - } - - return false; - }, - left: function left() { - - nextCell = self.row.findPrevEditableCell(index); - - if (nextCell) { - nextCell.edit(); - return true; - } else { - return false; - } - }, - right: function right() { - nextCell = self.row.findNextEditableCell(index); - - if (nextCell) { - nextCell.edit(); - return true; - } else { - return false; - } - }, - up: function up() { - var nextRow = self.table.rowManager.prevDisplayRow(self.row, true); - - if (nextRow) { - nextRow.cells[index].edit(); - } - }, - down: function down() { - var nextRow = self.table.rowManager.nextDisplayRow(self.row, true); - - if (nextRow) { - nextRow.cells[index].edit(); - } - } - - }; -}; - -Cell.prototype.getIndex = function () { - this.row.getCellIndex(this); -}; - -//////////////// Object Generation ///////////////// -Cell.prototype.getComponent = function () { - - if (!this.component) { - this.component = new CellComponent(this); - } - - return this.component; -}; -var FooterManager = function FooterManager(table) { - this.table = table; - this.active = false; - this.element = this.createElement(); //containing element - this.external = false; - this.links = []; - - this._initialize(); -}; - -FooterManager.prototype.createElement = function () { - var el = document.createElement("div"); - - el.classList.add("tabulator-footer"); - - return el; -}; - -FooterManager.prototype._initialize = function (element) { - if (this.table.options.footerElement) { - - switch (_typeof(this.table.options.footerElement)) { - case "string": - - if (this.table.options.footerElement[0] === "<") { - this.element.innerHTML = this.table.options.footerElement; - } else { - this.external = true; - this.element = document.querySelector(this.table.options.footerElement); - } - break; - default: - this.element = this.table.options.footerElement; - break; - } - } -}; - -FooterManager.prototype.getElement = function () { - return this.element; -}; - -FooterManager.prototype.append = function (element, parent) { - this.activate(parent); - - this.element.appendChild(element); - this.table.rowManager.adjustTableSize(); -}; - -FooterManager.prototype.prepend = function (element, parent) { - this.activate(parent); - - this.element.insertBefore(element, this.element.firstChild); - this.table.rowManager.adjustTableSize(); -}; - -FooterManager.prototype.remove = function (element) { - element.parentNode.removeChild(element); - this.deactivate(); -}; - -FooterManager.prototype.deactivate = function (force) { - if (!this.element.firstChild || force) { - if (!this.external) { - this.element.parentNode.removeChild(this.element); - } - this.active = false; - } - - // this.table.rowManager.adjustTableSize(); -}; - -FooterManager.prototype.activate = function (parent) { - if (!this.active) { - this.active = true; - if (!this.external) { - this.table.element.appendChild(this.getElement()); - this.table.element.style.display = ''; - } - } - - if (parent) { - this.links.push(parent); - } -}; - -FooterManager.prototype.redraw = function () { - this.links.forEach(function (link) { - link.footerRedraw(); - }); -}; - -var Tabulator = function Tabulator(element, options) { - - this.options = {}; - - this.columnManager = null; // hold Column Manager - this.rowManager = null; //hold Row Manager - this.footerManager = null; //holder Footer Manager - 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.modules = {}; //hold all modules bound to this table - - this.initializeElement(element); - this.initializeOptions(options || {}); - this._create(); - - Tabulator.prototype.comms.register(this); //register table for inderdevice communication -}; - -//default setup options -Tabulator.prototype.defaultOptions = { - - height: false, //height of tabulator - minHeight: false, //minimum height of tabulator - maxHeight: false, //maximum height of tabulator - - layout: "fitData", ///layout type "fitColumns" | "fitData" - layoutColumnsOnNewData: false, //update column widths on setData - - columnMinWidth: 40, //minimum global width for a column - columnHeaderVertAlign: "top", //vertical alignment of column headers - columnVertAlign: false, // DEPRECATED - Left to allow warning - - resizableColumns: true, //resizable columns - resizableRows: false, //resizable rows - autoResize: true, //auto resize table - - columns: [], //store for colum header info - - cellHozAlign: "", //horizontal align columns - cellVertAlign: "", //certical align columns - - - data: [], //default starting data - - autoColumns: false, //build columns from data row structure - - reactiveData: false, //enable data reactivity - - nestedFieldSeparator: ".", //seperatpr for nested data - - tooltips: false, //Tool tip value - tooltipsHeader: false, //Tool tip for headers - tooltipGenerationMode: "load", //when to generate tooltips - - initialSort: false, //initial sorting criteria - initialFilter: false, //initial filtering criteria - initialHeaderFilter: false, //initial header filtering criteria - - columnHeaderSortMulti: true, //multiple or single column sorting - - sortOrderReverse: false, //reverse internal sort ordering - - headerSort: true, //set default global header sort - headerSortTristate: false, //set default tristate header sorting - - footerElement: false, //hold footer element - - index: "id", //filed for row index - - keybindings: [], //array for keybindings - - tabEndNewRow: false, //create new row when tab to end of table - - invalidOptionWarnings: true, //allow toggling of invalid option warnings - - clipboard: false, //enable clipboard - clipboardCopyStyled: true, //formatted table data - clipboardCopyConfig: false, //clipboard config - clipboardCopyFormatter: false, //DEPRICATED - REMOVE in 5.0 - clipboardCopyRowRange: "active", //restrict clipboard to visible rows only - clipboardPasteParser: "table", //convert pasted clipboard data to rows - clipboardPasteAction: "insert", //how to insert pasted data into the table - - clipboardCopied: function clipboardCopied() {}, //data has been copied to the clipboard - clipboardPasted: function clipboardPasted() {}, //data has been pasted into the table - clipboardPasteError: function clipboardPasteError() {}, //data has not successfully been pasted into the table - - downloadDataFormatter: false, //function to manipulate table data before it is downloaded - downloadReady: function downloadReady(data, blob) { - return blob; - }, //function to manipulate download data - downloadComplete: false, //function to manipulate download data - downloadConfig: {}, //download config - downloadRowRange: "active", //restrict download to active rows only - - dataTree: false, //enable data tree - dataTreeElementColumn: false, - dataTreeBranchElement: true, //show data tree branch element - dataTreeChildIndent: 9, //data tree child indent in px - dataTreeChildField: "_children", //data tre column field to look for child rows - dataTreeCollapseElement: false, //data tree row collapse element - dataTreeExpandElement: false, //data tree row expand element - dataTreeStartExpanded: false, - dataTreeRowExpanded: function dataTreeRowExpanded() {}, //row has been expanded - dataTreeRowCollapsed: function dataTreeRowCollapsed() {}, //row has been collapsed - dataTreeChildColumnCalcs: false, //include visible data tree rows in column calculations - dataTreeSelectPropagate: false, //seleccting a parent row selects its children - - printAsHtml: false, //enable print as html - printFormatter: false, //printing page formatter - printHeader: false, //page header contents - printFooter: false, //page footer contents - printCopyStyle: true, //DEPRICATED - REMOVE in 5.0 - printStyled: true, //enable print as html styling - printVisibleRows: true, //DEPRICATED - REMOVE in 5.0 - printRowRange: "visible", //restrict print to visible rows only - printConfig: {}, //print config options - - addRowPos: "bottom", //position to insert blank rows, top|bottom - - selectable: "highlight", //highlight rows on hover - selectableRangeMode: "drag", //highlight rows on hover - selectableRollingSelection: true, //roll selection once maximum number of selectable rows is reached - selectablePersistence: true, // maintain selection when table view is updated - selectableCheck: function selectableCheck(data, row) { - return true; - }, //check wheather row is selectable - - headerFilterLiveFilterDelay: 300, //delay before updating column after user types in header filter - headerFilterPlaceholder: false, //placeholder text to display in header filters - - headerVisible: true, //hide header - - history: false, //enable edit history - - locale: false, //current system language - langs: {}, - - virtualDom: true, //enable DOM virtualization - virtualDomBuffer: 0, // set virtual DOM buffer size - - persistentLayout: false, //DEPRICATED - REMOVE in 5.0 - persistentSort: false, //DEPRICATED - REMOVE in 5.0 - persistentFilter: false, //DEPRICATED - REMOVE in 5.0 - persistenceID: "", //key for persistent storage - persistenceMode: true, //mode for storing persistence information - persistenceReaderFunc: false, //function for handling persistence data reading - persistenceWriterFunc: false, //function for handling persistence data writing - - persistence: false, - - responsiveLayout: false, //responsive layout flags - responsiveLayoutCollapseStartOpen: true, //start showing collapsed data - responsiveLayoutCollapseUseFormatters: true, //responsive layout collapse formatter - responsiveLayoutCollapseFormatter: false, //responsive layout collapse formatter - - pagination: false, //set pagination type - paginationSize: false, //set number of rows to a page - paginationInitialPage: 1, //initail page to show on load - paginationButtonCount: 5, // set count of page button - paginationSizeSelector: false, //add pagination size selector element - paginationElement: false, //element to hold pagination numbers - paginationDataSent: {}, //pagination data sent to the server - paginationDataReceived: {}, //pagination data received from the server - paginationAddRow: "page", //add rows on table or page - - ajaxURL: false, //url for ajax loading - ajaxURLGenerator: false, - ajaxParams: {}, //params for ajax loading - ajaxConfig: "get", //ajax request type - ajaxContentType: "form", //ajax request type - ajaxRequestFunc: false, //promise function - ajaxLoader: true, //show loader - ajaxLoaderLoading: false, //loader element - ajaxLoaderError: false, //loader element - ajaxFiltering: false, - ajaxSorting: false, - ajaxProgressiveLoad: false, //progressive loading - ajaxProgressiveLoadDelay: 0, //delay between requests - ajaxProgressiveLoadScrollMargin: 0, //margin before scroll begins - - groupBy: false, //enable table grouping and set field to group by - groupStartOpen: true, //starting state of group - groupValues: false, - - groupHeader: false, //header generation function - groupHeaderPrint: null, - groupHeaderClipboard: null, - groupHeaderHtmlOutput: null, - groupHeaderDownload: null, - - htmlOutputConfig: false, //html outypu config - - movableColumns: false, //enable movable columns - - movableRows: false, //enable movable rows - movableRowsConnectedTables: false, //tables for movable rows to be connected to - movableRowsConnectedElements: false, //other elements for movable rows to be connected to - movableRowsSender: false, - movableRowsReceiver: "insert", - movableRowsSendingStart: function movableRowsSendingStart() {}, - movableRowsSent: function movableRowsSent() {}, - movableRowsSentFailed: function movableRowsSentFailed() {}, - movableRowsSendingStop: function movableRowsSendingStop() {}, - movableRowsReceivingStart: function movableRowsReceivingStart() {}, - movableRowsReceived: function movableRowsReceived() {}, - movableRowsReceivedFailed: function movableRowsReceivedFailed() {}, - movableRowsReceivingStop: function movableRowsReceivingStop() {}, - movableRowsElementDrop: function movableRowsElementDrop() {}, - - scrollToRowPosition: "top", - scrollToRowIfVisible: true, - - scrollToColumnPosition: "left", - scrollToColumnIfVisible: true, - - rowFormatter: false, - rowFormatterPrint: null, - rowFormatterClipboard: null, - rowFormatterHtmlOutput: null, - - placeholder: false, - - //table building callbacks - tableBuilding: function tableBuilding() {}, - tableBuilt: function tableBuilt() {}, - - //render callbacks - renderStarted: function renderStarted() {}, - renderComplete: function renderComplete() {}, - - //row callbacks - rowClick: false, - rowDblClick: false, - rowContext: false, - rowTap: false, - rowDblTap: false, - rowTapHold: false, - rowMouseEnter: false, - rowMouseLeave: false, - rowMouseOver: false, - rowMouseOut: false, - rowMouseMove: false, - rowContextMenu: false, - rowAdded: function rowAdded() {}, - rowDeleted: function rowDeleted() {}, - rowMoved: function rowMoved() {}, - rowUpdated: function rowUpdated() {}, - rowSelectionChanged: function rowSelectionChanged() {}, - rowSelected: function rowSelected() {}, - rowDeselected: function rowDeselected() {}, - rowResized: function rowResized() {}, - - //cell callbacks - //row callbacks - cellClick: false, - cellDblClick: false, - cellContext: false, - cellTap: false, - cellDblTap: false, - cellTapHold: false, - cellMouseEnter: false, - cellMouseLeave: false, - cellMouseOver: false, - cellMouseOut: false, - cellMouseMove: false, - cellEditing: function cellEditing() {}, - cellEdited: function cellEdited() {}, - cellEditCancelled: function cellEditCancelled() {}, - - //column callbacks - columnMoved: false, - columnResized: function columnResized() {}, - columnTitleChanged: function columnTitleChanged() {}, - columnVisibilityChanged: function columnVisibilityChanged() {}, - - //HTML iport callbacks - htmlImporting: function htmlImporting() {}, - htmlImported: function htmlImported() {}, - - //data callbacks - dataLoading: function dataLoading() {}, - dataLoaded: function dataLoaded() {}, - dataEdited: function dataEdited() {}, - - //ajax callbacks - ajaxRequesting: function ajaxRequesting() {}, - ajaxResponse: false, - ajaxError: function ajaxError() {}, - - //filtering callbacks - dataFiltering: false, - dataFiltered: false, - - //sorting callbacks - dataSorting: function dataSorting() {}, - dataSorted: function dataSorted() {}, - - //grouping callbacks - groupToggleElement: "arrow", - groupClosedShowCalcs: false, - dataGrouping: function dataGrouping() {}, - dataGrouped: false, - groupVisibilityChanged: function groupVisibilityChanged() {}, - groupClick: false, - groupDblClick: false, - groupContext: false, - groupContextMenu: false, - groupTap: false, - groupDblTap: false, - groupTapHold: false, - - columnCalcs: true, - - //pagination callbacks - pageLoaded: function pageLoaded() {}, - - //localization callbacks - localized: function localized() {}, - - //validation callbacks - validationMode: "blocking", - validationFailed: function validationFailed() {}, - - //history callbacks - historyUndo: function historyUndo() {}, - historyRedo: function historyRedo() {}, - - //scroll callbacks - scrollHorizontal: function scrollHorizontal() {}, - scrollVertical: function scrollVertical() {} -}; - -Tabulator.prototype.initializeOptions = function (options) { - - //warn user if option is not available - if (options.invalidOptionWarnings !== false) { - for (var key in options) { - if (typeof this.defaultOptions[key] === "undefined") { - console.warn("Invalid table constructor option:", key); - } - } - } - - //assign options to table - for (var key in this.defaultOptions) { - if (key in options) { - this.options[key] = options[key]; - } else { - if (Array.isArray(this.defaultOptions[key])) { - this.options[key] = []; - } else if (_typeof(this.defaultOptions[key]) === "object" && this.defaultOptions[key] !== null) { - this.options[key] = {}; - } else { - this.options[key] = this.defaultOptions[key]; - } - } - } -}; - -Tabulator.prototype.initializeElement = function (element) { - - if (typeof HTMLElement !== "undefined" && element instanceof HTMLElement) { - this.element = element; - return true; - } else if (typeof element === "string") { - this.element = document.querySelector(element); - - if (this.element) { - return true; - } else { - console.error("Tabulator Creation Error - no element found matching selector: ", element); - return false; - } - } else { - console.error("Tabulator Creation Error - Invalid element provided:", element); - return false; - } -}; - -//convert depricated functionality to new functions -Tabulator.prototype._mapDepricatedFunctionality = function () { - - //map depricated persistance setup options - if (this.options.persistentLayout || this.options.persistentSort || this.options.persistentFilter) { - if (!this.options.persistence) { - this.options.persistence = {}; - } - } - - if (this.options.downloadDataFormatter) { - console.warn("DEPRECATION WARNING - downloadDataFormatter option has been deprecated"); - } - - if (typeof this.options.clipboardCopyHeader !== "undefined") { - this.options.columnHeaders = this.options.clipboardCopyHeader; - console.warn("DEPRECATION WARNING - clipboardCopyHeader option has been deprecated, please use the columnHeaders property on the clipboardCopyConfig option"); - } - - if (this.options.printVisibleRows !== true) { - console.warn("printVisibleRows option is deprecated, you should now use the printRowRange option"); - - this.options.persistence.printRowRange = "active"; - } - - if (this.options.printCopyStyle !== true) { - console.warn("printCopyStyle option is deprecated, you should now use the printStyled option"); - - this.options.persistence.printStyled = this.options.printCopyStyle; - } - - if (this.options.persistentLayout) { - console.warn("persistentLayout option is deprecated, you should now use the persistence option"); - - if (this.options.persistence !== true && typeof this.options.persistence.columns === "undefined") { - this.options.persistence.columns = true; - } - } - - if (this.options.persistentSort) { - console.warn("persistentSort option is deprecated, you should now use the persistence option"); - - if (this.options.persistence !== true && typeof this.options.persistence.sort === "undefined") { - this.options.persistence.sort = true; - } - } - - if (this.options.persistentFilter) { - console.warn("persistentFilter option is deprecated, you should now use the persistence option"); - - if (this.options.persistence !== true && typeof this.options.persistence.filter === "undefined") { - this.options.persistence.filter = true; - } - } - - if (this.options.columnVertAlign) { - console.warn("columnVertAlign option is deprecated, you should now use the columnHeaderVertAlign option"); - - this.options.columnHeaderVertAlign = this.options.columnVertAlign; - } -}; - -Tabulator.prototype._clearSelection = function () { - - this.element.classList.add("tabulator-block-select"); - - if (window.getSelection) { - if (window.getSelection().empty) { - // Chrome - window.getSelection().empty(); - } else if (window.getSelection().removeAllRanges) { - // Firefox - window.getSelection().removeAllRanges(); - } - } else if (document.selection) { - // IE? - document.selection.empty(); - } - - this.element.classList.remove("tabulator-block-select"); -}; - -//concreate table -Tabulator.prototype._create = function () { - this._clearObjectPointers(); - - this._mapDepricatedFunctionality(); - - this.bindModules(); - - if (this.element.tagName === "TABLE") { - if (this.modExists("htmlTableImport", true)) { - this.modules.htmlTableImport.parseTable(); - } - } - - this.columnManager = new ColumnManager(this); - this.rowManager = new RowManager(this); - this.footerManager = new FooterManager(this); - - this.columnManager.setRowManager(this.rowManager); - this.rowManager.setColumnManager(this.columnManager); - - this._buildElement(); - - this._loadInitialData(); -}; - -//clear pointers to objects in default config object -Tabulator.prototype._clearObjectPointers = function () { - this.options.columns = this.options.columns.slice(0); - - if (!this.options.reactiveData) { - this.options.data = this.options.data.slice(0); - } -}; - -//build tabulator element -Tabulator.prototype._buildElement = function () { - var _this17 = this; - - var element = this.element, - mod = this.modules, - options = this.options; - - options.tableBuilding.call(this); - - element.classList.add("tabulator"); - element.setAttribute("role", "grid"); - - //empty element - while (element.firstChild) { - element.removeChild(element.firstChild); - } //set table height - if (options.height) { - options.height = isNaN(options.height) ? options.height : options.height + "px"; - element.style.height = options.height; - } - - //set table min height - if (options.minHeight !== false) { - options.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + "px"; - element.style.minHeight = options.minHeight; - } - - //set table maxHeight - if (options.maxHeight !== false) { - options.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + "px"; - element.style.maxHeight = options.maxHeight; - } - - this.columnManager.initialize(); - this.rowManager.initialize(); - - this._detectBrowser(); - - if (this.modExists("layout", true)) { - mod.layout.initialize(options.layout); - } - - //set localization - if (options.headerFilterPlaceholder !== false) { - mod.localize.setHeaderFilterPlaceholder(options.headerFilterPlaceholder); - } - - for (var locale in options.langs) { - mod.localize.installLang(locale, options.langs[locale]); - } - - mod.localize.setLocale(options.locale); - - //configure placeholder element - if (typeof options.placeholder == "string") { - - var el = document.createElement("div"); - el.classList.add("tabulator-placeholder"); - - var span = document.createElement("span"); - span.innerHTML = options.placeholder; - - el.appendChild(span); - - options.placeholder = el; - } - - //build table elements - element.appendChild(this.columnManager.getElement()); - element.appendChild(this.rowManager.getElement()); - - if (options.footerElement) { - this.footerManager.activate(); - } - - if (options.persistence && this.modExists("persistence", true)) { - mod.persistence.initialize(); - } - - if (options.persistence && this.modExists("persistence", true) && mod.persistence.config.columns) { - options.columns = mod.persistence.load("columns", options.columns); - } - - if (options.movableRows && this.modExists("moveRow")) { - mod.moveRow.initialize(); - } - - if (options.autoColumns && this.options.data) { - this.columnManager.generateColumnsFromRowData(this.options.data); - } - - if (this.modExists("columnCalcs")) { - mod.columnCalcs.initialize(); - } - - this.columnManager.setColumns(options.columns); - - if (options.dataTree && this.modExists("dataTree", true)) { - mod.dataTree.initialize(); - } - - if (this.modExists("frozenRows")) { - this.modules.frozenRows.initialize(); - } - - if ((options.persistence && this.modExists("persistence", true) && mod.persistence.config.sort || options.initialSort) && this.modExists("sort", true)) { - var sorters = []; - - if (options.persistence && this.modExists("persistence", true) && mod.persistence.config.sort) { - sorters = mod.persistence.load("sort"); - - if (sorters === false && options.initialSort) { - sorters = options.initialSort; - } - } else if (options.initialSort) { - sorters = options.initialSort; - } - - mod.sort.setSort(sorters); - } - - if ((options.persistence && this.modExists("persistence", true) && mod.persistence.config.filter || options.initialFilter) && this.modExists("filter", true)) { - var filters = []; - - if (options.persistence && this.modExists("persistence", true) && mod.persistence.config.filter) { - filters = mod.persistence.load("filter"); - - if (filters === false && options.initialFilter) { - filters = options.initialFilter; - } - } else if (options.initialFilter) { - filters = options.initialFilter; - } - - mod.filter.setFilter(filters); - } - - if (options.initialHeaderFilter && this.modExists("filter", true)) { - options.initialHeaderFilter.forEach(function (item) { - - var column = _this17.columnManager.findColumn(item.field); - - if (column) { - mod.filter.setHeaderFilterValue(column, item.value); - } else { - console.warn("Column Filter Error - No matching column found:", item.field); - return false; - } - }); - } - - if (this.modExists("ajax")) { - mod.ajax.initialize(); - } - - if (options.pagination && this.modExists("page", true)) { - mod.page.initialize(); - } - - if (options.groupBy && this.modExists("groupRows", true)) { - mod.groupRows.initialize(); - } - - if (this.modExists("keybindings")) { - mod.keybindings.initialize(); - } - - if (this.modExists("selectRow")) { - mod.selectRow.clearSelectionData(true); - } - - if (options.autoResize && this.modExists("resizeTable")) { - mod.resizeTable.initialize(); - } - - if (this.modExists("clipboard")) { - mod.clipboard.initialize(); - } - - if (options.printAsHtml && this.modExists("print")) { - mod.print.initialize(); - } - - options.tableBuilt.call(this); -}; - -Tabulator.prototype._loadInitialData = function () { - var self = this; - - if (self.options.pagination && self.modExists("page")) { - self.modules.page.reset(true, true); - - if (self.options.pagination == "local") { - if (self.options.data.length) { - self.rowManager.setData(self.options.data, false, true); - } else { - if ((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists("ajax")) { - self.modules.ajax.loadData(false, true).then(function () {}).catch(function () { - if (self.options.paginationInitialPage) { - self.modules.page.setPage(self.options.paginationInitialPage); - } - }); - - return; - } else { - self.rowManager.setData(self.options.data, false, true); - } - } - - if (self.options.paginationInitialPage) { - self.modules.page.setPage(self.options.paginationInitialPage); - } - } else { - if (self.options.ajaxURL) { - self.modules.page.setPage(self.options.paginationInitialPage).then(function () {}).catch(function () {}); - } else { - self.rowManager.setData([], false, true); - } - } - } else { - if (self.options.data.length) { - self.rowManager.setData(self.options.data); - } else { - if ((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists("ajax")) { - self.modules.ajax.loadData(false, true).then(function () {}).catch(function () {}); - } else { - self.rowManager.setData(self.options.data, false, true); - } - } - } -}; - -//deconstructor -Tabulator.prototype.destroy = function () { - var element = this.element; - - Tabulator.prototype.comms.deregister(this); //deregister table from inderdevice communication - - if (this.options.reactiveData && this.modExists("reactiveData", true)) { - this.modules.reactiveData.unwatchData(); - } - - //clear row data - this.rowManager.rows.forEach(function (row) { - row.wipe(); - }); - - this.rowManager.rows = []; - this.rowManager.activeRows = []; - this.rowManager.displayRows = []; - - //clear event bindings - if (this.options.autoResize && this.modExists("resizeTable")) { - this.modules.resizeTable.clearBindings(); - } - - if (this.modExists("keybindings")) { - this.modules.keybindings.clearBindings(); - } - - //clear DOM - while (element.firstChild) { - element.removeChild(element.firstChild); - }element.classList.remove("tabulator"); -}; - -Tabulator.prototype._detectBrowser = function () { - var ua = navigator.userAgent || navigator.vendor || window.opera; - - if (ua.indexOf("Trident") > -1) { - this.browser = "ie"; - this.browserSlow = true; - } else if (ua.indexOf("Edge") > -1) { - this.browser = "edge"; - this.browserSlow = true; - } else if (ua.indexOf("Firefox") > -1) { - this.browser = "firefox"; - this.browserSlow = false; - } else { - this.browser = "other"; - this.browserSlow = false; - } - - 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)); -}; - -////////////////// Data Handling ////////////////// - -//block table redrawing -Tabulator.prototype.blockRedraw = function () { - return this.rowManager.blockRedraw(); -}; - -//restore table redrawing -Tabulator.prototype.restoreRedraw = function () { - return this.rowManager.restoreRedraw(); -}; - -//local data from local file -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) { - console.warn("File Load Error - File contents is invalid JSON", e); - reject(e); - return; - } - - _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(); - }); -}; - -//load data -Tabulator.prototype.setData = function (data, params, config) { - if (this.modExists("ajax")) { - this.modules.ajax.blockActiveRequest(); - } - - return this._setData(data, params, config, false, true); -}; - -Tabulator.prototype._setData = function (data, params, config, inPosition, columnsChanged) { - var self = this; - - if (typeof data === "string") { - if (data.indexOf("{") == 0 || data.indexOf("[") == 0) { - //data is a json encoded string - return self.rowManager.setData(JSON.parse(data), inPosition, columnsChanged); - } else { - - if (self.modExists("ajax", true)) { - if (params) { - self.modules.ajax.setParams(params); - } - - if (config) { - self.modules.ajax.setConfig(config); - } - - self.modules.ajax.setUrl(data); - - if (self.options.pagination == "remote" && self.modExists("page", true)) { - self.modules.page.reset(true, true); - return self.modules.page.setPage(1); - } else { - //assume data is url, make ajax call to url to get data - return self.modules.ajax.loadData(inPosition, columnsChanged); - } - } - } - } else { - if (data) { - //asume data is already an object - return self.rowManager.setData(data, inPosition, columnsChanged); - } else { - - //no data provided, check if ajaxURL is present; - if (self.modExists("ajax") && (self.modules.ajax.getUrl || self.options.ajaxURLGenerator)) { - - if (self.options.pagination == "remote" && self.modExists("page", true)) { - self.modules.page.reset(true, true); - return self.modules.page.setPage(1); - } else { - return self.modules.ajax.loadData(inPosition, columnsChanged); - } - } else { - //empty data - return self.rowManager.setData([], inPosition, columnsChanged); - } - } - } -}; - -//clear data -Tabulator.prototype.clearData = function () { - if (this.modExists("ajax")) { - this.modules.ajax.blockActiveRequest(); - } - - this.rowManager.clearData(); -}; - -//get table data array -Tabulator.prototype.getData = function (active) { - - if (active === true) { - console.warn("passing a boolean to the getData function is deprecated, you should now pass the string 'active'"); - active = "active"; - } - - return this.rowManager.getData(active); -}; - -//get table data array count -Tabulator.prototype.getDataCount = function (active) { - - if (active === true) { - console.warn("passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'"); - active = "active"; - } - - return this.rowManager.getDataCount(active); -}; - -//search for specific row components -Tabulator.prototype.searchRows = function (field, type, value) { - if (this.modExists("filter", true)) { - return this.modules.filter.search("rows", field, type, value); - } -}; - -//search for specific data -Tabulator.prototype.searchData = function (field, type, value) { - if (this.modExists("filter", true)) { - return this.modules.filter.search("data", field, type, value); - } -}; - -//get table html -Tabulator.prototype.getHtml = function (visible, style, config) { - if (this.modExists("export", true)) { - return this.modules.export.getHtml(visible, style, config); - } -}; - -//get print html -Tabulator.prototype.print = function (visible, style, config) { - if (this.modExists("print", true)) { - return this.modules.print.printFullscreen(visible, style, config); - } -}; - -//retrieve Ajax URL -Tabulator.prototype.getAjaxUrl = function () { - if (this.modExists("ajax", true)) { - return this.modules.ajax.getUrl(); - } -}; - -//replace data, keeping table in position with same sort -Tabulator.prototype.replaceData = function (data, params, config) { - if (this.modExists("ajax")) { - this.modules.ajax.blockActiveRequest(); - } - - return this._setData(data, params, config, true); -}; - -//update table data -Tabulator.prototype.updateData = function (data) { - var _this19 = this; - - var self = this; - var responses = 0; - - return new Promise(function (resolve, reject) { - if (_this19.modExists("ajax")) { - _this19.modules.ajax.blockActiveRequest(); - } - - if (typeof data === "string") { - data = JSON.parse(data); - } - - if (data) { - data.forEach(function (item) { - var row = self.rowManager.findRow(item[self.options.index]); - - if (row) { - responses++; - - row.updateData(item).then(function () { - responses--; - - if (!responses) { - resolve(); - } - }); - } - }); - } else { - 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) { - if (_this20.modExists("ajax")) { - _this20.modules.ajax.blockActiveRequest(); - } - - if (typeof data === "string") { - data = JSON.parse(data); - } - - if (data) { - _this20.rowManager.addRows(data, pos, index).then(function (rows) { - var output = []; - - rows.forEach(function (row) { - output.push(row.getComponent()); - }); - - resolve(output); - }); - } else { - console.warn("Update Error - No data provided"); - reject("Update Error - No data provided"); - } - }); -}; - -//update table data -Tabulator.prototype.updateOrAddData = function (data) { - var _this21 = this; - - var self = this, - rows = [], - responses = 0; - - return new Promise(function (resolve, reject) { - if (_this21.modExists("ajax")) { - _this21.modules.ajax.blockActiveRequest(); - } - - if (typeof data === "string") { - data = JSON.parse(data); - } - - if (data) { - data.forEach(function (item) { - var row = self.rowManager.findRow(item[self.options.index]); - - responses++; - - if (row) { - row.updateData(item).then(function () { - responses--; - rows.push(row.getComponent()); - - if (!responses) { - resolve(rows); - } - }); - } else { - self.rowManager.addRows(item).then(function (newRows) { - responses--; - rows.push(newRows[0].getComponent()); - - if (!responses) { - resolve(rows); - } - }); - } - }); - } else { - console.warn("Update Error - No data provided"); - reject("Update Error - No data provided"); - } - }); -}; - -//get row object -Tabulator.prototype.getRow = function (index) { - var row = this.rowManager.findRow(index); - - if (row) { - return row.getComponent(); - } else { - console.warn("Find Error - No matching row found:", index); - return false; - } -}; - -//get row object -Tabulator.prototype.getRowFromPosition = function (position, active) { - var row = this.rowManager.getRowFromPosition(position, active); - - if (row) { - return row.getComponent(); - } else { - console.warn("Find Error - No matching row found:", position); - return false; - } -}; - -//delete row from table -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++; - - if (count == index.length) { - if (successCount) { - self.rowManager.reRenderInPosition(); - resolve(); - } - } - } - - if (!Array.isArray(index)) { - index = [index]; - } - - //find matching rows - index.forEach(function (item) { - var row = _this22.rowManager.findRow(item, true); - - if (row) { - foundRows.push(row); - } else { - console.warn("Delete Error - No matching row found:", item); - reject("Delete Error - No matching row found"); - doneCheck(); - } - }); - - //sort rows into correct order to ensure smooth delete from table - 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); - }); - }); - }); -}; - -//add row to table -Tabulator.prototype.addRow = function (data, pos, index) { - var _this23 = this; - - return new Promise(function (resolve, reject) { - if (typeof data === "string") { - data = JSON.parse(data); - } - - _this23.rowManager.addRows(data, pos, index).then(function (rows) { - //recalc column calculations if present - if (_this23.modExists("columnCalcs")) { - _this23.modules.columnCalcs.recalc(_this23.rowManager.activeRows); - } - - resolve(rows[0].getComponent()); - }); - }); -}; - -//update a row if it exitsts otherwise create it -Tabulator.prototype.updateOrAddRow = function (index, data) { - var _this24 = this; - - return new Promise(function (resolve, reject) { - var row = _this24.rowManager.findRow(index); - - if (typeof data === "string") { - data = JSON.parse(data); - } - - if (row) { - row.updateData(data).then(function () { - //recalc column calculations if present - if (_this24.modExists("columnCalcs")) { - _this24.modules.columnCalcs.recalc(_this24.rowManager.activeRows); - } - - resolve(row.getComponent()); - }).catch(function (err) { - reject(err); - }); - } else { - row = _this24.rowManager.addRows(data).then(function (rows) { - //recalc column calculations if present - if (_this24.modExists("columnCalcs")) { - _this24.modules.columnCalcs.recalc(_this24.rowManager.activeRows); - } - - resolve(rows[0].getComponent()); - }).catch(function (err) { - reject(err); - }); - } - }); -}; - -//update row data -Tabulator.prototype.updateRow = function (index, data) { - var _this25 = this; - - return new Promise(function (resolve, reject) { - var row = _this25.rowManager.findRow(index); - - if (typeof data === "string") { - data = JSON.parse(data); - } - - if (row) { - row.updateData(data).then(function () { - resolve(row.getComponent()); - }).catch(function (err) { - reject(err); - }); - } else { - console.warn("Update Error - No matching row found:", index); - reject("Update Error - No matching row found"); - } - }); -}; - -//scroll to row in DOM -Tabulator.prototype.scrollToRow = function (index, position, ifVisible) { - var _this26 = this; - - return new Promise(function (resolve, reject) { - var row = _this26.rowManager.findRow(index); - - if (row) { - _this26.rowManager.scrollToRow(row, position, ifVisible).then(function () { - resolve(); - }).catch(function (err) { - reject(err); - }); - } else { - 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); - - if (fromRow) { - fromRow.moveToRow(to, after); - } else { - console.warn("Move Error - No matching row found:", from); - } -}; - -Tabulator.prototype.getRows = function (active) { - - if (active === true) { - console.warn("passing a boolean to the getRows function is deprecated, you should now pass the string 'active'"); - active = "active"; - } - - return this.rowManager.getComponents(active); -}; - -//get position of row in table -Tabulator.prototype.getRowPosition = function (index, active) { - var row = this.rowManager.findRow(index); - - if (row) { - return this.rowManager.getRowPosition(row, active); - } else { - console.warn("Position Error - No matching row found:", index); - return false; - } -}; - -//copy table data to clipboard -Tabulator.prototype.copyToClipboard = function (selector) { - if (this.modExists("clipboard", true)) { - this.modules.clipboard.copy(selector); - } -}; - -/////////////// Column Functions /////////////// - -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); - - if (col) { - return col.getComponent(); - } else { - console.warn("Find Error - No matching column found:", field); - return false; - } -}; - -Tabulator.prototype.getColumnDefinitions = function () { - return this.columnManager.getDefinitionTree(); -}; - -Tabulator.prototype.getColumnLayout = function () { - if (this.modExists("persistence", true)) { - return this.modules.persistence.parseColumns(this.columnManager.getColumns()); - } -}; - -Tabulator.prototype.setColumnLayout = function (layout) { - if (this.modExists("persistence", true)) { - this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns, layout)); - return true; - } - return false; -}; - -Tabulator.prototype.showColumn = function (field) { - var column = this.columnManager.findColumn(field); - - if (column) { - column.show(); - - if (this.options.responsiveLayout && this.modExists("responsiveLayout", true)) { - this.modules.responsiveLayout.update(); - } - } else { - console.warn("Column Show Error - No matching column found:", field); - return false; - } -}; - -Tabulator.prototype.hideColumn = function (field) { - var column = this.columnManager.findColumn(field); - - if (column) { - column.hide(); - - if (this.options.responsiveLayout && this.modExists("responsiveLayout", true)) { - this.modules.responsiveLayout.update(); - } - } else { - console.warn("Column Hide Error - No matching column found:", field); - return false; - } -}; - -Tabulator.prototype.toggleColumn = function (field) { - var column = this.columnManager.findColumn(field); - - if (column) { - if (column.visible) { - column.hide(); - } else { - column.show(); - } - } else { - console.warn("Column Visibility Toggle Error - No matching column found:", field); - return false; - } -}; - -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); - - if (column) { - column.delete().then(function () { - resolve(); - }).catch(function (err) { - reject(err); - }); - } else { - 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); - - if (column) { - column.updateDefinition(definition).then(function (col) { - resolve(col); - }).catch(function (err) { - reject(err); - }); - } else { - console.warn("Column Update Error - No matching column found:", field); - reject(); - } - }); -}; - -Tabulator.prototype.moveColumn = function (from, to, after) { - var fromColumn = this.columnManager.findColumn(from); - var toColumn = this.columnManager.findColumn(to); - - if (fromColumn) { - if (toColumn) { - this.columnManager.moveColumn(fromColumn, toColumn, after); - } else { - console.warn("Move Error - No matching column found:", toColumn); - } - } else { - console.warn("Move Error - No matching column found:", from); - } -}; - -//scroll to column in DOM -Tabulator.prototype.scrollToColumn = function (field, position, ifVisible) { - var _this30 = this; - - return new Promise(function (resolve, reject) { - var column = _this30.columnManager.findColumn(field); - - if (column) { - _this30.columnManager.scrollToColumn(column, position, ifVisible).then(function () { - resolve(); - }).catch(function (err) { - reject(err); - }); - } else { - console.warn("Scroll Error - No matching column found:", field); - reject("Scroll Error - No matching column found"); - } - }); -}; - -//////////// Localization Functions //////////// -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); -}; - -//////////// General Public Functions //////////// - -//redraw list without updating data -Tabulator.prototype.redraw = function (force) { - this.columnManager.redraw(force); - this.rowManager.redraw(force); -}; - -Tabulator.prototype.setHeight = function (height) { - - if (this.rowManager.renderMode !== "classic") { - this.options.height = isNaN(height) ? height : height + "px"; - this.element.style.height = this.options.height; - this.rowManager.setRenderMode(); - this.rowManager.redraw(); - } else { - console.warn("setHeight function is not available in classic render mode"); - } -}; - -///////////////////// Sorting //////////////////// - -//trigger sort -Tabulator.prototype.setSort = function (sortList, dir) { - if (this.modExists("sort", true)) { - this.modules.sort.setSort(sortList, dir); - this.rowManager.sorterRefresh(); - } -}; - -Tabulator.prototype.getSorters = function () { - if (this.modExists("sort", true)) { - return this.modules.sort.getSort(); - } -}; - -Tabulator.prototype.clearSort = function () { - if (this.modExists("sort", true)) { - this.modules.sort.clear(); - this.rowManager.sorterRefresh(); - } -}; - -///////////////////// Filtering //////////////////// - -//set standard filters -Tabulator.prototype.setFilter = function (field, type, value, params) { - if (this.modExists("filter", true)) { - this.modules.filter.setFilter(field, type, value, params); - this.rowManager.filterRefresh(); - } -}; - -//add filter to array -Tabulator.prototype.addFilter = function (field, type, value, params) { - if (this.modExists("filter", true)) { - this.modules.filter.addFilter(field, type, value, params); - this.rowManager.filterRefresh(); - } -}; - -//get all filters -Tabulator.prototype.getFilters = function (all) { - if (this.modExists("filter", true)) { - return this.modules.filter.getFilters(all); - } -}; - -Tabulator.prototype.setHeaderFilterFocus = function (field) { - if (this.modExists("filter", true)) { - var column = this.columnManager.findColumn(field); - - if (column) { - this.modules.filter.setHeaderFilterFocus(column); - } else { - console.warn("Column Filter Focus Error - No matching column found:", field); - return false; - } - } -}; - -Tabulator.prototype.getHeaderFilterValue = function (field) { - if (this.modExists("filter", true)) { - var column = this.columnManager.findColumn(field); - - if (column) { - return this.modules.filter.getHeaderFilterValue(column); - } else { - console.warn("Column Filter Error - No matching column found:", field); - } - } -}; - -Tabulator.prototype.setHeaderFilterValue = function (field, value) { - if (this.modExists("filter", true)) { - var column = this.columnManager.findColumn(field); - - if (column) { - this.modules.filter.setHeaderFilterValue(column, value); - } else { - console.warn("Column Filter Error - No matching column found:", field); - return false; - } - } -}; - -Tabulator.prototype.getHeaderFilters = function () { - if (this.modExists("filter", true)) { - return this.modules.filter.getHeaderFilters(); - } -}; - -//remove filter from array -Tabulator.prototype.removeFilter = function (field, type, value) { - if (this.modExists("filter", true)) { - this.modules.filter.removeFilter(field, type, value); - this.rowManager.filterRefresh(); - } -}; - -//clear filters -Tabulator.prototype.clearFilter = function (all) { - if (this.modExists("filter", true)) { - this.modules.filter.clearFilter(all); - this.rowManager.filterRefresh(); - } -}; - -//clear header filters -Tabulator.prototype.clearHeaderFilter = function () { - if (this.modExists("filter", true)) { - this.modules.filter.clearHeaderFilter(); - this.rowManager.filterRefresh(); - } -}; - -///////////////////// select //////////////////// -Tabulator.prototype.selectRow = function (rows) { - if (this.modExists("selectRow", true)) { - if (rows === true) { - 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) { - if (this.modExists("selectRow", true)) { - this.modules.selectRow.deselectRows(rows); - } -}; - -Tabulator.prototype.toggleSelectRow = function (row) { - if (this.modExists("selectRow", true)) { - this.modules.selectRow.toggleRow(row); - } -}; - -Tabulator.prototype.getSelectedRows = function () { - if (this.modExists("selectRow", true)) { - return this.modules.selectRow.getSelectedRows(); - } -}; - -Tabulator.prototype.getSelectedData = function () { - if (this.modExists("selectRow", true)) { - return this.modules.selectRow.getSelectedData(); - } -}; - -///////////////////// validation //////////////////// -Tabulator.prototype.getInvalidCells = function () { - if (this.modExists("validate", true)) { - return this.modules.validate.getInvalidCells(); - } -}; - -Tabulator.prototype.clearCellValidation = function (cells) { - var _this31 = this; - - if (this.modExists("validate", true)) { - - if (!cells) { - cells = this.modules.validate.getInvalidCells(); - } - - if (!Array.isArray(cells)) { - cells = [cells]; - } - - cells.forEach(function (cell) { - _this31.modules.validate.clearValidation(cell._getSelf()); - }); - } -}; - -Tabulator.prototype.validate = function (cells) { - var output = []; - - //clear row data - this.rowManager.rows.forEach(function (row) { - var valid = row.validate(); - - if (valid !== true) { - output = output.concat(valid); - } - }); - - return output.length ? output : true; -}; - -//////////// Pagination Functions //////////// - -Tabulator.prototype.setMaxPage = function (max) { - if (this.options.pagination && this.modExists("page")) { - this.modules.page.setMaxPage(max); - } else { - return false; - } -}; - -Tabulator.prototype.setPage = function (page) { - if (this.options.pagination && this.modExists("page")) { - return this.modules.page.setPage(page); - } else { - return new Promise(function (resolve, reject) { - reject(); - }); - } -}; - -Tabulator.prototype.setPageToRow = function (row) { - var _this32 = this; - - return new Promise(function (resolve, reject) { - if (_this32.options.pagination && _this32.modExists("page")) { - row = _this32.rowManager.findRow(row); - - if (row) { - _this32.modules.page.setPageToRow(row).then(function () { - resolve(); - }).catch(function () { - reject(); - }); - } else { - reject(); - } - } else { - reject(); - } - }); -}; - -Tabulator.prototype.setPageSize = function (size) { - if (this.options.pagination && this.modExists("page")) { - this.modules.page.setPageSize(size); - this.modules.page.setPage(1).then(function () {}).catch(function () {}); - } else { - return false; - } -}; - -Tabulator.prototype.getPageSize = function () { - if (this.options.pagination && this.modExists("page", true)) { - return this.modules.page.getPageSize(); - } -}; - -Tabulator.prototype.previousPage = function () { - if (this.options.pagination && this.modExists("page")) { - this.modules.page.previousPage(); - } else { - return false; - } -}; - -Tabulator.prototype.nextPage = function () { - if (this.options.pagination && this.modExists("page")) { - this.modules.page.nextPage(); - } else { - return false; - } -}; - -Tabulator.prototype.getPage = function () { - if (this.options.pagination && this.modExists("page")) { - return this.modules.page.getPage(); - } else { - return false; - } -}; - -Tabulator.prototype.getPageMax = function () { - if (this.options.pagination && this.modExists("page")) { - return this.modules.page.getPageMax(); - } else { - return false; - } -}; - -///////////////// Grouping Functions /////////////// - -Tabulator.prototype.setGroupBy = function (groups) { - if (this.modExists("groupRows", true)) { - this.options.groupBy = groups; - 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; - this.modules.groupRows.initialize(); - if (this.options.groupBy) { - this.rowManager.refreshActiveData("group"); - - if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) { - this.modules.persistence.save("group"); - } - } else { - console.warn("Grouping Update - cant refresh view, no groups have been set"); - } - } else { - return false; - } -}; - -Tabulator.prototype.setGroupHeader = function (values) { - if (this.modExists("groupRows", true)) { - this.options.groupHeader = values; - this.modules.groupRows.initialize(); - if (this.options.groupBy) { - this.rowManager.refreshActiveData("group"); - - if (this.options.persistence && this.modExists("persistence", true) && this.modules.persistence.config.group) { - this.modules.persistence.save("group"); - } - } else { - console.warn("Grouping Update - cant refresh view, no groups have been set"); - } - } else { - return false; - } -}; - -Tabulator.prototype.getGroups = function (values) { - if (this.modExists("groupRows", true)) { - return this.modules.groupRows.getGroups(true); - } else { - return false; - } -}; - -// get grouped table data in the same format as getData() -Tabulator.prototype.getGroupedData = function () { - if (this.modExists("groupRows", true)) { - return this.options.groupBy ? this.modules.groupRows.getGroupedData() : this.getData(); - } -}; - -Tabulator.prototype.getEditedCells = function () { - if (this.modExists("edit", true)) { - return this.modules.edit.getEditedCells(); - } -}; - -Tabulator.prototype.clearCellEdited = function (cells) { - var _this33 = this; - - if (this.modExists("edit", true)) { - - if (!cells) { - cells = this.modules.edit.getEditedCells(); - } - - if (!Array.isArray(cells)) { - cells = [cells]; - } - - cells.forEach(function (cell) { - _this33.modules.edit.clearEdited(cell._getSelf()); - }); - } -}; - -///////////////// Column Calculation Functions /////////////// -Tabulator.prototype.getCalcResults = function () { - if (this.modExists("columnCalcs", true)) { - return this.modules.columnCalcs.getResults(); - } else { - return false; - } -}; - -Tabulator.prototype.recalc = function () { - if (this.modExists("columnCalcs", true)) { - this.modules.columnCalcs.recalcAll(this.rowManager.activeRows); - } -}; - -/////////////// Navigation Management ////////////// - -Tabulator.prototype.navigatePrev = function () { - var cell = false; - - if (this.modExists("edit", true)) { - cell = this.modules.edit.currentCell; - - if (cell) { - return cell.nav().prev(); - } - } - - return false; -}; - -Tabulator.prototype.navigateNext = function () { - var cell = false; - - if (this.modExists("edit", true)) { - cell = this.modules.edit.currentCell; - - if (cell) { - return cell.nav().next(); - } - } - - return false; -}; - -Tabulator.prototype.navigateLeft = function () { - var cell = false; - - if (this.modExists("edit", true)) { - cell = this.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - return cell.nav().left(); - } - } - - return false; -}; - -Tabulator.prototype.navigateRight = function () { - var cell = false; - - if (this.modExists("edit", true)) { - cell = this.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - return cell.nav().right(); - } - } - - return false; -}; - -Tabulator.prototype.navigateUp = function () { - var cell = false; - - if (this.modExists("edit", true)) { - cell = this.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - return cell.nav().up(); - } - } - - return false; -}; - -Tabulator.prototype.navigateDown = function () { - var cell = false; - - if (this.modExists("edit", true)) { - cell = this.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - return cell.nav().down(); - } - } - - return false; -}; - -/////////////// History Management ////////////// -Tabulator.prototype.undo = function () { - if (this.options.history && this.modExists("history", true)) { - return this.modules.history.undo(); - } else { - return false; - } -}; - -Tabulator.prototype.redo = function () { - if (this.options.history && this.modExists("history", true)) { - return this.modules.history.redo(); - } else { - return false; - } -}; - -Tabulator.prototype.getHistoryUndoSize = function () { - if (this.options.history && this.modExists("history", true)) { - return this.modules.history.getHistoryUndoSize(); - } else { - return false; - } -}; - -Tabulator.prototype.getHistoryRedoSize = function () { - if (this.options.history && this.modExists("history", true)) { - return this.modules.history.getHistoryRedoSize(); - } else { - return false; - } -}; - -/////////////// Download Management ////////////// - -Tabulator.prototype.download = function (type, filename, options, active) { - if (this.modExists("download", true)) { - this.modules.download.download(type, filename, options, active); - } -}; - -Tabulator.prototype.downloadToTab = function (type, filename, options, active) { - if (this.modExists("download", true)) { - this.modules.download.download(type, filename, options, active, true); - } -}; - -/////////// Inter Table Communications /////////// - -Tabulator.prototype.tableComms = function (table, module, action, data) { - this.modules.comms.receive(table, module, action, data); -}; - -////////////// Extension Management ////////////// - -//object to hold module -Tabulator.prototype.moduleBindings = {}; - -//extend module -Tabulator.prototype.extendModule = function (name, property, values) { - - if (Tabulator.prototype.moduleBindings[name]) { - var source = Tabulator.prototype.moduleBindings[name].prototype[property]; - - if (source) { - if ((typeof values === 'undefined' ? 'undefined' : _typeof(values)) == "object") { - 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); - } -}; - -//add module to tabulator -Tabulator.prototype.registerModule = function (name, module) { - var self = this; - Tabulator.prototype.moduleBindings[name] = module; -}; - -//ensure that module are bound to instantiated function -Tabulator.prototype.bindModules = function () { - this.modules = {}; - - for (var name in Tabulator.prototype.moduleBindings) { - this.modules[name] = new Tabulator.prototype.moduleBindings[name](this); - } -}; - -//Check for module -Tabulator.prototype.modExists = function (plugin, required) { - if (this.modules[plugin]) { - return true; - } else { - if (required) { - console.error("Tabulator Module Not Installed: " + plugin); - } - return false; - } -}; - -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) { - if (obj[i] != null && _typeof(obj[i]) === "object") { - if (obj[i] instanceof Date) { - clone[i] = new Date(obj[i]); - } else { - clone[i] = this.deepClone(obj[i]); - } - } else { - 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); - - if (index > -1) { - Tabulator.prototype.comms.tables.splice(index, 1); - } - }, - lookupTable: function lookupTable(query, silent) { - var results = [], - matches, - match; - - if (typeof query === "string") { - matches = document.querySelectorAll(query); - - if (matches.length) { - for (var i = 0; i < matches.length; i++) { - match = Tabulator.prototype.comms.matchElement(matches[i]); - - if (match) { - results.push(match); - } - } - } - } else if (typeof HTMLElement !== "undefined" && query instanceof HTMLElement || query instanceof Tabulator) { - match = Tabulator.prototype.comms.matchElement(query); - - if (match) { - results.push(match); - } - } else if (Array.isArray(query)) { - query.forEach(function (item) { - results = results.concat(Tabulator.prototype.comms.lookupTable(item)); - }); - } else { - if (!silent) { - console.warn("Table Connection Error - Invalid Selector", query); - } - } - - return results; - }, - matchElement: function matchElement(element) { - return Tabulator.prototype.comms.tables.find(function (table) { - return element instanceof Tabulator ? table === element : table.element === element; - }); - } -}; - -Tabulator.prototype.findTable = function (query) { - var results = Tabulator.prototype.comms.lookupTable(query, true); - return Array.isArray(results) && !results.length ? false : results; -}; - -var Layout = function Layout(table) { - - this.table = table; - - this.mode = null; -}; - -//initialize layout system - -Layout.prototype.initialize = function (layout) { - - if (this.modes[layout]) { - - this.mode = layout; - } else { - - console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : " + layout); - - this.mode = 'fitData'; - } - - this.table.element.setAttribute("tabulator-layout", this.mode); -}; - -Layout.prototype.getMode = function () { - - return this.mode; -}; - -//trigger table layout - -Layout.prototype.layout = function () { - - this.modes[this.mode].call(this, this.table.columnManager.columnsByIndex); -}; - -//layout render functions - -Layout.prototype.modes = { - - //resize columns to fit data they contain - - "fitData": function fitData(columns) { - - columns.forEach(function (column) { - - column.reinitializeWidth(); - }); - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.update(); - } - }, - - //resize columns to fit data they contain and stretch row to fill table - - "fitDataFill": function fitDataFill(columns) { - - columns.forEach(function (column) { - - column.reinitializeWidth(); - }); - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.update(); - } - }, - - //resize columns to fit data they contain - - "fitDataTable": function fitDataTable(columns) { - - columns.forEach(function (column) { - - column.reinitializeWidth(); - }); - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.update(); - } - }, - - //resize columns to fit data the contain and stretch last column to fill table - - "fitDataStretch": function fitDataStretch(columns) { - var _this34 = this; - - var colsWidth = 0, - tableWidth = this.table.rowManager.element.clientWidth, - gap = 0, - lastCol = false; - - columns.forEach(function (column, i) { - - if (!column.widthFixed) { - - column.reinitializeWidth(); - } - - if (_this34.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible) { - - lastCol = column; - } - - if (column.visible) { - - colsWidth += column.getWidth(); - } - }); - - if (lastCol) { - - gap = tableWidth - colsWidth + lastCol.getWidth(); - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - lastCol.setWidth(0); - - this.table.modules.responsiveLayout.update(); - } - - if (gap > 0) { - - lastCol.setWidth(gap); - } else { - - lastCol.reinitializeWidth(); - } - } else { - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.update(); - } - } - }, - - //resize columns to fit - - "fitColumns": function fitColumns(columns) { - - var self = this; - - var totalWidth = self.table.element.clientWidth; //table element width - - var fixedWidth = 0; //total width of columns with a defined width - - var flexWidth = 0; //total width available to flexible columns - - var flexGrowUnits = 0; //total number of widthGrow blocks accross all columns - - var flexColWidth = 0; //desired width of flexible columns - - var flexColumns = []; //array of flexible width columns - - var fixedShrinkColumns = []; //array of fixed width columns that can shrink - - var flexShrinkUnits = 0; //total number of widthShrink blocks accross all columns - - var overflowWidth = 0; //horizontal overflow width - - var gapFill = 0; //number of pixels to be added to final column to close and half pixel gaps - - - function calcWidth(width) { - - var colWidth; - - if (typeof width == "string") { - - if (width.indexOf("%") > -1) { - - colWidth = totalWidth / 100 * parseInt(width); - } else { - - colWidth = parseInt(width); - } - } else { - - colWidth = width; - } - - return colWidth; - } - - //ensure columns resize to take up the correct amount of space - - 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); - } - - columns.forEach(function (col, i) { - - var width = shrinkCols ? calcShrink(col) : calcGrow(col); - - if (col.column.minWidth >= width) { - - oversizeCols.push(col); - } else { - - undersizeCols.push(col); - - changeUnits += shrinkCols ? col.column.definition.widthShrink || 1 : col.column.definition.widthGrow || 1; - } - }); - - if (oversizeCols.length) { - - oversizeCols.forEach(function (col) { - - oversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth; - - col.width = col.column.minWidth; - }); - - remainingSpace = freeSpace - oversizeSpace; - - nextColWidth = changeUnits ? Math.floor(remainingSpace / changeUnits) : remainingSpace; - - gap = remainingSpace - nextColWidth * changeUnits; - - gap += scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols); - } else { - - gap = changeUnits ? freeSpace - Math.floor(freeSpace / changeUnits) * changeUnits : freeSpace; - - undersizeCols.forEach(function (column) { - - column.width = shrinkCols ? calcShrink(column) : calcGrow(column); - }); - } - - return gap; - } - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.update(); - } - - //adjust for vertical scrollbar if present - - if (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; - - if (column.visible) { - - width = column.definition.width; - - minWidth = parseInt(column.minWidth); - - if (width) { - - colWidth = calcWidth(width); - - fixedWidth += colWidth > minWidth ? colWidth : minWidth; - - if (column.definition.widthShrink) { - - fixedShrinkColumns.push({ - - column: column, - - width: colWidth > minWidth ? colWidth : minWidth - - }); - - flexShrinkUnits += column.definition.widthShrink; - } - } else { - - flexColumns.push({ - - column: column, - - width: 0 - - }); - - flexGrowUnits += column.definition.widthGrow || 1; - } - } - }); - - //calculate available space - - flexWidth = totalWidth - fixedWidth; - - //calculate correct column size - - flexColWidth = Math.floor(flexWidth / flexGrowUnits); - - //generate column widths - - var gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false); - - //increase width of last column to account for rounding errors - - if (flexColumns.length && gapFill > 0) { - - flexColumns[flexColumns.length - 1].width += +gapFill; - } - - //caculate space for columns to be shrunk into - - flexColumns.forEach(function (col) { - - flexWidth -= col.width; - }); - - overflowWidth = Math.abs(gapFill) + flexWidth; - - //shrink oversize columns if there is no available space - - if (overflowWidth > 0 && flexShrinkUnits) { - - gapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true); - } - - //decrease width of last column to account for rounding errors - - if (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; //hold Tabulator object - this.locale = "default"; //current locale - this.lang = false; //current language - this.bindings = {}; //update events to call when locale is changed -}; - -//set header placehoder -Localize.prototype.setHeaderFilterPlaceholder = function (placeholder) { - this.langs.default.headerFilters.default = placeholder; -}; - -//set header filter placeholder by column -Localize.prototype.setHeaderFilterColumnPlaceholder = function (column, placeholder) { - this.langs.default.headerFilters.columns[column] = placeholder; - - if (this.lang && !this.lang.headerFilters.columns[column]) { - this.lang.headerFilters.columns[column] = placeholder; - } -}; - -//setup a lang description object -Localize.prototype.installLang = function (locale, lang) { - if (this.langs[locale]) { - this._setLangProp(this.langs[locale], lang); - } else { - this.langs[locale] = lang; - } -}; - -Localize.prototype._setLangProp = function (lang, values) { - for (var key in values) { - if (lang[key] && _typeof(lang[key]) == "object") { - this._setLangProp(lang[key], values[key]); - } else { - lang[key] = values[key]; - } - } -}; - -//set current locale -Localize.prototype.setLocale = function (desiredLocale) { - var self = this; - - desiredLocale = desiredLocale || "default"; - - //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] = {}; - } - traverseLang(trans[prop], path[prop]); - } else { - path[prop] = trans[prop]; - } - } - } - - //determing correct locale to load - if (desiredLocale === true && navigator.language) { - //get local from system - desiredLocale = navigator.language.toLowerCase(); - } - - if (desiredLocale) { - - //if locale is not set, check for matching top level locale else use default - if (!self.langs[desiredLocale]) { - var prefix = desiredLocale.split("-")[0]; - - if (self.langs[prefix]) { - console.warn("Localization Error - Exact matching locale not found, using closest match: ", desiredLocale, prefix); - desiredLocale = prefix; - } else { - console.warn("Localization Error - Matching locale not found, using default: ", desiredLocale); - desiredLocale = "default"; - } - } - } - - self.locale = desiredLocale; - - //load default lang template - self.lang = Tabulator.prototype.helpers.deepClone(self.langs.default || {}); - - if (desiredLocale != "default") { - traverseLang(self.langs[desiredLocale], self.lang); - } - - self.table.options.localized.call(self.table, self.locale, self.lang); - - self._executeBindings(); -}; - -//get current locale -Localize.prototype.getLocale = function (locale) { - return self.locale; -}; - -//get lang object for given local or current if none provided -Localize.prototype.getLang = function (locale) { - return locale ? this.langs[locale] : this.lang; -}; - -//get text for current locale -Localize.prototype.getText = function (path, value) { - var path = value ? path + "|" + value : path, - pathArray = path.split("|"), - text = this._getLangElement(pathArray, this.locale); - - // if(text === false){ - // console.warn("Localization Error - Matching localized text not found for given path: ", path); - // } - - return text || ""; -}; - -//traverse langs object and find localized copy -Localize.prototype._getLangElement = function (path, locale) { - var self = this; - var root = self.lang; - - path.forEach(function (level) { - var rootPath; - - if (root) { - rootPath = root[level]; - - if (typeof rootPath != "undefined") { - root = rootPath; - } else { - root = false; - } - } - }); - - return root; -}; - -//set update binding -Localize.prototype.bind = function (path, callback) { - if (!this.bindings[path]) { - this.bindings[path] = []; - } - - this.bindings[path].push(callback); - - callback(this.getText(path), this.lang); -}; - -//itterate through bindings and trigger updates -Localize.prototype._executeBindings = function () { - var self = this; - - var _loop = function _loop(path) { - self.bindings[path].forEach(function (binding) { - binding(self.getText(path), self.lang); - }); - }; - - for (var path in self.bindings) { - _loop(path); - } -}; - -//Localized text listings -Localize.prototype.langs = { - "default": { //hold default locale text - "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; - - connection = Tabulator.prototype.comms.lookupTable(selectors); - - connection.forEach(function (con) { - if (self.table !== con) { - connections.push(con); - } - }); - - return 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); - }); - - if (!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); - } else { - console.warn("Inter-table Comms Error - no such module:", module); - } -}; - -Tabulator.prototype.registerModule("comms", Comms); \ No newline at end of file diff --git a/website/appphp/static/vendors/tabulator/js/tabulator_core.min.js b/website/appphp/static/vendors/tabulator/js/tabulator_core.min.js deleted file mode 100644 index 92522ab1..00000000 --- a/website/appphp/static/vendors/tabulator/js/tabulator_core.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/* 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/website/appphp/static/vendors/tinymce/changelog.txt b/website/appphp/static/vendors/tinymce/changelog.txt deleted file mode 100644 index 55e1556b..00000000 --- a/website/appphp/static/vendors/tinymce/changelog.txt +++ /dev/null @@ -1,1393 +0,0 @@ -Version 5.0.16 (2019-09-24) - Added new `referrer_policy` setting to add the `referrerpolicy` attribute when loading scripts or stylesheets #TINY-3978 - Added a slight background color to dialog tab links when focused to aid keyboard navigation #TINY-3877 - Fixed media poster value not updating on change #TINY-4013 - Fixed openlink was not registered as a toolbar button #TINY-4024 - Fixed failing to initialize if a script tag was used inside a SVG #TINY-4087 - Fixed double top border showing on toolbar without menubar when toolbar_drawer is enabled #TINY-4118 - Fixed unable to drag inline dialogs to the bottom of the screen when scrolled #TINY-4154 - Fixed notifications appearing on top of the toolbar when scrolled in inline mode #TINY-4159 - Fixed notifications displaying incorrectly on IE 11 #TINY-4169 -Version 5.0.15 (2019-09-02) - Added a dark `content_css` skin to go with the dark UI skin #TINY-3743 - Changed the enabled state on toolbar buttons so they don't get the hover effect #TINY-3974 - Fixed missing CSS active state on toolbar buttons #TINY-3966 - Fixed `onChange` callback not firing for the colorinput dialog component #TINY-3968 - Fixed context toolbars not showing in fullscreen mode #TINY-4023 -Version 5.0.14 (2019-08-19) - Added an API to reload the autocompleter menu with additional fetch metadata #MENTIONS-17 - Fixed missing toolbar button border styling options #TINY-3965 - Fixed image upload progress notification closing before the upload is complete #TINY-3963 - Fixed inline dialogs not closing on escape when no dialog component is in focus #TINY-3936 - Fixed plugins not being filtered when defaulting to mobile on phones #TINY-3537 - Fixed toolbar more drawer showing the content behind it when transitioning between opened and closed states #TINY-3878 - Fixed focus not returning to the dialog after pressing the "Replace all" button in the search and replace dialog #TINY-3961 - Removed Oxide variable `@menubar-select-disabled-border-color` and replaced it with `@menubar-select-disabled-border` #TINY-3965 -Version 5.0.13 (2019-08-06) - Changed modal dialogs to prevent dragging by default and added new `draggable_modal` setting to restore dragging #TINY-3873 - Changed the nonbreaking plugin to insert nbsp characters wrapped in spans to aid in filtering. This can be disabled using the `nonbreaking_wrap` setting #TINY-3647 - Changed backspace behaviour in lists to outdent nested list items when the cursor is at the start of the list item #TINY-3651 - Fixed sidebar growing beyond editor bounds in IE 11 #TINY-3937 - Fixed issue with being unable to keyboard navigate disabled toolbar buttons #TINY-3350 - Fixed issues with backspace and delete in nested contenteditable true and false elements #TINY-3868 - Fixed issue with losing keyboard navigation in dialogs due to disabled buttons #TINY-3914 - Fixed `MouseEvent.mozPressure is deprecated` warning in Firefox #TINY-3919 - Fixed `default_link_target` not being respected when `target_list` is disabled #TINY-3757 - Fixed mobile plugin filter to only apply to the mobile theme, rather than all mobile platforms #TINY-3405 - Fixed focus switching to another editor during mode changes #TINY-3852 - Fixed an exception being thrown when clicking on an uninitialized inline editor #TINY-3925 - Fixed unable to keyboard navigate to dialog menu buttons #TINY-3933 - Fixed dialogs being able to be dragged outside the window viewport #TINY-3787 - Fixed inline dialogs appearing above modal dialogs #TINY-3932 -Version 5.0.12 (2019-07-18) - Added ability to utilize UI dialog panels inside other panels #TINY-3305 - Added help dialog tab explaining keyboard navigation of the editor #TINY-3603 - Changed the "Find and Replace" design to an inline dialog #TINY-3054 - Fixed issue where autolink spacebar event was not being fired on Edge #TINY-3891 - Fixed table selection missing the background color #TINY-3892 - Fixed removing shortcuts not working for function keys #TINY-3871 - Fixed non-descriptive UI component type names #TINY-3349 - Fixed UI registry components rendering as the wrong type when manually specifying a different type #TINY-3385 - Fixed an issue where dialog checkbox, input, selectbox, textarea and urlinput components couldn't be disabled #TINY-3708 - Fixed the context toolbar not using viable screen space in inline/distraction free mode #TINY-3717 - Fixed the context toolbar overlapping the toolbar in various conditions #TINY-3205 - Fixed IE11 edge case where items were being inserted into the wrong location #TINY-3884 -Version 5.0.11 (2019-07-04) - Fixed packaging errors caused by a rollup treeshaking bug (https://github.com/rollup/rollup/issues/2970) #TINY-3866 - Fixed the customeditor component not able to get data from the dialog api #TINY-3866 - Fixed collection component tooltips not being translated #TINY-3855 -Version 5.0.10 (2019-07-02) - Added support for all HTML color formats in `color_map` setting #TINY-3837 - Changed backspace key handling to outdent content in appropriate circumstances #TINY-3685 - Changed default palette for forecolor and backcolor to include some lighter colors suitable for highlights #TINY-2865 - Changed the search and replace plugin to cycle through results #TINY-3800 - Fixed inconsistent types causing some properties to be unable to be used in dialog components #TINY-3778 - Fixed an issue in the Oxide skin where dialog content like outlines and shadows were clipped because of overflow hidden #TINY-3566 - Fixed the search and replace plugin not resetting state when changing the search query #TINY-3800 - Fixed backspace in lists not creating an undo level #TINY-3814 - Fixed the editor to cancel loading in quirks mode where the UI is not supported #TINY-3391 - Fixed applying fonts not working when the name contained spaces and numbers #TINY-3801 - Fixed so that initial content is retained when initializing on list items #TINY-3796 - Fixed inefficient font name and font size current value lookup during rendering #TINY-3813 - Fixed mobile font copied into the wrong folder for the oxide-dark skin #TINY-3816 - Fixed an issue where resizing the width of tables would produce inaccurate results #TINY-3827 - Fixed a memory leak in the Silver theme #TINY-3797 - Fixed alert and confirm dialogs using incorrect markup causing inconsistent padding #TINY-3835 - Fixed an issue in the Table plugin with `table_responsive_width` not enforcing units when resizing #TINY-3790 - Fixed leading, trailing and sequential spaces being lost when pasting plain text #TINY-3726 - Fixed exception being thrown when creating relative URIs #TINY-3851 - Fixed focus is no longer set to the editor content during mode changes unless the editor already had focus #TINY-3852 -Version 5.0.9 (2019-06-26) - Fixed print plugin not working in Firefox #TINY-3834 -Version 5.0.8 (2019-06-18) - Added back support for multiple toolbars #TINY-2195 - Added support for .m4a files to the media plugin #TINY-3750 - Added new base_url and suffix editor init options #TINY-3681 - Fixed incorrect padding for select boxes with visible values #TINY-3780 - Fixed selection incorrectly changing when programmatically setting selection on contenteditable false elements #TINY-3766 - Fixed sidebar background being transparent #TINY-3727 - Fixed the build to remove duplicate iife wrappers #TINY-3689 - Fixed bogus autocompleter span appearing in content when the autocompleter menu is shown #TINY-3752 - Fixed toolbar font size select not working with legacyoutput plugin #TINY-2921 - Fixed the legacyoutput plugin incorrectly aligning images #TINY-3660 - Fixed remove color not working when using the legacyoutput plugin #TINY-3756 - Fixed the font size menu applying incorrect sizes when using the legacyoutput plugin #TINY-3773 - Fixed scrollIntoView not working when the parent window was out of view #TINY-3663 - Fixed the print plugin printing from the wrong window in IE11 #TINY-3762 - Fixed content CSS loaded over CORS not loading in the preview plugin with content_css_cors enabled #TINY-3769 - Fixed the link plugin missing the default "None" option for link list #TINY-3738 - Fixed small dot visible with menubar and toolbar disabled in inline mode #TINY-3623 - Fixed space key properly inserts a nbsp before/after block elements #TINY-3745 - Fixed native context menu not showing with images in IE11 #TINY-3392 - Fixed inconsistent browser context menu image selection #TINY-3789 -Version 5.0.7 (2019-06-05) - Added new toolbar button and menu item for inserting tables via dialog #TINY-3636 - Added new API for adding/removing/changing tabs in the Help dialog #TINY-3535 - Added highlighting of matched text in autocompleter items #TINY-3687 - Added the ability for autocompleters to work with matches that include spaces #TINY-3704 - Added new `imagetools_fetch_image` callback to allow custom implementations for cors loading of images #TINY-3658 - Added `'http'` and `https` options to `link_assume_external_targets` to prepend `http://` or `https://` prefixes when URL does not contain a protocol prefix. Patch contributed by francoisfreitag. #GH-4335 - Changed annotations navigation to work the same as inline boundaries #TINY-3396 - Changed tabpanel API by adding a `name` field and changing relevant methods to use it #TINY-3535 - Fixed text color not updating all color buttons when choosing a color #TINY-3602 - Fixed the autocompleter not working with fragmented text #TINY-3459 - Fixed the autosave plugin no longer overwrites window.onbeforeunload #TINY-3688 - Fixed infinite loop in the paste plugin when IE11 takes a long time to process paste events. Patch contributed by lRawd. #GH-4987 - Fixed image handle locations when using `fixed_toolbar_container`. Patch contributed by t00. #GH-4966 - Fixed the autoresize plugin not firing `ResizeEditor` events #TINY-3587 - Fixed editor in fullscreen mode not extending to the bottom of the screen #TINY-3701 - Fixed list removal when pressing backspace after the start of the list item #TINY-3697 - Fixed autocomplete not triggering from compositionend events #TINY-3711 - Fixed `file_picker_callback` could not set the caption field on the insert image dialog #TINY-3172 - Fixed the autocompleter menu showing up after a selection had been made #TINY-3718 - Fixed an exception being thrown when a file or number input has focus during initialization. Patch contributed by t00 #GH-2194 -Version 5.0.6 (2019-05-22) - Added `icons_url` editor settings to enable icon packs to be loaded from a custom url #TINY-3585 - Added `image_uploadtab` editor setting to control the visibility of the upload tab in the image dialog #TINY-3606 - Added new api endpoints to the wordcount plugin and improved character count logic #TINY-3578 - Changed plugin, language and icon loading errors to log in the console instead of a notification #TINY-3585 - Fixed the textpattern plugin not working with fragmented text #TINY-3089 - Fixed various toolbar drawer accessibility issues and added an animation #TINY-3554 - Fixed issues with selection and ui components when toggling readonly mode #TINY-3592 - Fixed so readonly mode works with inline editors #TINY-3592 - Fixed docked inline toolbar positioning when scrolled #TINY-3621 - Fixed initial value not being set on bespoke select in quickbars and toolbar drawer #TINY-3591 - Fixed so that nbsp entities aren't trimmed in white-space: pre-line elements #TINY-3642 - Fixed `mceInsertLink` command inserting spaces instead of url encoded characters #GH-4990 - Fixed text content floating on top of dialogs in IE11 #TINY-3640 -Version 5.0.5 (2019-05-09) - Added menu items to match the forecolor/backcolor toolbar buttons #TINY-2878 - Added default directionality based on the configured language #TINY-2621 - Added styles, icons and tests for rtl mode #TINY-2621 - Fixed autoresize not working with floating elements or when media elements finished loading #TINY-3545 - Fixed incorrect vertical caret positioning in IE 11 #TINY-3188 - Fixed submenu anchoring hiding overflowed content #TINY-3564 - Removed unused and hidden validation icons to avoid displaying phantom tooltips #TINY-2329 -Version 5.0.4 (2019-04-23) - Added back URL dialog functionality, which is now available via `editor.windowManager.openUrl()` #TINY-3382 - Added the missing throbber functionality when calling `editor.setProgressState(true)` #TINY-3453 - Added function to reset the editor content and undo/dirty state via `editor.resetContent()` #TINY-3435 - Added the ability to set menu buttons as active #TINY-3274 - Added `editor.mode` API, featuring a custom editor mode API #TINY-3406 - Added better styling to floating toolbar drawer #TINY-3479 - Added the new premium plugins to the Help dialog plugins tab #TINY-3496 - Added the linkchecker context menu items to the default configuration #TINY-3543 - Fixed image context menu items showing on placeholder images #TINY-3280 - Fixed dialog labels and text color contrast within notifications/alert banners to satisfy WCAG 4.5:1 contrast ratio for accessibility #TINY-3351 - Fixed selectbox and colorpicker items not being translated #TINY-3546 - Fixed toolbar drawer sliding mode to correctly focus the editor when tabbing via keyboard navigation #TINY-3533 - Fixed positioning of the styleselect menu in iOS while using the mobile theme #TINY-3505 - Fixed the menubutton `onSetup` callback to be correctly executed when rendering the menu buttons #TINY-3547 - Fixed `default_link_target` setting to be correctly utilized when creating a link #TINY-3508 - Fixed colorpicker floating marginally outside its container #TINY-3026 - Fixed disabled menu items displaying as active when hovered #TINY-3027 - Removed redundant mobile wrapper #TINY-3480 -Version 5.0.3 (2019-03-19) - Changed empty nested-menu items within the style formats menu to be disabled or hidden if the value of `style_formats_autohide` is `true` #TINY-3310 - Changed the entire phrase 'Powered by Tiny' in the status bar to be a link instead of just the word 'Tiny' #TINY-3366 - Changed `formatselect`, `styleselect` and `align` menus to use the `mceToggleFormat` command internally #TINY-3428 - Fixed toolbar keyboard navigation to work as expected when `toolbar_drawer` is configured #TINY-3432 - Fixed text direction buttons to display the correct pressed state in selections that have no explicit `dir` property #TINY-3138 - Fixed the mobile editor to clean up properly when removed #TINY-3445 - Fixed quickbar toolbars to add an empty box to the screen when it is set to `false` #TINY-3439 - Fixed an issue where pressing the **Delete/Backspace** key at the edge of tables was creating incorrect selections #TINY-3371 - Fixed an issue where dialog collection items (emoticon and special character dialogs) couldn't be selected with touch devices #TINY-3444 - Fixed a type error introduced in TinyMCE version 5.0.2 when calling `editor.getContent()` with nested bookmarks #TINY-3400 - Fixed an issue that prevented default icons from being overridden #TINY-3449 - Fixed an issue where **Home/End** keys wouldn't move the caret correctly before or after `contenteditable=false` inline elements #TINY-2995 - Fixed styles to be preserved in IE 11 when editing via the `fullpage` plugin #TINY-3464 - Fixed the `link` plugin context toolbar missing the open link button #TINY-3461 - Fixed inconsistent dialog component spacing #TINY-3436 -Version 5.0.2 (2019-03-05) - Added presentation and document presets to `htmlpanel` dialog component #TINY-2694 - Added missing fixed_toolbar_container setting has been reimplemented in the Silver theme #TINY-2712 - Added a new toolbar setting `toolbar_drawer` that moves toolbar groups which overflow the editor width into either a `sliding` or `floating` toolbar section #TINY-2874 - Updated the build process to include package lock files in the dev distribution archive #TINY-2870 - Fixed inline dialogs did not have aria attributes #TINY-2694 - Fixed default icons are now available in the UI registry, allowing use outside of toolbar buttons #TINY-3307 - Fixed a memory leak related to select toolbar items #TINY-2874 - Fixed a memory leak due to format changed listeners that were never unbound #TINY-3191 - Fixed an issue where content may have been lost when using permanent bookmarks #TINY-3400 - Fixed the quicklink toolbar button not rendering in the quickbars plugin #TINY-3125 - Fixed an issue where menus were generating invalid HTML in some cases #TINY-3323 - Fixed an issue that could cause the mobile theme to show a blank white screen when the editor was inside an `overflow:hidden` element #TINY-3407 - Fixed mobile theme using a transparent background and not taking up the full width on iOS #TINY-3414 - Fixed the template plugin dialog missing the description field #TINY-3337 - Fixed input dialog components using an invalid default type attribute #TINY-3424 - Fixed an issue where backspace/delete keys after/before pagebreak elements wouldn't move the caret #TINY-3097 - Fixed an issue in the table plugin where menu items and toolbar buttons weren't showing correctly based on the selection #TINY-3423 - Fixed inconsistent button focus styles in Firefox #TINY-3377 - Fixed the resize icon floating left when all status bar elements were disabled #TINY-3340 - Fixed the resize handle to not show in fullscreen mode #TINY-3404 -Version 5.0.1 (2019-02-21) - Removed paste as text notification banner and paste_plaintext_inform setting #POW-102 - Fixed an issue where adding links to images would replace the image with text #TINY-3356 - Fixed an issue where the inline editor could use fractional pixels for positioning #TINY-3202 - Fixed an issue where uploading non-image files in the Image Plugin upload tab threw an error. #TINY-3244 - Added H1-H6 toggle button registration to the silver theme #TINY-3070 - Fixed an issue in the media plugin that was causing the source url and height/width to be lost in certain circumstances #TINY-2858 - Fixed an issue with the Context Toolbar not being removed when clicking outside of the editor #TINY-2804 - Fixed an issue where clicking 'Remove link' wouldn't remove the link in certain circumstances #TINY-3199 - Added code sample toolbar button will now toggle on when the cursor is in a code section #TINY-3040 - Fixed an issue where the media plugin would fail when parsing dialog data #TINY-3218 - Fixed an issue where retrieving the selected content as text didn't create newlines #TINY-3197 - Fixed incorrect keyboard shortcuts in the Help dialog for Windows #TINY-3292 - Fixed an issue where JSON serialization could produce invalid JSON #TINY-3281 - Fixed production CSS including references to source maps #TINY-3920 - Fixed development CSS was not included in the development zip #TINY-3920 - Fixed the autocompleter matches predicate not matching on the start of words by default #TINY-3306 - Added new settings to the emoticons plugin to allow additional emoticons to be added #TINY-3088 - Fixed an issue where the page could be scrolled with modal dialogs open #TINY-2252 - Fixed an issue where autocomplete menus would show an icon margin when no items had icons #TINY-3329 - Fixed an issue in the quickbars plugin where images incorrectly showed the text selection toolbar #TINY-3338 - Fixed an issue that caused the inline editor to fail to render when the target element already had focus #TINY-3353 -Version 5.0.0 (2019-02-04) - Full documentation for the version 5 features and changes is available at https://www.tiny.cloud/docs/release-notes/ - - Changes since RC2: - Fixed an issue where tab panel heights weren't sizing properly on smaller screens and weren't updating on resize #TINY-3242 - Added links and registered names with * to denote premium plugins in Plugins tab of Help dialog #TINY-3223 - Changed Tiny 5 mobile skin to look more uniform with desktop #TINY-2650 - Fixed image tools not having any padding between the label and slider #TINY-3220 - Blacklisted table, th and td as inline editor target #TINY-717 - Fixed context toolbar toggle buttons not showing the correct state #TINY-3022 - Fixed missing separators in the spellchecker context menu between the suggestions and actions #TINY-3217 - Fixed notification icon positioning in alert banners #TINY-2196 - Fixed a typo in the word count plugin name #TINY-3062 - Fixed charmap and emoticons dialogs not having a primary button #TINY-3233 - Fixed an issue where resizing wouldn't work correctly depending on the box-sizing model #TINY-3278 -Version 5.0.0-rc-2 (2019-01-22) - Fixed the link dialog such that it will now retain class attributes when updating links #TINY-2825 - Added screen reader accessibility for sidebar and statusbar #TINY-2699 - Updated Emoticons and Charmap dialogs to be screen reader accessible #TINY-2693 - Fixed "Find and replace" not showing in the "Edit" menu by default #TINY-3061 - Updated the textpattern plugin to properly support nested patterns and to allow running a command with a value for a pattern with a start and an end #TINY-2991 - Removed unnecessary 'flex' and unused 'colspan' properties from the new dialog APIs #TINY-2973 - Changed checkboxes to use a boolean for its state, instead of a string #TINY-2848 - Fixed dropdown buttons missing the 'type' attribute, which could cause forms to be incorrectly submitted #TINY-2826 - Fixed emoticon and charmap search not returning expected results in certain cases #TINY-3084 - Changed formatting menus so they are registered and made the align toolbar button use an icon instead of text #TINY-2880 - Fixed blank rel_list values throwing an exception in the link plugin #TINY-3149 -Version 5.0.0-rc-1 (2019-01-08) - Updated the font select dropdown logic to try to detect the system font stack and show "System Font" as the font name #TINY-2710 - Fixed readonly mode not fully disabling editing content #TINY-2287 - Updated the autocompleter to only show when it has matched items #TINY-2350 - Added editor settings functionality to specify title attributes for toolbar groups #TINY-2690 - Added icons instead of button text to improve Search and Replace dialog footer appearance #TINY-2654 - Added `tox-dialog__table` instead of `mce-table-striped` class to enhance Help dialog appearance #TINY-2360 - Added title attribute to iframes so, screen readers can announce iframe labels #TINY-2692 - Updated SizeInput labels to "Height" and "Width" instead of Dimensions #TINY-2833 - Fixed accessibility issues with the font select, font size, style select and format select toolbar dropdowns #TINY-2713 - Fixed accessibility issues with split dropdowns #TINY-2697 - Added a wordcount menu item, that defaults to appearing in the tools menu #TINY-2877 - Fixed the legacyoutput plugin to be compatible with TinyMCE 5.0 #TINY-2301 - Updated the build process to minify and generate ASCII only output for the emoticons database #TINY-2744 - Fixed icons not showing correctly in the autocompleter popup #TINY-3029 - Fixed an issue where preview wouldn't show anything in Edge under certain circumstances #TINY-3035 - Fixed the height being incorrectly calculated for the autoresize plugin #TINY-2807 -Version 5.0.0-beta-1 (2018-11-30) - Changed the name of the "inlite" plugin to "quickbars" #TINY-2831 - Fixed an inline mode issue where the save plugin upon saving can cause content loss #TINY-2659 - Changed the background color icon to highlight background icon #TINY-2258 - Added a new `addNestedMenuItem()` UI registry function and changed all nested menu items to use the new registry functions #TINY-2230 - Changed Help dialog to be accessible to screen readers #TINY-2687 - Changed the color swatch to save selected custom colors to local storage for use across sessions #TINY-2722 - Added title attribute to color swatch colors #TINY-2669 - Added anchorbar component to anchor inline toolbar dialogs to instead of the toolbar #TINY-2040 - Added support for toolbar and toolbar array config options to be squashed into a single toolbar and not create multiple toolbars #TINY-2195 - Added error handling for when forced_root_block config option is set to true #TINY-2261 - Added functionality for the removed_menuitems config option #TINY-2184 - Fixed an issue in IE 11 where calling selection.getContent() would return an empty string when the editor didn't have focus #TINY-2325 - Added the ability to use a string to reference menu items in menu buttons and submenu items #TINY-2253 - Removed compat3x plugin #TINY-2815 - Changed `WindowManager` API - methods `getParams`, `setParams` and `getWindows`, and the legacy `windows` property, have been removed. `alert` and `confirm` dialogs are no longer tracked in the window list. #TINY-2603 -Version 5.0.0-preview-4 (2018-11-12) - Fixed distraction free plugin #AP-470 - Removed the tox-custom-editor class that was added to the wrapping element of codemirror #TINY-2211 - Fixed contents of the input field being selected on focus instead of just recieving an outline highlight #AP-464 - Added width and height placeholder text to image and media dialog dimensions input #AP-296 - Fixed styling issues with dialogs and menus in IE 11 #AP-456 - Fixed custom style format control not honoring custom formats #AP-393 - Fixed context menu not appearing when clicking an image with a caption #AP-382 - Fixed directionality of UI when using an RTL language #AP-423 - Fixed page responsiveness with multiple inline editors #AP-430 - Added the ability to keyboard navigate through menus, toolbars, sidebar and the status bar sequentially #AP-381 - Fixed empty toolbar groups appearing through invalid configuration of the `toolbar` property #AP-450 - Fixed text not being retained when updating links through the link dialog #AP-293 - Added translation capability back to the editor's UI #AP-282 - Fixed edit image context menu, context toolbar and toolbar items being incorrectly enabled when selecting invalid images #AP-323 - Fixed emoji type ahead being shown when typing URLs #AP-366 - Fixed toolbar configuration properties incorrectly expecting string arrays instead of strings #AP-342 - Changed the editor resize handle so that it should be disabled when the autoresize plugin is turned on #AP-424 - Fixed the block formatting toolbar item not showing a "Formatting" title when there is no selection #AP-321 - Fixed clicking disabled toolbar buttons hiding the toolbar in inline mode #AP-380 - Fixed `EditorResize` event not being fired upon editor resize #AP-327 - Fixed tables losing styles when updating through the dialog #AP-368 - Fixed context toolbar positioning to be more consistent near the edges of the editor #AP-318 - Added `label` component type for dialogs to group components under a label - Fixed table of contents plugin now works with v5 toolbar APIs correctly #AP-347 - Fixed the `link_context_toolbar` configuration not disabling the context toolbar #AP-458 - Fixed the link context toolbar showing incorrect relative links #AP-435 - Fixed the alignment of the icon in alert banner dialog components #TINY-2220 - Changed UI text for microcopy improvements #TINY-2281 - Fixed the visual blocks and visual char menu options not displaying their toggled state #TINY-2238 - Fixed the editor not displaying as fullscreen when toggled #TINY-2237 -Version 5.0.0-preview-3 (2018-10-18) - Changed editor layout to use modern CSS properties over manually calculating dimensions #AP-324 - Changed `autoresize_min_height` and `autoresize_max_height` configurations to `min_height` and `max_height` #AP-324 - Fixed bugs with editor width jumping when resizing and the iframe not resizing to smaller than 150px in height #AP-324 - Fixed mobile theme bug that prevented the editor from loading #AP-404 - Fixed long toolbar groups extending outside of the editor instead of wrapping - Changed `Whole word` label in Search and Replace dialog to `Find whole words only` #AP-387 - Fixed dialog titles so they are now proper case #AP-384 - Fixed color picker default to be #000000 instead of #ff00ff #AP-216 - Fixed "match case" option on the Find and Replace dialog is no longer selected by default #AP-298 - Fixed vertical alignment of toolbar icons #DES-134 - Fixed toolbar icons not appearing on IE11 #DES-133 -Version 5.0.0-preview-2 (2018-10-10) - Changed configuration of color options has been simplified to `color_map`, `color_cols`, and `custom_colors` #AP-328 - Added swatch is now shown for colorinput fields, instead of the colorpicker directly #AP-328 - Removed `colorpicker` plugin, it is now in the theme #AP-328 - Removed `textcolor` plugin, it is now in the theme #AP-328 - Fixed styleselect not updating the displayed item as the cursor moved #AP-388 - Changed `height` configuration to apply to the editor frame (including menubar, toolbar, status bar) instead of the content area #AP-324 - Added fontformats and fontsizes menu items #AP-390 - Fixed preview iframe not expanding to the dialog size #AP-252 - Fixed 'meta' shortcuts not translated into platform-specific text #AP-270 - Fixed tabbed dialogs (Charmap and Emoticons) shrinking when no search results returned - Fixed a bug where alert banner icons were not retrieved from icon pack. #AP-330 - Fixed component styles to flex so they fill large dialogs. #AP-252 - Fixed editor flashing unstyled during load (still in progress). #AP-349 -Version 5.0.0-preview-1 (2018-10-01) - Developer preview 1 - Initial list of features and changes is available at https://tiny.cloud/docs-preview/release-notes/new-features/ -Version 4.9.3 (2019-01-31) - Added a visualchars_default_state setting to the Visualchars Plugin. Patch contributed by mat3e. - Fixed a bug where scrolling on a page with more than one editor would cause a ResizeWindow event to fire. #TINY-3247 - Fixed a bug where if a plugin threw an error during initialisation the whole editor would fail to load. #TINY-3243 - Fixed a bug where getContent would include bogus elements when valid_elements setting was set up in a specific way. #TINY-3213 - Fixed a bug where only a few function key names could be used when creating keyboard shortcuts. #TINY-3146 - Fixed a bug where it wasn't possible to enter spaces into an editor after pressing shift+enter. #TINY-3099 - Fixed a bug where no caret would be rendered after backspacing to a contenteditable false element. #TINY-2998 - Fixed a bug where deletion to/from indented lists would leave list fragments in the editor. #TINY-2981 -Version 4.9.2 (2018-12-17) - Fixed a bug with pressing the space key on IE 11 would result in nbsp characters being inserted between words at the end of a block. #TINY-2996 - Fixed a bug where character composition using quote and space on US International keyboards would produce a space instead of a quote. #TINY-2999 - Fixed a bug where remove format wouldn't remove the inner most inline element in some situations. #TINY-2982 - Fixed a bug where outdenting an list item would affect attributes on other list items within the same list. #TINY-2971 - Fixed a bug where the DomParser filters wouldn't be applied for elements created when parsing invalid html. #TINY-2978 - Fixed a bug where setProgressState wouldn't automatically close floating ui elements like menus. #TINY-2896 - Fixed a bug where it wasn't possible to navigate out of a figcaption element using the arrow keys. #TINY-2894 - Fixed a bug where enter key before an image inside a link would remove the image. #TINY-2780 -Version 4.9.1 (2018-12-04) - Added functionality to insert html to the replacement feature of the Textpattern Plugin. #TINY-2839 - Fixed a bug where `editor.selection.getContent({format: 'text'})` didn't work as expected in IE11 on an unfocused editor. #TINY-2862 - Fixed a bug in the Textpattern Plugin where the editor would get an incorrect selection after inserting a text pattern on Safari. #TINY-2838 - Fixed a bug where the space bar didn't work correctly in editors with the forced_root_block setting set to false. #TINY-2816 -Version 4.9.0 (2018-11-27) - Added a replace feature to the Textpattern Plugin. #TINY-1908 - Added functionality to the Lists Plugin that improves the indentation logic. #TINY-1790 - Fixed a bug where it wasn't possible to delete/backspace when the caret was between a contentEditable=false element and a BR. #TINY-2372 - Fixed a bug where copying table cells without a text selection would fail to copy anything. #TINY-1789 - Implemented missing `autosave_restore_when_empty` functionality in the Autosave Plugin. Patch contributed by gzzo. #GH-4447 - Reduced insertion of unnecessary nonbreaking spaces in the editor. #TINY-1879 -Version 4.8.5 (2018-10-30) - Added a content_css_cors setting to the editor that adds the crossorigin="anonymous" attribute to link tags added by the StyleSheetLoader. #TINY-1909 - Fixed a bug where trying to remove formatting with a collapsed selection range would throw an exception. #GH-4636 - Fixed a bug in the image plugin that caused updating figures to split contenteditable elements. #GH-4563 - Fixed a bug that was causing incorrect viewport calculations for fixed position UI elements. #TINY-1897 - Fixed a bug where inline formatting would cause the delete key to do nothing. #TINY-1900 -Version 4.8.4 (2018-10-23) - Added support for the HTML5 `main` element. #TINY-1877 - Changed the keyboard shortcut to move focus to contextual toolbars to Ctrl+F9. #TINY-1812 - Fixed a bug where content css could not be loaded from another domain. #TINY-1891 - Fixed a bug on FireFox where the cursor would get stuck between two contenteditable false inline elements located inside of the same block element divided by a BR. #TINY-1878 - Fixed a bug with the insertContent method where nonbreaking spaces would be inserted incorrectly. #TINY-1868 - Fixed a bug where the toolbar of the inline editor would not be visible in some scenarios. #TINY-1862 - Fixed a bug where removing the editor while more than one notification was open would throw an error. #TINY-1845 - Fixed a bug where the menubutton would be rendered on top of the menu if the viewport didn't have enough height. #TINY-1678 - Fixed a bug with the annotations api where annotating collapsed selections caused problems. #TBS-2449 - Fixed a bug where wbr elements were being transformed into whitespace when using the Paste Plugin's paste as text setting. #GH-4638 - Fixed a bug where the Search and Replace didn't replace spaces correctly. #GH-4632 - Fixed a bug with sublist items not persisting selection. #GH-4628 - Fixed a bug with mceInsertRawHTML command not working as expected. #GH-4625 -Version 4.8.3 (2018-09-13) - Fixed a bug where the Wordcount Plugin didn't correctly count words within tables on IE11. #TINY-1770 - Fixed a bug where it wasn't possible to move the caret out of a table on IE11 and Firefox. #TINY-1682 - Fixed a bug where merging empty blocks didn't work as expected, sometimes causing content to be deleted. #TINY-1781 - Fixed a bug where the Textcolor Plugin didn't show the correct current color. #TINY-1810 - Fixed a bug where clear formatting with a collapsed selection would sometimes clear formatting from more content than expected. #TINY-1813 #TINY-1821 - Fixed a bug with the Table Plugin where it wasn't possible to keyboard navigate to the caption. #TINY-1818 -Version 4.8.2 (2018-08-09) - Moved annotator from "experimental" to "annotator" object on editor. #TBS-2398 - Improved the multiclick normalization across browsers. #TINY-1788 - Fixed a bug where running getSelectedBlocks with a collapsed selection between block elements would produce incorrect results. #TINY-1787 - Fixed a bug where the ScriptLoaders loadScript method would not work as expected in FireFox when loaded on the same page as a ShadowDOM polyfill. #TINY-1786 - Removed reference to ShadowDOM event.path as Blink based browsers now support event.composedPath. #TINY-1785 - Fixed a bug where a reference to localStorage would throw an "access denied" error in IE11 with strict security settings. #TINY-1782 - Fixed a bug where pasting using the toolbar button on an inline editor in IE11 would cause a looping behaviour. #TINY-1768 -Version 4.8.1 (2018-07-26) - Fixed a bug where the content of inline editors was being cleaned on every call of `editor.save()`. #TINY-1783 - Fixed a bug where the arrow of the Inlite Theme toolbar was being rendered incorrectly in RTL mode. #TINY-1776 - Fixed a bug with the Paste Plugin where pasting after inline contenteditable false elements moved the caret to the end of the line. #TINY-1758 -Version 4.8.0 (2018-06-27) - Added new "experimental" object in editor, with initial Annotator API. #TBS-2374 - Fixed a bug where deleting paragraphs inside of table cells would delete the whole table cell. #TINY-1759 - Fixed a bug in the Table Plugin where removing row height set on the row properties dialog did not update the table. #TINY-1730 - Fixed a bug with the font select toolbar item didn't update correctly. #TINY-1683 - Fixed a bug where all bogus elements would not be deleted when removing an inline editor. #TINY-1669 -Version 4.7.13 (2018-05-16) - Fixed a bug where Edge 17 wouldn't be able to select images or tables. #TINY-1679 - Fixed issue where whitespace wasn't preserved when the editor was initialized on pre elements. #TINY-1649 - Fixed a bug with the fontselect dropdowns throwing an error if the editor was hidden in Firefox. #TINY-1664 - Fixed a bug where it wasn't possible to merge table cells on IE 11. #TINY-1671 - Fixed a bug where textcolor wasn't applying properly on IE 11 in some situations. #TINY-1663 - Fixed a bug where the justifyfull command state wasn't working correctly. #TINY-1677 - Fixed a bug where the styles wasn't updated correctly when resizing some tables. #TINY-1668 - Added missing code menu item from the default menu config. #TINY-1648 - Added new align button for combining the separate align buttons into a menu button. #TINY-1652 -Version 4.7.12 (2018-05-03) - Added an option to filter out image svg data urls. - Added support for html5 details and summary elements. - Changed so the mce-abs-layout-item css rule targets html instead of body. Patch contributed by nazar-pc. - Fixed a bug where the "read" step on the mobile theme was still present on android mobile browsers. - Fixed a bug where all images in the editor document would reload on any editor change. - Fixed a bug with the Table Plugin where ObjectResized event wasn't being triggered on column resize. - Fixed so the selection is set to the first suitable caret position after editor.setContent called. - Fixed so links with xlink:href attributes are filtered correctly to prevent XSS. - Fixed a bug on IE11 where pasting content into an inline editor initialized on a heading element would create new editable elements. - Fixed a bug where readonly mode would not work as expected when the editor contained contentEditable=true elements. - Fixed a bug where the Link Plugin would throw an error when used together with the webcomponents polyfill. Patch contributed by 4esnog. - Fixed a bug where the "Powered by TinyMCE" branding link would break on XHTML pages. Patch contributed by tistre. - Fixed a bug where the same id would be used in the blobcache for all pasted images. Patch contributed by thorn0. -Version 4.7.11 (2018-04-11) - Added a new imagetools_credentials_hosts option to the Imagetools Plugin. - Fixed a bug where toggling a list containing empty LIs would throw an error. Patch contributed by bradleyke. - Fixed a bug where applying block styles to a text with the caret at the end of the paragraph would select all text in the paragraph. - Fixed a bug where toggling on the Spellchecker Plugin would trigger isDirty on the editor. - Fixed a bug where it was possible to enter content into selection bookmark spans. - Fixed a bug where if a non paragraph block was configured in forced_root_block the editor.getContent method would return incorrect values with an empty editor. - Fixed a bug where dropdown menu panels stayed open and fixed in position when dragging dialog windows. - Fixed a bug where it wasn't possible to extend table cells with the space button in Safari. - Fixed a bug where the setupeditor event would thrown an error when using the Compat3x Plugin. - Fixed a bug where an error was thrown in FontInfo when called on a detached element. -Version 4.7.10 (2018-04-03) - Removed the "read" step from the mobile theme. - Added normalization of triple clicks across browsers in the editor. - Added a `hasFocus` method to the editor that checks if the editor has focus. - Added correct icon to the Nonbreaking Plugin menu item. - Fixed so the `getContent`/`setContent` methods work even if the editor is not initialized. - Fixed a bug with the Media Plugin where query strings were being stripped from youtube links. - Fixed a bug where image styles were changed/removed when opening and closing the Image Plugin dialog. - Fixed a bug in the Table Plugin where some table cell styles were not correctly added to the content html. - Fixed a bug in the Spellchecker Plugin where it wasn't possible to change the spellchecker language. - Fixed so the the unlink action in the Link Plugin has a menu item and can be added to the contextmenu. - Fixed a bug where it wasn't possible to keyboard navigate to the start of an inline element on a new line within the same block element. - Fixed a bug with the Text Color Plugin where if used with an inline editor located at the bottom of the screen the colorpicker could appear off screen. - Fixed a bug with the UndoManager where undo levels were being added for nbzwsp characters. - Fixed a bug with the Table Plugin where the caret would sometimes be lost when keyboard navigating up through a table. - Fixed a bug where FontInfo.getFontFamily would throw an error when called on a removed editor. - Fixed a bug in Firefox where undo levels were not being added correctly for some specific operations. - Fixed a bug where initializing an inline editor inside of a table would make the whole table resizeable. - Fixed a bug where the fake cursor that appears next to tables on Firefox was positioned incorrectly when switching to fullscreen. - Fixed a bug where zwsp's weren't trimmed from the output from `editor.getContent({ format: 'text' })`. - Fixed a bug where the fontsizeselect/fontselect toolbar items showed the body info rather than the first possible caret position info on init. - Fixed a bug where it wasn't possible to select all content if the editor only contained an inline boundary element. - Fixed a bug where `content_css` urls with query strings wasn't working. - Fixed a bug in the Table Plugin where some table row styles were removed when changing other styles in the row properties dialog. -Version 4.7.9 (2018-02-27) - Fixed a bug where the editor target element didn't get the correct style when removing the editor. -Version 4.7.8 (2018-02-26) - Fixed an issue with the Help Plugin where the menuitem name wasn't lowercase. - Fixed an issue on MacOS where text and bold text did not have the same line-height in the autocomplete dropdown in the Link Plugin dialog. - Fixed a bug where the "paste as text" option in the Paste Plugin didn't work. - Fixed a bug where dialog list boxes didn't get positioned correctly in documents with scroll. - Fixed a bug where the Inlite Theme didn't use the Table Plugin api to insert correct tables. - Fixed a bug where the Inlite Theme panel didn't hide on blur in a correct way. - Fixed a bug where placing the cursor before a table in Firefox would scroll to the bottom of the table. - Fixed a bug where selecting partial text in table cells with rowspans and deleting would produce faulty tables. - Fixed a bug where the Preview Plugin didn't work on Safari due to sandbox security. - Fixed a bug where table cell selection using the keyboard threw an error. - Fixed so the font size and font family doesn't toggle the text but only sets the selected format on the selected text. - Fixed so the built-in spellchecking on Chrome and Safari creates an undo level when replacing words. -Version 4.7.7 (2018-02-19) - Added a border style selector to the advanced tab of the Image Plugin. - Added better controls for default table inserted by the Table Plugin. - Added new `table_responsive_width` option to the Table Plugin that controls whether to use pixel or percentage widths. - Fixed a bug where the Link Plugin text didn't update when a URL was pasted using the context menu. - Fixed a bug with the Spellchecker Plugin where using "Add to dictionary" in the context menu threw an error. - Fixed a bug in the Media Plugin where the preview node for iframes got default width and height attributes that interfered with width/height styles. - Fixed a bug where backslashes were being added to some font family names in Firefox in the fontselect toolbar item. - Fixed a bug where errors would be thrown when trying to remove an editor that had not yet been fully initialized. - Fixed a bug where the Imagetools Plugin didn't update the images atomically. - Fixed a bug where the Fullscreen Plugin was throwing errors when being used on an inline editor. - Fixed a bug where drop down menus weren't positioned correctly in inline editors on scroll. - Fixed a bug with a semicolon missing at the end of the bundled javascript files. - Fixed a bug in the Table Plugin with cursor navigation inside of tables where the cursor would sometimes jump into an incorrect table cells. - Fixed a bug where indenting a table that is a list item using the "Increase indent" button would create a nested table. - Fixed a bug where text nodes containing only whitespace were being wrapped by paragraph elements. - Fixed a bug where whitespace was being inserted after br tags inside of paragraph tags. - Fixed a bug where converting an indented paragraph to a list item would cause the list item to have extra padding. - Fixed a bug where Copy/Paste in an editor with a lot of content would cause the editor to scroll to the top of the content in IE11. - Fixed a bug with a memory leak in the DragHelper. Path contributed by ben-mckernan. - Fixed a bug where the advanced tab in the Media Plugin was being shown even if it didn't contain anything. Patch contributed by gabrieeel. - Fixed an outdated eventname in the EventUtils. Patch contributed by nazar-pc. - Fixed an issue where the Json.parse function would throw an error when being used on a page with strict CSP settings. - Fixed so you can place the curser before and after table elements within the editor in Firefox and Edge/IE. -Version 4.7.6 (2018-01-29) - Fixed a bug in the jquery integration where it threw an error saying that "global is not defined". - Fixed a bug where deleting a table cell whose previous sibling was set to contenteditable false would create a corrupted table. - Fixed a bug where highlighting text in an unfocused editor did not work correctly in IE11/Edge. - Fixed a bug where the table resize handles were not being repositioned when activating the Fullscreen Plugin. - Fixed a bug where the Imagetools Plugin dialog didn't honor editor RTL settings. - Fixed a bug where block elements weren't being merged correctly if you deleted from after a contenteditable false element to the beginning of another block element. - Fixed a bug where TinyMCE didn't work with module loaders like webpack. -Version 4.7.5 (2018-01-22) - Fixed bug with the Codesample Plugin where it wasn't possible to edit codesamples when the editor was in inline mode. - Fixed bug where focusing on the status bar broke the keyboard navigation functionality. - Fixed bug where an error would be thrown on Edge by the Table Plugin when pasting using the PowerPaste Plugin. - Fixed bug in the Table Plugin where selecting row border style from the dropdown menu in advanced row properties would throw an error. - Fixed bug with icons being rendered incorrectly on Chrome on Mac OS. - Fixed bug in the Textcolor Plugin where the font color and background color buttons wouldn't trigger an ExecCommand event. - Fixed bug in the Link Plugin where the url field wasn't forced LTR. - Fixed bug where the Nonbreaking Plugin incorrectly inserted spaces into tables. - Fixed bug with the inline theme where the toolbar wasn't repositioned on window resize. -Version 4.7.4 (2017-12-05) - Fixed bug in the Nonbreaking Plugin where the nonbreaking_force_tab setting was being ignored. - Fixed bug in the Table Plugin where changing row height incorrectly converted column widths to pixels. - Fixed bug in the Table Plugin on Edge and IE11 where resizing the last column after resizing the table would cause invalid column heights. - Fixed bug in the Table Plugin where keyboard navigation was not normalized between browsers. - Fixed bug in the Table Plugin where the colorpicker button would show even without defining the colorpicker_callback. - Fixed bug in the Table Plugin where it wasn't possible to set the cell background color. - Fixed bug where Firefox would throw an error when intialising an editor on an element that is hidden or not yet added to the DOM. - Fixed bug where Firefox would throw an error when intialising an editor inside of a hidden iframe. -Version 4.7.3 (2017-11-23) - Added functionality to open the Codesample Plugin dialog when double clicking on a codesample. Patch contributed by dakuzen. - Fixed bug where undo/redo didn't work correctly with some formats and caret positions. - Fixed bug where the color picker didn't show up in Table Plugin dialogs. - Fixed bug where it wasn't possible to change the width of a table through the Table Plugin dialog. - Fixed bug where the Charmap Plugin couldn't insert some special characters. - Fixed bug where editing a newly inserted link would not actually edit the link but insert a new link next to it. - Fixed bug where deleting all content in a table cell made it impossible to place the caret into it. - Fixed bug where the vertical alignment field in the Table Plugin cell properties dialog didn't do anything. - Fixed bug where an image with a caption showed two sets of resize handles in IE11. - Fixed bug where pressing the enter button inside of an h1 with contenteditable set to true would sometimes produce a p tag. - Fixed bug with backspace not working as expected before a noneditable element. - Fixed bug where operating on tables with invalid rowspans would cause an error to be thrown. - Fixed so a real base64 representation of the image is available on the blobInfo that the images_upload_handler gets called with. - Fixed so the image upload tab is available when the images_upload_handler is defined (and not only when the images_upload_url is defined). -Version 4.7.2 (2017-11-07) - Added newly rewritten Table Plugin. - Added support for attributes with colon in valid_elements and addValidElements. - Added support for dailymotion short url in the Media Plugin. Patch contributed by maat8. - Added support for converting to half pt when converting font size from px to pt. Patch contributed by danny6514. - Added support for location hash to the Autosave plugin to make it work better with SPAs using hash routing. - Added support for merging table cells when pasting a table into another table. - Changed so the language packs are only loaded once. Patch contributed by 0xor1. - Simplified the css for inline boundaries selection by switching to an attribute selector. - Fixed bug where an error would be thrown on editor initialization if the window.getSelection() returned null. - Fixed bug where holding down control or alt keys made the keyboard navigation inside an inline boundary not work as expected. - Fixed bug where applying formats in IE11 produced extra, empty paragraphs in the editor. - Fixed bug where the Word Count Plugin didn't count some mathematical operators correctly. - Fixed bug where removing an inline editor removed the element that the editor had been initialized on. - Fixed bug where setting the selection to the end of an editable container caused some formatting problems. - Fixed bug where an error would be thrown sometimes when an editor was removed because of the selection bookmark was being stored asynchronously. - Fixed a bug where an editor initialized on an empty list did not contain any valid cursor positions. - Fixed a bug with the Context Menu Plugin and webkit browsers on Mac where right-clicking inside a table would produce an incorrect selection. - Fixed bug where the Image Plugin constrain proportions setting wasn't working as expected. - Fixed bug where deleting the last character in a span with decorations produced an incorrect element when typing. - Fixed bug where focusing on inline editors made the toolbar flicker when moving between elements quickly. - Fixed bug where the selection would be stored incorrectly in inline editors when the mouseup event was fired outside the editor body. - Fixed bug where toggling bold at the end of an inline boundary would toggle off the whole word. - Fixed bug where setting the skin to false would not stop the loading of some skin css files. - Fixed bug in mobile theme where pinch-to-zoom would break after exiting the editor. - Fixed bug where sublists of a fully selected list would not be switched correctly when changing list style. - Fixed bug where inserting media by source would break the UndoManager. - Fixed bug where inserting some content into the editor with a specific selection would replace some content incorrectly. - Fixed bug where selecting all content with ctrl+a in IE11 caused problems with untoggling some formatting. - Fixed bug where the Search and Replace Plugin left some marker spans in the editor when undoing and redoing after replacing some content. - Fixed bug where the editor would not get a scrollbar when using the Fullscreen and Autoresize plugins together. - Fixed bug where the font selector would stop working correctly after selecting fonts three times. - Fixed so pressing the enter key inside of an inline boundary inserts a br after the inline boundary element. - Fixed a bug where it wasn't possible to use tab navigation inside of a table that was inside of a list. - Fixed bug where end_container_on_empty_block would incorrectly remove elements. - Fixed bug where content_styles weren't added to the Preview Plugin iframe. - Fixed so the beforeSetContent/beforeGetContent events are preventable. - Fixed bug where changing height value in Table Plugin advanced tab didn't do anything. - Fixed bug where it wasn't possible to remove formatting from content in beginning of table cell. -Version 4.7.1 (2017-10-09) - Fixed bug where theme set to false on an inline editor produced an extra div element after the target element. - Fixed bug where the editor drag icon was misaligned with the branding set to false. - Fixed bug where doubled menu items were not being removed as expected with the removed_menuitems setting. - Fixed bug where the Table of contents plugin threw an error when initialized. - Fixed bug where it wasn't possible to add inline formats to text selected right to left. - Fixed bug where the paste from plain text mode did not work as expected. - Fixed so the style previews do not set color and background color when selected. - Fixed bug where the Autolink plugin didn't work as expected with some formats applied on an empty editor. - Fixed bug where the Textpattern plugin were throwing errors on some patterns. - Fixed bug where the Save plugin saved all editors instead of only the active editor. Patch contributed by dannoe. -Version 4.7.0 (2017-10-03) - Added new mobile ui that is specifically designed for mobile devices. - Updated the default skin to be more modern and white since white is preferred by most implementations. - Restructured the default menus to be more similar to common office suites like Google Docs. - Fixed so theme can be set to false on both inline and iframe editor modes. - Fixed bug where inline editor would add/remove the visualblocks css multiple times. - Fixed bug where selection wouldn't be properly restored when editor lost focus and commands where invoked. - Fixed bug where toc plugin would generate id:s for headers even though a toc wasn't inserted into the content. - Fixed bug where is wasn't possible to drag/drop contents within the editor if paste_data_images where set to true. - Fixed bug where getParam and close in WindowManager would get the first opened window instead of the last opened window. - Fixed bug where delete would delete between cells inside a table in Firefox. -Version 4.6.7 (2017-09-18) - Fixed bug where paste wasn't working in IOS. - Fixed bug where the Word Count Plugin didn't count some mathematical operators correctly. - Fixed bug where inserting a list in a table caused the cell to expand in height. - Fixed bug where pressing enter in a list located inside of a table deleted list items instead of inserting new list item. - Fixed bug where copy and pasting table cells produced inconsistent results. - Fixed bug where initializing an editor with an ID of 'length' would throw an exception. - Fixed bug where it was possible to split a non merged table cell. - Fixed bug where copy and pasting a list with a very specific selection into another list would produce a nested list. - Fixed bug where copy and pasting ordered lists sometimes produced unordered lists. - Fixed bug where padded elements inside other elements would be treated as empty. - Added some missing translations to Image, Link and Help plugins. - Fixed so you can resize images inside a figure element. - Fixed bug where an inline TinyMCE editor initialized on a table did not set selection on load in Chrome. - Fixed the positioning of the inlite toolbar when the target element wasn't big enough to fit the toolbar. -Version 4.6.6 (2017-08-30) - Fixed so that notifications wrap long text content instead of bleeding outside the notification element. - Fixed so the content_style css is added after the skin and custom stylesheets. - Fixed bug where it wasn't possible to remove a table with the Cut button. - Fixed bug where the center format wasn't getting the same font size as the other formats in the format preview. - Fixed bug where the wordcount plugin wasn't counting hyphenated words correctly. - Fixed bug where all content pasted into the editor was added to the end of the editor. - Fixed bug where enter keydown on list item selection only deleted content and didn't create a new line. - Fixed bug where destroying the editor while the content css was still loading caused error notifications on Firefox. - Fixed bug where undoing cut operation in IE11 left some unwanted html in the editor content. - Fixed bug where enter keydown would throw an error in IE11. - Fixed bug where duplicate instances of an editor were added to the editors array when using the createEditor API. - Fixed bug where the formatter applied formats on the wrong content when spellchecker was activated. - Fixed bug where switching formats would reset font size on child nodes. - Fixed bug where the table caption element weren't always the first descendant to the table tag. - Fixed bug where pasting some content into the editor on chrome some newlines were removed. - Fixed bug where it wasn't possible to remove a list if a list item was a table element. - Fixed bug where copy/pasting partial selections of tables wouldn't produce a proper table. - Fixed bug where the searchreplace plugin could not find consecutive spaces. - Fixed bug where background color wasn't applied correctly on some partially selected contents. -Version 4.6.5 (2017-08-02) - Added new inline_boundaries_selector that allows you to specify the elements that should have boundaries. - Added new local upload feature this allows the user to upload images directly from the image dialog. - Added a new api for providing meta data for plugins. It will show up in the help dialog if it's provided. - Fixed so that the notifications created by the notification manager are more screen reader accessible. - Fixed bug where changing the list format on multiple selected lists didn't change all of the lists. - Fixed bug where the nonbreaking plugin would insert multiple undo levels when pressing the tab key. - Fixed bug where delete/backspace wouldn't render a caret when all editor contents where deleted. - Fixed bug where delete/backspace wouldn't render a caret if the deleted element was a single contentEditable false element. - Fixed bug where the wordcount plugin wouldn't count words correctly if word where typed after applying a style format. - Fixed bug where the wordcount plugin would count mathematical formulas as multiple words for example 1+1=2. - Fixed bug where formatting of triple clicked blocks on Chrome/Safari would result in styles being added outside the visual selection. - Fixed bug where paste would add the contents to the end of the editor area when inline mode was used. - Fixed bug where toggling off bold formatting on text entered in a new paragraph would add an extra line break. - Fixed bug where autolink plugin would only produce a link on every other consecutive link on Firefox. - Fixed bug where it wasn't possible to select all contents if the content only had one pre element. - Fixed bug where sizzle would produce lagging behavior on some sites due to repaints caused by feature detection. - Fixed bug where toggling off inline formats wouldn't include the space on selected contents with leading or trailing spaces. - Fixed bug where the cut operation in UI wouldn't work in Chrome. - Fixed bug where some legacy editor initialization logic would throw exceptions about editor settings not being defined. - Fixed bug where it wasn't possible to apply text color to links if they where part of a non collapsed selection. - Fixed bug where an exception would be thrown if the user selected a video element and then moved the focus outside the editor. - Fixed bug where list operations didn't work if there where block elements inside the list items. - Fixed bug where applying block formats to lists wrapped in block elements would apply to all elements in that wrapped block. -Version 4.6.4 (2017-06-13) - Fixed bug where the editor would move the caret when clicking on the scrollbar next to a content editable false block. - Fixed bug where the text color select dropdowns wasn't placed correctly when they didn't fit the width of the screen. - Fixed bug where the default editor line height wasn't working for mixed font size contents. - Fixed bug where the content css files for inline editors were loaded multiple times for multiple editor instances. - Fixed bug where the initial value of the font size/font family dropdowns wasn't displayed. - Fixed bug where the I18n api was not supporting arrays as the translation replacement values. - Fixed bug where chrome would display "The given range isn't in document." errors for invalid ranges passed to setRng. - Fixed bug where the compat3x plugin wasn't working since the global tinymce references wasn't resolved correctly. - Fixed bug where the preview plugin wasn't encoding the base url passed into the iframe contents producing a xss bug. - Fixed bug where the dom parser/serializer wasn't handling some special elements like noframes, title and xmp. - Fixed bug where the dom parser/serializer wasn't handling cdata sections with comments inside. - Fixed bug where the editor would scroll to the top of the editable area if a dialog was closed in inline mode. - Fixed bug where the link dialog would not display the right rel value if rel_list was configured. - Fixed bug where the context menu would select images on some platforms but not others. - Fixed bug where the filenames of images were not retained on dragged and drop into the editor from the desktop. - Fixed bug where the paste plugin would misrepresent newlines when pasting plain text and having forced_root_block configured. - Fixed so that the error messages for the imagetools plugin is more human readable. - Fixed so the internal validate setting for the parser/serializer can't be set from editor initialization settings. -Version 4.6.3 (2017-05-30) - Fixed bug where the arrow keys didn't work correctly when navigating on nested inline boundary elements. - Fixed bug where delete/backspace didn't work correctly on nested inline boundary elements. - Fixed bug where image editing didn't work on subsequent edits of the same image. - Fixed bug where charmap descriptions wouldn't properly wrap if they exceeded the width of the box. - Fixed bug where the default image upload handler only accepted 200 as a valid http status code. - Fixed so rel on target=_blank links gets forced with only noopener instead of both noopener and noreferrer. -Version 4.6.2 (2017-05-23) - Fixed bug where the SaxParser would run out of memory on very large documents. - Fixed bug with formatting like font size wasn't applied to del elements. - Fixed bug where various api calls would be throwing exceptions if they where invoked on a removed editor instance. - Fixed bug where the branding position would be incorrect if the editor was inside a hidden tab and then later showed. - Fixed bug where the color levels feature in the imagetools dialog wasn't working properly. - Fixed bug where imagetools dialog wouldn't pre-load images from CORS domains, before trying to prepare them for editing. - Fixed bug where the tab key would move the caret to the next table cell if being pressed inside a list inside a table. - Fixed bug where the cut/copy operations would loose parent context like the current format etc. - Fixed bug with format preview not working on invalid elements excluded by valid_elements. - Fixed bug where blocks would be merged in incorrect order on backspace/delete. - Fixed bug where zero length text nodes would cause issues with the undo logic if there where iframes present. - Fixed bug where the font size/family select lists would throw errors if the first node was a comment. - Fixed bug with csp having to allow local script evaluation since it was used to detect global scope. - Fixed bug where CSP required a relaxed option for javascript: URLs in unsupported legacy browsers. - Fixed bug where a fake caret would be rendered for td with the contenteditable=false. - Fixed bug where typing would be blocked on IE 11 when within a nested contenteditable=true/false structure. -Version 4.6.1 (2017-05-10) - Added configuration option to list plugin to disable tab indentation. - Fixed bug where format change on very specific content could cause the selection to change. - Fixed bug where TinyMCE could not be lazyloaded through jquery integration. - Fixed bug where entities in style attributes weren't decoded correctly on paste in webkit. - Fixed bug where fontsize_formats option had been renamed incorrectly. - Fixed bug with broken backspace/delete behaviour between contenteditable=false blocks. - Fixed bug where it wasn't possible to backspace to the previous line with the inline boundaries functionality turned on. - Fixed bug where is wasn't possible to move caret left and right around a linked image with the inline boundaries functionality turned on. - Fixed bug where pressing enter after/before hr element threw exception. Patch contributed bradleyke. - Fixed so the CSS in the visualblocks plugin doesn't overwrite background color. Patch contributed by Christian Rank. - Fixed bug where multibyte characters weren't encoded correctly. Patch contributed by James Tarkenton. - Fixed bug where shift-click to select within contenteditable=true fields wasn't working. -Version 4.6.0 (2017-05-04) - Dropped support for IE 8-10 due to market share and lack of support from Microsoft. See tinymce docs for details. - Added an inline boundary caret position feature that makes it easier to type at the beginning/end of links/code elements. - Added a help plugin that adds a button and a dialog showing the editor shortcuts and loaded plugins. - Added an inline_boundaries option that allows you to disable the inline boundary feature if it's not desired. - Added a new ScrollIntoView event that allows you to override the default scroll to element behavior. - Added role and aria- attributes as valid elements in the default valid elements config. - Added new internal flag for PastePreProcess/PastePostProcess this is useful to know if the paste was coming from an external source. - Added new ignore function to UndoManager this works similar to transact except that it doesn't add an undo level by default. - Fixed so that urls gets retained for images when being edited. This url is then passed on to the upload handler. - Fixed so that the editors would be initialized on readyState interactive instead of complete. - Fixed so that the init event of the editor gets fired once all contentCSS files have been properly loaded. - Fixed so that width/height of the editor gets taken from the textarea element if it's explicitly specified in styles. - Fixed so that keep_styles set to false no longer clones class/style from the previous paragraph on enter. - Fixed so that the default line-height is 1.2em to avoid zwnbsp characters from producing text rendering glitches on Windows. - Fixed so that loading errors of content css gets presented by a notification message. - Fixed so figure image elements can be linked when selected this wraps the figure image in a anchor element. - Fixed bug where it wasn't possible to copy/paste rows with colspans by using the table copy/paste feature. - Fixed bug where the protect setting wasn't properly applied to header/footer parts when using the fullpage plugin. - Fixed bug where custom formats that specified upper case element names where not applied correctly. - Fixed bug where some screen readers weren't reading buttons due to an aria specific fix for IE 8. - Fixed bug where cut wasn't working correctly on iOS due to it's clipboard API not working correctly. - Fixed bug where Edge would paste div elements instead of paragraphs when pasting plain text. - Fixed bug where the textpattern plugin wasn't dealing with trailing punctuations correctly. - Fixed bug where image editing would some times change the image format from jpg to png. - Fixed bug where some UI elements could be inserted into the toolbar even if they where not registered. - Fixed bug where it was possible to click the TD instead of the character in the character map and that caused an exception. - Fixed bug where the font size/font family dropdowns would sometimes show an incorrect value due to css not being loaded in time. - Fixed bug with the media plugin inserting undefined instead of retaining size when media_dimensions was set to false. - Fixed bug with deleting images when forced_root_blocks where set to false. - Fixed bug where input focus wasn't properly handled on nested content editable elements. - Fixed bug where Chrome/Firefox would throw an exception when selecting images due to recent change of setBaseAndExtent support. - Fixed bug where malformed blobs would throw exceptions now they are simply ignored. - Fixed bug where backspace/delete wouldn't work properly in some cases where all contents was selected in WebKit. - Fixed bug with Angular producing errors since it was expecting events objects to be patched with their custom properties. - Fixed bug where the formatter would apply formatting to spellchecker errors now all bogus elements are excluded. - Fixed bug with backspace/delete inside table caption elements wouldn't behave properly on IE 11. - Fixed bug where typing after a contenteditable false inline element could move the caret to the end of that element. - Fixed bug where backspace before/after contenteditable false blocks wouldn't properly remove the right element. - Fixed bug where backspace before/after contenteditable false inline elements wouldn't properly empty the current block element. - Fixed bug where vertical caret navigation with a custom line-height would sometimes match incorrect positions. - Fixed bug with paste on Edge where character encoding wasn't handled properly due to a browser bug. - Fixed bug with paste on Edge where extra fragment data was inserted into the contents when pasting. - Fixed bug with pasting contents when having a whole block element selected on WebKit could cause WebKit spans to appear. - Fixed bug where the visualchars plugin wasn't working correctly showing invisible nbsp characters. - Fixed bug where browsers would hang if you tried to load some malformed html contents. - Fixed bug where the init call promise wouldn't resolve if the specified selector didn't find any matching elements. - Fixed bug where the Schema isValidChild function was case sensitive. -Version 4.5.3 (2017-02-01) - Added keyboard navigation for menu buttons when the menu is in focus. - Added api to the list plugin for setting custom classes/attributes on lists. - Added validation for the anchor plugin input field according to W3C id naming specifications. - Fixed bug where media placeholders were removed after resize with the forced_root_block setting set to false. - Fixed bug where deleting selections with similar sibling nodes sometimes deleted the whole document. - Fixed bug with inlite theme where several toolbars would appear scrolling when more than one instance of the editor was in use. - Fixed bug where the editor would throw error with the fontselect plugin on hidden editor instances in Firefox. - Fixed bug where the background color would not stretch to the font size. - Fixed bug where font size would be removed when changing background color. - Fixed bug where the undomanager trimmed away whitespace between nodes on undo/redo. - Fixed bug where media_dimensions=false in media plugin caused the editor to throw an error. - Fixed bug where IE was producing font/u elements within links on paste. - Fixed bug where some button tooltips were broken when compat3x was in use. - Fixed bug where backspace/delete/typeover would remove the caption element. - Fixed bug where powerspell failed to function when compat3x was enabled. - Fixed bug where it wasn't possible to apply sub/sup on text with large font size. - Fixed bug where pre tags with spaces weren't treated as content. - Fixed bug where Meta+A would select the entire document instead of all contents in nested ce=true elements. -Version 4.5.2 (2017-01-04) - Added missing keyboard shortcut description for the underline menu item in the format menu. - Fixed bug where external blob urls wasn't properly handled by editor upload logic. Patch contributed by David Oviedo. - Fixed bug where urls wasn't treated as a single word by the wordcount plugin. - Fixed bug where nbsp characters wasn't treated as word delimiters by the wordcount plugin. - Fixed bug where editor instance wasn't properly passed to the format preview logic. Patch contributed by NullQuery. - Fixed bug where the fake caret wasn't hidden when you moved selection to a cE=false element. - Fixed bug where it wasn't possible to edit existing code sample blocks. - Fixed bug where it wasn't possible to delete editor contents if the selection included an empty block. - Fixed bug where the formatter wasn't expanding words on some international characters. Patch contributed by Martin Larochelle. - Fixed bug where the open link feature wasn't working correctly on IE 11. - Fixed bug where enter before/after a cE=false block wouldn't properly padd the paragraph with an br element. - Fixed so font size and font family select boxes always displays a value by using the runtime style as a fallback. - Fixed so missing plugins will be logged to console as warnings rather than halting the initialization of the editor. - Fixed so splitbuttons become normal buttons in advlist plugin if styles are empty. Patch contributed by René Schleusner. - Fixed so you can multi insert rows/cols by selecting table cells and using insert rows/columns. -Version 4.5.1 (2016-12-07) - Fixed bug where the lists plugin wouldn't initialize without the advlist plugins if served from cdn. - Fixed bug where selectors with "*" would cause the style format preview to throw an error. - Fixed bug with toggling lists off on lists with empty list items would throw an error. - Fixed bug where editing images would produce non existing blob uris. - Fixed bug where the offscreen toc selection would be treated as the real toc element. - Fixed bug where the aria level attribute for element path would have an incorrect start index. - Fixed bug where the offscreen selection of cE=false that where very wide would be shown onscreen. Patch contributed by Steven Bufton. - Fixed so the default_link_target gets applied to links created by the autolink plugin. - Fixed so that the name attribute gets removed by the anchor plugin if editing anchors. -Version 4.5.0 (2016-11-23) - Added new toc plugin allows you to insert table of contents based on editor headings. - Added new auto complete menu to all url fields. Adds history, link to anchors etc. - Added new sidebar api that allows you to add custom sidebar panels and buttons to toggle these. - Added new insert menu button that allows you to have multiple insert functions under the same menu button. - Added new open link feature to ctrl+click, alt+enter and context menu. - Added new media_embed_handler option to allow the media plugin to be populated with custom embeds. - Added new support for editing transparent images using the image tools dialog. - Added new images_reuse_filename option to allow filenames of images to be retained for upload. - Added new security feature where links with target="_blank" will by default get rel="noopener noreferrer". - Added new allow_unsafe_link_target to allow you to opt-out of the target="_blank" security feature. - Added new style_formats_autohide option to automatically hide styles based on context. - Added new codesample_content_css option to specify where the code sample prism css is loaded from. - Added new support for Japanese/Chinese word count following the unicode standards on this. - Added new fragmented undo levels this dramatically reduces flicker on contents with iframes. - Added new live previews for complex elements like table or lists. - Fixed bug where it wasn't possible to properly tab between controls in a dialog with a disabled form item control. - Fixed bug where firefox would generate a rectangle on elements produced after/before a cE=false elements. - Fixed bug with advlist plugin not switching list element format properly in some edge cases. - Fixed bug where col/rowspans wasn't correctly computed by the table plugin in some cases. - Fixed bug where the table plugin would thrown an error if object_resizing was disabled. - Fixed bug where some invalid markup would cause issues when running in XHTML mode. Patch contributed by Charles Bourasseau. - Fixed bug where the fullscreen class wouldn't be removed properly when closing dialogs. - Fixed bug where the PastePlainTextToggle event wasn't fired by the paste plugin when the state changed. - Fixed bug where table the row type wasn't properly updated in table row dialog. Patch contributed by Matthias Balmer. - Fixed bug where select all and cut wouldn't place caret focus back to the editor in WebKit. Patch contributed by Daniel Jalkut. - Fixed bug where applying cell/row properties to multiple cells/rows would reset other unchanged properties. - Fixed bug where some elements in the schema would have redundant/incorrect children. - Fixed bug where selector and target options would cause issues if used together. - Fixed bug where drag/drop of images from desktop on chrome would thrown an error. - Fixed bug where cut on WebKit/Blink wouldn't add an undo level. - Fixed bug where IE 11 would scroll to the cE=false elements when they where selected. - Fixed bug where keys like F5 wouldn't work when a cE=false element was selected. - Fixed bug where the undo manager wouldn't stop the typing state when commands where executed. - Fixed bug where unlink on wrapped links wouldn't work properly. - Fixed bug with drag/drop of images on WebKit where the image would be deleted form the source editor. - Fixed bug where the visual characters mode would be disabled when contents was extracted from the editor. - Fixed bug where some browsers would toggle of formats applied to the caret when clicking in the editor toolbar. - Fixed bug where the custom theme function wasn't working correctly. - Fixed bug where image option for custom buttons required you to have icon specified as well. - Fixed bug where the context menu and contextual toolbars would be visible at the same time and sometimes overlapping. - Fixed bug where the noneditable plugin would double wrap elements when using the noneditable_regexp option. - Fixed bug where tables would get padding instead of margin when you used the indent button. - Fixed bug where the charmap plugin wouldn't properly insert non breaking spaces. - Fixed bug where the color previews in color input boxes wasn't properly updated. - Fixed bug where the list items of previous lists wasn't merged in the right order. - Fixed bug where it wasn't possible to drag/drop inline-block cE=false elements on IE 11. - Fixed bug where some table cell merges would produce incorrect rowspan/colspan. - Fixed so the font size of the editor defaults to 14px instead of 11px this can be overridden by custom css. - Fixed so wordcount is debounced to reduce cpu hogging on larger texts. - Fixed so tinymce global gets properly exported as a module when used with some module bundlers. - Fixed so it's possible to specify what css properties you want to preview on specific formats. - Fixed so anchors are contentEditable=false while within the editor. - Fixed so selected contents gets wrapped in a inline code element by the codesample plugin. - Fixed so conditional comments gets properly stripped independent of case. Patch contributed by Georgii Dolzhykov. - Fixed so some escaped css sequences gets properly handled. Patch contributed by Georgii Dolzhykov. - Fixed so notifications with the same message doesn't get displayed at the same time. - Fixed so F10 can be used as an alternative key to focus to the toolbar. - Fixed various api documentation issues and typos. - Removed layer plugin since it wasn't really ported from 3.x and there doesn't seem to be much use for it. - Removed moxieplayer.swf from the media plugin since it wasn't used by the media plugin. - Removed format state from the advlist plugin to be more consistent with common word processors. -Version 4.4.3 (2016-09-01) - Fixed bug where copy would produce an exception on Chrome. - Fixed bug where deleting lists on IE 11 would merge in correct text nodes. - Fixed bug where deleting partial lists with indentation wouldn't cause proper normalization. -Version 4.4.2 (2016-08-25) - Added new importcss_exclusive option to disable unique selectors per group. - Added new group specific selector_converter option to importcss plugin. - Added new codesample_languages option to apply custom languages to codesample plugin. - Added new codesample_dialog_width/codesample_dialog_height options. - Fixed bug where fullscreen button had an incorrect keyboard shortcut. - Fixed bug where backspace/delete wouldn't work correctly from a block to a cE=false element. - Fixed bug where smartpaste wasn't detecting links with special characters in them like tilde. - Fixed bug where the editor wouldn't get proper focus if you clicked on a cE=false element. - Fixed bug where it wasn't possible to copy/paste table rows that had merged cells. - Fixed bug where merging cells could some times produce invalid col/rowspan attibute values. - Fixed bug where getBody would sometimes thrown an exception now it just returns null if the iframe is clobbered. - Fixed bug where drag/drop of cE=false element wasn't properly constrained to viewport. - Fixed bug where contextmenu on Mac would collapse any selection to a caret. - Fixed bug where rtl mode wasn't rendered properly when loading a language pack with the rtl flag. - Fixed bug where Kamer word bounderies would be stripped from contents. - Fixed bug where lists would sometimes render two dots or numbers on the same line. - Fixed bug where the skin_url wasn't used by the inlite theme. - Fixed so data attributes are ignored when comparing formats in the formatter. - Fixed so it's possible to disable inline toolbars in the inlite theme. - Fixed so template dialog gets resized if it doesn't fit the window viewport. -Version 4.4.1 (2016-07-26) - Added smart_paste option to paste plugin to allow disabling the paste behavior if needed. - Fixed bug where png urls wasn't properly detected by the smart paste logic. - Fixed bug where the element path wasn't working properly when multiple editor instances where used. - Fixed bug with creating lists out of multiple paragraphs would just create one list item instead of multiple. - Fixed bug where scroll position wasn't properly handled by the inlite theme to place the toolbar properly. - Fixed bug where multiple instances of the editor using the inlite theme didn't render the toolbar properly. - Fixed bug where the shortcut label for fullscreen mode didn't match the actual shortcut key. - Fixed bug where it wasn't possible to select cE=false blocks using touch devices on for example iOS. - Fixed bug where it was possible to select the child image within a cE=false on IE 11. - Fixed so inserts of html containing lists doesn't merge with any existing lists unless it's a paste operation. -Version 4.4.0 (2016-06-30) - Added new inlite theme this is a more lightweight inline UI. - Added smarter paste logic that auto detects urls in the clipboard and inserts images/links based on that. - Added a better image resize algorithm for better image quality in the imagetools plugin. - Fixed bug where it wasn't possible to drag/dropping cE=false elements on FF. - Fixed bug where backspace/delete before/after a cE=false block would produce a new paragraph. - Fixed bug where list style type css property wasn't preserved when indenting lists. - Fixed bug where merging of lists where done even if the list style type was different. - Fixed bug where the image_dataimg_filter function wasn't used when pasting images. - Fixed bug where nested editable within a non editable element would cause scroll on focus in Chrome. - Fixed so invalid targets for inline mode is blocked on initialization. We only support elements that can have children. -Version 4.3.13 (2016-06-08) - Added characters with a diacritical mark to charmap plugin. Patch contributed by Dominik Schilling. - Added better error handling if the image proxy service would produce errors. - Fixed issue with pasting list items into list items would produce nested list rather than a merged list. - Fixed bug where table selection could get stuck in selection mode for inline editors. - Fixed bug where it was possible to place the caret inside the resize grid elements. - Fixed bug where it wasn't possible to place in elements horizontally adjacent cE=false blocks. - Fixed bug where multiple notifications wouldn't be properly placed on screen. - Fixed bug where multiple editor instance of the same id could be produces in some specific integrations. -Version 4.3.12 (2016-05-10) - Fixed bug where focus calls couldn't be made inside the editors PostRender event handler. - Fixed bug where some translations wouldn't work as expected due to a bug in editor.translate. - Fixed bug where the node change event could fire with a node out side the root of the editor. - Fixed bug where Chrome wouldn't properly present the keyboard paste clipboard details when paste was clicked. - Fixed bug where merged cells in tables couldn't be selected from right to left. - Fixed bug where insert row wouldn't properly update a merged cells rowspan property. - Fixed bug where the color input boxes preview field wasn't properly set on initialization. - Fixed bug where IME composition inside table cells wouldn't work as expected on IE 11. - Fixed so all shadow dom support is under and experimental flag due to flaky browser support. -Version 4.3.11 (2016-04-25) - Fixed bug where it wasn't possible to insert empty blocks though the API unless they where padded. - Fixed bug where you couldn't type the Euro character on Windows. - Fixed bug where backspace/delete from a cE=false element to a text block didn't work properly. - Fixed bug where the text color default grid would render incorrectly. - Fixed bug where the codesample plugin wouldn't load the css in the editor for multiple editors. - Fixed so the codesample plugin textarea gets focused by default. -Version 4.3.10 (2016-04-12) - Fixed bug where the key "y" on WebKit couldn't be entered due to conflict with keycode for F10 on keypress. -Version 4.3.9 (2016-04-12) - Added support for focusing the contextual toolbars using keyboard. - Added keyboard support for slider UI controls. You can no increase/decrease using arrow keys. - Added url pattern matching for Dailymotion to media plugin. Patch contributed by Bertrand Darbon. - Added body_class to template plugin preview. Patch contributed by Milen Petrinski. - Added options to better override textcolor pickers with custom colors. Patch contributed by Xavier Boubert. - Added visual arrows to inline contextual toolbars so that they point to the element being active. - Fixed so toolbars for tables or other larger elements get better positioned below the scrollable viewport. - Fixed bug where it was possible to click links inside cE=false blocks. - Fixed bug where event targets wasn't properly handled in Safari Technical Preview. - Fixed bug where drag/drop text in FF 45 would make the editor caret invisible. - Fixed bug where the remove state wasn't properly set on editor instances when detected as clobbered. - Fixed bug where offscreen selection of some cE=false elements would render onscreen. Patch contributed by Steven Bufton - Fixed bug where enter would clone styles out side the root on editors inside a span. Patch contributed by ChristophKaser. - Fixed bug where drag/drop of images into the editor didn't work correctly in FF. - Fixed so the first item in panels for the imagetools dialog gets proper keyboard focus. - Changed the Meta+Shift+F shortcut to Ctrl+Shift+F since Czech, Slovak, Polish languages used the first one for input. -Version 4.3.8 (2016-03-15) - Fixed bug where inserting HR at the end of a block element would produce an extra empty block. - Fixed bug where links would be clickable when readonly mode was enabled. - Fixed bug where the formatter would normalize to the wrong node on very specific content. - Fixed bug where some nested list items couldn't be indented properly. - Fixed bug where links where clickable in the preview dialog. - Fixed so the alt attribute doesn't get padded with an empty value by default. - Fixed so nested alignment works more correctly. You will now alter the alignment to the closest block parent. -Version 4.3.7 (2016-03-02) - Fixed bug where incorrect icons would be rendered for imagetools edit and color levels. - Fixed bug where navigation using arrow keys inside a SelectBox didn't move up/down. - Fixed bug where the visualblocks plugin would render borders round internal UI elements. -Version 4.3.6 (2016-03-01) - Added new paste_remember_plaintext_info option to allow a global disable of the plain text mode notification. - Added new PastePlainTextToggle event that fires when plain text mode toggles on/off. - Fixed bug where it wasn't possible to select media elements since the drag logic would snap it to mouse cursor. - Fixed bug where it was hard to place the caret inside nested cE=true elements when the outer cE=false element was focused. - Fixed bug where editors wouldn't properly initialize if both selector and mode where used. - Fixed bug where IME input inside table cells would switch the IME off. - Fixed bug where selection inside the first table cell would cause the whole table cell to get selected. - Fixed bug where error handling of images being uploaded wouldn't properly handle faulty statuses. - Fixed bug where inserting contents before a HR would cause an exception to be thrown. - Fixed bug where copy/paste of Excel data would be inserted as an image. - Fixed caret position issues with copy/paste of inline block cE=false elements. - Fixed issues with various menu item focus bugs in Chrome. Where the focused menu bar item wasn't properly blurred. - Fixed so the notifications have a solid background since it would be hard to read if there where text under it. - Fixed so notifications gets animated similar to the ones used by dialogs. - Fixed so larger images that gets pasted is handled better. - Fixed so the window close button is more uniform on various platform and also increased it's hit area. -Version 4.3.5 (2016-02-11) - Npm version bump due to package not being fully updated. -Version 4.3.4 (2016-02-11) - Added new OpenWindow/CloseWindow events that gets fired when windows open/close. - Added new NewCell/NewRow events that gets fired when table cells/rows are created. - Added new Promise return value to tinymce.init makes it easier to handle initialization. - Removed the jQuery version the jQuery plugin is now moved into the main package. - Removed jscs from build process since eslint can now handle code style checking. - Fixed various bugs with drag/drop of contentEditable:false elements. - Fixed bug where deleting of very specific nested list items would result in an odd list. - Fixed bug where lists would get merged with adjacent lists outside the editable inline root. - Fixed bug where MS Edge would crash when closing a dialog then clicking a menu item. - Fixed bug where table cell selection would add undo levels. - Fixed bug where table cell selection wasn't removed when inline editor where removed. - Fixed bug where table cell selection wouldn't work properly on nested tables. - Fixed bug where table merge menu would be available when merging between thead and tbody. - Fixed bug where table row/column resize wouldn't get properly removed when the editor was removed. - Fixed bug where Chrome would scroll to the editor if there where a empty hash value in document url. - Fixed bug where the cache suffix wouldn't work correctly with the importcss plugin. - Fixed bug where selection wouldn't work properly on MS Edge on Windows Phone 10. - Fixed so adjacent pre blocks gets joined into one pre block since that seems like the user intent. - Fixed so events gets properly dispatched in shadow dom. Patch provided by Nazar Mokrynskyi. -Version 4.3.3 (2016-01-14) - Added new table_resize_bars configuration setting. This setting allows you to disable the table resize bars. - Added new beforeInitialize event to tinymce.util.XHR lets you modify XHR properties before open. Patch contributed by Brent Clintel. - Added new autolink_pattern setting to autolink plugin. Enables you to override the default autolink formats. Patch contributed by Ben Tiedt. - Added new charmap option that lets you override the default charmap of the charmap plugin. - Added new charmap_append option that lets you add new characters to the default charmap of the charmap plugin. - Added new insertCustomChar event that gets fired when a character is inserted by the charmap plugin. - Fixed bug where table cells started with a superfluous   in IE10+. - Fixed bug where table plugin would retain all BR tags when cells were merged. - Fixed bug where media plugin would strip underscores from youtube urls. - Fixed bug where IME input would fail on IE 11 if you typed within a table. - Fixed bug where double click selection of a word would remove the space before the word on insert contents. - Fixed bug where table plugin would produce exceptions when hovering tables with invalid structure. - Fixed bug where fullscreen wouldn't scroll back to it's original position when untoggled. - Fixed so the template plugins templates setting can be a function that gets a callback that can provide templates. -Version 4.3.2 (2015-12-14) - Fixed bug where the resize bars for table cells were not affected by the object_resizing property. - Fixed bug where the contextual table toolbar would appear incorrectly if TinyMCE was initialized inline inside a table. - Fixed bug where resizing table cells did not fire a node change event or add an undo level. - Fixed bug where double click selection of text on IE 11 wouldn't work properly. - Fixed bug where codesample plugin would incorrectly produce br elements inside code elements. - Fixed bug where media plugin would strip dashes from youtube urls. - Fixed bug where it was possible to move the caret into the table resize bars. - Fixed bug where drag/drop into a cE=false element was possible on IE. -Version 4.3.1 (2015-11-30) - Fixed so it's possible to disable the table inline toolbar by setting it to false or an empty string. - Fixed bug where it wasn't possible to resize some tables using the drag handles. - Fixed bug where unique id:s would clash for multiple editor instances and cE=false selections. - Fixed bug where the same plugin could be initialized multiple times. - Fixed bug where the table inline toolbars would be displayed at the same time as the image toolbars. - Fixed bug where the table selection rect wouldn't be removed when selecting another control element. -Version 4.3.0 (2015-11-23) - Added new table column/row resize support. Makes it a lot more easy to resize the columns/rows in a table. - Added new table inline toolbar. Makes it easier to for example add new rows or columns to a table. - Added new notification API. Lets you display floating notifications to the end user. - Added new codesample plugin that lets you insert syntax highlighted pre elements into the editor. - Added new image_caption to images. Lets you create images with captions using a HTML5 figure/figcaption elements. - Added new live previews of embeded videos. Lets you play the video right inside the editor. - Added new setDirty method and "dirty" event to the editor. Makes it easier to track the dirty state change. - Added new setMode method to Editor instances that lets you dynamically switch between design/readonly. - Added new core support for contentEditable=false elements within the editor overrides the browsers broken behavior. - Rewrote the noneditable plugin to use the new contentEditable false core logic. - Fixed so the dirty state doesn't set to false automatically when the undo index is set to 0. - Fixed the Selection.placeCaretAt so it works better on IE when the coordinate is between paragraphs. - Fixed bug where data-mce-bogus="all" element contents where counted by the word count plugin. - Fixed bug where contentEditable=false elements would be indented by the indent buttons. - Fixed bug where images within contentEditable=false would be selected in WebKit on mouse click. - Fixed bug in DOMUntils split method where the replacement parameter wouldn't work on specific cases. - Fixed bug where the importcss plugin would import classes from the skin content css file. - Fixed so all button variants have a wrapping span for it's text to make it easier to skin. - Fixed so it's easier to exit pre block using the arrow keys. - Fixed bug where listboxes with fix widths didn't render correctly. -Version 4.2.8 (2015-11-13) - Fixed bug where it was possible to delete tables as the inline root element if all columns where selected. - Fixed bug where the UI buttons active state wasn't properly updated due to recent refactoring of that logic. -Version 4.2.7 (2015-10-27) - Fixed bug where backspace/delete would remove all formats on the last paragraph character in WebKit/Blink. - Fixed bug where backspace within a inline format element with a bogus caret container would move the caret. - Fixed bug where backspace/delete on selected table cells wouldn't add an undo level. - Fixed bug where script tags embedded within the editor could sometimes get a mce- prefix prepended to them - Fixed bug where validate: false option could produce an error to be thrown from the Serialization step. - Fixed bug where inline editing of a table as the root element could let the user delete that table. - Fixed bug where inline editing of a table as the root element wouldn't properly handle enter key. - Fixed bug where inline editing of a table as the root element would normalize the selection incorrectly. - Fixed bug where inline editing of a list as the root element could let the user delete that list. - Fixed bug where inline editing of a list as the root element could let the user split that list. - Fixed bug where resize handles would be rendered on editable root elements such as table. -Version 4.2.6 (2015-09-28) - Added capability to set request headers when using XHRs. - Added capability to upload local images automatically default delay is set to 30 seconds after editing images. - Added commands ids mceEditImage, mceAchor and mceMedia to be avaiable from execCommand. - Added Edge browser to saucelabs grunt task. Patch contributed by John-David Dalton. - Fixed bug where blob uris not produced by tinymce would produce HTML invalid markup. - Fixed bug where selection of contents of a nearly empty editor in Edge would sometimes fail. - Fixed bug where color styles woudln't be retained on copy/paste in Blink/Webkit. - Fixed bug where the table plugin would throw an error when inserting rows after a child table. - Fixed bug where the template plugin wouldn't handle functions as variable replacements. - Fixed bug where undo/redo sometimes wouldn't work properly when applying formatting collapsed ranges. - Fixed bug where shift+delete wouldn't do a cut operation on Blink/WebKit. - Fixed bug where cut action wouldn't properly store the before selection bookmark for the undo level. - Fixed bug where backspace in side an empty list element on IE would loose editor focus. - Fixed bug where the save plugin wouldn't enable the buttons when a change occurred. - Fixed bug where Edge wouldn't initialize the editor if a document.domain was specified. - Fixed bug where enter key before nested images would sometimes not properly expand the previous block. - Fixed bug where the inline toolbars wouldn't get properly hidden when blurring the editor instance. - Fixed bug where Edge would paste Chinese characters on some Windows 10 installations. - Fixed bug where IME would loose focus on IE 11 due to the double trailing br bug fix. - Fixed bug where the proxy url in imagetools was incorrect. Patch contributed by Wong Ho Wang. -Version 4.2.5 (2015-08-31) - Added fullscreen capability to embedded youtube and vimeo videos. - Fixed bug where the uploadImages call didn't work on IE 10. - Fixed bug where image place holders would be uploaded by uploadImages call. - Fixed bug where images marked with bogus would be uploaded by the uploadImages call. - Fixed bug where multiple calls to uploadImages would result in decreased performance. - Fixed bug where pagebreaks were editable to imagetools patch contributed by Rasmus Wallin. - Fixed bug where the element path could cause too much recursion exception. - Fixed bug for domains containing ".min". Patch contributed by Loïc Février. - Fixed so validation of external links to accept a number after www. Patch contributed by Victor Carvalho. - Fixed so the charmap is exposed though execCommand. Patch contributed by Matthew Will. - Fixed so that the image uploads are concurrent for improved performance. - Fixed various grammar problems in inline documentation. Patches provided by nikolas. -Version 4.2.4 (2015-08-17) - Added picture as a valid element to the HTML 5 schema. Patch contributed by Adam Taylor. - Fixed bug where contents would be duplicated on drag/drop within the same editor. - Fixed bug where floating/alignment of images on Edge wouldn't work properly. - Fixed bug where it wasn't possible to drag images on IE 11. - Fixed bug where image selection on Edge would sometimes fail. - Fixed bug where contextual toolbars icons wasn't rendered properly when using the toolbar_items_size. - Fixed bug where searchreplace dialog doesn't get prefilled with the selected text. - Fixed bug where fragmented matches wouldn't get properly replaced by the searchreplace plugin. - Fixed bug where enter key wouldn't place the caret if was after a trailing space within an inline element. - Fixed bug where the autolink plugin could produce multiple links for the same text on Gecko. - Fixed bug where EditorUpload could sometimes throw an exception if the blob wasn't found. - Fixed xss issues with media plugin not properly filtering out some script attributes. -Version 4.2.3 (2015-07-30) - Fixed bug where image selection wasn't possible on Edge due to incompatible setBaseAndExtend API. - Fixed bug where image blobs urls where not properly destroyed by the imagetools plugin. - Fixed bug where keyboard shortcuts wasn't working correctly on IE 8. - Fixed skin issue where the borders of panels where not visible on IE 8. -Version 4.2.2 (2015-07-22) - Fixed bug where float panels were not being hidden on inline editor blur when fixed_toolbar_container config option was in use. - Fixed bug where combobox states wasn't properly updated if contents where updated without keyboard. - Fixed bug where pasting into textbox or combobox would move the caret to the end of text. - Fixed bug where removal of bogus span elements before block elements would remove whitespace between nodes. - Fixed bug where repositioning of inline toolbars where async and producing errors if the editor was removed from DOM to early. Patch by iseulde. - Fixed bug where element path wasn't working correctly. Patch contributed by iseulde. - Fixed bug where menus wasn't rendered correctly when custom images where added to a menu. Patch contributed by Naim Hammadi. -Version 4.2.1 (2015-06-29) - Fixed bug where back/forward buttons in the browser would render blob images as broken images. - Fixed bug where Firefox would throw regexp to big error when replacing huge base64 chunks. - Fixed bug rendering issues with resize and context toolbars not being placed properly until next animation frame. - Fixed bug where the rendering of the image while cropping would some times not be centered correctly. - Fixed bug where listbox items with submenus would me selected as active. - Fixed bug where context menu where throwing an error when rendering. - Fixed bug where resize both option wasn't working due to resent addClass API change. Patch contributed by Jogai. - Fixed bug where a hideAll call for container rendered inline toolbars would throw an error. - Fixed bug where onclick event handler on combobox could cause issues if element.id was a function by some polluting libraries. - Fixed bug where listboxes wouldn't get proper selected sub menu item when using link_list or image_list. - Fixed so the UI controls are as wide as 4.1.x to avoid wrapping controls in toolbars. - Fixed so the imagetools dialog is adaptive for smaller screen sizes. -Version 4.2.0 (2015-06-25) - Added new flat default skin to make the UI more modern. - Added new imagetools plugin, lets you crop/resize and apply filters to images. - Added new contextual toolbars support to the API lets you add floating toolbars for specific CSS selectors. - Added new promise feature fill as tinymce.util.Promise. - Added new built in image upload feature lets you upload any base64 encoded image within the editor as files. - Fixed bug where resize handles would appear in the right position in the wrong editor when switching between resizable content in different inline editors. - Fixed bug where tables would not be inserted in inline mode due to previous float panel fix. - Fixed bug where floating panels would remain open when focus was lost on inline editors. - Fixed bug where cut command on Chrome would thrown a browser security exception. - Fixed bug where IE 11 sometimes would report an incorrect size for images in the image dialog. - Fixed bug where it wasn't possible to remove inline formatting at the end of block elements. - Fixed bug where it wasn't possible to delete table cell contents when cell selection was vertical. - Fixed bug where table cell wasn't emptied from block elements if delete/backspace where pressed in empty cell. - Fixed bug where cmd+shift+arrow didn't work correctly on Firefox mac when selecting to start/end of line. - Fixed bug where removal of bogus elements would sometimes remove whitespace between nodes. - Fixed bug where the resize handles wasn't updated when the main window was resized. - Fixed so script elements gets removed by default to prevent possible XSS issues in default config implementations. - Fixed so the UI doesn't need manual reflows when using non native layout managers. - Fixed so base64 encoded images doesn't slow down the editor on modern browsers while editing. - Fixed so all UI elements uses touch events to improve mobile device support. - Removed the touch click quirks patch for iOS since it did more harm than good. - Removed the non proportional resize handles since. Unproportional resize can still be done by holding the shift key. -Version 4.1.10 (2015-05-05) - Fixed bug where plugins loaded with compat3x would sometimes throw errors when loading using the jQuery version. - Fixed bug where extra empty paragraphs would get deleted in WebKit/Blink due to recent Quriks fix. - Fixed bug where the editor wouldn't work properly on IE 12 due to some required browser sniffing. - Fixed bug where formatting shortcut keys where interfering with Mac OS X screenshot keys. - Fixed bug where the caret wouldn't move to the next/previous line boundary on Cmd+Left/Right on Gecko. - Fixed bug where it wasn't possible to remove formats from very specific nested contents. - Fixed bug where undo levels wasn't produced when typing letters using the shift or alt+ctrl modifiers. - Fixed bug where the dirty state wasn't properly updated when typing using the shift or alt+ctrl modifiers. - Fixed bug where an error would be thrown if an autofocused editor was destroyed quickly after its initialization. Patch provided by thorn0. - Fixed issue with dirty state not being properly updated on redo operation. - Fixed issue with entity decoder not handling incorrectly written numeric entities. - Fixed issue where some PI element values wouldn't be properly encoded. -Version 4.1.9 (2015-03-10) - Fixed bug where indentation wouldn't work properly for non list elements. - Fixed bug with image plugin not pulling the image dimensions out correctly if a custom document_base_url was used. - Fixed bug where ctrl+alt+[1-9] would conflict with the AltGr+[1-9] on Windows. New shortcuts is ctrl+shift+[1-9]. - Fixed bug with removing formatting on nodes in inline mode would sometimes include nodes outside the editor body. - Fixed bug where extra nbsp:s would be inserted when you replaced a word surrounded by spaces using insertContent. - Fixed bug with pasting from Google Docs would produce extra strong elements and line feeds. -Version 4.1.8 (2015-03-05) - Added new html5 sizes attribute to img elements used together with srcset. - Added new elementpath option that makes it possible to disable the element path but keep the statusbar. - Added new option table_style_by_css for the table plugin to set table styling with css rather than table attributes. - Added new link_assume_external_targets option to prompt the user to prepend http:// prefix if the supplied link does not contain a protocol prefix. - Added new image_prepend_url option to allow a custom base path/url to be added to images. - Added new table_appearance_options option to make it possible to disable some options. - Added new image_title option to make it possible to alter the title of the image, disabled by default. - Fixed bug where selection starting from out side of the body wouldn't produce a proper selection range on IE 11. - Fixed bug where pressing enter twice before a table moves the cursor in the table and causes a javascript error. - Fixed bug where advanced image styles were not respected. - Fixed bug where the less common Shift+Delete didn't produce a proper cut operation on WebKit browsers. - Fixed bug where image/media size constrain logic would produce NaN when handling non number values. - Fixed bug where internal classes where removed by the removeformat command. - Fixed bug with creating links table cell contents with a specific selection would throw a exceptions on WebKit/Blink. - Fixed bug where valid_classes option didn't work as expected according to docs. Patch provided by thorn0. - Fixed bug where jQuery plugin would patch the internal methods multiple times. Patch provided by Drew Martin. - Fixed bug where backspace key wouldn't delete the current selection of newly formatted content. - Fixed bug where type over of inline formatting elements wouldn't properly keep the format on WebKit/Blink. - Fixed bug where selection needed to be properly normalized on modern IE versions. - Fixed bug where Command+Backspace didn't properly delete the whole line of text but the previous word. - Fixed bug where UI active states wheren't properly updated on IE if you placed caret within the current range. - Fixed bug where delete/backspace on WebKit/Blink would remove span elements created by the user. - Fixed bug where delete/backspace would produce incorrect results when deleting between two text blocks with br elements. - Fixed bug where captions where removed when pasting from MS Office. - Fixed bug where lists plugin wouldn't properly remove fully selected nested lists. - Fixed bug where the ttf font used for icons would throw an warning message on Gecko on Mac OS X. - Fixed a bug where applying a color to text did not update the undo/redo history. - Fixed so shy entities gets displayed when using the visualchars plugin. - Fixed so removeformat removes ins/del by default since these might be used for strikethough. - Fixed so multiple language packs can be loaded and added to the global I18n data structure. - Fixed so transparent color selection gets treated as a normal color selection. Patch contributed by Alexander Hofbauer. - Fixed so it's possible to disable autoresize_overflow_padding, autoresize_bottom_margin options by setting them to false. - Fixed so the charmap plugin shows the description of the character in the dialog. Patch contributed by Jelle Hissink. - Removed address from the default list of block formats since it tends to be missused. - Fixed so the pre block format is called preformatted to make it more verbose. - Fixed so it's possible to context scope translation strings this isn't needed most of the time. - Fixed so the max length of the width/height input fields of the media dialog is 5 instead of 3. - Fixed so drag/dropped contents gets properly processed by paste plugin since it's basically a paste. Patch contributed by Greg Fairbanks. - Fixed so shortcut keys for headers is ctrl+alt+[1-9] instead of ctrl+[1-9] since these are for switching tabs in the browsers. - Fixed so "u" doesn't get converted into a span element by the legacy input filter. Since this is now a valid HTML5 element. - Fixed font families in order to provide appropriate web-safe fonts. -Version 4.1.7 (2014-11-27) - Added HTML5 schema support for srcset, source and picture. Patch contributed by mattheu. - Added new cache_suffix setting to enable cache busting by producing unique urls. - Added new paste_convert_word_fake_lists option to enable users to disable the fake lists convert logic. - Fixed so advlist style changes adds undo levels for each change. - Fixed bug where WebKit would sometimes produce an exception when the autolink plugin where looking for URLs. - Fixed bug where IE 7 wouldn't be rendered properly due to aggressive css compression. - Fixed bug where DomQuery wouldn't accept window as constructor element. - Fixed bug where the color picker in 3.x dialogs wouldn't work properly. Patch contributed by Callidior. - Fixed bug where the image plugin wouldn't respect the document_base_url. - Fixed bug where the jQuery plugin would fail to append to elements named array prototype names. -Version 4.1.6 (2014-10-08) - Fixed bug with clicking on the scrollbar of the iframe would cause a JS error to be thrown. - Fixed bug where null would produce an exception if you passed it to selection.setRng. - Fixed bug where Ctrl/Cmd+Tab would indent the current list item if you switched tabs in the browser. - Fixed bug where pasting empty cells from Excel would result in a broken table. - Fixed bug where it wasn't possible to switch back to default list style type. - Fixed issue where the select all quirk fix would fire for other modifiers than Ctrl/Cmd combinations. - Replaced jake with grunt since it is more mainstream and has better plugin support. -Version 4.1.5 (2014-09-09) - Fixed bug where sometimes the resize rectangles wouldn't properly render on images on WebKit/Blink. - Fixed bug in list plugin where delete/backspace would merge empty LI elements in lists incorrectly. - Fixed bug where empty list elements would result in empty LI elements without it's parent container. - Fixed bug where backspace in empty caret formatted element could produce an type error exception of Gecko. - Fixed bug where lists pasted from word with a custom start index above 9 wouldn't be properly handled. - Fixed bug where tabfocus plugin would tab out of the editor instance even if the default action was prevented. - Fixed bug where tabfocus wouldn't tab properly to other adjacent editor instances. - Fixed bug where the DOMUtils setStyles wouldn't properly removed or update the data-mce-style attribute. - Fixed bug where dialog select boxes would be placed incorrectly if document.body wasn't statically positioned. - Fixed bug where pasting would sometimes scroll to the top of page if the user was using the autoresize plugin. - Fixed bug where caret wouldn't be properly rendered by Chrome when clicking on the iframes documentElement. - Fixed so custom images for menubutton/splitbutton can be provided. Patch contributed by Naim Hammadi. - Fixed so the default action of windows closing can be prevented by blocking the default action of the close event. - Fixed so nodeChange and focus of the editor isn't automatically performed when opening sub dialogs. -Version 4.1.4 (2014-08-21) - Added new media_filter_html option to media plugin that blocks any conditional comments, scripts etc within a video element. - Added new content_security_policy option allows you to set custom policy for iframe contents. Patch contributed by Francois Chagnon. - Fixed bug where activate/deactivate events wasn't firing properly when switching between editors. - Fixed bug where placing the caret on iOS was difficult due to a WebKit bug with touch events. - Fixed bug where the resize helper wouldn't render properly on older IE versions. - Fixed bug where resizing images inside tables on older IE versions would sometimes fail depending mouse position. - Fixed bug where editor.insertContent would produce an exception when inserting select/option elements. - Fixed bug where extra empty paragraphs would be produced if block elements where inserted inside span elements. - Fixed bug where the spellchecker menu item wouldn't be properly checked if spell checking was started before it was rendered. - Fixed bug where the DomQuery filter function wouldn't remove non elements from collection. - Fixed bug where document with custom document.domain wouldn't properly render the editor. - Fixed bug where IE 8 would throw exception when trying to enter invalid color values into colorboxes. - Fixed bug where undo manager could incorrectly add an extra undo level when custom resize handles was removed. - Fixed bug where it wouldn't be possible to alter cell properties properly on table cells on IE 8. - Fixed so the color picker button in table dialog isn't shown unless you include the colorpicker plugin or add your own custom color picker. - Fixed so activate/deactivate events fire when windowManager opens a window since. - Fixed so the table advtab options isn't separated by an underscore to normalize naming with image_advtab option. - Fixed so the table cell dialog has proper padding when the advanced tab in disabled. -Version 4.1.3 (2014-07-29) - Added event binding logic to tinymce.util.XHR making it possible to override headers and settings before any request is made. - Fixed bug where drag events wasn't fireing properly on older IE versions since the event handlers where bound to document. - Fixed bug where drag/dropping contents within the editor on IE would force the contents into plain text mode even if it was internal content. - Fixed bug where IE 7 wouldn't open menus properly due to a resize bug in the browser auto closing them immediately. - Fixed bug where the DOMUtils getPos logic wouldn't produce a valid coordinate inside the body if the body was positioned non static. - Fixed bug where the element path and format state wasn't properly updated if you had the wordcount plugin enabled. - Fixed bug where a comment at the beginning of source would produce an exception in the formatter logic. - Fixed bug where setAttrib/getAttrib on null would throw exception together with any hooked attributes like style. - Fixed bug where table sizes wasn't properly retained when copy/pasting on WebKit/Blink. - Fixed bug where WebKit/Blink would produce colors in RGB format instead of the forced HEX format when deleting contents. - Fixed bug where the width attribute wasn't updated on tables if you changed the size inside the table dialog. - Fixed bug where control selection wasn't properly handled when the caret was placed directly after an image. - Fixed bug where selecting the contents of table cells using the selection.select method wouldn't place the caret properly. - Fixed bug where the selection state for images wasn't removed when placing the caret right after an image on WebKit/Blink. - Fixed bug where all events wasn't properly unbound when and editor instance was removed or destroyed by some external innerHTML call. - Fixed bug where it wasn't possible or very hard to select images on iOS when the onscreen keyboard was visible. - Fixed so auto_focus can take a boolean argument this will auto focus the last initialized editor might be useful for single inits. - Fixed so word auto detect lists logic works better for faked lists that doesn't have specific markup. - Fixed so nodeChange gets fired on mouseup as it used to before 4.1.1 we optimized that event to fire less often. - Removed the finish menu item from spellchecker menu since it's redundant you can stop spellchecking by toggling menu item or button. -Version 4.1.2 (2014-07-15) - Added offset/grep to DomQuery class works basically the same as it's jQuery equivalent. - Fixed bug where backspace/delete or setContent with an empty string would remove header data when using the fullpage plugin. - Fixed bug where tinymce.remove with a selector not matching any editors would remove all editors. - Fixed bug where resizing of the editor didn't work since the theme was calling setStyles instead of setStyle. - Fixed bug where IE 7 would fail to append html fragments to iframe document when using DomQuery. - Fixed bug where the getStyle DOMUtils method would produce an exception if it was called with null as it's element. - Fixed bug where the paste plugin would remove the element if the none of the paste_webkit_styles rules matched the current style. - Fixed bug where contextmenu table items wouldn't work properly on IE since it would some times fire an incorrect selection change. - Fixed bug where the padding/border values wasn't used in the size calculation for the body size when using autoresize. Patch contributed by Matt Whelan. - Fixed bug where conditional word comments wouldn't be properly removed when pasting plain text. - Fixed bug where resizing would sometime fail on IE 11 when the mouseup occurred inside the resizable element. - Fixed so the iframe gets initialized without any inline event handlers for better CSP support. Patch contributed by Matt Whelan. - Fixed so the tinymce.dom.Sizzle is the latest version of sizzle this resolves the document context bug. -Version 4.1.1 (2014-07-08) - Fixed bug where pasting plain text on some WebKit versions would result in an empty line. - Fixed bug where resizing images inside tables on IE 11 wouldn't work properly. - Fixed bug where IE 11 would sometimes throw "Invalid argument" exception when editor contents was set to an empty string. - Fixed bug where document.activeElement would throw exceptions on IE 9 when that element was hidden or removed from dom. - Fixed bug where WebKit/Blink sometimes produced br elements with the Apple-interchange-newline class. - Fixed bug where table cell selection wasn't properly removed when copy/pasting table cells. - Fixed bug where pasting nested list items from Word wouldn't produce proper semantic nested lists. - Fixed bug where right clicking using the contextmenu plugin on WebKit/Blink on Mac OS X would select the target current word or line. - Fixed bug where it wasn't possible to alter table cell properties on IE 8 using the context menu. - Fixed bug where the resize helper wouldn't be correctly positioned on older IE versions. - Fixed bug where fullpage plugin would produce an error if you didn't specify a doctype encoding. - Fixed bug where anchor plugin would get the name/id of the current element even if it wasn't anchor element. - Fixed bug where visual aids for tables wouldn't be properly disabled when changing the border size. - Fixed bug where some control selection events wasn't properly fired on older IE versions. - Fixed bug where table cell selection on older IE versions would prevent resizing of images. - Fixed bug with paste_data_images paste option not working properly on modern IE versions. - Fixed bug where custom elements with underscores in the name wasn't properly parsed/serialized. - Fixed bug where applying inline formats to nested list elements would produce an incorrect formatting result. - Fixed so it's possible to hide items from elements path by using preventDefault/stopPropagation. - Fixed so inline mode toolbar gets rendered right aligned if the editable element positioned to the documents right edge. - Fixed so empty inline elements inside empty block elements doesn't get removed if configured to be kept intact. - Fixed so DomQuery parentsUntil/prevUntil/nextUntil supports selectors/elements/filters etc. - Fixed so legacyoutput plugin overrides fontselect and fontsizeselect controls and handles font elements properly. -Version 4.1.0 (2014-06-18) - Added new file_picker_callback option to replace the old file_browser_callback the latter will still work though. - Added new custom colors to textcolor plugin will be displayed if a color picker is provided also shows the latest colors. - Added new color_picker_callback option to enable you to add custom color pickers to the editor. - Added new advanced tabs to table/cell/row dialogs to enable you to select colors for border/background. - Added new colorpicker plugin that lets you select colors from a hsv color picker. - Added new tinymce.util.Color class to handle color parsing and converting. - Added new colorpicker UI widget element lets you add a hsv color picker to any form/window. - Added new textpattern plugin that allows you to use markdown like text patterns to format contents. - Added new resize helper element that shows the current width & height while resizing. - Added new "once" method to Editor and EventDispatcher enables since callback execution events. - Added new jQuery like class under tinymce.dom.DomQuery it's exposed on editor instances (editor.$) and globally under (tinymce.$). - Fixed so the default resize method for images are proportional shift/ctrl can be used to make an unproportional size. - Fixed bug where the image_dimensions option of the image plugin would cause exceptions when it tried to update the size. - Fixed bug where table cell dialog class field wasn't properly updated when editing an a table cell with an existing class. - Fixed bug where Safari on Mac would produce webkit-fake-url for pasted images so these are now removed. - Fixed bug where the nodeChange event would get fired before the selection was changed when clicking inside the current selection range. - Fixed bug where valid_classes option would cause exception when it removed internal prefixed classes like mce-item-. - Fixed bug where backspace would cause navigation in IE 8 on an inline element and after a caret formatting was applied. - Fixed so placeholder images produced by the media plugin gets selected when inserted/edited. - Fixed so it's possible to drag in images when the paste_data_images option is enabled. Might be useful for mail clients. - Fixed so images doesn't get a width/height applied if the image_dimensions option is set to false useful for responsive contents. - Fixed so it's possible to pass in an optional arguments object for the nodeChanged function to be passed to all nodechange event listeners. - Fixed bug where media plugin embed code didn't update correctly. diff --git a/website/appphp/static/vendors/tinymce/js/tinymce/jquery.tinymce.min.js b/website/appphp/static/vendors/tinymce/js/tinymce/jquery.tinymce.min.js deleted file mode 100644 index 5a6ef56a..00000000 --- a/website/appphp/static/vendors/tinymce/js/tinymce/jquery.tinymce.min.js +++ /dev/null @@ -1,91 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - */ -/** - * Jquery integration plugin. - * - * @class tinymce.core.JqueryIntegration - * @private - */ -!function(){var f,c,u,p,d,s=[];d="undefined"!=typeof global?global:window,p=d.jQuery;function v(){ -// Reference to tinymce needs to be lazily evaluated since tinymce -// might be loaded through the compressor or other means -return d.tinymce}p.fn.tinymce=function(o){var e,t,i,l=this,r=""; -// No match then just ignore the call -if(!l.length)return l; -// Get editor instance -if(!o)return v()?v().get(l[0].id):null;l.css("visibility","hidden");function n(){var a=[],c=0; -// Apply patches to the jQuery object, only once -u||(m(),u=!0), -// Create an editor instance for each matched node -l.each(function(e,t){var n,i=t.id,r=o.oninit; -// Generate unique id for target element if needed -i||(t.id=i=v().DOM.uniqueId()), -// Only init the editor once -v().get(i)||( -// Create editor instance and render it -n=v().createEditor(i,o),a.push(n),n.on("init",function(){var e,t=r;l.css("visibility",""), -// Run this if the oninit setting is defined -// this logic will fire the oninit callback ones each -// matched editor instance is initialized -r&&++c==a.length&&("string"==typeof t&&(e=-1===t.indexOf(".")?null:v().resolve(t.replace(/\.\w+$/,"")),t=v().resolve(t)), -// Call the oninit function with the object -t.apply(e||v(),a))}))}), -// Render the editor instances in a separate loop since we -// need to have the full editors array used in the onInit calls -p.each(a,function(e,t){t.render()})} -// Load TinyMCE on demand, if we need to -if(d.tinymce||c||!(e=o.script_url)) -// Delay the init call until tinymce is loaded -1===c?s.push(n):n();else{c=1,t=e.substring(0,e.lastIndexOf("/")), -// Check if it's a dev/src version they want to load then -// make sure that all plugins, themes etc are loaded in source mode as well --1!=e.indexOf(".min")&&(r=".min"), -// Setup tinyMCEPreInit object this will later be used by the TinyMCE -// core script to locate other resources like CSS files, dialogs etc -// You can also predefined a tinyMCEPreInit object and then it will use that instead -d.tinymce=d.tinyMCEPreInit||{base:t,suffix:r}, -// url contains gzip then we assume it's a compressor --1!=e.indexOf("gzip")&&(i=o.language||"en",e=e+(/\?/.test(e)?"&":"?")+"js=true&core=true&suffix="+escape(r)+"&themes="+escape(o.theme||"modern")+"&plugins="+escape(o.plugins||"")+"&languages="+(i||""), -// Check if compressor script is already loaded otherwise setup a basic one -d.tinyMCE_GZ||(d.tinyMCE_GZ={start:function(){function n(e){v().ScriptLoader.markDone(v().baseURI.toAbsolute(e))} -// Add core languages -n("langs/"+i+".js"), -// Add themes with languages -n("themes/"+o.theme+"/theme"+r+".js"),n("themes/"+o.theme+"/langs/"+i+".js"), -// Add plugins with languages -p.each(o.plugins.split(","),function(e,t){t&&(n("plugins/"+t+"/plugin"+r+".js"),n("plugins/"+t+"/langs/"+i+".js"))})},end:function(){}}));var a=document.createElement("script");a.type="text/javascript",a.onload=a.onreadystatechange=function(e){e=e||window.event,2===c||"load"!=e.type&&!/complete|loaded/.test(a.readyState)||(v().dom.Event.domLoaded=1,c=2, -// Execute callback after mainscript has been loaded and before the initialization occurs -o.script_loaded&&o.script_loaded(),n(),p.each(s,function(e,t){t()}))},a.src=e,document.body.appendChild(a)}return l}, -// Add :tinymce pseudo selector this will select elements that has been converted into editor instances -// it's now possible to use things like $('*:tinymce') to get all TinyMCE bound elements. -p.extend(p.expr[":"],{tinymce:function(e){var t;return!!(e.id&&"tinymce"in d&&(t=v().get(e.id))&&t.editorManager===v())}}); -// This function patches internal jQuery functions so that if -// you for example remove an div element containing an editor it's -// automatically destroyed by the TinyMCE API -var m=function(){function r(e){ -// If the function is remove -"remove"===e&&this.each(function(e,t){var n=u(t);n&&n.remove()}),this.find("span.mceEditor,div.mceEditor").each(function(e,t){var n=v().get(t.id.replace(/_parent$/,""));n&&n.remove()})}function o(i){var e,t=this; -// Handle set value -/*jshint eqnull:true */if(null!=i)r.call(t), -// Saves the contents before get/set value of textarea/div -t.each(function(e,t){var n;(n=v().get(t.id))&&n.setContent(i)});else if(0])*>/g,""):n.getContent({save:!0}):a.apply(p(t),r)}),i}}), -// Makes it possible to use $('#id').append("content"); to append contents to the TinyMCE editor iframe -p.each(["append","prepend"],function(e,t){var n=s[t]=p.fn[t],r="prepend"===t;p.fn[t]=function(i){var e=this;return l(e)?i!==f?("string"==typeof i&&e.filter(":tinymce").each(function(e,t){var n=u(t);n&&n.setContent(r?i+n.getContent():n.getContent()+i)}),n.apply(e.not(":tinymce"),arguments),e):void 0:n.apply(e,arguments)}}), -// Makes sure that the editor instance gets properly destroyed when the parent element is removed -p.each(["remove","replaceWith","replaceAll","empty"],function(e,t){var n=s[t]=p.fn[t];p.fn[t]=function(){return r.call(this,t),n.apply(this,arguments)}}),s.attr=p.fn.attr, -// Makes sure that $('#tinymce_id').attr('value') gets the editors current HTML contents -p.fn.attr=function(e,t){var n=this,i=arguments;if(!e||"value"!==e||!l(n))return s.attr.apply(n,i);if(t!==f)return o.call(n.filter(":tinymce"),t),s.attr.apply(n.not(":tinymce"),i),n;// return original set for chaining -var r=n[0],a=u(r);return a?a.getContent({save:!0}):s.attr.apply(p(r),i)}}}(); \ No newline at end of file diff --git a/website/appphp/static/vendors/tinymce/js/tinymce/langs/de.js b/website/appphp/static/vendors/tinymce/js/tinymce/langs/de.js deleted file mode 100644 index 026b2525..00000000 --- a/website/appphp/static/vendors/tinymce/js/tinymce/langs/de.js +++ /dev/null @@ -1,260 +0,0 @@ -tinymce.addI18n('de',{ -"Redo": "Wiederholen", -"Undo": "R\u00fcckg\u00e4ngig", -"Cut": "Ausschneiden", -"Copy": "Kopieren", -"Paste": "Einf\u00fcgen", -"Select all": "Alles ausw\u00e4hlen", -"New document": "Neues Dokument", -"Ok": "Ok", -"Cancel": "Abbrechen", -"Visual aids": "Visuelle Hilfen", -"Bold": "Fett", -"Italic": "Kursiv", -"Underline": "Unterstrichen", -"Strikethrough": "Durchgestrichen", -"Superscript": "Hochgestellt", -"Subscript": "Tiefgestellt", -"Clear formatting": "Formatierung entfernen", -"Align left": "Linksb\u00fcndig ausrichten", -"Align center": "Zentriert ausrichten", -"Align right": "Rechtsb\u00fcndig ausrichten", -"Justify": "Blocksatz", -"Bullet list": "Aufz\u00e4hlung", -"Numbered list": "Nummerierte Liste", -"Decrease indent": "Einzug verkleinern", -"Increase indent": "Einzug vergr\u00f6\u00dfern", -"Close": "Schlie\u00dfen", -"Formats": "Formate", -"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Ihr Browser unterst\u00fctzt leider keinen direkten Zugriff auf die Zwischenablage. Bitte benutzen Sie die Strg + X \/ C \/ V Tastenkombinationen.", -"Headers": "\u00dcberschriften", -"Header 1": "\u00dcberschrift 1", -"Header 2": "\u00dcberschrift 2", -"Header 3": "\u00dcberschrift 3", -"Header 4": "\u00dcberschrift 4", -"Header 5": "\u00dcberschrift 5", -"Header 6": "\u00dcberschrift 6", -"Headings": "\u00dcberschriften", -"Heading 1": "\u00dcberschrift 1", -"Heading 2": "\u00dcberschrift 2", -"Heading 3": "\u00dcberschrift 3", -"Heading 4": "\u00dcberschrift 4", -"Heading 5": "\u00dcberschrift 5", -"Heading 6": "\u00dcberschrift 6", -"Div": "Textblock", -"Pre": "Vorformatierter Text", -"Code": "Quelltext", -"Paragraph": "Absatz", -"Blockquote": "Zitat", -"Inline": "Zeichenformate", -"Blocks": "Absatzformate", -"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Einf\u00fcgen ist nun im einfachen Textmodus. Inhalte werden ab jetzt als unformatierter Text eingef\u00fcgt, bis Sie diese Einstellung wieder ausschalten!", -"Font Family": "Schriftart", -"Font Sizes": "Schriftgr\u00f6\u00dfe", -"Class": "Klasse", -"Browse for an image": "Bild...", -"OR": "ODER", -"Drop an image here": "Bild hier ablegen", -"Upload": "Hochladen", -"Block": "Block", -"Align": "Ausrichtung", -"Default": "Standard", -"Circle": "Kreis", -"Disc": "Punkt", -"Square": "Quadrat", -"Lower Alpha": "Kleinbuchstaben", -"Lower Greek": "Griechische Kleinbuchstaben", -"Lower Roman": "R\u00f6mische Zahlen (Kleinbuchstaben)", -"Upper Alpha": "Gro\u00dfbuchstaben", -"Upper Roman": "R\u00f6mische Zahlen (Gro\u00dfbuchstaben)", -"Anchor": "Textmarke", -"Name": "Name", -"Id": "Kennung", -"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Die Kennung sollte mit einem Buchstaben anfangen. Nachfolgend nur Buchstaben, Zahlen, Striche (Minus), Punkte, Kommas und Unterstriche.", -"You have unsaved changes are you sure you want to navigate away?": "Die \u00c4nderungen wurden noch nicht gespeichert, sind Sie sicher, dass Sie diese Seite verlassen wollen?", -"Restore last draft": "Letzten Entwurf wiederherstellen", -"Special character": "Sonderzeichen", -"Source code": "Quelltext", -"Insert\/Edit code sample": "Codebeispiel einf\u00fcgen\/bearbeiten", -"Language": "Sprache", -"Code sample": "Codebeispiel", -"Color": "Farbe", -"R": "R", -"G": "G", -"B": "B", -"Left to right": "Von links nach rechts", -"Right to left": "Von rechts nach links", -"Emoticons": "Emoticons", -"Document properties": "Dokumenteigenschaften", -"Title": "Titel", -"Keywords": "Sch\u00fcsselw\u00f6rter", -"Description": "Beschreibung", -"Robots": "Robots", -"Author": "Verfasser", -"Encoding": "Zeichenkodierung", -"Fullscreen": "Vollbild", -"Action": "Aktion", -"Shortcut": "Shortcut", -"Help": "Hilfe", -"Address": "Adresse", -"Focus to menubar": "Fokus auf Men\u00fcleiste", -"Focus to toolbar": "Fokus auf Werkzeugleiste", -"Focus to element path": "Fokus auf Elementpfad", -"Focus to contextual toolbar": "Fokus auf kontextbezogene Werkzeugleiste", -"Insert link (if link plugin activated)": "Link einf\u00fcgen (wenn Link-Plugin aktiviert ist)", -"Save (if save plugin activated)": "Speichern (wenn Save-Plugin aktiviert ist)", -"Find (if searchreplace plugin activated)": "Suchen einf\u00fcgen (wenn Suchen\/Ersetzen-Plugin aktiviert ist)", -"Plugins installed ({0}):": "installierte Plugins ({0}):", -"Premium plugins:": "Premium Plugins:", -"Learn more...": "Erfahren Sie mehr dazu...", -"You are using {0}": "Sie verwenden {0}", -"Plugins": "Plugins", -"Handy Shortcuts": "Handy Shortcuts", -"Horizontal line": "Horizontale Linie", -"Insert\/edit image": "Bild einf\u00fcgen\/bearbeiten", -"Image description": "Bildbeschreibung", -"Source": "Quelle", -"Dimensions": "Abmessungen", -"Constrain proportions": "Seitenverh\u00e4ltnis beibehalten", -"General": "Allgemein", -"Advanced": "Erweitert", -"Style": "Stil", -"Vertical space": "Vertikaler Abstand", -"Horizontal space": "Horizontaler Abstand", -"Border": "Rahmen", -"Insert image": "Bild einf\u00fcgen", -"Image": "Bild", -"Image list": "Bildliste", -"Rotate counterclockwise": "Gegen den Uhrzeigersinn drehen", -"Rotate clockwise": "Im Uhrzeigersinn drehen", -"Flip vertically": "Vertikal spiegeln", -"Flip horizontally": "Horizontal spiegeln", -"Edit image": "Bild bearbeiten", -"Image options": "Bildeigenschaften", -"Zoom in": "Ansicht vergr\u00f6\u00dfern", -"Zoom out": "Ansicht verkleinern", -"Crop": "Bescheiden", -"Resize": "Skalieren", -"Orientation": "Ausrichtung", -"Brightness": "Helligkeit", -"Sharpen": "Sch\u00e4rfen", -"Contrast": "Kontrast", -"Color levels": "Farbwerte", -"Gamma": "Gamma", -"Invert": "Invertieren", -"Apply": "Anwenden", -"Back": "Zur\u00fcck", -"Insert date\/time": "Datum\/Uhrzeit einf\u00fcgen ", -"Date\/time": "Datum\/Uhrzeit", -"Insert link": "Link einf\u00fcgen", -"Insert\/edit link": "Link einf\u00fcgen\/bearbeiten", -"Text to display": "Anzuzeigender Text", -"Url": "URL", -"Target": "Ziel", -"None": "Keine", -"New window": "Neues Fenster", -"Remove link": "Link entfernen", -"Anchors": "Textmarken", -"Link": "Link", -"Paste or type a link": "Link einf\u00fcgen oder eintippen", -"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Diese Adresse scheint eine E-Mail-Adresse zu sein. M\u00f6chten Sie das dazu ben\u00f6tigte \"mailto:\" voranstellen?", -"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Diese Adresse scheint ein externer Link zu sein. M\u00f6chten Sie das dazu ben\u00f6tigte \"http:\/\/\" voranstellen?", -"Link list": "Linkliste", -"Insert video": "Video einf\u00fcgen", -"Insert\/edit video": "Video einf\u00fcgen\/bearbeiten", -"Insert\/edit media": "Medien einf\u00fcgen\/bearbeiten", -"Alternative source": "Alternative Quelle", -"Poster": "Poster", -"Paste your embed code below:": "F\u00fcgen Sie Ihren Einbettungscode hier ein:", -"Embed": "Einbetten", -"Media": "Medium", -"Nonbreaking space": "Gesch\u00fctztes Leerzeichen", -"Page break": "Seitenumbruch", -"Paste as text": "Als Text einf\u00fcgen", -"Preview": "Vorschau", -"Print": "Drucken", -"Save": "Speichern", -"Find": "Suchen", -"Replace with": "Ersetzen durch", -"Replace": "Ersetzen", -"Replace all": "Alles ersetzen", -"Prev": "Zur\u00fcck", -"Next": "Weiter", -"Find and replace": "Suchen und ersetzen", -"Could not find the specified string.": "Die Zeichenfolge wurde nicht gefunden.", -"Match case": "Gro\u00df-\/Kleinschreibung beachten", -"Whole words": "Nur ganze W\u00f6rter", -"Spellcheck": "Rechtschreibpr\u00fcfung", -"Ignore": "Ignorieren", -"Ignore all": "Alles Ignorieren", -"Finish": "Ende", -"Add to Dictionary": "Zum W\u00f6rterbuch hinzuf\u00fcgen", -"Insert table": "Tabelle einf\u00fcgen", -"Table properties": "Tabelleneigenschaften", -"Delete table": "Tabelle l\u00f6schen", -"Cell": "Zelle", -"Row": "Zeile", -"Column": "Spalte", -"Cell properties": "Zelleneigenschaften", -"Merge cells": "Zellen verbinden", -"Split cell": "Zelle aufteilen", -"Insert row before": "Neue Zeile davor einf\u00fcgen ", -"Insert row after": "Neue Zeile danach einf\u00fcgen", -"Delete row": "Zeile l\u00f6schen", -"Row properties": "Zeileneigenschaften", -"Cut row": "Zeile ausschneiden", -"Copy row": "Zeile kopieren", -"Paste row before": "Zeile davor einf\u00fcgen", -"Paste row after": "Zeile danach einf\u00fcgen", -"Insert column before": "Neue Spalte davor einf\u00fcgen", -"Insert column after": "Neue Spalte danach einf\u00fcgen", -"Delete column": "Spalte l\u00f6schen", -"Cols": "Spalten", -"Rows": "Zeilen", -"Width": "Breite", -"Height": "H\u00f6he", -"Cell spacing": "Zellenabstand", -"Cell padding": "Zelleninnenabstand", -"Caption": "Beschriftung", -"Left": "Linksb\u00fcndig", -"Center": "Zentriert", -"Right": "Rechtsb\u00fcndig", -"Cell type": "Zellentyp", -"Scope": "G\u00fcltigkeitsbereich", -"Alignment": "Ausrichtung", -"H Align": "Horizontale Ausrichtung", -"V Align": "Vertikale Ausrichtung", -"Top": "Oben", -"Middle": "Mitte", -"Bottom": "Unten", -"Header cell": "Kopfzelle", -"Row group": "Zeilengruppe", -"Column group": "Spaltengruppe", -"Row type": "Zeilentyp", -"Header": "Kopfzeile", -"Body": "Inhalt", -"Footer": "Fu\u00dfzeile", -"Border color": "Rahmenfarbe", -"Insert template": "Vorlage einf\u00fcgen ", -"Templates": "Vorlagen", -"Template": "Vorlage", -"Text color": "Textfarbe", -"Background color": "Hintergrundfarbe", -"Custom...": "Benutzerdefiniert...", -"Custom color": "Benutzerdefinierte Farbe", -"No color": "Keine Farbe", -"Table of Contents": "Inhaltsverzeichnis", -"Show blocks": "Bl\u00f6cke anzeigen", -"Show invisible characters": "Unsichtbare Zeichen anzeigen", -"Words: {0}": "W\u00f6rter: {0}", -"{0} words": "{0} W\u00f6rter", -"File": "Datei", -"Edit": "Bearbeiten", -"Insert": "Einf\u00fcgen", -"View": "Ansicht", -"Format": "Format", -"Table": "Tabelle", -"Tools": "Werkzeuge", -"Powered by {0}": "Betrieben von {0}", -"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich-Text- Area. Dr\u00fccken Sie ALT-F9 f\u00fcr das Men\u00fc. Dr\u00fccken Sie ALT-F10 f\u00fcr Symbolleiste. Dr\u00fccken Sie ALT-0 f\u00fcr Hilfe" -}); \ No newline at end of file diff --git a/website/appphp/static/vendors/tinymce/js/tinymce/langs/fr_FR.js b/website/appphp/static/vendors/tinymce/js/tinymce/langs/fr_FR.js deleted file mode 100644 index 3e508770..00000000 --- a/website/appphp/static/vendors/tinymce/js/tinymce/langs/fr_FR.js +++ /dev/null @@ -1,261 +0,0 @@ -tinymce.addI18n('fr_FR',{ -"Redo": "R\u00e9tablir", -"Undo": "Annuler", -"Cut": "Couper", -"Copy": "Copier", -"Paste": "Coller", -"Select all": "Tout s\u00e9lectionner", -"New document": "Nouveau document", -"Ok": "Ok", -"Cancel": "Annuler", -"Visual aids": "Aides visuelle", -"Bold": "Gras", -"Italic": "Italique", -"Underline": "Soulign\u00e9", -"Strikethrough": "Barr\u00e9", -"Superscript": "Exposant", -"Subscript": "Indice", -"Clear formatting": "Effacer la mise en forme", -"Align left": "Aligner \u00e0 gauche", -"Align center": "Centrer", -"Align right": "Aligner \u00e0 droite", -"Justify": "Justifier", -"Bullet list": "Puces", -"Numbered list": "Num\u00e9rotation", -"Decrease indent": "Diminuer le retrait", -"Increase indent": "Augmenter le retrait", -"Close": "Fermer", -"Formats": "Formats", -"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Votre navigateur ne supporte pas la copie directe. Merci d'utiliser les touches Ctrl+X\/C\/V.", -"Headers": "Titres", -"Header 1": "Titre 1", -"Header 2": "Titre 2", -"Header 3": "Titre 3", -"Header 4": "Titre 4", -"Header 5": "Titre 5", -"Header 6": "Titre 6", -"Headings": "En-t\u00eates", -"Heading 1": "En-t\u00eate 1", -"Heading 2": "En-t\u00eate 2", -"Heading 3": "En-t\u00eate 3", -"Heading 4": "En-t\u00eate 4", -"Heading 5": "En-t\u00eate 5", -"Heading 6": "En-t\u00eate 6", -"Preformatted": "Pr\u00e9-formatt\u00e9", -"Div": "Div", -"Pre": "Pre", -"Code": "Code", -"Paragraph": "Paragraphe", -"Blockquote": "Citation", -"Inline": "En ligne", -"Blocks": "Blocs", -"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Le presse-papiers est maintenant en mode \"texte plein\". Les contenus seront coll\u00e9s sans retenir les formatages jusqu'\u00e0 ce que vous d\u00e9sactiviez cette option.", -"Font Family": "Police", -"Font Sizes": "Taille de police", -"Class": "Classe", -"Browse for an image": "Parcourir pour s\u00e9lectionner une image", -"OR": "OU", -"Drop an image here": "Glisser une image ici", -"Upload": "D\u00e9poser", -"Block": "Bloquer", -"Align": "Aligner", -"Default": "Par d\u00e9faut", -"Circle": "Cercle", -"Disc": "Disque", -"Square": "Carr\u00e9", -"Lower Alpha": "Alpha minuscule", -"Lower Greek": "Grec minuscule", -"Lower Roman": "Romain minuscule", -"Upper Alpha": "Alpha majuscule", -"Upper Roman": "Romain majuscule", -"Anchor": "Ancre", -"Name": "Nom", -"Id": "Id", -"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "L'Id doit commencer par une lettre suivi par des lettres, nombres, tirets, points, deux-points ou underscores", -"You have unsaved changes are you sure you want to navigate away?": "Vous avez des modifications non enregistr\u00e9es, \u00eates-vous s\u00fbr de quitter la page?", -"Restore last draft": "Restaurer le dernier brouillon", -"Special character": "Caract\u00e8res sp\u00e9ciaux", -"Source code": "Code source", -"Insert\/Edit code sample": "Ins\u00e9rer \/ modifier une exemple de code", -"Language": "Langue", -"Code sample": "Extrait de code", -"Color": "Couleur", -"R": "R", -"G": "V", -"B": "B", -"Left to right": "Gauche \u00e0 droite", -"Right to left": "Droite \u00e0 gauche", -"Emoticons": "Emotic\u00f4nes", -"Document properties": "Propri\u00e9t\u00e9 du document", -"Title": "Titre", -"Keywords": "Mots-cl\u00e9s", -"Description": "Description", -"Robots": "Robots", -"Author": "Auteur", -"Encoding": "Encodage", -"Fullscreen": "Plein \u00e9cran", -"Action": "Action", -"Shortcut": "Raccourci", -"Help": "Aide", -"Address": "Adresse", -"Focus to menubar": "Cibler la barre de menu", -"Focus to toolbar": "Cibler la barre d'outils", -"Focus to element path": "Cibler le chemin vers l'\u00e9l\u00e9ment", -"Focus to contextual toolbar": "Cibler la barre d'outils contextuelle", -"Insert link (if link plugin activated)": "Ins\u00e9rer un lien (si le module link est activ\u00e9)", -"Save (if save plugin activated)": "Enregistrer (si le module save est activ\u00e9)", -"Find (if searchreplace plugin activated)": "Rechercher (si le module searchreplace est activ\u00e9)", -"Plugins installed ({0}):": "Modules install\u00e9s ({0}) : ", -"Premium plugins:": "Modules premium :", -"Learn more...": "En savoir plus...", -"You are using {0}": "Vous utilisez {0}", -"Plugins": "Plugins", -"Handy Shortcuts": "Raccourci", -"Horizontal line": "Ligne horizontale", -"Insert\/edit image": "Ins\u00e9rer\/modifier une image", -"Image description": "Description de l'image", -"Source": "Source", -"Dimensions": "Dimensions", -"Constrain proportions": "Conserver les proportions", -"General": "G\u00e9n\u00e9ral", -"Advanced": "Avanc\u00e9", -"Style": "Style", -"Vertical space": "Espacement vertical", -"Horizontal space": "Espacement horizontal", -"Border": "Bordure", -"Insert image": "Ins\u00e9rer une image", -"Image": "Image", -"Image list": "Liste d'images", -"Rotate counterclockwise": "Rotation anti-horaire", -"Rotate clockwise": "Rotation horaire", -"Flip vertically": "Retournement vertical", -"Flip horizontally": "Retournement horizontal", -"Edit image": "Modifier l'image", -"Image options": "Options de l'image", -"Zoom in": "Zoomer", -"Zoom out": "D\u00e9zoomer", -"Crop": "Rogner", -"Resize": "Redimensionner", -"Orientation": "Orientation", -"Brightness": "Luminosit\u00e9", -"Sharpen": "Affiner", -"Contrast": "Contraste", -"Color levels": "Niveaux de couleur", -"Gamma": "Gamma", -"Invert": "Inverser", -"Apply": "Appliquer", -"Back": "Retour", -"Insert date\/time": "Ins\u00e9rer date\/heure", -"Date\/time": "Date\/heure", -"Insert link": "Ins\u00e9rer un lien", -"Insert\/edit link": "Ins\u00e9rer\/modifier un lien", -"Text to display": "Texte \u00e0 afficher", -"Url": "Url", -"Target": "Cible", -"None": "n\/a", -"New window": "Nouvelle fen\u00eatre", -"Remove link": "Enlever le lien", -"Anchors": "Ancres", -"Link": "Lien", -"Paste or type a link": "Coller ou taper un lien", -"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "L'URL que vous avez entr\u00e9e semble \u00eatre une adresse e-mail. Voulez-vous ajouter le pr\u00e9fixe mailto: n\u00e9cessaire?", -"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "L'URL que vous avez entr\u00e9e semble \u00eatre un lien externe. Voulez-vous ajouter le pr\u00e9fixe http:\/\/ n\u00e9cessaire?", -"Link list": "Liste de liens", -"Insert video": "Ins\u00e9rer une vid\u00e9o", -"Insert\/edit video": "Ins\u00e9rer\/modifier une vid\u00e9o", -"Insert\/edit media": "Ins\u00e9rer\/modifier un m\u00e9dia", -"Alternative source": "Source alternative", -"Poster": "Publier", -"Paste your embed code below:": "Collez votre code d'int\u00e9gration ci-dessous :", -"Embed": "Int\u00e9grer", -"Media": "M\u00e9dia", -"Nonbreaking space": "Espace ins\u00e9cable", -"Page break": "Saut de page", -"Paste as text": "Coller comme texte", -"Preview": "Pr\u00e9visualiser", -"Print": "Imprimer", -"Save": "Enregistrer", -"Find": "Chercher", -"Replace with": "Remplacer par", -"Replace": "Remplacer", -"Replace all": "Tout remplacer", -"Prev": "Pr\u00e9c ", -"Next": "Suiv", -"Find and replace": "Trouver et remplacer", -"Could not find the specified string.": "Impossible de trouver la cha\u00eene sp\u00e9cifi\u00e9e.", -"Match case": "Respecter la casse", -"Whole words": "Mots entiers", -"Spellcheck": "V\u00e9rification orthographique", -"Ignore": "Ignorer", -"Ignore all": "Tout ignorer", -"Finish": "Finie", -"Add to Dictionary": "Ajouter au dictionnaire", -"Insert table": "Ins\u00e9rer un tableau", -"Table properties": "Propri\u00e9t\u00e9s du tableau", -"Delete table": "Supprimer le tableau", -"Cell": "Cellule", -"Row": "Ligne", -"Column": "Colonne", -"Cell properties": "Propri\u00e9t\u00e9s de la cellule", -"Merge cells": "Fusionner les cellules", -"Split cell": "Diviser la cellule", -"Insert row before": "Ins\u00e9rer une ligne avant", -"Insert row after": "Ins\u00e9rer une ligne apr\u00e8s", -"Delete row": "Effacer la ligne", -"Row properties": "Propri\u00e9t\u00e9s de la ligne", -"Cut row": "Couper la ligne", -"Copy row": "Copier la ligne", -"Paste row before": "Coller la ligne avant", -"Paste row after": "Coller la ligne apr\u00e8s", -"Insert column before": "Ins\u00e9rer une colonne avant", -"Insert column after": "Ins\u00e9rer une colonne apr\u00e8s", -"Delete column": "Effacer la colonne", -"Cols": "Colonnes", -"Rows": "Lignes", -"Width": "Largeur", -"Height": "Hauteur", -"Cell spacing": "Espacement inter-cellulles", -"Cell padding": "Espacement interne cellule", -"Caption": "Titre", -"Left": "Gauche", -"Center": "Centr\u00e9", -"Right": "Droite", -"Cell type": "Type de cellule", -"Scope": "Etendue", -"Alignment": "Alignement", -"H Align": "Alignement H", -"V Align": "Alignement V", -"Top": "Haut", -"Middle": "Milieu", -"Bottom": "Bas", -"Header cell": "Cellule d'en-t\u00eate", -"Row group": "Groupe de lignes", -"Column group": "Groupe de colonnes", -"Row type": "Type de ligne", -"Header": "En-t\u00eate", -"Body": "Corps", -"Footer": "Pied", -"Border color": "Couleur de la bordure", -"Insert template": "Ajouter un th\u00e8me", -"Templates": "Th\u00e8mes", -"Template": "Mod\u00e8le", -"Text color": "Couleur du texte", -"Background color": "Couleur d'arri\u00e8re-plan", -"Custom...": "Personnalis\u00e9...", -"Custom color": "Couleur personnalis\u00e9e", -"No color": "Aucune couleur", -"Table of Contents": "Table des mati\u00e8res", -"Show blocks": "Afficher les blocs", -"Show invisible characters": "Afficher les caract\u00e8res invisibles", -"Words: {0}": "Mots : {0}", -"{0} words": "{0} mots", -"File": "Fichier", -"Edit": "Editer", -"Insert": "Ins\u00e9rer", -"View": "Voir", -"Format": "Format", -"Table": "Tableau", -"Tools": "Outils", -"Powered by {0}": "Propuls\u00e9 par {0}", -"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Zone Texte Riche. Appuyer sur ALT-F9 pour le menu. Appuyer sur ALT-F10 pour la barre d'outils. Appuyer sur ALT-0 pour de l'aide." -}); \ No newline at end of file diff --git a/website/appphp/static/vendors/tinymce/js/tinymce/langs/readme.md b/website/appphp/static/vendors/tinymce/js/tinymce/langs/readme.md deleted file mode 100644 index a52bf03f..00000000 --- a/website/appphp/static/vendors/tinymce/js/tinymce/langs/readme.md +++ /dev/null @@ -1,3 +0,0 @@ -This is where language files should be placed. - -Please DO NOT translate these directly use this service: https://www.transifex.com/projects/p/tinymce/ diff --git a/website/appphp/static/vendors/tinymce/js/tinymce/license.txt b/website/appphp/static/vendors/tinymce/js/tinymce/license.txt deleted file mode 100644 index b17fc904..00000000 --- a/website/appphp/static/vendors/tinymce/js/tinymce/license.txt +++ /dev/null @@ -1,504 +0,0 @@ - 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 - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -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 -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -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 - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -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 -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -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 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -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. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -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 -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -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 -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -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 -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -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 -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -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 - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE 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 - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff --git a/website/appphp/static/vendors/tinymce/js/tinymce/plugins/advlist/plugin.min.js b/website/appphp/static/vendors/tinymce/js/tinymce/plugins/advlist/plugin.min.js deleted file mode 100644 index eb7a9de2..00000000 --- a/website/appphp/static/vendors/tinymce/js/tinymce/plugins/advlist/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.0.16 (2019-09-24) - */ -!function(){"use strict";function n(){}function o(n){return function(){return n}}function t(){return d}var e,r=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=tinymce.util.Tools.resolve("tinymce.util.Tools"),l=function(n,t,e){var r="UL"===t?"InsertUnorderedList":"InsertOrderedList";n.execCommand(r,!1,!1===e?null:{"list-style-type":e})},i=function(e){e.addCommand("ApplyUnorderedListStyle",function(n,t){l(e,"UL",t["list-style-type"])}),e.addCommand("ApplyOrderedListStyle",function(n,t){l(e,"OL",t["list-style-type"])})},c=function(n){var t=n.getParam("advlist_number_styles","default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");return t?t.split(/[ ,]/):[]},s=function(n){var t=n.getParam("advlist_bullet_styles","default,circle,square");return t?t.split(/[ ,]/):[]},f=o(!1),a=o(!0),d=(e={fold:function(n,t){return n()},is:f,isSome:f,isNone:a,getOr:m,getOrThunk:p,getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:o(null),getOrUndefined:o(undefined),or:m,orThunk:p,map:t,each:n,bind:t,exists:f,forall:a,filter:t,equals:g,equals_:g,toArray:function(){return[]},toString:o("none()")},Object.freeze&&Object.freeze(e),e);function g(n){return n.isNone()}function p(n){return n()}function m(n){return n}function y(n,t,e){var r=function(n,t){for(var e=0;ey(e)&&(i=o+g);var l=p(e);l&&l]*>((\xa0| |[ \t]|]*>)+?|)|
$","i").test(e)}function i(t){var e=parseInt(v.getItem(o(t)+"time"),10)||0;return!((new Date).getTime()-e>function(t){return r(t.settings.autosave_retention,"20m")}(t))||(g(t,!1),!1)}function u(t){var e=o(t);!a(t)&&t.isDirty()&&(v.setItem(e+"draft",t.getContent({format:"raw",no_events:!0})),v.setItem(e+"time",(new Date).getTime().toString()),function(t){t.fire("StoreDraft")}(t))}function s(t){var e=o(t);i(t)&&(t.setContent(v.getItem(e+"draft"),{format:"raw"}),function(t){t.fire("RestoreDraft")}(t))}function c(t,e){var n=function(t){return r(t.settings.autosave_interval,"30s")}(t);e.get()||(m.setInterval(function(){t.removed||u(t)},n),e.set(!0))}function f(t){t.undoManager.transact(function(){s(t),g(t)}),t.focus()}var l=function(t){function e(){return n}var n=t;return{get:e,set:function(t){n=t},clone:function(){return l(e())}}},t=tinymce.util.Tools.resolve("tinymce.PluginManager"),m=tinymce.util.Tools.resolve("tinymce.util.Delay"),v=tinymce.util.Tools.resolve("tinymce.util.LocalStorage"),d=tinymce.util.Tools.resolve("tinymce.util.Tools"),g=function(t,e){var n=o(t);v.removeItem(n+"draft"),v.removeItem(n+"time"),!1!==e&&function(t){t.fire("RemoveDraft")}(t)};function y(r){for(var o=[],t=1;t(.*?)<\/a>/gi,"[url=$1]$2[/url]"),o(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),o(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),o(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),o(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),o(/(.*?)<\/span>/gi,"[color=$1]$2[/color]"),o(/(.*?)<\/font>/gi,"[color=$1]$2[/color]"),o(/(.*?)<\/span>/gi,"[size=$1]$2[/size]"),o(/(.*?)<\/font>/gi,"$1"),o(//gi,"[img]$1[/img]"),o(/(.*?)<\/span>/gi,"[code]$1[/code]"),o(/(.*?)<\/span>/gi,"[quote]$1[/quote]"),o(/(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]"),o(/(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]"),o(/(.*?)<\/em>/gi,"[code][i]$1[/i][/code]"),o(/(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]"),o(/(.*?)<\/u>/gi,"[code][u]$1[/u][/code]"),o(/(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]"),o(/<\/(strong|b)>/gi,"[/b]"),o(/<(strong|b)>/gi,"[b]"),o(/<\/(em|i)>/gi,"[/i]"),o(/<(em|i)>/gi,"[i]"),o(/<\/u>/gi,"[/u]"),o(/(.*?)<\/span>/gi,"[u]$1[/u]"),o(//gi,"[u]"),o(/]*>/gi,"[quote]"),o(/<\/blockquote>/gi,"[/quote]"),o(/
/gi,"\n"),o(//gi,"\n"),o(/
/gi,"\n"),o(/

/gi,""),o(/<\/p>/gi,"\n"),o(/ |\u00a0/gi," "),o(/"/gi,'"'),o(/</gi,"<"),o(/>/gi,">"),o(/&/gi,"&"),t},i=function(t){t=e.trim(t);function o(o,e){t=t.replace(o,e)}return o(/\n/gi,"
"),o(/\[b\]/gi,""),o(/\[\/b\]/gi,""),o(/\[i\]/gi,""),o(/\[\/i\]/gi,""),o(/\[u\]/gi,""),o(/\[\/u\]/gi,""),o(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'
$2'),o(/\[url\](.*?)\[\/url\]/gi,'$1'),o(/\[img\](.*?)\[\/img\]/gi,''),o(/\[color=(.*?)\](.*?)\[\/color\]/gi,'$2'),o(/\[code\](.*?)\[\/code\]/gi,'$1 '),o(/\[quote.*?\](.*?)\[\/quote\]/gi,'$1 '),t};!function n(){o.add("bbcode",function(o){o.on("BeforeSetContent",function(o){o.content=i(o.content)}),o.on("PostProcess",function(o){o.set&&(o.content=i(o.content)),o.get&&(o.content=t(o.content))})})}()}(); \ No newline at end of file diff --git a/website/appphp/static/vendors/tinymce/js/tinymce/plugins/charmap/plugin.min.js b/website/appphp/static/vendors/tinymce/js/tinymce/plugins/charmap/plugin.min.js deleted file mode 100644 index 339de187..00000000 --- a/website/appphp/static/vendors/tinymce/js/tinymce/plugins/charmap/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.0.16 (2019-09-24) - */ -!function(c){"use strict";function n(){}function i(n){return function(){return n}}function e(){return m}var r,t=tinymce.util.Tools.resolve("tinymce.PluginManager"),a=function(n,e){return n.fire("insertCustomChar",{chr:e})},u=function(n,e){var r=a(n,e).chr;n.execCommand("mceInsertContent",!1,r)},o=tinymce.util.Tools.resolve("tinymce.util.Tools"),s=function(n){return n.settings.charmap},l=function(n){return n.settings.charmap_append},f=i(!1),g=i(!0),m=(r={fold:function(n,e){return n()},is:f,isSome:f,isNone:g,getOr:p,getOrThunk:d,getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:i(null),getOrUndefined:i(undefined),or:p,orThunk:d,map:e,each:n,bind:e,exists:f,forall:g,filter:e,equals:h,equals_:h,toArray:function(){return[]},toString:i("none()")},Object.freeze&&Object.freeze(r),r);function h(n){return n.isNone()}function d(n){return n()}function p(n){return n}function y(e){return function(n){return function(n){if(null===n)return"null";var e=typeof n;return"object"==e&&(Array.prototype.isPrototypeOf(n)||n.constructor&&"Array"===n.constructor.name)?"array":"object"==e&&(String.prototype.isPrototypeOf(n)||n.constructor&&"String"===n.constructor.name)?"string":e}(n)===e}}function w(n,e){for(var r=n.length,t=new Array(r),a=0;ae.length)break e;if(!(h instanceof a)){u.lastIndex=0;var m=u.exec(h);if(m){g&&(d=m[1].length);var b=m.index-1+d,y=b+(m=m[0].slice(d)).length,v=h.slice(0,b+1),k=h.slice(y+1),w=[f,1];v&&w.push(v);var x=new a(o,c?S.tokenize(m,c):m,p);w.push(x),k&&w.push(k),Array.prototype.splice.apply(r,w)}}}}}return r},hooks:{all:{},add:function(e,t){var n=S.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=S.hooks.all[e];if(n&&n.length)for(var a=0,r=void 0;r=n[a++];)r(t)}}},s=S.Token=function(e,t,n){this.type=e,this.content=t,this.alias=n};if(s.stringify=function(t,n,e){if("string"==typeof t)return t;if("Array"===S.util.type(t))return t.map(function(e){return s.stringify(e,n,t)}).join("");var a={type:t.type,content:s.stringify(t.content,n,e),tag:"span",classes:["token",t.type],attributes:{},language:n,parent:e};if("comment"===a.type&&(a.attributes.spellcheck="true"),t.alias){var r="Array"===S.util.type(t.alias)?t.alias:[t.alias];Array.prototype.push.apply(a.classes,r)}S.hooks.run("wrap",a);var i="";for(var o in a.attributes)i+=(i?" ":"")+o+'="'+(a.attributes[o]||"")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'" '+i+">"+a.content+""},!g.document)return g.addEventListener&&g.addEventListener("message",function(e){var t=JSON.parse(e.data),n=t.language,a=t.code,r=t.immediateClose;g.postMessage(S.highlight(a,S.languages[n],n)),r&&g.close()},!1),g.Prism}();void 0!==n&&(n.Prism=i),i.languages.markup={comment://,prolog:/<\?[\w\W]+?\?>/,doctype://,cdata://i,tag:{pattern:/<\/?[^\s>\/=.]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i,inside:{punctuation:/[=>"']/}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},i.hooks.add("wrap",function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))}),i.languages.xml=i.languages.markup,i.languages.html=i.languages.markup,i.languages.mathml=i.languages.markup,i.languages.svg=i.languages.markup,i.languages.css={comment:/\/\*[\w\W]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^\{\}\s][^\{\};]*?(?=\s*\{)/,string:/("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/,property:/(\b|\B)[\w-]+(?=\s*:)/i,important:/\B!important\b/i,"function":/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:]/},i.languages.css.atrule.inside.rest=i.util.clone(i.languages.css),i.languages.markup&&(i.languages.insertBefore("markup","tag",{style:{pattern:/[\w\W]*?<\/style>/i,inside:{tag:{pattern:/|<\/style>/i,inside:i.languages.markup.tag.inside},rest:i.languages.css},alias:"language-css"}}),i.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|').*?\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:i.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:i.languages.css}},alias:"language-css"}},i.languages.markup.tag)),i.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:/(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,"boolean":/\b(true|false)\b/,"function":/[a-z0-9_]+(?=\()/i,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/},i.languages.javascript=i.languages.extend("clike",{keyword:/\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/,number:/\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/,"function":/[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i}),i.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0}}),i.languages.insertBefore("javascript","class-name",{"template-string":{pattern:/`(?:\\`|\\?[^`])*`/,inside:{interpolation:{pattern:/\$\{[^}]+\}/,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:i.languages.javascript}},string:/[\s\S]+/}}}),i.languages.markup&&i.languages.insertBefore("markup","tag",{script:{pattern:/[\w\W]*?<\/script>/i,inside:{tag:{pattern:/|<\/script>/i,inside:i.languages.markup.tag.inside},rest:i.languages.javascript},alias:"language-javascript"}}),i.languages.js=i.languages.javascript,i.languages.c=i.languages.extend("clike",{keyword:/\b(asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/,operator:/\-[>-]?|\+\+?|!=?|<>?=?|==?|&&?|\|?\||[~^%?*\/]/,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)[ful]*\b/i}),i.languages.insertBefore("c","string",{macro:{pattern:/(^\s*)#\s*[a-z]+([^\r\n\\]|\\.|\\(?:\r\n?|\n))*/im,lookbehind:!0,alias:"property",inside:{string:{pattern:/(#\s*include\s*)(<.+?>|("|')(\\?.)+?\3)/,lookbehind:!0}}}}),delete i.languages.c["class-name"],delete i.languages.c["boolean"],i.languages.csharp=i.languages.extend("clike",{keyword:/\b(abstract|as|async|await|base|bool|break|byte|case|catch|char|checked|class|const|continue|decimal|default|delegate|do|double|else|enum|event|explicit|extern|false|finally|fixed|float|for|foreach|goto|if|implicit|in|int|interface|internal|is|lock|long|namespace|new|null|object|operator|out|override|params|private|protected|public|readonly|ref|return|sbyte|sealed|short|sizeof|stackalloc|static|string|struct|switch|this|throw|true|try|typeof|uint|ulong|unchecked|unsafe|ushort|using|virtual|void|volatile|while|add|alias|ascending|async|await|descending|dynamic|from|get|global|group|into|join|let|orderby|partial|remove|select|set|value|var|where|yield)\b/,string:[/@("|')(\1\1|\\\1|\\?(?!\1)[\s\S])*\1/,/("|')(\\?.)*?\1/],number:/\b-?(0x[\da-f]+|\d*\.?\d+)\b/i}),i.languages.insertBefore("csharp","keyword",{preprocessor:{pattern:/(^\s*)#.*/m,lookbehind:!0}}),i.languages.cpp=i.languages.extend("c",{keyword:/\b(alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,"boolean":/\b(true|false)\b/,operator:/[-+]{1,2}|!=?|<{1,2}=?|>{1,2}=?|\->|:{1,2}|={1,2}|\^|~|%|&{1,2}|\|?\||\?|\*|\/|\b(and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/}),i.languages.insertBefore("cpp","keyword",{"class-name":{pattern:/(class\s+)[a-z0-9_]+/i,lookbehind:!0}}),i.languages.java=i.languages.extend("clike",{keyword:/\b(abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while)\b/,number:/\b0b[01]+\b|\b0x[\da-f]*\.?[\da-fp\-]+\b|\b\d*\.?\d+(?:e[+-]?\d+)?[df]?\b/i,operator:{pattern:/(^|[^.])(?:\+[+=]?|-[-=]?|!=?|<>?>?=?|==?|&[&=]?|\|[|=]?|\*=?|\/=?|%=?|\^=?|[?:~])/m,lookbehind:!0}}),i.languages.php=i.languages.extend("clike",{keyword:/\b(and|or|xor|array|as|break|case|cfunction|class|const|continue|declare|default|die|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|for|foreach|function|include|include_once|global|if|new|return|static|switch|use|require|require_once|var|while|abstract|interface|public|implements|private|protected|parent|throw|null|echo|print|trait|namespace|final|yield|goto|instanceof|finally|try|catch)\b/i,constant:/\b[A-Z0-9_]{2,}\b/,comment:{pattern:/(^|[^\\])(?:\/\*[\w\W]*?\*\/|\/\/.*)/,lookbehind:!0}}),i.languages.insertBefore("php","class-name",{"shell-comment":{pattern:/(^|[^\\])#.*/,lookbehind:!0,alias:"comment"}}),i.languages.insertBefore("php","keyword",{delimiter:/\?>|<\?(?:php)?/i,variable:/\$\w+\b/i,"package":{pattern:/(\\|namespace\s+|use\s+)[\w\\]+/,lookbehind:!0,inside:{punctuation:/\\/}}}),i.languages.insertBefore("php","operator",{property:{pattern:/(->)[\w]+/,lookbehind:!0}}),i.languages.markup&&(i.hooks.add("before-highlight",function(t){"php"===t.language&&(t.tokenStack=[],t.backupCode=t.code,t.code=t.code.replace(/(?:<\?php|<\?)[\w\W]*?(?:\?>)/gi,function(e){return t.tokenStack.push(e),"{{{PHP"+t.tokenStack.length+"}}}"}))}),i.hooks.add("before-insert",function(e){"php"===e.language&&(e.code=e.backupCode,delete e.backupCode)}),i.hooks.add("after-highlight",function(e){if("php"===e.language){for(var t=0,n=void 0;n=e.tokenStack[t];t++)e.highlightedCode=e.highlightedCode.replace("{{{PHP"+(t+1)+"}}}",i.highlight(n,e.grammar,"php").replace(/\$/g,"$$$$"));e.element.innerHTML=e.highlightedCode}}),i.hooks.add("wrap",function(e){"php"===e.language&&"markup"===e.type&&(e.content=e.content.replace(/(\{\{\{PHP[0-9]+\}\}\})/g,'$1'))}),i.languages.insertBefore("php","comment",{markup:{pattern:/<[^?]\/?(.*?)>/,inside:i.languages.markup},php:/\{\{\{PHP[0-9]+\}\}\}/})),i.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},string:/"""[\s\S]+?"""|'''[\s\S]+?'''|("|')(?:\\?.)*?\1/,"function":{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_][a-zA-Z0-9_]*(?=\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)[a-z0-9_]+/i,lookbehind:!0},keyword:/\b(?:as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|pass|print|raise|return|try|while|with|yield)\b/,"boolean":/\b(?:True|False)\b/,number:/\b-?(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]|\b(?:or|and|not)\b/,punctuation:/[{}[\];(),.:]/},function(e){e.languages.ruby=e.languages.extend("clike",{comment:/#(?!\{[^\r\n]*?\}).*/,keyword:/\b(alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|false|for|if|in|module|new|next|nil|not|or|raise|redo|require|rescue|retry|return|self|super|then|throw|true|undef|unless|until|when|while|yield)\b/});var t={pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"tag"},rest:e.util.clone(e.languages.ruby)}};e.languages.insertBefore("ruby","keyword",{regex:[{pattern:/%r([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1[gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r\((?:[^()\\]|\\[\s\S])*\)[gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}[gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r\[(?:[^\[\]\\]|\\[\s\S])*\][gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r<(?:[^<>\\]|\\[\s\S])*>[gim]{0,3}/,inside:{interpolation:t}},{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0}],variable:/[@$]+[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\b)/,symbol:/:[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\b)/}),e.languages.insertBefore("ruby","number",{builtin:/\b(Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|File|Fixnum|Fload|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\b/,constant:/\b[A-Z][a-zA-Z_0-9]*(?:[?!]|\b)/}),e.languages.ruby.string=[{pattern:/%[qQiIwWxs]?([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?\((?:[^()\\]|\\[\s\S])*\)/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?\[(?:[^\[\]\\]|\\[\s\S])*\]/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?<(?:[^<>\\]|\\[\s\S])*>/,inside:{interpolation:t}},{pattern:/("|')(#\{[^}]+\}|\\(?:\r?\n|\r)|\\?.)*?\1/,inside:{interpolation:t}}]}(i);function a(){}function o(e){return function(){return e}}function s(){return f}var l,u={isCodeSample:function B(e){return e&&"PRE"===e.nodeName&&-1!==e.className.indexOf("language-")},trimArg:function M(n){return function(e,t){return n(t)}}},d=o(!1),p=o(!0),f=(l={fold:function(e,t){return e()},is:d,isSome:d,isNone:p,getOr:b,getOrThunk:m,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:o(null),getOrUndefined:o(undefined),or:b,orThunk:m,map:s,each:a,bind:s,exists:d,forall:p,filter:s,equals:h,equals_:h,toArray:function(){return[]},toString:o("none()")},Object.freeze&&Object.freeze(l),l);function h(e){return e.isNone()}function m(e){return e()}function b(e){return e}function y(e){var t=e.selection?e.selection.getNode():null;return u.isCodeSample(t)?w.some(t):w.none()}var v,k=function(n){function e(){return r}function t(e){return e(n)}var a=o(n),r={fold:function(e,t){return t(n)},is:function(e){return n===e},isSome:p,isNone:d,getOr:a,getOrThunk:a,getOrDie:a,getOrNull:a,getOrUndefined:a,or:e,orThunk:e,map:function(e){return k(e(n))},each:function(e){e(n)},bind:t,exists:t,forall:t,filter:function(e){return e(n)?r:f},toArray:function(){return[n]},toString:function(){return"some("+n+")"},equals:function(e){return e.is(n)},equals_:function(e,t){return e.fold(d,function(e){return t(n,e)})}};return r},w={some:k,none:s,from:function(e){return null===e||e===undefined?f:k(e)}},x=y,S=function(t,n,a){t.undoManager.transact(function(){var e=y(t);return a=r.DOM.encode(a),e.fold(function(){t.insertContent('

'+a+"
"),t.selection.select(t.$("#__new").removeAttr("id")[0])},function(e){t.dom.setAttrib(e,"class","language-"+n),e.innerHTML=a,i.highlightElement(e),t.selection.select(e)})})},A=function(e){return y(e).fold(function(){return""},function(e){return e.textContent})},C=function(e){return e.settings.codesample_languages},_=function(e){var t=C(e);return t||[{text:"HTML/XML",value:"markup"},{text:"JavaScript",value:"javascript"},{text:"CSS",value:"css"},{text:"PHP",value:"php"},{text:"Ruby",value:"ruby"},{text:"Python",value:"python"},{text:"Java",value:"java"},{text:"C",value:"c"},{text:"C#",value:"csharp"},{text:"C++",value:"cpp"}]},N=function(e,n){return x(e).fold(function(){return n},function(e){var t=e.className.match(/language-(\w+)/);return t?t[1]:n})},O=(v="function",function(e){return function(e){if(null===e)return"null";var t=typeof e;return"object"==t&&(Array.prototype.isPrototypeOf(e)||e.constructor&&"Array"===e.constructor.name)?"array":"object"==t&&(String.prototype.isPrototypeOf(e)||e.constructor&&"String"===e.constructor.name)?"string":t}(e)===v}),z=Array.prototype.slice,P=(O(Array.from)&&Array.from,function(n){var e=_(n),t=function(e){return 0===e.length?w.none():w.some(e[0])}(e).fold(function(){return""},function(e){return e.value}),a=N(n,t),r=A(n);n.windowManager.open({title:"Insert/Edit Code Sample",size:"large",body:{type:"panel",items:[{type:"selectbox",name:"language",label:"Language",items:e},{type:"textarea",name:"code",label:"Code view"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{language:a,code:r},onSubmit:function(e){var t=e.getData();S(n,t.language,t.code),e.close()}})}),W=function(t){t.addCommand("codesample",function(){var e=t.selection.getNode();t.selection.isCollapsed()||u.isCodeSample(e)?P(t):t.formatter.toggle("code")})},j=function(n){var r=n.$;n.on("PreProcess",function(e){r("pre[contenteditable=false]",e.node).filter(u.trimArg(u.isCodeSample)).each(function(e,t){var n=r(t),a=t.textContent;n.attr("class",r.trim(n.attr("class"))),n.removeAttr("contentEditable"),n.empty().append(r("").each(function(){this.textContent=a}))})}),n.on("SetContent",function(){var e=r("pre").filter(u.trimArg(u.isCodeSample)).filter(function(e,t){return"false"!==t.contentEditable});e.length&&n.undoManager.transact(function(){e.each(function(e,t){r(t).find("br").each(function(e,t){t.parentNode.replaceChild(n.getDoc().createTextNode("\n"),t)}),t.contentEditable="false",t.innerHTML=n.dom.encode(t.textContent),i.highlightElement(t),t.className=r.trim(t.className)})})})},T=function(n){n.ui.registry.addToggleButton("codesample",{icon:"code-sample",tooltip:"Insert/edit code sample",onAction:function(){return P(n)},onSetup:function(e){function t(){e.setActive(function(e){var t=e.selection.getStart();return e.dom.is(t,"pre.language-markup")}(n))}return n.on("NodeChange",t),function(){return n.off("NodeChange",t)}}}),n.ui.registry.addMenuItem("codesample",{text:"Code sample...",icon:"code-sample",onAction:function(){return P(n)}})};!function F(){e.add("codesample",function(t){j(t),T(t),W(t),t.on("dblclick",function(e){u.isCodeSample(e.target)&&P(t)})})}()}(window); \ No newline at end of file diff --git a/website/appphp/static/vendors/tinymce/js/tinymce/plugins/colorpicker/plugin.min.js b/website/appphp/static/vendors/tinymce/js/tinymce/plugins/colorpicker/plugin.min.js deleted file mode 100644 index 7a218ed7..00000000 --- a/website/appphp/static/vendors/tinymce/js/tinymce/plugins/colorpicker/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.0.16 (2019-09-24) - */ -!function(o){"use strict";var i=tinymce.util.Tools.resolve("tinymce.PluginManager");!function n(){i.add("colorpicker",function(){o.console.warn("Color picker plugin is now built in to the core editor, please remove it from your editor configuration")})}()}(window); \ No newline at end of file diff --git a/website/appphp/static/vendors/tinymce/js/tinymce/plugins/contextmenu/plugin.min.js b/website/appphp/static/vendors/tinymce/js/tinymce/plugins/contextmenu/plugin.min.js deleted file mode 100644 index 696f9298..00000000 --- a/website/appphp/static/vendors/tinymce/js/tinymce/plugins/contextmenu/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.0.16 (2019-09-24) - */ -!function(n){"use strict";var o=tinymce.util.Tools.resolve("tinymce.PluginManager");!function e(){o.add("contextmenu",function(){n.console.warn("Context menu plugin is now built in to the core editor, please remove it from your editor configuration")})}()}(window); \ No newline at end of file diff --git a/website/appphp/static/vendors/tinymce/js/tinymce/plugins/directionality/plugin.min.js b/website/appphp/static/vendors/tinymce/js/tinymce/plugins/directionality/plugin.min.js deleted file mode 100644 index e79bd290..00000000 --- a/website/appphp/static/vendors/tinymce/js/tinymce/plugins/directionality/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.0.16 (2019-09-24) - */ -!function(i){"use strict";function n(){}function u(n){return function(){return n}}function t(){return a}var e,r=tinymce.util.Tools.resolve("tinymce.PluginManager"),c=tinymce.util.Tools.resolve("tinymce.util.Tools"),o=function(n,t){var e,r=n.dom,o=n.selection.getSelectedBlocks();o.length&&(e=r.getAttrib(o[0],"dir"),c.each(o,function(n){r.getParent(n.parentNode,'*[dir="'+t+'"]',r.getRoot())||r.setAttrib(n,"dir",e!==t?t:null)}),n.nodeChanged())},d=function(n){n.addCommand("mceDirectionLTR",function(){o(n,"ltr")}),n.addCommand("mceDirectionRTL",function(){o(n,"rtl")})},f=u(!1),l=u(!0),a=(e={fold:function(n,t){return n()},is:f,isSome:f,isNone:l,getOr:s,getOrThunk:N,getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:u(null),getOrUndefined:u(undefined),or:s,orThunk:N,map:t,each:n,bind:t,exists:f,forall:l,filter:t,equals:m,equals_:m,toArray:function(){return[]},toString:u("none()")},Object.freeze&&Object.freeze(e),e);function m(n){return n.isNone()}function N(n){return n()}function s(n){return n}function g(n,t){var e=n.dom(),r=i.window.getComputedStyle(e).getPropertyValue(t),o=""!==r||function(n){var t=A(n)?n.dom().parentNode:n.dom();return t!==undefined&&null!==t&&t.ownerDocument.body.contains(t)}(n)?r:w(e,t);return null===o?undefined:o}function T(t,r){return function(e){function n(n){var t=p.fromDom(n.element);e.setActive(function(n){return"rtl"===g(n,"direction")?"rtl":"ltr"}(t)===r)}return t.on("NodeChange",n),function(){return t.off("NodeChange",n)}}}var E,O,y=function(e){function n(){return o}function t(n){return n(e)}var r=u(e),o={fold:function(n,t){return t(e)},is:function(n){return e===n},isSome:l,isNone:f,getOr:r,getOrThunk:r,getOrDie:r,getOrNull:r,getOrUndefined:r,or:n,orThunk:n,map:function(n){return y(n(e))},each:function(n){n(e)},bind:t,exists:t,forall:t,filter:function(n){return n(e)?o:a},toArray:function(){return[e]},toString:function(){return"some("+e+")"},equals:function(n){return n.is(e)},equals_:function(n,t){return n.fold(f,function(n){return t(e,n)})}};return o},D=function(n){return null===n||n===undefined?a:y(n)},h=function(n){if(null===n||n===undefined)throw new Error("Node cannot be null or undefined");return{dom:u(n)}},p={fromHtml:function(n,t){var e=(t||i.document).createElement("div");if(e.innerHTML=n,!e.hasChildNodes()||1Could not load emoticons

"}]},buttons:[{type:"cancel",text:"Close",primary:!0}],initialData:{pattern:"",results:[]}}),a.focus(M),a.unblock()}))},R=function(n,t){function e(){return U(n,t)}n.ui.registry.addButton("emoticons",{tooltip:"Emoticons",icon:"emoji",onAction:e}),n.ui.registry.addMenuItem("emoticons",{text:"Emoticons...",icon:"emoji",onAction:e})};!function B(){r.add("emoticons",function(n,t){var e=E(n,t),r=F(n),o=h(n,e,r);R(n,o),function(r,o){r.ui.registry.addAutocompleter("emoticons",{ch:":",columns:"auto",minChars:2,fetch:function(t,e){return o.waitForLoad().then(function(){var n=o.listAll();return d(n,t,A.some(e))})},onAction:function(n,t,e){r.selection.setRng(t),r.insertContent(e),n.hide()}})}(n,o)})}()}(window); \ No newline at end of file diff --git a/website/appphp/static/vendors/tinymce/js/tinymce/plugins/fullpage/plugin.min.js b/website/appphp/static/vendors/tinymce/js/tinymce/plugins/fullpage/plugin.min.js deleted file mode 100644 index f7e135b6..00000000 --- a/website/appphp/static/vendors/tinymce/js/tinymce/plugins/fullpage/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.0.16 (2019-09-24) - */ -!function(m){"use strict";function f(t){return e({validate:!1,root_name:"#document"}).parse(t)}function g(t){return t.replace(/<\/?[A-Z]+/g,function(t){return t.toLowerCase()})}var o,i=function(t){function e(){return n}var n=t;return{get:e,set:function(t){n=t},clone:function(){return i(e())}}},t=tinymce.util.Tools.resolve("tinymce.PluginManager"),p=tinymce.util.Tools.resolve("tinymce.util.Tools"),e=tinymce.util.Tools.resolve("tinymce.html.DomParser"),h=tinymce.util.Tools.resolve("tinymce.html.Node"),y=tinymce.util.Tools.resolve("tinymce.html.Serializer"),v=function(t){return t.getParam("fullpage_hide_in_source_view")},r=function(t){return t.getParam("fullpage_default_xml_pi")},a=function(t){return t.getParam("fullpage_default_encoding")},c=function(t){return t.getParam("fullpage_default_font_family")},u=function(t){return t.getParam("fullpage_default_font_size")},s=function(t){return t.getParam("fullpage_default_text_color")},d=function(t){return t.getParam("fullpage_default_title")},_=function(t){return t.getParam("fullpage_default_doctype","")},b=f,n=function(t,e){var n,i,l=f(e),r={};function o(t,e){return t.attr(e)||""}return r.fontface=c(t),r.fontsize=u(t),7===(n=l.firstChild).type&&(r.xml_pi=!0,(i=/encoding="([^"]+)"/.exec(n.value))&&(r.docencoding=i[1])),(n=l.getAll("#doctype")[0])&&(r.doctype=""),(n=l.getAll("title")[0])&&n.firstChild&&(r.title=n.firstChild.value),p.each(l.getAll("meta"),function(t){var e,n=t.attr("name"),i=t.attr("http-equiv");n?r[n.toLowerCase()]=t.attr("content"):"Content-Type"===i&&(e=/charset\s*=\s*(.*)\s*/gi.exec(t.attr("content")))&&(r.docencoding=e[1])}),(n=l.getAll("html")[0])&&(r.langcode=o(n,"lang")||o(n,"xml:lang")),r.stylesheets=[],p.each(l.getAll("link"),function(t){"stylesheet"===t.attr("rel")&&r.stylesheets.push(t.attr("href"))}),(n=l.getAll("body")[0])&&(r.langdir=o(n,"dir"),r.style=o(n,"style"),r.visited_color=o(n,"vlink"),r.link_color=o(n,"link"),r.active_color=o(n,"alink")),r},x=function(t,r,e){var o,n,i,a,l,c=t.dom;function u(t,e,n){t.attr(e,n||undefined)}function s(t){n.firstChild?n.insert(t,n.firstChild):n.append(t)}o=f(e),(n=o.getAll("head")[0])||(a=o.getAll("html")[0],n=new h("head",1),a.firstChild?a.insert(n,a.firstChild,!0):a.append(n)),a=o.firstChild,r.xml_pi?(l='version="1.0"',r.docencoding&&(l+=' encoding="'+r.docencoding+'"'),7!==a.type&&(a=new h("xml",7),o.insert(a,o.firstChild,!0)),a.value=l):a&&7===a.type&&a.remove(),a=o.getAll("#doctype")[0],r.doctype?(a||(a=new h("#doctype",10),r.xml_pi?o.insert(a,o.firstChild):s(a)),a.value=r.doctype.substring(9,r.doctype.length-1)):a&&a.remove(),a=null,p.each(o.getAll("meta"),function(t){"Content-Type"===t.attr("http-equiv")&&(a=t)}),r.docencoding?(a||((a=new h("meta",1)).attr("http-equiv","Content-Type"),a.shortEnded=!0,s(a)),a.attr("content","text/html; charset="+r.docencoding)):a&&a.remove(),a=o.getAll("title")[0],r.title?(a?a.empty():s(a=new h("title",1)),a.append(new h("#text",3)).value=r.title):a&&a.remove(),p.each("keywords,description,author,copyright,robots".split(","),function(t){var e,n,i=o.getAll("meta"),l=r[t];for(e=0;e"))},C=Object.prototype.hasOwnProperty,k=(o=function(t,e){return e},function(){for(var t=new Array(arguments.length),e=0;e/g,function(t,e){return unescape(e)})},T=p.each,O=function(t){var e,n="",i="";if(r(t)){var l=a(t);n+='\n'}return n+=_(t),n+="\n\n\n",(e=d(t))&&(n+=""+e+"\n"),(e=a(t))&&(n+='\n'),(e=c(t))&&(i+="font-family: "+e+";"),(e=u(t))&&(i+="font-size: "+e+";"),(e=s(t))&&(i+="color: "+e+";"),n+="\n\n"},D=function(e,n,i){e.on("BeforeSetContent",function(t){!function(t,e,n,i){var l,r,o,a,c="",u=t.dom;if(!(i.selection||(o=A(t.settings.protect,i.content),"raw"===i.format&&e.get()||i.source_view&&v(t)))){0!==o.length||i.source_view||(o=p.trim(e.get())+"\n"+p.trim(o)+"\n"+p.trim(n.get())),-1!==(l=(o=o.replace(/<(\/?)BODY/gi,"<$1body")).indexOf("",l),e.set(g(o.substring(0,l+1))),-1===(r=o.indexOf("\n")),a=b(e.get()),T(a.getAll("style"),function(t){t.firstChild&&(c+=t.firstChild.value)});var s=a.getAll("body")[0];s&&u.setAttribs(t.getBody(),{style:s.attr("style")||"",dir:s.attr("dir")||"",vLink:s.attr("vlink")||"",link:s.attr("link")||"",aLink:s.attr("alink")||""}),u.remove("fullpage_styles");var d=t.getDoc().getElementsByTagName("head")[0];if(c)u.add(d,"style",{id:"fullpage_styles"}).appendChild(m.document.createTextNode(c));var f={};p.each(d.getElementsByTagName("link"),function(t){"stylesheet"===t.rel&&t.getAttribute("data-mce-fullpage")&&(f[t.href]=t)}),p.each(a.getAll("link"),function(t){var e=t.attr("href");if(!e)return!0;f[e]||"stylesheet"!==t.attr("rel")||u.add(d,"link",{rel:"stylesheet",text:"text/css",href:e,"data-mce-fullpage":"1"}),delete f[e]}),p.each(f,function(t){t.parentNode.removeChild(t)})}}(e,n,i,t)}),e.on("GetContent",function(t){!function(t,e,n,i){i.selection||i.source_view&&v(t)||(i.content=P(p.trim(e)+"\n"+p.trim(i.content)+"\n"+p.trim(n)))}(e,n.get(),i.get(),t)})},E=function(t){t.ui.registry.addButton("fullpage",{tooltip:"Metadata and document properties",icon:"document-properties",onAction:function(){t.execCommand("mceFullPageProperties")}}),t.ui.registry.addMenuItem("fullpage",{text:"Metadata and document properties",icon:"document-properties",onAction:function(){t.execCommand("mceFullPageProperties")}})};!function z(){t.add("fullpage",function(t){var e=i(""),n=i("");w(t,e),E(t),D(t,e,n)})}()}(window); \ No newline at end of file diff --git a/website/appphp/static/vendors/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js b/website/appphp/static/vendors/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js deleted file mode 100644 index cb148a2f..00000000 --- a/website/appphp/static/vendors/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.0.16 (2019-09-24) - */ -!function(a){"use strict";function e(){}function d(e){return function(){return e}}function n(){return c}var r,t=function(e){function n(){return r}var r=e;return{get:n,set:function(e){r=e},clone:function(){return t(n())}}},o=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=function(e){return{isFullscreen:function(){return null!==e.get()}}},u=d(!1),s=d(!0),c=(r={fold:function(e,n){return e()},is:u,isSome:u,isNone:s,getOr:m,getOrThunk:l,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:d(null),getOrUndefined:d(undefined),or:m,orThunk:l,map:n,each:e,bind:n,exists:u,forall:s,filter:n,equals:f,equals_:f,toArray:function(){return[]},toString:d("none()")},Object.freeze&&Object.freeze(r),r);function f(e){return e.isNone()}function l(e){return e()}function m(e){return e}function h(n){return function(e){return function(e){if(null===e)return"null";var n=typeof e;return"object"==n&&(Array.prototype.isPrototypeOf(e)||e.constructor&&"Array"===e.constructor.name)?"array":"object"==n&&(String.prototype.isPrototypeOf(e)||e.constructor&&"String"===e.constructor.name)?"string":n}(e)===n}}function g(e,n){return-1!==e.indexOf(n)}function v(e,n,r){if(!D(r))throw a.console.error("Invalid call to CSS.set. Property ",n,":: Value ",r,":: Element ",e),new Error("CSS value must be a string: "+r);!function(e){return e.style!==undefined&&F(e.style.getPropertyValue)}(e)||e.style.setProperty(n,r)}function O(e,n){var r=e.dom();!function(e,n){for(var r=R(e),t=0,o=r.length;t${name}');return{name:"plugins",title:"Plugins",items:[{type:"htmlpanel",presets:"document",html:[(n=e,null==n?"":'
'+function(t){var e=function(e){var t=F(e.plugins);return e.settings.forced_plugins===undefined?t:function(e,t){for(var n=[],o=0,r=e.length;o"+a(t,e)+""}),o=n.length,r=n.join("");return"

"+U.translate(["Plugins installed ({0}):",o])+"

    "+r+"
"}(n)+"
"),(t=b(["Accessibility Checker","Advanced Code Editor","Case Change","Checklist","Tiny Comments","Tiny Drive","Enhanced Media Embed","Format Painter","Link Checker","Mentions","MoxieManager","Page Embed","Permanent Pen","PowerPaste","Spell Checker Pro"],function(e){return"
  • "+U.translate(e)+"
  • "}).join(""),'

    '+U.translate("Premium plugins:")+"

    ")].join("")}]}},N=tinymce.util.Tools.resolve("tinymce.EditorManager"),L=function(){var e,t,n='TinyMCE '+(e=N.majorVersion,t=N.minorVersion,0===e.indexOf("@")?"X.X.X":e+"."+t)+"";return{name:"versions",title:"Version",items:[{type:"htmlpanel",html:"

    "+U.translate(["You are using {0}",n])+"

    ",presets:"document"}]}},B=function(){return{name:"keyboardnav",title:"Keyboard Navigation",items:[{type:"htmlpanel",html:"

    Editor UI keyboard navigation

    \n\n

    Activating keyboard navigation

    \n\n

    The sections of the outer UI of the editor - the menubar, toolbar, sidebar and footer - are all keyboard navigable. As such, there are multiple ways to activate keyboard navigation:

    \n
      \n
    • Focus the menubar: Alt + F9 (Windows) or ⌥F9 (MacOS)
    • \n
    • Focus the toolbar: Alt + F10 (Windows) or ⌥F10 (MacOS)
    • \n
    • Focus the footer: Alt + F11 (Windows) or ⌥F11 (MacOS)
    • \n
    \n\n

    Focusing the menubar or toolbar will start keyboard navigation at the first item in the menubar or toolbar, which will be highlighted with a gray background. Focusing the footer will start keyboard navigation at the first item in the element path, which will be highlighted with an underline.

    \n\n

    Moving between UI sections

    \n\n

    When keyboard navigation is active, pressing tab will move the focus to the next major section of the UI, where applicable. These sections are:

    \n
      \n
    • the menubar
    • \n
    • each group of the toolbar
    • \n
    • the sidebar
    • \n
    • the element path in the footer
    • \n
    • the wordcount toggle button in the footer
    • \n
    • the branding link in the footer
    • \n
    \n\n

    Pressing shift + tab will move backwards through the same sections, except when moving from the footer to the toolbar. Focusing the element path then pressing shift + tab will move focus to the first toolbar group, not the last.

    \n\n

    Moving within UI sections

    \n\n

    Keyboard navigation within UI sections can usually be achieved using the left and right arrow keys. This includes:

    \n
      \n
    • moving between menus in the menubar
    • \n
    • moving between buttons in a toolbar group
    • \n
    • moving between items in the element path
    • \n
    \n\n

    In all these UI sections, keyboard navigation will cycle within the section. For example, focusing the last button in a toolbar group then pressing right arrow will move focus to the first item in the same toolbar group.

    \n\n

    Executing buttons

    \n\n

    To execute a button, navigate the selection to the desired button and hit space or enter.

    \n\n

    Opening, navigating and closing menus

    \n\n

    When focusing a menubar button or a toolbar button with a menu, pressing space, enter or down arrow will open the menu. When the menu opens the first item will be selected. To move up or down the menu, press the up or down arrow key respectively. This is the same for submenus, which can also be opened and closed using the left and right arrow keys.

    \n\n

    To close any active menu, hit the escape key. When a menu is closed the selection will be restored to its previous selection. This also works for closing submenus.

    \n\n

    Context toolbars and menus

    \n\n

    To focus an open context toolbar such as the table context toolbar, press Ctrl + F9 (Windows) or ⌃F9 (MacOS).

    \n\n

    Context toolbar navigation is the same as toolbar navigation, and context menu navigation is the same as standard menu navigation.

    \n\n

    Dialog navigation

    \n\n

    There are two types of dialog UIs in TinyMCE: tabbed dialogs and non-tabbed dialogs.

    \n\n

    When a non-tabbed dialog is opened, the first interactive component in the dialog will be focused. Users can navigate between interactive components by pressing tab. This includes any footer buttons. Navigation will cycle back to the first dialog component if tab is pressed while focusing the last component in the dialog. Pressing shift + tab will navigate backwards.

    \n\n

    When a tabbed dialog is opened, the first button in the tab menu is focused. Pressing tab will navigate to the first interactive component in that tab, and will cycle through the tab\u2019s components, the footer buttons, then back to the tab button. To switch to another tab, focus the tab button for the current tab, then use the arrow keys to cycle through the tab buttons.

    "}]}};!function z(){t.add("help",function(e){var t=r({}),n=function(n){return{addTab:function(e){var t=n.get();t[e.name]=e,n.set(t)}}}(t),o=A(e,t);return s(e,o),i(e,o),e.shortcuts.add("Alt+0","Open help dialog","mceHelp"),n})}()}(); \ No newline at end of file diff --git a/website/appphp/static/vendors/tinymce/js/tinymce/plugins/hr/plugin.min.js b/website/appphp/static/vendors/tinymce/js/tinymce/plugins/hr/plugin.min.js deleted file mode 100644 index 5e1135fa..00000000 --- a/website/appphp/static/vendors/tinymce/js/tinymce/plugins/hr/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.0.16 (2019-09-24) - */ -!function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),o=function(n){n.addCommand("InsertHorizontalRule",function(){n.execCommand("mceInsertContent",!1,"
    ")})},t=function(n){n.ui.registry.addButton("hr",{icon:"horizontal-rule",tooltip:"Horizontal line",onAction:function(){return n.execCommand("InsertHorizontalRule")}}),n.ui.registry.addMenuItem("hr",{icon:"horizontal-rule",text:"Horizontal line",onAction:function(){return n.execCommand("InsertHorizontalRule")}})};!function e(){n.add("hr",function(n){o(n),t(n)})}()}(); \ No newline at end of file diff --git a/website/appphp/static/vendors/tinymce/js/tinymce/plugins/image/plugin.min.js b/website/appphp/static/vendors/tinymce/js/tinymce/plugins/image/plugin.min.js deleted file mode 100644 index 65672a4d..00000000 --- a/website/appphp/static/vendors/tinymce/js/tinymce/plugins/image/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.0.16 (2019-09-24) - */ -!function(s){"use strict";function o(){}function a(t){return function(){return t}}function t(t){return t}function e(){return l}var n,r=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=a(!1),c=a(!0),l=(n={fold:function(t,e){return t()},is:u,isSome:u,isNone:c,getOr:d,getOrThunk:f,getOrDie:function(t){throw new Error(t||"error: getOrDie called on none.")},getOrNull:a(null),getOrUndefined:a(undefined),or:d,orThunk:f,map:e,each:o,bind:e,exists:u,forall:c,filter:e,equals:i,equals_:i,toArray:function(){return[]},toString:a("none()")},Object.freeze&&Object.freeze(n),n);function i(t){return t.isNone()}function f(t){return t()}function d(t){return t}function m(e){return function(t){return function(t){if(null===t)return"null";var e=typeof t;return"object"==e&&(Array.prototype.isPrototypeOf(t)||t.constructor&&"Array"===t.constructor.name)?"array":"object"==e&&(String.prototype.isPrototypeOf(t)||t.constructor&&"String"===t.constructor.name)?"string":e}(t)===e}}function v(t){for(var e=[],n=0,r=t.length;n'+n+"")}else e.insertContent(i(e,t))},g=i,y=function(e){e.addCommand("mceInsertDate",function(){p(e,t(e))}),e.addCommand("mceInsertTime",function(){p(e,o(e))})},M=tinymce.util.Tools.resolve("tinymce.util.Tools"),S=function(e){function t(){return n}var n=e;return{get:t,set:function(e){n=e},clone:function(){return S(t())}}},v=function(n){var t=u(n),r=S(c(n));n.ui.registry.addSplitButton("insertdatetime",{icon:"insert-time",tooltip:"Insert date/time",select:function(e){return e===r.get()},fetch:function(e){e(M.map(t,function(e){return{type:"choiceitem",text:g(n,e),value:e}}))},onAction:function(){for(var e=[],t=0;t'),o.close()}}},O=i(!1),A=i(!0),C=(e={fold:function(n,t){return n()},is:O,isSome:O,isNone:A,getOr:E,getOrThunk:N,getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:i(null),getOrUndefined:i(undefined),or:E,orThunk:N,map:t,each:u,bind:t,exists:O,forall:A,filter:t,equals:P,equals_:P,toArray:function(){return[]},toString:i("none()")},Object.freeze&&Object.freeze(e),e);function P(n){return n.isNone()}function N(n){return n()}function E(n){return n}function I(n,t){return-1]+>[^<]+<\/a>$/.test(n)||-1===n.indexOf("href=")))},fn=D,ln=function(n,t){return function(n){return n.replace(/\uFEFF/g,"")}(t?t.innerText||t.textContent:n.getContent({format:"text"}))},sn=R,dn=L,mn={sanitize:function(n){return K(q)(n)},sanitizeWith:K,createUi:function(t,e){return function(n){return{name:t,type:"selectbox",label:e,items:n}}},getValue:q},hn=function(n){function t(){return e}var e=n;return{get:t,set:function(n){e=n},clone:function(){return hn(t())}}},pn=function(n,r){function e(n,t){var e=function(n,t){return"link"===t?n.catalogs.link:"anchor"===t?n.catalogs.anchor:J.none()}(r,t.name).getOr([]);return B(o.get(),t.name,e,n)}var o=hn(n.text);return{onChange:function(n,t){return"url"===t.name?function(n){if(o.get().length<=0){var t=n.url.meta.text!==undefined?n.url.meta.text:n.url.value;return J.some({text:t})}return J.none()}(n()):I(["anchor","link"],t.name)?e(n(),t):("text"===t.name&&o.set(n().text),J.none())}}},gn=function(){return(gn=Object.assign||function(n){for(var t,e=1,r=arguments.length;ee.length?ne(t,e,n):ee(t,e,n)},[]);return S(n).map(function(e){return e.list})}(e.contentDocument,n).toArray()}function de(e){var n=g(nt.getSelectedListItems(e),En.fromDom);return A(y(n,t(re)),y(function(e){var n=Ge.call(e,0);return n.reverse(),n}(n),t(re)),function(e,n){return{start:e,end:n}})}function le(t,e,r){var n=function(e,n){var t=ut(!1);return g(e,function(e){return{sourceList:e,entries:st(0,n,t,e)}})}(e,de(t));p(n,function(e){!function(e,n){p(v(e,ie),function(e){return function(e,n){switch(e){case"Indent":n.depth++;break;case"Outdent":n.depth--;break;case"Flatten":n.depth=0}}(n,e)})}(e.entries,r);var n=function(n,e){return N(function(e,n){if(0===e.length)return[];for(var t=n(e[0]),r=[],o=[],i=0,u=e.length;i=e.childNodes.length?t.data.length:0}:t.previousSibling&&jn(t.previousSibling)?{container:t.previousSibling,offset:t.previousSibling.data.length}:t.nextSibling&&jn(t.nextSibling)?{container:t.nextSibling,offset:0}:{container:e,offset:n}}function ve(e,n){var t=g(nt.getSelectedListRoots(e),En.fromDom),r=g(nt.getSelectedDlItems(e),En.fromDom),o=!1;if(t.length||r.length){var i=e.selection.getBookmark();le(e,t,n),ge(e,n,r),e.selection.moveToBookmark(i),e.selection.setRng(dt(e.selection.getRng())),e.nodeChanged(),o=!0}return o}function he(e){return ve(e,"Indent")}function ye(e){return ve(e,"Outdent")}function Ne(e){return ve(e,"Flatten")}function Se(e){return/\btox\-/.test(e.className)}function Oe(e){switch(e){case"UL":return"ToggleUlList";case"OL":return"ToggleOlList";case"DL":return"ToggleDLList"}}function Ce(t,e){Fn.each(e,function(e,n){t.setAttribute(n,e)})}function be(e,n,t){!function(e,n,t){var r=t["list-style-type"]?t["list-style-type"]:null;e.setStyle(n,"list-style-type",r)}(e,n,t),function(e,n,t){Ce(n,t["list-attributes"]),Fn.each(e.select("li",n),function(e){Ce(e,t["list-item-attributes"])})}(e,n,t)}function Le(e,n,t,r){var o,i;for(o=n[t?"startContainer":"endContainer"],i=n[t?"startOffset":"endOffset"],1===o.nodeType&&(o=o.childNodes[Math.min(i,o.childNodes.length-1)]||o),!t&&zn(o.nextSibling)&&(o=o.nextSibling);o.parentNode!==r;){if(Xn(e,o))return o;if(/^(TD|TH)$/.test(o.parentNode.nodeName))return o;o=o.parentNode}return o}function Te(r,o,i){void 0===i&&(i={});var e,n=r.selection.getRng(!0),u="LI",t=nt.getClosestListRootElm(r,r.selection.getStart(!0)),s=r.dom;"false"!==s.getContentEditable(r.selection.getNode())&&("DL"===(o=o.toUpperCase())&&(u="DT"),e=gt(n),Fn.each(function(t,e,r){for(var o,i=[],u=t.dom,n=Le(t,e,!0,r),s=Le(t,e,!1,r),a=[],c=n;c&&(a.push(c),c!==s);c=c.nextSibling);return Fn.each(a,function(e){if(Xn(t,e))return i.push(e),void(o=null);if(u.isBlock(e)||zn(e))return zn(e)&&u.remove(e),void(o=null);var n=e.nextSibling;lt.isBookmarkNode(e)&&(Xn(t,n)||!n&&e.parentNode===r)?o=null:(o||(o=u.create("p"),e.parentNode.insertBefore(o,e),i.push(o)),o.appendChild(e))}),i}(r,n,t),function(e){var n,t;(t=e.previousSibling)&&Hn(t)&&t.nodeName===o&&function(e,n,t){var r=e.getStyle(n,"list-style-type"),o=t?t["list-style-type"]:"";return r===(o=null===o?"":o)}(s,t,i)?(n=t,e=s.rename(e,u),t.appendChild(e)):(n=s.create(o),e.parentNode.insertBefore(n,e),n.appendChild(e),e=s.rename(e,u)),function(t,r,e){Fn.each(e,function(e){var n;return t.setStyle(r,((n={})[e]="",n))})}(s,e,["margin","margin-right","margin-bottom","margin-left","margin-top","padding","padding-right","padding-bottom","padding-left","padding-top"]),be(s,n,i),vt(r.dom,n)}),r.selection.setRng(pt(e)))}function Ee(e,n,t){return function(e,n){return e&&n&&Hn(e)&&e.nodeName===n.nodeName}(n,t)&&function(e,n,t){return e.getStyle(n,"list-style-type",!0)===e.getStyle(t,"list-style-type",!0)}(e,n,t)&&function(e,n){return e.className===n.className}(n,t)}function De(n,e,t,r,o){if(e.nodeName!==r||ht(o)){var i=gt(n.selection.getRng(!0));Fn.each([e].concat(t),function(e){!function(e,n,t,r){if(n.nodeName!==t){var o=e.dom.rename(n,t);be(e.dom,o,r),j(e,Oe(t),o)}else be(e.dom,n,r),j(e,Oe(t),n)}(n,e,r,o)}),n.selection.setRng(pt(i))}else Ne(n)}function we(e,n){var t,r=n.parentNode;"LI"===r.nodeName&&r.firstChild===n&&((t=r.previousSibling)&&"LI"===t.nodeName?(t.appendChild(n),Gn(e,r)&&Nt.remove(r)):Nt.setStyle(r,"listStyleType","none")),Hn(r)&&(t=r.previousSibling)&&"LI"===t.nodeName&&t.appendChild(n)}function ke(e,n,t,r){var o=n.startContainer,i=n.startOffset;if(jn(o)&&(t?i"}(n):"application/x-shockwave-flash"===n.source1mime?function(e){var t='';return e.poster&&(t+=''),t+=""}(n):-1!==n.source1mime.indexOf("audio")?function(e,t){return t?t(e):'"}(n,o):"script"===n.type?function(e){return' \ No newline at end of file diff --git a/website/appphp/tmplphp/block/dlgdeleterow.tt b/website/appphp/tmplphp/block/dlgdeleterow.tt deleted file mode 100644 index b1361004..00000000 --- a/website/appphp/tmplphp/block/dlgdeleterow.tt +++ /dev/null @@ -1,69 +0,0 @@ -[% #PROCESS macro/fields.tt %] - - \ No newline at end of file diff --git a/website/appphp/tmplphp/block/dlginfo.tt b/website/appphp/tmplphp/block/dlginfo.tt deleted file mode 100644 index 97bcbcfe..00000000 --- a/website/appphp/tmplphp/block/dlginfo.tt +++ /dev/null @@ -1,59 +0,0 @@ - - - \ No newline at end of file diff --git a/website/appphp/tmplphp/block/dlgmessage.tt b/website/appphp/tmplphp/block/dlgmessage.tt deleted file mode 100644 index 84aae526..00000000 --- a/website/appphp/tmplphp/block/dlgmessage.tt +++ /dev/null @@ -1,25 +0,0 @@ - - \ No newline at end of file diff --git a/website/appphp/tmplphp/block/dlgstaffpayedhours.tt b/website/appphp/tmplphp/block/dlgstaffpayedhours.tt deleted file mode 100644 index 059e15c3..00000000 --- a/website/appphp/tmplphp/block/dlgstaffpayedhours.tt +++ /dev/null @@ -1,29 +0,0 @@ - - - \ No newline at end of file diff --git a/website/appphp/tmplphp/block/dlgstaffperioddays.tt b/website/appphp/tmplphp/block/dlgstaffperioddays.tt deleted file mode 100644 index 0ef56632..00000000 --- a/website/appphp/tmplphp/block/dlgstaffperioddays.tt +++ /dev/null @@ -1,207 +0,0 @@ - - - - \ No newline at end of file diff --git a/website/appphp/tmplphp/block/head.tt b/website/appphp/tmplphp/block/head.tt deleted file mode 100644 index f61130c5..00000000 --- a/website/appphp/tmplphp/block/head.tt +++ /dev/null @@ -1,28 +0,0 @@ - - - - [% sitename %] - [% pagename %] - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/website/appphp/tmplphp/block/pnl_nodata.tt b/website/appphp/tmplphp/block/pnl_nodata.tt deleted file mode 100644 index 1d0dd8ea..00000000 --- a/website/appphp/tmplphp/block/pnl_nodata.tt +++ /dev/null @@ -1,10 +0,0 @@ -
    -
    -
    -   -
    -
    -
    - -
    -
    diff --git a/website/appphp/tmplphp/block/snackbar.php b/website/appphp/tmplphp/block/snackbar.php deleted file mode 100644 index 464a1624..00000000 --- a/website/appphp/tmplphp/block/snackbar.php +++ /dev/null @@ -1 +0,0 @@ -
    \ No newline at end of file diff --git a/website/appphp/tmplphp/file.php b/website/appphp/tmplphp/file.php deleted file mode 100644 index 0bb75455..00000000 --- a/website/appphp/tmplphp/file.php +++ /dev/null @@ -1 +0,0 @@ -[% INCLUDE $page %] diff --git a/website/appphp/tmplphp/index.php b/website/appphp/tmplphp/index.php deleted file mode 100644 index 9b0783d1..00000000 --- a/website/appphp/tmplphp/index.php +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - POT - Plan d'Orgatisation du Travail - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - -
    - - -
    - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/website/appphp/tmplphp/login.php b/website/appphp/tmplphp/login.php deleted file mode 100644 index 69212618..00000000 --- a/website/appphp/tmplphp/login.php +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - POT - Plan d'organisation du travail - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
      -
    -
    -
    - logo -
    -
    - [% IF pagename == 'forgotpassword' %] - [% INCLUDE module/login/forgotpassword.tt %] - [% ELSIF pagename == 'message' %] - [% INCLUDE module/login/message.tt %] - [% ELSE %] - [% INCLUDE module/login/login.tt %] - [% END %] -
    -
    -
      -
    -
    -
    - - - diff --git a/website/appphp/tmplphp/module/admin.php b/website/appphp/tmplphp/module/admin.php deleted file mode 100644 index e03995cf..00000000 --- a/website/appphp/tmplphp/module/admin.php +++ /dev/null @@ -1,56 +0,0 @@ -
    -
    - retour -
    Entreprises
    - - - -
    - - -
    -
    -
    -
    -
    -
    -
    -
    -
    - [% INCLUDE block/pnl_nodata.tt %] [% INCLUDE module/admin/pnl_basedata.tt %] - - -
    -
    -
    -[% INCLUDE module/admin/dlg_dataset.tt %] -[% INCLUDE module/admin/dlg_staffgroups.tt %] -[% INCLUDE module/admin/dlg_worktimes.tt %] -[% INCLUDE block/dlgdeleterow.tt %] -[% INCLUDE block/dlgmessage.tt %] -[% INCLUDE module/admin/dlg_users.tt %] - - - - - diff --git a/website/appphp/tmplphp/module/admin/companies.js b/website/appphp/tmplphp/module/admin/companies.js deleted file mode 100644 index 6f5f281f..00000000 --- a/website/appphp/tmplphp/module/admin/companies.js +++ /dev/null @@ -1,178 +0,0 @@ - -schemata = "public"; -currentview = null; - -let periodunits = [{"value":"week","text":"Semaine(s)"},{"value":"month","text":"Mois"}]; -function initpage(){ - companies.inittable(); - staffgroups.inittable(); - worktimes.inittable(); - users.inittable(); - schemadataset.initform(); - // app.viewpanel("tbl_companies"); -} - -let companies ={ - tbl: null, - current_company: null, - current_schemata: null, - current_view: 'basedata', - name: "companies", - choices:{"reportperiodunit":null}, - initform: function(){ - flatpickr("#reportperiodstart",{altInput: true, - altFormat: "d.m.Y", - dateFormat: "Y-m-d", - "locale": "fr", - onClose: function(selectedDates, dateStr, instance) { - console.log(selectedDates); - record.savefield(document.getElementById('reportperiodstart')); - }, - }); - // companies.choices["reportperiodunit"] = new Choices('#reportperiodunit',{ - // searchEnabled: false, - // itemSelectText: '', - // removeItemButton: false, - // shouldSort: false, - // shouldSortItems: false, - // choices : [{"value":"","label":""},{"value":"week","label":"semaine(s)"},{"value":"month","label":"mois"}] - // }); - companies.choices["reportperiodunit"] = new SlimSelect({ - select: "#reportperiodunit", - showSearch: false, - afterClose: function(){record.savefield(document.getElementById('reportperiodunit'));} - }); - form.fillselectlist(companies.choices["reportperiodunit"],periodunits,'value','text'); - // companies.choices["reportperiodunit"].passedElement.element.addEventListener( - // 'change', - // function(event) { - // record.savefield(document.getElementById('reportperiodunit')); - // }, - // true - // ); - }, - inittable: function(){ - companies.initform(); - companies.tbl = new Tabulator("#tbl_companies", { - // headerFilterPlaceholder: "filter...", - height: "calc(100vh - 55px)", - layout: "fitDataFill", - selectable: 1, - rowClick:function(e, row){ - //console.log("Filter selected"); - - companies.edit(); - //invoices.gettbldata(fsel); - //invoices.getsums(fsel); - }, - rowContext:function(e, row){e.preventDefault();}, - columns:[ - {title:"entreprise",field:"company",resizable:false}, - {title:"dataset",field:"datasetname",resizable:false} - // {title:"address",field:"address",headerFilter:"input"}, - // {title:"cp",field:"zip",headerFilter:"input"}, - // {title:"ville",field:"city",headerFilter:"input"}, - // {title:"pays",field:"country",headerFilter:"input"}, - // {title:"Schemata",field:"schemata",} - ] - }); - companies.gettbldata(); - }, - gettbldata: function(id){ - if (id){ - companies.current_company = id; - }else { - companies.current_company = null; - } - postData("db.cgi", { "get": "companieslist","schemata":"public"}).then(data => { - companies.tbl.setData(data.result.sqldata).then(function(){ - if (companies.current_company){ - companies.tbl.table.selectRow(companies.current_company); - } - }); - }); - }, - // loadtbldata: function(data){ - // if (data && data.sqldata) { - - // } - // }, - // add: function(){ - // form.cleanform2("companies",companies.choices); - // document.getElementById("company").addEventListener('blur', function(event){companies.checkschema(event,this.id);},true); - // app.viewpanel("basedata"); - // }, - edit: function(){ - //document.getElementById("company").removeEventListener('blur',function(){},true); - let udata = companies.tbl.getSelectedData(); - if (udata[0]) { - // console.log(udata[0]); - // console.log("company schema:" + udata[0].schemata); - companies.current_schemata = udata[0].schemata; - //app.setschemata(); - //TODO: parent.setschemata(udata[0].schemata); - form.cleanform2("companies",companies.choices); - postData("db.cgi",{ "get": "companies" + "data","schemata":"public", "filter":"id='" + udata[0].id + "'"}).then(data => {form.fillformbydataclass2("companies",companies.choices,data.result.sqldata[0]);}); - staffgroups.gettbldata(); - worktimes.gettbldata(); - users.gettbldata(), - //if (companies.current_view == 'nodata'){ companies.current_view = 'basedata';} - companies.setview(companies.current_view); - //app.viewpanel('frm_' +"companies"); - } else { - app.viewpanel('nodata'); - } - }, - // fillform: function(data){ - // if (data && data.sqldata){ - - // } - // }, - - save: function(){ - // let company = document.getElementById("company").value; - // if (company == ''){ - // showmessagedlg("Erreur",'
    Le Champ "Entreprise" ne doit pas être vide!
    '); - // return false; - // } - // if (company.length < 3){ - // showmessagedlg("Erreur",'
    Le Champ "Entreprise" contenir au moins 3 lettres!'); - // return false; - // } - form.saveform("companies",schemata,null); - - app.viewpanel("tbl_companies"); - }, - afterschemainstall: function(data){ - //parent.getschemata(); - }, - checkschema(ev,fieldid){ - let companyname = document.getElementById(fieldid).value; - postData("db.cgi",{"fn":"getfreeschema","companyname":companyname}).then(data => { document.getElementById("schemata").value = data.result.newschema;}); - }, - // setnewschema(data){ - // if (data && data.newschema){ - - // } - // }, - afterdeletecallback: function(data){ - companies.gettbldata(); - app.viewpanel("tbl_companies"); - }, - setview: function(viewname){ - let sel = companies.tbl.getSelectedData(); - if (sel[0]){ - companies.current_view = viewname; - app.viewpanel(viewname); - } - } - -} - - - - - - - - diff --git a/website/appphp/tmplphp/module/admin/dlg_dataset.php b/website/appphp/tmplphp/module/admin/dlg_dataset.php deleted file mode 100644 index ff323ee2..00000000 --- a/website/appphp/tmplphp/module/admin/dlg_dataset.php +++ /dev/null @@ -1,40 +0,0 @@ - \ No newline at end of file diff --git a/website/appphp/tmplphp/module/admin/dlg_staffgroups.php b/website/appphp/tmplphp/module/admin/dlg_staffgroups.php deleted file mode 100644 index 81acb3d6..00000000 --- a/website/appphp/tmplphp/module/admin/dlg_staffgroups.php +++ /dev/null @@ -1,21 +0,0 @@ - \ No newline at end of file diff --git a/website/appphp/tmplphp/module/admin/dlg_users.php b/website/appphp/tmplphp/module/admin/dlg_users.php deleted file mode 100644 index 7a69828c..00000000 --- a/website/appphp/tmplphp/module/admin/dlg_users.php +++ /dev/null @@ -1,64 +0,0 @@ - diff --git a/website/appphp/tmplphp/module/admin/dlg_worktimes.php b/website/appphp/tmplphp/module/admin/dlg_worktimes.php deleted file mode 100644 index 6962380f..00000000 --- a/website/appphp/tmplphp/module/admin/dlg_worktimes.php +++ /dev/null @@ -1,56 +0,0 @@ - diff --git a/website/appphp/tmplphp/module/admin/pnl_basedata.php b/website/appphp/tmplphp/module/admin/pnl_basedata.php deleted file mode 100644 index 9967d0b1..00000000 --- a/website/appphp/tmplphp/module/admin/pnl_basedata.php +++ /dev/null @@ -1,113 +0,0 @@ - diff --git a/website/appphp/tmplphp/module/admin/schemadataset.js b/website/appphp/tmplphp/module/admin/schemadataset.js deleted file mode 100644 index ed8c9a95..00000000 --- a/website/appphp/tmplphp/module/admin/schemadataset.js +++ /dev/null @@ -1,51 +0,0 @@ - -let schemadataset= { - choices: {"newsector":null}, - initform: function(){ - schemadataset.choices["newsector"] = new SlimSelect({ - select: "#newsector", - showSearch: false - }); - schemadataset.getsectors(); - }, - add: function(){ - form.cleanform2("dataset",{}); - app.viewdialog("dataset"); - }, - remove: function(){ - let udata = companies.tbl.getSelectedData(); - if (udata[0]) { - let uid = udata[0].id; - showdeletedlg("dataset",uid,"Êtes vous sûre de supprimer l'entreprise sélectionnée?",schemadataset.afterdeletecallback,udata[0].schemata); - } - }, - afterschemainstall: function(data){ - console.log(data); - companies.gettbldata(); - document.getElementById('dlg_dataset').style.display='none'; - }, - checkschema(){ - let datasetname = document.getElementById('newdataset').value; - req.reqdata("db.cgi",{"fn":"getfreeschema","datasetname":datasetname},schemadataset.setnewschema); - }, - setnewschema(data){ - if (data && data.newschema){ - document.getElementById("newschemata").value = data.newschema; - } - }, - afterdeletecallback: function(data){ - companies.gettbldata(); - - }, - save: function(){ - //if (document.getElementById("id").value == ""){ - req.reqdata("db.cgi",{"fn":"installschema","schemaname":document.getElementById("newschemata").value,"datasetname":document.getElementById("newdataset").value,"sector":document.getElementById("newsector").value},schemadataset.afterschemainstall); - //} - }, - getsectors: function(){ - req.reqdata("db.cgi",{"get":"sectorlist","schemata":"public"},schemadataset.fillsectors); - }, - fillsectors: function(data){ - form.fillselectlist(schemadataset.choices["newsector"],data.sqldata,'sector','sector'); - }, -} diff --git a/website/appphp/tmplphp/module/admin/staffgroups.js b/website/appphp/tmplphp/module/admin/staffgroups.js deleted file mode 100644 index d15bf260..00000000 --- a/website/appphp/tmplphp/module/admin/staffgroups.js +++ /dev/null @@ -1,79 +0,0 @@ -let staffgroups = { - tbl: null, - choices:{}, - initform: function(){}, - inittable: function(){ - staffgroups.tbl = new Tabulator("#tbl_staffgroups", { - // headerVisible:false, - height: "254px", - layout: "fitDataStretch", - selectable: 1, - rowContext:function(e, row){ e.preventDefault(); }, - columns: [{ title: "Département", field: "groupname" },{ title: "salarié(s)", field: "staffmembers" }] - }); - //staffgroups.gettbldata(); - }, - gettbldata: function(){ - sel = companies.tbl.getSelectedData(); - if (sel[0]){ - //console.log(sel[0]); - postData("db.cgi", { "get": "staffgroupslist","schemata":sel[0].schemata}).then(data => { staffgroups.tbl.setData(data.result.sqldata);}); - - } - - }, - // loadtbldata: function(data){ - // if (data && data.sqldata) { } - // }, - add: function(){ - form.cleanform2("staffgroups",staffgroups.choices); - app.viewdialog("staffgroups"); - }, - edit: function(){ - let udata = staffgroups.tbl.getSelectedData(); - if (udata[0]) { - form.cleanform2("staffgroups",staffgroups.choices); - postData("db.cgi", { "get": "staffgroupsdata","schemata":companies.current_schemata, "filter":"id='" + udata[0].id + "'"}).then(data => { - data.result.sqldata[0]["id_staffgroups"] = data.result.sqldata[0]["id"]; - form.fillformbydataclass2("staffgroups",staffgroups.choices,data.result.sqldata[0]); - app.viewdialog("staffgroups"); - }); - - } - }, - // fillform: function(data){ - // if (data && data.sqldata){ - - // } - // }, - remove: function(){ - let udata = staffgroups.tbl.getSelectedData(); - if (udata[0]) { - let uid = udata[0].id; - showdeletedlg("staffgroups",uid,"Êtes vous sûre de supprimer le departement sélectionné?",staffgroups.afterdeletecallback,companies.current_schemata); - } - }, - save: function(){ - let udata = staffgroups.tbl.getSelectedData(); - let wkdata = form.getformcontent("staffgroups"); - wkdata["ident_staffgroups_id"] = wkdata["ident_staffgroups_id_staffgroups"]; - delete wkdata["ident_staffgroups_id_staffgroups"]; - delete wkdata["null"]; - wkdata["fn"] ="saveform"; - wkdata["schemata"]=companies.current_schemata; - postData("db.cgi",wkdata).then(data => { - staffgroups.gettbldata(); - document.getElementById('dlg_staffgroups').style.display='none'; - form.formsaved({}); - }); - return false; - }, - afterdeletecallback: function(data){ - staffgroups.gettbldata(); - } - // aftersavedcallback: function(){ - // staffgroups.gettbldata(); - // document.getElementById('dlg_staffgroups').style.display='none'; - // return false; - // } -} \ No newline at end of file diff --git a/website/appphp/tmplphp/module/admin/users.js b/website/appphp/tmplphp/module/admin/users.js deleted file mode 100644 index 946d66b4..00000000 --- a/website/appphp/tmplphp/module/admin/users.js +++ /dev/null @@ -1,172 +0,0 @@ - - -let users ={ - tbl: null, - current_user: "[% session.id %]", - choices:{"schemaaccess":null}, - initform: function(){ - users.choices["id_company"] = new SlimSelect({ - select: "#id_company", - showSearch: false - }); - users.choices["id_usergroup"] = new SlimSelect({ - select: "#id_usergroup", - showSearch: false - }); - - users.choices["schemaaccess"] = new SlimSelect({ - select: "#schemaaccess", - showSearch: false - }); - users.getcompanies(); - users.getusergroups(); - users.getschemata(); - }, - inittable: function(){ - users.initform(); - users.tbl = new Tabulator("#tbl_users", { - height: "calc(100vh - 111px)", - layout: "fitDataStretch", - selectable: 1, - // rowClick:function(e, row){ - // console.log("Filter selected"); - // let fsel = users.tbl.getSelectedData(); - // console.log(fsel); - // users.edit(); - // //invoices.gettbldata(fsel); - // //invoices.getsums(fsel); - // }, - rowContext:function(e, row){ e.preventDefault();}, - columns:[ - // {title:"Entreprise", field:"company",headerFilter:"input"}, - {title:"Nom", field:"surname",resizable: false}, - {title:"Prénom", field:"prename",resizable:false}, - {title:"Accès", field:"usergroups",resizable:false}, - {title:"Bloqué", field:"blocked",formatter:"tickCross",hozAlign:"center", - formatterParams:{allowEmpty:true,allowTruthy:true,tickElement:''}}, - // {title:"Accès",field:"groupname",headerFilter:"input"}, - // {title:"Position",field:"job"}, - // {title:"Téléphone",field:"phone"}, - // {title:"E-mail",field:"username"}, - // - ], - }); - //users.gettbldata(); - }, - gettbldata: function(){ - let sel= companies.tbl.getSelectedData(); - if (sel[0]){ - postData("db.cgi",{ "get": "userslist","schemata":"public","filter":" schemaaccess='" + sel[0].schemata + "'"}).then(data => {users.tbl.setData(data.result.sqldata);}); - } - }, - add: function(){ - form.cleanform2("users",users.choices); - app.viewdialog("users"); - }, - edit: function(){ - let udata = users.tbl.getSelectedData(); - if (udata[0]) { - form.cleanform2("users",users.choices); - postData("db.cgi",{ "get": "usersdata","schemata":"public", "filter":"id='" + udata[0].id + "'"}).then(data => {form.fillformbydataclass2("users",users.choices,data.result.sqldata[0]);app.viewdialog("users");}); - } - }, - remove: function(){ - let udata = users.tbl.getSelectedData(); - if (udata[0]) { - let uid = udata[0].id; - showdeletedlg("users",uid,"Êtes vous sûre de supprimer l'utilisateur sélectionnée?",users.afterdeletecallback,schemata); - } - }, - validateform: function(){ - let idcompany = document.getElementById("id_company").value; - if (idcompany == ''){ - document.getElementById("usermsg").innerHTML= '
    Entreprise ne doit pas être vide!
    '; - return false; - } - let usergroups = document.getElementById("id_usergroup").selectedOptions; - if (usergroups.length == 0){ - document.getElementById("usermsg").innerHTML= '
    Accès Groupe ne doit pas être vide!
    '; - return false; - } - let schemaaccess = document.getElementById("schemaaccess").selectedOptions; - if (schemaaccess.length == 0){ - document.getElementById("usermsg").innerHTML= '
    Accès Entreprise ne doit pas être vide!
    '; - return false; - } - users.checkemail(); - return false; - }, - sendnewpassword: function(){ - let fndata = {"fn":"sendnewpassword","email":document.getElementById("username").value}; - postData("app.cgi",fndata).then(data => { - document.getElementById('dlg_users').style.display='none'; - if (data && data.result.status == 0){ - showmessagedlg("Nouveau mot de passe!","Nouveau mot de passe envoyé!"); - }else { - showmessagedlg("Erreur!","Une erreur c'est produite pour l'envoie d'un nouveau mot de passe!"); - } - }); - }, - afterdeletecallback: function(data){ - users.gettbldata(); - }, - afteruseradded: function(data){ - users.gettbldata(); - document.getElementById('dlg_users').style.display='none'; - return false; - }, - getcompanies: function(){ - postData("db.cgi",{"get":"companieslist","schemata":"public"}).then(data => { - form.fillselectlist(users.choices["id_company"],data.result.sqldata,'id','company'); - }); - }, - getusergroups: function(){ - postData("db.cgi",{"get":"usergroupslist","schemata":"public"}).then(data => {form.fillselectlist(users.choices["id_usergroup"],data.result.sqldata,'id','groupname');}); - }, - getschemata: function(){ - postData("db.cgi",{"get":"schemata","schemata":"public"}).then(data => {form.fillselectlist(users.choices["schemaaccess"],data.result.sqldata,'schemaname','company');}); - }, - checkemail: function(){ - let usernamex = document.getElementsByName("users_username"); - let newusername = usernamex[0].value; - if (users.validateEmail(newusername)){ - let iduser = document.getElementById("id_users").value; - let filter = "username='"+ newusername+ "'"; - - if (iduser != ''){ - filter += " and id !=" + iduser; - } - postData("db.cgi",{"get":"usersdata","schemata":"public","filter":filter}).then(data => { - if (data && data.result.sqldata.length > 0){ - document.getElementById("usermsg").innerHTML= '
    Il existe déjà uncompte avec cette addresse E-Mail!
    '; - } else { - var flds=form.getformcontent("users",null); - flds["fn"] ="saveform"; - flds["schemata"]="public"; - flds["ident_users_id"] = flds["ident_users_id_users"]; - delete flds["null"]; - delete flds["ident_users_id_users"]; - //console.log("Data to save"); - //console.log(flds); - postData("db.cgi",flds).then(data => { - users.gettbldata(); - document.getElementById('dlg_users').style.display='none'; - form.formsaved(null); - }); - - } - }); - - }else { - document.getElementById("usermsg").innerHTML= '
    inserez un email valide s.v.p.!
    '; - } - return false; - }, - validateEmail: function (email) { - let re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; - return re.test(String(email).toLowerCase()); - }, - viewtable: function(){ - users.gettbldata(); - } -} diff --git a/website/appphp/tmplphp/module/admin/worktimes.js b/website/appphp/tmplphp/module/admin/worktimes.js deleted file mode 100644 index 9fef0d1e..00000000 --- a/website/appphp/tmplphp/module/admin/worktimes.js +++ /dev/null @@ -1,94 +0,0 @@ -let worktimes = { - tbl: null, - choices:{}, - initform: function(){ - flatpickr("#startdate",{altInput: true, - altFormat: "d.m.Y", - dateFormat: "Y-m-d", - "locale": "fr", - }); - flatpickr("#enddate",{altInput: true, - altFormat: "d.m.Y", - dateFormat: "Y-m-d", - "locale": "fr", - }); - }, - inittable: function(){ - worktimes.tbl = new Tabulator("#tbl_" + "worktimes", { - headerFilterPlaceholder: "filter...", - height: "calc(100vh - 111px)", - layout: "fitDataStretch", - selectable: 1, - rowContext:function(e, row){ e.preventDefault(); }, - columns: [ - { title: "Début", field: "startdate",headerSort: true,formatter:"datetime",formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}}, - { title: "Fin", field: "enddate",headerSort: true,formatter:"datetime",formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}}, - { title: "H/j", field: "defaultdayhours",headerSort: false}, - { title: "Max H/j", field: "maxdayhours",headerSort: false}, - { title: "H/Sem.", field: "defaultweekhours",headerSort: false}, - { title: "Max H/Sem.", field: "maxweekhours",headerSort: false}, - { title: "Max Coup.", field: "maxinterruptionhours",headerSort: false}, - { title: "Standard", field: "isdefault",headerSort: false} - ] - }); - worktimes.initform(); - //worktimes.gettbldata(); - }, - gettbldata: function(){ - let sel = companies.tbl.getSelectedData(); - if (sel[0]){ - req.reqdata( "db.cgi", { "get": "worktimes" + "list","schemata":sel[0].schemata}, worktimes.loadtbldata); - } - - }, - loadtbldata: function(data){ - if (data && data.sqldata) { worktimes.tbl.setData(data.sqldata);} - }, - add: function(){ - form.cleanform2("worktimes",worktimes.choices); - app.viewdialog("worktimes"); - }, - edit: function(){ - let udata = worktimes.tbl.getSelectedData(); - if (udata[0]) { - form.cleanform2("worktimes",worktimes.choices); - req.reqdata( "db.cgi", { "get": "worktimes" + "list","schemata":companies.current_schemata, "filter":"id='" + udata[0].id + "'"}, worktimes.fillform); - app.viewdialog("worktimes"); - } - }, - fillform: function(data){ - if (data && data.sqldata){ - data.sqldata[0]["id_worktimes"] = data.sqldata[0]["id"]; - if (data.sqldata[0].isdefault == "1"){ - document.getElementById("worktimedates").style.display = "none"; - } else { - document.getElementById("worktimedates").style.display = "block"; - } - form.fillformbydataclass2("worktimes",worktimes.choices,data.sqldata[0]); - } - }, - remove: function(){ - let udata = worktimes.tbl.getSelectedData(); - console.log(udata[0].isdefault); - if (udata[0] && !udata[0].isdefault) { - let uid = udata[0].id; - showdeletedlg("worktimes",uid,"Êtes vous sûre de supprimer les heures sélectionné?",worktimes.afterdeletecallback,companies.current_schemata); - } - }, - save: function(){ - let wkdata = form.getformcontent("worktimes"); - wkdata["ident_worktimes_id"] = wkdata["ident_worktimes_id_worktimes"]; - delete wkdata["ident_worktimes_id_worktimes"]; - delete wkdata["null"]; - form.saveformdata(wkdata,workplans.aftersavedcallback,companies.current_schemata); - return false; - }, - afterdeletecallback: function(data){ - worktimes.gettbldata(); - }, - aftersavedcallback: function(){ - worktimes.gettbldata(); - document.getElementById('dlg_worktimes').style.display='none'; - return false; - } -} \ No newline at end of file diff --git a/website/appphp/tmplphp/module/company.php b/website/appphp/tmplphp/module/company.php deleted file mode 100644 index 9851891d..00000000 --- a/website/appphp/tmplphp/module/company.php +++ /dev/null @@ -1,33 +0,0 @@ -
    -
    - retour -
    Entreprise
    - - -
    -
    -
    -
    -
    - [% INCLUDE module/company/pnl_basedata.tt %] - -
    -
    -
    -[% INCLUDE module/company/dlg_staffgroups.tt %] -[% INCLUDE block/dlgdeleterow.tt %] -[% INCLUDE block/dlgmessage.tt %] -[% INCLUDE module/company/dlg_users.tt %] - - - diff --git a/website/appphp/tmplphp/module/company/company.js b/website/appphp/tmplphp/module/company/company.js deleted file mode 100644 index e938902f..00000000 --- a/website/appphp/tmplphp/module/company/company.js +++ /dev/null @@ -1,68 +0,0 @@ - -schemata = "public"; -currentview = null; - -let periodunits = [{"value":"week","text":"Semaine(s)"},{"value":"month","text":"Mois"}]; -function initpage(){ - company.initform(); - staffgroups.inittable(); - users.inittable(); - company.edit(); -} - -let company = { - current_company: null, - current_schemata: null, - current_view: 'basedata', - choices:{"reportperiodunit":null}, - initform: function(){ - flatpickr("#reportperiodstart",{altInput: true, - altFormat: "d.m.Y", - dateFormat: "Y-m-d", - "locale": "fr", - onClose: function(selectedDates, dateStr, instance) { - console.log(selectedDates); - record.savefield(document.getElementById('reportperiodstart')); - }, - }); - company.choices["reportperiodunit"] = new SlimSelect({ - select: "#reportperiodunit", - showSearch: false, - afterClose: function(){record.savefield(document.getElementById('reportperiodunit'));} - }); - form.fillselectlist(company.choices["reportperiodunit"],periodunits,'value','text'); - }, - - edit: function(){ - - company.current_schemata = schemata; - //app.setschemata(); - //TODO: parent.setschemata(udata[0].schemata); - form.cleanform2("company",company.choices); - req.reqdata( "db.cgi", { "get": "companiesdata","schemata":"public", "filter":"schemata='" + schemata + "'"}, company.fillform); - staffgroups.gettbldata(); - users.gettbldata(), - //if (company.current_view == 'nodata'){ company.current_view = 'basedata';} - company.setview(company.current_view); - //app.viewpanel('frm_' +"company"); - - }, - fillform: function(data){ - if (data && data.sqldata){ - form.fillformbydataclass2("companies",company.choices,data.sqldata[0]); - } - }, - setview: function(viewname){ - company.current_view = viewname; - app.viewpanel(viewname); - } - -} - - - - - - - - diff --git a/website/appphp/tmplphp/module/company/dlg_staffgroups.php b/website/appphp/tmplphp/module/company/dlg_staffgroups.php deleted file mode 100644 index 53f5c8ca..00000000 --- a/website/appphp/tmplphp/module/company/dlg_staffgroups.php +++ /dev/null @@ -1,25 +0,0 @@ - \ No newline at end of file diff --git a/website/appphp/tmplphp/module/company/dlg_users.php b/website/appphp/tmplphp/module/company/dlg_users.php deleted file mode 100644 index fd6361cd..00000000 --- a/website/appphp/tmplphp/module/company/dlg_users.php +++ /dev/null @@ -1,104 +0,0 @@ - diff --git a/website/appphp/tmplphp/module/company/pnl_basedata.php b/website/appphp/tmplphp/module/company/pnl_basedata.php deleted file mode 100644 index d5f4094a..00000000 --- a/website/appphp/tmplphp/module/company/pnl_basedata.php +++ /dev/null @@ -1,108 +0,0 @@ -
    -
    -
    - Données de base -
    -
    -
    - -
    -
    -
    -
    - - -
    -
    -
    -
    - - -
    -
    - - -
    -
    -
    -
    - - -
    -
    - - -
    -
    -
    -
    - - -
    - -
    -
    -
    -
    -
    - - -
    -
    -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    -
    -
    - - -
    -
    -
    -
    -
    -
    -
    - Configuration Périodes -
    -
    -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    -
    -
    -
    -
    - Départements -
    -
    -
    -
    -
    -
    diff --git a/website/appphp/tmplphp/module/company/staffgroups.js b/website/appphp/tmplphp/module/company/staffgroups.js deleted file mode 100644 index 293e215d..00000000 --- a/website/appphp/tmplphp/module/company/staffgroups.js +++ /dev/null @@ -1,65 +0,0 @@ -let staffgroups = { - tbl: null, - choices:{}, - initform: function(){}, - inittable: function(){ - staffgroups.tbl = new Tabulator("#tbl_staffgroups", { - // headerVisible:false, - height: "254px", - layout: "fitDataStretch", - selectable: 1, - rowContext:function(e, row){ e.preventDefault(); }, - columns: [{ title: "Département", field: "groupname" },{ title: "salarié(s)", field: "staffmembers" }] - }); - //staffgroups.gettbldata(); - }, - gettbldata: function(){ - req.reqdata( "db.cgi", { "get": "staffgroupslist","schemata":schemata}, staffgroups.loadtbldata); - }, - loadtbldata: function(data){ - if (data && data.sqldata) { staffgroups.tbl.setData(data.sqldata);} - }, - add: function(){ - form.cleanform2("staffgroups",staffgroups.choices); - app.viewdialog("staffgroups"); - }, - edit: function(){ - let udata = staffgroups.tbl.getSelectedData(); - if (udata[0]) { - form.cleanform2("staffgroups",staffgroups.choices); - req.reqdata( "db.cgi", { "get": "staffgroupsdata","schemata":schemata, "filter":"id='" + udata[0].id + "'"}, staffgroups.fillform); - app.viewdialog("staffgroups"); - } - }, - fillform: function(data){ - if (data && data.sqldata){ - data.sqldata[0]["id_staffgroups"] = data.sqldata[0]["id"]; - form.fillformbydataclass2("staffgroups",staffgroups.choices,data.sqldata[0]); - } - }, - remove: function(){ - let udata = staffgroups.tbl.getSelectedData(); - if (udata[0]) { - let uid = udata[0].id; - showdeletedlg("staffgroups",uid,"Êtes vous sûre de supprimer le departement sélectionné?",staffgroups.afterdeletecallback,companies.current_schemata); - } - }, - save: function(){ - let udata = staffgroups.tbl.getSelectedData(); - let wkdata = form.getformcontent("staffgroups"); - wkdata["ident_staffgroups_id"] = wkdata["ident_staffgroups_id_staffgroups"]; - delete wkdata["ident_staffgroups_id_staffgroups"]; - delete wkdata["null"]; - form.saveformdata(wkdata,staffgroups.aftersavedcallback,schemata); - return false; - - }, - afterdeletecallback: function(data){ - staffgroups.gettbldata(); - }, - aftersavedcallback: function(){ - staffgroups.gettbldata(); - document.getElementById('dlg_staffgroups').style.display='none'; - return false; - } -} \ No newline at end of file diff --git a/website/appphp/tmplphp/module/company/users.js b/website/appphp/tmplphp/module/company/users.js deleted file mode 100644 index 946d66b4..00000000 --- a/website/appphp/tmplphp/module/company/users.js +++ /dev/null @@ -1,172 +0,0 @@ - - -let users ={ - tbl: null, - current_user: "[% session.id %]", - choices:{"schemaaccess":null}, - initform: function(){ - users.choices["id_company"] = new SlimSelect({ - select: "#id_company", - showSearch: false - }); - users.choices["id_usergroup"] = new SlimSelect({ - select: "#id_usergroup", - showSearch: false - }); - - users.choices["schemaaccess"] = new SlimSelect({ - select: "#schemaaccess", - showSearch: false - }); - users.getcompanies(); - users.getusergroups(); - users.getschemata(); - }, - inittable: function(){ - users.initform(); - users.tbl = new Tabulator("#tbl_users", { - height: "calc(100vh - 111px)", - layout: "fitDataStretch", - selectable: 1, - // rowClick:function(e, row){ - // console.log("Filter selected"); - // let fsel = users.tbl.getSelectedData(); - // console.log(fsel); - // users.edit(); - // //invoices.gettbldata(fsel); - // //invoices.getsums(fsel); - // }, - rowContext:function(e, row){ e.preventDefault();}, - columns:[ - // {title:"Entreprise", field:"company",headerFilter:"input"}, - {title:"Nom", field:"surname",resizable: false}, - {title:"Prénom", field:"prename",resizable:false}, - {title:"Accès", field:"usergroups",resizable:false}, - {title:"Bloqué", field:"blocked",formatter:"tickCross",hozAlign:"center", - formatterParams:{allowEmpty:true,allowTruthy:true,tickElement:''}}, - // {title:"Accès",field:"groupname",headerFilter:"input"}, - // {title:"Position",field:"job"}, - // {title:"Téléphone",field:"phone"}, - // {title:"E-mail",field:"username"}, - // - ], - }); - //users.gettbldata(); - }, - gettbldata: function(){ - let sel= companies.tbl.getSelectedData(); - if (sel[0]){ - postData("db.cgi",{ "get": "userslist","schemata":"public","filter":" schemaaccess='" + sel[0].schemata + "'"}).then(data => {users.tbl.setData(data.result.sqldata);}); - } - }, - add: function(){ - form.cleanform2("users",users.choices); - app.viewdialog("users"); - }, - edit: function(){ - let udata = users.tbl.getSelectedData(); - if (udata[0]) { - form.cleanform2("users",users.choices); - postData("db.cgi",{ "get": "usersdata","schemata":"public", "filter":"id='" + udata[0].id + "'"}).then(data => {form.fillformbydataclass2("users",users.choices,data.result.sqldata[0]);app.viewdialog("users");}); - } - }, - remove: function(){ - let udata = users.tbl.getSelectedData(); - if (udata[0]) { - let uid = udata[0].id; - showdeletedlg("users",uid,"Êtes vous sûre de supprimer l'utilisateur sélectionnée?",users.afterdeletecallback,schemata); - } - }, - validateform: function(){ - let idcompany = document.getElementById("id_company").value; - if (idcompany == ''){ - document.getElementById("usermsg").innerHTML= '
    Entreprise ne doit pas être vide!
    '; - return false; - } - let usergroups = document.getElementById("id_usergroup").selectedOptions; - if (usergroups.length == 0){ - document.getElementById("usermsg").innerHTML= '
    Accès Groupe ne doit pas être vide!
    '; - return false; - } - let schemaaccess = document.getElementById("schemaaccess").selectedOptions; - if (schemaaccess.length == 0){ - document.getElementById("usermsg").innerHTML= '
    Accès Entreprise ne doit pas être vide!
    '; - return false; - } - users.checkemail(); - return false; - }, - sendnewpassword: function(){ - let fndata = {"fn":"sendnewpassword","email":document.getElementById("username").value}; - postData("app.cgi",fndata).then(data => { - document.getElementById('dlg_users').style.display='none'; - if (data && data.result.status == 0){ - showmessagedlg("Nouveau mot de passe!","Nouveau mot de passe envoyé!"); - }else { - showmessagedlg("Erreur!","Une erreur c'est produite pour l'envoie d'un nouveau mot de passe!"); - } - }); - }, - afterdeletecallback: function(data){ - users.gettbldata(); - }, - afteruseradded: function(data){ - users.gettbldata(); - document.getElementById('dlg_users').style.display='none'; - return false; - }, - getcompanies: function(){ - postData("db.cgi",{"get":"companieslist","schemata":"public"}).then(data => { - form.fillselectlist(users.choices["id_company"],data.result.sqldata,'id','company'); - }); - }, - getusergroups: function(){ - postData("db.cgi",{"get":"usergroupslist","schemata":"public"}).then(data => {form.fillselectlist(users.choices["id_usergroup"],data.result.sqldata,'id','groupname');}); - }, - getschemata: function(){ - postData("db.cgi",{"get":"schemata","schemata":"public"}).then(data => {form.fillselectlist(users.choices["schemaaccess"],data.result.sqldata,'schemaname','company');}); - }, - checkemail: function(){ - let usernamex = document.getElementsByName("users_username"); - let newusername = usernamex[0].value; - if (users.validateEmail(newusername)){ - let iduser = document.getElementById("id_users").value; - let filter = "username='"+ newusername+ "'"; - - if (iduser != ''){ - filter += " and id !=" + iduser; - } - postData("db.cgi",{"get":"usersdata","schemata":"public","filter":filter}).then(data => { - if (data && data.result.sqldata.length > 0){ - document.getElementById("usermsg").innerHTML= '
    Il existe déjà uncompte avec cette addresse E-Mail!
    '; - } else { - var flds=form.getformcontent("users",null); - flds["fn"] ="saveform"; - flds["schemata"]="public"; - flds["ident_users_id"] = flds["ident_users_id_users"]; - delete flds["null"]; - delete flds["ident_users_id_users"]; - //console.log("Data to save"); - //console.log(flds); - postData("db.cgi",flds).then(data => { - users.gettbldata(); - document.getElementById('dlg_users').style.display='none'; - form.formsaved(null); - }); - - } - }); - - }else { - document.getElementById("usermsg").innerHTML= '
    inserez un email valide s.v.p.!
    '; - } - return false; - }, - validateEmail: function (email) { - let re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; - return re.test(String(email).toLowerCase()); - }, - viewtable: function(){ - users.gettbldata(); - } -} diff --git a/website/appphp/tmplphp/module/index.php b/website/appphp/tmplphp/module/index.php deleted file mode 100644 index 0065088b..00000000 --- a/website/appphp/tmplphp/module/index.php +++ /dev/null @@ -1,57 +0,0 @@ - -
    - -
    -
    -
    POT - Plan d'orgatisation du travail
    - Logout -
    - - - -
    -
    - -
    -
    - -
    -
    -

    Configuration

    -
    - -
    - [% IF (session.usergroup == 'admin') %] -
    -
    -

    Administration

    -
    - -
    - [% END %] - -
    - - diff --git a/website/appphp/tmplphp/module/index/index.js b/website/appphp/tmplphp/module/index/index.js deleted file mode 100644 index fc19a35c..00000000 --- a/website/appphp/tmplphp/module/index/index.js +++ /dev/null @@ -1,24 +0,0 @@ -// var schemata = null; -//var allschemata = null; -function initpage(){ - index.initform(); - -} - -let index = { - choices:{"current_schemata":null}, - initform: function(){ - document.getElementById("current_schemata").value = schemata; - index.choices["current_schemata"] = new SlimSelect({ - select: "#current_schemata", - showSearch: false, - afterClose: function(){app.changedataset();} - }); - index.getDataSets(); - }, - getDataSets(){ - postData("db.cgi",{"get":"schemata","schemata":"public"}).then(data => { - form.fillselectlist(index.choices["current_schemata"],data.result.sqldata,'schemaname','company'); - }); - } -} \ No newline at end of file diff --git a/website/appphp/tmplphp/module/login/accountreset.php b/website/appphp/tmplphp/module/login/accountreset.php deleted file mode 100644 index 1db3200d..00000000 --- a/website/appphp/tmplphp/module/login/accountreset.php +++ /dev/null @@ -1,27 +0,0 @@ - -
    -

    Demande de changement de mot de passe

    -
    Entrez votre nouveau mot de passe ci-dessous!
    -
    -
    - - -
    - - -
    -
    - - -
    -
    - - -
    -
    - -
    - -
    diff --git a/website/appphp/tmplphp/module/login/forgotpassword.php b/website/appphp/tmplphp/module/login/forgotpassword.php deleted file mode 100644 index 245cc69b..00000000 --- a/website/appphp/tmplphp/module/login/forgotpassword.php +++ /dev/null @@ -1,20 +0,0 @@ -
    -

    Mot de passe oublié?

    -
    Demander un nouveau mot de passe
    -
    -
    -
    - - - - -
    - -
    - -
    - - -
    \ No newline at end of file diff --git a/website/appphp/tmplphp/module/login/login.php b/website/appphp/tmplphp/module/login/login.php deleted file mode 100644 index 89779d2e..00000000 --- a/website/appphp/tmplphp/module/login/login.php +++ /dev/null @@ -1,27 +0,0 @@ -
    -

    Accès Client

    -
    -
    -
    - - -
    -
    - - -
    -
    - -
    - - [% IF registration_enabled == '1' %] -
    - Vous n'avez pas encore de compte?
    se régistrer -
    - [% END %] -
    - -
    -
    \ No newline at end of file diff --git a/website/appphp/tmplphp/module/login/message.php b/website/appphp/tmplphp/module/login/message.php deleted file mode 100644 index 48a66f36..00000000 --- a/website/appphp/tmplphp/module/login/message.php +++ /dev/null @@ -1,12 +0,0 @@ -
    [% message %]
    - - [% IF registration_enabled == '1' %] - - [% END %] - \ No newline at end of file diff --git a/website/appphp/tmplphp/module/login/register.php b/website/appphp/tmplphp/module/login/register.php deleted file mode 100644 index 8c205af7..00000000 --- a/website/appphp/tmplphp/module/login/register.php +++ /dev/null @@ -1,49 +0,0 @@ -[% PROCESS macro/fields.tt %] -
    -

    Vous n'avez pas un compte?

    -
    régistrez-vous maintenant!
    -
    - -
    -
    - [% fieldeditbox('company','companies','Entreprise','half','','','') %] -
    -
    - [% fieldeditbox('surname','members','Nom','third','','','') %] - [% fieldeditbox('prename','members','Prénom','third','','','') %] - [% fieldeditbox('job','members','Position','quarter','','','gérant') %] -
    -
    - [% fieldeditbox('email','users','E-Mail','half','','','') %] - [% fieldeditbox('phone','members','Téléphone','half','','','') %] -
    - -
    - - -
    -
    - -
    -
    - vous avez déjà un compte? Se Connecter -
    -
    - - \ No newline at end of file diff --git a/website/appphp/tmplphp/module/login/validationcode.php b/website/appphp/tmplphp/module/login/validationcode.php deleted file mode 100644 index d19673a6..00000000 --- a/website/appphp/tmplphp/module/login/validationcode.php +++ /dev/null @@ -1,23 +0,0 @@ - -
    -

    Validation de votre compte

    -
     
    -
    -
    [% message %]
    -
    -
    - - - - -
    - -
    - -
    -
    - - - \ No newline at end of file diff --git a/website/appphp/tmplphp/module/periods.php b/website/appphp/tmplphp/module/periods.php deleted file mode 100644 index fddd0036..00000000 --- a/website/appphp/tmplphp/module/periods.php +++ /dev/null @@ -1,50 +0,0 @@ -[% #PROCESS macro/fields.tt %] -[% #wd = [ {'wd' => 'mon' ,'day' => 'Lundi'}, {'wd' => 'tue','day' => 'Mardi'}, {'wd' => 'wed','day' => 'Mercredi'}, {'wd' => 'thu','day' => 'Jeudi'}, {'wd' => 'fri','day' => 'Vendredi'}, {'wd' => 'sat' ,'day' => 'Samedi'},{'wd' => 'sun','day' =>'Dimanche'} ] %] -
    -
    - retour -
    Périodes de références
    -
    - - - - - - -
    -
    -
    - -
    -
    -
    -
    -
    -
    - [% INCLUDE block/pnl_nodata.tt %] -
    -
    -
    - -
    -
    -
    - [% INCLUDE block/dlgdeleterow.tt %] - [% INCLUDE block/dlgmessage.tt %] - [% INCLUDE block/dlgdataload.tt %] - - [% INCLUDE block/dlgstaffperioddays.tt %] - [% INCLUDE block/dlgstaffpayedhours.tt %] - [% INCLUDE block/dlg_replacestaffdayworkplan.tt %] - - \ No newline at end of file diff --git a/website/appphp/tmplphp/module/periods/reportperiod.js b/website/appphp/tmplphp/module/periods/reportperiod.js deleted file mode 100644 index 1bd6baf8..00000000 --- a/website/appphp/tmplphp/module/periods/reportperiod.js +++ /dev/null @@ -1,152 +0,0 @@ -// let schemata = null; -let currentview = null; -function initpage(){ - schemata = app.getCurrentSchemata(); - reportperiod.inittable(); - staffperiodweeks.inittable(); - // app.viewpanel("tbl_reportperiod"); -} - -let reportperiod ={ - tblfilter: null, - tbl: null, - selected: null, - current_view: 'periods', - // name: "reportperiod", - choices:{}, - initform: function(){}, - inittable: function(){ - reportperiod.tblfilter = new Tabulator("#tbl_reportperiodfilter", { - // headerFilterPlaceholder: "filter...", - height: "calc(100vh - 56px)", - layout: "fitDataStretch", - selectable: 1, - rowClick:function(e, row){ - console.log("Filter selected"); - reportperiod.gettbldata(); - }, - rowContext:function(e, row){e.preventDefault();}, - columns: [ - - {title: "Début",field: "startdate",headerSort:"datetime",formatter:"datetime",resizable: false,formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""} }, - {title: "Fin",field: "enddate",sorter:"datetime",resizable: false,formatter:"datetime",formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""} }, - ] - }); - reportperiod.tbl = new Tabulator("#tbl_reportperiod", { - height: "calc(100vh - 56px)", - layout: "fitDataFill", - selectable: 1, - rowContext:function(e, row){e.preventDefault();}, - groupBy:["groupname"], - groupStartOpen:[true], - groupClosedShowCalcs:true, - groupHeader:[ - function(value, count, data){ - return value; - }, - ], - columns: [ - {title: "Département",field:"groupname" , visible: false}, - {title: "Prénom", field:"prename",headerSort: false}, - {title: "Nom", field:"surname",headerSort: false}, - {title: "Contrat", field:"contracthours",headerSort: false}, - {title: "Travail", field:"workhours",headerSort: false}, - {title: "Récup", field:"recuperationhours",headerSort: false}, - {title: "congé", field:"vacancyhours",headerSort: false}, - {title: "Total", field:"totalhours",headerSort: false}, - {title: "à récup.", field:"hoursdiff",headerSort: false},//,bottomCalc:reportperiod.periodrestsum - {title: "payés", field:"payedhours",headerSort: false} - ] - }); - reportperiod.gettbldatafilter(); - }, - gettbldata: function(){ - let fsel = reportperiod.tblfilter.getSelectedData(); - console.log(fsel); - if (fsel[0]){ - postData("db.cgi",{ "get": "staffreportperiodlist","schemata":schemata, "filter":" id_reportperiod='" + fsel[0].id +"'"}).then(data => { - reportperiod.tbl.setData(data.result.sqldata); - }); - req.reqdata( "db.cgi", { "get": "staffreportperiodlist","schemata":schemata, "filter":" id_reportperiod='" + fsel[0].id +"'"}, reportperiod.loadtbldata); - - } else { - reportperiod.loadtbldata({"sqldata":[]}); - } - reportperiod.setview(reportperiod.current_view); - }, - loadtbldata: function(data){ - if (data && data.sqldata) { reportperiod.tbl.setData(data.sqldata);} - }, - gettbldatafilter: function(){ - req.reqdata( "db.cgi", { "get": "reportperiodlist","schemata":schemata}, reportperiod.loadtbldatafilter); - }, - loadtbldatafilter: function(data){ - if (data && data.sqldata) { reportperiod.tblfilter.setData(data.sqldata);} - }, - reloadview: function(){ - reportperiod.gettbldata(); - app.viewpanel('tbl_reportperiod'); - }, - add: function(){ - showactiondlg(schemata,"add_reportperiod","Ajouter","Ajouter prochaine periode?",reportperiod.afterreportadded,''); - return false; - }, - afterreportadded(data){ - reportperiod.gettbldata(); - }, - generatereport: function(){ - let udata = reportperiod.tblfilter.getSelectedData(); - let repdata = {"schemata":schemata,"id_reportperiod":udata[0].id}; - if (udata[0]) { - report.generate('pot/pot_staffmember_period',"periode_" + moment(udata[0].startdate).format("YYYYMMDD") + "-" + moment(udata[0].enddate).format("YYYYMMDD"),repdata); - } - }, - datarefresh: function(){ - showdataloaddlg('','
    Attendez s.v.p.!
    '); - req.reqdata("db.cgi",{"fn":"refresh_periods","schemata":schemata},reportperiod.datarefreshdone); - return false; - }, - datarefreshdone: function(){ - reportperiod.gettbldata(); - closedataloaddlg(); - return false; - }, - periodrestsum: function(values, data, calcParams){ - let mts = 0; - for (let m in values){ - mts += timecalc.IntervalToMinutes(values[m]); - } - return timecalc.MinutesToInterval(mts); - }, - showdlgpayedhours: function(){ - form.cleanform2("rppayedhours",{}); - let prd = reportperiod.tbl.getSelectedData(); - if (prd[0]){ - document.getElementById("title_rppayedhours").innerHTML = "Période du " +moment(prd[0].startdate).format("DD.MM.YYYY") + " au " + moment(prd[0].enddate).format("DD.MM.YYYY"); - document.getElementById("id_staffreportperiod").value=prd[0].id; - document.getElementById("payedhours").value=prd[0].payedhours; - app.viewdialog('rppayedhours'); - } - }, - savepayedhours: function(){ - document.getElementById('dlg_rppayedhours').style.display='none'; - let rpdata = form.getformcontent("rppayedhours"); - rpdata["ident_staffreportperiod_id"] = rpdata["ident_staffreportperiod_id_staffreportperiod"]; - delete rpdata["ident_staffreportperiod_id_staffreportperiod"]; - rpdata["fn"] ="saveform"; - rpdata["schemata"] = schemata; - form.formsaved({}); - req.reqdata("db.cgi",rpdata,reportperiod.gettbldata); - return false; - }, - setview: function(viewname){ - reportperiod.current_view = viewname; - app.viewpanel(viewname); - }, - editplan(){ - let sel = reportperiod.tbl.getSelectedData(); - if (sel[0]){ - staffperiodweeks.loadplan(reportperiod.tbl); - } - } -} \ No newline at end of file diff --git a/website/appphp/tmplphp/module/periods/staffperiodweeks.js b/website/appphp/tmplphp/module/periods/staffperiodweeks.js deleted file mode 100644 index dcd55b5c..00000000 --- a/website/appphp/tmplphp/module/periods/staffperiodweeks.js +++ /dev/null @@ -1,324 +0,0 @@ -var daycheck ={ - maxdayhours: 600, //minutes - maxinterruption: 180, //minutes - maxweekcheck: 2880//minutes -} -var staffperiodweeks = { - tbl: null, - //name: "staffperiodweeks", - currentday: null, - parenttbl: null, - copy_id: null, - choices:{"id_vacancytype":null,"id_recuperationtype":null,"id_workplan":null}, - initform: function(){ - // flatpickr(".timefield",{ - // dateFormat: "H:i", - // defaultHour:'', - // defaultMinute:'', - // enableTime: true, - // noCalendar: true, - // time_24hr: true, - // "locale": "fr", - // }); - staffperiodweeks.choices["id_vacancytype"] = new SlimSelect({ - select: "#id_vacancytype", - showSearch: false, - allowDeselect: true, - deselectLabel: '✖', - onChange: function(){ - staffperiodweeks.setvacancyhours(); - } - }); - staffperiodweeks.choices["id_workplan"] = new SlimSelect({ - select: "#id_workplan", - showSearch: false, - - }); - staffperiodweeks.choices["id_recuperationtype"] = new SlimSelect({ - select: "#id_recuperationtype", - showSearch: false, - allowDeselect: true, - deselectLabel: '✖', - onChange: function(){ - staffperiodweeks.setrecuperationhours(); - }, - - }); - staffperiodweeks.getvacancy(); - staffperiodweeks.getrecuperation(); - var tfields = document.getElementsByClassName("timefield"); - for (var i=0;i { - if (data && data.result.sqldata) { staffperiodweeks.tbl.setData(data.result.sqldata);} - }); - - }, - loadplan: function(parenttbl){ - staffperiodweeks.parenttbl = parenttbl; - var selrp = staffperiodweeks.parenttbl.getSelectedData(); - //console.log(selrp); - if (selrp[0]) { - document.getElementById("periodtitle").innerHTML=" Période " + moment(selrp[0].startdate).lang("fr").format('DD.MM.YYYY') + "-" + moment(selrp[0].enddate).lang("fr").format('DD.MM.YYYY'); - document.getElementById("stafftitle").innerHTML= selrp[0].staffname + "(" + selrp[0].groupname + ")"; - staffperiodweeks.gettbldata(); - app.viewpanel('staffperiodweeks'); - } - }, - setweekworkhours: function(values, data, calcParams){ - if (data[0] && data[0].week_workhours){return data[0].week_workhours;} - return ""; - }, - setweekvacancyhours: function(values, data, calcParams){ - if (data[0] && data[0].week_vacancyhours){return data[0].week_vacancyhours;} - return ""; - }, - setweekrecuperationhours: function(values, data, calcParams){ - if (data[0] && data[0].week_recuperationhours){return data[0].week_recuperationhours;} - return ""; - }, - setweektotalhours: function(values, data, calcParams){ - if (data[0] && data[0].week_totalhours){return data[0].week_totalhours;} - return ""; - }, - setweekdiffhours: function(values, data, calcParams){ - if (data[0] && data[0].week_diffhours){return data[0].week_diffhours;} - return ""; - }, - edit: function(){ - form.cleanform2("staffreportperioddays",staffperiodweeks.choices); - var cday = staffperiodweeks.tbl.getSelectedData(); - - if (cday[0]){ - staffperiodweeks.currentday = cday[0]; - form.fillformbydataclass2("staffreportperioddays",staffperiodweeks.choices,staffperiodweeks.currentday); - document.getElementById("display_date").innerHTML=moment(staffperiodweeks.currentday.daydate).format("dddd , DD.MM.YYY"); - app.viewdialog('staffreportperioddays'); - } - }, - save: function(){ - var datamsg = ""; - var wpdata = form.getformcontent("staffreportperioddays"); - document.getElementById('dlg_staffreportperioddays').style.display='none'; - delete wpdata.staffreportperioddays_workhours; - delete wpdata.staffreportperioddays_interruptionhours; - delete wpdata.staffreportperioddays_dayhours; - wpdata["fn"] ="saveform"; - wpdata["schemata"] = schemata; - showdataloaddlg('','
    Attendez s.v.p.!
    '); - postData("db.cgi",wpdata).then(data => { - staffperiodweeks.gettbldata(); - form.formsaved({}); - closedataloaddlg(); - }); - return false; - }, - - getvacancy: function(){ - postData("db.cgi",{"get":"vacancylist","schemata":schemata,"filter":"isworktime=true"}).then(data => { form.fillselectlist(staffperiodweeks.choices["id_vacancytype"],data.result.sqldata,'id','vacancyname');}) - - }, - - getrecuperation: function(){ - postData("db.cgi",{"get":"vacancylist","schemata":schemata,"filter":"isworktime=false"}).then(data => {form.fillselectlist(staffperiodweeks.choices["id_recuperationtype"],data.result.sqldata,'id','vacancyname');}); - - }, - - setvacancyhours: function(){ - //console.log("Set vacancy hours!"); - //console.log(staffperiodweeks.choices["id_vacancytype"].selected()); - if (!staffperiodweeks.choices["id_vacancytype"].selected()){ - document.getElementById("vacancyhours").value=''; - } else { - if (!document.getElementById("vacancyhours").value){ - document.getElementById("vacancyhours").value=staffperiodweeks.currentday.contracthours; - } - } - staffperiodweeks.checkdaytime(); - }, - setrecuperationhours: function(){ - //console.log("Set recuperation hours!"); - if (!staffperiodweeks.choices["id_recuperationtype"].selected()){ - document.getElementById("recuperationhours").value=''; - } else { - if (!document.getElementById("recuperationhours").value){ - document.getElementById("recuperationhours").value=staffperiodweeks.currentday.contracthours; - } - } - staffperiodweeks.checkdaytime(); - }, - checkworktime: function(id){ - var mt1 = 0; - var mt2 = 0; - var mtp = 0; - var irupt = 0; - var ode1 = document.getElementById("timeend1"); - var ods1 = document.getElementById("timestart1"); - var ode2 = document.getElementById("timeend2"); - var ods2 = document.getElementById("timestart2"); - var odp = document.getElementById("timepause"); - var oirupt = document.getElementById("interruptionhours"); - var owkh = document.getElementById("workhours"); - if (ode1.value && ods1.value){ - mt1 = timecalc.TimeToMinutes(ode1.value)-timecalc.TimeToMinutes(ods1.value); - } - if (ode2.value && ods2.value){ - mt2 = timecalc.TimeToMinutes(ode2.value)-timecalc.TimeToMinutes(ods2.value); - } - if (odp.value){ - mtp = timecalc.TimeToMinutes(odp.value); - } - if ((mt2 > 0) && (mt1 > 0)){ - irupt = timecalc.TimeToMinutes(ods2.value)-timecalc.TimeToMinutes(ode1.value); - oirupt.value=timecalc.MinutesToTime(irupt); - if (irupt > daycheck.maxinterruption){ - oirupt.classList.remove("text-black"); - oirupt.classList.add("text-red"); - }else { - oirupt.classList.remove("text-red") - oirupt.classList.add("text-black"); - } - - } else { - oirupt.classList.remove("text-red"); - oirupt.classList.add("text-black"); - oirupt.value="00:00"; - } - owkh.value= timecalc.MinutesToTime(mt1+mt2-mtp); - staffperiodweeks.checkdaytime(); - }, - checkdaytime: function(){ - var wktime = 0; - var vactime = 0; - var reptime = 0; - var owkh = document.getElementById("workhours"); - var ovach = document.getElementById("vacancyhours"); - var orech = document.getElementById("recuperationhours"); - var odyh =document.getElementById("dayhours"); - var oirupt = document.getElementById("interruptionhours"); - if (owkh.value){ - wktime = timecalc.TimeToMinutes(owkh.value); - } - if (ovach.value){ - vactime = timecalc.TimeToMinutes(ovach.value); - } - if (orech.value){ - reptime = timecalc.TimeToMinutes(orech.value); - } - var fulldaytime = wktime+vactime+reptime; - odyh.value= timecalc.MinutesToTime(fulldaytime); - if (fulldaytime > 600){ - odyh.classList.remove("text-black"); - odyh.classList.add("text-red"); - document.getElementById("btn_saveday").disabled=true; - }else { - odyh.classList.remove("text-red"); - odyh.classList.add("text-black"); - if(oirupt.classList.contains("text-black")){ - document.getElementById("btn_saveday").disabled=false; - } - - } - }, - copy: function(){ - var sel = staffperiodweeks.tbl.getSelectedData(); - if (sel[0]){ - staffperiodweeks.copy_id = sel[0].id; - document.getElementById("spwpasteval").innerHTML = moment(sel[0]["daydate"]).lang("fr").format('DD.MM.YYYY'); - } - }, - paste: function(){ - var sel = staffperiodweeks.tbl.getSelectedData(); - console.log("clean row with: " + staffperiodweeks.copy_id); - console.log(sel); - if (sel.length > 0){ - asel = []; - for (s=0;s { staffperiodweeks.gettbldata()}); - } - }, - clean: function(){ - var sel = staffperiodweeks.tbl.getSelectedData(); - console.log("clean row"); - console.log(sel); - if (sel.length > 0){ - asel = []; - for (s=0;s {staffperiodweeks.gettbldata() }); - } - }, - replacedlg: function(){ - var sel = staffperiodweeks.tbl.getSelectedData(); - - if (sel.length > 0){ - document.getElementById('dlg_replacestaffdayworkplan').style.display='block'; - } - }, - getwptemplates: function(){ - postData("db.cgi",{"get":"workplanlist","schemata":schemata}).then(data => {form.fillselectlist(staffperiodweeks.choices["id_workplan"],data.result.sqldata,'id','dspworkplandetail');}); - }, - replacedays: function(){ - let sel = staffperiodweeks.tbl.getSelectedData(); - let id_workplan = staffperiodweeks.choices["id_workplan"].selected(); - let keepvac = document.getElementById("keepvacancy").checked; - let keeprec = document.getElementById("keeprecuperation").checked; - asel = []; - for (s=0;s { - document.getElementById('dlg_replacestaffdayworkplan').style.display='none'; - staffperiodweeks.gettbldata(); - }); - } -}; - -var nullFormatter = function(cell, formatterParams){ - cell.getElement().style.backgroundColor="grey";return ""; -}; \ No newline at end of file diff --git a/website/appphp/tmplphp/module/periods/tlb_staffperiodweeks.php b/website/appphp/tmplphp/module/periods/tlb_staffperiodweeks.php deleted file mode 100644 index 4f34218a..00000000 --- a/website/appphp/tmplphp/module/periods/tlb_staffperiodweeks.php +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/website/appphp/tmplphp/module/profile.php b/website/appphp/tmplphp/module/profile.php deleted file mode 100644 index 4057b23e..00000000 --- a/website/appphp/tmplphp/module/profile.php +++ /dev/null @@ -1,54 +0,0 @@ - -[% PROCESS macro/fields.tt %] -[% quserdata = dksdb.query("select * from users where id='${session.id}';") %] -[% user = quserdata.get_all() %] -
    -
    - retour -
    Profile
    -
    -
    -
    -
    -
    -
    -
    - données d'accès - -
    -
    - -
    - - - -
    -
    - -
     
    - - - -
    -
    -
    - - -
    -
    -
    -
    -
    - -
    - - - -
    - - [% #INCLUDE block/dlgcropper.tt %] - [% INCLUDE module/profile/dlgpassword.tt %] - [% INCLUDE module/profile/dlgusername.tt %] - - - diff --git a/website/appphp/tmplphp/module/profile/dlgpassword.php b/website/appphp/tmplphp/module/profile/dlgpassword.php deleted file mode 100644 index ba7690f2..00000000 --- a/website/appphp/tmplphp/module/profile/dlgpassword.php +++ /dev/null @@ -1,81 +0,0 @@ - - \ No newline at end of file diff --git a/website/appphp/tmplphp/module/profile/dlgusername.php b/website/appphp/tmplphp/module/profile/dlgusername.php deleted file mode 100644 index f2472a33..00000000 --- a/website/appphp/tmplphp/module/profile/dlgusername.php +++ /dev/null @@ -1,100 +0,0 @@ - - - \ No newline at end of file diff --git a/website/appphp/tmplphp/module/profile/profile.js b/website/appphp/tmplphp/module/profile/profile.js deleted file mode 100644 index abd9cada..00000000 --- a/website/appphp/tmplphp/module/profile/profile.js +++ /dev/null @@ -1,20 +0,0 @@ -var iduser="[% session.id %]"; -var schemata = "public"; -function initpage(){ - loaduserdata(iduser); -} - -function loaduserdata(id){ - req.reqdata("db.cgi",{"get":"usersdata","filter":"id="+id},fillformaccount); -} - -function fillformaccount(data){ - if (data && data.sqldata){ - if (data && data.sqldata){ - form.fillformbydataclass2("users",{},data.sqldata[0]); - } - } -} - - - diff --git a/website/appphp/tmplphp/module/staff.php b/website/appphp/tmplphp/module/staff.php deleted file mode 100644 index 6f522e96..00000000 --- a/website/appphp/tmplphp/module/staff.php +++ /dev/null @@ -1,58 +0,0 @@ -[% PROCESS macro/fields.tt %] -
    -
    - retour -
    Salariés
    - - -
    - - - -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    - [% INCLUDE block/pnl_nodata.tt %] - [% INCLUDE module/staff/pnl_basedata.tt %] - - -
    - -
    -
    - -[% INCLUDE module/staff/dlg_staffcontract.tt %] -[% INCLUDE block/dlgstaffpayedhours.tt %] -[% INCLUDE block/dlgstaffperioddays.tt %] -[% INCLUDE block/dlgdeleterow.tt %] -[% INCLUDE block/dlgdataload.tt %] -[% INCLUDE block/dlg_replacestaffdayworkplan.tt %] -[% INCLUDE block/dlginfo.tt %] - - - - \ No newline at end of file diff --git a/website/appphp/tmplphp/module/staff/dlg_staffcontract.php b/website/appphp/tmplphp/module/staff/dlg_staffcontract.php deleted file mode 100644 index 617f2924..00000000 --- a/website/appphp/tmplphp/module/staff/dlg_staffcontract.php +++ /dev/null @@ -1,37 +0,0 @@ - \ No newline at end of file diff --git a/website/appphp/tmplphp/module/staff/pnl_basedata.php b/website/appphp/tmplphp/module/staff/pnl_basedata.php deleted file mode 100644 index 47507956..00000000 --- a/website/appphp/tmplphp/module/staff/pnl_basedata.php +++ /dev/null @@ -1,106 +0,0 @@ - \ No newline at end of file diff --git a/website/appphp/tmplphp/module/staff/staff.js b/website/appphp/tmplphp/module/staff/staff.js deleted file mode 100644 index 7114a8e6..00000000 --- a/website/appphp/tmplphp/module/staff/staff.js +++ /dev/null @@ -1,152 +0,0 @@ -// let schemata = null; -//let currentview = null; -function initpage(){ - schemata = app.getCurrentSchemata(); - staff.inittable(); - staffcontract.inittable(); - staffperiods.inittable(); - staffperiodweeks.inittable(); - // app.viewpanel("tbl_staff"); -} - -let staff ={ - tbl: null, - tblperiodbase: null, - current_user: null, - current_id: null, - current_view: 'basedata', - //name: "staff", - choices:{"id_staffgroup":null}, - initform: function(){ - flatpickr("#birthdate",{altInput: true, - altFormat: "d.m.Y", - dateFormat: "Y-m-d", - "locale": "fr", - }); - staff.choices["id_staffgroup"] = new SlimSelect({ - select: "#id_staffgroup", - showSearch: false, - afterClose: function(){record.savefield(document.getElementById('id_staffgroup'),staff.gettbldata);} - }); - staff.getstaffgroups(); - }, - inittable: function(){ - staff.initform(); - staff.tbl = new Tabulator("#tbl_staff", { - // headerFilterPlaceholder: "filter...", - height: "calc(100vh - 56px)", - layout: "fitDataStretch", - selectable: 1, - groupBy:["groupname"], - groupStartOpen:[true], - groupHeader:[function(value, count, data){ return value;}], - rowClick:function(e, row){ - staff.edit(); - }, - rowContext:function(e, row){ e.preventDefault(); }, - columns: [ - {title: "Départment", field: "groupname", visible: false }, - {title: "Nom", field: "surname" ,resizable:false }, - {title: "Prénom",field: "prename",resizable:false}, - ] - }); - staff.gettbldata(); - - }, - gettbldata: function(id){ - let selectedData = staff.tbl.getSelectedData(); - postData("db.cgi",{ "get": "stafflist","schemata":schemata}).then(data => { - //console.log("special after post request!",data); - staff.tbl.setData(data.result.sqldata).then(function(){ - if(selectedData[0]){staff.tbl.selectRow(selectedData[0]['id']);} - }); - }); - }, - - add: function(){ - form.cleanform2("staff",staff.choices); - staffcontract.tbl.clearData(); - postData("db.cgi",{"schemata":schemata,"fn":"add_staff"}).then(data => { - staff.current_view = 'basedata'; - staff.gettbldata(); - staff.setview(staff.current_view); - }); - }, - edit: function(){ - //document.getElementById("section_staffcontract").style.display = 'block'; - let udata = staff.tbl.getSelectedData(); - if (udata[0]) { - staff.current_id = udata[0].id; - form.cleanform2("staff",staff.choices); - postData("db.cgi",{ "get": "staffdata","schemata":schemata, "filter":"id='" + udata[0].id + "'"}).then(data => { - form.fillformbydataclass2("staff",staff.choices,data.result.sqldata[0],'form.savefield(this,null);'); - staffcontract.gettbldata(); - staffperiods.gettbldata(); - staff.setview(staff.current_view); - }); - } else { - app.viewpanel('nodata'); - } - }, - remove: function(){ - let udata = staff.tbl.getSelectedData(); - if (udata[0]) { - var flds = {}; - flds["fn"] = "del_staff"; - flds["params"] = {0:udata[0].id}; - flds["schemata"] = schemata; - showinfodlg("Supprimer","Êtes vous sûre de supprimer l'employé(e) sélectionnée?",staff.removedata,flds,"Supprimer","Annuler"); - - } - }, - removedata: function(data){ - postData("db.cgi",data).then(remdata => { - let x = staff.tbl.getSelectedData(); - if (x[0]){ - staff.tbl.deselectRow(x["id"]); - } - staff.gettbldata(); - }).catch(e => console.log(e)); - }, - viewtable: function(){ - staff.gettbldata(); - //app.viewpanel('tbl_staff'); - return false; - }, - save: function(){ - let fdata = form.getformcontent("staff"); - fdata["ident"] = "id"; - form.saveformdata(fdata,staff.aftersavecallback,schemata); - return false; - }, - aftersavecallback: function(data){ - console.log(data); - if (data && data.id){ - staff.current_id=data.id; - document.getElementById("section_staffcontract").style.display = 'block'; - } - return false; - }, - getstaffgroups: function(){ - postData("db.cgi",{"get":"staffgroupslist","schemata":schemata}).then(data => { - //console.log("special after post request!",data); - form.fillselectlist(staff.choices["id_staffgroup"],data.result.sqldata,'id','groupname'); - }); - }, - fillstaffgroups: function(data){ - form.fillselectlist(staff.choices["id_staffgroup"],data.sqldata,'id','groupname'); - }, - setview: function(viewname){ - let sel = staff.tbl.getSelectedData(); - if (sel[0]){ - staff.current_view = viewname; - if (viewname == 'periods'){ - staffperiods.gettbldata(); - } - if (viewname == 'basedata'){ - //staff.edit(); - } - app.viewpanel(viewname); - } - } -} diff --git a/website/appphp/tmplphp/module/staff/staffcontract.js b/website/appphp/tmplphp/module/staff/staffcontract.js deleted file mode 100644 index 76b76211..00000000 --- a/website/appphp/tmplphp/module/staff/staffcontract.js +++ /dev/null @@ -1,170 +0,0 @@ -let weekdays = [{label:"lundi",value:"1"},{label:"mardi",value:"2"},{label:"mercredi",value:"3"},{label:"jeudi",value:"4"},{label:"vendredi",value:"5"},{label:"samedi",value:"6"},{label:"dimanche",value:"7"}]; -let staffcontract = { - name: "staffcontract", - tbl: null, - choices:{"id_workplan":null}, - maxfreedays: 1, - initform: function(){ - staffcontract.choices["id_contractworkplan"] = new SlimSelect({ - select: "#id_contractworkplan", - showSearch: false - }); - flatpickr("#startdate",{altInput: true, - altFormat: "d.m.Y", - dateFormat: "Y-m-d", - "locale": "fr", - weekNumbers: true - }); - flatpickr("#enddate",{altInput: true, - altFormat: "d.m.Y", - dateFormat: "Y-m-d", - "locale": "fr", - weekNumbers: true - }); - staffcontract.getwptemplates(); - // staffcontract.choices["weekdays"] = new SlimSelect({ - // select: "#weekdays", - // showSearch: false, - // onChange: function () { - // staffcontract.setmaxfreedays(); - // } - // }); - // let numweekdays = [{value:"1",label:"1"},{value:"2",label:"2"},{value:"3",label:"3"},{value:"4",label:"4"},{value:"5",label:"5"},{value:"6",label:"6"},{value:"7",label:"7"}]; - // form.fillselectlist(staffcontract.choices["weekdays"],numweekdays,"value","label"); - - - // staffcontract.choices["defaultfreedays"] = new SlimSelect({ - // select: "#defaultfreedays", - // showSearch: false - // }); - - // form.fillselectlist(staffcontract.choices["defaultfreedays"],weekdays,"value","label"); - - - //document.getElementById("weekdays").addEventListener('change', function(event){}); - }, - inittable: function(){ - staffcontract.initform(); - - staffcontract.tbl = new Tabulator("#tbl_staffcontract", { - headerFilterPlaceholder: "filter...", - height: "calc(100vh - 380px)", - layout: "fitDataFill", - selectable: 1, - rowContext:function(e, row){ e.preventDefault();}, - columns: [ - {title: "début",field: "startdate",headerSort: false,formatter:"datetime", width: 100,formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}}, - {title: "fin", field: "enddate",headerSort: false,formatter:"datetime", width: 100,formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}}, - {title: "h/semaine",field: "weekhours",align: "right",headerSort: false}, - {title: "j/semaine",field: "weekdays",align: "right", headerSort: false,formatter:"money",formatterParams:{decimal:",",thousand:".",symbol:" ",symbolAfter:"",precision:0}}, - {title: "j/semaine libre",field: "defaultfreedays",headerSort: false}, - {title: "POT(modèle)",field: "workplan",headerSort: false} - ] -}); - - }, - gettbldata: function(){ - postData("db.cgi", { "get": "staffcontractlist","schemata":schemata,"filter":"id_staff='"+ staff.current_id +"'"}).then(data => { - if (data && data.result.sqldata) { - console.log("staffcontract datasize",data.result.sqldata.length); - if (data.result.sqldata.length <= 1){ - document.getElementById("btn_delete_staffcontract").style.display= 'none'; - }else { - document.getElementById("btn_delete_staffcontract").style.display= 'block'; - } - staffcontract.tbl.setData(data.result.sqldata); - } - }); - }, - // loadtbldata: function(data){ - // if (data && data.sqldata) { - // if (data.sqldata.size <= 1){ - // document.getElementById("btn_delete_staffcontract").style.display= 'none'; - // }else { - // document.getElementById("btn_delete_staffcontract").style.display= 'block'; - // } - // staffcontract.tbl.setData(data.sqldata); - // } - // }, - add: function(){ - document.getElementById("contractmsg").innerHTML=""; - form.cleanform2("staffcontract",staffcontract.choices); - app.viewdialog("staffcontract"); - document.getElementById("id_staff").value=staff.current_id; - }, - edit: function(){ - document.getElementById("contractmsg").innerHTML="" - let udata = staffcontract.tbl.getSelectedData(); - if (udata[0]) { - form.cleanform2("staffcontract",{}); - postData("db.cgi",{ "get": "staffcontractdata","schemata":schemata, "filter":"id='" + udata[0].id + "'"}).then(data => { - form.fillformbydataclass2("staffcontract",staffcontract.choices,data.result.sqldata[0]); - app.viewdialog("staffcontract"); - }); - } - return false; - }, - fillform: function(data){ - if (data && data.sqldata){ - - } - return false; - }, - remove: function(){ - let udata = staffcontract.tbl.getSelectedData(); - if (udata[0]) { - var flds = {}; - flds["fn"] = "del_staffcontract"; - flds["params"] = {0:udata[0].id}; - flds["schemata"] = schemata; - showinfodlg("Supprimer","Êtes vous sûre de supprimer les données sélectionnées?",staffcontract.removedata,flds,"Supprimer","Annuler"); - //showdeletedlg("staffcontract",uid,"Êtes vous sûre de supprimer les données sélectionnées?",staffcontract.afterdeletecallback,schemata); - } - }, - removedata: function(data){ - //console.log("Data to remove",data); - postData("db.cgi",data).then(remdata => { - console.log("removed data return",remdata); - staffcontract.gettbldata(); - }).catch(e => console.log(e)); - }, - save: function(){ - let flds=form.getformcontent('staffcontract',null); - flds["ident_staffcontract_id"] = flds["ident_staffcontract_id_staffcontract"]; - delete flds["ident_staffcontract_id_staffcontract"]; - delete flds["null"]; - console.log(flds); - let bok = 0; - for (let f in flds){if ((f != "staffcontract_enddate") && ( f != "ident_staffcontract_id")){if (flds[f] == ""){bok=1;}}} - // if (parseInt(flds["staffcontract_weekdays"]) + flds["staffcontract_defaultfreedays"].length != 7){ - // document.getElementById("contractmsg").innerHTML= '
    jours de semaine libre incomplet (jours de travail + jours libre ≠ 7)!
    '; - // return false; - // } - if (bok != 0){ - if (bok == 1){ document.getElementById("contractmsg").innerHTML= '
    Tous les champs sauf "date fin" sans requis!
    '; } - // if (bok == 2){ document.getElementById("contractmsg").innerHTML= '
    jours de travail + jours libre ≠ 7!
    '; } - return false; - } - flds["fn"] ="saveform"; - flds["schemata"]=schemata; - //flds["id_staff"]=staff.current_id; - //flds["ident"] ="id"; - console.log(flds); - postData("db.cgi",flds).then(data => { - staffcontract.gettbldata(); - form.formsaved({}); - document.getElementById('dlg_staffcontract').style.display='none'; - }); - - return false; - }, - afterdeletecallback: function(){ - staffcontract.gettbldata(); - }, - getwptemplates: function(){ - postData("db.cgi",{"get":"workplanlist","schemata":schemata}).then(data => { - form.fillselectlist(staffcontract.choices["id_contractworkplan"],data.result.sqldata,'id','dspworkplandetail'); - }); - - } -} \ No newline at end of file diff --git a/website/appphp/tmplphp/module/staff/staffperiods.js b/website/appphp/tmplphp/module/staff/staffperiods.js deleted file mode 100644 index c8f8b7c0..00000000 --- a/website/appphp/tmplphp/module/staff/staffperiods.js +++ /dev/null @@ -1,74 +0,0 @@ -let staffperiods = { - name: "staffperiods", - tbl: null, - initform: function(){ - - }, - inittable: function(){ - staffperiods.tbl = new Tabulator("#tbl_staffperiods", { - // headerFilterPlaceholder: "filter...", - height: "calc(100vh - 112px)", - layout: "fitDataFill", - selectable: true, - selectableRangeMode:"click", - // persistence:{ - // sort: true, //persist column sorting - // filter: true, //persist filter sorting - // group: true, //persist row grouping - // columns: true, //persist columns - // }, - - rowContext:function(e, row){e.preventDefault();}, - // groupBy:["groupname"], - // groupStartOpen:[true], - // groupClosedShowCalcs:true, - // groupHeader:[ - // function(value, count, data){ - // return value; - // }, - // ], - columns: [ - - {title: "Début",field: "startdate",headerSort:"datetime",formatter:"datetime",formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""} }, - {title: "Fin",field: "enddate",headerSort:"datetime",formatter:"datetime",formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""} }, - // {title: "Département",field:"groupname" , visible: false}, - // {title: "Prénom", field:"prename",headerSort: false}, - // {title: "Nom", field:"surname",headerSort: false}, - {title: "Contrat", field:"contracthours",headerSort: false}, - {title: "Travail", field:"workhours",headerSort: false}, - {title: "Récup", field:"recuperationhours",headerSort: false}, - {title: "congé", field:"vacancyhours",headerSort: false}, - {title: "Total", field:"totalhours",headerSort: false}, - {title: "à récup.", field:"hoursdiff",headerSort: false,bottomCalc:staffperiods.periodrestsum},// - {title: "payés", field:"payedhours",headerSort: false} - ] - }); - }, - gettbldata: function(){ - postData("db.cgi",{ "get": "staffreportperiodlist","schemata":schemata,"filter":"id_staff='"+ staff.current_id +"'"}).then(data => { - staffperiods.tbl.setData(data.result.sqldata); - }); - }, - periodrestsum: function(values, data, calcParams){ - let mts = 0; - for (let m in values){ - mts += timecalc.IntervalToMinutes(values[m]); - } - return timecalc.MinutesToInterval(mts); - }, - edit: function(){ - let sel = staffperiods.tbl.getSelectedData(); - if (sel[0]){ - staffperiodweeks.loadplan(staffperiods.tbl); - } - }, - generatereport: function(){ - let udata = staffperiods.tbl.getSelectedData(); - let sdata = staff.tbl.getSelectedData(); - - let repdata = {"schemata":schemata,"id_reportperiod":"'" + udata[0].id_reportperiod + "'"}; - if (udata[0]) { - report.generate('pot/pot_staffmemberperiod',"periode_" + moment(udata[0].startdate).format("YYYYMMDD") + "-" + moment(udata[0].enddate).format("YYYYMMDD"),repdata); - } - }, -} \ No newline at end of file diff --git a/website/appphp/tmplphp/module/timetrackers/index.js b/website/appphp/tmplphp/module/timetrackers/index.js deleted file mode 100644 index 724bc0c9..00000000 --- a/website/appphp/tmplphp/module/timetrackers/index.js +++ /dev/null @@ -1,25 +0,0 @@ -var tbl_periodes = null; -var tbl_planning = null; -var schemata = null; -function initpage() { - //console.log("Current Schema:" + schemata); - inittable_periodes(); - inittable_planning(); -} - -function inittable_periodes(){ - tbl_periodes = null; - gettbldata_periodes(); -} - -function inittable_planning(){ - tb_planning = null; -} - -function gettbldata_periodes(){ - -} - -function gettbldata_planning(){ - -} \ No newline at end of file diff --git a/website/appphp/tmplphp/module/timetrackers/index.tt b/website/appphp/tmplphp/module/timetrackers/index.tt deleted file mode 100644 index 15a6efe3..00000000 --- a/website/appphp/tmplphp/module/timetrackers/index.tt +++ /dev/null @@ -1,15 +0,0 @@ -
    -
    - - - - - -
    -
    -
    -
    -
    \ No newline at end of file diff --git a/website/appphp/tmplphp/module/workplans.php b/website/appphp/tmplphp/module/workplans.php deleted file mode 100644 index 1d30cdcb..00000000 --- a/website/appphp/tmplphp/module/workplans.php +++ /dev/null @@ -1,43 +0,0 @@ -[% PROCESS macro/fields.tt %] - -
    -
    - retour -
    Modèles hebdomaires
    -
    - - - - -
    - -
    -
    -
    -
    -
    -
    -
    -
    - [% INCLUDE block/pnl_nodata.tt %] - - -
    -
    -
    -[% INCLUDE module/workplans/dlg_workplanday.tt %] -[% INCLUDE module/workplans/dlg_workplan.tt %] - -[% INCLUDE block/dlgdeleterow.tt %] -[% INCLUDE block/dlgmessage.tt %] - - diff --git a/website/appphp/tmplphp/module/workplans/dlg_workplan.php b/website/appphp/tmplphp/module/workplans/dlg_workplan.php deleted file mode 100644 index f55c12b7..00000000 --- a/website/appphp/tmplphp/module/workplans/dlg_workplan.php +++ /dev/null @@ -1,33 +0,0 @@ - - - \ No newline at end of file diff --git a/website/appphp/tmplphp/module/workplans/dlg_workplanday.php b/website/appphp/tmplphp/module/workplans/dlg_workplanday.php deleted file mode 100644 index 4e3b0cbe..00000000 --- a/website/appphp/tmplphp/module/workplans/dlg_workplanday.php +++ /dev/null @@ -1,131 +0,0 @@ - - - \ No newline at end of file diff --git a/website/appphp/tmplphp/module/workplans/workplans.js b/website/appphp/tmplphp/module/workplans/workplans.js deleted file mode 100644 index 5eff3290..00000000 --- a/website/appphp/tmplphp/module/workplans/workplans.js +++ /dev/null @@ -1,248 +0,0 @@ - -function initpage(){ - workplans.inittable(); -} - - -weekdays= ["","lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"]; -let workplans ={ - choices:{}, - tbl: null, - tblfilter: null, - copy_day_id: null, - current_view: 'workplans', - initform: function(){ - let tfields = document.getElementsByClassName("timefield"); - for (let i=0;i", - crossElement:"", }}, - ] - }); - workplans.tbl = new Tabulator("#tbl_workplandata", { - headerFilterPlaceholder: "filter...", - height: "calc(100vh - 111px)", - layout: "fitDataFill", - selectable: 1, - rowContext:function(e, row){e.preventDefault(); }, - groupBy:["weeknum"], - groupStartOpen:[true], - groupClosedShowCalcs:true, - groupHeader:[ - function(value, count, data){ - return "Semaine " + value; - }, - ], - columns: [ - { title: "Jour",field: "weekday",formatter:wdayFormatter,headerSort: false }, - { title: "début 1",field: "start1",headerSort: false }, - { title: "fin 1",field: "end1",headerSort: false }, - { title: "début 2",field: "start2",headerSort: false }, - { title: "fin 2",field: "end2",headerSort: false }, - { title: "pause",field: "pause",headerSort: false }, - { title: "coupure",field: "interruption",headerSort: false}, - { title: "total",field: "dayhours",headerSort: false,bottomCalc:workplans.weekhourssum }, - ] - }); - workplans.gettblfilterdata(); - workplans.initform(); - }, - gettblfilterdata: function(){ - postData("db.cgi", {"get": "workplanlist" ,"schemata":schemata}).then(data => { - workplans.tblfilter.setData(data.result.sqldata); - }); - }, - gettbldata: function(wkid){ - let wpsel = workplans.tblfilter.getSelectedData(); - if (wpsel[0]){ - postData("db.cgi", {"get": "workplandayslist" ,"filter":" id_workplan='" + wpsel[0].id + "'","schemata":schemata}).then(data => { - workplans.tbl.setData(data.result.sqldata); - }); - } - }, - viewplan: function(){ - - workplans.gettbldata(); - workplans.setview("workplans"); - }, - setview: function(viewname){ - workplans.current_view = viewname; - app.viewpanel(viewname); - }, - edit: function() { - form.cleanform("workplandays"); - let udata = workplans.tbl.getSelectedData(); - if (udata[0]) { - let uid = udata[0].id; - document.getElementById("display_date").innerHTML=weekdays[udata[0].weekday]; - postData("db.cgi", {"get": "workplandaysdata","filter":"id='" + uid + "'","schemata":schemata}).then(data => { - form.fillformbydataclass2("workplandays",{},data.result.sqldata[0]); - setTimeout(workplans.checktime("start1"),1000); - app.viewdialog("workplanday"); - }); - } - - }, - rename: function() { - form.cleanform("workplan"); - let udata = workplans.tblfilter.getSelectedData(); - console.log(udata); - if (udata[0]) { - postData("db.cgi", { "get": "workplanlist","filter":"id='" + udata[0].id + "'","schemata":schemata}).then(data => { - data.result.sqldata[0]["id_workplan"] = data.result.sqldata[0]["id"]; - form.fillformbydataclass2("workplans",{},data.result.sqldata[0]); - app.viewdialog("workplans"); - }); - } - }, - add: function() { - form.cleanform('workplans'); - app.viewdialog('workplans'); - }, - duplicate: function(){ - let sel = workplans.tblfilter.getSelectedData(); - if (sel[0]){ - postData("db.cgi",{"fn":"duplicate_workplan","schemata":schemata,"params":{0:sel[0].id}}).then(data => {workplans.gettblfilterdata()}); - } - }, - setcopyday: function(){ - let cdata = workplans.tbl.getSelectedData(); - if (cdata[0]){ - document.getElementById("pasteday").innerHTML = ' ' +weekdays[cdata[0].weekday]; - workplans.copy_day_id=cdata[0].id; - } - }, - pasteday: function(){ - let cdata = workplans.tbl.getSelectedData(); - if (cdata[0] && workplans.copy_day_id &&cdata[0].id != workplans.copy_day_id){ - postData("db.cgi",{"fn":"workplan_replaceday","schemata":schemata,"params":{0:workplans.copy_day_id,1:cdata[0].id}}).then(data => {workplans.gettbldata()}); - } - }, - remove: function() { - - let udata = workplans.tbl.getSelectedData(); - if (udata[0].isdefault){ - showmessagedlg("Info","Le plan Standard ne prut pas être supprimé!"); - return false; - } - if (udata[0].staffcount > 0){ - showmessagedlg("Info","Le plan ne peut pas être supprimé dès qu'il est utilisé par le personnel"); - return false; - } - if (udata[0]) { - showdeletedlg("workplans",udata[0].id,"êtes vous sûre de supprimer le plan de travail '" + udata.workplan + "'?",workplans.gettbldata,schemata); - } - }, - weekhourssum: function(values, data, calcParams){ - let mts = 0; - for (let m in values){ - mts += timecalc.IntervalToMinutes(values[m]); - } - return timecalc.MinutesToInterval(mts); - }, - - save: function(){ - let wpdata = form.getformcontent("workplandays"); - let wpdatanew = {}; - for (let w in wpdata){ - if ((!w.endsWith("dayhours")) && (!w.endsWith("interruptionhours"))){ - wpdatanew[w] = wpdata[w]; - } - } - wpdatanew["fn"] ="saveform"; - wpdatanew["schemata"]=schemata; - delete wpdatanew["null"]; - postData("db.cgi",wpdatanew).then(data => { - document.getElementById('dlg_workplanday').style.display='none'; - workplans.gettbldata(); - }); - return false; - }, - - saveworkplan: function(){ - let wpdata = form.getformcontent("workplans"); - - wpdata["ident_workplans_id"] = wpdata["ident_workplans_id_workplan"] ; - delete wpdata["ident_workplans_id_workplan"]; - console.log(wpdata); - if (wpdata["ident_workplans_id"] == ""){ - postData("db.cgi",{"fn":"add_workplan","params":{0:wpdata["workplans_workplan"]},"schemata":schemata}).then(data => { - document.getElementById('dlg_workplans').style.display='none'; - workplans.gettblfilterdata(); - }); - } else { - delete wpdata['null']; - wpdata["fn"] = 'saveform'; - wpdata['schemata'] = schemata; - postData("db.cgi",wpdata).then(data => { - document.getElementById('dlg_workplans').style.display='none'; - workplans.gettblfilterdata(); - }); - } - - return false; - }, - afterworkplansave: function(){ - - return false; - }, - checktime: function(id){ - let mt1 = 0; - let mt2 = 0; - let mtp = 0; - let irupt = 0; - console.log("checktime"); - if ((document.getElementById("end1").value != "") && (document.getElementById("start1").value != "")){ - let s1 = timecalc.TimeToMinutes(document.getElementById("start1").value); - let e1 = timecalc.TimeToMinutes(document.getElementById("end1").value); - if (e1 < s1) {e1 = e1 + 1440;} - mt1 = e1-s1; - } - if ((document.getElementById("end2").value != "") && (document.getElementById("start2").value != "")){ - let s2 = timecalc.TimeToMinutes(document.getElementById("start2").value); - let e2 = timecalc.TimeToMinutes(document.getElementById("end2").value); - if (e2 < s2) {e2 = e2 + 1440;} - mt2 = e2-s2; - } - if (document.getElementById("pause").value != ""){ - mtp = timecalc.TimeToMinutes(document.getElementById("pause").value); - } - if ((document.getElementById("end1").value != "") && (document.getElementById("start2").value != "")){ - irupt = timecalc.TimeToMinutes(document.getElementById("start2").value)-timecalc.TimeToMinutes(document.getElementById("end1").value); - document.getElementById("interruptionhours").value= timecalc.MinutesToTime(irupt); - }else { - document.getElementById("interruptionhours").value=""; - } - console.log("dayhours: " + timecalc.MinutesToTime(mt1+mt2-mtp)); - document.getElementById("dayhours").value= timecalc.MinutesToTime(mt1+mt2-mtp); - //console.log("mt1: " + mt1+ "mt2:" + mt2 + "mtp:" + mtp + "irupt"+ irupt); - let totaltester = /\d+:\d\d/; - let valcheck= document.getElementById("dayhours").value; - if (valcheck && valcheck != ''){ - if ((valcheck == '00:00') || (!totaltester.test(valcheck))) { - document.getElementById("dayhours").value =""; - } - } - } -} -let wdayFormatter = function(cell, formatterParams){ - return weekdays[cell.getValue()]; -}; \ No newline at end of file -- 2.39.5