From 2e984e961b03f414732209ba4233e97934acd574 Mon Sep 17 00:00:00 2001 From: Kilian Saffran Date: Mon, 26 Oct 2020 07:52:38 +0100 Subject: [PATCH] v20201025 --- .gitignore | 2 + .vscode/settings.json | 3 + app/.htaccess | 9 + app/app.cgi | 159 + app/db.cgi | 109 + app/file.cgi | 164 + app/index.cgi | 186 + app/lib/dksconfig.pm | 32 + app/lib/dksdb.pm | 409 + app/lib/dkssavefile.pm | 49 + app/lib/parsexlsx.pm | 60 + app/lib/sendemail.pm | 130 + app/lib/session.pm | 237 + app/sendEmail | 2235 ++ app/static/css/fonts/fld.svg | 134 + app/static/css/fonts/fld.ttf | Bin 0 -> 30928 bytes app/static/css/fonts/fld.woff | Bin 0 -> 31008 bytes app/static/css/icons.css | 423 + app/static/css/theme.css | 1015 + app/static/css/theme.old.css | 939 + app/static/css/w3pro.css | 386 + app/static/img/bg1.jpg | Bin 0 -> 1084629 bytes app/static/img/dartsxx.jpg | Bin 0 -> 1129013 bytes .../img/favicon/android-icon-144x144.png | Bin 0 -> 11944 bytes .../img/favicon/android-icon-192x192.png | Bin 0 -> 15499 bytes app/static/img/favicon/android-icon-36x36.png | Bin 0 -> 2623 bytes app/static/img/favicon/android-icon-48x48.png | Bin 0 -> 3469 bytes app/static/img/favicon/android-icon-72x72.png | Bin 0 -> 5255 bytes app/static/img/favicon/android-icon-96x96.png | Bin 0 -> 7515 bytes app/static/img/favicon/apple-icon-114x114.png | Bin 0 -> 8902 bytes app/static/img/favicon/apple-icon-120x120.png | Bin 0 -> 9497 bytes app/static/img/favicon/apple-icon-144x144.png | Bin 0 -> 11944 bytes app/static/img/favicon/apple-icon-152x152.png | Bin 0 -> 12920 bytes app/static/img/favicon/apple-icon-180x180.png | Bin 0 -> 16115 bytes app/static/img/favicon/apple-icon-57x57.png | Bin 0 -> 4083 bytes app/static/img/favicon/apple-icon-60x60.png | Bin 0 -> 4380 bytes app/static/img/favicon/apple-icon-72x72.png | Bin 0 -> 5255 bytes app/static/img/favicon/apple-icon-76x76.png | Bin 0 -> 5624 bytes .../img/favicon/apple-icon-precomposed.png | Bin 0 -> 16073 bytes app/static/img/favicon/apple-icon.png | Bin 0 -> 16073 bytes app/static/img/favicon/browserconfig.xml | 2 + app/static/img/favicon/favicon-16x16.png | Bin 0 -> 1498 bytes app/static/img/favicon/favicon-32x32.png | Bin 0 -> 2299 bytes app/static/img/favicon/favicon-96x96.png | Bin 0 -> 7515 bytes app/static/img/favicon/favicon.ico | Bin 0 -> 1150 bytes app/static/img/favicon/manifest.json | 41 + app/static/img/favicon/ms-icon-144x144.png | Bin 0 -> 11944 bytes app/static/img/favicon/ms-icon-150x150.png | Bin 0 -> 12623 bytes app/static/img/favicon/ms-icon-310x310.png | Bin 0 -> 37381 bytes app/static/img/favicon/ms-icon-70x70.png | Bin 0 -> 5151 bytes app/static/img/fldicon.png | Bin 0 -> 33807 bytes app/static/img/fldicon.svg | 505 + app/static/img/hiclipart.com.png | Bin 0 -> 518309 bytes app/static/img/logo.png | Bin 0 -> 25811 bytes app/static/img/no-image-icon.png | Bin 0 -> 20003 bytes app/static/img/no-news-img.png | Bin 0 -> 17922 bytes app/static/img/toplogo.svg | 482 + app/static/js/app.js | 79 + app/static/js/fieldsave.js | 48 + app/static/js/form.js | 279 + app/static/js/formsave.js | 90 + app/static/js/module_global.js | 37 + app/static/js/record.js | 125 + app/static/js/request.js | 128 + app/static/vendors/flatpickr/flatpickr.css | 784 + app/static/vendors/flatpickr/flatpickr.js | 2596 ++ .../vendors/flatpickr/flatpickr.min.css | 13 + app/static/vendors/flatpickr/flatpickr.min.js | 2 + app/static/vendors/flatpickr/ie.css | 13 + app/static/vendors/flatpickr/index.d.ts | 4 + app/static/vendors/flatpickr/l10n/de.d.ts | 66 + app/static/vendors/flatpickr/l10n/de.js | 70 + .../vendors/flatpickr/l10n/default.d.ts | 3 + app/static/vendors/flatpickr/l10n/default.js | 83 + app/static/vendors/flatpickr/l10n/fr.d.ts | 66 + app/static/vendors/flatpickr/l10n/fr.js | 75 + app/static/vendors/flatpickr/l10n/lu.d.ts | 67 + app/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/confetti.css | 795 + app/static/vendors/flatpickr/themes/dark.css | 784 + app/static/vendors/flatpickr/themes/light.css | 798 + .../flatpickr/themes/material_blue.css | 795 + .../flatpickr/themes/material_green.css | 795 + .../flatpickr/themes/material_orange.css | 795 + .../vendors/flatpickr/themes/material_red.css | 795 + .../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 + app/static/vendors/flatpickr/typings.d.ts | 38 + app/static/vendors/flatpickr/utils/dates.d.ts | 17 + app/static/vendors/flatpickr/utils/dom.d.ts | 6 + .../vendors/flatpickr/utils/formatting.d.ts | 13 + app/static/vendors/flatpickr/utils/index.d.ts | 8 + .../vendors/flatpickr/utils/polyfills.d.ts | 0 .../vendors/moment/moment-with-locales.min.js | 1 + app/static/vendors/moment/moment.min.js | 1 + app/static/vendors/slimselect/slimselect.css | 393 + app/static/vendors/slimselect/slimselect.js | 1931 ++ .../vendors/slimselect/slimselect.min.css | 1 + .../vendors/slimselect/slimselect.min.js | 1 + app/static/vendors/slimselect/slimselect.scss | 391 + .../vendors/tabulator/css.old/tabulator.css | 995 + .../tabulator/css.old/tabulator.min.css | 3 + .../tabulator/css.old/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 + .../tabulator/js.old/modules/accessor.js | 93 + .../tabulator/js.old/modules/accessor.min.js | 2 + .../vendors/tabulator/js.old/modules/ajax.js | 465 + .../tabulator/js.old/modules/ajax.min.js | 2 + .../js.old/modules/calculation_colums.js | 495 + .../js.old/modules/calculation_colums.min.js | 2 + .../tabulator/js.old/modules/clipboard.js | 335 + .../tabulator/js.old/modules/clipboard.min.js | 2 + .../tabulator/js.old/modules/data_tree.js | 386 + .../tabulator/js.old/modules/data_tree.min.js | 2 + .../tabulator/js.old/modules/download.js | 949 + .../tabulator/js.old/modules/download.min.js | 2 + .../vendors/tabulator/js.old/modules/edit.js | 1917 ++ .../tabulator/js.old/modules/edit.min.js | 2 + .../tabulator/js.old/modules/export.js | 471 + .../tabulator/js.old/modules/export.min.js | 2 + .../tabulator/js.old/modules/filter.js | 766 + .../tabulator/js.old/modules/filter.min.js | 2 + .../tabulator/js.old/modules/format.js | 725 + .../tabulator/js.old/modules/format.min.js | 2 + .../js.old/modules/frozen_columns.js | 275 + .../js.old/modules/frozen_columns.min.js | 2 + .../tabulator/js.old/modules/frozen_rows.js | 98 + .../js.old/modules/frozen_rows.min.js | 2 + .../tabulator/js.old/modules/group_rows.js | 1072 + .../js.old/modules/group_rows.min.js | 2 + .../tabulator/js.old/modules/history.js | 141 + .../tabulator/js.old/modules/history.min.js | 2 + .../js.old/modules/html_table_import.js | 191 + .../js.old/modules/html_table_import.min.js | 2 + .../tabulator/js.old/modules/keybindings.js | 392 + .../js.old/modules/keybindings.min.js | 2 + .../vendors/tabulator/js.old/modules/menu.js | 161 + .../tabulator/js.old/modules/menu.min.js | 2 + .../js.old/modules/moveable_columns.js | 289 + .../js.old/modules/moveable_columns.min.js | 2 + .../tabulator/js.old/modules/moveable_rows.js | 580 + .../js.old/modules/moveable_rows.min.js | 2 + .../tabulator/js.old/modules/mutator.js | 116 + .../tabulator/js.old/modules/mutator.min.js | 2 + .../vendors/tabulator/js.old/modules/page.js | 693 + .../tabulator/js.old/modules/page.min.js | 2 + .../tabulator/js.old/modules/persistence.js | 411 + .../js.old/modules/persistence.min.js | 2 + .../vendors/tabulator/js.old/modules/print.js | 96 + .../tabulator/js.old/modules/print.min.js | 2 + .../tabulator/js.old/modules/reactive_data.js | 235 + .../js.old/modules/reactive_data.min.js | 2 + .../js.old/modules/resize_columns.js | 163 + .../js.old/modules/resize_columns.min.js | 2 + .../tabulator/js.old/modules/resize_rows.js | 98 + .../js.old/modules/resize_rows.min.js | 2 + .../tabulator/js.old/modules/resize_table.js | 107 + .../js.old/modules/resize_table.min.js | 2 + .../js.old/modules/responsive_layout.js | 301 + .../js.old/modules/responsive_layout.min.js | 2 + .../tabulator/js.old/modules/select_row.js | 417 + .../js.old/modules/select_row.min.js | 2 + .../vendors/tabulator/js.old/modules/sort.js | 566 + .../tabulator/js.old/modules/sort.min.js | 2 + .../tabulator/js.old/modules/validate.js | 217 + .../tabulator/js.old/modules/validate.min.js | 2 + .../vendors/tabulator/js.old/tabulator.js | 24238 +++++++++++++++ .../vendors/tabulator/js.old/tabulator.min.js | 12 + .../tabulator/js.old/tabulator_core.js | 8523 ++++++ .../tabulator/js.old/tabulator_core.min.js | 6 + .../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 + app/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 + app/static/vendors/tinymce/changelog.txt | 1467 + .../tinymce/js/tinymce/jquery.tinymce.min.js | 91 + .../vendors/tinymce/js/tinymce/langs/de.js | 389 + .../vendors/tinymce/js/tinymce/langs/fr_FR.js | 389 + .../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 0 -> 4624 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 0 -> 4624 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 + app/tmpl/block/cgu.tt | 216 + app/tmpl/block/dlgcropper.tt | 126 + app/tmpl/block/dlgpassword.tt | 77 + app/tmpl/block/dlguploadfile.tt | 93 + app/tmpl/block/dlgusername.tt | 90 + app/tmpl/block/head.tt | 30 + app/tmpl/block/snackbar.tt | 1 + app/tmpl/block/toolbars.tt | 9 + app/tmpl/file.tt | 3 + app/tmpl/index.tt | 57 + app/tmpl/lang/fr.tt | 8 + app/tmpl/login.tt | 76 + app/tmpl/macro/fields.tt | 118 + app/tmpl/module/championship/divisions.js | 35 + app/tmpl/module/championship/divisions.tt | 26 + app/tmpl/module/championship/games.js | 211 + app/tmpl/module/championship/games.tt | 33 + app/tmpl/module/championship/highscores.js | 227 + app/tmpl/module/championship/highscores.tt | 40 + app/tmpl/module/championship/index.js | 240 + app/tmpl/module/championship/index.tt | 66 + app/tmpl/module/championship/ranking.js | 188 + app/tmpl/module/championship/ranking.tt | 27 + app/tmpl/module/championship/seasons.js | 34 + app/tmpl/module/championship/seasons.tt | 25 + app/tmpl/module/championship/teams.js | 35 + app/tmpl/module/championship/teams.tt | 26 + app/tmpl/module/championship/toolbar.tt | 27 + app/tmpl/module/clubs/club.js | 201 + app/tmpl/module/clubs/club.tt | 109 + app/tmpl/module/clubs/clubmembers.js | 53 + app/tmpl/module/clubs/clubmembers.tt | 8 + app/tmpl/module/clubs/clubs.js | 3 + app/tmpl/module/clubs/clubs.tt | 8 + app/tmpl/module/clubs/cupreg.js | 6 + app/tmpl/module/clubs/cupreg.tt | 7 + app/tmpl/module/clubs/fldmembers.js | 52 + app/tmpl/module/clubs/fldmembers.tt | 8 + app/tmpl/module/clubs/seasonclubreg.js | 7 + app/tmpl/module/clubs/seasonclubreg.tt | 7 + app/tmpl/module/documents.tt | 57 + app/tmpl/module/documents/documents.js | 98 + app/tmpl/module/documents/index.js | 60 + app/tmpl/module/events.tt | 55 + app/tmpl/module/events/events.js | 229 + app/tmpl/module/events/vacancies.js | 204 + app/tmpl/module/forms.tt | 14 + app/tmpl/module/forms/forms.js | 50 + app/tmpl/module/index.tt | 60 + app/tmpl/module/index/index.js | 3 + app/tmpl/module/licenses/index.js | 3 + app/tmpl/module/licenses/index.tt | 33 + app/tmpl/module/licenses/licenserequests.js | 0 app/tmpl/module/licenses/licenserequests.tt | 7 + app/tmpl/module/licenses/licenses.js | 3 + app/tmpl/module/licenses/licenses.tt | 45 + app/tmpl/module/licenses/members.js | 119 + app/tmpl/module/licenses/members.tt | 74 + app/tmpl/module/licenses/newlicense.js | 58 + app/tmpl/module/licenses/newlicense.tt | 45 + app/tmpl/module/licenses/toolbar.tt | 17 + app/tmpl/module/licenses/transfer.js | 116 + app/tmpl/module/licenses/transfer.tt | 211 + app/tmpl/module/login/forgotpassword.tt | 20 + app/tmpl/module/login/login.tt | 26 + app/tmpl/module/login/message.tt | 12 + app/tmpl/module/login/register.tt | 50 + app/tmpl/module/login/validationcode.tt | 23 + .../module/medialibrary/dlgeditdocument.tt | 21 + app/tmpl/module/medialibrary/index.js | 108 + app/tmpl/module/medialibrary/index.tt | 15 + app/tmpl/module/members/club.tt | 0 app/tmpl/module/members/clubmembers.tt | 0 app/tmpl/module/members/index.js | 143 + app/tmpl/module/members/index.tt | 102 + app/tmpl/module/newsletter/index.js | 90 + app/tmpl/module/newsletter/index.tt | 34 + app/tmpl/module/newsletter/tbltoolbar.tt | 11 + app/tmpl/module/profile.tt | 79 + app/tmpl/module/profile/profile.js | 64 + app/tmpl/module/ranking/index.js | 128 + app/tmpl/module/ranking/index.tt | 8 + app/tmpl/module/ranking/tbltoolbar.tt | 21 + app/tmpl/module/users.tt | 82 + app/tmpl/module/users/users.js | 260 + app/tmpl/module/webnews.tt | 36 + app/tmpl/module/webnews/webnews.js | 224 + app/tmpl/module/websites.tt | 55 + app/tmpl/module/websites/websites.js | 122 + app/upload.cgi | 250 + test.pl | 29 + website/.htaccess | 7 + website/css/fonts/ledf.svg | 15 + website/css/fonts/ledf.ttf | Bin 0 -> 1616 bytes website/css/fonts/ledf.woff | Bin 0 -> 1692 bytes website/css/icons.css | 41 + website/css/theme.css | 990 + website/img/bg.png | Bin 0 -> 764223 bytes website/img/club.png | Bin 0 -> 9521 bytes website/img/favicon/android-icon-144x144.png | Bin 0 -> 11944 bytes website/img/favicon/android-icon-192x192.png | Bin 0 -> 15499 bytes website/img/favicon/android-icon-36x36.png | Bin 0 -> 2623 bytes website/img/favicon/android-icon-48x48.png | Bin 0 -> 3469 bytes website/img/favicon/android-icon-72x72.png | Bin 0 -> 5255 bytes website/img/favicon/android-icon-96x96.png | Bin 0 -> 7515 bytes website/img/favicon/apple-icon-114x114.png | Bin 0 -> 8902 bytes website/img/favicon/apple-icon-120x120.png | Bin 0 -> 9497 bytes website/img/favicon/apple-icon-144x144.png | Bin 0 -> 11944 bytes website/img/favicon/apple-icon-152x152.png | Bin 0 -> 12920 bytes website/img/favicon/apple-icon-180x180.png | Bin 0 -> 16115 bytes website/img/favicon/apple-icon-57x57.png | Bin 0 -> 4083 bytes website/img/favicon/apple-icon-60x60.png | Bin 0 -> 4380 bytes website/img/favicon/apple-icon-72x72.png | Bin 0 -> 5255 bytes website/img/favicon/apple-icon-76x76.png | Bin 0 -> 5624 bytes .../img/favicon/apple-icon-precomposed.png | Bin 0 -> 16073 bytes website/img/favicon/apple-icon.png | Bin 0 -> 16073 bytes website/img/favicon/browserconfig.xml | 2 + website/img/favicon/favicon-16x16.png | Bin 0 -> 1498 bytes website/img/favicon/favicon-32x32.png | Bin 0 -> 2299 bytes website/img/favicon/favicon-96x96.png | Bin 0 -> 7515 bytes website/img/favicon/favicon.ico | Bin 0 -> 1150 bytes website/img/favicon/manifest.json | 41 + website/img/favicon/ms-icon-144x144.png | Bin 0 -> 11944 bytes website/img/favicon/ms-icon-150x150.png | Bin 0 -> 12623 bytes website/img/favicon/ms-icon-310x310.png | Bin 0 -> 37381 bytes website/img/favicon/ms-icon-70x70.png | Bin 0 -> 5151 bytes website/img/logo.png | Bin 0 -> 25811 bytes website/img/news.png | Bin 0 -> 55153 bytes website/img/person.jpg | Bin 0 -> 7091 bytes website/index.cgi | 91 + website/index.php | 61 + website/js/site.js | 8 + website/lib/composer.json | 5 + website/lib/composer.lock | 65 + website/lib/config.php | 13 + website/lib/database.php | 68 + website/lib/dksconfig.pm | 43 + website/tmpl/commingsoon.tt | 76 + website/tmpl/index.html.mustache | 104 + website/tmpl/lists/labels.tt | 3 + website/tmpl/pages/calendrier.html.json | 4 + website/tmpl/pages/calendrier.html.mustache | 110 + website/tmpl/pages/championnat.html.mustache | 535 + website/tmpl/pages/clubs.html.mustache | 210 + website/tmpl/pages/coupe.html.mustache | 0 website/tmpl/pages/documents.html.mustache | 1 + website/tmpl/pages/error.html.mustache | 1 + website/tmpl/pages/federation.html.mustache | 119 + website/tmpl/pages/home.html.mustache | 40 + website/tmpl/pages/impressum.html.mustache | 1 + website/tmpl/pages/listederang.html.mustache | 443 + website/tmpl/pages/news.html.mustache | 11 + website/tmpl/pages/privacy.html.mustache | 55 + website/tmpl/pages/terms.html.mustache | 58 + 492 files changed, 143226 insertions(+) create mode 100644 .gitignore create mode 100644 .vscode/settings.json create mode 100644 app/.htaccess create mode 100644 app/app.cgi create mode 100644 app/db.cgi create mode 100644 app/file.cgi create mode 100644 app/index.cgi create mode 100644 app/lib/dksconfig.pm create mode 100644 app/lib/dksdb.pm create mode 100644 app/lib/dkssavefile.pm create mode 100644 app/lib/parsexlsx.pm create mode 100644 app/lib/sendemail.pm create mode 100644 app/lib/session.pm create mode 100644 app/sendEmail create mode 100644 app/static/css/fonts/fld.svg create mode 100644 app/static/css/fonts/fld.ttf create mode 100644 app/static/css/fonts/fld.woff create mode 100644 app/static/css/icons.css create mode 100644 app/static/css/theme.css create mode 100644 app/static/css/theme.old.css create mode 100644 app/static/css/w3pro.css create mode 100644 app/static/img/bg1.jpg create mode 100644 app/static/img/dartsxx.jpg create mode 100644 app/static/img/favicon/android-icon-144x144.png create mode 100644 app/static/img/favicon/android-icon-192x192.png create mode 100644 app/static/img/favicon/android-icon-36x36.png create mode 100644 app/static/img/favicon/android-icon-48x48.png create mode 100644 app/static/img/favicon/android-icon-72x72.png create mode 100644 app/static/img/favicon/android-icon-96x96.png create mode 100644 app/static/img/favicon/apple-icon-114x114.png create mode 100644 app/static/img/favicon/apple-icon-120x120.png create mode 100644 app/static/img/favicon/apple-icon-144x144.png create mode 100644 app/static/img/favicon/apple-icon-152x152.png create mode 100644 app/static/img/favicon/apple-icon-180x180.png create mode 100644 app/static/img/favicon/apple-icon-57x57.png create mode 100644 app/static/img/favicon/apple-icon-60x60.png create mode 100644 app/static/img/favicon/apple-icon-72x72.png create mode 100644 app/static/img/favicon/apple-icon-76x76.png create mode 100644 app/static/img/favicon/apple-icon-precomposed.png create mode 100644 app/static/img/favicon/apple-icon.png create mode 100644 app/static/img/favicon/browserconfig.xml create mode 100644 app/static/img/favicon/favicon-16x16.png create mode 100644 app/static/img/favicon/favicon-32x32.png create mode 100644 app/static/img/favicon/favicon-96x96.png create mode 100644 app/static/img/favicon/favicon.ico create mode 100644 app/static/img/favicon/manifest.json create mode 100644 app/static/img/favicon/ms-icon-144x144.png create mode 100644 app/static/img/favicon/ms-icon-150x150.png create mode 100644 app/static/img/favicon/ms-icon-310x310.png create mode 100644 app/static/img/favicon/ms-icon-70x70.png create mode 100644 app/static/img/fldicon.png create mode 100644 app/static/img/fldicon.svg create mode 100644 app/static/img/hiclipart.com.png create mode 100644 app/static/img/logo.png create mode 100644 app/static/img/no-image-icon.png create mode 100644 app/static/img/no-news-img.png create mode 100644 app/static/img/toplogo.svg create mode 100644 app/static/js/app.js create mode 100644 app/static/js/fieldsave.js create mode 100644 app/static/js/form.js create mode 100644 app/static/js/formsave.js create mode 100644 app/static/js/module_global.js create mode 100644 app/static/js/record.js create mode 100644 app/static/js/request.js create mode 100644 app/static/vendors/flatpickr/flatpickr.css create mode 100644 app/static/vendors/flatpickr/flatpickr.js create mode 100644 app/static/vendors/flatpickr/flatpickr.min.css create mode 100644 app/static/vendors/flatpickr/flatpickr.min.js create mode 100644 app/static/vendors/flatpickr/ie.css create mode 100644 app/static/vendors/flatpickr/index.d.ts create mode 100644 app/static/vendors/flatpickr/l10n/de.d.ts create mode 100644 app/static/vendors/flatpickr/l10n/de.js create mode 100644 app/static/vendors/flatpickr/l10n/default.d.ts create mode 100644 app/static/vendors/flatpickr/l10n/default.js create mode 100644 app/static/vendors/flatpickr/l10n/fr.d.ts create mode 100644 app/static/vendors/flatpickr/l10n/fr.js create mode 100644 app/static/vendors/flatpickr/l10n/lu.d.ts create mode 100644 app/static/vendors/flatpickr/l10n/lu.js create mode 100644 app/static/vendors/flatpickr/plugins/confirmDate/confirmDate.css create mode 100644 app/static/vendors/flatpickr/plugins/confirmDate/confirmDate.d.ts create mode 100644 app/static/vendors/flatpickr/plugins/confirmDate/confirmDate.js create mode 100644 app/static/vendors/flatpickr/plugins/labelPlugin/labelPlugin.d.ts create mode 100644 app/static/vendors/flatpickr/plugins/labelPlugin/labelPlugin.js create mode 100644 app/static/vendors/flatpickr/plugins/minMaxTimePlugin.d.ts create mode 100644 app/static/vendors/flatpickr/plugins/minMaxTimePlugin.js create mode 100644 app/static/vendors/flatpickr/plugins/monthSelect/index.d.ts create mode 100644 app/static/vendors/flatpickr/plugins/monthSelect/index.js create mode 100644 app/static/vendors/flatpickr/plugins/monthSelect/style.css create mode 100644 app/static/vendors/flatpickr/plugins/monthSelect/tests.spec.d.ts create mode 100644 app/static/vendors/flatpickr/plugins/rangePlugin.d.ts create mode 100644 app/static/vendors/flatpickr/plugins/rangePlugin.js create mode 100644 app/static/vendors/flatpickr/plugins/scrollPlugin.d.ts create mode 100644 app/static/vendors/flatpickr/plugins/scrollPlugin.js create mode 100644 app/static/vendors/flatpickr/plugins/weekSelect/weekSelect.d.ts create mode 100644 app/static/vendors/flatpickr/plugins/weekSelect/weekSelect.js create mode 100644 app/static/vendors/flatpickr/themes/airbnb.css create mode 100644 app/static/vendors/flatpickr/themes/confetti.css create mode 100644 app/static/vendors/flatpickr/themes/dark.css create mode 100644 app/static/vendors/flatpickr/themes/light.css create mode 100644 app/static/vendors/flatpickr/themes/material_blue.css create mode 100644 app/static/vendors/flatpickr/themes/material_green.css create mode 100644 app/static/vendors/flatpickr/themes/material_orange.css create mode 100644 app/static/vendors/flatpickr/themes/material_red.css create mode 100644 app/static/vendors/flatpickr/types/globals.d.ts create mode 100644 app/static/vendors/flatpickr/types/instance.d.ts create mode 100644 app/static/vendors/flatpickr/types/locale.d.ts create mode 100644 app/static/vendors/flatpickr/types/options.d.ts create mode 100644 app/static/vendors/flatpickr/typings.d.ts create mode 100644 app/static/vendors/flatpickr/utils/dates.d.ts create mode 100644 app/static/vendors/flatpickr/utils/dom.d.ts create mode 100644 app/static/vendors/flatpickr/utils/formatting.d.ts create mode 100644 app/static/vendors/flatpickr/utils/index.d.ts create mode 100644 app/static/vendors/flatpickr/utils/polyfills.d.ts create mode 100644 app/static/vendors/moment/moment-with-locales.min.js create mode 100644 app/static/vendors/moment/moment.min.js create mode 100644 app/static/vendors/slimselect/slimselect.css create mode 100644 app/static/vendors/slimselect/slimselect.js create mode 100644 app/static/vendors/slimselect/slimselect.min.css create mode 100644 app/static/vendors/slimselect/slimselect.min.js create mode 100644 app/static/vendors/slimselect/slimselect.scss create mode 100644 app/static/vendors/tabulator/css.old/tabulator.css create mode 100644 app/static/vendors/tabulator/css.old/tabulator.min.css create mode 100644 app/static/vendors/tabulator/css.old/tabulator.min.css.map create mode 100644 app/static/vendors/tabulator/css/tabulator_midnight.css create mode 100644 app/static/vendors/tabulator/css/tabulator_midnight.min.css create mode 100644 app/static/vendors/tabulator/css/tabulator_midnight.min.css.map create mode 100644 app/static/vendors/tabulator/css/tabulator_modern.css create mode 100644 app/static/vendors/tabulator/css/tabulator_modern.min.css create mode 100644 app/static/vendors/tabulator/css/tabulator_modern.min.css.map create mode 100644 app/static/vendors/tabulator/css/tabulator_simple.css create mode 100644 app/static/vendors/tabulator/css/tabulator_simple.min.css create mode 100644 app/static/vendors/tabulator/css/tabulator_simple.min.css.map create mode 100644 app/static/vendors/tabulator/css/tabulator_site.css create mode 100644 app/static/vendors/tabulator/css/tabulator_site.min.css create mode 100644 app/static/vendors/tabulator/css/tabulator_site.min.css.map create mode 100644 app/static/vendors/tabulator/js.old/modules/accessor.js create mode 100644 app/static/vendors/tabulator/js.old/modules/accessor.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/ajax.js create mode 100644 app/static/vendors/tabulator/js.old/modules/ajax.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/calculation_colums.js create mode 100644 app/static/vendors/tabulator/js.old/modules/calculation_colums.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/clipboard.js create mode 100644 app/static/vendors/tabulator/js.old/modules/clipboard.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/data_tree.js create mode 100644 app/static/vendors/tabulator/js.old/modules/data_tree.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/download.js create mode 100644 app/static/vendors/tabulator/js.old/modules/download.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/edit.js create mode 100644 app/static/vendors/tabulator/js.old/modules/edit.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/export.js create mode 100644 app/static/vendors/tabulator/js.old/modules/export.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/filter.js create mode 100644 app/static/vendors/tabulator/js.old/modules/filter.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/format.js create mode 100644 app/static/vendors/tabulator/js.old/modules/format.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/frozen_columns.js create mode 100644 app/static/vendors/tabulator/js.old/modules/frozen_columns.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/frozen_rows.js create mode 100644 app/static/vendors/tabulator/js.old/modules/frozen_rows.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/group_rows.js create mode 100644 app/static/vendors/tabulator/js.old/modules/group_rows.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/history.js create mode 100644 app/static/vendors/tabulator/js.old/modules/history.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/html_table_import.js create mode 100644 app/static/vendors/tabulator/js.old/modules/html_table_import.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/keybindings.js create mode 100644 app/static/vendors/tabulator/js.old/modules/keybindings.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/menu.js create mode 100644 app/static/vendors/tabulator/js.old/modules/menu.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/moveable_columns.js create mode 100644 app/static/vendors/tabulator/js.old/modules/moveable_columns.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/moveable_rows.js create mode 100644 app/static/vendors/tabulator/js.old/modules/moveable_rows.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/mutator.js create mode 100644 app/static/vendors/tabulator/js.old/modules/mutator.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/page.js create mode 100644 app/static/vendors/tabulator/js.old/modules/page.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/persistence.js create mode 100644 app/static/vendors/tabulator/js.old/modules/persistence.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/print.js create mode 100644 app/static/vendors/tabulator/js.old/modules/print.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/reactive_data.js create mode 100644 app/static/vendors/tabulator/js.old/modules/reactive_data.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/resize_columns.js create mode 100644 app/static/vendors/tabulator/js.old/modules/resize_columns.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/resize_rows.js create mode 100644 app/static/vendors/tabulator/js.old/modules/resize_rows.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/resize_table.js create mode 100644 app/static/vendors/tabulator/js.old/modules/resize_table.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/responsive_layout.js create mode 100644 app/static/vendors/tabulator/js.old/modules/responsive_layout.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/select_row.js create mode 100644 app/static/vendors/tabulator/js.old/modules/select_row.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/sort.js create mode 100644 app/static/vendors/tabulator/js.old/modules/sort.min.js create mode 100644 app/static/vendors/tabulator/js.old/modules/validate.js create mode 100644 app/static/vendors/tabulator/js.old/modules/validate.min.js create mode 100644 app/static/vendors/tabulator/js.old/tabulator.js create mode 100644 app/static/vendors/tabulator/js.old/tabulator.min.js create mode 100644 app/static/vendors/tabulator/js.old/tabulator_core.js create mode 100644 app/static/vendors/tabulator/js.old/tabulator_core.min.js create mode 100644 app/static/vendors/tabulator/js/modules/accessor.js create mode 100644 app/static/vendors/tabulator/js/modules/accessor.min.js create mode 100644 app/static/vendors/tabulator/js/modules/ajax.js create mode 100644 app/static/vendors/tabulator/js/modules/ajax.min.js create mode 100644 app/static/vendors/tabulator/js/modules/calculation_colums.js create mode 100644 app/static/vendors/tabulator/js/modules/calculation_colums.min.js create mode 100644 app/static/vendors/tabulator/js/modules/clipboard.js create mode 100644 app/static/vendors/tabulator/js/modules/clipboard.min.js create mode 100644 app/static/vendors/tabulator/js/modules/data_tree.js create mode 100644 app/static/vendors/tabulator/js/modules/data_tree.min.js create mode 100644 app/static/vendors/tabulator/js/modules/download.js create mode 100644 app/static/vendors/tabulator/js/modules/download.min.js create mode 100644 app/static/vendors/tabulator/js/modules/edit.js create mode 100644 app/static/vendors/tabulator/js/modules/edit.min.js create mode 100644 app/static/vendors/tabulator/js/modules/export.js create mode 100644 app/static/vendors/tabulator/js/modules/export.min.js create mode 100644 app/static/vendors/tabulator/js/modules/filter.js create mode 100644 app/static/vendors/tabulator/js/modules/filter.min.js create mode 100644 app/static/vendors/tabulator/js/modules/format.js create mode 100644 app/static/vendors/tabulator/js/modules/format.min.js create mode 100644 app/static/vendors/tabulator/js/modules/frozen_columns.js create mode 100644 app/static/vendors/tabulator/js/modules/frozen_columns.min.js create mode 100644 app/static/vendors/tabulator/js/modules/frozen_rows.js create mode 100644 app/static/vendors/tabulator/js/modules/frozen_rows.min.js create mode 100644 app/static/vendors/tabulator/js/modules/group_rows.js create mode 100644 app/static/vendors/tabulator/js/modules/group_rows.min.js create mode 100644 app/static/vendors/tabulator/js/modules/history.js create mode 100644 app/static/vendors/tabulator/js/modules/history.min.js create mode 100644 app/static/vendors/tabulator/js/modules/html_table_import.js create mode 100644 app/static/vendors/tabulator/js/modules/html_table_import.min.js create mode 100644 app/static/vendors/tabulator/js/modules/keybindings.js create mode 100644 app/static/vendors/tabulator/js/modules/keybindings.min.js create mode 100644 app/static/vendors/tabulator/js/modules/menu.js create mode 100644 app/static/vendors/tabulator/js/modules/menu.min.js create mode 100644 app/static/vendors/tabulator/js/modules/moveable_columns.js create mode 100644 app/static/vendors/tabulator/js/modules/moveable_columns.min.js create mode 100644 app/static/vendors/tabulator/js/modules/moveable_rows.js create mode 100644 app/static/vendors/tabulator/js/modules/moveable_rows.min.js create mode 100644 app/static/vendors/tabulator/js/modules/mutator.js create mode 100644 app/static/vendors/tabulator/js/modules/mutator.min.js create mode 100644 app/static/vendors/tabulator/js/modules/page.js create mode 100644 app/static/vendors/tabulator/js/modules/page.min.js create mode 100644 app/static/vendors/tabulator/js/modules/persistence.js create mode 100644 app/static/vendors/tabulator/js/modules/persistence.min.js create mode 100644 app/static/vendors/tabulator/js/modules/print.js create mode 100644 app/static/vendors/tabulator/js/modules/print.min.js create mode 100644 app/static/vendors/tabulator/js/modules/reactive_data.js create mode 100644 app/static/vendors/tabulator/js/modules/reactive_data.min.js create mode 100644 app/static/vendors/tabulator/js/modules/resize_columns.js create mode 100644 app/static/vendors/tabulator/js/modules/resize_columns.min.js create mode 100644 app/static/vendors/tabulator/js/modules/resize_rows.js create mode 100644 app/static/vendors/tabulator/js/modules/resize_rows.min.js create mode 100644 app/static/vendors/tabulator/js/modules/resize_table.js create mode 100644 app/static/vendors/tabulator/js/modules/resize_table.min.js create mode 100644 app/static/vendors/tabulator/js/modules/responsive_layout.js create mode 100644 app/static/vendors/tabulator/js/modules/responsive_layout.min.js create mode 100644 app/static/vendors/tabulator/js/modules/select_row.js create mode 100644 app/static/vendors/tabulator/js/modules/select_row.min.js create mode 100644 app/static/vendors/tabulator/js/modules/sort.js create mode 100644 app/static/vendors/tabulator/js/modules/sort.min.js create mode 100644 app/static/vendors/tabulator/js/modules/validate.js create mode 100644 app/static/vendors/tabulator/js/modules/validate.min.js create mode 100644 app/static/vendors/tabulator/js/tabulator.js create mode 100644 app/static/vendors/tabulator/js/tabulator.min.js create mode 100644 app/static/vendors/tabulator/js/tabulator_core.js create mode 100644 app/static/vendors/tabulator/js/tabulator_core.min.js create mode 100644 app/static/vendors/tinymce/changelog.txt create mode 100644 app/static/vendors/tinymce/js/tinymce/jquery.tinymce.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/langs/de.js create mode 100644 app/static/vendors/tinymce/js/tinymce/langs/fr_FR.js create mode 100644 app/static/vendors/tinymce/js/tinymce/langs/readme.md create mode 100644 app/static/vendors/tinymce/js/tinymce/license.txt create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/advlist/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/anchor/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/autolink/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/autoresize/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/autosave/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/bbcode/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/charmap/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/code/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/codesample/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/colorpicker/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/contextmenu/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/directionality/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/emoticons/js/emojis.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/emoticons/js/emojis.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/emoticons/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/fullpage/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/help/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/hr/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/image/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/imagetools/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/importcss/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/insertdatetime/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/legacyoutput/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/link/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/lists/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/media/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/nonbreaking/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/noneditable/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/pagebreak/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/paste/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/preview/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/print/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/quickbars/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/save/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/searchreplace/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/spellchecker/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/tabfocus/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/table/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/template/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/textcolor/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/textpattern/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/toc/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/visualblocks/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/visualchars/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/plugins/wordcount/plugin.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/skins/content/dark/content.min.css create mode 100644 app/static/vendors/tinymce/js/tinymce/skins/content/default/content.min.css create mode 100644 app/static/vendors/tinymce/js/tinymce/skins/content/document/content.min.css create mode 100644 app/static/vendors/tinymce/js/tinymce/skins/content/writer/content.min.css create mode 100644 app/static/vendors/tinymce/js/tinymce/skins/ui/oxide-dark/content.inline.min.css create mode 100644 app/static/vendors/tinymce/js/tinymce/skins/ui/oxide-dark/content.min.css create mode 100644 app/static/vendors/tinymce/js/tinymce/skins/ui/oxide-dark/content.mobile.min.css create mode 100644 app/static/vendors/tinymce/js/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff create mode 100644 app/static/vendors/tinymce/js/tinymce/skins/ui/oxide-dark/skin.min.css create mode 100644 app/static/vendors/tinymce/js/tinymce/skins/ui/oxide-dark/skin.mobile.min.css create mode 100644 app/static/vendors/tinymce/js/tinymce/skins/ui/oxide/content.inline.min.css create mode 100644 app/static/vendors/tinymce/js/tinymce/skins/ui/oxide/content.min.css create mode 100644 app/static/vendors/tinymce/js/tinymce/skins/ui/oxide/content.mobile.min.css create mode 100644 app/static/vendors/tinymce/js/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff create mode 100644 app/static/vendors/tinymce/js/tinymce/skins/ui/oxide/skin.min.css create mode 100644 app/static/vendors/tinymce/js/tinymce/skins/ui/oxide/skin.mobile.min.css create mode 100644 app/static/vendors/tinymce/js/tinymce/themes/mobile/theme.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/themes/silver/theme.min.js create mode 100644 app/static/vendors/tinymce/js/tinymce/tinymce.min.js create mode 100644 app/tmpl/block/cgu.tt create mode 100644 app/tmpl/block/dlgcropper.tt create mode 100644 app/tmpl/block/dlgpassword.tt create mode 100644 app/tmpl/block/dlguploadfile.tt create mode 100644 app/tmpl/block/dlgusername.tt create mode 100644 app/tmpl/block/head.tt create mode 100644 app/tmpl/block/snackbar.tt create mode 100644 app/tmpl/block/toolbars.tt create mode 100644 app/tmpl/file.tt create mode 100644 app/tmpl/index.tt create mode 100644 app/tmpl/lang/fr.tt create mode 100644 app/tmpl/login.tt create mode 100644 app/tmpl/macro/fields.tt create mode 100644 app/tmpl/module/championship/divisions.js create mode 100644 app/tmpl/module/championship/divisions.tt create mode 100644 app/tmpl/module/championship/games.js create mode 100644 app/tmpl/module/championship/games.tt create mode 100644 app/tmpl/module/championship/highscores.js create mode 100644 app/tmpl/module/championship/highscores.tt create mode 100644 app/tmpl/module/championship/index.js create mode 100644 app/tmpl/module/championship/index.tt create mode 100644 app/tmpl/module/championship/ranking.js create mode 100644 app/tmpl/module/championship/ranking.tt create mode 100644 app/tmpl/module/championship/seasons.js create mode 100644 app/tmpl/module/championship/seasons.tt create mode 100644 app/tmpl/module/championship/teams.js create mode 100644 app/tmpl/module/championship/teams.tt create mode 100644 app/tmpl/module/championship/toolbar.tt create mode 100644 app/tmpl/module/clubs/club.js create mode 100644 app/tmpl/module/clubs/club.tt create mode 100644 app/tmpl/module/clubs/clubmembers.js create mode 100644 app/tmpl/module/clubs/clubmembers.tt create mode 100644 app/tmpl/module/clubs/clubs.js create mode 100644 app/tmpl/module/clubs/clubs.tt create mode 100644 app/tmpl/module/clubs/cupreg.js create mode 100644 app/tmpl/module/clubs/cupreg.tt create mode 100644 app/tmpl/module/clubs/fldmembers.js create mode 100644 app/tmpl/module/clubs/fldmembers.tt create mode 100644 app/tmpl/module/clubs/seasonclubreg.js create mode 100644 app/tmpl/module/clubs/seasonclubreg.tt create mode 100644 app/tmpl/module/documents.tt create mode 100644 app/tmpl/module/documents/documents.js create mode 100644 app/tmpl/module/documents/index.js create mode 100644 app/tmpl/module/events.tt create mode 100644 app/tmpl/module/events/events.js create mode 100644 app/tmpl/module/events/vacancies.js create mode 100644 app/tmpl/module/forms.tt create mode 100644 app/tmpl/module/forms/forms.js create mode 100644 app/tmpl/module/index.tt create mode 100644 app/tmpl/module/index/index.js create mode 100644 app/tmpl/module/licenses/index.js create mode 100644 app/tmpl/module/licenses/index.tt create mode 100644 app/tmpl/module/licenses/licenserequests.js create mode 100644 app/tmpl/module/licenses/licenserequests.tt create mode 100644 app/tmpl/module/licenses/licenses.js create mode 100644 app/tmpl/module/licenses/licenses.tt create mode 100644 app/tmpl/module/licenses/members.js create mode 100644 app/tmpl/module/licenses/members.tt create mode 100644 app/tmpl/module/licenses/newlicense.js create mode 100644 app/tmpl/module/licenses/newlicense.tt create mode 100644 app/tmpl/module/licenses/toolbar.tt create mode 100644 app/tmpl/module/licenses/transfer.js create mode 100644 app/tmpl/module/licenses/transfer.tt create mode 100644 app/tmpl/module/login/forgotpassword.tt create mode 100644 app/tmpl/module/login/login.tt create mode 100644 app/tmpl/module/login/message.tt create mode 100644 app/tmpl/module/login/register.tt create mode 100644 app/tmpl/module/login/validationcode.tt create mode 100644 app/tmpl/module/medialibrary/dlgeditdocument.tt create mode 100644 app/tmpl/module/medialibrary/index.js create mode 100644 app/tmpl/module/medialibrary/index.tt create mode 100644 app/tmpl/module/members/club.tt create mode 100644 app/tmpl/module/members/clubmembers.tt create mode 100644 app/tmpl/module/members/index.js create mode 100644 app/tmpl/module/members/index.tt create mode 100644 app/tmpl/module/newsletter/index.js create mode 100644 app/tmpl/module/newsletter/index.tt create mode 100644 app/tmpl/module/newsletter/tbltoolbar.tt create mode 100644 app/tmpl/module/profile.tt create mode 100644 app/tmpl/module/profile/profile.js create mode 100644 app/tmpl/module/ranking/index.js create mode 100644 app/tmpl/module/ranking/index.tt create mode 100644 app/tmpl/module/ranking/tbltoolbar.tt create mode 100644 app/tmpl/module/users.tt create mode 100644 app/tmpl/module/users/users.js create mode 100644 app/tmpl/module/webnews.tt create mode 100644 app/tmpl/module/webnews/webnews.js create mode 100644 app/tmpl/module/websites.tt create mode 100644 app/tmpl/module/websites/websites.js create mode 100644 app/upload.cgi create mode 100644 test.pl create mode 100644 website/.htaccess create mode 100644 website/css/fonts/ledf.svg create mode 100644 website/css/fonts/ledf.ttf create mode 100644 website/css/fonts/ledf.woff create mode 100644 website/css/icons.css create mode 100644 website/css/theme.css create mode 100644 website/img/bg.png create mode 100644 website/img/club.png create mode 100644 website/img/favicon/android-icon-144x144.png create mode 100644 website/img/favicon/android-icon-192x192.png create mode 100644 website/img/favicon/android-icon-36x36.png create mode 100644 website/img/favicon/android-icon-48x48.png create mode 100644 website/img/favicon/android-icon-72x72.png create mode 100644 website/img/favicon/android-icon-96x96.png create mode 100644 website/img/favicon/apple-icon-114x114.png create mode 100644 website/img/favicon/apple-icon-120x120.png create mode 100644 website/img/favicon/apple-icon-144x144.png create mode 100644 website/img/favicon/apple-icon-152x152.png create mode 100644 website/img/favicon/apple-icon-180x180.png create mode 100644 website/img/favicon/apple-icon-57x57.png create mode 100644 website/img/favicon/apple-icon-60x60.png create mode 100644 website/img/favicon/apple-icon-72x72.png create mode 100644 website/img/favicon/apple-icon-76x76.png create mode 100644 website/img/favicon/apple-icon-precomposed.png create mode 100644 website/img/favicon/apple-icon.png create mode 100644 website/img/favicon/browserconfig.xml create mode 100644 website/img/favicon/favicon-16x16.png create mode 100644 website/img/favicon/favicon-32x32.png create mode 100644 website/img/favicon/favicon-96x96.png create mode 100644 website/img/favicon/favicon.ico create mode 100644 website/img/favicon/manifest.json create mode 100644 website/img/favicon/ms-icon-144x144.png create mode 100644 website/img/favicon/ms-icon-150x150.png create mode 100644 website/img/favicon/ms-icon-310x310.png create mode 100644 website/img/favicon/ms-icon-70x70.png create mode 100644 website/img/logo.png create mode 100644 website/img/news.png create mode 100644 website/img/person.jpg create mode 100644 website/index.cgi create mode 100644 website/index.php create mode 100644 website/js/site.js create mode 100644 website/lib/composer.json create mode 100644 website/lib/composer.lock create mode 100644 website/lib/config.php create mode 100644 website/lib/database.php create mode 100644 website/lib/dksconfig.pm create mode 100644 website/tmpl/commingsoon.tt create mode 100644 website/tmpl/index.html.mustache create mode 100644 website/tmpl/lists/labels.tt create mode 100644 website/tmpl/pages/calendrier.html.json create mode 100644 website/tmpl/pages/calendrier.html.mustache create mode 100644 website/tmpl/pages/championnat.html.mustache create mode 100644 website/tmpl/pages/clubs.html.mustache create mode 100644 website/tmpl/pages/coupe.html.mustache create mode 100644 website/tmpl/pages/documents.html.mustache create mode 100644 website/tmpl/pages/error.html.mustache create mode 100644 website/tmpl/pages/federation.html.mustache create mode 100644 website/tmpl/pages/home.html.mustache create mode 100644 website/tmpl/pages/impressum.html.mustache create mode 100644 website/tmpl/pages/listederang.html.mustache create mode 100644 website/tmpl/pages/news.html.mustache create mode 100644 website/tmpl/pages/privacy.html.mustache create mode 100644 website/tmpl/pages/terms.html.mustache diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b41cef1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +app/lib/perl5/* +website/lib/vendor/* \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..5eff6b1 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "intelephense.environment.includePaths": ["D:/Workspace/ledf_lu/website/lib/vendor"] +} \ No newline at end of file diff --git a/app/.htaccess b/app/.htaccess new file mode 100644 index 0000000..c5a9e14 --- /dev/null +++ b/app/.htaccess @@ -0,0 +1,9 @@ +RewriteEngine on + +DirectoryIndex index.cgi index.html +AddHandler cgi-script .cgi +#RewriteBase / +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d + +RewriteRule "^(.*)$" "index.cgi" [NC,L,QSA] \ No newline at end of file diff --git a/app/app.cgi b/app/app.cgi new file mode 100644 index 0000000..2941e4d --- /dev/null +++ b/app/app.cgi @@ -0,0 +1,159 @@ +#!/usr/local/bin/perl + +use strict; +use FindBin qw/$Bin $RealBin/; +use lib ($RealBin.'/lib/perl5'); +use lib ($RealBin.'/lib'); +use lib ($RealBin.'/backoffice/lib/perl5'); +use lib ($RealBin.'/backoffice/lib'); +use CGI; +use CGI::Cookie; +#use CGI::Carp qw/fatalsToBrowser/; +use File::Basename; +use JSON::PP; + +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}); +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/'; +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->{fn})){ + + my $db = dksdb->new(); + if ($p->{fn} eq "savefield"){ + # $html->{p} = $p; + $html->{result}->{ident} = $p->{ident}; + delete $p->{ident}; + delete $p->{fn}; + delete $p->{sid}; + my $dd = (); + my $retid=undef; + my $type = "upd"; + foreach my $px (keys(%{$p})){ + $html->{result}->{datafield} = $px; + + if (($px =~ /\_id$/) && ($p->{$px} eq "")){ + $type = "ins"; + } + } + my @sql = (); + if ($type eq "ins"){ + @sql = $db->create_ddl_insert($p); + } + else { + @sql = $db->create_ddl_update($p); + } + #$html->{result}->{sql} = \@sql; + foreach my $s (@sql){ + $retid= $db->dbquerysorted($s); + } + $html->{result}->{id} = $retid->{0}; + #$p->{table},#$p->{field},$p->{value},$p->{id},$p->{type} + } + + elsif ($p->{fn} eq "saveform"){ + # + $html->{p} = $p; + $html->{result}->{ident} = $p->{ident}; + 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; + foreach my $s (@sql){ + #if ($type eq "ins"){ + $retid= $db->dbquerysorted($s); + #}else { + + #} + + } + $html->{result} = $retid->{0}; + #$p->{table},#$p->{field},$p->{value},$p->{id},$p->{type} + } + elsif($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->dbexec($s); + } + $html->{result}->{id} = $retid->{0}; + } + elsif($p->{fn} eq "savepassword"){ + if ((length($p->{pwd}) > 7) && ($p->{pwd} =~ /\d/) && ($p->{pwd} =~ /[a-z]/) && ($p->{pwd} =~ /[A-Z]/) ){ + $se->savepassword($sess->{id},$p->{pwd}); + $html->{result} = "OK"; + }else { + $html->{result} = "NOT OK"; + } + + } + elsif ($p->{fn} eq "sendmailvcode"){ + my $vcode = $se->randomstring(6); + $vcode = lc($vcode); + $db->dbexec("UPDATE users set vcode='".$vcode."' where id=".$sess->{id}.";"); + my $eml = sendemail->new(); + my $mret = $eml->sendemail('user_verification',$sess->{id},$p->{mail},{vcode => $vcode},undef); + if ($mret == 0){ + $html->{result}->{vcode} = $vcode; + } else { + $html->{result}->{vcode} = $vcode; + $html->{result}->{error} = $mret; + } + } + elsif ($p->{fn} eq "savenewemail"){ + $db->dbexec("update users set username='".$p->{email}."' where id=".$sess->{id}." and vcode='".$p->{vcode}."';"); + $html->{result} = "OK"; + } + elsif($p->{fn} eq "getsitemedia"){ + my $path = dirname(dirname($0)).'/img'; + } + } + +} +print JSON::PP::encode_json($html); diff --git a/app/db.cgi b/app/db.cgi new file mode 100644 index 0000000..c6599f6 --- /dev/null +++ b/app/db.cgi @@ -0,0 +1,109 @@ +#!/usr/local/bin/perl + +use strict; +use FindBin qw/$Bin $RealBin/; +use lib ($RealBin.'/lib/perl5'); +use lib ($RealBin.'/lib'); +use lib ($RealBin.'/backoffice/lib/perl5'); +use lib ($RealBin.'/backoffice/lib'); +use CGI; +use CGI::Cookie; +# use CGI::Carp qw/fatalsToBrowser/; +use File::Basename; +use JSON::PP; + +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}); +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/'; +if (($cgi->request_method() eq "GET") || ($cgi->request_method() eq "POST")){ + + my @params = $cgi->param(); + foreach my $pp (@params){ + $p->{$pp} = $cgi->param($pp); + } + my $db = dksdb->new(); + if (exists($p->{get})){ + my $sql = "select * from vw_".$p->{get}; + if (exists($p->{fields}) ){ + $sql = "select ".$p->{fields}." from vw_".$p->{get}; + } + if (exists($p->{filter})){ + $sql .= " WHERE ".$p->{filter}.";"; + } + $html->{result}->{sqldata} = $db->dbqueryarray($sql); + } + elsif (exists($p->{set})){ + my $type = "ins"; + foreach my $x (keys(%{$p})){ + if (($x =~ /^ident_/) && ($p->{$x} ne "")){ + $type = "upd"; + last; + } + } + my $x = $p; + delete $x->{sid}; + delete $x->{set}; + my @sql = (); + #$html->{result}->{params} = $x; + if ($type eq "ins"){ + @sql = $db->create_ddl_insert($x); + }else { + @sql = $db->create_ddl_update($x); + } + if (scalar(@sql) > 0 ){ + my $rid = $db->dbquerysorted($sql[0]); + if (keys(%{$rid}) > 0 ){ + $html->{result} = $rid->{0}; + } + } + #$html->{result}->{sql} = $sql[0]; + } + elsif (exists($p->{fn})){ + my $x = $p; + my $fn = $p->{fn}; + my $sql = "select * from ".$p->{fn}.'('.$p->{params}.');'; + # open FILE,">>tmp/sql.log"; + # print FILE "\n=db.cgi fn=\n$sql\n==\n"; + # close FILE; + $html->{result} = $db->dbquerysorted($sql); + # $html->{result}->{sql} = $sql; + } + elsif (exists($p->{del})){ + my $x = $p; + delete $x->{sid}; + delete $x->{del}; + my @sql = $db->create_ddl_delete($x); + if (scalar(@sql) > 0 ){ + my $rid = $db->dbexec($sql[0]); + if (keys(%{$rid}) > 0 ){ + $html->{result} = $rid->{0}; + } + } + } +} +print JSON::PP::encode_json($html); +# for my $e ( keys %ENV ) { +# print "$e: $ENV{$e}
"; +# } \ No newline at end of file diff --git a/app/file.cgi b/app/file.cgi new file mode 100644 index 0000000..af305f0 --- /dev/null +++ b/app/file.cgi @@ -0,0 +1,164 @@ +#!/usr/local/bin/perl + +use strict; +use FindBin qw/$Bin $RealBin/; +use lib ($RealBin.'/lib/perl5'); +use lib ($RealBin.'/lib'); +use lib ($RealBin.'/backoffice/lib/perl5'); +use lib ($RealBin.'/backoffice/lib'); +use CGI; +use CGI::Cookie; +# use CGI::Carp qw/fatalsToBrowser/; +use File::Basename; +use File::Path qw/make_path/; +use JSON::PP; +use Image::Size; +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); +} +# if ($sitecfg->{basepath} ne "/"){ +#$sitecfg->{docroot} = $sitecfg->{docroot}.substr($sitecfg->{basepath},0,index($sitecfg->{basepath},'backoffice')-1); +# } +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(-status => 404, -type=>"text/html", -charset => "utf-8"); + print "

Du bass nët Authentifizéiert

"; + exit(0); +} +#$html->{docroot} = $sitecfg->{docroot}; +# $html->{basepath} = $sitecfg->{basepath}; +if (($cgi->request_method() eq "GET") || ($cgi->request_method() eq "POST")){ + if (exists($p->{file}) && $p->{file} ne ""){ + my $db = dksdb->new(); + my $filedata = $db->dbquerysorted("select * from documents where id='".$p->{file}."';"); + if (keys(%{$filedata}) > 0){ + if ($filedata->{0}->{filedata} ne ""){ + print $cgi->header( + -type => $filedata->{0}->{mimetype}, + -target => $filedata->{0}->{filename}, + -attachment => $filedata->{0}->{filename} + ); + my $rawdata = MIME::Base64::decode_base64($filedata->{0}->{filedata}); + print $rawdata; + } + else { + print $cgi->header(-status => 404, -type=>"text/html", -charset => "utf-8"); + print "

Deen gefroten Fichier existéiert nët!

"; + } + + exit(0); + } + } else { + print $cgi->header(-status => 404, -type=>"text/html", -charset => "utf-8"); + print "

Deen gefroten Fichier existéiert nët!

"; + exit(0) + } + # if (exists($p->{list}) && -d ){ + # if (exists($p->{folder})){ + + # $p->{folder} =~ s/\.\.\///g; + # my $cpath = $sitecfg->{docroot}.'/'.$p->{folder}; + # my @items = (); + # my $up = (); + # # if (index($p->{folder},'/') > 0){ + # # $up->{type} = "dir"; + # # $up->{name} = ".."; + # # $up->{sitepath} = $p->{folder}; + # # $up->{path} = $p->{folder}; + # # $up->{mimtype} = 'directory'; + # # $up->{size} = ''; + # # $up->{dimension}; + # # $up->{thumb} = ''; + # # push (@items,$up); + # # } + # opendir(DIR,$cpath); + + # while (my $d = readdir(DIR)){ + # if ($d =~ /^\./){ next; } + # if ($d eq "thb"){ next; } + # my $e = (); + # if (-d $cpath.'/'.$d){ + # $e->{type} = "dir"; + # $e->{name} = $d; + # $e->{sitepath} = $p->{folder}.'/'.$d; + # $e->{path} = $p->{folder}.'/'.$d; + # $e->{mimtype} = 'directory'; + # $e->{size} = ''; + + # my $cmd = 'find "'.$cpath.'/'.$d.'" -type f | grep -v \'/thb/\' | wc -l'; + # my $dim = `$cmd`; + # chomp($dim); + # $e->{dimension} = $dim; + + # $e->{thumb} = ''; + # } + # if (-f $cpath.'/'.$d){ + # my $cmd = 'file -i "'.$cpath.'/'.$d.'" | awk -F": " \'{ print $2 }\' | awk -F";" \'{ print $1 }\''; + # my $mt = `$cmd`; + # chomp($mt); + # #if (($mt !~ /^image/ ) || ($mt !~ /^application\/pdf/ )) { next; } + # if (($mt =~ /^image/ ) || ($mt !~ /^application\/pdf/ )) { + # if (! -f $cpath.'/thb/'.$d.'.thb.png'){ + # if (! -d $cpath.'/thb'){ + # make_path($cpath.'/thb'); + # } + # system('convert -thumbnail x96 -background white -alpha remove "'.$cpath.'/'.$d.'" "'.$cpath.'/thb/'.$d.'.thb.png"'); + # } + # if ($mt =~ /^image/ ){ + # my ($ix, $iy) = imgsize($cpath.'/'.$d); + # $e->{dimension} = $ix."x".$iy; + # } + # } + # my @st = stat($cpath.'/'.$d); + # $e->{type} = "file"; + # $e->{mimetype} = $mt; + # my $s = $st[7]; + # my $hrs =""; + # if ($s > 1000000024){ + # $s = $s/1024; + # $s = $s/1024; + # $s = $s/1024; + # ($hrs) = $s =~ m/^(\d+\.\d\d).*/; + # $hrs = $hrs." GB"; + # } elsif ($s > 1000024){ + # $s = $s/1024; + # $s = $s/1024; + # ($hrs) = $s =~ m/^(\d+\.\d\d).*/; + # $hrs = $hrs." MB"; + # } elsif ($s > 1024){ + # $s = $s/1024; + # ($hrs) = $s =~ m/^(\d+\.\d\d).*/; + # $hrs = $hrs." KB"; + # } else { + # $hrs = $s." B"; + # } + # $e->{hrsize} = $hrs; + # $e->{size} = $st[7]; + # $e->{name} = $d; + # $e->{sitepath} = $p->{folder}.'/'.$d; + # $e->{thumb} = ''; + # $e->{path} = '../../../'.$p->{folder}.'/'.$d; + # } + # push (@items,$e); + # } + # closedir(DIR); + # $html->{result} = \@items; + + # } + # } + +} + diff --git a/app/index.cgi b/app/index.cgi new file mode 100644 index 0000000..b735fcd --- /dev/null +++ b/app/index.cgi @@ -0,0 +1,186 @@ +#!/usr/local/bin/perl + +use strict; +use FindBin qw/$Bin $RealBin/; +use lib ($RealBin.'/lib/perl5'); +use lib ($RealBin.'/lib'); +use lib ($RealBin.'/backoffice/lib/perl5'); +use lib ($RealBin.'/backoffice/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; +$vars->{page} = "index.html"; +$vars->{filepath} = substr($cgi->url({-absolute=>1}),length($vars->{basepath})+1); +# $vars->{baseurl} = $cgi->url({-base=>1}).$vars->{basepath}; +if ($vars->{filepath} eq ""){ + $vars->{filepath} = "index.html"; +} +if ($vars->{basepath} eq "/"){ + $vars->{siteurl} = $cgi->url({-base=>1}); +}else { + $vars->{siteurl} = $cgi->url({-base=>1}).dirname($vars->{basepath}); + #$vars->{docroot} = $vars->{docroot}.dirname($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} = ""; + +my $sess = (); +my $se = session->new(); +$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"){ + + 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->{logout})){ + $se->deletesession($p->{sid}); + $p->{sid} = ""; + $cookie = CGI::Cookie->new(-name=>$vars->{cookiename},-value=>"",-httponly => 1); + } + # if (exists($p->{btndeleteprofile})){ + # my $ret = $se->deleteprofile($p->{deleteprofile}); + # $vars->{message} = $ret->{message}; + # $vars->{messagetype} = $ret->{messagetype}; + # $vars->{page} = "message.tt"; + # if (exists($ret->{sid})){ + # $p->{sid} = ""; + # } + # $cookie = CGI::Cookie->new(-name=>$vars->{cookiename},-value=>"",-httponly => 1); + # } +} + +if ($p->{sid} ne ""){ + $sess = $se->getsession($p->{sid}); +} + + +#$vars->{beforex} = $vars->{page}; +if (!exists($sess->{id}) || (!exists($p->{sid})) || $p->{sid} eq ""){ + $skl = "login.tt"; +} +# if ($vars->{page} eq "deleteprofile.tt") { +# $skl = "skeleton/login.tt"; +# } +# my ($appname) = $ENV{REQUEST_URI} =~ /.*\/module\/(\w+)\/.*/; +if ($p->{sid} ne ""){ + $vars->{session} = $sess; +} +#SESSION - End +# #BEGIN - Browser Blocking +# if (($ENV{HTTP_USER_AGENT} !~ /Chrome/) || ($ENV{HTTP_USER_AGENT} =~ /Edge/) || ($ENV{HTTP_USER_AGENT} =~ /Firefox/)){ +# $skl = "skeleton/browser.tt"; +# } +# #END - Browser Blocking +my $ctype = 'text/html'; +if ($vars->{suffix} eq ".js"){ + $ctype= "text/javascript"; +} elsif ($vars->{suffix} eq ".css"){ + $ctype = "text/css"; +} +print $cgi->header(-type=>$ctype, -charset=>"utf-8",-cookie => $cookie); +# print dirname($ENV{"SCRIPT_FILENAME"}); + +my $template = Template->new({INCLUDE_PATH => [$sitecfg->{tmplpath}]}); +#} + +my @lv = split(/\//,$vars->{filepath}); +my $absnum = scalar(@lv)-1; + +for (my $i=0;$i<$absnum;$i++){ + $vars->{abspath} .= "../"; +} +if (($skl eq "index.tt") && ($vars->{page} eq "login.tt")){ + $vars->{page} = "index.tt"; +} +# $vars->{page} = $vars->{page}; +if (-e $sitecfg->{tmplpath}.'/module/'.$vars->{page}){ + $vars->{page} = 'module/'.$vars->{page}; +} +$vars->{pagename} = basename($vars->{page}); +$vars->{pagename} =~ s/\.tt$//; +# my ($appname) = $ENV{REQUEST_URI} =~ /.*\/apps\/(\w+)\/.*/; +#$vars->{requri} = $ENV{REQUEST_URI}; + +if ($vars->{suffix} ne ".html"){ + $skl = "file.tt"; +} +$vars->{params}= $p; +$vars->{skl} = $skl; +$vars->{lang} = "fr"; + + $template->process($skl,$vars) || die "Template process failed: ", $template->error(), "\n"; + + if ($vars->{page} =~ /\.tt/){ + print '
'.Dumper($vars)."
";
+ } 
+
+
diff --git a/app/lib/dksconfig.pm b/app/lib/dksconfig.pm
new file mode 100644
index 0000000..ea67c2a
--- /dev/null
+++ b/app/lib/dksconfig.pm
@@ -0,0 +1,32 @@
+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 => 'ledf',
+  dbtype => 'PgPP',
+  #dsn => 'DBI:PgPP:dbname=leedflu_db;host=DKS-LAPTOP.fritz.box',
+  dsn => 'DBI:PgPP:dbname=ledf_db;host=sql12.your-server.de',
+  dbuser => 'ledf_user',
+  dbpassword => 'znWA9s3cgjEsRsWZ',
+  page => 'index.tt',
+  pagename => 'index',
+  basepath => substr(dirname($0),length($ENV{"DOCUMENT_ROOT"})),
+  datapath => dirname($0).'/data/',
+  # docroot => $ENV{"DOCUMENT_ROOT"},
+  registration_enabled => '0',
+  default_group => 'users',
+  sitename => 'LEDF',
+  season => '2020-2021',
+  season_id => 2,
+  staticpath => 'static/',
+  tmplpath => dirname($0).'/tmpl'
+};
+
+1;
\ No newline at end of file
diff --git a/app/lib/dksdb.pm b/app/lib/dksdb.pm
new file mode 100644
index 0000000..2234a01
--- /dev/null
+++ b/app/lib/dksdb.pm
@@ -0,0 +1,409 @@
+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 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 dbquery(){
+	my $self = shift;
+    my $stat = shift;
+    # my $vw_info = shift;
+    my $retdata = undef;
+    my $dbh = DBI->connect($sitecfg->{dsn},$sitecfg->{dbuser},$sitecfg->{dbpassword},{PrintError=>0,RaiseError=>0,AutoCommit=>1})  or return $retdata->{error} = "dbquery 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} = "dbquery".$dbh->errstr. "- SQL: ".$stat;;
+
+		
+   $sth->execute() or return $retdata->{error} = "dbquery: ".$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 dbquerybykey(){
+    my $self = shift;
+    my $key = shift;
+    my $stat = shift;
+    #my $retempty = shift;
+    my $retdata =();
+    my $dbh = DBI->connect($sitecfg->{dsn},$sitecfg->{dbuser},$sitecfg->{dbpassword},{PrintError=>0,RaiseError=>0,AutoCommit=>1})  or return $retdata->{error} = "dbquery 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} = "dbquery: ".$stat;
+   $sth->execute() or return $retdata->{error} = "dbquery: ".$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 dbquerysorted(){
+    my $self = shift;
+    my $stat = shift;
+    # my $vw_info = shift;
+    my $retdata;
+    my $dbh = DBI->connect($sitecfg->{dsn},$sitecfg->{dbuser},$sitecfg->{dbpassword},{PrintError=>0,RaiseError=>0,AutoCommit=>1})  or return $retdata->{error} = "dbquery 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} = "dbquerysorted ".$dbh->errstr. "- SQL: ".$stat;;
+
+		
+   $sth->execute() or return $retdata->{error} = "dbquerysorted: ".$sth->errstr;
+   my $count = 0;
+
+   while(my $data = $sth->fetchrow_hashref())
+   {
+        #$retdata->{$count} = $data;
+				foreach my $k (keys %{$data}){
+          $retdata->{$count}->{$k} = decode("utf-8",$data->{$k});
+        }
+     $count++;
+   }
+	 
+#    my $qstruct = ();
+#    my $num_fields = $sth->{NUM_OF_FIELDS};
+
+#     for ( my $i=0; $i< $num_fields; $i++ ) {
+#         $qstruct->{$i}->{name} = $sth->{NAME}->[$i]; 
+#         #$qstruct->{$i}->{type} = $sth->{COMMENT}->[$i];
+#       	#$qstruct->{$i}->{precision} = $sth->{PRECISION}->[$i];
+#     }
+   
+   $sth->finish();
+   $dbh->disconnect();
+	 
+   return $retdata;
+}
+
+sub dbexec(){
+    my $self = shift;
+    my $stat = shift;
+    my $retdata;
+    my $dbh = DBI->connect($sitecfg->{dsn},$sitecfg->{dbuser},$sitecfg->{dbpassword},{PrintError=>0,RaiseError=>0,AutoCommit=>1})  or return $retdata->{error} =  "dbquery 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} = "dbexec ".$dbh->errstr. "- SQL: ".$stat;;
+   $retdata->{success}  = $dbh->do($stat) or return $retdata->{error} = "dbexec ".$dbh->errstr. "- SQL: ".$stat;
+   $dbh->disconnect();
+   return $retdata;
+}
+
+sub dbqueryarray(){
+   my $self = shift;
+   my $stat = shift;
+   my @retdata = ();
+    my $dbh = DBI->connect($sitecfg->{dsn},$sitecfg->{dbuser},$sitecfg->{dbpassword},{PrintError=>0,RaiseError=>0,AutoCommit=>1})  or return ({"error" => "dbqueryarray Connection Error!".$!});
+   #$stat = encode("utf8", $stat);
+   #open FILE,">>/tmp/sql.log";
+   #print  "$stat\n";
+   # close FILE;
+   my $sth = $dbh->prepare($stat);
+
+  $sth->execute() or print "dbqueryarray: ".$sth->errstr;
+  my $count = 0;
+  
+  while(my $data = $sth->fetchrow_hashref())
+  {
+  	my $row = ();
+		foreach my $k (keys %{$data}){
+      $row->{$k} = decode("utf-8",$data->{$k});
+    }
+		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 = ();
+
+	foreach my $f (keys(%{$data})){
+		 	if (($f =~ /\_/) && ($f !~ /^ident_/)){
+		 		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);
+		 		$fields->{$t}->{$c} = $data->{$f};     
+      }
+
+		 }
+
+	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);
+		}
+		push(@ddl,"INSERT INTO public.".$tb." (".join(",",@sqlcol).") VALUES (".join(",",@sqlval).") returning id;");
+	}
+	return @ddl;
+}
+
+sub create_ddl_insert_json(){
+	my $self = shift;
+	my $schema = shift;
+	my $table = shift;
+	my $columns = shift;
+	my $data = shift;
+	my @ddl = ();
+	my @sqlcol = ();
+	my @sqlval = ();
+	foreach my $c (keys(%{$data})){
+		#if (exists($columns->{$c})){
+			push (@sqlcol,'"'.$c.'"');
+			my $v = $data->{$c};
+			
+			if ($v eq ''){
+				$v = 'null';
+			}elsif ($v =~ /^data:.+;base64,/){
+				$v =~ s/'/''/g;
+				$v = "'".$v."'";
+			} 
+			else {
+				$v= uri_decode($v);
+				$v =~ s/'/''/g;
+				if ($columns->{$c}->{data_type} eq "ARRAY"){
+					if (ref($data->{$c}) eq "ARRAY"){
+						$v = "{\"".join("\",\"",@{$data->{$c}})."\"}";	
+					}
+					else {
+						$v = 'null';	
+					}
+					$v =~ s/""/null/g;	
+				}elsif ($columns->{$c}->{data_type} =~ /^timestamp/ ){
+					
+				}elsif($columns->{$c}->{data_type} eq "date"){
+					
+				}elsif($columns->{$c}->{data_type} eq "time"){
+					
+				}
+				$v = "'".$v."'";
+			}			
+		push (@sqlval,$v);
+		#}			
+	}
+	return "INSERT INTO public.".$schema.".\"".$table."\" (".join(",",@sqlcol).") VALUES (".join(",",@sqlval).");";
+}
+
+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);
+			}
+		push(@ddl,"UPDATE public.".$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);
+			}
+		push(@ddl,"SELECT count(*) as cnt from ".$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};
+		 	} 
+		 }
+	
+# 	my $ref = $self->dbquerysorted("select TABLE_NAME,COLUMN_NAME from information_schema.KEY_COLUMN_USAGE where COLUMN_NAME in (".join(",",@refcols).") and CONSTRAINT_SCHEMA='".$self->{dbname}."';");
+# 	foreach my $r (keys(%{$ref})){
+# 		my $refv = $refdata->{$ref->{$r}->{COLUMN_NAME}};
+# 		if ($refv eq ''){
+# 			$refv = ' is null';
+# 		} else {
+# 			$refv =~ s/'/''/g;
+# 			$refv = "='".$refv."'";
+# 		}
+# 		push(@ddl,"DELETE from ".$ref->{$r}->{TABLE_NAME}." where ".$ref->{$r}->{COLUMN_NAME}.$refv.";");
+# 	}
+	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."'");
+		}
+		push(@ddl,"DELETE FROM public.".$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;
+} 
+
+1;
diff --git a/app/lib/dkssavefile.pm b/app/lib/dkssavefile.pm
new file mode 100644
index 0000000..55c260f
--- /dev/null
+++ b/app/lib/dkssavefile.pm
@@ -0,0 +1,49 @@
+package dkssavefile;
+
+
+use strict;
+use lib ('./lib/perl5');
+use lib ('./lib');
+use lib ('./');
+use MIME::Base64;
+use MIME::Types;
+use URI;
+use Data::Dumper;
+use File::Path qw(make_path);
+
+sub new {
+    my $class = shift;
+    my $self = bless {}, $class;
+    return $self;
+}
+
+sub saveb64toFile(){
+  my $self = shift;
+  # my $fd = shift;
+  my $filename = shift;
+  my $sitepath = shift;
+  my $filepath = shift;
+  my $data = shift;
+  my $ds = URI->new($data);
+  my $mimetype= $ds->media_type();
+  my $mt = MIME::Types->new();
+  my $sfx = $mt->type($mimetype);
+  my $ext = $sfx->{MT_extensions};
+  my $nfsfx = "";
+  if (scalar(@$ext) > 0){
+     $nfsfx = @$ext[0];
+  }
+  if (! -d $sitepath.'/'.$filepath){
+    make_path($sitepath.'/'.$filepath);
+  }
+  open (NF,">".$sitepath.'/'.$filepath.'/'.$filename.'.'.$nfsfx);
+  binmode(1);
+  print NF $ds->data();
+  close(NF);
+  if (-e $sitepath.'/'.$filepath.'/'.$filename.'.'.$nfsfx){
+    return $filepath.'/'.$filename.'.'.$nfsfx;
+  } 
+  return "";
+}
+
+1;
\ No newline at end of file
diff --git a/app/lib/parsexlsx.pm b/app/lib/parsexlsx.pm
new file mode 100644
index 0000000..e5fab2d
--- /dev/null
+++ b/app/lib/parsexlsx.pm
@@ -0,0 +1,60 @@
+package parsexlsx;
+
+use strict;
+use lib ('./lib/perl5');
+use lib ('./lib');
+use lib ('./');
+use Data::Dumper;
+use File::Basename qw/dirname basename/;
+use Spreadsheet::XLSX;
+use Encode;
+use dksdb;
+
+sub new {
+    my $class = shift;
+    my $self = bless {}, $class;
+
+    return $self;
+}
+
+sub sheetdata(){
+  my $self = shift;
+  my $xlsxfile = shift;
+  my $sheetname = shift;
+  my @sheetdata = ();
+  my $excel = Spreadsheet::XLSX -> new ($xlsxfile);
+  foreach my $sheet (@{$excel -> {Worksheet}}) {
+    #print $sheet->{Name}."\n";
+    if (lc($sheet->{Name}) eq lc($sheetname)){
+      $sheet -> {MaxRow} ||= $sheet -> {MinRow};
+      foreach my $row ($sheet -> {MinRow} .. $sheet -> {MaxRow}) {
+        $sheet -> {MaxCol} ||= $sheet -> {MinCol};
+        my $rowdata = ();       
+        foreach my $col ($sheet -> {MinCol} ..  $sheet -> {MaxCol}) {
+          my $cell = $sheet -> {Cells} [$row] [$col];
+          
+          if ($cell) {
+            
+            $rowdata->{$col} = decode("utf-8",$cell->{Val});
+          }
+        }
+        #print Dumper($rowdata);
+        push @sheetdata,$rowdata;
+      }
+    }
+  }
+  return @sheetdata;
+}
+
+sub sheets(){
+  my $self = shift;
+  my $xlsxfile = shift;
+  my @sheetnames = ();
+  my $excel = Spreadsheet::XLSX -> new ($xlsxfile);
+  foreach my $sheet (@{$excel -> {Worksheet}}) {
+    push(@sheetnames,$sheet->{Name});
+  }
+  return @sheetnames;
+}
+
+1;
\ No newline at end of file
diff --git a/app/lib/sendemail.pm b/app/lib/sendemail.pm
new file mode 100644
index 0000000..0ea951f
--- /dev/null
+++ b/app/lib/sendemail.pm
@@ -0,0 +1,130 @@
+package sendemail;
+
+use strict;
+use lib ('./lib/perl5');
+use lib ('./lib');
+use lib ('./');
+use Data::Dumper;
+use File::Basename qw/dirname basename/;
+use dksdb;
+
+sub new {
+    my $class = shift;
+    my $self = bless {}, $class;
+    $self->{server} = "mail.your-server.de";
+    $self->{port} = "587";
+    $self->{user} = 'kilian.saffran@fld.lu';
+    $self->{password} = "Y6cWvXR6D2";
+    $self->{from} = 'webmaster@fld.lu';
+    return $self;
+}
+
+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->dbquerysorted("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};
+  }
+  # open (LOG,">>tmp/sendmail.log");
+  # print LOG $ENV{SCRIPT_FILENAME};
+  # print LOG "SEND EMAIL:".Dumper($data)."\n";
+  # close(LOG);
+  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;
+  }
+  # open (LOG,">>tmp/sendmail.log");
+  # print LOG "TEMPLATE DATA:".$datasql."\n";
+  # close(LOG);
+  $maildata = $db->dbquerysorted($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;
+  #$bodytmpl =~ s/"/\\\"/g;
+  #PROD REPLACE all not replaced DATA       
+  #$bodytmpl =~ s/%%\w+%%//g;
+  #$sendto = 'ksaffran@dks.lu';
+  # open (LOG,">>tmp/sendmail.log");
+  # print LOG "SUBJECT:".$subject."\n";
+  # print LOG "BODY TEXT:".$bodytmpl."\n";
+  # close(LOG);
+  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 .= '-o message-content-type=html ';
+    $cmd .= '-o message-charset=ISO-8859-1 ';
+    $cmd .= '-o message-file='.$f.' ';
+    $cmd .= '-t "'.$sendto.'" ';
+    $cmd .= '-u "'.$subject.'" ';
+  #    open (LOG,">>sendmail.log");
+  #  print LOG $cmd."\n";
+  # # print LOG "BODY TEXT:".$bodytmpl."\n";
+  #  close(LOG);
+    open(EML,">".$f);
+    print EML $bodytmpl;
+    close(EML);
+    # $cmd .= '-m "'.$bodytmpl.'" ';
+    if ($attach != undef){
+      $cmd .= " -a";
+      
+      foreach my $a (@{$attach}){
+        $cmd .= " ".$a." ";
+      }
+    }
+    # open (LOG,">>tmp/sendmail.log");
+    # print LOG "SEND EMAIL CMD:".$cmd."\n";
+    # close(LOG);
+    # $cmd =~ s/'/''/g; 
+    $send = system($cmd);
+    # open (LOG,">>tmp/sendmail.log");
+    # print LOG "CMD RETURN NUM:".$send."\n";
+    # close(LOG);
+    unlink($f);
+  }    
+  return $send;
+}
+
+1;
\ No newline at end of file
diff --git a/app/lib/session.pm b/app/lib/session.pm
new file mode 100644
index 0000000..9392753
--- /dev/null
+++ b/app/lib/session.pm
@@ -0,0 +1,237 @@
+package session;
+
+use strict;
+use FindBin qw($RealBin);
+use lib ($RealBin.'/backoffice/');
+use lib ($RealBin.'/backoffice/lib/');
+use lib ('./lib/perl5');
+use lib ('./lib');
+
+use lib ('./');
+use File::Basename;
+use Digest::SHA qw(sha256_hex);
+
+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;
+  # open FILE,">>tmp/sql.log";
+  # print FILE "pwd: $password\n";
+  # close(FILE);
+  my $pwd = sha256_hex($password);
+  my $ret->{messagetype} ='red';
+  # my $newsid = undef;
+  $login = lc($login);
+  $login =~ s/^\s+//;
+  $login =~ s/\s+$//;
+
+  $ret->{message} = "Passwuert oder Login onbekannt!";
+  $ret->{messagetype} = "red";
+  $ret->{sid} = undef;
+  $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}->dbexec("UPDATE users SET userpassword = '".$pwd."' WHERE id=".$iduser.";");
+  return 1;
+}
+
+sub passwordforgotten(){
+  my $self = shift;
+  my $email = shift;
+  $email =~ s/^\s+//;
+  $email =~ s/\s+$//;
+  my $ret->{messagetype} ='red';
+  $ret->{message} = "Onbekannt E-mail!";
+  my $sql = "select id,userpassword from users where username='".$self->{db}->securetext($email)."';";
+  my $ex = $self->{db}->dbquerysorted($sql);
+  if (keys(%{$ex}) > 0){
+    my $newpwd = $self->randomstring(12);
+    my $pwd = sha256_hex($newpwd);
+    $self->{db}->dbexec("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} = "Den Moment ass et leider nët méglech d'Passwuert autmatesch zreckzesetzen, 
wend dech w.e.g. via E-Mail un webmaster\@fld.lu!"; + return $ret; + } + $ret->{message} = "Mir hun dir eng E-Mail, matt engem neien Passwuert gescheckt!"; + $ret->{messagetype} = "green"; + } + return $ret; +} + +# sub registeruser(){ +# my $self = shift; +# my $data = shift; +# my $ret->{messagetype} ='red'; +# $ret->{message} = "Een Fehler ass passéiert, probéier et spéier nach eemol!"; +# $ret->{page} = "message.tt"; +# if (!exists($data->{license}) || !exists($data->{regcode}) || !exists($data->{email}) || !exists($data->{terms})){ +# $ret->{message} = "W.e.g. All Felder ausfëllen!"; +# $ret->{page} = "register.tt"; +# return $ret; +# } +# foreach my $d (%{$data}){ +# $data->{$d} = $self->{db}->securetext($data->{$d}); +# } + +# my $user = $self->{db}->dbquerysorted("select id from users where username='".$data->{email}."';"); +# if (keys(%{$user}) > 0){ +# $ret->{page} = "register.tt"; +# $ret->{message} = "Een Benotzer matt der selwechter E-Mail existéiert schon!"; +# return $ret; +# } +# my $license = $self->{db}->dbquerysorted("select us.id as id_user,lic.license,mb.id as id_member,us.username,us.vcode,us.regcode from members mb join licenses lic on (lic.id_member=mb.id) join users us on (mb.id_user=us.id) where us.regcode='".$data->{regcode}."' and lic.license='".$data->{license}."' limit 1"); +# if (keys(%{$license}) == 0){ +# $ret->{message} = "Falsch Lizenz-Nummer oder falschen Régistréierungs-Code!"; +# return $ret; +# } +# my $regcode = $license->{0}->{regcode}; +# my $newcode = $self->randomstring(6); +# #my $usergroup = $self->{db}->dbquerysorted("select id from usergroups where usergroup ='avocat';"); +# my $newuserid = $self->{db}->dbquerysorted("UPDATE users set username='".$data->{email}."',vcode='".$newcode."' where id=".$license->{0}->{id_user}." ;"); +# my $maildata->{vcode} = $newcode; +# my $eml = sendemail->new(); +# my $mret = $eml->sendemail('user_verification',$license->{0}->{id_user},$data->{email},$maildata,undef); +# if ($mret == 0){ +# $ret->{message} = "Merci,
Mir hun dir elo eng E-Mail gescheckt, matt engem Code fir deng E-Mail ze verifizéieren!
Gëff desen Code w.e.g. an daat Feld hei drënner an!
Bei Problemer wend dech w.e.g. via E-Mail un webmaster\@fld.lu"; +# $ret->{messagetype} = "green"; +# $ret->{page} = "validationcode.tt"; +# } else { +# $self->{db}->dbexec("UPDATE users set username='".$data->{email}."',vcode=null where id=".$license->{0}->{id_user}." ;"); +# $ret->{message} = "Aus iergend engem Grond konnten mir dir keng E-Mail un '".$data->{email}."' schecken! Falls dess E-Mail-Address net existéiert, versich et nach eng Kéier matt enger E-Mail-Address, déi existéiert!
Bei Problemer wend dech w.e.g. via E-Mail un webmaster\@fld.lu"; +# $ret->{messagetype} = "red"; +# $ret->{page} = "register.tt"; +# } +# #$self->{db}->dbexec("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}->dbquerysorted("select id,vcode,username from users where vcode='".$data->{vcode}."';"); +# if (keys(%{$vcodedata}) == 0){ +# $ret->{message} = "Benotzer onbekannt oder Code falsch!"; +# $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}->dbquerysorted("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,
Mir hun dir elo eng E-Mail gescheckt, matt all deenen néidegen Donnéeen fir dech anzeloggen!
Bei Problemer wend dech w.e.g. via E-Mail un webmaster\@fld.lu"; +# $ret->{messagetype} = "green"; +# $ret->{page} = "message.tt"; +# } else { +# $ret->{message} = "Aus iergend engem Grond konnten mir dir keng E-Mail un '".$newuserid->{0}->{username}."' schecken! Falls dess E-Mail-Address net existéiert, versich et nach eng Kéier matt enger E-Mail-Address, déi existéiert!
Bei Problemer wend dech w.e.g. via E-Mail un webmaster\@fld.lu"; +# $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}->dbexec("UPDATE sessions set idsession= 'LO-' || idsession 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}->dbquerysorted("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}->dbexec($s); +# } +# return 1; +# } + +1; \ No newline at end of file diff --git a/app/sendEmail b/app/sendEmail new file mode 100644 index 0000000..c639439 --- /dev/null +++ b/app/sendEmail @@ -0,0 +1,2235 @@ +#!/usr/bin/perl -w +############################################################################## +## sendEmail +## Written by: Brandon Zehm +## +## License: +## sendEmail (hereafter referred to as "program") is free software; +## you can redistribute it and/or modify it under the terms of the GNU General +## Public License as published by the Free Software Foundation; either version +## 2 of the License, or (at your option) any later version. +## When redistributing modified versions of this source code it is recommended +## that that this disclaimer and the above coder's names are included in the +## modified code. +## +## Disclaimer: +## This program is provided with no warranty of any kind, either expressed or +## implied. It is the responsibility of the user (you) to fully research and +## comprehend the usage of this program. As with any tool, it can be misused, +## either intentionally (you're a vandal) or unintentionally (you're a moron). +## THE AUTHOR(S) IS(ARE) NOT RESPONSIBLE FOR ANYTHING YOU DO WITH THIS PROGRAM +## or anything that happens because of your use (or misuse) of this program, +## including but not limited to anything you, your lawyers, or anyone else +## can dream up. And now, a relevant quote directly from the GPL: +## +## NO WARRANTY +## +## 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +## FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +## OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +## PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +## OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +## TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +## PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +## REPAIR OR CORRECTION. +## +############################################################################## +use strict; +use IO::Socket; + + +######################## +## Global Variables ## +######################## + +my %conf = ( + ## General + "programName" => $0, ## The name of this program + "version" => '1.56', ## The version of this program + "authorName" => 'Brandon Zehm', ## Author's Name + "authorEmail" => 'caspian@dotconf.net', ## Author's Email Address + "timezone" => '+0000', ## We always use +0000 for the time zone + "hostname" => 'changeme', ## Used in printmsg() for all output (is updated later in the script). + "debug" => 0, ## Default debug level + "error" => '', ## Error messages will often be stored here + + ## Logging + "stdout" => 1, + "logging" => 0, ## If this is true the printmsg function prints to the log file + "logFile" => '', ## If this is specified (form the command line via -l) this file will be used for logging. + + ## Network + "server" => 'localhost', ## Default SMTP server + "port" => 25, ## Default port + "bindaddr" => '', ## Default local bind address + "alarm" => '', ## Default timeout for connects and reads, this gets set from $opt{'timeout'} + "tls_client" => 0, ## If TLS is supported by the client (us) + "tls_server" => 0, ## If TLS is supported by the remote SMTP server + + ## Email + "delimiter" => "----MIME delimiter for sendEmail-" ## MIME Delimiter + . rand(1000000), ## Add some randomness to the delimiter + "Message-ID" => rand(1000000) . "-sendEmail", ## Message-ID for email header + +); + + +## This hash stores the options passed on the command line via the -o option. +my %opt = ( + ## Addressing + "reply-to" => '', ## Reply-To field + + ## Message + "message-file" => '', ## File to read message body from + "message-header" => '', ## Additional email header line(s) + "message-format" => 'normal', ## If "raw" is specified the message is sent unmodified + "message-charset" => 'iso-8859-1', ## Message character-set + "message-content-type" => 'auto', ## auto, text, html or an actual string to put into the content-type header. + + ## Network + "timeout" => 60, ## Default timeout for connects and reads, this is copied to $conf{'alarm'} later. + "fqdn" => 'changeme', ## FQDN of this machine, used during SMTP communication (is updated later in the script). + + ## eSMTP + "username" => '', ## Username used in SMTP Auth + "password" => '', ## Password used in SMTP Auth + "tls" => 'auto', ## Enable or disable TLS support. Options: auto, yes, no + +); + +## More variables used later in the program +my $SERVER; +my $CRLF = "\015\012"; +my $subject = ''; +my $header = ''; +my $message = ''; +my $from = ''; +my @to = (); +my @cc = (); +my @bcc = (); +my @attachments = (); +my @attachments_names = (); + +## For printing colors to the console +my ${colorRed} = "\033[31;1m"; +my ${colorGreen} = "\033[32;1m"; +my ${colorCyan} = "\033[36;1m"; +my ${colorWhite} = "\033[37;1m"; +my ${colorNormal} = "\033[m"; +my ${colorBold} = "\033[1m"; +my ${colorNoBold} = "\033[0m"; + +## Don't use shell escape codes on Windows systems +if ($^O =~ /win/i) { + ${colorRed} = ${colorGreen} = ${colorCyan} = ${colorWhite} = ${colorNormal} = ${colorBold} = ${colorNoBold} = ""; +} + +## Load IO::Socket::SSL if it's available +eval { require IO::Socket::SSL; }; +if ($@) { $conf{'tls_client'} = 0; } +else { $conf{'tls_client'} = 1; } + + + + + + +############################# +## ## +## FUNCTIONS ## +## ## +############################# + + + + + +############################################################################################### +## Function: initialize () +## +## Does all the script startup jibberish. +## +############################################################################################### +sub initialize { + + ## Set STDOUT to flush immediatly after each print + $| = 1; + + ## Intercept signals + $SIG{'QUIT'} = sub { quit("EXITING: Received SIG$_[0]", 1); }; + $SIG{'INT'} = sub { quit("EXITING: Received SIG$_[0]", 1); }; + $SIG{'KILL'} = sub { quit("EXITING: Received SIG$_[0]", 1); }; + $SIG{'TERM'} = sub { quit("EXITING: Received SIG$_[0]", 1); }; + + ## ALARM and HUP signals are not supported in Win32 + unless ($^O =~ /win/i) { + $SIG{'HUP'} = sub { quit("EXITING: Received SIG$_[0]", 1); }; + $SIG{'ALRM'} = sub { quit("EXITING: Received SIG$_[0]", 1); }; + } + + ## Fixup $conf{'programName'} + $conf{'programName'} =~ s/(.)*[\/,\\]//; + $0 = $conf{'programName'} . " " . join(" ", @ARGV); + + ## Fixup $conf{'hostname'} and $opt{'fqdn'} + if ($opt{'fqdn'} eq 'changeme') { $opt{'fqdn'} = get_hostname(1); } + if ($conf{'hostname'} eq 'changeme') { $conf{'hostname'} = $opt{'fqdn'}; $conf{'hostname'} =~ s/\..*//; } + + return(1); +} + + + + + + + + + + + + + + + +############################################################################################### +## Function: processCommandLine () +## +## Processes command line storing important data in global vars (usually %conf) +## +############################################################################################### +sub processCommandLine { + + + ############################ + ## Process command line ## + ############################ + + my @ARGS = @ARGV; ## This is so later we can re-parse the command line args later if we need to + my $numargv = @ARGS; + help() unless ($numargv); + my $counter = 0; + + for ($counter = 0; $counter < $numargv; $counter++) { + + if ($ARGS[$counter] =~ /^-h$/i) { ## Help ## + help(); + } + + elsif ($ARGS[$counter] eq "") { ## Ignore null arguments + ## Do nothing + } + + elsif ($ARGS[$counter] =~ /^--help/) { ## Topical Help ## + $counter++; + if ($ARGS[$counter] && $ARGS[$counter] !~ /^-/) { + helpTopic($ARGS[$counter]); + } + else { + help(); + } + } + + elsif ($ARGS[$counter] =~ /^-o$/i) { ## Options specified with -o ## + $counter++; + ## Loop through each option passed after the -o + while ($ARGS[$counter] && $ARGS[$counter] !~ /^-/) { + + if ($ARGS[$counter] !~ /(\S+)=(\S.*)/) { + printmsg("WARNING => Name/Value pair [$ARGS[$counter]] is not properly formatted", 0); + printmsg("WARNING => Arguments proceeding -o should be in the form of \"name=value\"", 0); + } + else { + if (exists($opt{$1})) { + if ($1 eq 'message-header') { + $opt{$1} .= $2 . $CRLF; + } + else { + $opt{$1} = $2; + } + printmsg("DEBUG => Assigned \$opt{} key/value: $1 => $2", 3); + } + else { + printmsg("WARNING => Name/Value pair [$ARGS[$counter]] will be ignored: unknown key [$1]", 0); + printmsg("HINT => Try the --help option to find valid command line arguments", 1); + } + } + $counter++; + } $counter--; + } + + elsif ($ARGS[$counter] =~ /^-f$/) { ## From ## + $counter++; + if ($ARGS[$counter] && $ARGS[$counter] !~ /^-/) { $from = $ARGS[$counter]; } + else { printmsg("WARNING => The argument after -f was not an email address!", 0); $counter--; } + } + + elsif ($ARGS[$counter] =~ /^-t$/) { ## To ## + $counter++; + while ($ARGS[$counter] && ($ARGS[$counter] !~ /^-/)) { + if ($ARGS[$counter] =~ /[;,]/) { + push (@to, split(/[;,]/, $ARGS[$counter])); + } + else { + push (@to,$ARGS[$counter]); + } + $counter++; + } $counter--; + } + + elsif ($ARGS[$counter] =~ /^-cc$/) { ## Cc ## + $counter++; + while ($ARGS[$counter] && ($ARGS[$counter] !~ /^-/)) { + if ($ARGS[$counter] =~ /[;,]/) { + push (@cc, split(/[;,]/, $ARGS[$counter])); + } + else { + push (@cc,$ARGS[$counter]); + } + $counter++; + } $counter--; + } + + elsif ($ARGS[$counter] =~ /^-bcc$/) { ## Bcc ## + $counter++; + while ($ARGS[$counter] && ($ARGS[$counter] !~ /^-/)) { + if ($ARGS[$counter] =~ /[;,]/) { + push (@bcc, split(/[;,]/, $ARGS[$counter])); + } + else { + push (@bcc,$ARGS[$counter]); + } + $counter++; + } $counter--; + } + + elsif ($ARGS[$counter] =~ /^-m$/) { ## Message ## + $counter++; + $message = ""; + while ($ARGS[$counter] && $ARGS[$counter] !~ /^-/) { + if ($message) { $message .= " "; } + $message .= $ARGS[$counter]; + $counter++; + } $counter--; + + ## Replace '\n' with $CRLF. + ## This allows newlines with messages sent on the command line + $message =~ s/\\n/$CRLF/g; + } + + elsif ($ARGS[$counter] =~ /^-u$/) { ## Subject ## + $counter++; + $subject = ""; + while ($ARGS[$counter] && $ARGS[$counter] !~ /^-/) { + if ($subject) { $subject .= " "; } + $subject .= $ARGS[$counter]; + $counter++; + } $counter--; + } + + elsif ($ARGS[$counter] =~ /^-s$/) { ## Server ## + $counter++; + if ($ARGS[$counter] && $ARGS[$counter] !~ /^-/) { + $conf{'server'} = $ARGS[$counter]; + if ($conf{'server'} =~ /:/) { ## Port ## + ($conf{'server'},$conf{'port'}) = split(":",$conf{'server'}); + } + } + else { printmsg("WARNING - The argument after -s was not the server!", 0); $counter--; } + } + + elsif ($ARGS[$counter] =~ /^-b$/) { ## Bind Address ## + $counter++; + if ($ARGS[$counter] && $ARGS[$counter] !~ /^-/) { + $conf{'bindaddr'} = $ARGS[$counter]; + } + else { printmsg("WARNING - The argument after -b was not the bindaddr!", 0); $counter--; } + } + + elsif ($ARGS[$counter] =~ /^-a$/) { ## Attachments ## + $counter++; + while ($ARGS[$counter] && ($ARGS[$counter] !~ /^-/)) { + push (@attachments,$ARGS[$counter]); + $counter++; + } $counter--; + } + + elsif ($ARGS[$counter] =~ /^-xu$/) { ## AuthSMTP Username ## + $counter++; + if ($ARGS[$counter] && $ARGS[$counter] !~ /^-/) { + $opt{'username'} = $ARGS[$counter]; + } + else { + printmsg("WARNING => The argument after -xu was not valid username!", 0); + $counter--; + } + } + + elsif ($ARGS[$counter] =~ /^-xp$/) { ## AuthSMTP Password ## + $counter++; + if ($ARGS[$counter] && $ARGS[$counter] !~ /^-/) { + $opt{'password'} = $ARGS[$counter]; + } + else { + printmsg("WARNING => The argument after -xp was not valid password!", 0); + $counter--; + } + } + + elsif ($ARGS[$counter] =~ /^-l$/) { ## Logging ## + $counter++; + $conf{'logging'} = 1; + if ($ARGS[$counter] && $ARGS[$counter] !~ /^-/) { $conf{'logFile'} = $ARGS[$counter]; } + else { printmsg("WARNING - The argument after -l was not the log file!", 0); $counter--; } + } + + elsif ($ARGS[$counter] =~ s/^-v+//i) { ## Verbosity ## + my $tmp = (length($&) - 1); + $conf{'debug'} += $tmp; + } + + elsif ($ARGS[$counter] =~ /^-q$/) { ## Quiet ## + $conf{'stdout'} = 0; + } + + else { + printmsg("Error: \"$ARGS[$counter]\" is not a recognized option!", 0); + help(); + } + + } + + + + + + + + + ################################################### + ## Verify required variables are set correctly ## + ################################################### + + ## Make sure we have something in $conf{hostname} and $opt{fqdn} + if ($opt{'fqdn'} =~ /\./) { + $conf{'hostname'} = $opt{'fqdn'}; + $conf{'hostname'} =~ s/\..*//; + } + + if (!$conf{'server'}) { $conf{'server'} = 'localhost'; } + if (!$conf{'port'}) { $conf{'port'} = 25; } + if (!$from) { + quit("ERROR => You must specify a 'from' field! Try --help.", 1); + } + if ( ((scalar(@to)) + (scalar(@cc)) + (scalar(@bcc))) <= 0) { + quit("ERROR => You must specify at least one recipient via -t, -cc, or -bcc", 1); + } + + ## Make sure email addresses look OK. + foreach my $addr (@to, @cc, @bcc, $from, $opt{'reply-to'}) { + if ($addr) { + if (!returnAddressParts($addr)) { + printmsg("ERROR => Can't use improperly formatted email address: $addr", 0); + printmsg("HINT => Try viewing the extended help on addressing with \"--help addressing\"", 1); + quit("", 1); + } + } + } + + ## Make sure all attachments exist. + foreach my $file (@attachments) { + if ( (! -f $file) or (! -r $file) ) { + printmsg("ERROR => The attachment [$file] doesn't exist!", 0); + printmsg("HINT => Try specifying the full path to the file or reading extended help with \"--help message\"", 1); + quit("", 1); + } + } + + if ($conf{'logging'} and (!$conf{'logFile'})) { + quit("ERROR => You used -l to enable logging but didn't specify a log file!", 1); + } + + if ( $opt{'username'} ) { + if (!$opt{'password'}) { + ## Prompt for a password since one wasn't specified with the -xp option. + $SIG{'ALRM'} = sub { quit("ERROR => Timeout waiting for password inpupt", 1); }; + alarm(60) if ($^O !~ /win/i); ## alarm() doesn't work in win32 + print "Password: "; + $opt{'password'} = ; chomp $opt{'password'}; + if (!$opt{'password'}) { + quit("ERROR => A username for SMTP authentication was specified, but no password!", 1); + } + } + } + + ## Validate the TLS setting + $opt{'tls'} = lc($opt{'tls'}); + if ($opt{'tls'} !~ /^(auto|yes|no)$/) { + quit("ERROR => Invalid TLS setting ($opt{'tls'}). Must be one of auto, yes, or no.", 1); + } + + ## If TLS is set to "yes", make sure sendEmail loaded the libraries needed. + if ($opt{'tls'} eq 'yes' and $conf{'tls_client'} == 0) { + quit("ERROR => No TLS support! SendEmail can't load required libraries. (try installing Net::SSLeay and IO::Socket::SSL)", 1); + } + + ## Return 0 errors + return(0); +} + + + + + + + + + + + + + + + + +## getline($socketRef) +sub getline { + my ($socketRef) = @_; + local ($/) = "\r\n"; + return $$socketRef->getline; +} + + + + +## Receive a (multiline?) SMTP response from ($socketRef) +sub getResponse { + my ($socketRef) = @_; + my ($tmp, $reply); + local ($/) = "\r\n"; + return undef unless defined($tmp = getline($socketRef)); + return("getResponse() socket is not open") unless ($$socketRef->opened); + ## Keep reading lines if it's a multi-line response + while ($tmp =~ /^\d{3}-/o) { + $reply .= $tmp; + return undef unless defined($tmp = getline($socketRef)); + } + $reply .= $tmp; + $reply =~ s/\r?\n$//o; + return $reply; +} + + + + +############################################################################################### +## Function: SMTPchat ( [string $command] ) +## +## Description: Sends $command to the SMTP server (on SERVER) and awaits a successful +## reply form the server. If the server returns an error, or does not reply +## within $conf{'alarm'} seconds an error is generated. +## NOTE: $command is optional, if no command is specified then nothing will +## be sent to the server, but a valid response is still required from the server. +## +## Input: [$command] A (optional) valid SMTP command (ex. "HELO") +## +## +## Output: Returns zero on success, or non-zero on error. +## Error messages will be stored in $conf{'error'} +## A copy of the last SMTP response is stored in the global variable +## $conf{'SMTPchat_response'} +## +## +## Example: SMTPchat ("HELO mail.isp.net"); +############################################################################################### +sub SMTPchat { + my ($command) = @_; + + printmsg("INFO => Sending: \t$command", 1) if ($command); + + ## Send our command + print $SERVER "$command$CRLF" if ($command); + + ## Read a response from the server + $SIG{'ALRM'} = sub { $conf{'error'} = "alarm"; $SERVER->close(); }; + alarm($conf{'alarm'}) if ($^O !~ /win/i); ## alarm() doesn't work in win32; + my $result = $conf{'SMTPchat_response'} = getResponse(\$SERVER); + alarm(0) if ($^O !~ /win/i); ## alarm() doesn't work in win32; + + ## Generate an alert if we timed out + if ($conf{'error'} eq "alarm") { + $conf{'error'} = "ERROR => Timeout while reading from $conf{'server'}:$conf{'port'} There was no response after $conf{'alarm'} seconds."; + return(1); + } + + ## Make sure the server actually responded + if (!$result) { + $conf{'error'} = "ERROR => $conf{'server'}:$conf{'port'} returned a zero byte response to our query."; + return(2); + } + + ## Validate the response + if (evalSMTPresponse($result)) { + ## conf{'error'} will already be set here + return(2); + } + + ## Print the success messsage + printmsg($conf{'error'}, 1); + + ## Return Success + return(0); +} + + + + + + + + + + + + +############################################################################################### +## Function: evalSMTPresponse (string $message ) +## +## Description: Searches $message for either an SMTP success or error code, and returns +## 0 on success, and the actual error code on error. +## +## +## Input: $message Data received from a SMTP server (ex. "220 +## +## +## Output: Returns zero on success, or non-zero on error. +## Error messages will be stored in $conf{'error'} +## +## +## Example: SMTPchat ("HELO mail.isp.net"); +############################################################################################### +sub evalSMTPresponse { + my ($message) = @_; + + ## Validate input + if (!$message) { + $conf{'error'} = "ERROR => No message was passed to evalSMTPresponse(). What happened?"; + return(1) + } + + printmsg("DEBUG => evalSMTPresponse() - Checking for SMTP success or error status in the message: $message ", 3); + + ## Look for a SMTP success code + if ($message =~ /^([23]\d\d)/) { + printmsg("DEBUG => evalSMTPresponse() - Found SMTP success code: $1", 2); + $conf{'error'} = "SUCCESS => Received: \t$message"; + return(0); + } + + ## Look for a SMTP error code + if ($message =~ /^([45]\d\d)/) { + printmsg("DEBUG => evalSMTPresponse() - Found SMTP error code: $1", 2); + $conf{'error'} = "ERROR => Received: \t$message"; + return($1); + } + + ## If no SMTP codes were found return an error of 1 + $conf{'error'} = "ERROR => Received a message with no success or error code. The message received was: $message"; + return(2); + +} + + + + + + + + + + +######################################################### +# SUB: &return_month(0,1,etc) +# returns the name of the month that corrosponds +# with the number. returns 0 on error. +######################################################### +sub return_month { + my $x = $_[0]; + if ($x == 0) { return 'Jan'; } + if ($x == 1) { return 'Feb'; } + if ($x == 2) { return 'Mar'; } + if ($x == 3) { return 'Apr'; } + if ($x == 4) { return 'May'; } + if ($x == 5) { return 'Jun'; } + if ($x == 6) { return 'Jul'; } + if ($x == 7) { return 'Aug'; } + if ($x == 8) { return 'Sep'; } + if ($x == 9) { return 'Oct'; } + if ($x == 10) { return 'Nov'; } + if ($x == 11) { return 'Dec'; } + return (0); +} + + + + + + + + + + + + + + + + +######################################################### +# SUB: &return_day(0,1,etc) +# returns the name of the day that corrosponds +# with the number. returns 0 on error. +######################################################### +sub return_day { + my $x = $_[0]; + if ($x == 0) { return 'Sun'; } + if ($x == 1) { return 'Mon'; } + if ($x == 2) { return 'Tue'; } + if ($x == 3) { return 'Wed'; } + if ($x == 4) { return 'Thu'; } + if ($x == 5) { return 'Fri'; } + if ($x == 6) { return 'Sat'; } + return (0); +} + + + + + + + + + + + + + + + + +############################################################################################### +## Function: returnAddressParts(string $address) +## +## Description: Returns a two element array containing the "Name" and "Address" parts of +## an email address. +## +## Example: "Brandon Zehm " +## would return: ("Brandon Zehm", "caspian@dotconf.net"); +## +## "caspian@dotconf.net" +## would return: ("caspian@dotconf.net", "caspian@dotconf.net") +############################################################################################### +sub returnAddressParts { + my $input = $_[0]; + my $name = ""; + my $address = ""; + + ## Make sure to fail if it looks totally invalid + if ($input !~ /(\S+\@\S+)/) { + $conf{'error'} = "ERROR => The address [$input] doesn't look like a valid email address, ignoring it"; + return(undef()); + } + + ## Check 1, should find addresses like: "Brandon Zehm " + elsif ($input =~ /^\s*(\S(.*\S)?)\s*<(\S+\@\S+)>/o) { + ($name, $address) = ($1, $3); + } + + ## Otherwise if that failed, just get the address: + elsif ($input =~ /<(\S+\@\S+)>/o) { + $name = $address = $1; + } + + ## Or maybe it was formatted this way: caspian@dotconf.net + elsif ($input =~ /(\S+\@\S+)/o) { + $name = $address = $1; + } + + ## Something stupid happened, just return an error. + unless ($name and $address) { + printmsg("ERROR => Couldn't parse the address: $input", 0); + printmsg("HINT => If you think this should work, consider reporting this as a bug to $conf{'authorEmail'}", 1); + return(undef()); + } + + ## Make sure there aren't invalid characters in the address, and return it. + my $ctrl = '\000-\037'; + my $nonASCII = '\x80-\xff'; + if ($address =~ /[<> ,;:"'\[\]\\$ctrl$nonASCII]/) { + printmsg("WARNING => The address [$address] seems to contain invalid characters: continuing anyway", 0); + } + return($name, $address); +} + + + + + + + + + + + + + + + + +############################################################################################### +## Function: base64_encode(string $data, bool $chunk) +## +## Description: Returns $data as a base64 encoded string. +## If $chunk is true, the encoded data is returned in 76 character long lines +## with the final \CR\LF removed. +## +## Note: This is only used from the smtp auth section of code. +## At some point it would be nice to merge the code that encodes attachments and this. +############################################################################################### +sub base64_encode { + my $data = $_[0]; + my $chunk = $_[1]; + my $tmp = ''; + my $base64 = ''; + my $CRLF = "\r\n"; + + ################################### + ## Convert binary data to base64 ## + ################################### + while ($data =~ s/(.{45})//s) { ## Get 45 bytes from the binary string + $tmp = substr(pack('u', $&), 1); ## Convert the binary to uuencoded text + chop($tmp); + $tmp =~ tr|` -_|AA-Za-z0-9+/|; ## Translate from uuencode to base64 + $base64 .= $tmp; + } + + ########################## + ## Encode the leftovers ## + ########################## + my $padding = ""; + if ( ($data) and (length($data) > 0) ) { + $padding = (3 - length($data) % 3) % 3; ## Set flag if binary data isn't divisible by 3 + $tmp = substr(pack('u', $data), 1); ## Convert the binary to uuencoded text + chop($tmp); + $tmp =~ tr|` -_|AA-Za-z0-9+/|; ## Translate from uuencode to base64 + $base64 .= $tmp; + } + + ############################ + ## Fix padding at the end ## + ############################ + $data = ''; + $base64 =~ s/.{$padding}$/'=' x $padding/e if $padding; ## Fix the end padding if flag (from above) is set + if ($chunk) { + while ($base64 =~ s/(.{1,76})//s) { ## Put $CRLF after each 76 characters + $data .= "$1$CRLF"; + } + } + else { + $data = $base64; + } + + ## Remove any trailing CRLF's + $data =~ s/(\r|\n)*$//s; + return($data); +} + + + + + + + + + +######################################################### +# SUB: send_attachment("/path/filename") +# Sends the mime headers and base64 encoded file +# to the email server. +######################################################### +sub send_attachment { + my ($filename) = @_; ## Get filename passed + my (@fields, $y, $filename_name, $encoding, ## Local variables + @attachlines, $content_type); + my $bin = 1; + + @fields = split(/\/|\\/, $filename); ## Get the actual filename without the path + $filename_name = pop(@fields); + push @attachments_names, $filename_name; ## FIXME: This is only used later for putting in the log file + + ########################## + ## Autodetect Mime Type ## + ########################## + + @fields = split(/\./, $filename_name); + $encoding = $fields[$#fields]; + + if ($encoding =~ /txt|text|log|conf|^c$|cpp|^h$|inc|m3u/i) { $content_type = 'text/plain'; } + elsif ($encoding =~ /html|htm|shtml|shtm|asp|php|cfm/i) { $content_type = 'text/html'; } + elsif ($encoding =~ /sh$/i) { $content_type = 'application/x-sh'; } + elsif ($encoding =~ /tcl/i) { $content_type = 'application/x-tcl'; } + elsif ($encoding =~ /pl$/i) { $content_type = 'application/x-perl'; } + elsif ($encoding =~ /js$/i) { $content_type = 'application/x-javascript'; } + elsif ($encoding =~ /man/i) { $content_type = 'application/x-troff-man'; } + elsif ($encoding =~ /gif/i) { $content_type = 'image/gif'; } + elsif ($encoding =~ /jpg|jpeg|jpe|jfif|pjpeg|pjp/i) { $content_type = 'image/jpeg'; } + elsif ($encoding =~ /tif|tiff/i) { $content_type = 'image/tiff'; } + elsif ($encoding =~ /xpm/i) { $content_type = 'image/x-xpixmap'; } + elsif ($encoding =~ /bmp/i) { $content_type = 'image/x-MS-bmp'; } + elsif ($encoding =~ /pcd/i) { $content_type = 'image/x-photo-cd'; } + elsif ($encoding =~ /png/i) { $content_type = 'image/png'; } + elsif ($encoding =~ /aif|aiff/i) { $content_type = 'audio/x-aiff'; } + elsif ($encoding =~ /wav/i) { $content_type = 'audio/x-wav'; } + elsif ($encoding =~ /mp2|mp3|mpa/i) { $content_type = 'audio/x-mpeg'; } + elsif ($encoding =~ /ra$|ram/i) { $content_type = 'audio/x-pn-realaudio'; } + elsif ($encoding =~ /mpeg|mpg/i) { $content_type = 'video/mpeg'; } + elsif ($encoding =~ /mov|qt$/i) { $content_type = 'video/quicktime'; } + elsif ($encoding =~ /avi/i) { $content_type = 'video/x-msvideo'; } + elsif ($encoding =~ /zip/i) { $content_type = 'application/x-zip-compressed'; } + elsif ($encoding =~ /tar/i) { $content_type = 'application/x-tar'; } + elsif ($encoding =~ /jar/i) { $content_type = 'application/java-archive'; } + elsif ($encoding =~ /exe|bin/i) { $content_type = 'application/octet-stream'; } + elsif ($encoding =~ /ppt|pot|ppa|pps|pwz/i) { $content_type = 'application/vnd.ms-powerpoint'; } + elsif ($encoding =~ /mdb|mda|mde/i) { $content_type = 'application/vnd.ms-access'; } + elsif ($encoding =~ /xls|xlt|xlm|xld|xla|xlc|xlw|xll/i) { $content_type = 'application/vnd.ms-excel'; } + elsif ($encoding =~ /doc|dot/i) { $content_type = 'application/msword'; } + elsif ($encoding =~ /rtf/i) { $content_type = 'application/rtf'; } + elsif ($encoding =~ /pdf/i) { $content_type = 'application/pdf'; } + elsif ($encoding =~ /tex/i) { $content_type = 'application/x-tex'; } + elsif ($encoding =~ /latex/i) { $content_type = 'application/x-latex'; } + elsif ($encoding =~ /vcf/i) { $content_type = 'application/x-vcard'; } + else { $content_type = 'application/octet-stream'; } + + + ############################ + ## Process the attachment ## + ############################ + + ##################################### + ## Generate and print MIME headers ## + ##################################### + + $y = "$CRLF--$conf{'delimiter'}$CRLF"; + $y .= "Content-Type: $content_type;$CRLF"; + $y .= " name=\"$filename_name\"$CRLF"; + $y .= "Content-Transfer-Encoding: base64$CRLF"; + $y .= "Content-Disposition: attachment; filename=\"$filename_name\"$CRLF"; + $y .= "$CRLF"; + print $SERVER $y; + + + ########################################################### + ## Convert the file to base64 and print it to the server ## + ########################################################### + + open (FILETOATTACH, $filename) || do { + printmsg("ERROR => Opening the file [$filename] for attachment failed with the error: $!", 0); + return(1); + }; + binmode(FILETOATTACH); ## Hack to make Win32 work + + my $res = ""; + my $tmp = ""; + my $base64 = ""; + while () { ## Read a line from the (binary) file + $res .= $_; + + ################################### + ## Convert binary data to base64 ## + ################################### + while ($res =~ s/(.{45})//s) { ## Get 45 bytes from the binary string + $tmp = substr(pack('u', $&), 1); ## Convert the binary to uuencoded text + chop($tmp); + $tmp =~ tr|` -_|AA-Za-z0-9+/|; ## Translate from uuencode to base64 + $base64 .= $tmp; + } + + ################################ + ## Print chunks to the server ## + ################################ + while ($base64 =~ s/(.{76})//s) { + print $SERVER "$1$CRLF"; + } + + } + + ################################### + ## Encode and send the leftovers ## + ################################### + my $padding = ""; + if ( ($res) and (length($res) >= 1) ) { + $padding = (3 - length($res) % 3) % 3; ## Set flag if binary data isn't divisible by 3 + $res = substr(pack('u', $res), 1); ## Convert the binary to uuencoded text + chop($res); + $res =~ tr|` -_|AA-Za-z0-9+/|; ## Translate from uuencode to base64 + } + + ############################ + ## Fix padding at the end ## + ############################ + $res = $base64 . $res; ## Get left overs from above + $res =~ s/.{$padding}$/'=' x $padding/e if $padding; ## Fix the end padding if flag (from above) is set + if ($res) { + while ($res =~ s/(.{1,76})//s) { ## Send it to the email server. + print $SERVER "$1$CRLF"; + } + } + + close (FILETOATTACH) || do { + printmsg("ERROR - Closing the filehandle for file [$filename] failed with the error: $!", 0); + return(2); + }; + + ## Return 0 errors + return(0); + +} + + + + + + + + + +############################################################################################### +## Function: $string = get_hostname (boot $fqdn) +## +## Description: Tries really hard to returns the short (or FQDN) hostname of the current +## system. Uses techniques and code from the Sys-Hostname module. +## +## Input: $fqdn A true value (1) will cause this function to return a FQDN hostname +## rather than a short hostname. +## +## Output: Returns a string +############################################################################################### +sub get_hostname { + ## Assign incoming parameters to variables + my ( $fqdn ) = @_; + my $hostname = ""; + + ## STEP 1: Get short hostname + + ## Load Sys::Hostname if it's available + eval { require Sys::Hostname; }; + unless ($@) { + $hostname = Sys::Hostname::hostname(); + } + + ## If that didn't get us a hostname, try a few other things + else { + ## Windows systems + if ($^O !~ /win/i) { + if ($ENV{'COMPUTERNAME'}) { $hostname = $ENV{'COMPUTERNAME'}; } + if (!$hostname) { $hostname = gethostbyname('localhost'); } + if (!$hostname) { chomp($hostname = `hostname 2> NUL`) }; + } + + ## Unix systems + else { + local $ENV{PATH} = '/usr/bin:/bin:/usr/sbin:/sbin'; ## Paranoia + + ## Try the environment first (Help! What other variables could/should I be checking here?) + if ($ENV{'HOSTNAME'}) { $hostname = $ENV{'HOSTNAME'}; } + + ## Try the hostname command + eval { local $SIG{__DIE__}; local $SIG{CHLD}; $hostname = `hostname 2>/dev/null`; chomp($hostname); } || + + ## Try POSIX::uname(), which strictly can't be expected to be correct + eval { local $SIG{__DIE__}; require POSIX; $hostname = (POSIX::uname())[1]; } || + + ## Try the uname command + eval { local $SIG{__DIE__}; $hostname = `uname -n 2>/dev/null`; chomp($hostname); }; + + } + + ## If we can't find anything else, return "" + if (!$hostname) { + print "WARNING => No hostname could be determined, please specify one with -o fqdn=FQDN option!\n"; + return("unknown"); + } + } + + ## Return the short hostname + unless ($fqdn) { + $hostname =~ s/\..*//; + return(lc($hostname)); + } + + ## STEP 2: Determine the FQDN + + ## First, if we already have one return it. + if ($hostname =~ /\w\.\w/) { return(lc($hostname)); } + + ## Next try using + eval { $fqdn = (gethostbyname($hostname))[0]; }; + if ($fqdn) { return(lc($fqdn)); } + return(lc($hostname)); +} + + + + + + + + +############################################################################################### +## Function: printmsg (string $message, int $level) +## +## Description: Handles all messages - printing them to the screen only if the messages +## $level is >= the global debug level. If $conf{'logFile'} is defined it +## will also log the message to that file. +## +## Input: $message A message to be printed, logged, etc. +## $level The debug level of the message. If +## not defined 0 will be assumed. 0 is +## considered a normal message, 1 and +## higher is considered a debug message. +## +## Output: Prints to STDOUT +## +## Assumptions: $conf{'hostname'} should be the name of the computer we're running on. +## $conf{'stdout'} should be set to 1 if you want to print to stdout +## $conf{'logFile'} should be a full path to a log file if you want that +## $conf{'debug'} should be an integer between 0 and 10. +## +## Example: printmsg("WARNING: We believe in generic error messages... NOT!", 0); +############################################################################################### +sub printmsg { + ## Assign incoming parameters to variables + my ( $message, $level ) = @_; + + ## Make sure input is sane + $level = 0 if (!defined($level)); + $message =~ s/\s+$//sgo; + $message =~ s/\r?\n/, /sgo; + + ## Continue only if the debug level of the program is >= message debug level. + if ($conf{'debug'} >= $level) { + + ## Get the date in the format: Dec 3 11:14:04 + my ($sec, $min, $hour, $mday, $mon) = localtime(); + $mon = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')[$mon]; + my $date = sprintf("%s %02d %02d:%02d:%02d", $mon, $mday, $hour, $min, $sec); + + ## Print to STDOUT always if debugging is enabled, or if conf{stdout} is true. + if ( ($conf{'debug'} >= 1) or ($conf{'stdout'} == 1) ) { + print "$date $conf{'hostname'} $conf{'programName'}\[$$\]: $message\n"; + } + + ## Print to the log file if $conf{'logging'} is true + if ($conf{'logFile'}) { + if (openLogFile($conf{'logFile'})) { $conf{'logFile'} = ""; printmsg("ERROR => Opening the file [$conf{'logFile'}] for appending returned the error: $!", 1); } + print LOGFILE "$date $conf{'hostname'} $conf{'programName'}\[$$\]: $message\n"; + } + + } + + ## Return 0 errors + return(0); +} + + + + + + + + + + + + +############################################################################################### +## FUNCTION: +## openLogFile ( $filename ) +## +## +## DESCRIPTION: +## Opens the file $filename and attaches it to the filehandle "LOGFILE". Returns 0 on success +## and non-zero on failure. Error codes are listed below, and the error message gets set in +## global variable $!. +## +## +## Example: +## openFile ("/var/log/sendEmail.log"); +## +############################################################################################### +sub openLogFile { + ## Get the incoming filename + my $filename = $_[0]; + + ## Make sure our file exists, and if the file doesn't exist then create it + if ( ! -f $filename ) { + print STDERR "NOTICE: The log file [$filename] does not exist. Creating it now with mode [0600].\n" if ($conf{'stdout'}); + open (LOGFILE, ">>$filename"); + close LOGFILE; + chmod (0600, $filename); + } + + ## Now open the file and attach it to a filehandle + open (LOGFILE,">>$filename") or return (1); + + ## Put the file into non-buffering mode + select LOGFILE; + $| = 1; + select STDOUT; + + ## Return success + return(0); +} + + + + + + + + +############################################################################################### +## Function: read_file (string $filename) +## +## Description: Reads the contents of a file and returns a two part array: +## ($status, $file-contents) +## $status is 0 on success, non-zero on error. +## +## Example: ($status, $file) = read_file("/etc/passwd"); +############################################################################################### +sub read_file { + my ( $filename ) = @_; + + ## If the value specified is a file, load the file's contents + if ( (-e $filename and -r $filename) ) { + my $FILE; + if(!open($FILE, ' ' . $filename)) { + return((1, "")); + } + my $file = ''; + while (<$FILE>) { + $file .= $_; + } + ## Strip an ending \r\n + $file =~ s/\r?\n$//os; + } + return((1, "")); +} + + + + + + + + + +############################################################################################### +## Function: quit (string $message, int $errorLevel) +## +## Description: Exits the program, optionally printing $message. It +## returns an exit error level of $errorLevel to the +## system (0 means no errors, and is assumed if empty.) +## +## Example: quit("Exiting program normally", 0); +############################################################################################### +sub quit { + my ( $message, $errorLevel ) = @_; + $errorLevel = 0 if (!defined($errorLevel)); + + ## Print exit message + if ($message) { + printmsg($message, 0); + } + + ## Exit + exit($errorLevel); +} + + + + + + + + + + + + +############################################################################################### +## Function: help () +## +## Description: For all those newbies ;) +## Prints a help message and exits the program. +## +############################################################################################### +sub help { +exit(1) if (!$conf{'stdout'}); +print <${colorNoBold} + +Synopsis: $conf{'programName'} -f ADDRESS [options] + + ${colorRed}Required:${colorNormal} + -f ADDRESS from (sender) email address + * At least one recipient required via -t, -cc, or -bcc + * Message body required via -m, STDIN, or -o message-file=FILE + + ${colorGreen}Common:${colorNormal} + -t ADDRESS [ADDR ...] to email address(es) + -u SUBJECT message subject + -m MESSAGE message body + -s SERVER[:PORT] smtp mail relay, default is $conf{'server'}:$conf{'port'} + + ${colorGreen}Optional:${colorNormal} + -a FILE [FILE ...] file attachment(s) + -cc ADDRESS [ADDR ...] cc email address(es) + -bcc ADDRESS [ADDR ...] bcc email address(es) + -xu USERNAME username for SMTP authentication + -xp PASSWORD password for SMTP authentication + + ${colorGreen}Paranormal:${colorNormal} + -b BINDADDR[:PORT] local host bind address + -l LOGFILE log to the specified file + -v verbosity, use multiple times for greater effect + -q be quiet (i.e. no STDOUT output) + -o NAME=VALUE advanced options, for details try: --help misc + -o message-content-type= + -o message-file=FILE -o message-format=raw + -o message-header=HEADER -o message-charset=CHARSET + -o reply-to=ADDRESS -o timeout=SECONDS + -o username=USERNAME -o password=PASSWORD + -o tls= -o fqdn=FQDN + + + ${colorGreen}Help:${colorNormal} + --help the helpful overview you're reading now + --help addressing explain addressing and related options + --help message explain message body input and related options + --help networking explain -s, -b, etc + --help output explain logging and other output options + --help misc explain -o options, TLS, SMTP auth, and more + +EOM +exit(1); +} + + + + + + + + + +############################################################################################### +## Function: helpTopic ($topic) +## +## Description: For all those newbies ;) +## Prints a help message and exits the program. +## +############################################################################################### +sub helpTopic { + exit(1) if (!$conf{'stdout'}); + my ($topic) = @_; + + CASE: { + + + + +## ADDRESSING + ($topic eq 'addressing') && do { + print <" + Just Address: "john.doe\@gmail.com" + +The "Full Name" method is useful if you want a name, rather than a plain +email address, to be displayed in the recipient's From, To, or Cc fields +when they view the message. + + +${colorGreen}Multiple Recipients${colorNormal} +The -t, -cc, and -bcc options each accept multiple addresses. They may be +specified by separating them by either a white space, comma, or semi-colon +separated list. You may also specify the -t, -cc, and -bcc options multiple +times, each occurance will append the new recipients to the respective list. + +Examples: +(I used "-t" in these examples, but it can be "-cc" or "-bcc" as well) + + * Space separated list: + -t jane.doe\@yahoo.com "John Doe " + + * Semi-colon separated list: + -t "jane.doe\@yahoo.com; John Doe " + + * Comma separated list: + -t "jane.doe\@yahoo.com, John Doe " + + * Multiple -t, -cc, or -bcc options: + -t "jane.doe\@yahoo.com" -t "John Doe " + + +EOM + last CASE; + }; + + + + + + +## MESSAGE + ($topic eq 'message') && do { + print < + -o message-header=EMAIL HEADER + -o message-charset=CHARSET + -o message-format=raw + +-u SUBJECT + This option allows you to specify the subject for your email message. + It is not required (anymore) that the subject be quoted, although it + is recommended. The subject will be read until an argument starting + with a hyphen (-) is found. + Examples: + -u "Contact information while on vacation" + -u New Microsoft vulnerability discovered + +-m MESSAGE + This option is one of three methods that allow you to specify the message + body for your email. The message may be specified on the command line + with this -m option, read from a file with the -o message-file=FILE + option, or read from STDIN if neither of these options are present. + + It is not required (anymore) that the message be quoted, although it is + recommended. The message will be read until an argument starting with a + hyphen (-) is found. + Examples: + -m "See you in South Beach, Hawaii. -Todd" + -m Please ensure that you upgrade your systems right away + + Multi-line message bodies may be specified with the -m option by putting + a "\\n" into the message. Example: + -m "This is line 1.\\nAnd this is line 2." + + HTML messages are supported, simply begin your message with "" and + sendEmail will properly label the mime header so MUAs properly render + the message. It is currently not possible without "-o message-format=raw" + to send a message with both text and html parts with sendEmail. + +-o message-file=FILE + This option is one of three methods that allow you to specify the message + body for your email. To use this option simply specify a text file + containing the body of your email message. Examples: + -o message-file=/root/message.txt + -o message-file="C:\\Program Files\\output.txt" + +-o message-content-type= + This option allows you to specify the content-type of the email. If your + email message is an html message but is being displayed as a text message + just add "-o message-content-type=html" to the command line to force it + to display as an html message. This actually just changes the Content-Type: + header. Advanced users will be happy to know that if you specify anything + other than the three options listed above it will use that as the vaule + for the Content-Type header. + +-o message-header=EMAIL HEADER + This option allows you to specify additional email headers to be included. + To add more than one message header simply use this option on the command + line more than once. If you specify a message header that sendEmail would + normally generate the one you specified will be used in it's place. + Do not use this unless you know what you are doing! + Example: + To scare a Microsoft Outlook user you may want to try this: + -o message-header="X-Message-Flag: Message contains illegal content" + Example: + To request a read-receipt try this: + -o message-header="Disposition-Notification-To: " + Example: + To set the message priority try this: + -o message-header="X-Priority: 1" + Priority reference: 1=highest, 2=high, 3=normal, 4=low, 5=lowest + +-o message-charset=CHARSET + This option allows you to specify the character-set for the message body. + The default is iso-8859-1. + +-o message-format=raw + This option instructs sendEmail to assume the message (specified with -m, + read from STDIN, or read from the file specified in -o message-file=FILE) + is already a *complete* email message. SendEmail will not generate any + headers and will transmit the message as-is to the remote SMTP server. + Due to the nature of this option the following command line options will + be ignored when this one is used: + -u SUBJECT + -o message-header=EMAIL HEADER + -o message-charset=CHARSET + -a ATTACHMENT + + +${colorGreen}The Message Body${colorNormal} +The email message body may be specified in one of three ways: + 1) Via the -m MESSAGE command line option. + Example: + -m "This is the message body" + + 2) By putting the message body in a file and using the -o message-file=FILE + command line option. + Example: + -o message-file=/root/message.txt + + 3) By piping the message body to sendEmail when nither of the above command + line options were specified. + Example: + grep "ERROR" /var/log/messages | sendEmail -t you\@domain.com ... + +If the message body begins with "" then the message will be treated as +an HTML message and the MIME headers will be written so that a HTML capable +email client will display the message in it's HTML form. +Any of the above methods may be used with the -o message-format=raw option +to deliver an already complete email message. + + +EOM + last CASE; + }; + + + + + + +## MISC + ($topic eq 'misc') && do { + print < + -o timeout=SECONDS + -o fqdn=FQDN + +-a ATTACHMENT [ATTACHMENT ...] + This option allows you to attach any number of files to your email message. + To specify more than one attachment, simply separate each filename with a + space. Example: -a file1.txt file2.txt file3.txt + +-xu USERNAME + Alias for -o username=USERNAME + +-xp PASSWORD + Alias for -o password=PASSWORD + +-o username=USERNAME (synonym for -xu) + These options allow specification of a username to be used with SMTP + servers that require authentication. If a username is specified but a + password is not, you will be prompted to enter one at runtime. + +-o password=PASSWORD (synonym for -xp) + These options allow specification of a password to be used with SMTP + servers that require authentication. If a username is specified but a + password is not, you will be prompted to enter one at runtime. + +-o tls= + This option allows you to specify if TLS (SSL for SMTP) should be enabled + or disabled. The default, auto, will use TLS automatically if your perl + installation has the IO::Socket::SSL and Net::SSLeay modules available, + and if the remote SMTP server supports TLS. To require TLS for message + delivery set this to yes. To disable TLS support set this to no. A debug + level of one or higher will reveal details about the status of TLS. + +-o timeout=SECONDS + This option sets the timeout value in seconds used for all network reads, + writes, and a few other things. + +-o fqdn=FQDN + This option sets the Fully Qualified Domain Name used during the initial + SMTP greeting. Normally this is automatically detected, but in case you + need to manually set it for some reason or get a warning about detection + failing, you can use this to override the default. + + +EOM + last CASE; + }; + + + + + + +## NETWORKING + ($topic eq 'networking') && do { + print < + -o timeout=SECONDS + +-s SERVER[:PORT] + This option allows you to specify the SMTP server sendEmail should + connect to to deliver your email message to. If this option is not + specified sendEmail will try to connect to localhost:25 to deliver + the message. THIS IS MOST LIKELY NOT WHAT YOU WANT, AND WILL LIKELY + FAIL unless you have a email server (commonly known as an MTA) running + on your computer! + Typically you will need to specify your company or ISP's email server. + For example, if you use CableOne you will need to specify: + -s mail.cableone.net + If you have your own email server running on port 300 you would + probably use an option like this: + -s myserver.mydomain.com:300 + If you're a GMail user try: + -s smtp.gmail.com:587 -xu me\@gmail.com -xp PASSWD + +-b BINDADDR[:PORT] + This option allows you to specify the local IP address (and optional + tcp port number) for sendEmail to bind to when connecting to the remote + SMTP server. This useful for people who need to send an email from a + specific network interface or source address and are running sendEmail on + a firewall or other host with several network interfaces. + +-o tls= + This option allows you to specify if TLS (SSL for SMTP) should be enabled + or disabled. The default, auto, will use TLS automatically if your perl + installation has the IO::Socket::SSL and Net::SSLeay modules available, + and if the remote SMTP server supports TLS. To require TLS for message + delivery set this to yes. To disable TLS support set this to no. A debug + level of one or higher will reveal details about the status of TLS. + +-o timeout=SECONDS + This option sets the timeout value in seconds used for all network reads, + writes, and a few other things. + + +EOM + last CASE; + }; + + + + + + +## OUTPUT + ($topic eq 'output') && do { + print < The help topic specified is not valid!", 1); + }; + +exit(1); +} + + + + + + + + + + + + + + + + + + + + + + +############################# +## ## +## MAIN PROGRAM ## +## ## +############################# + + +## Initialize +initialize(); + +## Process Command Line +processCommandLine(); +$conf{'alarm'} = $opt{'timeout'}; + +## Abort program after $conf{'alarm'} seconds to avoid infinite hangs +alarm($conf{'alarm'}) if ($^O !~ /win/i); ## alarm() doesn't work in win32 + + + + +################################################### +## Read $message from STDIN if -m was not used ## +################################################### + +if (!($message)) { + ## Read message body from a file specified with -o message-file= + if ($opt{'message-file'}) { + if (! -e $opt{'message-file'}) { + printmsg("ERROR => Message body file specified [$opt{'message-file'}] does not exist!", 0); + printmsg("HINT => 1) check spelling of your file; 2) fully qualify the path; 3) doubble quote it", 1); + quit("", 1); + } + if (! -r $opt{'message-file'}) { + printmsg("ERROR => Message body file specified can not be read due to restricted permissions!", 0); + printmsg("HINT => Check permissions on file specified to ensure it can be read", 1); + quit("", 1); + } + if (!open(MFILE, "< " . $opt{'message-file'})) { + printmsg("ERROR => Error opening message body file [$opt{'message-file'}]: $!", 0); + quit("", 1); + } + while () { + $message .= $_; + } + close(MFILE); + } + + ## Read message body from STDIN + else { + alarm($conf{'alarm'}) if ($^O !~ /win/i); ## alarm() doesn't work in win32 + if ($conf{'stdout'}) { + print "Reading message body from STDIN because the '-m' option was not used.\n"; + print "If you are manually typing in a message:\n"; + print " - First line must be received within $conf{'alarm'} seconds.\n" if ($^O !~ /win/i); + print " - End manual input with a CTRL-D on its own line.\n\n" if ($^O !~ /win/i); + print " - End manual input with a CTRL-Z on its own line.\n\n" if ($^O =~ /win/i); + } + while () { ## Read STDIN into $message + $message .= $_; + alarm(0) if ($^O !~ /win/i); ## Disable the alarm since at least one line was received + } + printmsg("Message input complete.", 0); + } +} + +## Replace bare LF's with CRLF's (\012 should always have \015 with it) +$message =~ s/(\015)?(\012|$)/\015\012/g; + +## Replace bare CR's with CRLF's (\015 should always have \012 with it) +$message =~ s/(\015)(\012|$)?/\015\012/g; + +## Check message for bare periods and encode them +$message =~ s/(^|$CRLF)(\.{1})($CRLF|$)/$1.$2$3/g; + +## Get the current date for the email header +my ($sec,$min,$hour,$mday,$mon,$year,$day) = gmtime(); +$year += 1900; $mon = return_month($mon); $day = return_day($day); +my $date = sprintf("%s, %s %s %d %.2d:%.2d:%.2d %s",$day, $mday, $mon, $year, $hour, $min, $sec, $conf{'timezone'}); + + + + +################################## +## Connect to the SMTP server ## +################################## +printmsg("DEBUG => Connecting to $conf{'server'}:$conf{'port'}", 1); +$SIG{'ALRM'} = sub { + printmsg("ERROR => Timeout while connecting to $conf{'server'}:$conf{'port'} There was no response after $conf{'alarm'} seconds.", 0); + printmsg("HINT => Try specifying a different mail relay with the -s option.", 1); + quit("", 1); +}; +alarm($conf{'alarm'}) if ($^O !~ /win/i); ## alarm() doesn't work in win32; +$SERVER = IO::Socket::INET->new( PeerAddr => $conf{'server'}, + PeerPort => $conf{'port'}, + LocalAddr => $conf{'bindaddr'}, + Proto => 'tcp', + Autoflush => 1, + timeout => $conf{'alarm'}, +); +alarm(0) if ($^O !~ /win/i); ## alarm() doesn't work in win32; + +## Make sure we got connected +if ( (!$SERVER) or (!$SERVER->opened()) ) { + printmsg("ERROR => Connection attempt to $conf{'server'}:$conf{'port'} failed: $@", 0); + printmsg("HINT => Try specifying a different mail relay with the -s option.", 1); + quit("", 1); +} + +## Save our IP address for later +$conf{'ip'} = $SERVER->sockhost(); +printmsg("DEBUG => My IP address is: $conf{'ip'}", 1); + + + + + + + +######################### +## Do the SMTP Dance ## +######################### + +## Read initial greeting to make sure we're talking to a live SMTP server +if (SMTPchat()) { quit($conf{'error'}, 1); } + +## We're about to use $opt{'fqdn'}, make sure it isn't empty +if (!$opt{'fqdn'}) { + ## Ok, that means we couldn't get a hostname, how about using the IP address for the HELO instead + $opt{'fqdn'} = "[" . $conf{'ip'} . "]"; +} + +## EHLO +if (SMTPchat('EHLO ' . $opt{'fqdn'})) { + printmsg($conf{'error'}, 0); + printmsg("NOTICE => EHLO command failed, attempting HELO instead"); + if (SMTPchat('HELO ' . $opt{'fqdn'})) { quit($conf{'error'}, 1); } + if ( $opt{'username'} and $opt{'password'} ) { + printmsg("WARNING => The mail server does not support SMTP authentication!", 0); + } +} +else { + + ## Determin if the server supports TLS + if ($conf{'SMTPchat_response'} =~ /STARTTLS/) { + $conf{'tls_server'} = 1; + printmsg("DEBUG => The remote SMTP server supports TLS :)", 2); + } + else { + $conf{'tls_server'} = 0; + printmsg("DEBUG => The remote SMTP server does NOT support TLS :(", 2); + } + + ## Start TLS if possible + if ($conf{'tls_server'} == 1 and $conf{'tls_client'} == 1 and $opt{'tls'} =~ /^(yes|auto)$/) { + printmsg("DEBUG => Starting TLS", 2); + if (SMTPchat('STARTTLS')) { quit($conf{'error'}, 1); } + if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv23:!SSLv3:!SSLv2', , SSL_verify_mode => 0)) { + quit("ERROR => TLS setup failed: " . IO::Socket::SSL::errstr(), 1); + } + printmsg("DEBUG => TLS: Using cipher: ". $SERVER->get_cipher(), 3); + printmsg("DEBUG => TLS session initialized :)", 1); + + ## Restart our SMTP session + if (SMTPchat('EHLO ' . $opt{'fqdn'})) { quit($conf{'error'}, 1); } + } + elsif ($opt{'tls'} eq 'yes' and $conf{'tls_server'} == 0) { + quit("ERROR => TLS not possible! Remote SMTP server, $conf{'server'}, does not support it.", 1); + } + + + ## Do SMTP Auth if required + if ( $opt{'username'} and $opt{'password'} ) { + if ($conf{'SMTPchat_response'} !~ /AUTH\s/) { + printmsg("NOTICE => Authentication not supported by the remote SMTP server!", 0); + } + else { + my $auth_succeeded = 0; + my $mutual_method = 0; + + # ## SASL CRAM-MD5 authentication method + # if ($conf{'SMTPchat_response'} =~ /\bCRAM-MD5\b/i) { + # printmsg("DEBUG => SMTP-AUTH: Using CRAM-MD5 authentication method", 1); + # if (SMTPchat('AUTH CRAM-MD5')) { quit($conf{'error'}, 1); } + # + # ## FIXME!! + # + # printmsg("DEBUG => User authentication was successful", 1); + # } + + ## SASL LOGIN authentication method + if ($auth_succeeded == 0 and $conf{'SMTPchat_response'} =~ /\bLOGIN\b/i) { + $mutual_method = 1; + printmsg("DEBUG => SMTP-AUTH: Using LOGIN authentication method", 1); + if (!SMTPchat('AUTH LOGIN')) { + if (!SMTPchat(base64_encode($opt{'username'}))) { + if (!SMTPchat(base64_encode($opt{'password'}))) { + $auth_succeeded = 1; + printmsg("DEBUG => User authentication was successful (Method: LOGIN)", 1); + } + } + } + if ($auth_succeeded == 0) { + printmsg("DEBUG => SMTP-AUTH: LOGIN authenticaion failed.", 1); + } + } + + ## SASL PLAIN authentication method + if ($auth_succeeded == 0 and $conf{'SMTPchat_response'} =~ /\bPLAIN\b/i) { + $mutual_method = 1; + printmsg("DEBUG => SMTP-AUTH: Using PLAIN authentication method", 1); + if (SMTPchat('AUTH PLAIN ' . base64_encode("$opt{'username'}\0$opt{'username'}\0$opt{'password'}"))) { + printmsg("DEBUG => SMTP-AUTH: PLAIN authenticaion failed.", 1); + } + else { + $auth_succeeded = 1; + printmsg("DEBUG => User authentication was successful (Method: PLAIN)", 1); + } + } + + ## If none of the authentication methods supported by sendEmail were supported by the server, let the user know + if ($mutual_method == 0) { + printmsg("WARNING => SMTP-AUTH: No mutually supported authentication methods available", 0); + } + + ## If we didn't get authenticated, log an error message and exit + if ($auth_succeeded == 0) { + quit("ERROR => ERROR => SMTP-AUTH: Authentication to $conf{'server'}:$conf{'port'} failed.", 1); + } + } + } +} + +## MAIL FROM +if (SMTPchat('MAIL FROM:<' .(returnAddressParts($from))[1]. '>')) { quit($conf{'error'}, 1); } + +## RCPT TO +my $oneRcptAccepted = 0; +foreach my $rcpt (@to, @cc, @bcc) { + my ($name, $address) = returnAddressParts($rcpt); + if (SMTPchat('RCPT TO:<' . $address . '>')) { + printmsg("WARNING => The recipient <$address> was rejected by the mail server, error follows:", 0); + $conf{'error'} =~ s/^ERROR/WARNING/o; + printmsg($conf{'error'}, 0); + } + elsif ($oneRcptAccepted == 0) { + $oneRcptAccepted = 1; + } +} +## If no recipients were accepted we need to exit with an error. +if ($oneRcptAccepted == 0) { + quit("ERROR => Exiting. No recipients were accepted for delivery by the mail server.", 1); +} + +## DATA +if (SMTPchat('DATA')) { quit($conf{'error'}, 1); } + + +############################### +## Build and send the body ## +############################### +printmsg("INFO => Sending message body",1); + +## If the message-format is raw just send the message as-is. +if ($opt{'message-format'} =~ /^raw$/i) { + print $SERVER $message; +} + +## If the message-format isn't raw, then build and send the message, +else { + + ## Message-ID: + if ($opt{'message-header'} !~ /^Message-ID:/iom) { + $header .= 'Message-ID: <' . $conf{'Message-ID'} . '@' . $conf{'hostname'} . '>' . $CRLF; + } + + ## From: "Name" (the pointless test below is just to keep scoping correct) + if ($from and $opt{'message-header'} !~ /^From:/iom) { + my ($name, $address) = returnAddressParts($from); + $header .= 'From: "' . $name . '" <' . $address . '>' . $CRLF; + } + + ## Reply-To: + if ($opt{'reply-to'} and $opt{'message-header'} !~ /^Reply-To:/iom) { + my ($name, $address) = returnAddressParts($opt{'reply-to'}); + $header .= 'Reply-To: "' . $name . '" <' . $address . '>' . $CRLF; + } + + ## To: "Name" + if ($opt{'message-header'} =~ /^To:/iom) { + ## The user put the To: header in via -o message-header - dont do anything + } + elsif (scalar(@to) > 0) { + $header .= "To:"; + for (my $a = 0; $a < scalar(@to); $a++) { + my $msg = ""; + + my ($name, $address) = returnAddressParts($to[$a]); + $msg = " \"$name\" <$address>"; + + ## If we're not on the last address add a comma to the end of the line. + if (($a + 1) != scalar(@to)) { + $msg .= ","; + } + + $header .= $msg . $CRLF; + } + } + ## We always want a To: line so if the only recipients were bcc'd they don't see who it was sent to + else { + $header .= "To: \"Undisclosed Recipients\" <>$CRLF"; + } + + if (scalar(@cc) > 0 and $opt{'message-header'} !~ /^Cc:/iom) { + $header .= "Cc:"; + for (my $a = 0; $a < scalar(@cc); $a++) { + my $msg = ""; + + my ($name, $address) = returnAddressParts($cc[$a]); + $msg = " \"$name\" <$address>"; + + ## If we're not on the last address add a comma to the end of the line. + if (($a + 1) != scalar(@cc)) { + $msg .= ","; + } + + $header .= $msg . $CRLF; + } + } + + if ($opt{'message-header'} !~ /^Subject:/iom) { + $header .= 'Subject: ' . $subject . $CRLF; ## Subject + } + if ($opt{'message-header'} !~ /^Date:/iom) { + $header .= 'Date: ' . $date . $CRLF; ## Date + } + if ($opt{'message-header'} !~ /^X-Mailer:/iom) { + $header .= 'X-Mailer: sendEmail-'.$conf{'version'}.$CRLF; ## X-Mailer + } + ## I wonder if I should put this in by default? + # if ($opt{'message-header'} !~ /^X-Originating-IP:/iom) { + # $header .= 'X-Originating-IP: ['.$conf{'ip'}.']'.$CRLF; ## X-Originating-IP + # } + + ## Encode all messages with MIME. + if ($opt{'message-header'} !~ /^MIME-Version:/iom) { + $header .= "MIME-Version: 1.0$CRLF"; + } + if ($opt{'message-header'} !~ /^Content-Type:/iom) { + my $content_type = 'multipart/mixed'; + if (scalar(@attachments) == 0) { $content_type = 'multipart/related'; } + $header .= "Content-Type: $content_type; boundary=\"$conf{'delimiter'}\"$CRLF"; + } + + ## Send additional message header line(s) if specified + if ($opt{'message-header'}) { + $header .= $opt{'message-header'}; + } + + ## Send the message header to the server + print $SERVER $header . $CRLF; + + ## Start sending the message body to the server + print $SERVER "This is a multi-part message in MIME format. To properly display this message you need a MIME-Version 1.0 compliant Email program.$CRLF"; + print $SERVER "$CRLF"; + + + ## Send message body + print $SERVER "--$conf{'delimiter'}$CRLF"; + ## Send a message content-type header: + ## If the message contains HTML... + if ($opt{'message-content-type'} eq 'html' or ($opt{'message-content-type'} eq 'auto' and $message =~ /^\s*( 0) { + ## Disable the alarm so people on modems can send big attachments + alarm(0) if ($^O !~ /win/i); ## alarm() doesn't work in win32 + + ## Send the attachments + foreach my $filename (@attachments) { + ## This is check 2, we already checked this above, but just in case... + if ( ! -f $filename ) { + printmsg("ERROR => The file [$filename] doesn't exist! Email will be sent, but without that attachment.", 0); + } + elsif ( ! -r $filename ) { + printmsg("ERROR => Couldn't open the file [$filename] for reading: $! Email will be sent, but without that attachment.", 0); + } + else { + printmsg("DEBUG => Sending the attachment [$filename]", 1); + send_attachment($filename); + } + } + } + + + ## End the mime encoded message + print $SERVER "$CRLF--$conf{'delimiter'}--$CRLF"; +} + + +## Tell the server we are done sending the email +print $SERVER "$CRLF.$CRLF"; +if (SMTPchat()) { quit($conf{'error'}, 1); } + + + +#################### +# We are done!!! # +#################### + +## Disconnect from the server (don't SMTPchat(), it breaks when using TLS) +print $SERVER "QUIT$CRLF"; +close $SERVER; + + + + + + +####################################### +## Generate exit message/log entry ## +####################################### + +if ($conf{'debug'} or $conf{'logging'}) { + printmsg("Generating a detailed exit message", 3); + + ## Put the message together + my $output = "Email was sent successfully! From: <" . (returnAddressParts($from))[1] . "> "; + + if (scalar(@to) > 0) { + $output .= "To: "; + for ($a = 0; $a < scalar(@to); $a++) { + $output .= "<" . (returnAddressParts($to[$a]))[1] . "> "; + } + } + if (scalar(@cc) > 0) { + $output .= "Cc: "; + for ($a = 0; $a < scalar(@cc); $a++) { + $output .= "<" . (returnAddressParts($cc[$a]))[1] . "> "; + } + } + if (scalar(@bcc) > 0) { + $output .= "Bcc: "; + for ($a = 0; $a < scalar(@bcc); $a++) { + $output .= "<" . (returnAddressParts($bcc[$a]))[1] . "> "; + } + } + $output .= "Subject: [$subject] " if ($subject); + if (scalar(@attachments_names) > 0) { + $output .= "Attachment(s): "; + foreach(@attachments_names) { + $output .= "[$_] "; + } + } + $output .= "Server: [$conf{'server'}:$conf{'port'}]"; + + +###################### +# Exit the program # +###################### + + ## Print / Log the detailed message + quit($output, 0); +} +else { + ## Or the standard message + quit("Email was sent successfully!", 0); +} + diff --git a/app/static/css/fonts/fld.svg b/app/static/css/fonts/fld.svg new file mode 100644 index 0000000..3cfec0d --- /dev/null +++ b/app/static/css/fonts/fld.svg @@ -0,0 +1,134 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/static/css/fonts/fld.ttf b/app/static/css/fonts/fld.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4821c6f31d573d58baeabeaf54880b9c9863dd51 GIT binary patch literal 30928 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 G#{UbeDTJ*6 literal 0 HcmV?d00001 diff --git a/app/static/css/fonts/fld.woff b/app/static/css/fonts/fld.woff new file mode 100644 index 0000000000000000000000000000000000000000..ff7a2829817ad423e6a1ed90c8bae6dfc188a1d5 GIT binary patch literal 31008 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 509afc930052596f387a5621613c8257684e5df4 +.icon-access:before { + content: "\e931"; +} +.icon-add:before { + content: "\e910"; +} +.icon-address:before { + content: "\e901"; +} +.icon-adobepdf:before { + content: "\e933"; +} +.icon-agreement:before { + content: "\e91b"; +} +.icon-apps:before { + content: "\e917"; +} +.icon-apps1:before { + content: "\e91c"; +} +.icon-archive:before { + content: "\e91d"; +} +.icon-back:before { + content: "\e918"; +} +.icon-backup:before { + content: "\e919"; +} +.icon-bill:before { + content: "\e91e"; +} +.icon-calendar:before { + content: "\e91f"; +} +.icon-close:before { + content: "\e91a"; +} +.icon-club:before { + content: "\e937"; +} +.icon-clubs:before { + content: "\e938"; +} +.icon-code:before { + content: "\e902"; +} +.icon-contract:before { + content: "\e934"; +} +.icon-copy:before { + content: "\e920"; +} +.icon-cube:before { + content: "\e923"; +} +.icon-cubelight:before { + content: "\e924"; +} +.icon-dashboard1:before { + content: "\e925"; +} +.icon-date:before { + content: "\e90b"; +} +.icon-documents:before { + content: "\e903"; +} +.icon-documentsave:before { + content: "\e926"; +} +.icon-download4:before { + content: "\e921"; +<<<<<<< HEAD +} +.icon-download:before { + content: "\e9c7"; +} +.icon-drawer:before { + content: "\e95c"; +======= +>>>>>>> 509afc930052596f387a5621613c8257684e5df4 +} +.icon-duplicate:before { + content: "\e922"; +} +.icon-edit:before { + content: "\e927"; +} +.icon-email:before { + content: "\e928"; +} +.icon-excel:before { + content: "\e905"; +} +.icon-exit:before { + content: "\e929"; +} +.icon-file:before { + content: "\e92a"; +} +.icon-filter:before { + content: "\e939"; +} +.icon-find:before { + content: "\e904"; +} +.icon-folder:before { + content: "\e92c"; +} +.icon-folderadd:before { + content: "\e92d"; +} +.icon-foldercube:before { + content: "\e92e"; +} +.icon-folderdelete:before { + content: "\e92f"; +} +.icon-globe:before { + content: "\e93d"; +} +.icon-group:before { + content: "\e932"; +} +.icon-help:before { + content: "\e93a"; +} +.icon-history:before { + content: "\e93b"; +} +.icon-home:before { + content: "\e93c"; +} +.icon-image:before { + content: "\e906"; +} +.icon-inbox:before { + content: "\e93f"; +} +.icon-info:before { + content: "\e93e"; +} +.icon-library:before { + content: "\e907"; +} +.icon-star2:before { + content: "\e935"; +} +.icon-list:before { + content: "\e936"; +} +.icon-location:before { + content: "\e941"; +} +.icon-log:before { + content: "\e909"; +} +.icon-logout:before { + content: "\e90a"; +<<<<<<< HEAD +} +.icon-map:before { + content: "\e95a"; +======= +>>>>>>> 509afc930052596f387a5621613c8257684e5df4 +} +.icon-menu:before { + content: "\e942"; +} +.icon-newspaper:before { + content: "\e943"; +} +.icon-next:before { + content: "\e944"; +} +.icon-numberlist:before { + content: "\e90c"; +} +.icon-package:before { + content: "\e90d"; +} +.icon-pdf:before { + content: "\e945"; +} +.icon-pdf1:before { + content: "\e90e"; +} +.icon-pdfexport:before { + content: "\e90f"; +} +.icon-phone:before { + content: "\e946"; +} +.icon-pictures:before { + content: "\e947"; +} +.icon-plus:before { + content: "\e911"; +} +.icon-preview:before { + content: "\e948"; +} +.icon-print:before { + content: "\e949"; +} +<<<<<<< HEAD +.icon-profile:before { + content: "\e95b"; +} +======= +>>>>>>> 509afc930052596f387a5621613c8257684e5df4 +.icon-projects:before { + content: "\e912"; +} +.icon-refresh:before { + content: "\e94a"; +} +.icon-refresh1:before { + content: "\e94b"; +} +.icon-remove:before { + content: "\e913"; +} +.icon-rename:before { + content: "\e914"; +} +.icon-save:before { + content: "\e92b"; +} +.icon-save2:before { + content: "\e940"; +} +.icon-season:before { + content: "\e900"; +} +.icon-settings:before { + content: "\e94c"; +} +.icon-sort:before { + content: "\e94d"; +} +.icon-squares:before { + content: "\e94e"; +} +.icon-star:before { + content: "\e908"; +} +.icon-sync:before { + content: "\e94f"; +} +.icon-table:before { + content: "\e915"; +} +.icon-target:before { + content: "\e950"; +<<<<<<< HEAD +} +.icon-time:before { + content: "\e951"; +} +.icon-transfer:before { + content: "\e952"; +} +.icon-trash:before { + content: "\e953"; +} +.icon-upload5:before { + content: "\e954"; +} +.icon-uploadfile:before { + content: "\e916"; +} +.icon-upload:before { + content: "\e9c8"; +} +.icon-user:before { + content: "\e971"; +======= +} +.icon-time:before { + content: "\e951"; +} +.icon-transfer:before { + content: "\e952"; +} +.icon-trash:before { + content: "\e953"; +} +.icon-upload5:before { + content: "\e954"; +} +.icon-uploadfile:before { + content: "\e916"; +>>>>>>> 509afc930052596f387a5621613c8257684e5df4 +} +.icon-user2:before { + content: "\e955"; +} +.icon-usergroup:before { + content: "\e956"; +} +.icon-viewpdf:before { + content: "\e957"; +} +.icon-warning:before { + content: "\e958"; +} +.icon-website:before { + content: "\e959"; +<<<<<<< HEAD +======= +} +.icon-download:before { + content: "\e9c7"; +} +.icon-drawer:before { + content: "\e95c"; +} +.icon-map:before { + content: "\e95a"; +} +.icon-profile:before { + content: "\e95b"; +} +.icon-upload:before { + content: "\e9c8"; +} +.icon-user:before { + content: "\e971"; +>>>>>>> 509afc930052596f387a5621613c8257684e5df4 +} diff --git a/app/static/css/theme.css b/app/static/css/theme.css new file mode 100644 index 0000000..3a5859a --- /dev/null +++ b/app/static/css/theme.css @@ -0,0 +1,1015 @@ +/* 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} +.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:left} +.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; +} + +<<<<<<< HEAD +div.SectionHeader +======= + + +div.ListView_SectionHeader +>>>>>>> 509afc930052596f387a5621613c8257684e5df4 +{ + + 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; +} + +@media (max-width:600px){ + div.PageHeadTitle{font-size: 12pt;} + button {font-size: 8pt;} +} diff --git a/app/static/css/theme.old.css b/app/static/css/theme.old.css new file mode 100644 index 0000000..e5378a2 --- /dev/null +++ b/app/static/css/theme.old.css @@ -0,0 +1,939 @@ +/* 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:9pt;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;opacity:0.3}.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%;overflow:hidden}.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} +.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:#000!important;background-color:#ccc!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; +} + + + + +::-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; +} + +button.Button_ImgPlacer +{ + + background-color: rgba(0%,0%,0%,0); + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + + font-family: -fm-font-family(Arial,Arial-BoldMT); + font-weight: bold; + font-size: 10pt; + color: #fff; +} +button.Button_ImgPlacer .inner_border +{ + padding-top: 0pt; + padding-right: 0pt; + padding-bottom: 0pt; + padding-left: 0pt; +} + + +div.PageHeadTitle +{ + font-size: 18pt; + color: #fff; +} + +div.SectionHeadTitle +{ + 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: rgba(20.3922%,20.3922%,20.3922%,1); + +} +button.toolbarbtn:pressed +{ + + background-color: rgba(20.3922%,20.3922%,20.3922%,1); + +} +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); + +} +a.toolbarbtn:pressed +{ + + background-color: rgba(20.3922%,20.3922%,20.3922%,1); + +} +butaton.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); +} + + +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:green; + } + + 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:#fff; + 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; +} \ No newline at end of file diff --git a/app/static/css/w3pro.css b/app/static/css/w3pro.css new file mode 100644 index 0000000..ce009b2 --- /dev/null +++ b/app/static/css/w3pro.css @@ -0,0 +1,386 @@ +/* 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} +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{font-family:Verdana,sans-serif;font-size:15px;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} +.image{max-width:100%;height:auto}img{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;opacity:0.3}.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:8px;display:block;border:1px solid #ccc;width:100%;background-color: #e8f0fe; } +.select{padding:9px 0; display:block;width:100%;border:1px solid #ccc;background-color: #e8f0fe;} +.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:200px;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%;overflow:hidden}.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,.panel:after,.panel: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{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%} +.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%}} +@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} +.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}#main{margin:0px}#modulename{margin-left:0px}} +@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%}#main{margin:0px}#modulename{margin-left:0px}} +.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,.panel{padding:0.01em 16px}.panel{margin-top:16px;margin-bottom:16px} +.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 10s 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 0.4s}@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 0.4s}@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:#000!important;background-color:#ccc!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-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: rgb(153, 150, 150);} +/* #main {margin-left: 210px;} */ +@media (max-width:768px){ + /* #sidebar { display: none;} + #main { margin-left: 0px;} */ +} + +.select { + display: block; + font-size: 16px; + font-family: sans-serif; + font-weight: normal; + color: #444; + line-height: 1.3; + padding: .6em 1.4em .5em .8em; + width: 100%; + max-width: 100%; + box-sizing: border-box; + margin: 0; + border-bottom: 1px solid #aaa; + box-shadow: 0 1px 0 1px rgba(0,0,0,.04); + /* border-radius: .5em; */ + -moz-appearance: none; + -webkit-appearance: none; + appearance: none; + background-color: #e8f0fe; + 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, #e8f0fe 0%,#e8f0fe 100%); + background-repeat: no-repeat, repeat; + background-position: right .7em top 50%, 0 0; + background-size: .65em auto, 100%; +} +.select::-ms-expand { + display: none; +} +.select:hover { + border-color: #888; +} +.select:focus { + border-color: #aaa; + box-shadow: 0 0 1px 1px #6a92d3; + box-shadow: 0 0 0 1px -moz-mac-focusring; + color: #222; + outline: none; +} + + +.select option { + font-weight:normal; +} + +.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; + border-radius: 2px; + 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: #e8f0fe; + border: 1px solid #ccc; + font-weight: normal; +} + +.readonly { + pointer-events:none; + padding:8px;display:block;border:0px;width:100%;background-color: #fff; +} + +.right-side-bg { + background: url("../img/bg1.jpg"); + background-size: cover; + min-height: 100vh; +} +body.mceContentBody { + background:#e8f0fe; + color:#000; +} + +/* .mceContentBody { + background: #e8f0fe; + color:#000; +} */ + +/* .tabulator-row-even { + background-color: #757575; +} */ + +:focus { + outline: 1px solid #607d8b; +} \ No newline at end of file diff --git a/app/static/img/bg1.jpg b/app/static/img/bg1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..31232599d2076a44ef71d46ac932910b51d4e5b2 GIT binary patch literal 1084629 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

;O0fJFmRc~*H>fq;0HM5*ox(Di> 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ξGfs%1Gae(mSV)Rso}2)LFV)(xR@-4{dqbmP}E@1D|6wd zPVZq?xS6XORLb@@R>rqhjXtBI7ZPzB7mLOWa#(hKC`Rrm$5ulCH@I*AyEMn{E04(< zK^Z4tD>3gOcV1^i#-aaC3znp&<{uB{_js7W71jB;@@kK7z`B_h&bR=F-;Mxh5qlyB zP#Y7Ti7cm((d##(c-g*o17&9#UfkD56iWC_3b3VHRo*1nh4* z)bD2pzK)5Dr)tCDe)5$GXC^(KxUApv6pW3UnAP&HI-Xn&Rg$zI4dGsN4;leCLaOP& zTa9Nn#%tIt8@n-o)91o09fhALoI%6H34rrAY8se;)PAEPHLdT}FrjD_dPHBYHV9a! z^y9@jS2dV*x39MXqhoeV8@fp(G36*E?9ZXLnhp_SSuI2UBSsWZ=-T+Rr-HKPX!nK? zieeS+xqimZyrkRgRA>;t;3?!SmVW6AtnmoVyXOIw6u5&EPVET;Ha6+cHd$Ha29(ia z)68Ll4uxvGNit}kJL@ei-}w)WNzJ?3>CCFtGAg=5^4`#QpZ4?Kq}JFYOvCwcz2@zu zvNdtVN-bXtRNo&nkBpZ#AXJT4k-Uaoxct4_$G38VRp+~wm!QZfch0pY&4rK7VLF^P6?u3FSpYTwlu9R(cx#mpPCxZ>Y3NxZhR&S@Od2mH=O~9jJWFEVcI$~;V1U^bE*!wC zf-#uiUF4_LJ&E`wKPYOsuNo=5C{7pWQw-{%`bI09?ItpcU@L2vDQs-6xqiGU2^3e- zU1DuKJ7Nv_EXj1ENIU55+Z5e1jjPLDNt>0*?&m_Qf`on9EKsJ0Otds)W3}-(Zeti6 z=30G5gTkaav6JvHQ;y#{sV^-niy-)R6=Sn9Ke0RW8Js}l!CJ`b?F)fjiVzaAY1|}K`TMy6Ec{4k zto9D;eMf~#_VwVB3wUqIz9F_cip%67#|Yq~T}oQ>nM^?@cltTh=o3AmR!wWY>qlKE zhk|UwDjj#Zf`cfb;wFo-f--J$ghFsOxeF37+$VUhs|(aYw3=-0b3Y#m@f zTCuz%z(@hFcsj0tzkmgWFhIO|yHeRqiwx5&C-Z&LEwA$zNM#WDpmP}sGknJd#= zm7Y-f=L~bGRp_C^HFsd~@JgW&R_{m4v+w@P;GJ9k&@Z#i6n(5nhpEhzgY+l*G|1f} zlY5t~j!E5sc0)L#In_a9ERVF|$}UWtsYIE;IP6*{*(@u0dy-$Cne-fq{{gMnpR3@t z*%NIKGxOVJV>1(#$BQ6qIG-oySSXf$N>@Wy18e{OtYnAOzk#f#=T*BgbFM-4(_@HZ z{S8vvQPGEQHmNGM-#LTelmoN|lLeF?fwQvK@eti=qu?wbqd1}Qb4{>n`KA`i;Y5*` zdw3ZuP;a;e5AF4WK6Mrmx@==3NTa-oIz`?-GZBd#^zs*L=a_Pv_EIX*7+6tL@;o zX!q?3MgnCMcc&sMS^HJEq8T+DyN#ICSY561I^*}AhF(ZiZOs2Km z!MEdHQ8sj%Be8?HC{BuRa5Q;x!&<_fn)2(R+MYIBXwvsTJT=|E>U_lIg{BHi53d-n znSQDl7j2-+t?^0z8dKzfL?JrgBZ*%U3xk2Sp2nMB%dHLW4vXSs0Lj> zZ2!oprbUg;p`yn7hKGT7e-OVp^;sT>Y*I^h@Xeponnwy0M;jILIb0B;o0s#Kt#hkp z%L+#Bjk)BMc*7ScrswQpLmnt{>)97X=|!epyCH8XJcg0*hU0m#f+spm)jAWg@EcyB zfJ2%eW%7#Yf{L19gKaHMIpfu83P(_leQjVe6^ZiIInVNb#Fsz55w#Q82C7zJ$2R`E zlw%Gg;n%yyk&bTbM{$A>pxzB4HcwI6G_mQo;?bZ^TMJrEtIB+1cux3TG2gb{b|u5= zjM%IZfo=x!vthQ+$RHvfO;|?~jw~C6piI}Mu42E*7%b;9C{M|J>?q;0v3Hl!ANQp3 z?LI`Ru)8a_Ar1;)Rvc?;i5|Asm6EPMf&U)p%VAjK*cB(Ys@0jj`)s=u?3XLz^M2Nl z(q@)U$!9_^oA&5j4&|SuB>jN&c8Z9g+9yv@WT^gcI#Z<&aylvXMGLBGDSfsg5cU7! zTa1I958w7&=pt8@6xtt)(j)1E#89C@Qf|h1R;A!Dd)cRXw_p|OB26AKVt0-c#k5n+ z()+W=`-=Y3F6(9oIf%TAu%~Z*zY2_2Cs=Q^AYQh8AWwG&unH`ygoz>w4^@3AxPjM6 z8%&8xGgp;9?8~e8E*NL@jT|Z&W`J+UuC9_zv4M%nCX zV#9kP(!$t*#xMa9%vnyr=#iqTLce=4Nh$75(V@(%Q`L0hkYMl5+aJjq-|Noyqkto< zhYWqjk5M1P9;xQw>oPYYj6xu0{X`PC<+;MfT4G6Ty8SPMH^5{D3ZELJuK1@|%z?u8 z@y(Unq?0-EJ_i4qvkDSnH+#6Vz92wXI1`ws0SWQJd(e_;J!%I5=3IXS`f9_49Tm{{ zxaS^zQIKPZb~d7%QsJl-1&dW6V>ITdh1TZ|q^sx&3O}+hF6=F%jU;4=bOC<|% zcA1a1j}u=W8wk3-P6Xs51jWx(rv%+I)SX3Nu!!@)O5Uj#1nguySfFlvREO$HeE8w! zzvfDMy~rF1C8bS~9j2#%J|+$eA;>Pqy}u=|E-E9$tO1?MQ(kx2-NCl2Q5=1>Q{dPX zYt}XvpXcl{5uDJstzu4>`mHmXCZL~&@5Aioov!nG*sKL!qEFYq^X@Z6vGN)03OUJ~ zl2S)`tTn_xR#WnL8*G1AVq7iRBWduV9_ua_%vY~sct4wW%YCe*wuLC(sA|6qE{3^rdp1Tr_Uc-PHR85_kDEA6qo3yR+BfUf(L zh$ z(n|KtcnR6Y{O&Yn>VaYYlGh@mEPa;~+wFRPXp&&{ze`1`v#lbRtuN9{-7A@7uo-lM z(X485S0-Me3|=ll1dU*>xq;n4$O4aJ4%S!u(2>5Jiqts-_znx)N)V>qgWZ_r4xY2yH`ApgSR5`<|B@bIGQRmV4}(_qV20z1hC+;lyJgDd}_m%N!!{v*;C0a!8Y7^8=1d2pkMqYWp3S(Xav^U zwj52i3=cN7cfepn0+oQ_B+-ZkqmgeIH&%Mjf!^tG7@mve=eei|0N?3Nb!36a&auKznPaer6k z0&gJ5ph7!Eh_L9%eYpkX3VDpBXS2RqhDlG7iL8@&r1ri+(@)tD17;J zS(A+yV&1cnLABgLb{^b5N>`Jge&Z;d*u{fI@y@${D!Lw@b${I~l(y`D_g4czevdaFJ$dwoC7O0_-Ps>ug@XP(EZ(`PRH5Lim|X2eCx8 zC$m0$x}+zu7q<)azH8PLDHzQMgS}pb1y<-YN^E?7uRlVGGc{j8|;;Brtgc-PSkCO{mV_52Y}s^%!zl?$cy?sVzm7YK{MjQN?wK78KQd0VBFn zJb#E1uFbz(?@p(qyP~KnzZhSQXt%Pva>ghuz}5J}(KHLlBz;f7&bile!J%99lF8lS z6{qy2MwRhgZPtMOzRz0X2z>?}1bQPYo9SG!Mz&eSf4m}R>ZD_=`D8*-YM_lJ{t%tJV)B<^@ zu?Q4&zChRFrF<*nVQ3UHDoUTO>W6#vXo`7_QAB_)uD&M*y!#1I-r`=b~Uw~H< zVbQTKipEFA~0(x4*-fvjby5)yT6jv6&|D-CQ+RpAyBfoGLcr zqD&4S!?iP&Y9Qp;$h}F7u~jBh(CA%u`oBw$H&vHT{j!5pkhbK>)`#21$%|<4(IE1r zwbE=NE#3C-QjH}9P<50T5H+jU{Y;H~XNO;lDaxchOqVWeW&^J&-5g>bZRrPf4P&mmeJ}L>oYs{Vl7dx(yAwdbNCE6Uj69fFfuVUA9eRl z%9Ommx+sZJ>sENg$hIFz@zEyMQ$%d;R&_$sbL)&wV8-jqgW!6F_Sr?z_auP1X#%og z%rv@J15TNqxkfL0Q3z;_>zPoUArDCjab*t=zR;vgOwUQGx?&vRLUgzc)*$Alq*fn? zgNpxMN-v9_6wXVj9Xy`x0D)gcXfEoefc>J)td%+qsMspjqMsVkzCzu+wn*$yo!?d41FdTmIU?5J`4z~Nl>1k z=Lj$_hHnD?@Soj`O8DPx<5`&5SI-OW5sO zr9(f3XqK(Z3=6bMSMsQMeXix=Ri_j23n%^oY88A4K*H(|RGLcm%t!0JC_V6tm(Zp( zxnLJm%_$_6)zNjUsc~*yxAJW>vF7nrrj1@vSb-rzLrhl9*XKUZJ;)|#KC>~2K5sR) zpZB+4Q_#eqoGIy>wCnakZLKdWdp zeu{Y(-VL`(0v;L$HcqDbdiLa%UD3Z{rjEbzKb+s#ovi|KM`$(Izyp1c%HqoBU(p^% zDy;(D3;56{3N0cSfzTGXhQM#S&46dc!|Z9a&JW9{>n-^ccT_)2ZKJXSck)6T9=;p8 zSN-i!r*56@kJ|WCQa5356CX!YG~yXbrb7t|oRc!S5s#g(Jf4bW8fugPf8eo+fQ`-# zCJj}RGtPp9^Ml_F&8e>#j=W^y{SGxMO9?o#lz8A>AnYwJC5cVHYb)CKIpyq{_L%ed z>@ELF^7_-U9aF9>UK8d|lBib|#*z{dF(CaT==2gaJn3r}8upN3n(yHY+=Emufp!_t z2n=&OdB)tHx^~8e7jzpH&yZ&nw`h@JixJeLQ-wa7NA9d0{RLsN(aCX&Zj7`cPdX6T;az^F zLJ^9h8d0Oem8yjwD5DjR#u_k=K>2uvY9m@c=CaarXcXxzNb4aG7QMzwp7DpY{IS4R zxM!n<(eUvNzdv(Ouu z<{Vq{<@EJc+9QqW7{x(_J+UZQwi!y`q0>dSUxSPnf9`*JuXnd z?6F6FpY=>|dw#V)YpLs%V~zqJIc?S+36`_>DOGbhY+4v}$dfI0g-uyP$xxX36*joW z>7J-nmi9cDb_wrv2Dsp&`cKfN9-2`3gLwjQMN!0w_z@YdM1ZSk8{E$5Gi743ENs~* z?r{PDR1^m`B4JIJOW)sQIf{AJomq;?f0HCBu9!mk;G>#~djO1iGx~bSqtP?!52qyC zoikj0Au34rOkmt4?SFQCq#gJ!vXZ4p*t*a7%`?`Z*VC=7k zpoFjxfm2n5=GcJ|l{omDQ_9ye`DKXp7g&3A9BAh#iR~yF6{Q#t@8K{z)*0_2uV*EX zSL?LPW|(*(BfDw!GmF`D$szfgd~tTG=HjJF5H`*(u)w zOC6N2qpybby99mx59(YdJ5=N3osWz+Y!+A9ZQFn3XVdT7VG&FgUjzku9)6au(VWtHDQ9vGx#Okt8Jv{oBNp zrkcDwOb?t(d-*0t))|?lQ=4%bR`CjC8^28 zr!=*H;k@_vea^DQZDY((Yz8&?(5q5lZM&OJt`hZmpzXI2)uZIyt`@sliBPm(6g{Ud zY+1Cbe_$8WH{xABTvzx^@l8tpf_)rZ;T!{V+5yw28F?`6|F8N%ag9drO(WBzM7dv} zNXS~=p%!mN1 z&_p3m$BpOY57Imp7HGSil$ZqAyv|5E-V#UCXgI_+TnF1X5Zuhc_dxZTV>2BmP zNp|7+xEQ>N8K>IQ#a@iycAtPT_nmV;a-j3SOXI)0#gCo{vT6ehy<+}i7C($eYrA5f z*(n=RjarBoY~w}q?pWk6d@v^!O=wb8s{X;W?yng!pD+Qu{quy99(@sZirvC+xms(C zd|x2@pw&npG0T8>6}Lg?ze^*&VwCLh@)XYdKk#RI*S9!Se!`cGmRukwI#0BN z%xmg!Azl&RbU)y(tFa85O1o>MVIFgDg#b`*>v-MwU8XNafi|#OvZ0ycluSJM__MgQ zM76RJ-~WEOo2#0%76%u!Mf0z$1$e-jouRJGjlBugDM1xplCGh$H#F}u zy>C=vMIRPtGoJZ3D*et1N$EE8>G;+}se;W(HnVW-_Kv&baG|V8zXU&bkn9&F=1O{m zB6|!75$2H;meC=OxE#mKMknU^k#IIwX1i1K3*+9XLoR@+6BKoI$_&xVY=tuSlWmU` zh9xNpbnq@L+SbnQ;il87ir}EH0#Dv@lwTPTPz_K;cKETq<4A2Yo3sbhKk+F1jhhFLBq-^eT=nu+jI&D~)E2%Rii|9V}TF$^0Dj zP$Iq;LOp|}E})$Px`4=UnAyWxsWFyNQw4Q__Wr?;2a6soa>V5#OZsOY^@HXbB`9x1 zo0(yCoqidQyUJ3fMy+q132JbgUmGRyh!#_;TyG^BfS7v}ypL~7B5!V{`i~in{JGu5 zXqg&)Z((34;i}mgXo}o<*X(5Va>4qQlM~|Setr35>fqY(?o|@zIy1RESuo4wu6EOr z|KK^0w#cJg)7gSNLE+-YU}K#TbV`6$l-E6~>ALZIFp6^S%MHsh%hf%|3ErV~jQJ4r zGK+F%Iz|oBk+YG=#yN`-p1}VMkrIAj-u{5Gz)!^hX%&Z6Q#8yC ztkT#$HpK9_zSoz%9YbQjLg-&#acbc4T|2*4VV16s9pw8u$l$4N&aN=cQ4Xy11ue7X zGcgn{ZA&8NPaumoCwyp z@lBsEX--PBy7my%m=UI4ekJ@7bis_f!Imz`-APzCv29p_`#_{}oUXN84VlJWAs>yD4q+F+KO1tSBHXo$Dht3itq;rNrcuNKb2*4}moJlm*0O;-|dy zulvW8I7jYFEPe{~(#xrQzT+0l^1{D2I+WbM#c?puiGE3MS5;M!@JZoiik_(V)dY8| zy`^B_jj=KD4e3VZ5s@{kEN+t8o~tp&Gp1b8xdvx@`Hc7s6ettAZfuHd9(uyK$Gm3T zu?adW93wtJF!TTYEZU%4Ai%86WEtpU4ahKXW@4|?FET4G%L-{tIhL5XqU}~}-QAWr z9|iQ4>gLZbtHow;N|HU--n6Rp@hP5R6BJ!5@poU!k>9G@wLRiyn72ch8k+D5*a&=M zPlL-={@nBX)JpajAki@wgV~nrav$W2*cODYLt5_k+;8FL;@z@IA#GSpU5G5H+Yo_XApW zxy&?>s$Hjg)g|EdAwYwoxP#%%|I6xlzL12r96Z|4zZ&Qgh;X@4({0^rGqMN>gg+ zc9^nCg=kADyTDlA0Z~Njm#Xp|L-wJ{i~kleC%kM3!913>arR*D5q4>;$0Gpqy$#|6 zrg8Btw5U@(`980p^*+i!8Von-)EKV36m35Pmj;d!BnJIvic?F@eY^W!WC~)bvFP3E z;A&8nU&cB6yC;YwTJs6<{d1kvo7xPY-$>sjCWQ@BnE$Z-VLgOzBzUL^M3n*h*d`1N zeh86#6=?(VOfe5mcY|6cKm9jnigf-p`@;kQyRT9s&^EABcC2=K9YmbCfnL9d%{uCX zrz;wHu(GaG@$B{V#X@L|250Dww&t<;!g_O#7Km-eeevT;jf(cN=}jU1^2fFdn?E3v z8DgbYkH1DFG1ugkMX@5&616acl`p$-rUBf;sR2H~RCA>03d&YGqtyTs-Co(%Gbm|F zwtI;Fxt5N*hnxruS9hYV!4MP!5Ks4pV#Wk-r~b+8@YEV?HXCt0E_Wl{P+8EbVZnFxU9 zupiSY^@O2{O^ln7D6XAGpmFuCClCUL+ndHwd~`OLHEYfz+39x0Z)a*+$q6zgWCtMj z95V%06f;TDahN>@{`m#>=pe*d;{RLKMXOAzCmAIeod_p;Y{w^Q!}?(8tSOF?KyZw% z*T{WxLF!j|)#d3o<*>IUX>(?{*qZR9A&E`DV%pWRfD49gEvKqGLpv&;{d_-`>8ZZr z+bN03KI7^={fCtL&noblzV2#>{`Xt#vnCsHRi*EEyLLnhCs??_3@SCt*isVOndyf9 zVk10f-F0kES<`E?I=CyLT-oQ*Mnq4}IV6-7X;8&ZSe*;}Rd?Y)HVG?oE{2R4wTv6U z6XqDE6$rZw*HW-iWt^!2TBqXkIb~g%cy>B zy5=C&N=8L0)CX*MK^1ax8%bn?7C3Y6aW4i@n-)U+cZt4s9Lj2K?wlj@Sh>QT>MJRm zrby^jy(VE$Eb`vMVW!Bb12*=~3568#3vtA`W*M~M%Dv!Qupdm!uVd4*a(S%ZZ9a;= zOTkwG+N6&uVLKgAi};j(my&wc!9h9Ne99krahpub855f4oZ2h{%x%&aCBDolyzS~H zk3@poL|jCdRj)kRb55nN_{uRyY3Szee6{n-W}d_=`Tgmi%(xV_;J^@8Scmk|P8sMR zow`<{S6U%3@|eJ}Zmrl+sf&H}U*Rl1_892^IK}?SRNYDna6JT@O}T3!HT`_8nW(^J z`Ew;YzKGxVFNeUNI}AK?P$T~!mp_>-XAG0lemo*8zi*sY7k#Y|C&yE=3nr<>TBD4t z{iG?AGsc<@t2l{ADVb6hq=D3Yi{zSUu00Xadoc=+bt+X?OY;c0;h>dkI#<095U;y4 zbBg`Aaj#`$t3in-;k(6gmYFpay5%bvB2xs2^mL9c-&EMSa|G+)dd=vVP|NVHdU4F5QsMF(IblKQ z^E)$Hd2I&{1;G(EUYD5=-L0JatucE$CTAs~^Twb`hKh zf7n-2=Hu`;VR&~RwR*189!nc&$W)V_U7a9>YSurr`#<(~sUOU+bw0ae*l3kA9bKsX zXdJB%tv^ZTFpC4x(aRK9vmh^5&ADNAQsAx4$`&beSn9-ORSSNb}aH?fjo z0%$cMF8UNp93>w5VW#KC?j}IW+Lg;TCO(a@aoi_8tEl9R|MCm6#H6uY#ca#Qd^~3> zs(y$_ahRIGCIBTv9Jb_A;DIg?S{j@=xx{Ied*x292+6TDP_&HA$ZJ(GzclAOgR_aKvTghM^fXsN*RQgQ4x` zWk;14Li(h2eb3o;Z|i8T1JU$#*&GpX(WQ_zPItk6MSVfOniKF|;6P1C(GdT1FEiIt zz!kK#`!S$Y50S*v$^F<|TJ;2~T7Yw=*>;Z&hQDH8mzzxoFwK>Cv?Q|j#0nU^JajP3 zw)LfLwhGz^=Dl!^d#56u-9oc?rocpZS`86BEw6W7>{NQGt9CUKoKk1=wXvj`VrIIC z0BB$B4K}kXcry*1AaHAfdx{kHEO3D}*5|;Jc`C*gp~m;C%7u+c^A;X`JBQ*IFoH(2 z=Nt-$f!$qW8ehiiD8A)qqTj2l=?J-~u-i?U#3dm@*Dv0`Ic>q!kclUxCe?qJRQ^`5 ze~0U>FeuFZE!oBBWaVgBW@QM5JvtZA4kPCzYZI!$V{eWU_&E&Ev!XA;Gq~jM4uYnX z>MbmdHgfBw1J(jmMkN*WYsXO>Pxi?PngC>*vLRQ6@I6CwWqHw@%GaW=mO)+A=ra&g zICJq&tk#u+Z-1_rU{V^I4t^^X-qf`;NKC4v%FSk|0&m$dw64#)>Avbwh<(UfBC*vI zC9(C5KxqE#O$tcokL^G#!nQTICC$xilL{S@C6Z*e`oQT96Rbv$ZiqXr*?uo3e+yC% zmh~Sr?WcwF`zhe!R{! zG;xx-ND+Av+(Y}>X~xw!4%$QRK-u`kLvpB7(~B|_a$6&J`i8rs@_GgC`GIQUL>Q%{ zzG2eQWeTjis@ORj8Mx!2?D$E-SFElYGZP$0M9*#1+&x1-FE*Y>I*%v)cC)Kg>;lNm zx=j7OzVmRL?D+Qz+Y4$b+r}SCj1G-KaD+TFZ3E+zY6fO$=TS|T=YthwcjUgr(d8QR zFc8814NH#@u@fji%9KFk9dz12)oRMm^!!2exHmj35p#i+{gfo5u0um#x*1y;a^xr% zc4ykR+?e!6jL1uxfU+3(Rd^)~zO?wVR#L3Sdz7$?QH1&O=;dh`INpBamY4~5!&cE} zv7(|eXZ$BK!ZU$yAjCO%f2r?@@H#?me&Jca#wU%5mgaBD{#rlut}eytHO zO7>u=u|uFZ<7uC6Gl86^6P6xx?M$J6C-qh+>!W9WO@%*(e_R{y4MKKaE>iM|Kzom4YHPdjHtpBKyk9WLXbrtW3vuf5mM^mlUFsg19SyMb1SaG%J&;ht4` z`>7ENX2m_yH%f-X&3crmZ&KtbSn8!uq%ODY@hB#Jj@0dvbXxy*W1l~ry940D znotZXB=3B5ONPOBi~uE!#eVY9f=;D~Tl+{JhQedO>TL35ZioB$FEU_ETAjx^uIcwv zS~rcjCBZY3bu`E;I}0L&{{-^wAlNHrU0c-s)JWqHo03oY=&4ficQN*BAC2eS(476w z@FD9e0~njn8t4MOuVvkRpcEP>FOF2GFKbT{&hgMi!pTHhhES$V@TI_2s_v2B1$JL+ zxA2q_t*k&H9(m*3{H7r0?HI^uwd;ypnE;;-spZ=#inDImMq#(2`cp9|`DcwUPk^>S zhbAd+T9)wFNL44Nwa;jwU^01RyQ|N90?YFZnkROHmAER3g!nAZeWbsf3VHPVrlMix z51Pk~Wa$O}>a0FhEePadco@|2FodJQ=B4!&Djxnn6SOCUvbyomzY!pEtvZknQMWZo zHd-cbvi)>QUwDGm6+2$}Akz7?G<$i!;DjIC+{Zd;GH9MJ+2!1*4E*9cY&QwGvQ4M$ zNUUlMsv$Pd?=ntjT74;Dp|N2(Gao614!o7Udj2lWQc~R7qcjxj|!&YjlUWW3)z?@^y;?>Ld?zU_5 zO?er0hLGO~*7Uu?b|pai^--NBtJ9e{-O)RLM2}Va-c5+z-!AiBHQu>12~2=oC^Y^d zOc*uBDw}pp=tVq~X+K&M3hM#iY|DUjDKtIWR`ZQDXQwJ}HK6w4Dm@_nFIG1ZcA ztm0UIhE&}%3DV$V2q4_DH6PS+K4wmlCcr^^Pk21B? zEOVu|2HlO*Mz_>+lh~a?YfPcdJgx2|>=;AE)6tg*`;Gt!~+AClGn%1)Gv$r2^JQ7yW+#w?Ih0 zTFPTiTaeu_=*!Dnr5P3P9SYE_Zros-WTMr-16DXHmiO`tK_-fO5d@W!cEcGwp8)>0 z#u+Wp3;$rz<(mffMC*=zk=d+Q`R~FwH{hRqh zH<0Zr+D|0n7ZCOt4P%(_J1wt9S!di#I7wduCXgKFn8~)uyKVmfNOY1^HU#A65)@>m zZd8-Q41AMRHh*Jw$%#9%H)^}H*bstoxMDkp-18&LHzIvL3>(h+Mv)d%;h(HdM2ICg zR`?ZW?c#VAnsq{S+VoqCk1r`(CQ|(Za_+T}=P6DRcVdQ?MT!%xZX>?Pwu)pyYJHBnG+_&ezWUWP?ti$IuOrO^KXf$%`q zjC5{2F{Dnrm>Ax~5P5?u;M-055#)@GHy%mzau2u0jp?_PY&Ly$+ACoL@ z-jhT_8W@Q3NWB?4HzPV9XHCYa-{-kK$>72kel+q%w9bu<3xmuInl{!A_|kOScpr${ zu@*WSGowSv1N$IaZ>N)|slJ;VX#DCcyq$SaeGx9FQda{{RJu#v^aAldghdv?Vmsg|v1-4q#j|hFL8t zUc+C=k|uQ?R4UBG{>E&kl@Hgz*sof+L_*T7p*EIlWILs>xIMFh#V%gRb-{ZhLK$Pn zsHc?fg-i=L6ov#kwkW01OJS%g(S}yUljj4UVZE2Q;fER$ZettrXZqNC)QUcVG1g-! zPSYeg(j~bM2D`S$hfoT&Hj&cFFjGmsMX>_0b|v5ahuyk;LKtlsV=q3lZcl3*==m0^~)8x3LnV!+rY%eoD9#Ykd&;D#K}65=D;yi>`(O&HYQO5(iM%1 zJ|vp{#Ne9$01l-kXj(%OBuaIeWs{aPz0nNRE`!TOa2l;e6{*7#DdnytDoIF8u$Q`8 zLn^UtdgN*sTRFi7lWHfejyzbR+Q@Oi+{OybBsU(lL(f5v<6)a4Ot9CBWJyyRo>06) zS9%g8IrATpB2fh`>Vd%)SEW^>{UwSWsMu<1>qhlY8f^YtEJoF<+qdtsi z$oC!wqrQy~N2KgTn`qRGiW{-GW6U4YMtzN5k*fLnAap1EH`6q&dDpbpC>N zSnMSO$IvPW)kKe49>R{JZc>t9kM%vQ%>Lwi)U{2e3W1n=3Z++LCTVp;4d{ZnTMqFO z?3mg#N4pqdZ-GPljs=lyQov2L8>GZx1ypqw4{c{9SboN(pqWmxP?5V&B~3+8Vf7fg zGky*Z$@d$#ZTChWu~RSLa{a*Vj<6rY6P$~D`~MTl8EqT_%Tr-naGx0 zthSs?WJqvIZ8k@{nLLW_;)?MCnK??6YUfQAz^p5>pHP*XF+;%Aag^A57{MtUA5dYQ zl4+6@-&_xS$5RW*cMG{##7~?EMwG#exe-os#{U2Uv~Fv08@syu1&pE;jS$nW;~bJ> zRSfMR5kFKQ#Gc!YOL1}&dz9$OL=BWO^`UhR`ms;2XE}8y-M&%m^(`&eaak!4-FqQC z)xf7>-Led2i3l8B^E5a21Bn{wMeXW452iCc8BoQ%_2gt7IX*!Qy| zhKD37YH1;*{{VuNhBqV^wn$}8YO+kEw{|Fn{22si_td5V!{)eXKP|Tr_dzoZv z^2I|up{XEN$bqrHa$sZ8D)}UCP4*z%hpW@h8Aexk|^K)JjRcI_}_wP+Q5s$fwDrucL|rxi!$Af*vsU33i**; zhe#*7DP%cLra2j`ZT=OuKX}RRra1hOGUt#?Cr);bf0I>T zY)nd!-qo39xSsV>4oCu?2?`->*zT92-!kTv@`s&*(*#3yyMX?=WhuHh!W&D_nBms; z$gvKxNRD|B)!L;g*ksjWxRXuAA@M`1q)9mVjF}L|n@iN_dyS}VJ`mPM+EIxcxzUij zkpnL1TNO3P)lqW-35_kABVITnnhmFpg8|f6(mzAL^!hgZ8+A6qAjt%gZ!nOqU2g-U zcnp2|n0$63WaL^ch?0A<1j>$xa>JLXiH;4D$jLlcRk*~A{zXo1o+Dy>)Z$*m-;t1# z-7j(PC`nC)>*+&8AhhsC7?k!cF+8IaFQIjH)N@59R4vI@b1@7ra%B@fWRFL{+;hO0 z{{Ty>Sy1%jxcmJ}HtVSZ&%XlCn-ZCn*nTpUnE?ZI5)46?38joeW15SY)NJ)<%v}4taFfIH+j*Sst;SxU(^oSSy#EfHFPwt8Hl1=rQ(|>{J{xo%~SLKcQ z$-bF4BKa8c@H-zfqgDR^9!WMwjD92E0$MF54C6#(Y6h=N6Wo(~x!7Q9QrRwABSb#A z(V-!YOVTFH4A1aF{{RTDD0W0?ofn-(I?-s|jE=not8yo=pqQzN7G9%L;y01LW-gf- zwB(S_cF4$AEkr2yQAbxs2X4b=%I5K*5bhSu=Ofgz-NP7}rBw1xri=?iXDX`5y9RF@ni5Xq=3!j`QUTvK4lOl&SoPla(R9{{XQ!)KL0@`4eJp zdl>fYW1AHGkGzKDvUR>oC@u&k`VGj5xrWe+=G zL6S>nXY=7;ANPGNf2{8O|3Apf}yg)a^q%)@=8^<)<&oj(jj6a zi!X5rUh<8F6u?R(CNnN)BIMOKa5b!K+%&grEV|*f@=A}9jm6-ok}AY`k2%n3R- zf!2F+C34n*AeO{f@<&ytE0iVfS&7(xq;A6_B=_8I^7q_S^IOQ?lGjeD1#WUVC(!(S z9K3cuNue)uZk@DB!b_|SxpyIw=0qjsm>1}KkcCU+sBDoFY1|`nw_z!iDxsF!fsM>p zYz-?JA#Ny7pFh!iYhk9Owba{E-6tI2WCUzN9MWvF1fw@h2hHaaH*SUQ8dtvyaf-FV zdlidn?l}Jdghyc_JzkFRx6oMX`zzwcgvF0({tf&MLQ~<b zSH_2?QHHPBqZ{@pnrS_k$sV)SLF{gqgSKP=SYE}trZN7BFLRSh`tEF@Pnv(QYGK)MZ$Swnum5j zoF@|FfT_0=WXbUm8q?So3MZWr>r%UXHRs*2Jcb3wm zPj->qPs=Y-T&Jj!OX(z8K)o8kwu0(T@37IIOR(DC;7iKkhQ!=<7?D$Z1(5+u4D9kZ zYo5$%*}ld6&Pa6<6u3*4%@k8ZFRPy^YYMi1R>!8up z{{T^?`4g0nOeb*HIZKtX0_2lu*o3e_*}%f380<|r?v`LrJS-Ba>FkioHSCzwv0gTLRx5koyi zgrNC{mcInTzhY$9;ESNbGxRh!FQDjX8paD>u_^NGYBCLM$ZmHV>!MO;)cuAC>N3#i zYuIS&d_eyI(UW3CbR&V@vTgYrk>Bi#+gy!BlOiOKVQ8yQV}X!A83SJY4Z|Ige?5$r z-(G~ce#2e#O^v}CmkHI2a@^RWX~PN@T5AhB-(k(mO)d&vs@_E^t{8*stW5YBNM8w4 zqXvCDQ#q18T$!JC`N=L@^<$W*n|JOve2vL%?q{&A$eB1LmjcN3wp5s%CZDnr6x{GD z54??Z=1GvV)WE(6IrV#zxf>RU1fe-hjB|a*1}Q~!W7{^`zh+MiX9MnK*vV9fDV2x~ zBQIPGE8WRh*tnby2?uqFw|0}_kRvDJbh;l{e3^v5GCNJCvS{RY}s$uTy~IF7nWNMp28<8M7k0qr?VNAQMh z@aaqNIH^zN+=?i&hJHb?!wap!8yj}ZcAwbZb;+l(3W4xkSg4A2(cknot2WDVAC^)# z9~j6KlXUSU9NnZ$l7!62_J)jToEtDa>P`aSq9`l#z}@yIl05N-TOyLB7#VY0Q<0aY z#Fj8UGL~dpzN9m7>msG1W<=1%h9zW7g?tM$V98j3ezJBq>PFY3-sGDQ_8yu;kxhTWTAv&8P2Cd>$^}LeT=7l?$+-J<2ha#t1n{)CFRZ?;{0eZMiIzA(!G7$TI`7yOB!a#5XMY zc(J-Hwk{t+Yaxo7Pw8m#d3zg;LGt++-E`9;^M^DvG^><3sC>#pn4GSpd6*Q;I*kmI zZkv^j!&HwHhss1ZUhpQ=L#OkQo=JL;=QiQ-z_xOxNv;zKkr8jsJfR^OTemzDAxce4 z5-Q_yyy^nU6&1<2fQpp}*jU*A0AWk;;ABAa$u`L$Ym>0-FR1>FB%djd12;mOlSG>j z=NO^v&g@;ot_Hj;jH!6eY^#*jqo@XxIx zhDD1T9%N#-3q1+&)7Xo5Hi(kQ-LbhtGR!47Z6=OIa2{wX6n7Kbz^b{$vN?UhUDlct z#_E;^!)YuBIVFhLcB{-eGCSd{vV5G^e8k-R$%K_iT}Vd&-_6T!azhhjxB46L7T$^s z%?f!OITXvHbSl_m7aOEXFeil_@Hwsf3EMtI`iCOR7%TXRcF9KuG={SxOHn@JPE`}V zkJ#U4xT$w`_cke+pzx)kw-NO+UKZq$9ASud_wjzxB`*^u3%BgcS&E=U z69Y>U87j`1bMz~xDR10XReVsH4~m3PUc;e2q_B|aySs+{MitGSN+A3X20wyHmQzDy zM7WA%;8+gj2<8%|wAd8b16#FsB~;@4FK!D|a$v8_6#P}baw_I7NjwXw!A=V1+Gi_g zbN3TsK63qhk*Tib12_l%8aL{{SiyZ}J<~$WEQMD5xU;0HjxO%=HXCFL7U5%WE<zDVrncd##93bF3hC`W;0l z`YP~CF*zjKz2kv3;s&c^mU1^taR@Bl0+Dhwn8ySwK0=~I%R|XiBr&*(DWt74oX+VX z@j^$D^%mX(!XiFL%&4A3{T%w0YdrF7eT<6oM!m+T8yFEkN0dx-5?}0@HCzkXu25cC zNnIki-;t}h)$&+Ka|DG*LZN*(8r(dOChSVssonHrH1-rsOneN8OqAavPF9olDyefk zEp!uxG!J-cVpI()=v}d|p_>K|Y5O-MlQU?M{4i}hi%XuG(DL+?EObTp zHu)pT5cfVu{XR5i#1&#!BTz*5V~Vsoybzu`)*|E5h^SrKT$uiiESMMqS`4<21E`Gi zZTZ+^m?0FK9}|0Z1J>Ad3Tmb$(3l4LGh%J?1;Pb#9n4Nz$f>91W&|}*#xfLCwlhph zoPZ{g!z0t}!iU)=?<1LP;z?!eWxnFrLmsz{<8g1wDYy71Wm!K%(PD}sy9wL2?2~ka z@6cDg8@b#>DND@31mh$)5*E$ano_nw1!^Fz%xo#jQ_zc5htTOAP~73obGW{TWQvyl z#8s47| z!xPpYFv#~}z$nb$Kvu3)mBL;~(wd~uNNf^W(S!j7z>TCXh5HHENE<=EAh!)lC5>S_ z3DdOI?%mZFn_$e%H2m;%3 zP{hVcx?=HKdORd}5f%+*f21x6W>XTion%S1lQwXr;+4;x#;29{NW@5z=Z_?6i!`>% zM%znvIlm4FRC-9B>xgAjg!m5os$o5ckE^#|VLnxhGBgke!LtyPd>;wj)!%Ogpu@7^dCR$$n^iNj6zOvcfN*(e-3! z4BcO0KX!)oY)XwZVkqXs-Y!eR_1HpD+Jjsia#)AC7+b7><&>cjWN%c*Y&s>L2||1f zQX?kZq9JVMAsuvFh2j~a-3bXrk5IBVEjz4WPIeZPH@RL#aF^(LFt)dmEyX92+eEW1 zlu?Q7o&|7R%N)`Jwu2@DZnH5MNU6KXc)(Ce#3zYRY?G8)Vwkfq8>XU4C~Rq6#gw4c z%Xuf;o0%A5hQ3oJ@zj4Q<`B<$Y#@+o#j=Xm69a6YT#BwDtcX90>E1VT2Gl#cXOp|Q`Psgm@=W9g9z4M6@0ltixN(FAlbH;3#B9D2allhjXvE4JATFrOR5m!on|>CDlr(ESnQ5i?K5j+TfoG< z%8sm3GM;9_8X-c2Hfp_#X1>PCBg44V@L>#V&Poa?^d2W+JnTJk`ini#xq9fmPr&m+ z$3fd8^gxjp`7=H33qwkKF2-ZqG8K(?J~Tx}2uMo{V(QA*(6EokQS>@*tn8XOfjv#^ zNxXL(ByS9PRP5a7)Z=#|XSXMTK`2$rVOXTL(Tux;!7xx`B3l(9o);Me&?bLMHW2ax zM~uLa+2R+!7A?20;hsrXP|*nOW&(ueCN6s zaT?_fSIRspB_OL$)c9;^Q_Jqanw3rI4X-Qc-hr%o{1Pxw*$La9V#}Dt((XhwFztE^ z&h75^8Wxpp(3%ORNxG0{wPb1^mL=(_-U;lwK=@Orrr1uD)M5ngw(Mg$JJHxs{0B|3 z9FJpz;smg$c_$D~Y*60qyP{Rw$eqPBvY;i5&A_58?HL(a%^|69id$;~niu*S3O31^ zQ7qt~lKhH`0XVyb`x=sBwhTp3!x0F`tMzqn%Pz>ZMpseij)q+Nm+zf5hXc@E%uHIM zZLx(%=nW*2Tai7_L)dY1ep#7X&S+f5-*?)ktdHs!=S+66?86FXGe2V3hnOKIXrV`KN=yH8z?>miE!?pO|;HP{7 zW_}3A97(oFBX7tYzg@Aj5`AQI%&|JJk+Ww10HL%ox(w8}A+2L`7%r-wNF>E$u?=Er zro|&<@eK_;y@x7FwlTEqV3D|{%#B5G<@gjt)OAeW9m5e^lGu|HaKg*x6Tq%1hq@5u z_YzSg;j%QpTM=@ZxkFAF)P_yxk$cRsiZiMcCzBMskL8-;NqTk3JPKWxo5;di-z|=t zhSMb2Z`jKklI`S-DP<~o>P>{JnH=^cIyh%U#N`XSEnRgDku$e&-g0ELbZkm_6l6hy z=aRPl2@3m6BooM-v72evR!})Uj7xNq7i)=vNz;x5bt8tbV9P|k@b@HxVF zxh=qy^c{&ZTxX9t7zl19w$671$FvyNXOup>4n|Gm(#W4MA=g&NLvpzM5H(}t=SePw zZXkl?joh4C$h6k-1Lcr=S1z7JyKBINS!H%$D1wrsu@sd&Sq74ED`Yt;*DQ;_bXY1W zO4wmq#E^v~K_uvFCC}h9G(;9KZD*+sU*uGw=JGV|B;y+nc_Hi2Np;w88n5)f_%TW6 zks%g6$@&wk(D`tOzb5f3`O)X(^rIck#x2K)SVO?!p>Xa!yp1jU86PBcAXU|f+KQE> zwnXW^k%Wml!?S>!BPC_RDVh8N2~6gKk1F@amFF#ji6@YCDEKD+blhT-`_O|JX0%4e6{za7WVjs=Y4EKGY?u>xz6?fNdtj{=hKxdud0PnxdGtE8oo zY=oVX?;nvbD+sB3Gwv)*7eEk(SuZ`I`4faBuvPhiE0$>*FOfYH_#qosSVY)y+DMnl zdN(5Hu-LI(MM(x*GBfNTe}T}cNSK1!QX+yzt!$cTa$Aun)jmeXa;Zp==AO<+VI1IW zX{oZ-!TUnW81|js>0nJzI!Xm`&8Q+yk+s7iNhvL$t+t%236n_{$z)7H+L(kLB>~bj zlS)#2&+J4eEZTS;r&u^g4K5IvC9K75p#J~`aB7MEh+WgrK$0#J2V2M@qbtGGdqiEx z>GV8-?EJlwM^s$(u}X6tM9Ex`%bUW;r8KtiB6vv`26~C& zg;ThnCg7qRP}4?boRLY&Z)qjz6U>bS4wOn%$ZC`26HwD>tCT>X(o;RhmfPxw0j7=y zH!Y4%Cf?+@Sm-FGbIA8t?#f-EJTQ(&HIdIfq)vH$qAO*zq&8);cY6lh-=Q+Nx-vyG zb`(Nv)V40v&GL)6In_NMITRNHU%#cXj0r3ACKZLuvVDlR;NZ4*hPkclW*RRlsAm(wIm9TN(&Wqt{+ zyp!%vr=gF?m;|1_hS7l>z~Tz3+=8Pww2c*ke6JLF?eW zH-9<~$M7`2&pIm|_z?rhk(K!xGX6`2fW;A>q$gmaQ$Q3#3$jzoSt-c1(!(_+>q}Nf@l(osrMa_n#pU|wd z^cE^BA#T|o(eqIgV2sel{36D@;BUb^5_e@nMEDzc9%46pe}dd_FA(0NehM58pXHSV z<8DbzZP==L;7R%t-bVEqv-A{wiKEAk+?)0Ypdmf`2jjx9MJ z&%Y2pL71->k#a$+x#vVts+qDsW98B&!@F)$@3cVKM$)n>RwMRaCp*0R5r)IB#@@X5 z858nUth8T58#YHMQHN|o9dg1Fz^v)GZ{!U`*$64AH-b%V0>d-cMJ(;Em@+ZAV|YgK zY#27_kXSJFDviSNmg<%VM%k!SgenS_$kfLr;Gx??8zRu0?>?a~?09w(R~OW^f*TJi zc%m6q8zu&M944s{aS0xQHX(!!Y@c$;qFWJZD87V4oDIb5QY9!Sh}eg-$qVXql40XB z78uBv*PzVz0F4c~W-<0Th*=yh5D{WWWC&`|$(rdEl|!n|Ae*@pQCbXf6LR`)Hgwu} zo&-yT_btTAUg&PFGUbiAd1Fpz-I9!`;Oc2E<&Cz6o7;q4LhX^8(=;l~xI%@;!P*y8 zL$M7vzZ{GHMFuag3*s`LQyoFUz>?6a#GvQ!*ci{ zdW{~$sX|e2*zZ|Rgo{rph+y+GDfvfL{{WCr#`;^dH9=R9cqUXqLfdz-DxFlUF`3JU zg6Zvr=TWyKDulsxJMd9z6iYNY1a3hRHM;sZ*PyCto`Sl*f=JtvFTm{Qp#CC=;<9gF zCPjM?{z9U5x*VkYPbAZenIXr7aFSl8s)MN@?GHzb;lN6{)cSsIwNExdybGTh_zG?Q1O zSGNvW`e5FSn0xWuV?`khdKi6qF1vLcQNL3x`cUTx8taoZWx-4c|F4CGh5hQj~K46+uR43SOCY7=#(#XpraQQ@R;fQLd zz_Zkq2uLIbnDUqzMIH;n|$_yS^1le4o+iXkdAgnPZ*^ zR~4r*cXU#%H9mU~A}PqxTVZcOh!je`{{XhNXY@z+`RRO%Ojwuj zqRQ-zyarc5g1N8qOd>9OB2=@l&U?&_lwn!ou6<9%iahi;vG^Z%RcOFw{Cm0JN%F(?kfKP2B*vq z(1CeGMl_EjO^CB3ZbYMU2o`t{v5c7^k~8d8IaK;lFC<70$0QeM*9nbFt2s6?w;1EWJ&vFu!)@Lm6Ic^ zhBY_bM5{NOBC)qp2Q8#xA+0NKBuo|Um?X?rJ8>)^0m4%4_B%;mNWiDzTf@+uT;Xsq zn#VTDI|CF(+rUD)bJR!BG+jMC(Hi-<@BJH`BF6NM`SbE;pV1aRITO9cM*?3v9;FR` zfnZ5O+RKqB+1-y$Y)SoJ1G zhgY!w0OVQNBzklaPr8D^v z^3-I);4F#*q@SZc;x3II%|F2s>J_h}BOy^O9{&JA2}kbj{9>{j24m=+6`1U4DZP-~ zdl|R5l`mH2Rfw_YQ*T5@M+XnAp?wAZC@z8Guf<^U}{!WndKIn z_F42EV{SiUDqtT=KOs5HIqE6eoK?}D<4D>1ai=aeQC+ezO-ntC5b|x0(2^av2(cL^ z=hRKXAjLK^E@Vk?N;4T7zwBCxrtsK?6dPbpLS|Pj;OoUp*oBn4gvKSR+=O(=a+xIz zw%ZuUPh`!*d?#VQFRV!3rNk1=do~=mAu%akJdyJM03pq1eg`Kqp5)q7_IMsP*}ml& zCDG(rU%Ala?=;e5%@m^}M9kx4T2|~Ir_iP*a@&n1i9N(uN_V_=9NG06S<5Yg6%}_J zR5?CY<%74(lbBP;_pt>$(=)WV>A^3wvSz!L8;A-GnfHrsW%nKb07#C*LcR#n2!=r& zkiF3|H~kTUNuiDT&Wf?vk55x^`iT!Cuh7Q)MCq~AWJ6UI|>V^^5%VHR>r}+@Lkx7ItlU5$l(QDSf7V+v`*TnLw2Dr@SC@ImLqmf zn~)~rZAcW+v=3rUYDY1J%-K{!ta6fe2A`EeaKXj@k~l%qKu7X znT}0_Luq90C)8USmB_iHp_g?Vp-U9xU09j%)JcYf6v^8TNybN`Ud9H(TeK%07fWH+ zc0K1KyKh!EZtgaW{E6GS8L2XoEWa5t3q^+i09V2r#tDbqh_SyQh#&YojbD^BM1F`R zZsXL-d_)&`t|9~=)!aU#6DMi7$+`{LD_y{}ymVM64;(Ga=3_E_({O}WBw+!RsYNwi z%aqcnl1#KHTi}7Osn}%4F}%uxw{IYny4lCYq%&%xIrbZL`-^URl+ODx)p59!(UDV~ z=-f!p1#|LF)BcsyZw$;#M!CAAZ7q%oRH6osw+B4mGYy_zkTyx~o$x7l6Sdc{-7aQ` zg}I;b-D7(i+J|Evv zS600DEV*6>0iAHA?zjH{41}~3PmnuWr*ZQ>a4(lTKub>5b$H-It1S*duGXSU`HM9o zPEXj>uh^Yfkvf+%nBdN~VpdZrxC&0vsTAp&7%cfCn=01$f(6=6O~j<0M}Z{h)MQ^F zDq76P@I$L^%D>Rz(5aE^noRF9{{RwCi!`a*(`m^LlILNYrzqF~HPB%>js&WjzQjU#3`#ngB zcJQHv4rPSNWed9|S69H$u3zMe#zR&T_6=drMUk?;;*ms|gk+nh;|Xy$Oo&KX&@?T! z_LgNoWDy=F`>9Sz!K3Mx!D}`$^=s z;E+wfoDcqNg5CNG$$CJAY_=RFdzM~Jg0L-06f;aqz_MfVFL7GqsJpor0i36(^`Caf zwnxr>O!MOpaoHM;TMsC4s=#~%il@UHWeq*i4JQv4%fg90d_&_>tc-(Xs+W>D&uJ7% z76-E$@zrp$nAX&-k2xBlxU6*&Cw)!w*1Rbn%Y-YFR0&~xl74SZyASMWYxYD9Qy3nNZMr4q=(3);v7(b zFHCmI%(6_^ia9y^`y;8O`(r%df9YYSujE2dWkXCZ&?kk|B+rs2YvN-M0EL+{#9v-={3 za}JYahka^gRv5uBITu$|x3BzE-8Ds+1Y`sx}-9@zZ} zs2nv(1ymtP2ZTV>W)l4H{{Yd^&hm@5A{jVj3Re)OAaxd$L;*r#9GF{`L(xa=*)z;! zl;f6C9^>;P8Nk`ApHf?f*`DK&(2U8yQL}c(K4XqX`JX|vbGb*ns~oN8zDjf)pVW=V z?)oRxawc?3>Q44c8Pkb;>WujGSuPuOqp3jfgac*JO|#uH zErd&jfwwHz5@(ts%n|Y<aN6Z{;r*Nlw`aUq>^xc#~wp;>3(o1;W%!$sF5 zPDmP00%`39ie82C$hP$%+J>e2+>)s1Ewh6odD5kPBzTiP@M&l0Kk%5*(IU583WDn% zpHW6!vdzaG(}98JA5U`0MEyvCN3`I-LJ(deF_b!a4+%+dl;mB}D02gK#&(wQD2&kR zOE?-F58J60QIl3K9i*}HK$60?I&d-tufxw?H0y$SuJ^z=u1gqCh#D5xHz9ha<-uTn$XsZ9vi+E#z}a+cheh{R>8hnK0P>5=u?% zNTk&h7D%OxM+R2#ct;-!9wZcUjr%0ri*lWu$VKoK%a6>cobN5h6{|bwmpp8hRH9mCEi*rCb+OI}Y{i zKY4A;yOzZKFM|-z&~FUvhF6PAB7;O?*$wN^ib9oehq&E{57R}XQ1s4`X2$);dPi}H zfg@u+nmn=kvMc-_*pE9OW8A@%Za~Pg2_pXhI&IXAGRWNYHy~`-Ok|5Z43VMpHYPQY zld=Tu_SrE_s$^(qXMx#NlgMMR}FxQ5MhCI>9?_;~|$ zD|N7?&?yM;+M^S{rbwJJMJYp{k-1{MK3NC!lgc;1?3okz9dqbLBz_0A71O@R&XN;YF6?VcJWdg#Jr`k}t!%?*F@==$ zrDi2)SZf)8W$SO$~aSZ_-QxIOvq#v7S64U|orhDMi8UgI66 z^+If0sWLRwj$!UHZ8;@^B01Y82?;Ewm=Q||lXxcAU2RbMAq}U3A*$Yp%ndKA?40bz zENM6=*lt8_3~o`AO3R;083UP1+RaF&0=WcKT?RaoRGh9^zJG(k zG~)ImNU;(~2_mVyWOJUhJ+WGoBKS$?k?OZEfajSU^1@Pu0$(i8`pF0#%rF?vedsuCMWISZ0`B&&oMGOxzIM)mdi2Xs1`bSLr zV}XyG_%D(c3k@B`b2HR+ZygZy+;?L{rKRk1K^M=7>`Hf$AflQw-LYd!)TteUAvL!H za)jYzb4=fHz2)3ok5__1v$;MH!rR$l>^s6uxJYK#v_V6?2lSsq4B6f?JIm1$AsT!@ z)>~4$9@3U=No00gw~R~8ZSW&u;K>uDmS9-&&iOrk z4agIeZbpwtf_2}ZogvwhNFv0b!0)i_>9@%vdMon;NsUmm)N@L0xlE!kq3(!ab|v&9 zjZL`|Vs0HtLs%3N9X{a?e8L)snH!WXvi+9C+TMx#eDo!;$-_Aq&TA+`v?)1EyDMaN zWJqr$@+l$Q*qL_844EKeP6brl@xa&J_t;_C^CXJ(A3u@uEc56zK^=OKzc*!cTHTG* zgvIb;V9|bX`tBly9mcauha&_{Ni%dCm!Tk)h3n}Z+{*2YilRGqy zMskmKL|!VEB*bnIR|y8Gr&khKy!*#>y-}pLd)pd)dyStDLS0FE_a!Bs5Z|nl_3Smu z6Rk6nXqE-=tjNI<4vl6qQNuBaxWFWZq0YSIZd<2pNGN(VnOJm?xQA2}K=*5N+PUDA z+KW>or!=P$NUV!Y@J_o*cp7xlN}zHlZEdz%DIH`?BxU=4i!Ig!HG~|83oO@ThAj#) z&tefIOOcmTF5Nv1m03pKK2b8@w&_8O;1%7P;^dxrSV24dnx+d>dN@H}!gS~77>EJGZao)RCUAyT zz2Zr#M83$344O66$bC?ToF!}MtHY>?#cg8Row1N~js~+7$dQ%qN*$vNn5)=xk>I`} zem5QnEza^VugRn~6O;^RXHrjl#70K2*!7yc`$0HM3*edb7nW`|XV7DF`yz&Ya6Hc4 zM#(4Fz`tQPaS{_}j^v?VNfgI|*)i0wVJpi~^e(x*+alMfRJ3L@K)Z6td;KNb*peC6Y5;%wS2wgg3#V(B!2m+=)ypv1p{|DXrVga%TEy zM|`fPGxjnnUZy{%w29y%y_*nn`k@PVs8UlZr;)=FKj6|#Zscy#mf69O-&t%@s`WRL zZq^4Bp_#Jrkr!p7x47Di6dWNZQHJLa=zzZx?7N1%NET^5ul7olZ6sbT#C5}SdI+r5 z!Sb@z;uRI?+*g%<(7KDDoc9tjHXpHMyLf!xqVFZY6n&1i%e*4HbApew6Muo_;7Ue^ zG)$)bc`6oQX4ywlD4P7AAyc-(o6m%_Brrtg4OC9-tw_5KldJrR!l+AjTrP!(XCdxh zESxuj8OiW9=RSgHhjxk6zawf|dYjR%<>ILl(Z_MLl%Sn6ILIj1gq>j=K#(1xf5Abo`%0 zX#W7wQRXy?8`5NUg{)Af-hFlM%rXXrZQe_$H|HDK2e_LMyB=G}?o>&(3PyE#WI1%16nUNdv%D_F4c#17GbD#bNjKL6sT8&C{3jRclw z64#@|XG&VrnDf^XCsG#EmPlIeeJu?ZM;6Ai#U5vK5+y%8rzQ*5lo{`(3UiRY3NP&x za(x;6F(j>!cV4Rmf5zdEUg1Q9FW7Ms(ikmZ_1_fZO1Xsny_MaO z#}hrSj%W(49u#cWHJQ>U=ZjnI-4-=V^9Dx4UES5RsU>K1s3t8B zw7R4Dy8#=_WLzi}KQ2W&`xmK|M!6s~SXGPsfD@GZp_|Y71`fI}ufVMYy2zCc%{-Tx zEubI*%Pm;->(}1wu~jn?%4BYoRQ$j(lH+5xB5Wk(kr<~yfX?o|0R!A$F~++`#oshF z{fa?9b>L6!xf-LJ+x*`c?+y-kElBCAe>v5q;p5+N*^1G>r4{YR4nyOH(g#~Pt;cA6 z>E6kTfQQ$l?F=1Id9=NpD?!JmH+OZm^@Ym$BP}KUkB1^(?YBi^Pv19J|L@k!5$v)l zm1lvZ(2vl0a+$HZ2cAwa*_2~Jue-WwjF4X3T&cO~@QJ5d{_hrDfn_? zTa0blsqDEo;82Rjl>-F%aiDbuP&BA#^sYSffxh@oC3BQ4$0YsoRj!XE-N=Mxl7X2a zZ_sG=1Y9+M=8=9775gQn*@AB-*eAy5in<%hRIt$ z(r&g5av2}skM5$G1h?+a)Giy5OJG{D?~;3U(&`#=OjN`Q2afns^0HGkGWj1H=Tp?` zLDaI+mCSW9(VkHA#_UefQ&!5EDIVR;{3Tyc>pZ?*;;v-=)W(W(50Cdd*#N0Vz=B>M z7sNq};Z(9fN`g96WCuh$en{KZw}?`^Kt3WeLZkQCYUNGO1YxJrVV8Rv3Dc$~pL&%9 zNm)xmORXsxdwJIkPgainBUkk5pAURJ#wT(rQEWTx-6bY`z8RfO(nn%;vlqPo@uW-p zKj;V-QhB1Uf+-(6|K2D)nuYo|Gk_fLFB?;+JkdCLz7D%C1PYyox^qPPQ9N%oQ-5&+ zDaB|}A;xuIG1$2K+=@A&+)()N2N1CfEP3XwUW1>?d0YS;#@dDh}$wu4V%^$V-Pj=90 zav-<6atCUy_dRT5+xW)APzX~&SaOhK&cZ=n{A0js6A$)3J9&})dD!)K(8q21+7h0G z$AK~F>SGv=T^Fy#PSFX#(6o5)TrAwmKk$KOb{RdD)GM@=RJc%4e~s!iFcO?x^9F7% z!z3P1r3+KIMl3$9&&zGNY0VX<7O?!O9X0a5ThNZ@mz2tM+f-VVfcMy3>G%Wcc(E5T z_t1|&3!%3CEhU{%1os?t+VvgD{)Cfjif^u>F@-N6(RmmT&nA1BC}Ze2( zUp}-)-%~ql>Al(|ah%pE*RX05MQw6hRecW6MvHo2%hjwybxb*IS8?mEQGe!{z)90= zPgg-z*bc2%XH5?^6I`&&AUQ&+tWEYRcU#) zLuS1G-L&NC0#rY6;?Dkei#GKy=e#S7u{A%67aCd>)Vu3~JO!^eFhJu*D(>b~O`C?U z!=yQ~vj5H)KBi9TZb`YzaCywSQq${YTPgr|lkF66#*qKUKRfcc%s@%6leasKGaRL` zs`~pvLOoyKplp(BYX%bia}9f|+G#J2z)vrk-)$JYjbQM82MR(c3>IMfFKri=iADsi zxXQv)wrh?DBRwxNinalg_Nbi$_E_*USxYnJ)@DQ*I+lu;FE2(F@U=JF)qU0s_1*zC zvYk|w#h#T)-U(zRo7RfnYx$Bj6I+(m=HZ>)ag`P?+xQG4{JB3tmM?bm1Fqj_>aJp} zZhl7o4p~%n`PRndK)x^L&_IDi$c)iPnm%T)(%tgS%_!_#uDPH7+gBHw7cLf7lYg@2MtZA? z41Kvztw@Oy+}pArCjlCuLa1El>IANM0*lPg5i1wjF^3AIgh2%F*9IR41n{Fy6fKQA zgD4KXbI&qV-4AId9wMh~>>&QM&+Yp^Sw*T}9>k=Y#Vk50_rnK`+)J71MWAmd0K*i- zAhay?XZ`m?naTcbvz0qME4E6@Fh@KKB^>9=n8wER=A( zXJGoxed8lO76e132G+@HmuPg`5rVrvcy#St4ut>hfcT6>4?HSRUx`?_e#=*FW!`ll z?FGuJN1(2fr6xhg(w_gAixhf=@;pEVzbE=gJs4xUm!MmeF~sNTmN2MYe)nbjBm*4? zAtSkaQ5Er_$ilnu@nPot6_mNQco*050fNH3C|?eH!|QZ$)|xo4`TQclPVD1B6_*heeIIll+vtdx+f0gIh0W~0i&L`PQ|0*)WrMXTTj&4|KHVlf05Z*R3ns;1yAl%?=9KA_ zNY;#<8v~XAOORHc{BGJP%upmT4ro-|qzM;r=ygaMg&fn(p|$|5R?MGM=#ut&n7WEM zjSTz|(cDYfDzItVlsn|B7&z0&#!J;exCE;eEThv1essUVXH9P+*TBSdySxpzQwNKi&kW9h07^ngbu)&KmG;x9o87Wo2)1|!kh(UYieCo zIEK`gBkviaqwkqAEmHZ?_UJTnr!p~`@4wfT|Jw>Dy4VEuC)(>sl(p9vi#!QGRBNLY zz{612UED5*yAnA``?kq!r-hoOrB9U3=hQ!ym~NYAB|vfL7sLsf-KVF1Ewf@lnMr&4 zy=Fb#t!DIU)ZP$fxPsBE{ALkK7x6xOPq7Lqj|I^!X3w)(=D%yrUrw$Fce93KU&|#+K%ZUTxtdm*W~+5-zYsip@y-g88L~xL8Rq zhGLu6ln%r~pQELDhI(m()hC~#%}VeCb53V;y{VfZU;-OCY}@yF`^T9E=?`0YA@@V8 zYX2wZ10QnQewy<0-0boHH7TtC2C_p#qfIH3EL>3}WGYtW6VthiyPT|*7l z=$E0>ahl1KmZQx0e8fUkZvG|j-~}c7r2p7z%rSao?8e4v@MEL!Vt>P-t~*hfW4`&* z>f(Z5$w9#P)tqKC)PB$|hk^2W$)_{a)dGQ?-0A7v?ACW0iPEuqicExQ?$ic+2`Dr% zgq&ujey!v(ZoF!Cm0mc9BGfC?HBMljQ31GXvNY&W~$3R^6@I`dTIQn7>OLb={?P zAmc_bbXLKz$764D1o{0VxJkz+U)ci8Q2)++rj1)BA@ucSsr@WCZ`KN{v2@b12hInn zeL8jJPlV$xu4u;K(KV z*7Zew7lFp40-V#Ph8AP1-WQ%wuc0z8v2}A=ug5lb1C%N6A#o!7b)gBK5qthv47eGztsXR5O@dQtOet40~+gQ3252@D79Ppr7*`diu zN%H;HmnK3uhAw#x^3Sh1*c0XRsr9~O?j{y2xS4D5x5At-;<8~(2|$lYx-GG=YJr*( z4nY%R?7o<3AtUW`R#lpxdZ(6o@?_uY?&Ml$jDE)H~_t@ZJjp1kTC!D(@Ki_3gXv^c>l z?FTOY1M(zZa*P%SUhzLS(aKkdBBq047a=x%XV);k`gVg<+X88Gx}NCvie)qpi}6dYdfk_Oql9e4~Ahz`)W$ z@__sC67UaiwJqG92LBjS*l^XU4DmUOSB*Fml01udiXCCp?ZfzjtEd17E0jY3=6|>F zReF12%(cjWBw4SxgPiq;p3oH3b^{sHKH|bl!VxGQsQ6+X5PoZygN$%X+JE(H&4@D|@(fWd$k0qGfpJb1WyqVJ!{QO72KvWji{O#zA zxVs}&4q3%pfn?et{2N7Vx8qOzt5ZesmC~aK9s`bcY@^DFbb*Vj151u0Wp=aWf*^Ft ze4KUIeNH>PN6C zf2(mx=#+8xvuZKXvcgvsJqqzoL<$q|e9=b!n@YUD?18eN0jv3v2D7r@1Kd|0SO)8) z43PMvJCjQupFY7_;_~17lN+Q#E}^xdx7w)qW#`*((Ttrzl(Y@Jff)L!O24dk zLwp@h)hxqAFFOgTnHak7^-%YsG}BE`n0&Bdo{g;XJK0VnjR$CgJWBCdb&0!MV4USI z0sA*&w6a6Cl0OS=*^N`g+2?cljb8htn6W@GN(Z|2MP9i?7XhCf^U=acqnL4J@f!}% z7zOTZ9UT$LgOd|(zRbyxu6e_#mk}Tf{P>xA1fVL+EaOJA_HD-? zaEw~8$2D^jlYNAC;?SYH;|WoqCZjG;p7x@Tco^}U9b1mPL9 zH#PG5tu2?k&}?~rk+~a?+cVg8#<{kP-a135(t*DwN|;B%gTJr;(?D~!S;yN-;d4wT zwv9Gex`rv!0`EIR%u)i#Ugaoj7Upng?hyvwTfo*tN4{B~0px#f>J6>@@0P&@+X}Ol z(-=bH5>+Kxk0)CaXUrS?2F|~j!Tx}>>tuUJ-V~q*3n;ALQA7F3&1UX$c*fjzlm7+_ z9G@|8-jb)_E_J>VSk9pJTk24Q)L6xfwb?wxv}8Wc_V+wUh7j zS>}45(m$NDwi+w|J;&A;P11+Mgz|!C)&}}_2#@~GMuIord@a9c@Q-U1Lo*#zosG&T z7e_EGQQ2Ujmf4DgK=HsbW>mc!c9VOd4X#YvfNJmx+wTNZ9X)Q!5yeqClR9N)0s#hR zfMHht3pFbJz!w1of9G9vDah=0MjCN7A?%@JGh^R>I_%vEmF~)fH-@Lrv^{s18_*PG zrDPNrFQa#HOyX5wyOL_oIUszCB9^TEl&4u%uL=pT-RS0=;szMS30j{--H{89vF&EF z{*dCY=$Go!8!*sN5e<v)X{k#rX#^d@y!We`iEvJe;gyBADsReUQ}W(iin<=aZaZOaiF%hOlvp&*P5IHicI?kij!x{hyW#y~sefFWgOgVh zr!qe;Gpkx%%rJ6CDYbugjpFREH6N}h?2HR`kMF%lB@DymYMZM>3i@Fm-oqx;PF$O8 zJY{RFCV}RswL)T;Z?M)Jcdzl2=5NFHE?=@ZeHE(gWZ%Vsqjtxu>3KI9#y%J^adO00 zsXz`??yD?O>m9A+i+a1|ni7cOcF>Q%(P8#Ta?4r@Kn}T0`Gx*z{ z{>>nzLoVmkQ(ojXg|ZNzMe``W$Vpu1)c-+tZ(tNV&R*22yFmcAsPA1c{ot_Rh%c}E!r3#Tm5)HIe%ZK{Bosz<51buM26R`bL& zZ&=6`zo5xqZx?gi+RzSjM*k3?_^}c3mm3S7G+E+^Ai8C+@!IW6$}irY*mH`Kn`F@>+Xxf27O*bxSH|sDTp8B-i9G!jR>M zVB5(9{@La9&ebz%JxSU(8LtkFbKOI_8(8GpDIMP+PQC=7 z-Yl$2kz9pVyL+dbQ2&Il<5iiz90|mx27qSr)`IzumUWRXpAaOtj;(={O5bKOlYj%Fp7s>(`^~ktU>oRzB{D*Q}bI{h}!~oNjZNg ze;rDdv=0zL)$UM8|6o`npQR5_R-W#>BbaUK-c2+L_p{Ef`NJseFo#9~U4ZXUeOyd9 z#UCws|B|MU732h!`4d)9IB}mk?+pus{vSa|LhRYDTl*+|t%?D#BIsV9zCcuk#}xNC zyliU6btQ68jCqTdqN%MfuSesA;WcFOK$1=jt}B4ggN9IsO8ipn5?=2)5NxBaauH0b zIYKt>A`8Zo*;!|Isg34wHBd!Q^I*BT@q8RQato!8&+?zg{Ths&)oa5?hW^O8&vQ8K5I|g!Nebyd>|7!lfG}f zyLbXT6~OPxo1iX%X@WmbWjgbko^v`O?DRAYBoH@rJ5hHX37b1DXM}$J)t@BYJ7#E` z$$=iVQepNo8Ck*URusg#i`RD;w&WImvzF^wK}jxbs!yJ=5@j7idYB?@T6TF@x2A*j zNs;&mr#2+T!a&6|db36ct_rO;O?@Q=QYhgHV-zUX!1BweOXnl-0?s0h|zY=4An!-U-Nc;=b>+|zHP z>B4)%KuL<#@FE~I$%UgFI>jP{Q!`Qj$BJ$)XgSQo-=FOgD8BCxhrHQ(ZtQA5Y;tym zrjNPfLOTIX0**Y`-H8%Oh#@f zyQeU()!l$ghU|)9QBL8L8*=V@QZhTSP^bA486n-KWGP<@`a=q}-!~Uh$thws-|lu` zIF@F3p_FrPcpn_`mop?yP^Ar)fyB=-3XC$5DM=fY0q4ngKi$K_A(~Oq8J^$2Lw}j1 z%AN|bu#%UQjeQj+m8J>Ms6#p491#iC^lK#=7y>U*5o#amCp8Ac` zG`pQY*_s`xMH3wc_@~S|({R`Y0r*R6KghGcn@u7SG*^V4icF zWL{)quswphdglY&j3kocofc^*KTFgKuLP=nHDy=>3PR9zjvTp{+1IHdMga?-*7J=V z!oci{oi6mz6?#gJ=XAg;l=Egv%V!*tUQZY5eg(4G@UgjrFF=;TkeaC5JyQJ$9Tkb#h5`P!0(uE=L5Zg9X><6xEc*8jfH+}JL7dv zl#~*MFW7yEB|B)Y3JSLneK#ss2BNN+uR$zjGQp!rWcfro62iONAof>K?8W!nkO{M1 zhD9@ZJ+XGE#F>Bq=rSONr*p}iL!S1_^SqbfqlPl zuC9Rk!Y+SCSyNY%kMlt3X6-r2DCHShpuQURwNNJbS@_z|f*Vo1n#1l$NYOa#&!3v7 zzs&;h?#9Y9|EtOWiy8f)D{wZE?B(>q`jCK?86x3K1 z&UYF^QTFP{*~^S#;lRV*JB)&*dHDH4ZbMbz86N>0!*s({FYfcYig_d5+qJ45qVj zL#qj+R8-*))Gt@bl*KCba z+F+h;*gu^~p~Wl~6HDin6x4uc_{f3?&c~03U*we6b%c0?s=MlySL4glZ{Ie;>-cH! zq%ADuZ_m>c+~V8?{F6kKAO*&0tE3o|do)UXeZwpCxPpTT?^SgDc!cix7Im3rUuF9k z)-(3t&aPaKJN>hNoIlGnZ%?yF54xVU>95j0I!$irD==cjerdOYbMY*X(rWiqvgX`& zt+QPbr~0bO5z5wGq-P_F9I;djJOjmHpTt%Hu>@=x(lrj#1|7S(B??$d(;lK%^FrIL z6U%NMxH~0l`SedV=vb}1`m+BbISY$-+l8kTMzRhi?CLc;v2S%$gi2aRG5&gT#E&_M zd(VB^UvFslRr;a-+*pmQ!=$$FPaBu{FoIKn_OGL)&$9)mu=B&hW(8Ldb}o2zH_T5D zv&G)lB}#z#4#ft%xZ5CQSxHDcPB@>HU&c3{N;OOsBJdmo zZ?ia_(`x7xQ11cgb0@vW=U!f+ITFLwq%^hDw(Hka5Fc*FKNdsq&N;P^RIAy?`fmcWah=P_NVn-wZ+mGcHdLB->TW&@n%^l1G8FWPD8(2(3xD9Xpmf=nExwcOSI@1 z7xJ%W4Omop$Fmdc7uIaOb6$5a$EuCo0w@5aT;@^)fG|6HyCoh;fUcP;0 zZz1uCF_dp4>Km-C4qVH2r2M{JtQTy#ywTs(z+$SL7Wyf}^#x119Tx5mi72k)k$qQWKXd+e` zTB(fNF#bwya~sN%!bv4oIx(Z)Eku@$IpMf>`!JzWSOqubgOM8mD7n);89;M0+Uh9koF8|2V&hUDx{f ziugU;WfxK->J}7GK7@O5PVF*2%bwKlCbU8sf$q1hsWpT99=M^--IE{*XOx@IEo@I@ z0N9OAxtI8Wz;KqyReSJ73}baSMfEu+%bb6G>D8R>CaSd`tn1>LBs~RB6?+Z|I~Erb ztEOGFpV1NlyKgCpERkm@thPNWj^T4R)$fD)l(c!=dj`Pu`gKv!83;5ONBf6Og9P(0 z+&MO3+7>U`u$0aMxy*TC*v3yT^8t5oFC zrfnmw+6v)wH>2QhvxT_9lDTA=zMUDpi^Y8)m9CqrAV=q>Hohw>!2Rrw*84>gw$Im1j z=xBY)i^$v-Z|`}QWu1{G`b9j4l^^t`v`)OYGZlH9>vxWi zrC9*qWACbIqH z;}EX&B7x|#SosbnF^sgTkVlSH2AjykPfSDgyIPLfm8PpnRlDgRKE!k@)A>ec+J}_o zvo_6MP6b+_8NVfx4QNYNqGE&^1Wqo7ydWZ&$YkSsdmNtc^CQ7y8W<} za0r2QPOi!tIljr>ZTWHsuoOkL*IXz8FDlm`8(OWJS0CkacKg}mVI}Y}m_t)b*Gg$& z%Rm+*t71}NO0F^K0&ekbRYZ@$%hTTj1j+Dmn4>UV+^THLBtB8F-Vi-vrr z>TNSX5R*x+t|Hk1N03_IJdZ{ChSYh3@Ufi|TtC`qU%aj&lDXJCp1Fa;FTIzL71_BS z5_BxopK3ZryZ2R^T*$W7P_ZJ!Qaq%u6$r&KpCwwK`A3mqg$(sr%hVZ8`jqT)! zU~7K`J*n-jQY`Sg(a-b);>UHyEqw25x*}|eRhO)CQNRQ^(J(5@<1LJ(?QtSYhiroe zF~b#8$zTjtKt7sD$}kBuxCvrXylGq6*=Qfh8Z!XJR(1sZWjRWcv8@g}6diL;u);}2 z4F4cmz6>=F2N}(tfeuK?3;`hCSIMh48g2rAr5GT}2lb8OeF8HreH(ddrnF9?T6z3K z3-$ptm%In6`H4+%IP=&y@`%@3Q<+9C!+|9I`;nE}PC&5j{R;*WFUJmfj}P!-yh&@j zhboWnfU!-v-h-~@k=SCR2=+BAC04g!H67-h=qJ`L^}9xFIFN6_Us%5vOzWJM7XZ<5 z{tYPEm+Uz(=IKxBIT~3{Fn`V-o3@QFbyuoREfau<41Yo?M`z&PKj)bA|D~*C?*<*a z>WFAt8bp|ZTIFmk4GsdPTZ7X^Oz&*(YZz(rAn;`&kiX#WXXI||c%N~9_&+rco?i)1 zdwS$)|9F;WLxo=jDc)nZ$UI`#iAhby$ER#jzTrl@E&N#sm4$Gd^_W>QJ7Z!}DKPJ$ zXY2zDnZ>d{-TC?XU6Ohc{QRG8w1i*e?Y7~LVd}{>3UijMv-LSH`DY9@HQdS^FTa}l zM!e73q$>DHGNjm9t8g8&^l~2dht|2K*N;%?jSRfHKxS#)Zk@^TkL3XWvKlD2q7{OJ z_NkLbh8ms}x|9#Km*BBhuX+^N7|}E$$Aofdvq{RVm$ijSh^=JE5Ti{0(njDZ*HY}Z zEWoxNu5E8tD2d@ZQfm}o;O7bl?t^*SC71!@uEqEK40TH^9p1(Nq_a}K&3UfH`RA)U zv?SOA5c`~`NF^GX7CTtHkO|C+x3u460IR z3T5yA1V= z!s2xePP8K}0_6+aV|$E|Z5%bJ)ESCrES6SBGSACX%|av$x016J7Vj7-e!{%*ZK8F& zpap8W#_h4WhIB76d<`BWStjkB03%zojQ3rw`86v2ok_?G!0-6Ce+T0&q+wxll}fV~ zoC2r>4^ywFYR%jCbfz~syyKOBka3N>sJ>1XkdF)cl^+tK%wvlv)OFqs3Th9Qr84R^ z&iB`Ed?+Gir7q+RuBe}sU~;4?4CY$`IbKm}GyTE){O^`)4*$OMosVrJg#KaHb+VK~ z-oXFe@}s+LQ7M-@H6rrkxy4%V6#^{`K51g2` $>691Z%rDqP5rRQJ!)% zo>tb~c*kcPZGuXj-)~;ojT|2p2}s!K2-BI%%cBCW-HuMo94^)*^EM%wIr+uE=7FC- zZhFnJ(hP=G@>HHd)i+y)yYqDmuJGq@*Y}#4K2sVv4HpzFQ64ttp=yn268&;^6&=9H z&&P`ovcS=dU~TT>%gmz0UKXn1T)|-(r3G1U1IR!gW+%@nc2c2#*w3Pj6STMi1{KMl zF%0W}CMj3z115A`JB99|wI4k+aI&pJ3!6^&NE)sv6ZI0ihF$oxv*J$~_Q_Q<+0)sEa2a(j;qrhA}5`!EE>_}xXX&xB+qv!!P) zN9%*)SAed6oXh<8wbhj+0p`V&m;iMBKaiuma1z4t8|9D$lW;vnl^czo!5sR2gd9P;)G>VeHi11*nxIimI38yx&qx49tNqAqm z^%NJ%jh)L$f}-^J4^)F20+ID~udd}j0inli?d9z#ahG4Wxow;>y3U1##>fw1hqL5+ z`Hx<|TFn1NPJN1izqP<-_>XN`t=R@>vzJ1A6d4f3BriqKi{CCrcdXKOYqF!;-L68U=-8i z%A@Q%?`*}J%L?e2us;)np7y}?luzXlyYjUn;6^4a@!P)uNT&V|<`XZ!n@aZ-7@wpR zO<|Cwuu1{*CH7Sl!(?m~yWuIosLPeU$8&Y8$(4lmp7yd-kIW}BTN&VOmN#<-|KkNc ztvzRc1oPl%X-jdMXI_cu!5e-y<$D(ga<`4feCNHp6yKvqGy|b~0d?$>9lC|)4^?vE zk4X>|d2aw(W3!zLFj^BTJ~2B_=4j*XhXSQpav{q*OkKhFG4M&^+ zMye`#%O1TFGLgz*J-RWL2Cb6`iYID&zoRT|+ZfBYKS=3OK^AjnIl(_BU8DsZ`+RGr zc-xd83w3|kDxu)Z_9X*~Fi^0T{m}n8bG8{9FBieIV;roI{w=Mc|C5gBqEO)Y+`uAdZ6(O-3b#%iBX68yn%(+%Yx-U%B|z`RdOaP+a4ajc#Hq&6@fDlO{%EMUsJW?)q)aJY*>AcjKI;@alTU-B?ZL4<%@cf<@)S6JbrhfDkQE= zJvHT=FI9;FC!i+~RH@3SgK0SC{7FVo)}Rdh0Dqn3^7@KaMc?{q-Z?=0G5ixLdu|E8 z^UvM;FK@i8lXeVk-zjHVRFTXuDo-{LW+#!{i=V$la9E^sZhl3T+vZG1fOg)t(yqQT z44-ZU$i&*_wcXF4a!}>n0OW}tB#%TJUSNzP^jJ~Ujxe8-u+e}Oou~X?@K@5oRx4%n=F7vF; zPAiJPiAEMQutjnnsFhh=urUp9Otz79+YI5B=1=f_vOdeqvR{JYW%`d{Kfm{gzQy;q z2efP~pGESd>*Y@eQG;%f>4~3?Bz2Xb>ToQ;|gTs0LCRBim#1w+TQiY*G& z*}x$1qX7ccML;GRd(M|aa7__$0W^629W{kV6s8BKMKs1n^EARd)DDek-B2vSx&{2$ zKcsWk?r}@~pig<2yvGT_S(^YTO+^T&g6Jc?etr@J@L=eaTk0^<^)3F4D__Dc5rEb{ za=t-VltVvsEi*DS5>i)6keRNS=3(*GT6bR=NBFjGpSx&8q{F@VMGPrda3>7dCX!7X zFYE0rW+Im8dH$TChw1!5$_kks`$Rm!9&Sm=nTdt7s>3!tp39h0<(tWiR)HK~F~)`hE<(lJ^@G8Q#8hZBtz;@9j$Dg8 zTp&hiupi}SbY7@ z$jh`~#7=jANQal0$fBj(PsfTb(2Wb%m-83|M|^<6r%r*^Ew$ zX}h_Da?>2lOjQ6ed=1-35Ou}xnKa&KA8MzCt8-g-7!{Ej$@cpB7VgkTf2In-(dN9T zCJ{VCbAz-0_%$kqj`LIgW1Xow7Oj^x-Z8I3Gut~=vVVkTyxZkBaUec5dX)`b9kP?2 zGbtVzO1GZCr?j@R0W$4xaEs}?5&lf}{wBWWQZo;iiFRIx9++Tan%~rnmF+UcpJu2C zDTo{`Y53hYlPUloS@B3YN;6!%u;A2E0p_~OmHn-ssz5+na8xJDB|eK+7h3M4%MYG3 za>+{Hx?3Fmqy%_H_p$!-%bGXWIQ&W(Cr_kwmW!pv;h40Bn-g22_kF;rgf- zH>M{r0qU$1bb+E!tqPXH0JQoxzGD(-1b$arfElYzO91Y8UqX2-Wz|%*X(2#qvA!IQ5P`f}P5TgCTK9zPLT!LsUFS3N6JUjf49`go0^W zi+KN4I|uD`&*WEtExre#1UUcXNL{KKQ0R_NVDC+x%am3J`f8vO`EYx6L594p0VNQ)nU z0TzQIkMA3Smc>ly4Nd?lFN<6LF^Rs|h!zpD9!Kp8I=-DJk7CHu`NZ!)$sfR7C-k4D zF+!)IfuEXuG#V-vv`$_f^JtrUL2DsZIo zV?FAE%;xoRavCVXplHQfD3&R!Rn>hLo8aE=aXc3-lc(5SnyU6aQ3zUfKbkg7S;DxD z9+E>HF!TF27XYXrb-T6aqfTn7_VxHS_r%A6R{Dj|k4d`76;zYpKb|iOEmZ>ES`&B| zDg!_D&!>oR4)U<2w0z}HttJ!xBg6vf)cDb<@cvvEc<8n4LiohBUE}1_wtbJ#?D0t8TS!eXKndmL|)J zD>lc~7z6l{kgd~5eLhs#n%-O?q z!XubPG#HD~XXPF%%Wk`*c0kg%{^1n_zQ>egzXeBL`Wxqjkb62+`<6##MeNFkUea23 z?F%eWBy}(fb+8&U$i;~pcQZ}vEL`8oUe1e2-tvh`yB{*iGizX#rL|j<%CeKzEpKK6 z72PA~yjEywFiz459XAo0V`9iKc8`k1WZHvsMI`0aGSo5Y_#Rp7GG9KUpbp{-56LGX zFH6{%Ym_V5CKZhpkx+#@0iEbS4Kh3tz4+Qlp3EhP>5=Jk^~ok#t=DS&%%9EAcC+hJ zDD#Sfv`pyk4u-rNwuL-@CiNjXNKmwg4W6Uwbpm!dT^Nvh#+UUk9RMUD&SXZi zr>n^6FZm+DQ^vFw$FeXqZI%%j@45ZITd8FZYDnPLeJO+aV1DEtV@Khy_;&7;Be$HX zF=H9j+ktB{@tmm}B8oJx3_yT&wT41Z-%9WyIM6QJB|7^8C1k>JIu@lt`x(f{bR5XE2Rz- zQDVDscbzMF^bYBYlutywhY02Ft0ca*)qR6=Gdn$Ru7gcJKZ87%bn;WHqDLZI?-+_7JaV+s}A>fr+SaXlb^hZHK_21W=V^G9277WL)q+Rao7-E*@bGQ z{2I8P>-CfM{tN%v*~Y{2fsnRuV2ZWtV`G}m_7FVS+DTjXzP~{j+c0vg%IJX72MZ^5 zo=O$7+}Mzzet|-~_yg+)H-mg=xdVU%C}E;}90j02&R9~ZvrPXr4^3;`J3bJ4-1~SO zzm94@kS{DOldDcw<^Jt)2jiJ_43TnKa@Pjw!Rs!8e^6I6<*RUb27>^>$JiSP%$T-# zBdxA9e;C8~U0|9Ns@WzrAuUUr^7Ksi^RTSR31!3IEt8f~Zv}UF$Yp5#A zj){>V6Hw`v-b5 z^KJH(O9ceGxSzA3?}jLN9nc*NZhFGrWv&XFYh3l}y=1}JK_^edn?PU~){xw0dZQ znYozH(d2KnB9PvN4A|h+jwf(J@hGpQR%;RAN`yVvD)2 z95p%VWo*Iuzd<9K;oDc9W<|;FiD=6w%3BwNG5sA>lZIP@suzD{UmFLzb^mZ^SEG`Q z-m|9N=fH8sgInIPg&^(e)|qRycb|Lb7eQA_y5|1W4-@A~!_UeW@i$vRB9L!m)W{F?A7d)7wv!ZVy z9ijz6p6*XCB`WZ1R!*gNrPuqvk-_*0ndbxYc_ZpVfi1}*tbC>>m*aJsheG$;nNp& z`gZ&<=6=)yIhq6)ZO0qbgx1(|`Q%TM(nd4aB4eNR7g z1cLbQ_1LjtM{4n(`|eoxEtHU=;)QiOP5^GWj!U2hDa6VKg|c?YA~(x@aIm>QcVS*+ zN;>7?y%wzjd0lM8nfJq{&)m{zminY@x>i(HpH?;>2feT(N-EmS)GRp3!pSHt#cdpH zss!KDo4K+FMwf5jDNw1cK2XM*?OadIkPI74eLC4RQ}dPwWIdCvF>`fpA&FU7e-Aaz zrgZ)yPO&V;0P0{+vsyjgSAf_QO| zHcb>xLQyXkQZQ>d42$$!R~{xAQaZ1zF;oBY*-Tl>CdO9uHQ1%i!J7P(Bm8CjX<|Eh;b|FX4f||>lVI4{s*mO{dNP1h)kurMs0@P#DVDy+ zF12|!nxb8$JFOGO2)){|Hda3Or_!G{wLi*%OKKs?u6`?&O!#hse&ru?y_XZJMv`)(*_!_QrxT4B#QvqHkLMm}c9_W$%;X3^cN&QWOv79$M&a}l zUgK4?G=eclJ(4`9kFlj4_JIwh!IhNy*)jpZ&S!Yf2 zP^i)CNE64#a0twhT%hJ94^_bewR^X@HOx9<@u@mS4% zQQP%)!}+^hLomaBL}UV5P0tRot!+-bTl!Jsd$WE$n&(fi_6QWGI3n@bHmub16)AmY zf4DUOUc3?Mt$hdrNsCZM+Z9H#X)_U#3KOGU86hPvQzVD%hD`(cBSqUKCfiIqfi+&K zt@5?Pz62*?5gee}qgsUe)~EE}KTxRwi)#gQd!5AR)OU`0_rF~4>Ze|Gj7wd06s$J2xWmQ0H zv#YClRZvr!_J_$ckzbu4G0Jos_)AYU>Oz6$oZihF#`)>A^Z zI2AXk+<|<>!y{RypE)v3Zgb};XX&HVp%;;oMvQSf=15?&92O|kA=P0#9t<0vGDc-D zI!8c4jie(M$zu8&0p>XFXoFQwrmo>CNxcCAIWJ_IXPU2`j7-dJe@n8+4R!B#<7|a2 zBb$WYHk)`|R@kYEr5}4~R=xmhQ-cTLYSmM*IYTgvKe61D)_Lm)Qe&VywWAkPd_YEX8(a@29p2};>f4#igw={3cwfL8MliP)F@SBV6 z+ihyi%A6&Vm?Xy%@P}wgdxvRa{}PJ2Pck+B8X;a?!d$Yvuo!kRD@;3RdBWc^GHzmwf$dNS3}ECa*%q8>_Z) za0G6iN8&(5LHW5?0qt6^LU(#ylYreoUeD6bg0XVE;%3!-mr0{C$%3|O2^3_6 z9e?wf0FQRa6&pmDx#12pV#|y*cwz2=PIxY>N@Xa%Ya^-^PNBT+o@VWA83bEkRKDQG zE=Q>PBiVH!<#-uDcR#6qTls?KRx~wS+tW$$ojj-_zS*P6cH>_pN71{+Nsb#@lAPLr z+dSvUH&EGZ_@999&iPu1{^*dXEf zeLo(H0m9*OyXO5`0hOP~C2cm>yDq&Ckn3Q~y$*37&O6DsL4ChKdvr#EaZxtS=qy0~ z@%S}OY?b;A9>944OrIpD47e4VhTR8rW}O+LGbI%#UVY(wRR}>RekL+y`@q}~)a23W z8Mni85(t_p*W4?-W&=5`_s@n-hhBBmbRc-(X;!i9g7Moxqe3MWl~!63eMM;&8C4ceUdKkAy!v|)8#*$kbew?A^V;OL z2QLPno|=!H-!J<&sCVXw*Scl~>%zaYZI+?7foc!@K<0T!{PiAORgN(dn0?ZsrZx!* zWguMx;QKCOy}^tybi~PpffvnLeE>wl`)4S*SDn1jAEyo0p`5DSu zo08o4=RL6E2pF#?>D}nbumOKj{~`RQ+n&!YoeP;();T^l6(Pg$L!p`Gft$ZS?9^_+ z-{OW47x<^1KZ7^R&DF>UQAyXMPP2#X(2GZ+pP~#6HxZpIQn2J~lgm8DIiQ=M@T32~ zf3)=2o61W?#Hn6gsaO%dbr#FyY=Nueqti6JA|r0q5Fb5k-06x3nCNrI#0Le%;Ir^p zBK>cr3@HGPkHs=Y&Vl~>X8(u?^z#QNcETT`^I9yazIz|puJ~5B;5iWlFmrX=^oqb$}y~O5D z`^&pLwZTnl&g%;2${mdAYB<)7-0}K6D=Z;M)bGrrtclf}&kC^>wd*suitcX%`HJ8X zPYVQXwDdDlL0OCI0pLA*k@R&{M>J-cEn%v6w8}mNJ!>0(&YBh^$#&QzhabSfaH>9O zgY@9i!}D0>z%6i6U#OO*8kIY6pF7+B+Kcz7>Ng74tNSeOAXN+3c8JWOejl$tx%A?D zg2eeD4hyw&dX>)cej;*y_u+`BGwW2VfHzn^EbSWoJ5IBrhn6qG5XRWkZF! z$|*l?(*Uu+Bp&O5cavq4h|X~SIiESY1Crjm6{J}i2=!0zXqG)XC*KQr96^0gEt-jb zpl4wEzbZcjjBd+32j8FP=`%`?nA%XaC1aL7M`Hlr^vj-D{@{KiGVno10q+b*wBykjialF53gM zuT7`1Hj0}RxlO2Wi0u7-P-C@w-z!9i)G)uV z`8X#|X7agW^79XqsgGtngh6!m2U_|@{ACxc8hn$hHd}q3A+JI1@YT6IN)qP_lb10S zsaqH@Iwrlpd?KJ6N^GF-s&3q9XyV(|T4gC*+ZY(wFjZ-o4;4t=oqBaL?6YSBPFksZ8(e*+2ry8Wo%wWPPcxo?f4>ae z7hk2CEMKLir}&KeM)7TY;xe(y-jD2Py)x6}Tbmy)>Hv|yQK-Vt0%QqT-- z^M*j6+>a)Y>&>t@ePNVX9Qu5WWU*ir&Gv>@%E%UMHW}R{Qnsx5x8nXt!m`g>;+wDw zyP_Rl*G|tcbJwaOI~!464n`GswroXz{)P01n-+8ge4uOdcVCggO-np__vazTL7s)u zlAjBS6TP*amP<#S=8FDo`P%`MFXz`ol*#V)KVN*I}OPs5N}+MQ)X zM?R1V@-A5L?78+&piXN2%<9#O{7W39$G_|zbYS;S@Yz2GHc`tHmTt#<4$YacTcQ_i zh}1`}*L!~O4s`(I#hm%x((J6Ot~K0g9nwpxuZ8csic#Mi_?i9C&^?bVCnMg~Qg2C+Xs)dO@<3AiZneq<`5q-k8HwdfC1bIGNo8YdAO+ z(mWEt6v6#uAbLV4n8B>Ymp|OUnD&HXM3A2Wq6J-(PbAj)+w9at?WS>?!(j zkj-LY5B1+a*W`3QoI7_6C=gXwxM3J2{rMzB>*1_Ie6}`6+Yv z2#8e&)UIdZ)xpHp73zU+(gmj$oG||!UV(|1k;@`T$hvNlzl?R?107T3=*S0EG zJr|3d8)V&g%HI&aC&$;^6IE61)qMDy+}`begGU+(2ipr z<>K#lehR~G|16X(-p=Ytnj1FGIvo`<$7ek_7OwvCdIhrDGu)FWR}0iKt~T(U-3q3b zUy%bz4gL2IkHyc`9z_z|IGjK%j&`oln^r-<3ysGsTN5&(fsdS}#mxjVSPIGRBJ#(y z5*{mcO3`2(Nt$pht|PA8&ca<$bZ9gXq5$vR`<(bA93qr=R3ZRy6A*0R>XA>a+abRA zJl_OO;6ZeyI4ReOl<*4D%ON6*?T@2Gx?@rEtN?$7IVuFCego@cvmmfgN>OgUqPC1- ziUgD0U(9sju8zqQ&9&fjzhcMk+)7_`zz?pb@pdI!BP#Y3FZd0}^`t-rg^(Wdt}8X* z*fg;A8+^VVzxTb+L@QE$!jN`u)*}$l?4z2w*&UDaUhs`0Au8X7qHUOBp2DZz;4|Xx zRb%m47U0^&&i*|`=*j=|h3s_J6_hN1HUI_6+F$t$kCrJ+aS!yvk%%%mMkJP~@n8sT zqE6P=mDUcR-n=A}uEukkMcgB%?tL3PlUq+JXtsdfwFZZ_O@6DVeYpB^mNDu(7dHN6 zMD3@@ns&`_O4R$JFtqKtr0<1LvoMTeH%C=!)g2}95zjTi0^GC|s0*Az)S!0tx?cIm zN}2(UvE8(o^=-q6@nkr@GB@!X-U5$>xT+7n5NsR79biu+&>C>fgTZtPWWh>UffluN zT9}9jPVw(So=kj|pk_jrt>14N8zHuljq8oaNzu@VHFIejY)bnE-Z*A03j%eVpb!og zHokEsRY1D&X1dhj9`57Sq*Y)v8u8yh$t(s*xOYFS8=D;-8Mm6Ot0#+FYnRC#RHbxK z|E;v6d?K<2yF#Ra(He$auMZj3>CkgM;zthBOXnb*BAkTZ$B(-klodH#Ro)fq0$zmft1wJEjM7c0fF0qn^cE({Kn$)?_*J+)w zSqK~EEvb%u=v}d&_eYvi%%vdzmN12X`9P%O&Tj(+N_KF=nXyGJ_)?^ncI?5#?QILx zqxL>f$UOJ^*c=PtAmO{stPq3300Z#y0da7u4`GrkW-YLBXP-<;Og}+&S7>>djR5k< zo@dgEbpzLs9bC=82E6#e)nk@PtahV++t$pV6E{hqVj%~?mC&-U*cNtOy{~?p%da#i zfkuFq`&^$J<>4}L(`kIFRc<_|74Pm5Fg4!ybDGjdQbG$=vP6=_`&+xFV43 z;@0q~-86JG}}h3G<=rr z*3>GP+LcyDi)CFPWc}gYPc<9KtMAs$-sYQpB5v9$QS$SrmXuX)WV|W}&04r%2oEd1 zF!LU)7}l12zW)*6VOx~+hEkPx{OGeqc*1Vl-ztB6$N9k{1z14*=Y#E=LZJQSjnV(>gN9B0^=i^ zc$KCP?!T{ZMQ)m_bVey0SCtjYhILD-x~(*Q>*Uk8qq63CDE2{-32MLECTN&K$LX$D ze^HtxC8Ti3AMIL@)(oK^_z_7>3G@j7-5gpz`s>y8a;~h zoUvz_1gY^-pGH>E$%+EagTvzwYBtJQH$i~G^4FmJu7ICPB@?Sj-87yVVFB2rlg)-R z_thhbRZErv{OBmld=pni^zt$sy(r8~Ud9d`3Zt+0z9s?a-m&K1nd}@Yp zpSw5^kd1xxK;dzBv(7N#ipQDT*)+?K3dm{uZSB@mt0EDRQ(l?m{un)duv$McREcEI zE~W1%C-aiXE{ZedMQ!5SQH0BoL^G2Z9mA|SeSmNva=JV}d7~K@96$SkwW~eptF%L+@yMn!|*7X#~-TXEQ=tJJX1gHgj(g zf$4oL%`XGf!s^zQhvbleV!v#MVqhUmuSYsr6+ff1N* zGJb5H#mZ~r6K#8^Z7CB)V(2DFxM>>=vmF#X<9onTOnvs7b}M^RSXvu{F(r#}FI#TV zikA7irw2*s3^MoK8O_m!XCk@=pGt1V<3ZuzR|&?*ExjtIjAzC}zYk=i;Kf@e&5lhK zhDjX~!`o^=W0;6Tb1+whgA$W}_CyL-4}jg*3T5r-6A!oBbGxu?D*r>AXJkk%s&+n* z(uTgl77w0LeKN!rm=T&be76V6&X#M&cIiPrByb_{%0<1BIcmzp9;(lQR@kd_D0L>l zFn7Tfch-%9lS=IGm;G!9RHpin!efo5^t?Na+^a4)MX<>~r&($?=4BC*V+b-(yhsy? za|qnNr%I;)&Kux^ikgsLvfdZPh^$MbHhYzYydWV}KJb)DCTTMUIjub=?Yn*Ndw%Gy zt^G9{EZg$Rs^o0twzq?fyzqUcb_S_aKyq5G+$;oDq-Djb5m~qb%+DEASEFSu7d$;5 zPx<01;a`PIVEc*q8mOail7{tax=Rij;LA2ndoPOeAEF6qLlJmO zFmrV!^v$$(5bFpKb`h=;?nq(UHg;<#J=4?2%n{r`%}W3O;EavQL83ckTJ%jDCrg1{ zlq5+v2KIL~S3JMTu<_9S`=0Guow;kVIp!kqnylY#VW-j|C?Gm!NU;997H}!yanRM7&je($7Y;HJy>VyJ0$A$!rw4XcOO0#8RLneKSSHKoBi>Lh)SG?@(@DcrF3T*A+?*$=;=rPnnehaXP1 z!eZ>VT^LuM^zt>6t2Pk%WFG=mq}i+hG*?rsiBQ27H+u<&DsrGr6CfP(n7^5Nce=*}t!Q?5{U(eW`uhAc8p@68@6lk(;yH0l`|)~H+Gj6LQGB4UKeuK*{|)f4m^_*U)qCX=rf`#dxs?KI+15O> zsgpQ)N%AjGEN@4gB8S8+2A1mV|dKvCvIMyWWU`DEd&z( zwqAoeuQ~1LpO+}%o{(Zby!q3$z+WUvL(`s&BD<(%@p?%ry?Y+*B=_P(AZSR%%iNl$ zOiOw5{Ou>SFR$I{CphthzN!`B#%a`sj#HGQqZWl+F7zV1}$G2)zUd_mv%Jo?bC`cIwmImV!6TIX0|18JUYDK-nUG5 zjivmpiqgoaiY<52Wfc@4(Owd>t=OdJ5Sw`jk}yaRG;O`(I* z`(Q6CTkcad9P01QS`TP0f0#ZmjVR_35HishgvJP~#+r%+nLs@2o+l%sIUWoKRv>&_ zi*0+g4KQ{GlAKO>0Qn_Nnr0iCgImd z9ZEcHIRJy+*72b%xq;+^^s&-%t3>*?uBNAuW6+lM(Um9nGyxvXH_V17WxVWoT_fgP z3>7=6Wwnh9=?t>@oTGhfbCCBzxYv((?!266uSG&9_^FjG#P8(~CiR{%8<$BI0Nwt^ zb!*6~2V5ryes6_5j~&sFSEt$Dls^}y15B)^DrI|+9-vxr4M|vP$xWcoQ$m7icYH>G zzp!Wk^mu^&OBQu#>PRW)YL_=)T%scre7!AdrSMKHul_{|%!9F0F1N#_aZUq(2C{gu(ui62S_^J~^YD3ZzXI5Mrb z=QzMHv8L|lJssBaw9trOZF)St!g@nzr?3*1264hirNDxp1oj(4FcbD01rR+geWn7o zS-NP$B#8h)&|+~p#^E?L&DqO(aL75x3M8E1K#Z4QC0RI^EAIpK_0}$-Ice9kA}>{f z^5qh1b`U+uzMlvonHMDNedjA;tT#0NdX2E5w+&e`mVZ0UC2%EIpiPrfy;}Vhnr3y~ z^5Ofg<*+bp(f{zTuTy;#x89Wi>g+qI56mZW^Y3kADfj*{vhZAx?_pmKvq&1H=JDSX z={#atHe>wssyKgY>E0%(15C)%gPcSS%2Ce4P$oe6^nbfPLTz#a?sqe()W%~yi&M(P(X%@>`mCz)p|KN2fW))-ui zd+GSIJNI?2{7u)3Y26(!#w6V5^4#8rpb8on+^+xqTpwsC*ytGG_7y)V%$~)4^DQ~C zvcji=2@>g18mXDch=ZazvU$Sgl@I0prS2r%8)jznCRTpaGKWsp)J~-~kyl>U@$t&$ z)FI;dV)?ieIbwxEDLWI`U6~fBm zIq6_`;bcmk+_>HW^~ev3Ca!z{Y9)sR`-&*la+nv-omA@0`ZXU>X1az;4kc;wINLRa(Bfrhhsrgc-`o^3uB6GE_pgn{I#R1oFvpn?=b$b!_6bT zwza=kP1KI2G_EGy{Vx2wYP0d`XJXZDI*yLaI_=jT%i1iIN-mg)?XTWbKE->`uL}y& zEcGZ&0rJyD;y0D8Qr(0Dq^?xap6Yc(>4y#e!0cd`qQk1MVAiMZQzktWc`!E}JwJal z)xxVhH-bNPT-9E3jL3$!ef5$&>AMcCwficBEw|I=`-0Kg&{+XHcs>-T`k7gZG>dbj zvfHmAzPnfDE1;tDax^*!PO5ZrquSsUhDvpo=60QrV3RAJ2J6GpVX@icFwZ}gz2^z~ z+Hmqpop_}K62^auT3u}%pNFs>(-1v{SU)k7ZB%|>uT&0|cUEdJwM~M!PS-``=xp9) zNs0*gcI%Wa87H+{3{sr7m5uskdp|yMmOdhj9v@CM?J@n<0D&f4GOQ#5RO3E&utFCn zdQ)fn6Z^GeoP>;YCyM|D?>fVstg;m?wiK1!?S)t5rKJRC6z?}R6MOe2 zYrUkWUM6x_EPGy4pBK{BDwG1%z-5bNAL;>`R;{CON~8_s-$G+uR;4AhhRUmOA0v|jwOmueKNCV2s~CZb13>DbT? zoQSve6zJwgJQ*P>S$+*i<8PylxgPET4bF}y-3q(-bS}Sv%|2oD*8mB{cv-HmUMhNg z=G~)1amigx2qQR&hDK;VUacG)Vmx4dBe`xf_4$Y{mp~Xz#Rw+?fel($3N&6lo9TUp z=W}XjdLa}T_L^>1PBJj@obGhC&cz;Q7j)ruDNk<*RWEg1l41(jx4|GwE|z%c;4foGgCy|1`#m0 zWtA!RK5e4Eaf-FzZj4n!wQp)`pM+T5-o9OKH+IG-7^ikXvSt66e=6VyrZiVDueTkE z1is-V$De~sV3@gH?)?t>Vb(Fe!jOU4x?vBzWai2`i5u^#`(;ME5 z_!Iu@vPyTFYaD%*hLgQ{(Rd&Mm5MCMiB>q%Snm1qGz041;T&KEQFltegO>!14f&MC zN*)2qdP+4JcZltOCXR)@WZLZ6ntVpIaC3}Z-2-Xv%J#AJry@18b{CeC7QkoBrX+iq zn7L>%9`f=|<+x(6bcnf-p`c=~KGGAEg%Q%yJ1%kyKb*dAz=ue%CBF~>vN~qK1zF>f z?{b__AE2qrn#cFaXlM~;PK z;sp+S`F9%EHv)$2$c1iWgAIEIOGlClw`n+!r05AM#)+M7UbOHsJXf)F_|nT*;Y4A| zjN}yNu}Ie|C&aiX_hbv1*LjDOq>F@n=v(r-aVRqNQN!hPq!-YG^Tr}OZ^V^AJ~eMj z^Q(JKn*t&at_*;zLvb$IFqS32YW2qy2d$N8!M6gSM~Z}G0*&pmruDpI3%8R zLq_k^4m~_j9YL*A>wyj`WejMTNsXuc8Ox5P=!)0Zb=V`Vc*6=eEniSl%PijEE`0_F zYkdw}a=c+v&HaI7R_H==fZWdy*YYzOUQ|GPI@GOp+&&c)Y!Hf>_olO4wvUYg01=ry zOY2Qo|IDrRISV*_(6Y^J#!pBuW5c?AQ&n!Ap@+8lb?toa3F+wwu=N0fwf}m4>wVn5 zBr^L@;*U@ALAf0*)Tf<6#j1g?ZMgEd#PAtz%b)k%3WyVq!^f_QObiuHsTm_`?@h3t z&j}`nOweCHkg&=0eU1=q3y7ZNf)_U}JosnMUBO`?7LdB?p;ksO-gzhK3fiM(&S&D} zga^Md3=H(yZ+{E-9WWONt-pQ$Pn~gUY)+toWDF}ZMCls^7v|k>is5L^aolO|how3fUHv5Ha zjJSs0!+f*23B|3FE^n9S-LqUF8n_MWI2}p3=n{jURHtnyAfqb;!gkIJKa; zW%Ce;nc80~Y);49&>*IXKK79Z+ybYu`f@q{wz?@rKaKkM=8q_8>w&Dv(miqRtswmf z+az!4QY?8{JjbcOUrlE6w)uq3d8UsAotXb~clhkMXJz=N=7FgAyDH5yVOGRjb!%!R zf7pP9jFf;bd_!pSk!<7%vVih=Xz%U}+DoXJ=#e5$a<~HMhLinzY@6B>OEU)FW2ng{ z=*eb9i*g2fc_SLaH1RAZ)|65RTLB|UT?RxtvhGjy@&Pm%f(Sr%02C8TwFt5YpO`GY zh67*#ag@O(J<|o>wyogz)3(@-UT`&Z+^OuQmG`OFo*)UC&}iD}($Vh<$Vcwq)%_71 z;fJz#;NFzgs#ak2pSn_)jA{gZ1Y|<865wU7>c@#JOTEzYNtVqtd^f3~9ZeMR<{__Y zE1qb9ed;*1Bkz>%N&n)RWN|lq>!W^!KWo$UvVK=g*RF~Oh{(He_i4|`6+eo+h(pMt z@gFw7T{CG4P}_d!&FuYQo~IHmdB}^nr7Ysr4OcoCGzjP~>8By2ok(cqb{Z@oop>w& z!u135f@v`h9FY<*@f+)G&em(@uglm9GXjJ{dsCjw?-yU9zRQ_k36!BQ`X(<`msNR( zEmeb|BKiI0^we6SCSQOc``1Ogr{Uu9lx~L@!5i{|Y+xD;bQo5c$8F8%ZhDpNA7kEeWRDeSvivl?B?H<8Q$Tt4;~ivTosuMVp-sV zDBGxJuF8;jVVF#5c=Qq`Ab8qVX%7f)W#Q-CxWR8LWtKjz>UB7quL`A=&$o()sUViH zl8s%KQeZ)nKw5BFwYVo4=YT)#6=6bXczpWR*;eb$X3wmI1>v(?+38{^|pLe7)HFEzb{T?D_S8>{H>i%uoPs#%_4OsP;Bkr*RHycW1! zP@zX}gCsqRWCE=!D~@dgA=JN^)~00T-C;fJJzd?F8XU?!!^+!y6lbn+~o18G({pmd5 zk=aWR-NEPn_H^aml(tjz1KD8D`skz!_dgEYYwZKBg@1{jmb?97hm1G`zzf=QWXIkU z#<4%yeVwGrj6!HZjRwdy{@#CC!LI;9VHcSZE(qFZxJQtGY)bMixAcd%JYf2H0hx0{PJh^4?B}BGHg)nV??*?V z?rrJ&eg{p+{aNv(y~?f)MV)YIl}$Z**opft?h-9C$FEm@$!@is~}X+u2<$4aJg+ub|S}c zmFmHE6P2VaA#PTsL&anjRKg}_kLo?3B9cHbgEAQ>AUzN+a|j;iWCkBxk@X%Bq`{=Q zw^_*ssKi^-(PA)r1C%q zes&SYn&{kSnn!^>hQ;7}bWGA}*)mgVg_bNdvFkgs4JS81P5nQ zZgO?E%J*YuwGKQds4kosYluf{{Cvnub#zRd$wJl{QQP_zUA!Nt0NgjvT+W-hx^6zO zuZQbSaq9f$`1o#qlMB(_C#~@?)M(r5GhH>)w1VR=Ku-SAyV*l&8O?30hC+o~*=IOe z{h956s3&-84k3uUsRXa;>&AIu$>lspSd@HXsA+C5TqsEGr=yeXR@%8%9HMWD9-~Q1 zO#vsINs)^Sl0U;Iq}aQs9XyLH&nlLPF^tAUv%7c3Fnv$CN`VqPpNPL3mZK$Qrc6>T zTI(r)FMFSGz8V|MJpNRNY^O>`eX4`ZjWf-2bgCjXM%QH&AJr@>_}=?yQ9h|4tYymK zai5M@h7FnCkoooy&ng`atjR}4%{t0P%#osXwf1B>T6Zg*tu6xf@cOI8@V+$+OXt8J zg&C}}CsawmWMkTZCNHE!DxJ0OTq_Zr`JgA2tH2G?{j@5k9yLge7p&wkn+{}zQ}m2f zk`4x+{H~H38`M(C4TYGPu@3j?gvyo;bmbCyJRfaMk@dffp=@0`;`E^HT#?GuwJy6# zKLV#&UGq&Jad=#{s23s1E8<4GD!J%W^E>9=vm*oEky{#Ia zI$@D2&)+Fg@$iFDs{MuP<)lij*@?%hZK^kog>XY4bkYq$p@{|3icHwEXs;o)PAcov6eOJDVn~%>^3V+T7JY|j(V(AX-H_)E+AuQx$cp0+F5-9U62V!&}C9$R! zq765u#ex{J?^dM*4Fn#H-fNuip+)O$7|3SoZGS9@6L!s>_*Q%fw=?Qu)hE9Dyj!VA z?JJeafeT%o7xUcFw@S2_RFatN?tn(2G5ncR>Q*tn-4;?t4#jk)O#Ju@DdSX2$sa&! zIjr%I!y6$i#)C$EC`(d2h9Gkl7bm3$5oh0*fo z$-lJd@cV1X#z`(LbulP)L}LjLeltaj3}ggjlno>YpO3Ddvke9ioyksL}E;(UL64Tr>tIRAUkCGgIOI`L!oa7xwIhu za!81QA@Ldg6*cniaS=>!juqOL6mMKC$u*Q)!cG3FVyU&z`EKGdZ7e`F`>320u*gD2 zp`8N{jML*+JF>arB4sHDi?@;U?G#e*w*G3Rln8TLbzzzFNa*Usq!`?RCWw6LjyvCQ zW8|}C7JAhJ|Fk7I(&Bk3ipw)LH(1q@>Ze@bBr~eWf8;Iq$c^n0Z0BF|zVVmf8;`HY z@L>=8-J8bgA5@!~nY!^tA1sUgpYrzkf8*ETZKQga+nY>Fjdf=EV;Ml{xRxMYDW>2? z(7pTo+tTHIveblB>6#C+l%<5+neAw?Xz2&jx{9cK$QV<$ruO*MBk9P=XFlx8?Y`~d zI{Ot?$HK;+RM%C6;xRn-&MPS#yuS=Cak{wxISI^o8v@Z?pNz5AeiPzB>t>v{E4+|y?Zvf{we9zoe0D7+8E)D zpvz{lc~fuOn^XF?u`>D27o4Tf6IC0+B)fBN3~&A>wbwjNCpOKOj;1!L%qiu(kyr)l z>K~UU8)bpjP~uHlXLln<1?!-T)<7_47ouwn+ck*KN@zFEK$7GuO(1`HPq+x`HdX$U z>~5)VX;^4<(|pW9d#i_QdTjf8vPFhn#sY)y;X+#BgjG>3?pLU^oHtB^7s9s`G97>E*rj(Sngrl=ToFSe(d+UA4ps9y#0-+vL(N) zcWEwZT7d_wjRm{_YW(+)_crPqF@AS0IUsvLQZ`&YsjNnG%D}xJuw~Ja@kum zux3UTqB;zCwvt`5ih}NxhPAbJA%1T`tL$9&VSQ>rt&&E0n|$U0meL>c_!cSZCXPfr z4pTMwK2|t^Vq{UiMQlq|yf|3=u}snUYkC?J=v3~Nz1-NIn$`#F?D_ntPETz9PAOeE zTu7bq{3Rs$Tses_tu>PUbEwQt^Dpry<;ide7_s)!gtx>gfhC{elz4a4bSQbHY-OD38Ow9TBk=Gv&DZg` z&<$%yB)a;siol17zjhDglUp_`OOix5T9h|J34qdUvnJ5?tqkDC217+tD^#h46 z$AqQ$@9T#WrFh8%rLSLo_Eo(8j}&~{YTW?T|+r?QC>UxG+ml;#GBn=Pj1 z@;2eyBX)-gamihlxc45=&Ctip@+`(9d#gzCLckQ9nFR;5IWDXxW=r( z7yB1zBKna=I(iuAO^v&oja^2Yk64QvlYJVJ2jq*>)LH)kbo`A_(ZAq(>HQ*k5YUMI z=>$-f_0#Nv2!u30Q*kr*_^{pKWt8CPjV;y|h;P8_4oM zO&O0fuG9CU!MN+{hkuiDNAPZWIz1vrq=@g>+-#3Q_{jA!`W`&3AjOo2gHZ5xilD4=F!h*3VI%l`m~mQEVV3222v!c}ZzPt2IRp#?`~ zPO0y^6$-)eLd@HNUBw>+13WbR9pJE1$w3$O+p}XI>{A02#W=MoVfv!G9PpN`0@O>MP zf#6z2el)euc_w_ooV`A<{{X_M*z&nu5W3BZa(CziDMH+Y7~b;G%VL=G*yTm38Bo~P z!pfF1EKBU(<|9zsgtKJiyx?&u`5zIt1db_OA}e_n>w%z_{eH z>_HkeWLK0So7soZz}e?RJ3%%yK#7D;xa|8HqHNo#@uW!_`D6JePg5M580bG?kqeXi zqp~mevAMtJMz3>o1X&UL9X^^x5<44`CdHrdYmFjEy&}(1>A4g^m(wGo#%w_s_|xoU z8Pm?hjYn-6zMm%A;pro@?27#n>P_i{P5w0d({8+x+gPu`f={DAy&tLYJ;eS^zh@)) zHXu&~_RA`A%L#!>b?XEe?f@m~1`tZ|T2A;1MAqHd0L~4Famn zdD)6hrK~#pkdjnKBzIamQMRmTe#4<`H7CISiH#bgCJC({^r#()4H;wclg37?sTL+p z#oWw-!p-_iYr)RaSlC>?(!(GR;^IP15lU$*pu3Zf#qiGse{Y=hx zt?)XpVb3E9ay0P?pDiI7ddQ-oOs50KZpD;(!8gQ6egxo&%HG*TdlAAWA0{ePJ{3aZ zP|wkl{U!SrzsS+~1UuODC~yx)l1b#dVX}12n-V51lO?vrMZs>uU`Sjo8~FAZh`n9} zK?7EPG-eS#r|_SBCJB+D`Fgf7Dbf3p{2!EHiV~s*hO~XMc!-RVBPaN5JpT0RZ37^R z8WQ+7=t1NOUgjGfd6Vpm{{T#Cv}lVyhTvvQpOKpkYfqE=1FlA^P_%6Dm~c) z`qBoVnOaA?AE2`XtsB0)ir-V#&CR+S>ExIb^MW*+GC>1l({X1;zDS|5jcX%D+mWoB zjY0jv_B!(d$0PMOAZ<+HCAlk3+b>|n-+Y0HutlXI1lS}h-}Gw(5@_%!ArZ@g?!uZp z9CRh-N=)a1O^v#Vy+rITq|%YjS9O%YfnM>5@1>!ig1|dLn|W{WWPsalJru>+BmH^Q zYG7_fo*=kZx{d*wqnQ{~@X-mwbSHd<_VR-FZ`73Z%-us^wn@&QO6BdFC6b}^4x^e$ z;d%}EBP~iD@KiBI)>A9NicLt6iN$y<6=_NC7@B8zPq2v$y__3-kwklp%?z_$ei|x;Yuo0vgFiqmo>Q7Mk=cp3*fVxQ#wWN~mWkLUEU| z2x3&6P9(&q(5f+JQoz(Mq;>irNGL#2Aw7dxjq5j(P3|l+eQ3eZXK`b>fN zi2i8CeUNyvkFzj)K#^7@3N@xQYDnCB`3KI7Y8m!V?0EkG4F3S8c+-AHjr5D-@--Lr zqcBG2oymczkN9d4x8Tl?&V+U``yf=uU*QJcSjLF4(&kS)5q}ynIU>jL&Z+zJrgixk z@_Y6m*hCBdI*4objQtoL7##~u;QozS2P4Rhx!3SO{Glm62=S4AQ2cs9kueUt{hN&# z(=Sbgi1jdZ^g0`il4a<|Md;Y{njP*n4@jeJ7Jow$AEzYjH6n7z^&{Px$!*d_kzziu z^%mf36yTZ4qbN1pse@MX2P~oD_#GkLB;y~l!VMCkGJ=`B4_8NHv3!se!rzh4H@zaR z>phBOqj5$!NOX}yFosT)WxCv?JfjJfJ+#MS%G$bj4mW*ttP=6|nF_BXVi}k|3EJ4RN#Il2?@xTkvmBgnz3q1R}h}33i*2u^;Q|Z=>|TC+?^sj3{Gr$H|32J zxcvyegcBmsU!fKPudu=&vD6k9)GVz=%l}`LWW(;HNdQ zjEUFmoo(r-vhaxhW4T5pW8`~&NS5d9l0z|+f=QRqkGT`zlHcP11eMd{R75M>O3Ka-113*j)<|bxxn$|i^M?GuPBHk$Qr#qg{Iv| zqdmu7p9B8@1^#Kd9kqUS(qL*(-=UO2jUT_Rk??s0YxX|B(W%8x!2QSPLD$&dzd{Cg z8}5Ea_9MLMGD+kQ>|?zidYh6$(<2%!cG54)9d2#*ZzRc`C67q0Ad4b8m7}$#za)!_ zX@;ia<=G;2*=r*iJ1F%PTee_AXKxO8BsfN&47uRK*qbz)Tkgp+t*4SHrt;i|1z57> zZjtTgM@;aQESe`rQkWXZn9V$p*xsWi&8|2SS19I_j^b#O;B6(Q`W5C=a*)t>;IJpQ zE})?;QEh$xNNlTMs#XM;iiT-jH{fMr>G5p2{_!aSZ{vAP`_ixsQMAm)7W@2 zz9jZYMPFvB7}A8Nt0w&p-Fguz;n8MqiSxMM^otYpHykz^Zeh?^pExrf<4g41S$ok( zFkk!9O8aRwX4SC#k<&6i_{o7Ai86WQo`V7kEOcVWVg~C-9+M^T%n6=B_0Zhk=0|44 z8=hq7N3oCC)e!_o>`HkV6{Gvp>w)PP)Y*@bpJqRURsR4JqZ=fFE{NohIVbg_Sd${r z^QKVMkp_Ou4+LM}f-Fi0rrKqEXzt7}*$2@Ap^Xi6Go+5V)6V1c7CH?_bNQ#gaz9#s zJD(%8Iv0z9t@WDGuYETr$RtSUc{;w?Fho8MMSf)8xS1Akc(iBpM8?12){FhJVGm8m zw0nlC?x#W@!H z4w+{HWfa{Fu2mcGM@*_CJ%>^V2@p*oB_Ze{5az;Kop0Qg3$zI?L#cZS6V4F4>M1P7 z0m|(dXK4zHt;8f7nWa^aQ!L|1yqv?ze7>qCWQO_7LaP< zp-|SSTMwmSlUOd@X}mHgdg=ob)`J7)ru%$@(V~d7q<%+ zj^^tP5Tng2a{=rkv{A*%*ujqESnZn_X5)JeP~ChUNwGU*{Aq*E`uynhe;PF-Cd6V? zv1T~zN7cxjx|g7`{{Um0ST+(8oW73|2C&f}BQJHkqbwe}jx68Aj@$GI09a>zIv)zE%&*#4p8@iOs| zvuH^~kMK&z-{>xz8u>Y-+oaVp24Jbc1n> z+-pxL_7Oh9TUV(j`n3k~M3JV(JF%)BjCRJX!_leI;AhyxZ6f572LAv;9+3oSv*jBR zE6X4B+}w-oPXyvIExJ8E{e<7wCyTrx8X;wti5h1`zRGhWyDKZ(9L0kf6={rvh znVKg84&zWXxWuADRn%|Ajvi!j8WIVuTaqYLA&JS6VF?2Mq}j=e7CUJ3`qD4!UC1)~ z(8h=!l02T!H*`(;X5u@ZcN&rBPNq?ZjExMF?4Rj1*P$O3BoIUq?zG9V{3q0UyYnI& zzJ$+jv5gA<0B6|Uy&Cr#j_CL^oM7Kb8m^=XaoqVl?0cJ=jSZMx28N(-O|+XJgLF15 z{sxS9Ci;DU!y1AJFvpjx$u=*8axbxxXp$s!&BP=#1PtsVJ&&`0@OAt*{g3=M&5=SO ziC&L7M0X-z2E^$E42v5}Ey7!|lZqA2I|AZ167v55(<5#)heyz#0)%I>r`+3sOLV-z z`0I+M3W*4NKlS_~M^ZNOIWF5Q;j=e8)(0MG?a3*739OL<8lBk@Zl$CU9f^d8d0Xdk zDCyTighD%roXeq2_-N2f2#{8OV0dc{n2HVEu!UGe_wo()HMrlN;yk$xg62Pa13< zG9Koh3n*^K(Zuq^B!|TK8{H`^idP2-KH?+hKtks4B;L+LBg4w9K0B6^=b2WCbHJz% zb1bvuE51fQfg5PXNrGf#lX_3CsASQR{2QBTF#Mtn4L!u_h9n57_$%N+vUb(r!Jw{D z8wrOo5Y-ZSA8YAJ9c1#$!*<4^^^(f(VH}L4-+YvJTMvK1En$%O@Jmv>=##Y^?gVQv4p00P104zUA;A}75h2!( zSRD-s2}6j|NP%G?aQ=A`5)rvOjE`>P8X_!fM}j;=dk-8CJs-Z~UfOT?H~o!y$h5}C zkZ+{S%N`fnH?jPnCgM&tF? zKjYHOd69Rs_%&y^(Gt4pzvRY7D>fU`4_(OaMVy)RFvzk7tEso-Wa#Oe>4RaRquk%2 zJB^WgH4K?B&%GNT{6MMoHyWb78M8Qs;va zYXr9tNttR&rkkjpCEZY^tccV%#37~Hu{G;TK?r8sOqlioh?PyRvFIAsZ8%Iac)P)k zjx3%~toNiD2826FJY>|^f4(baStXDBKp%|`kV9{ z_Q01(AWH1R6+YxgVH**qd-6xggBmoq8@>jvS?(y3;~Ozn!yRV5jJ9|ZJ~@mO4^tUV zX)SCe5bA7D%MvJo6K-a3K$}SmDkAwJx{j>76G3G%>^eh*`4`x?;(rg(TAMN(mm5CW z`Wo*BJ;jcqQ=Y>^HWBNwI<+DVE?g@$KeEkpPMB*fuU*?p^k75GxU~U++ zM4JeqJ4M9{*j!{&6Jhxz(IX&&N6>gM&y%S&rp9E5T6ts*>mowV+V1u+O=bu8r2hcJ z&y-KB4@e-7l0>9qLlR(lL&S-1K>k%>=Xsa$M3-=QC|{ZY3gL-VNCq=>Pqx2_z%J@26;$S%O48?^2+sZmsRWjUh_)<&b1% z+FJ{UHr!7GG=x+pa9fjX)(5uZ*jn6kL{rvEXUO1bI&wC~1!QLlIIwLi7eXyq;6$9^ z3VTk@E_pk9_wY|V2v-BvRh;3D&e*yduSi6nVd@Qmk(pLo-}WrX6h$y(NJ`mmo7QLg zOhBVAm>tt?vcyex(#W&t(EtNV1|F!aA=hl_X?u>t_;{ApAvB>7ktq<8Q@XZ9Vs2Z; zL^vMN$%Kb+u!}Q8Yi}enO0*heV3QV1b>m4DBlCMroyHp2MfMR!s-XqT%1=qZ*!LM1J88Z;8wtsSKcYTJ zI_o{)+-h`dp#17VBgs@HPQ-A)ZeYGi5}cK7xZq^b793(0=t!ak%IHb9-L0&mbYY-{ z@zi*?ykMOscW8mdL$blXupwQ>AcLZ5a6>@1d%HN769IlTYYN+mdHyMauA4o@kCwapz+yWAfh7MRX~orLBSeEQXeSy9`vb z!rX>i93(5$N)|MzRL%DD+#ke=RI$QIkW)ig4N!#~qU7H8F&(YZq~XR^$C54zoG~av zUgBLjIbusR88~GKjOy4ip4@7~#N~$uAToE0krwwp6fC($<|j_Iow*~zHM<>IP6%~h zAeb^#vFt^M7r>3Qq%zULE^(0+fkP2BOKgO$)8Ao!$rKpu@~Xp(ELaz^_S8pl44Z9j zh-k`6yCU2|-Kgi;u$fvm?h_Vy3g_&5H)7?*teYDm6IPmg3wo7^lX4-So=hKlv*>ok zX8pAKGJ7HW5>4^=(dhI?Z_vTpA`(hz{1IEgxC=8o#N>CTi3%A*qj3x;D;WD=Fru9< zSgj6OHCu94NlL`6gp7Mh1YHgbD8jF}*WFk*!DnTW$&FvJt#6VAhzVvLQ6k<%hx9?S zxt4MAN83vAo<^~PH|kDVG9$i~--1Yv!r-rOVm4m{Y9NKbawf!sEXe{SM&ei7fh0*C z3=p;OC3OtjfY}4 z9SctSM3QGrGXpmHK8U?0hN$w-k*yN4eepv>Jdyd-NNCt=*%=y=1i3fEFYj zNhZk}B>ES@hBc!`=h(!@UwX4Vn`rER@e|T|lS07l^gMxMN2JTqt!MaU5glG=f@9G8 zFf(aBb=;E&xrR*`BzY2qx?Ga%tSU>PfTeBnVo|ja!f4R~-B|R^+G2ylF%&R$x4`Q# zxfNnQ6DBGM?Y+5O#~ZcQHDaBpQp-DjI+a!My1e@nG)lq56K$SYps6ZNQkWSXl=&l# zC}jonn4`8JH@+9iEMA&ec0wP|qS-c+x03>uh8b^gGP01FD;Z>GW99{kH36g+aw>+H zQkYBwof#9A7cXfF-D0SjLQ^OlHt#{H)h)2np`|9}kP;i;Y(l(293h+Fz0 zZiR;OMUneHh%$}7$kG1iS%->56G9$;8hx2#Lq_|gZxlBKY&11Q`)L$; zlOxWpc!{ktCF)1H6f59wu5y9>5ws_Vc=@{8`1d#f1$cP2mb&P)dneh8}=p?;`}{{i*6{$>!m$b zM9@&(Ecjy?pv{@`MOZZrFwmtGiDGa%%5tAiAZ0h)kv68AMUMXBOrle1d=c#A1J<=E zBRpl^6Wvma!;B0DnOZP9Ro$eP1r-Ejt3l3oE~cszDfbdmX^}>hXN#rj=Z?ec)e2oT z)7*9XQ*CbXmjelyfgIe{3L{%aTl|e>KM@w`^GMMRI)u1lbnPo)y6Fjjqb!E}|rOcGBF#LCAVfa%ofal1-Ks+d(w&5sjr))3qM)3({S8Gpa$hWvg?O*R+*;CiT#YpO<|t#}1-RQjA$1~EXLv(fo~f4Z zQZ3|opwsyf-qsdtb#uuj?lnz&i#m8p3;5}SN*R1e5(b(jAE8U0)@3vqT z#TeNufSvmA%R_zOHfvBRb?{%5WNPtz7_H5P>*=SEZP!Gh>9EGU<3^{<81yIfL=oyS zy(CrsA7VpZ!$S8a#b1H%_H2EKOGu&zW)1f`Sl7NZz{rF)K{PYT9*@Rhro>R!sTwjn zz{tPOkTo2w$)h9_9Y5kdS0h7HtaKVY>~EvNzayevkTfbc)!M&fFUlL2+nqeDqNf+GM55jA>^4aYzl29D->qqY-5fhQQp{xCgUMNr*#pXn*JE&!u$n2HTu>H;Y zU}$;MZ6b$e9{%K69&@Mkf9bbD`XeZqGp0YfT?=rGjlPN%vEj1EYzxlHqW*|- zO-X$+D9W+qZ&MEZ6%HB=v}IG!h(A$-VLLV&aMidHyMQHd=#grZ;F^1iR5qW`lvU8) zU!1MR+@xE!JW-#y=0#K6C)cqSQ@fTfxo}h=tVY`O9kK&O?L)e%Ly8IoP|)DyNOcYG z${QIn6b<@nT#(yATBGRDJ&=lw=^=4#OXOBIIy@DfiJKsTsP_ZfhnX={?IPPtDX}2O z*a>PN-=`f$R*}W zzDyh+4B+sQLm{GXktIy)B0^L=&PX9SVZuqYbxUMZb<%P-iI!Zak|RF@3RAf9${7Cu zn1g3LZZ=m9F2t74)fhJ-vDAz1HRw8I*Ww5^>O1tI4VmBakVTy>7Nxl&^-%a}W z8K8F7QvU=A8a$rMNWXnB>htTeBNfabKzZV#1+|6fA zbbOB}?#?t-Sv1;`zkrOA&Gf2pB{0x<=)J#WQlVia!*G)v^`1$yc1i5)HZJMBIqPwP z3>k@HUB3z?5&c+??nT0sG9?zId-$8zi(sWXSXLa`ugV_Vilp=4MiraFZ8;@h>6vHs zB9PK?Li7}dHx0s4m+l4v>H@w7hJ47Dq(p{lXYhu0Jt@%;IxL{c54!=Lrsbx_#FYso zgKQ-aV~&lhq#TwT6QHcs2j!yt{ljanWqRWGF`7@Ib~V8ZZ3Hq_cQpRCDzy{bH{9n zNR_E9>X~FD_6c-Sl5*?7wW%))`3`w9)bKT<;chpBI7`@_N-0UO{$%DB}WpmW9+^Lc?Wp7kMOqFEP16%pYl*d@O zwitGX>3IT4OGD}{*t>}hrz!Uk5+TfqKEPKV;Il;LTgfbtjI-QQhwd|(KJ2oKd_0*h ziJ>LQ@KHE=B5iI{b~1w%h}hO4pyt~VJQ2E;Y?ew~6CJk6{ShV9ZJFop3eypA@+=l6 z+Z_*#U~5v_rR+GSj)C1L>}urqWh-10$pU;*d`<}z{G*PUtrVMvjmxqj_2CcKyV0Yq z_S19hOWc^Μ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�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�^1~UlHBABUu3u$1RWKmdiU1cdW-cmxFl>- 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

{2-MM(&0)nBG_6 zI)C#-V#e{G z))wjZ2c)3ymQUWbPltm{T|NLQ*2q)y9>%!X>CQ5Fq@T3Te8 z6zw_*NxUHJu*|`fZZcIODypr3N9hIjU|p2Om;@FIX0v8Gwq-B%O>6$H*>~*O+r5 zZ9fc&t?2{-KU$Iv&zXoS2(S0krt&s-Z&JjS>pvmZXJtPF$`DV4FK!Ck36~2NC5taa zXYK)~SIKPF^~S3?6_5rtJ9=q+)Y32%u8(1YY=As^y@T4L(qExzh z3cffhHS{}n%h|?5)vvwQgC~eAK;jnFVlB|98ez(a)Sz;(REpf!Ec$h0@FBt#@gKm1 zU>4g~TX~_O<^pqfMZ-TbSqLv!f0_q#V3G0AGcHeZz&W0?@Q|%^erLGJ8}@p;G3;g! z^_sX=5zb;mcDZ8BN=We1FMp8^azzD%cZ)rIgE@?FebJKcT9EVF#8KW& z&1bEHsOC@KNfQ)1kGp#v{hnOM`yb~_QF`WHIoA<<^Q=@pRx&qJ?{D+uml>hiqL4$p z_U zV-mQJ_btm2J%d=f-A?Wf#PSo1P1ls?5ESvJ+k*j*iD!osP5=H?KZ9JdVQe;gMCC)bp62YpY$Jm$c6`!UEtc0~| zA;MRT-Ss|}FkS#mD(T}TEmOT>9seF$JX;&&9wny%?)#q;qt9hp)*HL>wxingG zgOzk%I(&uRWTnZbu5X;>1qjXAmqy%t#NA-(x(1;PbFw4Ukqrgj1DW!N4YcCK&(LlR zTgai?kmw|YQ5oZoOTJ;IaRjZJXdGw~dfn0^aYs{#vtXD?!tLGLyi} zh+VCuqj{XiqXEW2U`iP_ScIXvI-f>L)wq^= zL4{J~urMy(>y&h7S$!%FBPR8Lns9_!vIaAA${EsM(}C&W=5$d~-Z&xhe$jWI_oE#<7NdwcE{ zz~OL_E#&I7Cv;7DZfPf?l)kE3S`y%Z6U+s=_w}7BXyyBtu#T#gCxG}cv5a5Y)hB_60Wg| z5huD~$@1-pVBDcXb{y@FO_ogY9is^&G#B@WBX}y`^v8_u-G!xT?WDSN8Z0{$!i;bd z2APr~2Df8N_c<-9Xe+LS6ku<@Z?iM-LO^}5M)Bs`paVT8!axaOpxbVNk7rECWa9vH zRXKT|?_BItk5S?hWh+n`4(Z5FkJS_)11N_I`4~$NOQNSf?F+iT=bkW_agV1hX;Ml9 zOo`lyBJ-JI%xGfnHRMg|Me}aTcghs>W%Vq?S?RP11KMaEXNO#PclgU;GYYF=-6_{v z%WCE^wWQAF!Q%rCX;s#!Bbu(tYGhtqr_!mw)_<SQ1HwT0eF^O+^#)?q z@%gA1@Orhm+CPa^fNW9bpVw^p2L4Fdgch%V?)QI+&ciLq{r%%CS%L!M02d&rsX1_z zGln9LlFZD8ilZ{KB9BMS(f|=PN2sOka8y=S*f6sNYKl!vD=a%<(TO}}9*5rW`gwk~q-Rr%quMonJc*e@3EEjcZZJw$9T6R9xQ(uNYtass^ zzb#%ZI(7lg!DU6R1W*^-mE%IJa(U%mysuQc0CP5*^5Cb5Hpl+iI8aD93DHGdv5aquFIkegmn}%U?1e zo%ZEiUPbH*T^cel&@=B<>5`Wo$QqL>(}>9eZdSW@T8^##L@x2<^R=RadV9LryNFH- zFkF|=Vs%mWvrHK&*u4_C`6~N@G`d%CyI*8xy_0$q^T8^t+uz;j%T5Hn0y~id>Auf~ z$Nju_V+`u{Jc5&WaLLTCYHMJr;yHvl^xe=RAhE9qLQ9RxodCzhY+mEzLr>)PN0i*f zNXSvAl+$dNj9AfyAlQYujoouob`LK1%65S^6xcr`q>ZiAO8cirtW9UQa4oEs?E;s2VTfQ zZu`yQEm3n7{ixf8+JKJ81_x|>1+Cm>e1{kK(&hD#WehogVse>t_%&EJH+-4$)?oCR z?kzDhSfbTw-p$gt#Wt~we8yH*_IKE1M#7Y59_KCN)4;2GaY{>i!RGcxMmgh0ZIP56 z1C-opR{i&s_!V@DuiVyN@@`xBpm(lIA>KteWwQP~oYl5?(nOWY^s!Gip*U(CJ&+>v zw2U7}%$98IjWYMAawC0gH)U_|Qt+ z^Y#_46N06^?)Dss6Sv|QdN9D>$mElM%Q?aN(YZ?BsG_#f?SMQSQsWc)!{kR=^bmTj z1H=ECd`GT_r4J{`@UKSVBWV+=`!ofnHr~0|7k_Y7g^n60b8?WeB=#H>ovds8lhAE! z!56@Hw6W(%&KvfthX!4eV90DRYxtvc`akN+W{k1*W?$f{MahX<2#;F; zoFH@`;>;M%QNz)woOpS*)4!abq9?`{M>wqjd_GSywb?b9)^J6>fxbtw7pc%sEwchXJMl!JPN`#*pk|B%!5+Hl41+8y6eapYl}fsVCDOq{#rTrUB% zfAvkfw)N=rMy2Lam3%COxH%j*>^C#2u2RXe$SKvdJJ6j4ozL-hwwBU{bryxCtHa-M zOgEd8*2+_WbGkiU%;3(-obOi3SDFCg$wL>$gJzP3?DidXfC-&`R;UQGK8w$z79gjT zkJgJXDM+R9X#+Naw(^!WK z!sbZ6&Zs6W9ZbD3_B+6l-#C?{Ri~&xOVIxk^2U6zcJmlY1_EV&beHe0kgYT>vpjFv(YMok7m)jGlD*T}6ZWT=8>k6= z#5Fo;F0H&*x+Yw{b-KSu5nMc!rY=rTK}EGE zaU=VKlffD|<8~t$T`%qI`g=~7ZN;A~NegcPy5vKWvqo_?=9@E^Aii))7$uUG^f-?q z8PBY{^V@udDnQouiI&|p@2EY%#}mTZ>KsUv>5G=|(1;=Z4U8f47>v|dfD|BA6U4h> zi!t>ZW6b?Jd)2IG+2f*p=c!?1HW=PQTTg_U#j4;jn8N0sD%cdL?r~P9CSD5vELE?2%O|$Le;d}l)vpWbyhGkZCaOGh2ZOAXJLSN;|Ocx>yU~hrr`9afV0yc7lxvOqL35q+uGAnQdM=T z=mxOR&oU4~|B-L2tsK64?%nfOnF^5W11@Wx)*BsKPKK$VB}w!Tep z3Ax^UDdb$s-yU5IeRh!KgqL8bPP#YZR66#wrzB7`2HWoT06ot0EvXDLW0YV2u4#op z27FpJ6VHB>TeNPi4;2*^Kx@`XB)c3CPrCF7ZL|s+t|n zbhfAM<7Y$KaGTeey`QvBy%X8u@LB>;NaEFwkP5QotA9hAgNovIyV^O*n-P@1HmrJ&i1*SwVjU25Oi5M zIUkX4mL*#@o{&@!KER{AzZEk9?)<`~Nr~9aioCBsFa-TTn1007`?%_edROY%27kNP zQ1pVu6`Hpgx77rQz%Dc8BLJPfQv4~f5IgdMg-(hLgOGy%?yA*)7&k&~HM zfP!eS*`Meu^G=4aqwunf6?o4#Gk{`Zl^l$QG3qehFyNx#iuC(sG2LPY;{jRUrqmPV z9Gp!WKzK!OOy;yH_!526QV|?m3)${5m2A$K3pB}GmUimtJ79wqtn-JNao=L+HzNdq zsJ?lPyy@b^xNf=EoxW^Mf%)Mx<57D`*L&>v4LFqt$XOkPDP^4e(!j#GHeNbtzRB8+ zS$N#y{XDeA;BtGGOu#_0iOkjM0g#&+YHk8ivF%sqt2}G6{AFqmUncEGOtIB0O%^7} zs>m6qv16}Tu49D1j4fG!-SSi4W+y}LYkdtyO19~4Va1)(?N(LgJE?Hx-QksDyz6?j z*k!0;l))bLEP`l_=JaodwMp9#EVi6Xp2iczR?T#c1-tveIrQDdgX<;NOmli{^@EdK z?C_gTR{>%08#x>%+EfI1x_AL~_?OIg^JwN&8DaFxKHHMsu1tlmx2ODCa`dVlDSp;)aGG|W{V`%h&aUj82YN)S9l$lU=UJ5^8ad5~&V#2S$P=0|L zxo-!atJZ-Pd8!s;=Pd-)1Mea@=<=1NP%g@dRPz@*Z`9-x?<%5yrSY`!dAFZww8r54ga{A)$lH z)BNcfJt38W%9ClNm(YHIcZ+^|k|5XW^kwQnyK5O)6K2#`DT__YSDtivFEdk_Hgtf_ zCsT1rrgNAf8PwpHiAwHOR}w&^J-@}F;;MS(9*pmu;8SQ5(+@Lod(uF#V;E7zQ1;T9mUq2a&G7SF)AO_8-4OdSux?yGujF?Bf z{Bg9V0vH-rQ3tH6i$Ty&DPlB9-{)`=(10Hy)6r?C{8KDS<9Bp;;9f0z2|)1=WYslU zcb+82uyyJHk^{&gU`$l}^Dfcj31gzOpe`3L7UEX#x^ID-u*jW6&dxo{nRPye+;$%kJFW#31Ywb7j`8ibQ62pVjOnrFtGtD;18BmPPOxbSD zxx31lH6rR-mP_Uaahi_HIA`&*az!}E=27|nkLwHE|6%n3v22BgRqyo^aliybS*Q>1 zQZBc7o{Ruj@@mSew`|j}v^D}fy3gbX9CHth;9f9-ARl&k(+eP1lSs55wJzZ3@Gx-A zUC~&&g~3tom3V5_n_sy`;hV1a6h0O{SLzlkpA}dbli0aV@@29dKSwhEyGb=>g=Hqh z_dDe46cP5{m2Hb}t~}*7kDnpQzC# zz3DGai`fN^=r5)zk&9A2Te(X<0`1HNS_lXgUUNs#g9dLOK*me{Th#H zo;0n2nmO3MvK?R4*#nulKa?ySIcQ4%*7;m* zKjV*%6fU6b4&yNpKVXwSI$L0XoBW1vv><0&nQeM0YZ9sn!O-K!BRG9g9uj2)yt*T( zps9{Duf;~b4$t>2gEcibafCJp)AD714@BK(ThOF{O24!8seO(a+>zvpa6Zk9p8c?+ zx(Re@k&gjqca(D50@u*KuK;@<_j)W;b6vmLQK98o1MK^H3K5;_r{Iy~{w*b~_)U9SYJfFqael^z6|0D!tcBX(_S}9ivs1s$dV~6u-lM&H`U)vpl zdlk`8Ut!*nrc1KD{);7rW6HIj_c6jaUdSDlk{UQx?l4`t z!+sNxl!%%jY3sT02%M8e%G9uM7}BHDW@FdetTY`ud826 zE>lCedpj?C%(R3r`2skLURyY1F~#EPOBfab!ii*#D1DyY3L*c5`sC7$Ns%;k^3ZNk z*lQvS&bt8d#$}-T!JlNMLngKg!D!z1{nYofu%WN8DfbZ+Ei5u;8S7}b)L;p8Yt@;1vgPiIaWJ8I=1de*?q3oTdL)6FDmRV2^Zrc(97`>^SgWXBEFjM!dF}r-KCx( z7NXbuVTYhAW(`$&qyQj2t!5caA6*Q3_&9bcbG(@2 zI#>qZmxCnzc-63?PhCG%xjao7B}H~bTgxpyM3hpsXJQ;b^?hgEUIB}xBRijtjY|3p zRcXd-mx}W3*mVkxunI0M11?-lh>t#&cLsH^t0MF)XGIC0e@{;c1y=hS9`%^iiY$l! zDx*+>;Of`Oc<&Xq>J?#?;-w#@T5Ffuw-e&gDcp9m2{$Y=$j^foh%=O^q#R5WEs1LZ z1aYC&`%XxjpPz{FfMk>1K5OoF!0*U-kiaKStE*kV2bBK9`a2!BVi~I;5bFwsRR0eE zBN=JkmsuOftx=^QCqRD2anJ!+AY@r{C1l+p$nNTs;35?k~cV>EyiX+m};yMx1#%uX#z*dxhdw*{WPrTnCn%!jWs9H^5k6L6l zdb~eDLF>MEO6pkV(PtMYPcm(NlbhSML9n{;RhvGF5g!5W`pZSkrh6byDE26YP5R{x zD`GbZ-E1@r7l+@_>B^!!(WEr`jXMA08P>h8_FTc58*3gBGiO*uOGh6m-_KG6KA_d< z_dayj0PW)~2KifBs!+F;)7Cd~FGyP)Y;Z(ZdXnZ)w1%1@;tRIwmP1z6iq!5RXLtCiho@98}gD@0TvII}8_}N@h$O{PR%SKt~FX&QPCF244AF=r`_j zA*V(nSjv57;viyKq+NT3Kgk%%*@`IY0i4fT52Aht+$a*Ie@F#%rYbinPs&Dj3}>te zYkP6JIo`BEi+yqf-ub%DoY%kTzo%>$O+-8E?i{^Dw_0A6Pki#q*)_r(@b6>zo*#-s zKYQQU3;Q0mJMJY}$Y7-56G1p-=tVKi_(}WX#I@z$I&=u9CW)w7mba}%6?N@Xi~Im9 zXQ_SbYh06VM?4Y96-gnIbo_pXVy$o>xes{qqG(Yj?M*Y=Y{g9P2>6hrajle=zo<#+ zuMo18Wy6kj58UF?W`NiZ{#D)y!^qhe-LCD4pdb z?+BTshQ*|2s=565zrycJ#n{N5f%$Mk!T6@zP2IJmcvHna!8N?~(^V>F)9@cXZBeA`VR zw%efHY*)>qGr+PkSvwiD%(GwerQ`ur+t}xa1Vt8^9cs zl%WfAh_Xl~ke#7oRCv%+*|4-+DjNq2u7I!kt1{bOoNNNW`1@Ug*w>@B^rL)e-C?{H zma*X?1h)#ro=hwfzZz=y&b4hMP`W7=Ug#*RZv@B6wTnM&uiM|~T_|^6vgW_P`3vSd9d z(a)vbf5GSCYqW)fu*t{cC!Rsc=CDuLZf59TOS+tc1}8X5q`yZdV}o z7YVa909`3*MflOX8|OjfIS;=D?7%OyvXKQg_(8nDVA%um5tE2ar4fQ`(y0kNX36Pe zwAOJR9*{!lSM!kex-95P!{%1Fj2+7#T32iQrxKBepZ2+IZ{X*`W??hlYnb?VvX`lX zN1=V^b1RCFwcHh)BLUtkeVZ{^LD1foKM)vB;@jZ6pt>952gs{O*R(2s9m2d(*{cdI zsJ-)+{^$H4cqTLLe2qkZYWo-8@r(aiN)$SF-Ms8-P~!WoKr47W+WA1;qPCNZ^Hajd zM5oOP9ULhvOsA*N($tZrca5Xk1ZF6%=(#X)ws~@){e6c2K}{oesxRh-Lr~(@@vk{~ zJ)?)~u9H4%D;oJMZ|BGR9aWNGFG$#=(@)N2rx~M<>I`3=Oo0gH0hVt%&3Xq{mWz&+ z8iv5cNvAlaWM$68%E8z^!v1KYIFx`SEWQ-U`{HO9@JM}u0H@#Vy?}z$|ZvChE z=oMvy}6yc8UPE4}LfUc%d>)^SUXkf@gxd zERNl-Fc^KRi=|IM8va(PA?{|vT0y?gP;kcbU83ISULldTa zN5%+2Iy%8)X!8^rZd)D+ippKNtpceNF3{J*`_q$1#O$A-b@sNr5U&3THNDS6sjojN z*B&?t$TPNIoo}9okNp?#sCemWcZj#jb#9G*L!*Ddg}+I$yBpGcP5$kibb?54BKD!i z!>vQ@aPR_x#4L}-1C;*WeD6C%k!&t z9wgqp8!z<4$MJ&m5s)gnEkpVoy^(x38aM7ui|JZaBo$yV=S=HfT6X?MC->1%uT56D~ zBlCFwo3_fOMhwuP}f9oC^?LSZb@`>5gKC4ga?%p_16nvBXx4l|KdZbYt z(97hnS`xWApo6GHie#86!+|(!CQZ1eW!X;M)0v-vMfjVgXsh5d|9SKV*QRInzoK&6 z{m?he@^#dEDj-7n_O&aXRbL!IKc&JwkVz0~VguaUho06(6ax+z^I4Gk$|6Zz zf#6Ie6V;LZk5hL+whp^c>6v6*%6JF{5hm^3dMjAKId7_zD0luUAg+CHI{3}70$902 zyCKMqfbfSfD?bHf=$*dBO2j@H3#~+#Gyjs+F3yR zoz><;)b!80L}znO09GGso-(1e_(7`Aj=x8!N7l`!QwteT|3wzzw#u`+?LIlh3{BE& zO|1@@DZRhttPwR{PA{DrUVyEq7$-JtW=`Xs()D?+52*)%AE%vmLY(Iagj*x0t3ikO zhwBF3FIQ~U#pd8+B*b21Rul{^86ZHNRixP1qjIc z>=bIkbA%76cMv>TX)Bky^42z*UpsVa@$`>o9ZaEXIN-bvk=iWL~3*3WqUCi zS(YZF7^_KnwKmr3H~~@u+_OnQyNKNaJ8?B9ye3*Sgh~R~Hl(OSbG~JsFhe#{aIQkx9 zZlt~U$Kr%2LIT-4d~XYLJyI4Vx~1R7d1MHMB3&@plae z<gk({Xkq>4(1?5Vt*0p-0Rt%Mo zBGzZ|6VSJS10tQ@)jV%=VJ-B;TdGrB9aB155y!G^sQm?`)r!KPK%(s5_YBIU*Qx^Q z^>O1!wIY3s@^ja;e+~zuIvv1%P1*IgZutT((IMClQc3#e0?NezJnFcR6XA4-WDZp= zDHg_PmM$||bW$eF))*Dg)BgjEU~eB+H>G_9#f=$u0~aR)em$O0AFRujDxk)ZynAPiv@n(z0hbZ2P~wy?iW-h{guWz z1}WS7g1r)#X3iVwOm}FuTL57$X(Oi1d6tZDXme~u8IhSIyL=OMnUonl zpevUbl+Ll*C3jaUG|^`nL)%1!8#OOno#h1&eNh)DJf^67ZFEA{lywcWN;_O*ZjkFe z6d7~SAhVFd+MRmNy#DKTnZM|2Vr`fGwl?*Xm6rima<=yj@AKjO9ZDLFD*agWnhL?-a-1zG^wVuO@OOOD2vH1nccg1Wt3=pd#pa3sW9Q_%oAaY%c83F z01ffCVDA)u=HJA+(|~d|`I~3>b!J+t7}pIiH(zO~RraxAGxc3`YxOJX)7x1uF4Kg& zLCXNLKu>#cDkxeIywq73{ixKbYlU-g~j%frID=OEL^+Ymo zpc!zlm`CgVsE)Qn>@3j1o+}Hw*d`9ZL1ovU{Mz z(@SJ06FC=rwOq^Fy_qk!6N(0#N2D!W`O`lsRPeO``{R-CO^;@{`fvpZm;IuYh=DoV z?Vxin1lEv|F4D0BM2IF}!`<>%|mj1x{BKZCXI#*6E zJsLn1kJI1*=wqZqgp zp4=5#Hn(Lu6bbkSk-L>i%Xt>(Fmv8CFD7A;gnEX4?k@4z;lN-2`OP#u{edpc((PP!0U6el;P z#gt@lY%W|lX|^@3*8n@*GN&jd1FOdt1`P&4@|j zI(P|;l$C_OW}L;WJmts}rRZc>&9+}25tz)YU&&^|Dh|t3^c(tum5|B$feAZIhUR3C zM%+QbI%l$4R|b?SG+2Y(v=x2n=rZ!W*Itd}X9cq4s`U%!wQw={gjiXDjF2juzL_xg zVK##sno)B&5n(aiYnD+)sro_rW)u2E`(aIZTT=GdkGe?8QDs%hyR=iL@Urfmz{vmt zAVt{;RS%K;QWn0{Ty%IB-Xmx6@&3)9s*W^yJDu>FF|sX1q1BD6TP(*tvv=HuoVxtfvN~R) z8h_OWcpWo(;NreoI}e|MUsk9={P*Z+RI|m-S3TH`;QpViFA=4g|K=vPx<%>^|M8FI zl8m+neZv0$q5}o|q`q$sval2(D=0(5lhjT!H!>HE|!(~@( zoP3c9DHFQ7jIU1pM)Ktqp7jy|yB7jN?+u?fU%5{NDC5=V;qrqp?^Nb%bh1v!0arw> zXG-g#7cKg53nL{kG0@!%$&+Rg;`ta(YpA&Hx#(0)fXu77PQ@7E@3re$4s2Czr!*fsGsBH-+w zat-2E{5AX0-56mDpaBUAU)uv|WwmvdiPu|&UBB3W+U zHl4d@NsCmqJ}3;eaxcHRNIbY*jQc$8R|bnyH}w%=K(z(PCb+y^S@qnUcpvyl97=gs8P`t$XWtvMCO?rV&*N@L61shuVE@S6%wZ{7pWN|Dd9?g?{z?*e3O8fgS{I@ej^%?S8{*0MOFp+!7W=4|Gt z;XJj~U-$m{EIbsWFwB_EW0#QOG~F|A%I6rHV>KLjh18_9HlJd9VQ5b$F;wf1&qE9b zS6*LwFSc)+$Kwd*%0TYfV^s2~#Nt2ne(v4*Q@%K4lfj0Y((EaX&CRBPh(XqRwnXE)EGd@s zi(N;$VBKA`=wL}r1$PVqOPjP2czPEB-hOB5AIzRJvrA z0~F3OWpp~ctQsv99~$z2Ect2%JUU4RwskmhN)UM%+GalYYk^H5p*yC57nMg=k?r7y z5E)!UjBJn7STEg7+t>K0JI*tf0NI_nr%J!V?Ez?D)Wi(>3}5eZDs&Znhywi)umNQ? zI9ZHQt-Q9V31LMUjs$8?v4z;X9rd4;| z9kbXK8X>GMUVu5sPw&P)dnFr*sA(t8h1LQ;jQSpdD>J#$>N+)d36gN*_MF9P`HUyz zl0tF(o^%bXNXXH*QbQ9|dt)eo>cbgvX_Jc)N!YqS$G#i0;qRXN7yc<~%52s%gci^j z#g&Nk9$?pmUIVj!%t-}n{06NrQT9Cy} zE5!-;C4$k@zthSK=$I1wir*@CUa`;0dAPcd5Uib zk++l{XZ1rb>D*8_=&Jhlouz42cbWBrVR4K{u$_A&hh=s67OUnVO|ir+c`ovb5aHyc zcK=!PxJDZ1KDsnN_=tXcFDR$^MFc7Nm3BjtZ_U>tf9*ENZP(bG(JS6Bx}UQP|5Z@F z@@3+x;NEaG<2-`A2o8~#k3<{>HeTpmV)9#^YZinNMsjtxD-H*K)aR%+w!(+F+s zfH@!jMHz8zHRer+fTU8nQ#HvKsx)ZP$%7Dadzxj zY5xD96n2YyQ9?I#@aEf^4&EsTJ=XtL0W4DHRHA7c{f*vs` zB{`o87n}GYkU;qg<=XuJhOHd_);+8HXB0y>Tb7|`z(q}3bn1?Jz;2+kMf9g(;YMBK z>x!|uYn6a6KQ@YqCN{d57U%mn(ZR+@-kWH{7RY%jx4eDpbYJuy%)|+J?ldW|3Ur(m z%F5Rw6fNR3#)%q>x<*W^NDa*?u{E%soyLCKnzAe+8)8hV7Hp*+U zFe?Iu{x#8d)t?e?4DW9Q+=ny1$SOIzQO6?2s_7=P(q0`4k75h2t_v|q6|xGik>U^) z`KX^R90>^_#W5W!>TO<=}scd z1IAPV(hmudbTaEm_b;zHQOOe~xSHG_x0wfGIdz(8JFTL&HSux1wp^$udqy|Fyq3 zw7>eLwux<4Dik*AjqI|Xi=4D0c;GeJ@~HQ^%p*M>Av_FO|HWoTaR&P07~}=9GAxgk zRTlzYpRe2aoJ+8IZ$yxA`rXov^X{E84_-c^_))ko1$VLP*>^N^} zpotzZ_0wYzBvox8a{VNN;mwm7gH>hXqj!3@Bs-GylHk%S-w5fe-}iv5uywk$?$Hfd zog2_aRk4%nEN>{`Fs(oIMbU8DVsouQ4zH8iL*_Q>B5$@3OKU||7H1PqIU{-JFDI54 z7iC-e1?^a@Ta*84wA+0Ov}#D>J|62djgZear*xRylUX+v;`jF;vsUGt?B34p_udK} zU-CW3WNtLA3<}?Fy<=$nyEW6ZdG(r|^ipgL8~o6rLb5t9S>nZe+v9D4Dc$04Q&i!v ztQC07-53H|YiQEd=ZzN+d|1(em3oaDtzsfYi0QGd5mWsKd3`o&lG~rOz@@N)j8Z5t zH5$L|8|pUmRJ-&YqZgzPnZvk)k!hiQiR_hi?|3K5=nc;6X_H|B&s&fs6J5AtRflO- zmlkmrZx5n)iq~(XUSdr|mQ|nZ&xGlKmy)t5O^o;T2>188gv`*CL1%VSN$klnd?CjD zBP;JhWZyq4@px2Iog{lI@j^1EBNx*UZ*MM@2%=dj5pO_)id-V_l-GIlkMa>X-!`S$ z`gLWJ-dt{k8gm~R`yRhMZdc48GH%M7gb!3LQ<02)xv@*>AM-Ja4|4edk6iOQ^A=VX zZZ`V6fIS{LSBE&E_i2>+^}#fWy-)8_?*JErXnjm+L{4dMxMC0V!1;NyZkqM;Fx~2H zpUDB-paBvg2nhn7#$arAVdw^OLo?|`_o3U%nO%c`+AXK*n0ut=IsvgGK8&+dcxv$! zwti3$OEgV`&IVeF{Y(1wtTg956sR^7n0vQ5p@;P7kX!TB?A<#L{PP_vS-l+5t2N1~ zOCOSgHk?pZU$L_M>qy$w>Jf|jjA82O@dLxY^z;7bN<>zD{?h$Jd&+L0`xJ*We??tO z>lSdjtUdb#WwAdBkmIe4*Hr~g!rC^K_eJ(T;g-S3WP)xJ`b3}C=@rJOtTM$6)%5$w zins4kwNE~*q^P_DE{Y4bYNF$&kVnv=r3TFMrl>MWxG*?!3K5|V(lGeSinShlC7>FJ zkEW5SSwy_l)@6CXJLv%NLv%1WeO>UeW+M1x8it5bGT!c~Rb95u{01pAg4$f^8!D2` zM_OaF(e2xuA)~gN=Q5oHQFPxN$y0{}I|@jw*zK6^VRo#E!mmAUAb3`l=&tGGD6JXp z_easSmB#n)Q7%8qnwj`|pS!t$_$RZjnkN6l&F-u1eo1C!G>A{V%~A4=FUR5Gp;l~; zxjp*U2`)=^B-u2=q8ejB1zb+da}*}`c<|Vhj}Q>!=f>0?(F*Q9YHBm;-#xx@10-NH zV+o?Dq2r*gxf=QGFu@e_^&4VW=vwLCzV0OQPoViuB~6|>tZ!m3;=eEDCn+ik#viRH z45|24RtNeO4OHAslST|~?rsp4>l{Ale~inVA;OWgBhq=?YlO+RVa5|%((G3^kHuo! zvinzLm5S`U6Kk!V8scO!CR{y51BLrho$%{}t1;J1c*U%vpEN}H($1M7MNy4=i{(pu z;Y$%YQyvaFQ>TOQrub7r{?pE#^tn}agzWgNP|c-n&^Puii3;koaaFXrzj*9gxJmu}QieTRRLD4$))g>XU; z?nr4#88}Qlo=5f)Dbby5K@;gbn#4f_1N&tbA~TsPfqH!cxOkQo{}*R4HfhX*Z~~H^ zO9%0vS_QaVvj|dL$#iE;K9+KSjGsQ#v;lhKs#2(ylZ3^tdy*4i7gFrO9OmI!(S)v1NPq z(sT#8(rJ@KGLPMTYrpy292ihG%h&PUm8?AbeEU69|((DkVpdkKZ5Wh z|1fv=)i|CB50kT!_n*EElx;x)mGsBr;NLJ8!IgPL7L?sl$&%+7m%}3!%1alxKDHzQ z0^q7y&p$hlnuEWiJ?V%fpkg#GjF+q>Fw!QvGDZ~e3s^okz9Y1P@dta0k>eH+!zZ_I zt<`6A=kEW6$Qb92goDX63OJY)#z^BC_Rhym#duxn*QE?sMA8EZOTD!; z0#^=KZdd0Tf_uybDr5drR5~498I4{%Aj-u+93%G0v4f+I;O3BOR}b=yyg)-54rYvEqLKLxa-QEu6r)4ULf(-#_s|AQT5lfxc=x zB<2c})c6)f=q{=kdcQnpn>vNU+wg^z;jGT|9&;UmV1Ou&@Lqzq>}^}3jTWvEu6yy1 zJf-Zr6%Cj&4KIHl@ykO->wNu2UQ@|}UM5+Y`3oF@>B$eJZ-o12ofxu>_4X2(uj$lO z=7iip)Qw6cCmD@Qw_PxP?%q?+avdV|k&}^fUMKXd#-BN+%_%IoS6X2}ohvN|v8+e) z9NFNKiI8I_FUyUW&%d$;#M>wn{yu_`?}vg~7*CVoUyb+Ql$QwbVH*o*nb>woXOkiK z)h*vGUZpd^InHO2Y(rw3!gLy!Q1He%r)ENGRM)Q$)H}z37j3oom#{Xh@sXYgXHll42mHr6ZSWfDRcrS)BsN9fwzbjZ zk<35f>GJ^UMPC1vLz>eDz?OFQOVNxO_Xc$GSM4%aZ~LyuDI4KPVvEygx$|5zacIq` z*R4!_h`uq&6MAW?LH&C+N#SY&uhdU3X%3{~rFph~g(A4-yX_i9=3*0J3bwi45+c*P z7W>(b0rP2-j-Jw=p$ksMoNk*iair)w9PIf^jE5P`jfDtr9{sv~sYy}&FEuM%bc$VP zCKMr*FLE+E$*9#KIrYI=9*()SeyC$zbP$X58WiBf+kkPf^;Z5!uitpSzgrTb^zWt4RIEO`LHFSVGDc;vZQ~x+0OwhGmTuMS@vma0z5->Riz- zgF|A3!&~S@GgQU;8z0Ri1w?J;f{1$D)DY4A1J{&9^J>mlHv&cTrW*Hpz*9qkdHnvi zB_HH}n9}7eI_)g7e6Ql)hX3rMzs%WU(C2@VJ=RRz??1*nskA0c`44)5C~y~16#0}=!WR);y5$`F><5nR%8A>05< zKn5dyedR48Y7X*RYm@yGKFY)+8B@4kn(W}go0dSHJZq<-kpS_qRm&77`qIvlgkc%3 zi-dk6wD7^y667d>-T_gCcEdb2YHL4gIC&5xzs)7bHm4}5K!^Q`bv?fnrZj-I?I8R7 zd-mBGTMLzvi}X_wIt1wMMXHB}xt#i>zpY)ojKDEMKrCg&dNEh*Ggb{5$3m#59XvzJFozPg*s*a0AK=q&Iys$X(_A7H*Eq>DfZNj$;vu4 z^JfMVkL(=-eNf?*BKwliAqV=CsXevpJte&Y~S0 z=8#5(=rD(bBqW8>HZy1Dkm$IfT6d~ZiB9*1n2saWlxk|-t!}q`rIQYyufO2^)9d+u z9V%{Lv5HyT2-{5y3Zy7)xgB^hVA*DkSGRDy}`bHt<9wNLt73-+XlV|4_O-WvR|c zp6K8MJy6atM-1?Th*BEr9fGJcF^7h%L)wcSjIC4eyC7DG-w_{e$0bRLsFf3gFid>r z{mS^*AUhzq>=4Ggrl02zDH!(hh01J9*&I%&f_D~IS}U?6alIwz`8Aw=ol*hWIz~5o zLCtrbtcsFl)RoUpk{tp)cR|-F-jr6EBlW}Sao-5~nw9|+(hGS7$ucCb5ISJYd9qm< zc+CYEdn)Sd!T42t;2iQm{iS73=lLOcDI$FdlzRzWzmij;Bz`Q6&HYnx*Z7;&X+diM zs8J@h0-3XS?S=a`89acraUW{34PCiH_$uQ>{^d#2z1r}B7)xF|!|sGydbsH>T zvnHekiU9c*b$DJ#HTla!e$!vMfS71U`+CSJKCFH&f<`?ciOk9~P;=^f%%QkfVVk&W zqxO_Vn3jYh$d7qaQZ!-fjqSbxHqTq${bF17L64@O$UZ+wmAj697xdXZYd2Fmy z2Kb5!ZM%Mv+_wQlbBI69wgWp=w?ofHAp;1gv!bEIHEQ5RU8Nq5;G<0Mg9dQdoLL)r zn^XLdOQ42J=e!K3<)Q{gV=BKVDh_Nn4(rCeR8n_AX@Qo%^|zo~p`u{xj?@eGIt`W_ zSp5P*IEHW3q)#x9zuh5TE%##{nh@p;_go{l_N~(Hgp6@w8vy4&$*+bl+Gg5<6iHZt zt-lT!wc;$)B)qH-bAO^uytPHoPxp22xtZ-vi2NxkX%U5T8KX9eCShsm_Dxq1Ccu;B zn~gnyJkF8pwz>n~oWnTp!^i7$R}hEi4wTpNZsGUg>EDp1(C{fptL3T3HW#n2+!rB^ zhd}Wz^e=d`G+_Us3hv%et_3oe_;Jmd(}V*6(b^fo49{M^;@V`CFE~NYevp$|ME~SD zv~b8{YAN4JRy1{FAX6JiEq1#1WJ*VukX;^Ql0x_w1Z1q>P)?L5fOQ#{MQ?BrhPa1g(I~)g17Jh?2`wepWhFDZ4$b8mn?dFo_jfq^$isOlxI`8N$N*5l! zH5_cl?MB-LK#r*E>u&e?N;i2agJ0@f8l4oeUT@=4#GYF`jeVMa*m!p?kiZf~Rb^@8 z?4)UzuGT*QL$LiKwlEoE{@H7$A+NL;|0vjmh*K(ypGWCkb&db-34dyT%$j3yj2Gu` z*cHoN$BNfCvOo9dGIz-+ZZT>Hvw7k-yuC0(?bRb}g-IU~LCQAHhmHL7$o&z0{41wn z$8zU{%u#Z6PC)#}Fk}?j*uMhyz(OowoH>&GUQm;{&gK!L>BOP~RqRz;0JD zKy%IeTO`AuK;(mkY{Gu_zw@3K5ulOL)Y0KpK5q~@#56_mh@A_G9 zZ%9JG4(d-8z=|BD?P8ou_Q0iQr`*Mb#3-3veG)D4ezXRTW)i%yr$5 zx@$`qF!HDT$l2Emzxl->v8m;oet-9p`5wPGI%O5nKsYpI#e7nuDO(3J0CxNM>Q}g# zoQ*Q2ll_t|CKUYJ{c^XZK>8r=aK8KCE%`3igNfzFxj`Dc*)cLAaKAJaemq#=5{xvUl;H*r(mZ|!AdANT|)5TD4`fbCdj=T zJY>i43~>?oh3NFh8JqmDm4;sTQ{e7f)TzM{)9M0;64tQU$4M$iIgExdchSU6o&CtAvIQi#^!SXJSush;zGj2(niJ zK*<3M@Idb2i2z6klv(Mo%t{p`n(d>OT0$mrYJLtpot^z1(J~>1z?ss=-{4ourU@+P z^)e3o5Xp@ESrM+x+WICBMbSc&0{ozYa!AXPU=;T&@ex(N1yUxH*5(|*`O*@8!m>w0 zeAKq*xm|FMuc+b~RcOa)EhMeG4r5=q-_}TW-2z^;r{IqS00Gle#@qTPLU6RY40>T&a|`HT9Peei&68k)d=HGeOuo{B zgWb7D?7b>WxdKj!n@mCQ#6IOGZyz%3Vh%i z`sd*8Z;J@eVrg3T&UpTK(o@}QEB%k}POx)gAjeqPxmh3z7*0YHQB}bCpxRR*vi}&L z0_kbJagJ@ibJ$_plB0}QjEXv^KTsT4-RxGWwlL6o1O5j%jX3`ex-rMe7_UEN%BTEa z#r86bLdMgZ#19s{sD(+=lbohc!&|_ zB$_&*;K!L?kTY;q=nnRMv?7fcIWz=aK>D8qC2L))O89jGnYab7^_z+e%_IbZgD+2< z?79Kmx$S8-IT)}afTcCl>BNtC#qzVxxgtFOEb*$;S4pFot2QiQ=$K2t@#6%CnH}lD z&7OP2m68}k>DEgM`5%5CaP0~XX-^)76h@bs1XjJpSKj-2+2+_~i=(#;Is5lWR`x3G zw&!=#F6t1Kc0_~dcDZVoYW1=nrA)z;d=d>2w3x<0Z3QR^dRQg2mA(C7NqglDQeiI< zC@WXTR7{06>GBe4%o60%$Qkj*UlM(>fT|Bv?}OYFa9@lQPfVoVmej87ROo0p%U86O z>vAca9y9VvL@{19Qx0^68xBN$NIP+(=3nU<&oTL+-WB~QeT1N(SGw*tlM$<3H3Z!s z`t6>uDoKD& z3N>{sCvv%Yx{<77lf=Jp&>JJFUaY1K=vT1w8-Ib;S1fp&rPrMwYc^_1%uXkhVlAv> zZQK-@5wLt+>_Z;LhL;4bv1m%gmR88r+nKeR4Lq}8COBpVNtS6?E8nDVUo|{%u#8&R zJA_94C*%Amo!{+^?{bz+mx1^|#&15mDM3e~*D8A4KAyUBQ|3AnMCjICF^xvIfSrgB zXWKt~hbArfrP}vcqzFsNNPWOA#W8FX$c)x>UbHHOBkj>V>-LC4>;FwVhg{v}jGv)H zd~lH4Ay@JKkd+FwOl{HIXGwU`MXmaX+ixcT6XY`ksE8d!-Jld=zVK~+H`#Y34;C#U za9Y&wyK29n4$HPz=SEFA9JVM=Ph7q8P^^6GxkC6pLm>YO^jZNn|7(K*=a?QbsY_gd z(m|nb5HEuKtQEJz_Ri!7Q4tF$P@qQhNb)Mj7sBcOf%EdOXxt++jFVQX+jnOYN3IR{ zDB4~3o9C?|n(kRJ#~eAqB`#A-RssLR2L2azM`orr(^ue^kSKuGPWWOTwnd<3U}m-_ z-XjAQe;^RCC1Q15_9|gCoKas5E`>s#e{r{8BF~U+lesdu5S8VmTs03Bdpu9VoXEp%_uEHX1)5_JG%BoJRnbZ1?@H{fyoejq!E`z+IqK@e=f z>)#`3X%^+hBJnmk=hEgK!3oljiG2$MCYDDc$^Q=L4J{LfbL~&oFYiH2#B?v-qKxYyxUXchbIsDBW?yb3cH{ z{{iG@gKi-KN1m2v!o&?gS!jraHSu22Qi#wigjx>8jpGm%K7oc`3#pYtDiP9?&KkLs z`TdX#vS>ZByW~0~%+p5;OBHeX=gE{wXcWHW>Sfz@566X0&cr-r8DA$H$Xtn$Bl|p2 z-RwXZ%BXKsF4XC`p8Bv_D2)uWNfbs1;5qlNqh^;v?}7>eWdKyb7D>PFtk7vqbh%R} zS2j705#|w~_GvC`N09w)*IPF%o)j3hjq63vnEgOp%56f*e$&tH4}1bhKNeS>J~evu z0ki#>l}HJ~Kn)sbXQ;{=c&>B!FTi3R>YsA8ag0u;9(vB6?01l73RKR)EZYAxHwh#E zUMQm7dNl;zG}S`SSxtNc>9%NtSGlwQR(Nnd;q`SG_%LtP&A_%jyd`2vV&G+CKrr0Q z)F5a5x43mF^YHF~(@v+a&(y?QHQOCLUSVXLw(8=W+y|x~Vb)l2PBN1MNUS55 z6~mFY<%lE79kd8GwF5V507{o|lu&ija@ zSlsG!g1%z_a*By6cEoK1uin3i-hg_}@^Z5hvdxaH9Tz?$ofs`0{R*GluR17fl=SWx z2aomjRLtK2)zh}g>^9_?4RC>-3M7a2W3PEb^N<-mo$3p5AaBsc0~5;>ISoT^KVok8 z_UCS>UXCc2dCPy~Igk_7UQ=6#<)ww>Pol%Y!|cN>A2C~=u6`zxZBi)4jfptCx&hYD zB^06)XAC*{Rwv*&w(}6NDe$Z`)YSS-0G-B=j zsso?t7LdNoc)21=_ET^gXu!)?MCG@VDFJA?>oVkgQP}a@iZej7iIxc;ak~4sD`*I> z^AhUf*bq^rNu^e%U_;o>#iv6Ba-2CoFHlLv$BmDHr zIxieY*~dP77q3P#o_x2p&QjRgnew_tsb+pM6P&*VuRW9OJg2h8E^{+oG@mlqZi8l* zfyGc@5)PPj#k*1VTA03LprqovH%$5gSagq@N&c!K&$OHQ|3Wx6C;uJJeb_ag(M3GN zgHNJ4&osSTJ2SV>1Ud5ijgP08q-085Ih-vgYL$r;g1ZI{;iKjHu?E8i!SvIIc-@M* zKLTDk*@p`f^(I#nTd3ZT>YCFsK2vR5w&QdyY>BPl%KiIn7`GTwd|(5h-Ul*BPDVARBkoKPdP&Tj<&Go0nbh<^o75N|Bb_@aQi#^ zNe$dHcM_F`mLm>XnOeIFOQh^xN`j4VCPaLoJI_MdKLqbs(Uf1u&5 z4@>2;1zKyTpVNNa1w%e) zv8FPBk2wggmSy_tE;&4G^#kpe^$Nd|0ncGg>+*rA3pnb!^E9U^@4E8%cUbV%?10S` z3EG3O)HU|PuL+#?)7PlnW1Y3*@|T0~ula zY`sxv zubc5cq;`Da_AHurorxwrH@HMf&)zrSFJY`eD{`bRYhqjj*X4Eov8Jb##k7lgc%MiHaZ$1WtB^?JmyFr#vDkxUwW?My;F)9@M;LNhIguq* zZR@LSHm_aO+G8M(J?<;%FdXGdLmc8DXq5r3{mj_;%DRoWg{l6^0Qx)+M zP-wR(YctNRJV7Pqt0O_M?BOYwo3(VH9+O&!dex{}e`v=!Z=oU*0*7Gb>9#6PB7tq4 znhbVLTGp{98yFk~aDjCurhU>5w~c$gt$M_3a8BuC8QZ4aONGhrTjWwuBxH-==u6{~ zsuVOf4PovF9B;L=^oOO>cQwTmbti(xbbt^o(qrStoS3%2#6-ll{Fmc+;2Ozsja{8? zyh@UJgmAreHKE$c*loUI&SA-W==tz|d?b#0<-?-W8dp)NLX>Ti(%-+T(WSX`(dT8@ zd7SH;f?(8WxJBe0kW1dx$Ff(lpX}D({#vsy=Z@;OFf;!Zki5* z->LPjrLBz$B#^*JDdG3*`Y+@&JhPavd9k#vg$Ve>nl7@Ct1j^i0t7U)1ML;kxZ3O0 z*02?|A8_qRe#m8BJ=3it6L-mme*@EC8SCwHiWk8dFhcpX>3gn)J~QV1O)!`#*Sa9y z6~Ui3+H@1Wd_bV)FR3ZxFwqX_acs?1Tp{u(T>P>!hNfJ(45{--#9%q*M*}o+STN&Y z&TwWa_O6I(GH}*JgePu*3@;AbGY4gTvp0}EG--s7oo~W!1EC^6(JG07{C-(Ojz33H zz)<3T7>biBvf+~FZSJ@jebSKsc9TEG!4K$C#+pjACv~hf z(UN@)98PC})IAqLaj$8Qd&Qd+{Ds_oHjqMq)m=bJoUxn|+Yx`-aK8XQ7R|Pz82O== zN5yXi`qu`O>|>w@E#ev71sQqth$7nI0^|m60V9lzLs^K_1enMo@i9?o5Ok-;va&M& zZy;x7Mg{zzcGZ6!4kA{1x;3J)$x$C(JiHJ*(xo4K(wneNJX5}7dEWtkw>?&m=G zpbU7KF!2H$l*v%+oH|pct70<>bIS18wg7))xKv;ux{SV6L zRJ{J;i>7FtQ-9mzJ2y;T!p=9zOjet6PC}4^wnu4lLNO!^{0?hd9c$;Pg4A5L2}|Kw zjHjpRh0GY7CJo(*JtgE+rrma+?Ap9=XC}ngm*C>#=xe~~A;&c6dn>D|F;Us?z>tuW z%(!rOM`1_D)bpb;u%SVk!&u5tF7@I+{LEqQ3O9FX-eTmX^BPRM0Jez5ZhNVDILl#8Y5$9!J#id^oRnJ0%$I&T*V?Y0SG z9d_0vDANCKwt8nEPc)8$UJH-@Z*d1-PZiyZBqLKF0y`2UxGl zF;qh+N&B~WMmcPKD>cu3(+&G=e|jcNE)^<=z?>-^K%1xvonuXVaj>`TW(AYYn<%Ma z%qBYG0Wvf8N;)PJ=vv|FP2g9p*zV%gbk)6?IMc#S6pQYH&w zcPq{k(O0QOu*c#e&*PB0g-Lqk4tcicJg9x3Y4X&@Yj zkiBKuCv;y!{2v<3mk%_onM5m!Kx>pzFZjA32=sWZv#~q7PakUtcqQu&Z-S2>+Idcn z6aUU-i7GY(Wnu`JBwq(xG(dKbxoq=$B(Y)(grBB`=32pw5}zrvh-ayfCBMKMFk?E6 z_?5MC2JPb-4u0G~WVAl++M(X_%8jyh)VRtX zz5d*xj*Uor&8MmeC+lMG%2%WRc;V)^qsj3^e`9+2)JxY_*vW!?LQ970hraC=xOm0X z{%N$oE6O>L?Rz%$-@j(8BH;~gyR_YHelwZSxIW;D5KV8KQ)8O|sP)_B$(k+|R@My0 z>bY}^(sqYT#QHgx2i2#?V_D?qOqyNhF|SC}g}eJweGeGr1j2V+E(;sT2K~!sI9QU_ z0iG^FFoil$9w5};yH@&==a{w`)omLDUYDTYe#eU;Tb6Z%ZwcR_o#$2Cyj>_zHdrHw#_Q9DJEJaC6L;xb)X1-_6q6-Iis`&xpU?BB*mj8m?kOKRvB6d z!9rXtL6l#hW=c9cekcK07&hAtx8kT*|7XX5%aP$fxquGqGDToDU3!Eni{ST=Zxi-7 z4~Q>cz^shjT*Gp%Yv276Q zbgCtf`_szc(^9r?5vXyH%kbFR-`X24j0lT9zUR_eiT0d2Zo* zhSxRq#&HIoEtIUl~g3rA&ent%U|Dv|peDktt z@_W}36Mok}Ce$baFZ|28z~S?*!~R5ar^yMupjdtBS5OJRLP6)PZ+L5?5jmIB~R3T!OrL<8FM=*vWCripVP@a(|b7oC6Ti7Qk483*D=gx6X1y^q)3 zpj$}B36s@{UoL+bFRckzr6|54AmMDD$)v55DhEYwlzj`Vh531IL=D|$2%{9qme5hS zFpTx^4O7bxWp96avuX0IO+TzGWMw1DtQn(YM=__GO}VZQbi(uhn(~9Z{p!paM}af@ zX);UIn$9~v4S?psqVTSnUIf#@!FUgRr|EXjk&)wW3a8hoE9*V&zF19vv$cZ7<6>-u zo}1ht?%4TNv44$rUvO}=(9PKbZZ=}OrG=&>uDvjqz9h0v_k(@Zie8PxRi@tOW*!u5 z5_PGAn(FX-XYocM_4YcII{lp_)z?V3))Qf_=X<}w-AU{hB&0WFC|Y=l^KT$%YfSmP zBX&r$mLI0xCEmI|sS7e^-${wTvboWvazi>sYct29+~N(@RjFm!2ddTI1HkH(6A;Vc zAUU-)opW*4<_BAP!Ouf#VaJ&VZhTlzTYI_5Fj$G31hse0HKhPq4})}`==Tb`Ho7AA z<`CB}dRX{0xwlbQmzuFIe6xZ38Kt#7nR(nUJv~5wte)%_HFN~Yjc(omA^t=(Z+Q(G z*W^VE5)Z#}hnxk|ZRf9IYx)!=Yq+g_OnmK-Z%W(RZS*Jp@ZIcQ<43V}m8ny{aubm9 z%pvY;K!b&6k!_s2d1hyj1&k1xR$pnx_yW`CM#(UG^xq`$!0?y4cRFL#Tjg|u zpKMCo z{gGqCzs(a?Vtvb_qbBIqB4*}1)&YWNIW5@gDKm!aLG^UEkj0ILfbFVW-IWNlUyzr8 z`Z*;-^PBSem93 z(KcQS>m@=T4u!p|0;Io|ZjdBrhOb*hr2mxa)inh7QIwYt# zuVlXr7Ul#@s(D1lPiTAt9fXp2k*Va9*yIDZ8UF*IeCW|QiRw@&ZAe2Pggm!EFhtj^ zxpC9Cs)yey?E;^_Q5-T@FdmI(` zw0||v{9O_8bHs99hRXoX-4xJ=uBZv_VV$(@8&08{=D@#oAhOf||4E;pa4Bhm@Wdq8 zzxAiMXTLmD?eh=c{HY|QDDk*^0edtNp3S;CTc8kpOieZS}HT@fp#Y1_GVO`}5e)5GKkR^l5is-~#(Z>)eRI437KjBjKA2f2_ zuHLn^`?a636a0lp0J3gEjvN=RhBX7|xWVMITCOF|z(-Ljp-(YBWNb2sNFl|U^FVqH z+)GrogWtq2RDlDOIwpMZvpQ&G)U=RRt~XqsVz2bZ`y%Q^l&Cxo^M`s5(eEHEqCY$q zNi%$3K9(cEVPos_6coFR`Q5L;lCUuw@@~@(#2w3HXl_+F1S3{GPrsIC(tse3N4Qr`6 z*Y#uMLRm;+g(UcpTyx`a9Sgl%muLd}gYx-TQy+d$5osJ*;9HWH%uZ(pwr+j6v#YhJw>VTuw7Bl>_O(LE$g8Mh4={NZ4-x&@61EeO1 zKZ0>CibxF|1nE!Q$Qq(0&tu7WS?U+KVKWGICWq4e(R#_xw~-Y#{H|2=kG<`Axl>D+~!c1E7NE4H)bBVJ-S2Ec?N!T zdemTww7t$Y@_4T2g#{3*YW5$ze)+x9ip;U?KKii#xE82~d20%Sz>U758^vifQ(eWL zz%<+v^4qleMiDc#D`n25wEhS!^lUC5&zk;8 zXfn19szja8RWfK0bE+0;C|o3-Czg}Qs|Ya9F4ov4m-n&5d6Irl zrxWUrmYQ0{u{%iB7@O{I;i3l+yDUyUr>4kJP4{~4dhLcu0{?wvN6V}>Bv(!r@~3ib z+^ra!+j~)wg7REXv75pQe3ybxeic2`o+~;C;U}7yY?p-*|E<3LfIl5Q>*;-3Zj)E= zQRh@r73%gC+?>T6!xDTsIq>@GTM$3gYteneK|%gWFr4c8uw{8_mq>9CbPh5}RGOkj zgr-}$-5!cEIh$hg^*X}V01VKe=7gd3^s+5F&jwqTFgbtiw@Mzc%`_ywl?EH|hESNR z^_&4@j?$I;qk=!UvR6}Yqeh9IqpGKsE8oH~4}Y}YB6#(Q^;Uz~Z-b(nEFXUWCAht_4HNqj97HRs=y<0CRXmqYmJZ=OBOD>H0{Yw^s3%+&p*x2ZfkldZwQ*Uo`!Lw~L#i7UIit@nn>WYt1 zSiL*QpB@%>W0`x*P#ZR2c110^yq72n5(PkC@0|Wu899> zGV@Z6S2pij#Lob8y*_`6^(DP|x~Rx{;&CJh@N~8(FkgU{Jx*Xi)-LJ32rKV>nl&g2 zcs;OhcgPh4dzBqErvjc1PpPSudo9GUP~!!n;5XosCD=cL_Ed0mXQZC~iCHl;uE3Vo zjL8f+b9{*CGR_t^P(mY471WfsVvY=a#11kW;nn>`g`Y{bVXCtK>5^U~>(t znKTN)Sf`vd;WzPuhG#I5BLSCh^xE``fDoghS@EyVBlC-b!HVHF68Yd|!cqtWvUWV23)=L-HtL;a(tQ8_VnT zFa0HWF6T@%&sySlo9jAKHsI7iQ$#8De}r;NIKzlqHucF|r1(*s4(_QyxTjw{;$nL_ z3^4hE+r}C((&%dGje)X2g+KZhN1W{qF8yb;TW!82(eH_}c-(yEM;Nlsb^O|fepH(= zzcT$MJbJ%5_UpAa*k*5|hIfx{a9M3{W8aD{bqmR3KnrN4M?^=C!IxQ;e+c+16@F*l zf1c=?+0(`1kKUUW)He(HcQ?#>hHW(iY?SvoPHltg%2wo^uZmwQf4Ck+wF*zp?z6EZ z;Kl$SnsA#o*fh0F9TLf<);We8Az?hxA9_-~%k81EMDTO$i#vA^r`eeh5_r0N(ZfVS zqdd_a<4lSD`*O~&+C1;n?En0T=HN*u*EydG{3h3mZTCsXZKbVWL{Ic=-^Rwrg{?mm z2z`;3ejsxnPl{~z6gIUR;T}&V+lvv|S>)7g?j#tIkVlhZMXO>R7HmWVeI!KzSB?Ioj#$5GF^`a7%i$mXDnmQ7 z8PHjw7!vt+KZ)?{Wtgx@<~?Vw_0rp6+hOZNq@xZ5pbV&WFkO7@Yq8M@q#%Sg2YaD$ z^a1}c#ypuQSaoB`w!dpCi%R#@W2!$xM0Bkn(RgEZ5J*k;>M->APw{=#%`SxLOvt{fA4Lq%z6AH!xVB+$f3UXh16d@0UAiuA&G zepY&d6vf6HP41;eiUc$j3O)u}B;LQU>53KwH9~%^^m=;$-Hs?s9#JcS$?G+8Q5!*lz*AB*)!|P zZ&%bhD0ov?N9%fi$$q=KI&b)y>=R?)bV+xh-B#c$>kTvBynn5idN@X~^G?-`q4jf2^7zwJqvh|B@ zx;GLCfwpr8G9g#d-(fi@zW|Uaas^x1z*z{ckL>$yYv@UOsqtR75Tzn1GYyLL%G&n9 zH_!|G!gEK|b*xHBR<74I?Vw)zA+DKCM(vHMdAngUU!Y(X8K9i~@VmwO!(AU_T1w)X z)(>&XQBy) z%&j4!JqbGZOR4rJG4+hoYKEkt{=`jlQX*}DwwEh3$vM^iB>2LP5J#l;7(?IGmpD5ZH>B4-jpxK%;xL+08J2C)7<{vIcY2y%UM6&_xnn0JkU z%4$26Im}2C-_x@)YROK|%8@-idq0>*xEcD{W=Hl0Hc1*?Z5l5;gr$2*J+>i!k^ zylXjra*4rk9J?k|1NAn-3ZY_z%A5yQ;@#egVRcP%*ujzghz>(xo@tg+MD5+f zAPj@TWx}s|Q405JCvCGffi?`W&t!7C9Wx zAl|?QU&B~5kF*!|WGaFHKS-FNEu)?$IK$YcJDra2i!O*g%kJ3OoKi#59Cmsgwn7p$ z1O^O&s)qj$0C?PXbQ+nltP4Q#L)J2H0qVE>z$dR#vKdN@4r$Klluei#;__jpU`<|_ zE%_-hI!oA>IRwN@lHs!qJ@(Wbif#z@r4td z=7fdvVnh;1?$NlSd%C9H90f-zLceRsWYLdqEl*KYV1FlLyb`c zD3_t0ueCPT%41+E!C@aK;NL}kn*Zi{z|J7_FD;W!WY(IUpE^Jomy%?yHg?Vsy>YRT;6TjZxRrtTdhkKb@0CQFT>PZOP>dyXn(b zCRegM({tDxr#iA~O}sj-?`zooILJ-MRy_;P`Uk&^66KJXKx^UbJ+_UHJl~uX=a63G z8E#44DGGY@Ec_pT1oUgx%z@g83pjU80`*ifoC1yyXgHKUKNk>)SZUJCSJ%3gGo7g! z(Af=M$Uv;3Htm!r%x+gLyK zMbv?*im-+uO1dd}*^sloE9F>&m!5M$+?)V@1BSHLW;%BPo{3=N2Y5KDFl?~${+*}U zxJQp&WitpjdWkMb+ z723%qMZnWffvkjU1v8CNSWKcG`FZfaw9AW^6`9OIh1U`uaYmvU-Cua|#9>Ah6*}k<>Pd;_4^FCD*v$W`cz1 za#-*E0EG9}kgLWXCOMJLwpRjqlq!MZVGz&f5cxg% z<}LmBMa@#f`F7TlG*k5Njy>VHj|Y%b-MK^|a5to;m+IR(tW z{CvMD>$=TkSjWEczh+B}zfavnN!EJwh0M$eU&RqW0|?(Az`l_&tLls318NkCe?N(J6q+KK$1m&LwgHbnxh92wx;{D+YX$cI2B(#;1BYVTT<}l6 zV0d7AsnQYxFWUkkutKoXHD_7H@+#Uybq>nd0hhv&e}u_~o^CvWG>i~d^Jj};%_W{) z25PuyflyRApq$63{d9AdSk4w;p7BZ9@c4jWoNJjbrx;>V-i{ z`&L@Vl*jGieMn`9Y~w@v9SXhZ4@`Chd2Y>ys>vJ9v3B=1{+a7JS-ff>dyR;R_R&y7 z9$R{-8}_SfcfHA|BhSWACO-{yV7wf*6{<1ZL{hRfSM(Ka86M97mJiQSSi4?Y03OOF z;klNEG^_GwBKZ>AdGg5O3E@5XzM%m`;|@K&S8e!%gJ1+$BmJg|aA z4hrIKz#xQZ4v&`g%_c|3GoA08w{KwK=|P@D0o!1104~xy_EIshcN#{msHp>y6H|5C zAt4QyzWOA3?vZU(Z`Hl5sJ517eRKPcZvfFK-%Z8r^Xr)}2K~;QFp;OUjKK`66jZ`5 zV9#C39v3H_a?xtM`7(UVOilR&;3*4!Dm@6L*Dwd+zu|$eg|bI$_%7_Ho%sG;fN8*) z;W@I#Eo^TV)~1@j5?@lJ;W~EYyB7>Y85+f<_^r5O7==za$~ zqyX(if8E-4i2+oK4g`aE{Xg)l7gsHyd3>;tU&H3qS86;e2G6C5eEq-KmLYl5%5#3O zv7;|_4V3@!x1`ps5FQ~X9IdmcLgp!k0ze28y$RdDQ?&hO>6s>3I{V6z!v(^^{hJO@ zzpth|Jo6g011scq?i2*lz4)g3!rgwhb8c@j7(D4Wk?{&i`0*JfeDO}bwMj2sl00pccajk=S+T+3^qzkn*xS|;7r*qoCau}% zpzXVt)8o3|$qjj~tJyncGoPTp%kxqL>-bx%;DWJq=5YHGe78S1+c`M$-^zb`Gm}*% zb-lgZ7+?30YvxwT^j(+NA;5%=Xm~K7^W$EUj}SD!7W045}p)0unAUB?~6V$ zGQ5PErJhb)b(@g95>nyVtiNzu zX_@NU*E>Hcx6i*(MMBO()(r~NozXTA|0~haYqtsg2&GV%OCa8>&TqsWb+5W<9H|dIxhJP}mN67J!wU!TmhlbZRJ*g`? z4PxG(nj9IHw(o5rUGl< z5XYtUL}o>4!y{={%P+(YsJJO+h}dmu6*VJc-%@0NIk9fNCm`SfnKN(VhFB3rPPbK3 z@pr0@EgiEqM?RzvZrgxu&)!W&gy%r!GUk2c#P_0|XlktH3+9xT@JH`H^z>D|Bikh` zODkP(wa-gu<%18SqG1F4bkutD+qrP(mRpH zZ1UP392B|s4XbIj#`QJ%+KxO$m(lpS(^1sndzbM|l6yVIMD&_GnnM-kdN_f60U((? zake0Ns8CD zEf|E71HW21`#OKmJRJVdQON;4ZPU2qIV`0`&DPf4ENRECkTh(!2r{DP{j)agxAw7l zh**0Dc`Iu87~UL$ZP(qAHj{Uutaoy+zD$*fxuF!d(O#tt*!73npvxi}`H{`}>vygK;ILvtt38|bzl$MC3ZD!7FP9eGG7^N$t9Ogy1G7J z-~Zr!yS;yTJ)h6V<9?S1)CMznyp1AQxBqT=jgIi9@R#eRJ;8eo@=}}l!fiW_AYFkR zV*Iyin9WPT<$rUNakCJQBnzE?3jvS**s=!;6FCbqt_7#Da{ahVObhu+UX#*4qw2-) zK$q;#_uT)&`0!m@?i{TNKL=@I{bHs{Nz%@nPOY}fs;<7(7i+@^9kHPI=C^?U8)|a} z_YJWIZbWlcdc4vG&mMef4R*{CUJBle?K?a|f1bMA{XaL6%UH5T8Y~+FdIg)+e!+jp zxmJMT#%^=9G9gf@{c1)|Vf0t%F!xYyauQimM)X2YQrbce@>}x?sLKC667fJ>4aggs zH#v5eEALZ7qG}A%9gO27$;l3oC{m;|aF@*WRYODl^Gnpi(~exJeU0|#xjUQ#P#^K3 zQMIDWt2|ww8hFdOW*A7K$VDa=0aK_Ua^@H^5A&13mhLuh zylEzR*1c}%KwjO^#iQ1zC6YQ~1Sp=~x4-wXjZFep>yV13#fZuEDM@ky5gNH=>t`#F z(r!r`t~~pJrw8zQ-8dl~o-Br1*UmRS^yfJk4))=1(eVQJ;yomygSb*8Gq*FzpXO zZp&e**;OOHH9k#d(OQ;53+23Jf@(p%rv-m-ea&9>ty6tGqPXEglnH#lgiq0}{``=qJzn53*fHSgVkYN27|#sNL6u~W^-{7f%YZITLaxph^BZ{i}m{}|xf zI(Zr>AG?kcq ze_%v|Kln`zSXlgTLsuj}b~tMF@o@pP-?&?O*`mi)&F`qi_{g6)>><2YJYT26qyVF! zp?HXVI#Ob&{II9x%~_(L1Mw$cQ1Jo;pigE(_g&~#{@f_zu{sxyP-1z zSvST-U%nrg=xG!A9QYo_o%xC{Ei~7U_^O|BAFd}OXiC`h$9GiXj2;Kx7xew(WT3~s zND$Ce2%l{$H9m!4FMAVe-rTHwVfm%MyiAF8D!p}4rN}B)o4GSniYinzVERvw3gG;V z(v$R%+BbEaUua)oZT7^yb#32TQLU4iKhd#&H>2rjuuK=yzCd zB?N@Mcon`@dmQ&~#dMlH$*0OA*H~i;Sv&VlXClT`3 zOd6aXOgGI%MAWCKMkvqO0a_SF7S%)HX^rG1xLs_~p0>Q=ni){&i2Y)!n*p?S6Ydru zrh7Ggqtn67UCxTiYxn-uQ7#w_{FI4LL!IO#7YZHo79IXH6My(q>a#~H9c76ET-X6? ztl;i6SwWtGfkEL-opLO?YYk|Q7P}9n@GOPJ*dfVgn9NDV8;?0i#qIswEZry4oe6?H zJLgy`H(5x=ZLYh!>E{(1f zm>b&6cz7w>9PKRI=*Djzduydi(J8$@6{>2YAsDEBU&$mFwLxdi48Bk&v<$>evT-0* zV*<=4OY{=z1p7)-Lz~B_&!xc$3DeW1-}hl!15|4to1{{hqoaNatJA`v?}nm_RwtR( zlL<+jt&>`ydv&Zm9#T|vAh>J;GHZ9jkk#Xqsdeit8@>Pxyvx!|RWU`6wBBwX2mQZ6 z7F#N*;(7fRjHEd_mV#0rvoVgP+9A1PqQj}n?h|vde@DA1-jYutT8l1+gf<-5H+QH7 z`z*Uy0APh5v(3V`*bi=?qBYbBXUZ$OU4N!0?4Bw(a2Zu4+br4LO`0fU_Sk;ASp*J~ zIH9H|B_G2JxT=jEZVo2E|EiEgv-?p_Ukg|^w?qL3c*Iv>d(P25Jn}bPZ*B>va%Z3ex`E#Ho|EfC*7jq=Ryy z##5=e%*oJhOwc6*T9Mn=3)Qx+JzjBF0+|cdS7u}EME?*K$?JB>`5*Pt9k1msV1>4z zS?z{(6)W-NHx(ECFwrs>2PpHxGvZaZl)BlMV!fCq&pHxl0H#&PCjKJ{M?(D;^6nM7 zXCWG@VzD)C1?QN%ckb37Ntw!krwu%$xmJ?=f0VTxxeSIrT^(U{ohz$wm%f2SE3roR z&7BtEUh3pW@+eBo5sc15Z~`Wu(klNI;_Ga+*uA}+uty24#B ztjtIwIHp^SG%~CLGi)HaX|U7!H1nX2;h&Iak|zNsAeoSKre|m-H?dAmq;ffyM}Idl zYI@4kZn}R|>;90AVTWg7!gw0gHE%p4d34#Q5QpnmZ*kG7UCUHtaW6k=7rTx;6xZgw zZhmo*)0U=;5op_uxx7YM&morc1N9VkBP^n7Xbgj#AED3v-8l$dSza5Ic83k~I%hOk zIkv7;OSr#$=w`B>lW5fP$Btx!DK4T(wPn;+d{G%n^rYY8dF+s4!&%E?ug7^_*Ohdd zlSq&Sw+z|YB?txic{yTP&~7Yd$IkUCkEU7BCkG;%4V zo+!rxK%o}>E0SL=>^Y+US$dvDu@E~))OMsRULvCZQHkmUM>)Qfy#hYx-uw{__xJ!_ zmEQ5G!S1w@B#!VK4Lf})zq0SjZnmz~AAh1!H7gTm(g?|L&x2_)cq1$M9}3d}M;A;$FsQP}tQmF7CCru%ad(QG*47^{oH68YkU`z$vrpP@Q^avm52eeC z-rq1;9IE!WL%y!J^?Ht_ohK9X$vf72!t2VGh)6bz=hhK`#w6{a@NBnW>Du%X-kpO$ zpvisL7whJ+zd*>#Sc8%8vx~7GaA;xCRmlFuI2ljYhHX7I=#ROKw4}SQyh!Oeo>|;0 zT0D5+;b&lg#C@00b!F`5A4J}aZ0`FXm?a?jDP!ll2f^1*!*idR!MkpTvIXLqPz|Q{ z5s1h6{WSBjyo5E}T_FcPI(76&l_>$CohB7nQ{s(YB4>1W=^ko+JT7wmA0X~AL>+uR zGK!QP5OWCb=2kV_=z*1N5tNKZFE~eysO(3uBDW`D{0ID@;AMT^$>_E)Z+Y3VQU~oH zvsGSBwhPY>IlDiIVFfJ~{GLrYA9Ku;x`mmiHR$p>M4}Cl*LGga9Hml^i=--i22##P zF>MT~`d+f?m`tmI!;)M4fFVGKdP&=7%kj36kL)9-EpKII81-4a#qT)t`VSa`D}Xm= z6B+M)z#{qFP{lhxDH*BLl>N-*DR95>kRHr3lb=G)*)w2=rKWz?X3Lf|Acfb$^0b##PS~} z0;cy*P8xVxe=k%@b>$@mVm_k^|6&fg(W5hB$^-EZklwHl)-qxHS6wMR=m>lxd*+FJ z#eq$OHlNuqlBTmsN5T3F`B8h6&a_3bSzq2N^^q#GyStXm7HLx z9;^$lO${jppdSs9!dNeW!E4zv%DYZH$rU~haWKkv_cBJ- zX{@C|Q?CIX2RMUZ?>t^Q8U9@O9!AF&Rn+?nRLPjy=M8yR6i=P zTFFenpGnR$P{*&)63k#6;RW~&Q_;QMx(n`>gB5KH?#(Go=!>;92~TEGX|RZ%SMt0E zMxA0}z{}%vNI$15`WCux=FyfnAV*t=5rpRf?XMn@9*|F_Xy`vUeXD}-@2gtJbmI(t z#S5U^=3qti&sx9Yxt*9%x7d3d%RIo|DPYKE)5zix`$}iGKE5mB{13&(4P3Fzs&VOj zq-tTKMNpunhXoNkuv(;3@Yk(Pn|SMWPQo=6l(&NZiHX2TfiHu6C5e%}p!y5(xYai6 zv+RL7iwh}0gzrBw+~w9KZ|$M*Mpz&y_&V}GPMmO&v{7Y!DI5AI&vfIn-I=CqVA)Ty zGsfDNAU9|Tq67nC*(=-t{zRTe=%>ywrEPi*5^j)OoYDfXxw8|ES%b9$a_+-)Y-U+86S`1{8zrkBIjace2QIj`VzZ*A>u&azoy*>h5ajqSxp-1>Y^2SYuk ziLesw!vC|a2RKxuIcS;rgu~qFWUdZDg_&Xvfbq^`2@YE-S%(nZ6IP#)vTp&lT2vHAck(90k$&Xd1py>i%ooS3W6Q^KY*cs02XjoW`|+6 z3jfUoyor%``CJ@EN$mgJpsyjFz&8*ByDDga_fZG)qh*g_hp@oqT_LjN-76Z~M$X&X zu#{2ocmCJHpngOe*{ro0c%z?bRvKgIS>?+NM z+TkT1vj+YFBERY_!0j#|Mvt?mX!`@+UEb{3*71g)3SQvL4}s?)p=4iB^GT2O5Pd`; z@J!>ZXXR%$lR&EGJ_JT-8(XnH5i4yMrm+Jne)5TDO3E{GWr@PeGq2vuYOtF1hS+?r zd>y&s9MmNt>4g5rVT|e>IwC)6nYERS8ULD~<#iFznTY}`aVCZ%ziJsWhWGSvQi-o# z^O!_*<3<8DO>>D0FsMuROj=Cro=mXqYq$Y)OASAnDV97cF%hJ{^|O70no@D)D&_q- z~MsU0`p_*1#A4z=jg@enKkb zHau4s_orDo=J__jlk82N)dxD3N#9N=Pj2{76ywVihz{1XHo#(kSvk*%!opaE+~&Zw ziv8Ua0QSa)inY?#-klHs44u839@)gdrJ%6pxZe6EJanrV8S+qdYD64JXx?BrsGBps z(IgSl(tAO&sa@!)r@7tFzkgLJfhClbyrvD7Qk%T_>D{+wlxd-l$sZ0&NvV5e-nhFO zGgFDBr_&4|Q5D}6MXBE6+CljD6qNVJ%!Y zYy%XeoejgjNS(v~E$O=-fc*;RRDuijd{k}r(==hdknlfR7&9PfWKAw|*ZOZD`u!(a zz~cWiMm^=Xffnfspl;g%eVH4#STAPiS^N)z?syIH?43T=^i1oYi~*5PAKqhzB(?b- zy`eOh!@3Es3n0L#T2Yk9YYx03DA<6$9k;rQjXZwU9n!bxHYD}>ktQ#z+u~8da2SxY z>czx++G*sB1{9$LFV7TJjrzI^>~G{EVC$Oux!szGE96N>^bYkx<3x6~qNWNJi0Wn* z1BV*~ZbhsMRPjI74Ic0@6Mh9bxgh<);Lx}RY2|$k;yL#C!($;As1?%s+3~~R>(SRe zWb>fJ1qgBsoK;riVS>O~uT&|~XTGyifPtsoxVkFoHVLHHM%(HnM}+b~NWgC6qy}@R z$+m0-k0b2sbdKo@3zgi4i!FrPUPu}6QvA5jfKmkns>%;T7vPG|sVAvjGg{B5^lGH! zf(??Md%y@ggk9g2%M) z)fGR|@|1b)yVTZ(GTLs1eS3ildCeA+Mh)-AAgoc`nYQ<#LoJHd&zW1z$<;%{n)-(N4^zfnLn$u zWKcZdVH@jCC-!`USGXE;e6XDR<^4TM?Ja``jCwkrI_OhJ6}15;D8{8t?Js)E+AZzLo1I9var#H-K!; z>kJZ2h5#4_a|YviyusD8#eg%pGCE-BxjVdCT9i4&o48736Ghd6!MqaXx=7YbuvK;y zf@vqH{EDo&1X7}OZpC)ulab=t7ZUESAguO0SnL6aJ{+zRiZ~79^0AueWa)bBHbU-f zR6{WX#1 z-XGNOz(C}7BmxQB+p2%xBHC^#S#l?!&#cj{ln%Z<`uApR*p*mTkFY?P3BFGL7j!NF z&=PAer*MPPsYnzSENvyvm-JHsWmUu5R8db>uxqhKO!%ddUUyq6LK64s<8e1Cz;>zk&_3pI3 zofY#vxU-Wk(K_wj;$7!)l@7k&(CVqsoE;9v1gio`0xWuh1e_ zV(F-VN+wOxEeDs{+8%bOc{$)n56{YHo>ot&nbxYLdQH!LTs;80rJxotofMO#X1NE< zq#_ToH@t0BdU9n&{xS0HE?NPo z4&b%DN)hFFY?2RPUPB~J2vv`?eWdSnufw(WLqD;J61#iw`+KGEmj6^{GT{%<2PZ*6 ziv-RSlh$*z+wp@|f+EOt?Q5=>wV16MJX6QKac)M2ggQ0(_)5UT8f>@qip-D1b%))v zR)ZyZrE%rec>^kn(mhjF%(J6}faJKdvX*pq){JLu|D#Q?$K~`6@xmmt;@EH62;eMK z797tFXxTJIndn}EVc&rh{#)Lk}1?Zhso4#$G@_{!NWuU5f zs>~pw7jAhFdXeR z{B<(gZY*|myuN8{%*=T}Vnma=ys$_7!G7nVx(viWyVBgvk7VRxn^T>5PZY$0EBeF1 za|@?nj2XG;o5bAY!kg3wIk`36hpfeYm5ey$_1zcmGc?X)x+|vqQT${qOV=3DC`;j^ z7Ss%n6Wm8&oVFM@rNLWR;jerx*|!8$o}_7q^TSZpjtv$r?umXAr3vCiT`!f0=2Rr* z0sAXu-Ykg&0Xhq~M#%m*LB+2&e;D=BLr0IElrN0;F4&z;cp8%k^duY@Cg?%HhWqVd z@nClLRA|q>%huFamk$LTSS?O^ReI=@x}|2v%n`H_VvUoyxu+vJcAxr1;tHclc-kx2 z6Unr}#y^ePhK9R7C1qw(X>K?pbKAv-Cp&o$^FlqbCKfu_7Y#C9+RM$KOpJSiG7NZr z#$I^qzZ(#uhsUj=pWcxDvI*sY-tHuyAM);LxA#}(9bHsQ8GrtrS>sgFomI%qeOM-hE}Oj`9cTgkrLM+=Q=S(oT$Cjc zmCkRo$EC}`R@}X!F>F{mt9C*m&`s7H5?~l9C_G=W*lP^J?Yn*0PE$U z$ys+~M#^a?__2BHompa4-zdd5Xww<9ejQZLy0cOuBgc$5ri2{Q@r|8JaL#aYf7VaQyk zslaKllmlW)_!#1ph8ho=pe(8?zskK=hl+eUX{NnS6I)VUO)y`U3Y&^?Li?iyRfpWCvN|R|?r!Vi5rWIhwzm#1;EH~~jLMbMg+^Bz* z#!WXjIwK_J45D3o9Ha7fX6Pr0*299^m}Bu%soyG&ZaRFs+I#iZ4mfu=$G7q>st5JO z*5$>~%89r7{HBR6pP^XY5SSa}QsljKtM>8!^9srx3rLACzMpE;5Bm-o|J*%!ywXz~ zu1oX7`0X~h_+rvDcxfT!hY`c`cH|4NS6l+SCMBOGr0k*;Xd0s+-SsA$n8=4kzM8IA z_9)0yoPO)St3rjglaO_lNGrh!W_d*v)bt?F#@2>&rd0E&wQ=CA_j@~AyK+ho-+OFR z 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

RE(nc*BtbhR+;mHq}fC33oD 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

J{<8flfA{=BD3S{{ZiL zkXw*2NYIrcd>vkPN_VSvzRdpp>gh0OgW47|n2tBr?fal1!ObPp$s|BUb{|=aUNngP4r}08cu&xN6mc zhR7#IBg^wN&~ER!3oc02(n;$dUNplk+AszZ0L=dM<@K^wPWj*JKdoHcspi3G_hcM? zUzRG~)Z9XsBb@&LU(&wmk)lSgoi6F7lB^9;(?69zaN~i6*Tjv6{N%_N{-w3W@*b;t^|h&3K`15 zBg0D56XHDT&dE0E0Zu8xI?wMrb@lC6oL<_~yQ^Bxz(jk@in`+W7d^zCAmus~W6Y3! z`}}E0Q|4hyP!M2}pNvc&9M=xvYf%f(N1Vq^)%)_MEt1+|IdmW2>!oc1i04ka8ySju zYl-WWkWSdxZS^#Zr8byR&YANx#nN3*jCjz^ZM{4c0nVJ&;B5o)kFIsaxOK~JDNUhDK|6p?<@)=pfLK1lJ4X^wIw(goJNVV*`p~T*MKF0! z&bVdsj}0zor(dr+TMaqwCp4DQl<7_=gXc&XAH?7!KS9~RQrCLs;PuJJVgFQ`l80%kW9X?`(s(Jki`x{3(N5a0&l#F7o zo$R`g8e@nQ`!VD7f%2#Bh2t6~7Lf^(GxMu17^3#Ittsd24EwWOO~qTuIjdw-tqG3GSrNv;gZ|D}gn}xUbmUc`Yf;dJ3`%k_y6O8BiGMS6l(_N1J<7 zo!v1UkN!SY=+C780OVY3IO+neA1Yzt5=s`SBy><9D0l*qy?Rl^xN_}H#j@IUw_EP1 z00Lz@C>*6iGM=^QzokxaE-qau)n#%EFSIu(l0h5kQVbNFXS#cYiuA*Xw|K&CEffnb zgOHFFwD*8M)L{7YHR$7+b49s?@#1 zfKHVS!t<1ncYz&qO*o<<$O`HuGzmKk2BDG^B#1 z;#4&9CFZDgX1H2x9a^n#nrsJ^_jeEi(BTk} zqp=DxzTWa{i(4KP6cXQPokb}pVh^%mIQ{%7qU(zVX({KYVfE)UI&<}rB9h`sASf8z zboF?8)&``nq>f(6+#Gp*O*WuD?*M^}?mtf|9;uVPC}Vo;E}L_@+QXsZq`WNLbfj;xPmFKi>$=HK?P>)hPCu7cuRo8@tw~afLDChFpXF3%JMsnx zGs`rsDAJ{_6b|zmlzRMePM21$$&snWK}u&QGu=4aHq6q3hO{XAxu>p@fMkF?X?M;&hUF>$0Nfx)!kT3>DkV$ad}n;pQ!6qv*A#~5 zk)*aGGg@gvDtC-#iKMop@6LZ=pUcjY+EeG$@ABK~W~ZfinwpsLt^Imc*Yc#Yl!GI4 zD)FHk4qhI$IFt!d3G+3@IFjK_vm+kY^K~0@no1Vxj}WJ^A@ifFUqEgjCHvdfO@kC#mEvTB25E zN2b+va9hH0R=28J^qhnB%RZoI)#dyKy#;IS8o?MynD&Im-=bsN$3W4fXUq(#;leP~p?Le(O?zkYwU zeYrPH_Ae?2CGJE|%iTUTWo=~IlCtEltVDe4j6M+3655KJj_KPyB5TpUF?VBn7SfcE zd#g;!RD*>AHrt-!E7BFP^QgFyD@fEiZT(`s8MENLM~18;N88vcD+KqJ(Dqb;wg}Q= zZg`6Hg@t{o*3u7kPzSj5>mNGcU* zQaSIMK;Zm;g(Bk347BfLl-w|Ykfbk23RENwNK&#F;{@u(F==UO##>GLLaos7?FUx% zK|MqakU0wDoF|3ZTARKdqp@+lZ8+Xgpk@d%uObN~W@z7BT5$y3GNmQPoeLT!LXxQj zMnquZulVw~{{RdtcqCk*v92-NLStNJ3EcRP8uWkBFZ1=?X?X};xDIGnKJ;QUzdlvP zcqQ)-vs*45X+*?Nb~$ItXWd?odJ@+fuzK`767w$T?BJ4dI;T*9GB)?u8nzrV%-byL zP*T4k$Cf`>rc0h)IrRhHY&+~HWTw3DahJb>Sw+|#3GvR}`xKmfn8-CoA*~F?xc?4nU`Qu2ccir16QwBuJL!(-@*4_lT5&ERbcdTR3wF?k(C7MV?<-S@ zPdz0;IX~_lLJ%855H>2uLginvGj+@sK;x|g+>1I1#%;j=au#QBM3097~_2x~n`%SAi2~XjL_0*FD z8QO^n+{f@JY3~nxNd5vO5!4a!q$BSFlzBktN-%#ZgV*>DYrD>%e+>WtLI1wfj-kk9 zVGC0(gyu4$6Vx9Q9JZX&K({Im5VZoxE~6?6Lu&6x0G(Ip3YSh*1-n z+Ce=*Jm^~{G=c32N9qq#_;KgXi<%Dl7N5+1{{Ya_YWqdSx?NU;ytD-=Wl2Cx!B9}{ zr}01;*Z4rly-NwYKV#FStq5Q()V-GTwyf3o0u+<6{t#8lewCH?Y4V^9KNQPaHT*_%B9;l>Ve$jpV#G9 z%odZM;1kc*ql(rl?e571Mh_%|%=G2+tqOZm-Q7gOPRR$u_oSn{5Ixu*3PXP{bkZ3l ziNyqfWAn{pYRRRLNp4_|Yr1ec>Wv@$l^4U#D&2`LOb0+6)PM??21XPE!V7TuOg z%G99-Nym^Rr9Lr5K{)#O(nwGW1Q2Qa(7G^OSQfO(Ipud*S;$yA^BPT!RwN@(dI#KsH=^T;^d z9QYbbN@e9Zw`B^>@{uPPF%dEO#Wu7lM@h%)_3o`{INrM?D9Oz&ptQ!+>Qu@JBzR}* zulJ^3CK61Zz8_pW)@zLR%&SS&r|{+n$7B~^`zVkXC7Gn>rhzCN0kr9jsgwQ+ZDHUXVv z47*zQZ)@lNz{@t(;UVtiQK&7=2op)*r?`BaE>o{Y!zj3txTv8 zl&X8CH%yFAJm$R?x8V0&VK%%`J=e81gQz1*rgUmoAWS59ku~Wj3bo*kI4yuqphq(T zHZwjM6~Mh9yWo6OU9zc4i9?N_VMsV3L!l5n3@ep!uS%>g?7KuY_m3u2+MwxCPkW$& z%X;8mmfrAN?N;;lOOLyGufnuyB#iqrxKeVSy?rRUM-wQ0l5{vWCn-55dgrBZ{{TXG zqbytTc3m1?LS0Ep#;EZCU`h5#$CY|W?w1)=$9=>A9P!d*^v~&5TqlHaE*Eda>{w+9 z>{~L}1wml|tqL(9gUv^t1XrYwwPkXL8YolfjY0=|VgUq4he)PxtZq0$c%`Zk+T3a` z8$bg^!gU1*+yy{TMt4nSW zwGF$b0n#~jiQMfmXTlcG+3uUWJ+>C$2}feID0iDqm{3UyP!ggizou$>{{H}=p~WoM za*Jlx94a~sgS>>SY9R!TQza!cwyx~SsETUon~u~ny?u)NHIeM=<^ev`91<}*6PiMb zk_kycJEV|GeDsn%WPNr0D^hG(QrSjzWxVLg_J9UAG$@b(QnaM(Fc0bW7LYf`i+4#^#ePx^_8 zgQ(}HBZ#JTX#rcte}L89r`iict5~Cv_CTX@>wr>ecfJ&F8 zDKcP~(*YuX2*;l0>hH9?X>BC9kQ9{i3NyT%Za=MX`*k#hEnp>1D^`@`Bpy@!>xjD2 z?$}}1KIF+-X9VpBZ_ndgKEmBsueyP)wCM@{U0ma@y04wKU)-u?JmFB2=0CMtH*IFg zeo4kkiJj-2U0=6y^etK#0tE9v1Gk9%YR85l*NdQ%#tJ~fPSY3?DfaB}(zJq{d@&nW z+HI{HhM<_`pX*NDF5$-%_L$fe!`HUs)C^S7Sf_4)#WuZWxQj(r zt10%83K*S?oKq+cG?h*W2gk36-4mg()&{bEF^TQPQsN;0ZN#cD~i!Dln%JY859+RHdy8 zfMBW%WJnM&NfpDJPuecrN&-Zo2}*woQ_FKb)HfwYRC0Pyt|4yn*>EzYf`62cWdTal z8=YrMe2CNzKrz8k^K87AQy+d*gy$NNg1i+gPkKyhBRB(U-<3h>KvDfFCbp>+^%d@^ zic-=&tb6Hq)`&2-P$Q8$Q%*ME1+ov3ucKOk=UUP;Kb<8@Dv^=(&aO+HzLiW63Sb!D zKVR06gQFwe&XR~7DZ`+^0#8vS9}b3$INN{|s!!sW6YQQ?*ki(>Og53RQSTk`%k!&L zx)x{Io&5cGNlL&$K0N8GM5KjD^5y%Foi9=qAYm2#aVF6D^(RXp85LdD~Q>xV^e<*tW}Mb$8J=lDKWf{>qSXzB6(ty zehR{4f6jpfOwa?D@fqb_fvEogm^O&rNgMfc{-e&lB)w|d)uvQC#R)Ma=S*Xk-aGi$ z6thFCQ_1{NtR@r)BIjSXodMZ*CxGN6XEh-KtRLlhrf1lR- zR~O6nh52WdYl;koFe%hoPW{ZbLyFqzS)Co7NUP#x%*Bb9nj!G(w2 zpb(z)eHr~LhWZ!8Z*0-Tn?}2RL`hmi6h@%~I5^t4%PO&KGbJmGjPG8D`f1r%uYz$O z!~X!%JV5TwOKQQCD4Z))q~l{=klVj`#DgsjN_k))awTRFkYh6y!K{5F^lUoAsdYB) zY70W3whn!tY6zSi!bEMg&7TnCJX`G6$S%C;UX!#h?k(BN%i6xlGD z+^Bbm-=EH`?YMvWyEZon(wmobg^1LZs|hA&5^^!-D~a2;!7ZH%j?fdQ8ek4_*TSv} zu3zm{-dl^2;EsczjDim;VYTQ%(<%TBT;eb{lk+qc$yh!$k?Sbw{{Zh#T+?bwWg`JR zv-KWZQ=?N4B^#-=f!0bC6Y(ak_$$Gt)?P{+?kF-6A)e^ggu0WH$x8tw!iFYI{{U(B z2Xw1R2?0v~0AVnpt5S5x=ROc-xH=Hp9ZFP!bpW89LrQeY5_NbP!8@L^O!A;-*03Ox zkp@%Dfz#{XNdZU@k`)p=q+_83;QYL+SOyio#)pTj^`W2OP@VZ_)IE9tRKSzZ_)Q#& zQerXrz?x<;0NT2(F4bi_$fsqFhCc8qh+8rtY$Vnpr9H|2NV5WPMAp#U7MpcpmQ-xD)rL=?~ zKuG#0sXWP&d79#vVWyVYlH$;=`3{$pG3sfiD(5*!set!P|bt24OJldRLNJBz9#x7F5fPobRi_S8PkY%sxB23mWeo@e&(G_})(2VwJ!Hq7Eo1_D zRsR4I3n!9y+ zRHSO|-XWMsjZCzqYu6`dTtcv|AT(P@9mP|Q9?j6G(w-!zbfy71!5VdUfmD?@5hw`z93QG&a>nzRBydIcGFZb*2iP1Q?wrapy;hz4n5LNN!+bBzz{2 z`z}v9OfVsqi;R_tj`a!n{Wr&55GNl+06oqhW|Z6^ee4~{{h#NQVP zR<(P5e@e8v4%?w_dr>Es$XEH5uvVGhoYlwQH!Yc+qMK#X=E3#@*hZD!;N8gf#gmnI=G!$lyuSwAUB6 zNhN5AIR<}9P=bGe)5(!ND~rfWX>5d@=b6v^vGVe(F!yBWAS@jtB$y{?I=XcPQ`YS@ z3VKi=;$W*8+xu;`F4YTVcMYg$AB2JwJU5NG^zp?YnS`v!{5oUD+RA>q(=I9@Up`*= zq!42`qL6SvG^=#vplR~J_x}KDhZ{IhkDtq}GsN6!NfJTv)uso_YI5$v^?ID`62HVm z6sXTA&yOnMt}wuc99BnnF(i$neAf`VeanNDYt(a@n&7-nFL^HSM^q$}_eGX{TJ z^mB=DyACvgeA*nhSyC0+0IdOJfW0thPX6Owm)lx2$#TgphMXFZrlJZ|Bp&Z9*AI7y zS>LAW%(#WNxzv(mK`=p_Z}9G%8sj{5%j*=Iwo}@X-dse$-w-68p9=Ip(`9h*{{RfV zMyn^zrumkZaoQs}!0#ZD$bvRkrA(sc?JhL1S#}Cl%RIO7ru_kO+SQICn}*#>tv2>G z6W>Tzl;rqV7`b}V?X@zfTPq4l=l5qGM*=H{dQ-zaAmGVy#igsp+DF=1SczIjl{ks+ z!n$q`^KVytZ5%6(wZtq_sIur;1DXaGxAOvgrxS|e+;@lZZWH#~CjyqH_D(sf-8BUi9qz5({w%?yA z={3PUA6@u%?SfrRvw^n(gy|=rjsd~<*B0!!RhUXdJfY0~%IhDUTfK4itzl+Xsc;fw zG1Fo>8cEfH42ps=%7!u1)TGRvs^O6OG&o&M9Z6Get-R!CK@+@ZU{07(3LHI8p@7}c zg*LSz3oeICjU>ZMad1BHrUIl%jFl=)Ut9}oXI%glMwEqnC2GP!@Z6s&;a4K&(F!^{ zWJ(g1AQPzpwYDaW`FGW<+wtVlltUnzp%d?O;e&PTvXMt?ZD{3Muc$ zoL1hTCZp9NiJ26)5}t9=gSwB0*XK)2pvO-?FV?*%eZ)GX_kwojI(fxfDI(>9(LMhF zXcZHa@!Q?D)xinu6TZXMaO zB+H9NkdUwYf&zIjQdiy)s!W~wM>_i(jth{fGjh|dlm7tT!a)(Xd5qF6$KGNVUPH(@ z-6v5Rc>~@_)CTibwg%nj9BE1oEySrUty9^fvrA>97@o~KM`jL3vnSO#fl@ZD&&sAJ z&c27M>-zryPYPS8PULw~@6ZmE0;8RQJ9x!iU-n{LcTfKSdv8jd{{YMRf39&#zbZ-W z8qj&T;R_~uYQXn=1$I|2s#H|z9Zc`YccPf#MQKlHtv}3v9CSz$pLwfm8)gs!8wdT$ z60e!x#)un6I#R6Ionf&){=A^jwVu;iN+nX0pP3ueUv}AOs2qbMWBTH!8h&-H4m_rH zD8yuKt8)fCg)|7p{{TXkCJf|!{)G%h6{l93;x{X|X(a02;G-P7e3iItH#( zQqr{hL_qVW9(^zpB2RdcK6EbBG@#FnK_L73_|Z8Xv0QM== z3}brj8&5Gbpp}efdD2+`$Un#E+ufHFX#W7cI!W^t_VhKv*jkEZR_IabI&0D}&k$d3 z4wn-ksUr%{G|2w|<&*HM_EwaXsK^7S>rRMS{ugqUf&8R=s_NPMhY*rG&7I(TGq~#> z>aw$OrpQuAZ4%~x8i2;+;0of))V9z_9ns7{2R=P~K2>XOrLY1__KE=~cnQk6M0o1! zS6^qc36zIapp${}BX14yy%!o{>?xf)Pi2S03>(=oTh=Msr+^McG+K4YS z%GZwhKnwi=_k&j4QI{H9UBoF#fUF2UU~NmWyIsbv&0{{^Vkh~$xzaA4M+{pRB}E`W zl`9@by$Is`H5@_fJM_1r=>fF7q@;v66m*$00FLU2>IsaR^vj2*+hrg&XDHeZ+Zgyy zhAV>l3hxlH98I^I!-_y?>Qeie*kTCUb6j~Vvx|LMM|NU4Z@%2OuSGpHS}czS;xgkY zC$V>RG!?Q=a)Ud56%`qS6~t`qu6WC6b-*p&c_6EzRzN2>z$E7wtItAO;O(i)Cswee zP9Ou_#A(8T9`8Nthx$8l$9THzQtDY*Le=-A#5Oe@f&8gnjokV=+rifckc9{YkiA2q zfa%P1z^_1f?UlC~x#8EzZ46(H4LrEgmyk}7NidYFQAwB+1emW*Sw*s4>=F_P$WE9O ziNySjSD~Cq{uOg@9%*LE`5IQZJ;#$FE&w@Z6gqUTN*cPlx=BZU1cHS~f;n@F;oJ)8 zw?}Tu(zQfNNE$~u+PK@zaK^NyA#ZX92@2>&{&i!1tEB2*abf|FVRQJB2_z0%?mVeC z45`I3m8Z2p1hz~l0w!R=ij(g36oNlW8j<2D_8ocVyGIcHr*4%gr6WmcIux8K02QWB zc`is&Nd(eZX$$QT+7P(XRFuS|W(-7)_o2fX`$@SfUuoL*usw~m$9NTT$qF7`r5?|{ zoj;2kc-Hy#s6qX!SlXu^vLsMEzkrUND0;(bNhA!bC&r`r35wgy`nZj++Hj9-?nkn4 zJ+*(PI&H2a3II>}TGOQgVdbP}w0BZMznWCa)}SYCDW0`$!rE#S@$H@8AO?Z|0BR%V zsUySqIK|o!g2++SsMHg_lhg961SR{1pKX%cZMUaVv9I}bj}B(99~QRjcmb#;5GQqP zK6Q0%aL{h;7X;kCP?AhQDkBL1?3wYVcy@#>Pr6)j#E#Ks6U*UEaPr{|{iH31)ui&#cd7P3J1R}#Jume8zB5)5?_pRWpL$;*dInIs_YvLq$aTAs`Rp)k}3LnK`GgP=I8PeJSoR+MFp)rGd>LsXrV8?k2c<=(zTC zUKPgp7u&TIj4M9+wDeo-*8#@?NKSj%&xSEpjxfV|M^AYk0A%~A+tsWTpmu3Gq6sTf zKK-S)~O8r+p@7K_*um_vN|Xl+ZElO7w{_;nRF?L9&%WQnbQKb!i{%iPO5b z7^eUUSxQl-DHGij5>#*r1E;c1^NK~XmX)cc9`WrZT7<|L#A6iAlq8Jn?Ss1a3hFZ_ zsQjoioSpZiwg)OABDq(WPo8VtHLHuJ&?0=dU0-`>6`%D6cu%yU~OD*Ja+-Fm|V!O2(B9LOIpC5S@pq&h!qR z`s`AmH4l|8*{RA#o$-V58K*Ti)Haje!jxo)@DYzWt80Z9do@fz&SHU@xw%nPl5l$0 z3B6X5R&n*`&aOD=ZAC4Ou~r;OyVm>A6&rtWDBD>D_KQL_1L3_Wj?cLf;nJRPg&diy zM^&It&TF=cN~8}T;^B)8-mr6r1k)^kns5tl%|}{Tj1eRZ$3H0W^Q*fHi(<66g%~lP z&+DCETOhWs@=Ahs_a7g3>sO8FaQUCi{{RYyUzK0pvBT0FaBt;YH;!6yLgOeo)6)mT zoEmq7t=D!zNcK#Px+w$@V{k^FDa|uvt7ca!)TE$sI!|vuU`-UV3C>WDP{hNRmx)1@=z{?WHLLa&=Eqd5q4}$YXkRI;Il-k`*8oHcs70 z86JHpkF?+^NGUr9PL*@~M03xz@}hDTZy%$SA>xoPscY^~AWdgNC7!=V~L`Fm_G==QZe;rI&m%;mdVPmX|njt%oukN#wA3 z>_!hN^p!UEF1K)#_ikj)2s!foq*bq?92wpbZN%)BR^r)DX_UZuBff$XH3E~#Tc#8w zC=w$V9bH_!^ z(=Va5TD+VS3e>GoMv!_Dyv=cedt<}ZYs44YXc|ydWRN;3StF%-1AoIfrw?<4+$FZ} zEmY!~OPW%vh8LdcFiO&91m<8(dRXnXn@YDp2TF-VbmVz{mFUkKZ-{WmZLdmI#4Je+ z>h_mzQz^;Hv}{aB9czs~_096+6@M=KpUNwQ@TH{^q~wV)15d;26~xzLWb;~%r?QZ= zplWSA%9IEp9vScy-O>ytY8m!i8A84rA3nR(^7;P&Us*vJPr`$n1CKhsy>YjhZrJvV zO2Xb{w93}e?&wV7d)lyMXxw71xPxq4_M_V{ls2@GuF-e_K#o~4%n1@8*9dXvtrWY3 z6{&8xWm`cpr8D>j!33Ztt|u!2$i=emxb-rnIS8&#^U)W5%1Xg`p56DJ$$l>z3NjEKct z=$se>*-CID%WQR~Q-vt*O#c7{+rfsE;UGZy@~dl>ofl|v3UcAu(gSKc;Sxl^13T4| zU5&FyA_`Ce>&mattJPcuTy`z7-Ah|Z0(B`{@3aWmK)NB|C=peCc&G^YYaPuJHvxV}n616LQ$E<$9H zjDKNnoJ;-pfRk+}o&r>}>w&?{F& z{!>bI?MhRQr3j29LY)VukWc0)IH{C2WbUO9rEh~73G$?}`@56VA~1Z1*TR#-z}^Qw zw9^Sd?twX+XZusFmR?HIMq>c-@+O)xfl3oW8%0MW=QMZ4B3xKPcaB|ty3pZ@DFmp3 zN0-a``>Mum$!wI&`&%f-ja^$>+$5>wrbYtr7N7jQ_nK4e+v{OU)Y#cehy$UKr^0&p z)3+A0_bw;?BPl)sQyLfKT@QebkN=%NE^>c~?`6`-O2EONN|K(6T4m z0G^#IgxcJ+&~TunMkjxU^?7#Ws1?Utkz5(~TmdRkBR+B0dR>!FC>0FvgOAd?6d^iN zKYCLNCwchNQa~Ob#LBchgPbUSV!aE#1A#W-Fc4FyejI`zXY0njC%m`43t1(_(lMxN>9V9qBbYv82Cx08{{VJBukfp#aqb>(*bR*Rb>*0^N4O2e zlkPgShT7Q))g+#~eRZxUdb>0N+Cqt$D)v$bQ_JUEGmfU{t*7)(1dTuqMhCPZX*|>q zx}4#*%3iXf0F$Ofcf7}3ie0O1TDjN^l<&DQktcuY;ZHGe<-(ju0V)IyTCvn%LQW@t zW)E1lXG zk`6n>05Sn0X1g19m)SV;sZp84w>trVOmmTm_tVH0?&wh_MxdmEB`0GM`F~1nM2_hP z&Qg98K&YJK&O!R}tyHZl`V_X3RVl#-bdw%LZ9eL5;^mmqsn3Wb@}_vuDeNv<4z^4X z=Aq%JD1U6^Rh8cll&Q9ooaeqtj{}dPTxG`}OGex&O(%5#&z$*P|Yk-1>2J(=vk<>0Qe_ zQq*1BFH>jmnC%c1{Q5}~k+cq#!+i+7Rh_>Yv$z_Ron6Hcp`lPvVI#bf0V8oDVrIDI zt<%o1-N{&5)PyO;ALcM}d4uC${h(ZMjTepF_L~y4>%b!!f(Siv&<=Hbc#9q^!qnSq zZ?-_WZAltb-k=w#c^`#wmhAXtn%8KQl)TbhX=vD`Y1AN|sUX67j-sC?>Hg7DRJD2O zPxAAtOC^?sd=Il8A_gd|H0NYW3X{8Gz*GU~B1jRm8VUy~$UT2r2h_9$b@y_ir7k6F zN_C?MaDmT!oQ{;Fw(gZFAw?>b$OPmNuDgS_$DJW4K+@V0gpb0Mgp8hol%xWbDM<=m zttli*w24#=%yWSPa~14k@ct4`%IIh1TX}MdpR7@Xj8W8sjP>yx`ESyO-@rFMvlNL0 zgFBKxzpT)ysjXz-4E%*HB?$ZDX z0O}HRjPtLv>r5}0OyV{fJmmF}L6HCwG1j0CQTbGPdZK#!>ulGbt5BufHjimuL!B=5 zO2bGeajO9dj--$$!{bg|1r;ULm8i(<+CI-gtY9B3`>7`3&f{ZBKb0Hj5~UoUA1XzX zkGH6Q$Mxsunrht${67A_8UPCXkLO7mW@x2PJ|o#oM33*9NQ8mY)C_Z_Dke|QG*{66 z)oA)!bSXo_SMvRTT3y3>b%y~@C_DV3p1W{8sgf|M+DGY5@e8*Tqe4^HNjd)j?0&qf zL0pyYshO*kuG;Oy1uL^4sH7dbe{6CzZqxu8Bx;2cIj08)WeoW9t`)?Wbck?$ z?=ca`Z?@v5cc|$@@}&@YW9xcKdTm#w#H47>a{!a>rZp=hAAtwwNZfkwxQS@#ZxJ~- znz!RC?EqQS3G$DwUR1k_XbN7QSb;y4Gk0w7aT-U20s7V72Svh)kaW+4k9gbRRvbAN zh{4pZwQ+IT$Ok_7`uI~9$}7^SHLP!%OMzQ|7Q`PB`PZPUH+&7|5KO~r$5p%BX-*W* zkui*)uhN4HZKpw*0QZN?a?jM)5J2J<$Wu9y?Da~9d2i6wp8;?boS`XJttL5j zjGXPgan~*wOeJbcP?7B8ef&JSR|DeDtf7aKJ+D%u8$pst=uapk!kt~Ev6p)^>d$x& z+CQya6kJ*@R^<+2Q>5-e7?Jfp6weQS;^|9LRi#P_R2`E!NgvH0?T&NKiyvn}aDlCA z$V~TA5XeNCqdV!H@0nq}ev|%GazRgp^L;=#q9;MyyCXW5Sbo z&up}IA9fB3LXxcacgY4abM6%Si*I&mh3eTmEg7FX%DXqBQinkQ0CH47{{YG> zQirr6Jmd5p>edyp=gXA{Ji(>3moP{7_!>$bX#LuV_elJyo-KK7KNJpV)wVf*TCwz% z0cldz3K`B)e8G-&c);Rn`$G@1Q;ld-ntL)#?5t@!rU~16;8$0iF{N9V^)wPxq)ewH z+8ugNI=QLs3d#EkQ6cmR zMkJVlUWM>p3&fLsZ+eic^e?n!6Qr%Ns4qy=H9>+z&p7GnU9%i4F4o)>h$cKaPUdmX zHRvy)II-A`=O zVcyNfjX@-LTx}$3&N*y#5B#S|Ulp@Tl%ClnrCLM~0*HWNWQOs%m53iP#ced|*WKGu zC{F!#I1j!c@+QB`ZHXFE{HyUc%GRF_@--u34?Jd@yk%q|F9NUSR3(1&kdyMQSm&N} zk_^@>+TMTyl1FUGJ9dcoLWNwZrRsD+C6xvT_5Z;iDTjY{w$|+WtZLQ;P*%aIv zT9#F*IMOx}W0algmeXZzq>+g#S5v$i-)u=+wl(uP6Gx=e#IXB{>))wdD3 zVJyCu+hP;3QkGMQ0%iy0Na0K*f^|UrI*fcM0FeMd^+)g(Q@1E?WkQ^|a^UGqp%d*8 zMn1XH++~197U3`i>M1=+u>;@k%`3IIUw8=eflS(g;CygtyL^lqO_ye!YlNryi3tP3 zN!;=qoq(qIC^`WBm>k4qa(-jprg?Ht57`aeUHx`rAIiTJEuVT3h$;5K6AY{bmE-QOcBdt z@cgL;MPJ%HsZvs-!>DZ?s1c}O4x}ewYtoxrmt1VKt4^5I zH4*R_>M}R4MjE?iwV~}=FcUHX-!OTeeQNKEHDu>zQK?ZXf{*~-RH8yhzKe}GvfFm)*)sYXZ!B5|f*rCvs_(e_pXQH1GGz}&{({{ZV;Ju7+X zTVyts65`InJ>W^q44J2zODrwd0!ykvP$%0+#*l&z2ptY;(c7(MDORMfa7?F6=1It& zvmI$nzRN0c!~oiyJ@56JO0>q23egy3!_q-zQ!srAzrAmgr zcd%Kt+UzSL#8{7L^^j_Jx;vGWdK_eXgJ4Ztm#&18( zEXCc|a^fLa?yISQ2i77h(ar_HxX%G))>}clWUZ&%)&j*>R7ODr6_`^MD>PMvaglO+EDx;fVm^itsoY4vEhVel5y z$kI|1os2xB>DTyyjGS$!@q4P>Yr9U1g}7d1lEvCU7YvyNUHB(K zDILXXK^RhF6x-@;C{5CauIdBv4Y;F($k{7V<*_{LV;=bD6+Q-|>y=zE{31D`!YK@kR( zdg7L(p>8_slc*K{0IAG^5;Z6Z{AK{>Nka9)oAyL0C|f$fSF{GM>IerXym=JYWuZt# zvo0w?1;nY_hP4z-PLthM2+EX`j_8P_l(sZzeW4O$Da3#`1#LOqo_mSr0f3i+(+PLB zNIl`GcTQut;1LoacZZ4Oi>H|&psfS>M3(wO61_kto|eKh&Y9ya&WnMd>{bsy_^9ho zkP42Xn{^9FDNs^*A2B`=Qz*EoOso%of-aMn|RNCGqa6$JUj`YJ8 zR_ZWDt&FO!ExS?NFlyGtX#OLGB7 z^!a~!^nq6>S)E!ZaqRef{JPTnMWGoceDXRU3gZ^~a+E~wIeF(kb2PN+Q5@$#z(p(B zJ{57tg}a3z00b&K)7O?M7wlfJppyzI$eG-GrkwP9wtT6zol;092+nqm{#^Il?C)^< z6gN3e6mz!bBkRvx_wY9q`?7K~CnS~Hke|Yhj+PLXZ z0V$9aj_QDr48aC*n&I{r2?UfvmH--(AS0P4Ga_;Cn&N9i7QKRSHA)DfU!IkHzOAFn2pqah0~exYOCAT&hgRv^8v^ zI&$!&zT3$vw@T#(6qO@ve7=PyF7jxc~zgJ@}#EiuF1ol zT0&LJI|=g@b$X5`Xp~#H-)fwDdJ?pAolpXYNzHmWbHz9%$t*sEw*DPts3{8^r86EN zh#5Em1bTo&Qqou$|jU#*xXJpRD6PiuKmcTrPF6W1+YEwljRn4wrS}ZuFp(?;yPd-zH1LQ#ltS!FG-i=975CKYK5tSZgN-|GPvl2-X zGAASn-XeX%MEUsoqKG5w>uPZtyTjWXM~5%kn{*HX-)|r9SJ!E`Lyx+sLrEt{f>dx4 zl!8Ziow}&R)!psK5O|OZmSeJJW3fmnDJ3%nM+%G`TLTkT{*Q4tz*^JTg%O7w(n#i1 znA8$R(g_@sL($$K45jOIV5UJT8cynkGNM-;^$6r*AzqJMB==oIxH~OPkfJg{KdFtT zj|{wRO}uTCryCjwN|IYB4e5Zdy-?($AnGzsRUnk0p3x4p1l!YthbP zl$5DGqJkELz);P=FEwKo9`H7}_~g>0#&ersuM_NQgl}RBsSL z^Yif(+8W`kD^rB0QBhKlc}iAKyq-W4O1oIp zAP%rOc+zey?a;8>e`$R_%pEOHi6Dh^ft{&l<@D;g)DyZHP6Bp4;nW?Y&w5KCT2cl# z+i#V2X^4*rG#VV}05${GoxMh|JbyYksi$txiR;onze-*8!;2yk%YMjHii7762?u%p z_1h)GBUQu`C)h|J^5^sSic426#CKbW0yLy&;;i-6O<15oUwKjwg(Vtx0C|5(COUq# ztoYWmgA`1`AJT#q$ZzqawHZ_oGoOWAUZtQAi6_JB^`xoCm8j|ooz#9nQ+=Cxi9Jkw zzNVDv>q=Scnw1fp`ApVWcpt*8xj{U(q$^TE9VzzpCmYj^EV;iwu9a`x-X@Y{e*pmO zJm?Q~ZR!U~gkoyh!f;AR%;Rr;IMZ(eN>d-q26l;_pDuLw4ukhbdHo;Si+TY{ge$}A zdQy}*cy#yDTwjN~HQqf*{b(U)@R_CYJDZk7s(QyiEPPEHvKOUOClEURm2T_pwjx4E zoy`4jwL5a)RO&N6HD`LF+GKwbgzDCfLzezMCu8&HUXZsGorPah zZ5x0`htgosF@%929iu0;(W8`B5Ew87>23+7M~I|sFoc03F;Zy(6&WQhB@&}k;{Eph z59fEzdG6=Buj_>7KfvEvF%Md^A|08h(n*W`__%p25beT}bVghukiy4iwhL!Lp(K zDD2(WsaMJB!`Po9xGe zBmIT_2S?|brrS-)U)QV)<>uzHs_skDjS;CB!xL5tf zYdJ*zoAEULlZ+uzB;(xjEl)XAf9wGRjD}x+QfS``c+lsFSlSh+1`4-RfpsA%XjDcB zF@31SXTxY~@m z?gQ#~Fc>T`KSP__OB4&-u)1k%^7DK&8d#y#uW-ieT+??e9_DA0mtjgPE1P|x_p@Sh zMT`n_>+9Uzv9yOWVvFhavOJ$6-bKB+=e$;#;)b!^HiHI;4w=$1=xA2Tgk%?|6mw-9BGQ#b+BLOa@8N=HO3~ z3bn?%nlb?*18oi|{}j7}KLu5_h*{1)prsS-@nB^SAde_h*HcMZDdd@Dn==>UbkcVDZcQa$GkUVD^x`f&ILa_b!8G7E4+ArkubOS^5?!!({XF}TmEhIU9M$m z>5=?3*vd`EJ-K}q|FQ>F^xhi{Uq*diixM@01rR{LG>iSvoh1(f)aD->vo7V8;Y10O zl=3ROo_-=XY>kiL9_sWpvubF;{k9a zIog9-S=%+_`7Y_tLaXm~;MNv0^giChYI$C$MS?kR(J{cjH-pQo!U_{)OEtg=A>yw} zD3$`}ptn3*m+cI*`l@#@dFmtBzxWXQx9_IK^cJXf8&BLiH$+-bE9@dqrj0u*w#~~t zZ57l8^cu^AkHM9s02)RSdkET@sAFHAvpnq_>wRD`3>3a!yLQSo+2A?txeKCAfHn4i zq#@@CU5fGZndsRTrrqvBdO(Uo1!ODrfjN{#a7G1CHKWLYm(4|*NEq%|A?x;ZXAV9v z`of!C2pqXx*$Q0muy)Aa57U{Q0ati?kIO4LxV6Ruij0d#jLWLD=wKGYdcI|rJxZqx z?ZL9W_idjNp~8~tE;9(w2OyI-kGx^nT9LgQ&UV7%BowgWMho|Ax|;p zUa1t&*Bp$oal1ju9I+Dd86y>D5nscO<=rIkuhcHqOu5>b!Utc_m{&Xn#{7`}XRZSU zc$4xK840fH?M-MAs7T#ZYjgQ|XrV*q&Udw$eG$nUVlXqW1b4Hvi)a_}z!)A`HSt87 z`j@7Ae4#4{@y9^y*J786iy_zPK45&E)=v}Rh)9dZ*@z-glaDfqp{GhFh9NiyMe3w8 zS;6Mt=T%OEUfF*@D!X@wEq*UFN#=QqQwpUo!sDNSeEXizbd)lnw~a;61<~=poiTJ8 zx}r==0Y`H3phtX;oPiq`RYt8(I#8e0-;SgzyhM`OZr<>z@N3!P@f#{?4gFiiFvK~_ zmARfy-`q%{ekfzo*3*w8TAT(*Cj+xsGx>I;L`v7?#%R5@cq;h0F@Q4`db15?)${gA z46FQImWn4r{{dJ47k>&!3hT_B7`72U2Y*c^EJYr6(r?Se#A^0WWjCshugK0p+KVor zR}efRvEOoVS2claea9Q(RUkedHR0fcOEKGyS$;>tV;KBb5-tXgD_>;Di}MITP1asp zb`*Uw68U6Y#fGyjk-jGm3#aKWWvITGWY9!!tjjGV^M7+b9I;W<_u9~ByR*I~3o}n= zm1k&OCNYB5^>Qu9*_6L$6WV6ZMDLchJ1QDK1jFq$~3z&34o;Qvy(R_tZOE$8z-_gDuhh zBG1PokoxsV;J5ts4s)S=7Da=A);OEJhS&jGPH-p^{3Op8J0IU7u zq0TO3jf4?8^V=wbg(b!41APHq`tk=Kk|4J!AvJNA`|qOoWz$5j;Z+g;0P4!k!@egy zXUk$q50zZ}$-1fF?G*YBbSU!E)h3bC&Ot#L9umM&8y<+ zA0{6$bHeuVvNH<2V$d?#e0MkKtFWNuoh_0j%qQ^y%k*vXfkxT1Kb9(QVx647(5AGk z)Jpv>-V~XpfTO@g(L5oCDNW0_F10>Lxwst)DpE6j?k~7y)Zi1-Kj}T}i8k+o@MLz_|Vcc(*+IF+|DG678DT zU9<2wz^6fUGr8X{fkHs+65@OSYC<+(8(W~MgHlo&m953MndT*)bZ$gjXd`4rtWDVV zDt_j^)#=WHal+u4+pGN;ZbScpPm^_y7e+HhR8o!1a!KF%eRA%Q1HbuU_6BO7kyuu# zk7!(2Da;KXXtB}#GGaM*A~y$fI=O*VwqX^}JI@9pxH5%GF_;{=gjpr52%V4C0EjbY zqI2~{0iy(eLZxwru%1v4@-u9lojg(FrQ(*2_TW17srCrbSXdD9a)6$dmQ>5sk@gGm z(rRuIR%u= z+I}YcOYxYFJ|z(rqeD)oq6btGHy&cGR>IGC?R9+9p>HiS1NyUyM};{9j4wtUB^&>m zRA86#ohEzQB^QGvZ;6Q`_fn1{3O)pyNy?}a24CLLi; z&g|>+odABrLQ3l+MK<-#i}Y;7%}J)P$K-~ET3nXj6TM=@%uPPt@c0`B74pHKWR7!N zVtQKPujZ+~VQx#@MgC+g{K8XE4ix=T5)ctNA#_31n>X+T|AbkNWqnpsmo}Q?7Iqp@ zFFo2nEOiqaH*{GBPoeGfA3thew%eWy+j(pCj0#~2Empn|Wg#Dta_tr9S@-BrmoAHicC{5V6d|nP})|SvQd1b|g1m~6IFrx-R z5Q78*2a^x1x`CgTwtXCU{{t{DbF%p~R86sCcYb#(Uh7=-(2qd`k_-Tc4aaxUCwN3t;SL8sB7WTaiL{|{|A;by3svqe8Hx?<1849kF&j2oZnhO7%VoEUWnLVOf{nQtMlXNk{_JD=UJXZ{Tl0;H;B$H}Tg zJQF{#c}=;`gc%8$y}sDEK-q3kLsbCE0ca&|eYn)T6l)3zAdCTh05^}{VFVk&P&6)HA+l791` z+JSrX)AWgvSEZF)Ofo7R;nu}}R^Tx+Ux*Q&VCvmjKzKPtty-?Zc6$#`Kg3NKF#*Av77IVH~uct zUUTlH`X$A(qlDQ@xOdartt@kye@tO}woIZSIv%LWMO=0%Q2&e0$f>IPV~ig8k((B& zR5PN1+k$RJ%25W7j=RS#Y3jO+ko>FpD!o6ggDTDBSG24DS_dDWPlSDd)0#mlk7?qo6y61zR$w5w7gBv(Dt@`J>eIfVxzyjP!vtlLA^)cPmM+nJ2d8ca8(TSKI{Cbh@Kk*-cvbp)ma8p<}W5pQf>lY&u6~Hf* zyJ6ZOd{Sn)lhC1Rb#mG{X<{{UW_f-+F@UoVu^-Q#XRcdQw+9b&*97Y<&eyeZuEAb+ zhYY|2=fcIeLCl!^wD8J0qpFJhvH4i1!2#75Gj({rnOsO?1s%vID4q>$QS897BJb9f z=bDAHNippZ`!xul<)In3B!2H}9C{c`FSN@pZ(=Iso*lEqHAVk9AU*-x&QK++)ZYa)T~rz4W}FZJGKfu(AX%a5{{RDD{L+JXn(^Ze zq)2BK2J9ox?nh@fEA%9P{Rf^kIE58GSBB6QF~(=lQ)Kf0F+l~71rh}a8xVMBn@RDQ zwZzG52~aP3<8U=(Og&xV)GowWA`eUpGTV}VuPUW?Xno7$&uk*4)N+=2Ec*45`dRkX z*66FPN_Yj|cn8U*TLolwhN>Wk^I)RQZtx+~R0l$mK1cWmFVtEq{8Ed~&?S;z+3-a* zFKaX5RjF~Qz5xkIiJ*IVz(zng|$w*0niN^~$Qes7W5 z58f3T5y7ar5^zStL;*1ql4_nJ)DHs!%MHFB{A=isT$7-pZDwpMjgC##aTeNJ(-RDr z)#)6kHhMK_j2*Pf$sGXYtO?crxd)Z2Ryi?+x;1L@jzvxi35zIaHg6cUtHr{&dz(?! z&)4S8`Z$bLDopGyMPCPnRb*kbnK^dW*4ST?if0G|1YBR#3Y9KLWFNV;e5;Cpenl!# z`rkRQ2v0t!z^^5;An)7Xek2=@MP=wEL+K57n55%69?$*?3j3F-K1ao*z5xsue{I*A zM^(+poYcR{GHjBVXJ}n|jZ#=-vZh}CaqIdUhV+pnBUIcj9yFz+y62o({I27Et`8{JA_8s8GAl6*@W zkTX;k%#S3wK8u#T8OrJD#BbW-ad<>4Dt@EYVG^*9I6;*FT>PX{AXyCwrCUe@J?y2AcJfA?e3hEpqFnJ_W^<|pcwm`_T}q4B zH=QC58sUX!Ubd_tyTP|n9ZrF_lA(S5`c1_oH!H2WUHiruDW_g%Bxy?Avg&yMlVs}A zAw$P5ubF<(vY-^E{7a~!OfyC9^0qG}`6k*f<=r-ttB#dJJnS>#z%-)CuHS|I09I-O z6GU1csIh&F{BAW9aK9;cc!-X%4&q-1`^hRFLk5u!+p=bA)^jIA}HzQ*6Q0uc{GVffC_34FzNAOda(;F+Pd;P)M^E31KJUSONjcJZ? zh83K@@IG6^6xoseD*N2N+=gw`-wzN0)kaZthGp7E?$%JmfUy4WCfLPP(!=5BYOfyC zs{}!lpkjA_aUMb6HaH~MQeLIL9F|0$qPtcVwbrxW2i1;Z#I*#({_5kXG&)3-kNuC8 zO5;J=+jM7w0Al$hn@}be`8CAm@fAvRQ`|Pg&e5D1zy+Wd z`ZqCuffL1m0A#JP7za9X*O2h1xI!Z54POCaO;TcIGi`nN9~}4a_iZ=RKXf#zRZVdS zIxZ%=$y$8%tA6A`BSWVK!-n^~gKm1OQxWNOX}CVj6%O)f{>TNad9NMj@@D_6Bq)K( z(NVb!)l%s0#X+k4>FQn_Wy?SBg58QFlzuS`1M~TYJpr?8rvEWZvmG;Pe14q*FeR}G zHLc-p0=#5g0dg3S9(>T+QgraFV9o5|^eLgzy#R0-X*n|SBU}O3%4dY~86N%z;F0~%8{iUqNS+k4Cl1`le@mLZFlQR><1s1|JxYbbE-qK)(48kQGw7#UA!Ofhn?^ z^g*kQ>d^n8=I3LVc*pTVd{(N9eMoBT*w9m!|+Y=mkJILMb89D6Tre|Rn5P9h%Rk`*{vvtMxnG~p4;Fu%o))!MulD(7 z=GErT^p+DOHhDx)4}WdhQxLLl{ATcL(mE+dVD}F~`11FWh z(8shS|Ci&)wskZaI$oIkg|sSWXt{eUMEjk-@#t~t`z16O*pLxKuOC(+K^w zrt4T1ZRHE@Jm^P9>ksBDZKUV;@=CQ?V(9cID$T^CXojPhcI_0?KLueb!>TPX_c$4+|g?azR7~4WaK=x6%1ubA1xQxBn>28?gyTn8qrL$ zpt(0!wPIyQmR78$ZmJ68lxaStNhCUCs5fQLL9OEBFsxb7!YpOl?>-Lq52FQEvE=AV zS>{kD7bf4kl}Z;@Q}mE*T55Td2G^UEam}g1Tb_T~QecFLI>xYxdWmVOiZ;2RKfl_WwW8g&h^-fo9(VP!7mnnPs_}DnE^qIx$<5301T-bmLZxON%5(Ay6t`q;$%m$Y>CAF}jFP@bd&#;RH8qYS47j#rZ-NROlk zcO%?rGF4yn;_-@_YbN}KnaHFaWbg4>KIyOVW;->Osr`A!5MkqX6;F{oqj+B1f4qjT zwBUhM>KnY1Z74SdrL$jp#?8+<`UEN=|7A=}6c}~pS)c+_fmt(MkM%8p@%d&+i*nzu z@)*Pr&4f)#jB*YjkF*e0T5z^N zZ`ua*2l}|!&D-{yuR)yqp+u8kjtZwfL7Nhv-hXpVNV*YpQHh)lN>u3b{d|nG+evt* zfP6$}eUS51%1<9mh^zeMs|hj^6IOdsct>>uaC|nOd1rRH}l2Nz5 z2x>MD)aqB_X#5N~`mv#yrciQd0GY2&s{&o@kSYRM*r9$_vTxc?Klh4T&iS}q$mKlM z-)QfbPWjD!ua7rH-zkX7yh zlEAJA@ zm1`Ii%@JLpqs%Jb2WA(1UP<%y7Oal18lRPWIuW1umN?OBWigpY{SIJ^jSp&xvm*=g zT&j7s7v`TTQ;y9nlBw&PPgXr$Xv$u@&_NxH_7D4-d1&oTRyAVd*G>DYl9bt*!BUN1NIkmSY{muAhr< zl~N=q?=;sGLrLmE;Wp#I=Jcx;=j$2rS*Mael01x}esuqz%M~xj&_N#}9vTgNn1QfH z-u*x1oPr9v=LdH+R(@WvcDP?tw5J}hw#gOxX~_mor}2I7G&I+LTV(41t+16v4(#pL z7g<^&N$Do4+p{u%L_NmclwI)E(yJ7Ean{9f>dba=SbAU)xwoYnzp@bJ;k}CMp5_Fc zXr6?u4~%H!)t;l>r_dpX6?G}R@xLjKm1c1BlJ`t-jEocgCYRYOD(7QW8#dyGIxK_+ zQ%xLsgH@&(p`nDXIH1(ROcO^@GBuRMy_^vyvVK?HBAcK0U9FjF#j9kmvy{fx8`6yw zf)U}T*z1z1GcK!a0xs7wDRZQxJBe2&kPm|5X!1QiP5}+(Pp~c1oXF$94z4Y&{G8OC z(XqAJtCruQ;#}XqduH;mQ7y!SAirsd9Nts zt$p|{vh90dZcuU|a}6oeHj+?*h9XU9+obPGDpQv zmE8t;oHhL!{&JcYNimFh5Pf5}gLHsi;JKL`*W_{4gm>(hcstr{sH&|yLb4Z_VV@QzxCu_rS5~aTmHU6e z944CWTVuE^aj9*t{;{|&e*M!gB8vsfa}S6>5Qs7oxH6~x`r=yJPGj_xE1)tLZvgjS zh60}t^GQZ{610NH=D##5=q;(ReB0nIuS-u2m1~}Os$%c*qC|sD?P(lz0<3);b78)X znY2nuHhiky$-Y>AQXSL~P@hN11NBAF3n3rQlmu^CpQz;|A>zoy-rN2C?W~~~sOmhk*5)jol{3+R+GD-VsiFPg{ zZ>o#QU%f49m!ypKm#ELs&T>k)dGwdcX0NE<7CQ*NXfzs^M-D%zCrZcaqUBiFCL74Mm;Rz`?JZQ6{A-{`yzM$H|}Q zVNXL23My)!vOzQTL8;KB%n9i@bGj0g!mf9?SZw!%XsA7g9SVW*S9u{RK&cCFaEwpQHmZ) z2@nv28y3>WSq0vBs-h33q_|v{c?Xz1ca!hqC3?>hsiP-fjw(rMK*D-*p|8j6)T&XK z%4y^{``$JhcvMTd`tUnw`W^KCMNq|Jvh8Q*8nkd9N1)3NJxLxjXa059 zis7*WWEM;?Y2t=_3#Yu;O1GmbyEXacL`S7-eQIx0dB0lxt;^nIF{KA0gD`C>poQ2W zj`?Ziu)p8gYyF+WY8?#(-q9ZrIA*7rhBw;+DgV&DDcRbo)jAV_Afy=dI3TU`I2n|CE}&?_1Ae5-FId6w3T(5duuO4*{QMgvDN1qaVkdyh4g9 z{Ii}F6;!E`1QS$@G=4N47jop(RKbq!ZWZ%AefjR>G||4wz#y&Jf62`;7{qvTZ>*l+ zuY{67Q=xN@MgQKm4&+V$_o#2H+&mom$(z)`vT(tK!r#C&iXOUb-s_OGwQ85%YHCXp z;QYA~EQ<$cAFhTL_$BY}sQg`fYphW3_~O=15y%%+$5}}U;x}Bf-?0sS@VCu~a$!z+ zwmoc236i!)v(O6kj)2Av)a?~N$g_ilua@R=?2#y)>)B;`z-x$qDLzFBk45} zWm6y4ph@|sP#^40h(6#+IKma<;JJPciZq3?yi+D#0W&u55 zqbQSR8zuqCbG`%KVZ5V{@5#T{8u=t9vaHTEF>rg^@UOmpEav_IJ_-(cb>Z1?k3Gvm zVNH!GJ#pQrcKTDL`4hX7>Sh)3ARa?~lOW{g6v0i0P!MFEG&`*ij!^>KWRfwl!7m%h z&6=>N)zue=L5rg;D_NV`nDbavG%ZpXNO8Wpomu#)4CUeF#@FrfvP^WL>#IU7#VY&v zVHPibs(dhHUf1W|pP~lcu6?Tm-V{J$ql;DzZ$`U<4;O0i-%0xbfz8Z$)Pl~)(|&N= zPNf%euKl(+;9}32rSR^?I4QSEuSt=Ym*9J2ZPvE|7xbWFj^$Jz2J@Abr4UPAoVVh3 z{d2JY=Q|1L;1Wj=sVG+|(S!WhW0Ro%8vLuEm@bS_?!>#>arc6_;?_y6Wz=EqeEi(~ zI&%+)&cB!Zm8P&GFJMTV4%)V%Q6xi5q+cE2ikogoPI3uX}(Gn(zVa3*s8tua`(3VM?^i=vb1SqJ`? z!$r6{=8q7_$ZY2H9HrBfd2nM?UtgTuT2cM=ehwFhp?iS7W&O}9Ft8v7c3w&0OUUz# z@V1<(w{w3D{z7CmxoBXEo02xdfg3JVQ8%4?NaV;YY$$_nRaf01f`JPGm8jKU)m&UL zR#;|cE`{muQo*tU7c)=C+&)@A_ugts>*XEPF;Z^ubUBS!retjN9N77p--b}6`zqGl z{oBie@S$o$wdKGw`O!YLfrL6r%>OS?;kQt3b_safR+Fbtg!5_8);-w!?N|yry4^76 zFUbA#Df-6ktY%cIuuJ^5N{4?X8^MD-Is<$jMS*1$ErY;)%Eo!tzYsVLjD#!Nl6b~r zm}9<*+@Z**73%X=65)IPNe6Ry`vH}`o$p=qCL}AF$Mm1^m(!C#`6`TP4YsZ^x?ttx zlFCZ=-<86kOB0jFhYa>nT@p4esL~z67vTFJpuu-mm%VyIz9&B*=4lUUn74_8FRP3^ zxE}NHrU2RS_>N{{I>7j;cUFq3ci+CO<)gKHXQd^|pv3;uR17J~Qj|rjY2v4iyygvs zbp3wr^Q!OV+){N!h2(8ISK`YqpA)fZgXf=d6lI_ZOsJCM-N#2AKQwv@A;DoDs>(+s zA@m4XeD$zw<7KKGz8KH`PY$)N}9}x)kW7( z0l%jF2VmN@STCP!S6`KT+sWI_+@R2*Wr*dF!Aq6hMLujN|A`Ze1sugR??xytwcVJU2|#Dzcz%r9JR|EsOjSdL{QSCV3zi=I((svIYk^%*{K~z!_0^1l|2B8- zPeVcI4w*xuudT62Px0?G&DN#XX(8iVGwjq2`D8Y*mv|t$N|rOh=AZ6Jd3%7JKxmOG zQ3onhhc~^$atHQVX~E-q^Mar*_}B~exIV0^u+9r>(!oRmU_71koCAq&Ip2A?YWu`$*Jy4mp4IR2h4`EQPksn75I?y9R|iJD~1 zqqUZNk``{TQsX^U&y36~QO$$do(r=-GD7QXjc$CpZ>UHHAi%Fn4=FMco`|E`TL;;= zL{2;pr(N}2HsvKqp$_9B(WqEvf8`XbO1rjOU17>@H9Qltd-soqhyDCdeMs?Sw15Dt zFxV;o0FA|-UJMNL6|wCclq)I!+tQH-A`h=bua+$W1sQ)jFIrWLLFv0_ev8-s2Qc4U z24a8%?df$9k2}{rS%dbsb}N!W*;`LsPHM2vFxAEMmKou?;Zk(%N7eUi9V8!G3Tjs)M-&4UYW4jn?^Qdve6#DXv__%nE)%#-i`@B??>@ZtR*vSI zEA@7d!HEpu!Tvs}4siFH+9Xt=0D*YK#`R?({P+3+W?*T3>ae5^tfY}@zq>XQr1Vb6 zO33=b?msh{tIq32-!I;`p3swt@M<`0*8gT`7+1x42-2>qs$C1FQ+&J2h#yOh8-EweKY(X88PI5K~5*2>}{ z*UM9jA5#@1HiBS~hOR6hz?MjkFXb$zQCL#=8}CV7-+zF+Feg4~whmv54WEk@_kSCg zV(WHBjS{EkIS*`5C6ci;J^eK}N%QF{S{n;nVUNWbv$XIgv=6Gap=znRL&UVG)x2GD zj-+a2QO-QxxkB)!Nf-yEz~#eyZdO*B6`L1-Oj+gzMXhzuOzXiZ=`PKtL?SJ_g7sKk zPa8t;Ub+}#=?1qo9@VWR+s;N{WoMDFnAWeaYlWi5>Ktxgen#J7!I&4>JQM2iQ@2xR!6n8VYemn0>&!L8ZOKH`oM zb|XFTxczx>0Aqp6amv#0=ZHL;mPzwy@~-icsHq`butY5ev?^?HDW3G`bUXZLaLdj- z@#J-U(;G734h^ExEFXFzv3ysmc9ijs84uxBY|>`f7#D39HU4xauI%Qfq`SVh|9XXQ zHR6C*zQ-H?o*Vfpw~%0tv45uv;F()>d(LwyHaT69lJ3ejV_cRm{8(vLxwun4a?rBA z2g+Gaf%=0}yZaDJw5a3^j4Eln`!$+wu{PwpZ+sileTK^d6;}!L6hiQ?k`1reJ$SVk zJ9}HZ@WIm|6qEA_yM@JV0-_n+_^wk#uwrc!mN2P%AlH_ZZg%L!*`` z;BD_|5GK+jmU%30PJq94naLya5T*}$KC|5)QJ$)uD#TCjXNUMQ%P@=B!RwaKk73B2 zgNKs3?h?S3MRnf4AZ3$_QWZ%rhjcf=7FlxJS+pbO*15>NMj5YKZwb_&4#TE^Pt!?* zu)*$R5YL!Y?a74iG?J26P`c+tPqHmP|+pEcjj zkqU)#p!NUy7cjLGP~6SF{CvF$0+04AE)mU*-!dAG%nZ{(mLLZ9uTSb)V>LzvxPx^2AX@ovci+3wKS92)jW!ShMYUE z7w2s7-Stb5pJ`3ZcF8caLDrYW*B8(@N2Q+QG_=gUtDxDvhgrfxeC-h6Of ztbe>c;5-eCMgcY%>l4Zwh+*pva0tfoZ(>8vzu3oH_f)%a_s&xF ztS(=3XG_+jfLW9hDdiUT7w@hJ0+aiLa|Gd~I?7MqY8W6Lm%leHJ3`(*9Af?zwpaA= zo1ZNAm(oNfJv42rgwgL+)DhX9pJW_*x&kHWq154S7X=NUBZ=oQ zKyw_MOeiPYCfE2CJ(raj0!BB8ap>^#srJ-d^f9QtUk%Z_fWX5ZPRNu<%cb3kT}Qmw ztbP525h&bnm=SF_a#0P??GkcNZHlJZaKvHtSQt#jwDu5q28p!{*WSDujp8P0j& z^`+sHDl`?Jd$gjM3fXyIMAniIlE7yOl?eJ4jDDu(H-y5-VYkuSXfgA+&#$j^0zC(t zLXFo-(I-{?dKdoz_7C}8;B^n2sHzO4F~Vc0v@Dl__{ltu1uGM+?eC!28k{Dv<@{*_ zn$hovG+eoWN-7|{2?wdfDFCvSP1A`f&O5n~&n#Q&k(-4~--w$bsP=q~T!f*b_tK-a z4x2e)MEaQg%BHWt4JNY81muG5Pm@G3UqBJ`*LvOBA;!2ni*Bx@h`Fw+=C$c~NJ&vp zXGLj0^lY4uGwy1u<5=!qX=-|ZlG(-~j^_DL+{1ybd23oxQyUk$f2Wr9$K~@TKz5?s zA?U_L%Cp`I%H#?ZE#E(d9i(yzAIaYmy{We7SeGhV_%&K~p56Is;o3pnZSBX$N#nC0 z$9@BLnuL7%brJ8DSq{$uZ`5_dgVw;3DK94aWp3EMJCN0s30|1_+NBu(-NwGvzI*)U z@#2rD@QGd4Ryx|8Z-z;;*IJGxt@t387V(K0Z1M?IOohbEhE*-d9dP9*_{(VEY(uqt zI2M6vMe53x_?|jgME?GO=l3n4iWOqEqemk2(B$W*?a~MVfzht@B_iURktr9W|=b()@Z) zHh-~lC@GHbOJH@iE*+7Fu77o+gP0|N5@meIH>v#H*EY7BwIV4SoD&D|i~AwnbY3l~ zj!~QDP%0}y3PI1@mcFrA+dWg*(~n73S7%YbekjXg6&~>_hcft!)nb0!7RB7E~jSB#}iX9tmhP z-MAqC*_h(wmQ{2;(|t|36@`Co@Z5Et6}HJN+ebSHbwS36v63QRZy93Td)jDbCm`kN zNFi}m{N?^j{3{O>h#sP4(Z#D`Zs+mc_(aRbk26`5^2fPp2{@!e(!VBNQo)MjBIS9# zl9sOYJg6kcm*#q?%f}nIe2>QPj_mI!*wST$H78*iI#%q*Mot}bPAu?zt-xn)py!et zy*ZA;MD1sRcN>;#xm@=F;;>i&vpBZ>vyuJ+12DuKjbczu-dh(M!uM=8G)gwX==Fu6 zWO|w>rMzyuwj^Oi%EB7$!x*h#*w8yVYky{4uzs3rW`z6fe*m`$MsX#>*F>Npn|0uK z`+C#%3f+E%{W)_6xiKj6136r1U~$DRz*zC=yP+Y=dAR>h&4p0S;T<&wpB;t$o6>$B zn^yI3c1W3)(2YxN{}H7)=yK9U$VVIcu!7h%>C9*{Q;XxBxOM9jh6QkU5gAf2KtU_P zc!*RPVEM@-Qrw+i?>ZC4{+DL&nmsL3Qw!wq>6|$}R-A_wiXsi86WC?^sW1=u>x>(jU2@pu za+R{)PPv6Yuw_nAjO-42jd?IMX(}R?k+~#CeD6x56q&&n-9<&^_`=QC*o$quUQjV zu2<E z%n;_AeoAt9Nb)4!32?$>ItLmaE>#@8?2c6tp$U=1(-BxU9)`oFYuUckDP^>NdO?(R&86pkAv515<@8lm|MOe8TM~q;Dv7#Kh_1toviL~ko zjf)A%h+nE51=K3{aDMK53~lJZL!0Tcw*EEZ4_8kcMQik;Ia6ZDR09H4h2rNxp?8rI zC2NLGt2dt?7aZMw-S*|d&Rm$g=z7~CFih%2(0OcnSz!$5PX zxr|)c=Vf!5$-NV?GvVF9F|(l;0@97Pu5!WfGaeOcr5vSQB*}O4)SH~A;If88Z%28r zSTnr$uR`O-6}D=+P*qQift!Yj+{>fM2xZDcawt zQOOKjVGRs1ApN!aWMyC`=Lp<0cVUx_wXEc1{bIQ#^7zf{Z}*Mpa&mCLI9u9N7gMf_ zzngzWi=_CI&rI4*u;jOUL+zR5aUx`=R)S3tR^E{)UE6qxdLvt!J;RHng15}zUn@7%c zTqgElV3TC<@$&1Hp_FlTk|q!m`58yWx9wq){M~Kd)Xn|Wf-S#hr80f0zvu+s@$ItH zh0}cq9uW@3`~hE(7%P=W)}c|3;e^0rr6PCGCT;Z#1D!^F-{OsZo{;>j4NJk6-C>;m zVNJwybDQ{-aq&kuNMqQRDb9hq@yrT8yKa27EGtEurEoftU0`9Z@sY%oceoU_TvRc% z)v1t#TJ()T0Mpcz#!|`eCvFyzCF5`oP)WuW`r6-cnJHC!$E_zX69e1^{PDGWm}oC& z(IH~EU6{`M=5*Jprn+(H_Iv-O56+8X=jNC9HkUH7+-ov`xM5CTrO8N+Cx4F@y>jle zS7>7#zEP}Jsfj1=d1jDjP-Mp7qeFBxlU7yNIePGx)4oy!0uDy6Os@J&`IK~6mi!xZ z!i5vMGz`O_4It|T)x}cGo7LG<}@PQ zV`kdj>|U(zrO2k|&#fQbL?lO$6{+ahOW%ql1OWAAS3c)Fn#DI%l3LG(2mem3(SbvT zSYlRG{uM*ZSb2NM-D?UvdmCi>{p7VKzuzHeR&9BbUvel7%Uk`$d5FL$81<4@Su+=W zlx1O@k#X4>eQudf3Cp!J{t)m4wkn&H&UYHnJH@h;em^${+hjq1D|69UR;fE=R|NBT zkE67yb^-?R1H+X61K>Bi`bT+|R(ieoA|kS$+<;6Gi$rY{sl-HPXi#?-wCO%BS?A(F zdN7oxDWP^_D^pp6c3p{n$z;(kFj*j{vK1|P#C)NqsS&{ z{t-WN8~s%8;v@9Kva#I>Ew9b$@$ZGoD_FzsFiXRBM`fsGa)+t;1_YgIgfA4S(vylfTD;NRjQrW{ zgil)Z3Nd*DB%E@(*$tG<*=6)+&b&#@!Ge+(g!m7Ty(Zt=poKx;qi4Mn8x zSWIp#y)}{Xpj=Cx)9K6UWl*iK6Y+bGm(b35lBRXAr^qwIjc#8VxowYyp??#S9yX|1 zFLq(Qc2aahnkWv_V012)R@n7zTDbT9!=dIWiaCe8@H9E2G;p6w$1dXi!F1ZR+S@nc z#<8U#?9AmEf%znyt~fX67ls~Y4mRgmn%ZY&)UKYlvyQLb*#|)iUHC3=8|mb=|15<{ zxi<$A?S2VAu@;Yzo}U0NsrDYut%p8cf88ALqT1@35M5p+X7x_cm~93 zp*Xqyw(V&mYw5crQ$pETF=TaFL+t}{nb~J_2xIWbEhIhYHE~f zVl6bs7Ip>~YL|x-JJ1_1U%8t`2jErYj=0{tsTf*T3lOzHu=@BD@6xIp$prS-C5!iT%dfd&t%@R!yS%K5Oik2+!qK?id{wc#8jo20p#vh{$-N6lKU+y`m%L~I7P zqC|+agy~d8#*J;OVx8MwCrudGYhh!BkE!lZX=9nihKyyJC6V@=k>!VR<{lNL-4NVs{0p!7khM1h|CC zI;bfyl;o;|ja@WUg*M}ECr-B16oM2vD0K#{Te$RV(iJ@O&L@LkHdtCzvMuc%Dod$< zKq+moqLPOl(}XEyM@-iq;@m#Y+p~GpEz6XB%ScczJQo@Y5;CB31Xly&t$I0a#oLGO zTe&Y^+p}hmwWX)@XekS~LXY0)Z4N0)Q%$TPDNu#FwZ7*Oxwm_W0_&GAvb&3<>MUBN z#gz+2Ro?D4l?1xtVM<=DYV6XM()ER%-MU&+NG$0_fS+WbBqcG8wBUGiiqwuBY?KqJ zmK%hEuJTZUfvH=7HV18i34l1~_=m$S$zg={w;4!fI#l6V?tqjel4OtviT72n8uaG> z08;Jk97U?tEvD%gSxj!18Me7?3FW275~=(t15sN2Gq!PW_Cc~!_pKqK?Yn|wzP){+ z{{Wxaqz}S5*!oL%!Gf+6XKK-L$$gt;KHE;ub;SlQ?W}^G9K$`MyFglEy*2cd@$*keV)$orMt3W0mPLZqBMixVz`ocN2Hu3Pq%Wztmp)-3QCJ- zPN-P+fzGH<+dF2hc&(M)tG1VITq@ItxL6!bl!Y*z7zBwgXim;J5L!p$Qbyb>(~#Pi zYAqLaV`cXy@uvZBkS0>nptytx)>3t6x|KnTE+TlVX}Gul0O{B45KNKf*TZmTdQt== z3InZRbD}y?)=UVFzn`D)K?8H%S5x~>O6we}V~nWp)82V}YnL-$38?^2A@Zrji9S>z zK!P{qYe4ZHMk^y@irnLVoa@^6bp2_JJOYRy{s63*IGp2^O@o0!ZZ6fpaosOBAi)aL z-$?NRXTXCY>qo8SPx7ehe-}L>B;QgN*uu@07SUERjEt7)Z3*!-tY=q z>iE2tZ3WDs8=bizRC8^!_gH(s9a9J*nL;%&4ds?(Cdx2?hjm z#Q4%0Z613zBQ-Ou|Mt)x^wtKWlC)TwkrG=9kyQ=BoIr*O| zS_DoqD@dBsC?pS|T5C-}ts=CFih)o%3W|ZyQAqNx>|g>;Fel^6zteg~GDJt0i1&Nx zrD{O(r_rcV#+4j>MKHaoCP%G9Y8=0S7$dD(xi~v>Ios!0ClLo8VwDL703KZGLO>>D zjzGmV#TdFt4kQk#+Ucq@JJw@ZOWfEtHL0cvaV=VU=lVDc^aFeSVc~$HU+1 zA_pVVo#XcG7)n7q?H{#UahrRT_ri12KbfWROFMIbC%_7Ci`qDyQxxZVnA?>20W?!=@&=C0Kz}LQ_N$I6#e%d%g!2mh27LYW&l9w}Z(3BCi8%yP zII{qd0<>+b0)OHO6J5QlgSFJ1Dc*T<+LL{1uI9AH$(SFRnsIj4{{VWTjO=h{mOa#q z`$zkM#Lx1QGd}v)ZEkWDHX$R?MX?N{J@{B2UVjySBP+HK*?r?5Y7X)Dujw z!y1wVC3~iOq;kan08W&qkgR|tW`_{9O3OuXQeeo0>gWlHJIxid{gn z1EIt!MshjtNkcZqdyVSHAwFAC2_ko%f2}#k+qJtaJ*6$=1G>D=c_Zih)0{%vvHM6@ zbtVWN(LEw}+n&{Le{XV-P~v3cPNanoFce_;6Fw9JEG)@FJ43z!J{~m*+(GzN*B2I7 zx)g<}5H&<6OvXkfTfqW6>-^H(wx@zrqMQ&SeZ-iEGEBu=-`m|F6ewqO>P(5BXayMX znqjsrmbTH^q`0kQcR^7+z~}C*Ju2&qy=laXH1?M2LPuq+1tgj8q!A@J=e~A~+VOR~ z>XNH+hL9yrY6J{P*qyo6!*<+G*GgOpZAwDI+k@;VDl!Pk85D~fR4Fbr(hyUsGz}wC zgeg#%8i>JG{Hu(Yow{L`QnyrwoFS&bG1`6WNM`oj^ScPi9 zCN@3L5)OPS{^7*lzF1O{l&QN-I#UXC1v=>(Q@?mLsgQJ(k%J=6>%R4Z06|gIEr5Ar_oZv*0+bRDP%$4E zud`cPkGN?J>pkwxF{pqbtNDx$d+kixTzXi|-NV;r(G1?)SvP2gB~86(;cZKK-r5}2 zl9izeLQo_X_M0b)aF)1#67+F*C{4o_*X_3Rw*^p^-j<166to#=xEBja0VvKjSEWo? z+VJa_dlpzyk)caM64_A_5Ryb{)14s9NyUGL){NcyG_+mYp`% zLSU7wASfwXV__a+dh{dwIk7 zfi~y~wq+?w@Y;Q)0CoePx=H1=aSuj^4YzHZs|#+~^k6w`fbvG#wG`?}%!48~r#%f0 z6(uNev`PDikS-eO314yX{{SZz_xxiO#{U4rf3bmkZkH`o5upo0yIWL_@k?rDQQ4ps zoh_6yjF5<#JQLE3??>*H!Fc_Y#sstQ#DMyM&=o;SrD^skCs zTcx+%x3zRJZDP{<#)3BXdOW&%~jxEB`T91+`>Zo4I=mnF6vOKWkp zBf7)S0F^x23PymW4$e#}37f@i)%$T5F0k@UBk-_r|mA6dqk8dyj&W4 zH3J1lm2e&ehV3|uPqw8#+oiT3xZ2Q-N+nu>3f6V$E5Rv3L6{Nfos%{^BHf16R8u;n z$p%RxOq?HI=S0vmwRNHRz11BL#=Fq1kH`AQ&b230WEkc#@qwC7F^u@{MC6asq{$LK zJ@0)XCDp04q^Uqmb@J;oo1vx85e^&BeF` zp>}V#ZrLX())dRBS9VW#K{6(3P1;B-T(DN^0+8B*!=Up+r76%9nEwFXI zjNBzJ6#!G%p&{ffY@qPWD0@kDN}h>5;dYMD{mLA-7%C;=rII=KQk^m8Xdr?VqNf#! zTIEXk)UI)=I#AX+`|4HoHQw={%EmzV&`BH3ccY#>=p^Um{cB0(KI#cFH?0bgKRM6Jn_hbTgoxDBXvL_XHXtJpuHD-d83CFGW`&N{Vj9~ckrc_pd zg+`<%4Eb-GQWQB>m2w__Ri#IjLcW2hJv=HE(xF_%X;(_pzMo&#w61oo3+QMzu9c;I zE3#3}YqKEzbN5xsAyX0k{3_V@N0mT3(~KoqibFv>sC&M;{{ZOQI1+Mm@`Ki!(}72e+&R_2nW0V|(;(i~i<2+73xa;v1QICTOt zCJ9%KaP+LQLXc8-8iD8Mlke+Sy1P#HqE#g7F%o^AecIv8s5YVwvnLZe2bl5jr;5Qk z_xk7Wt9^Zz+{oHQjO6W4hXaOW6>X0?;f+4Dwxnzml0@_BHl=GAGd_5$EnVDfCWr8Y zrD;AR^R5+oUE$5C2Pj9fIYu|@Ox(J+hj~U-*A;Twp0-xK!eU6DoQmSjggUVUbDmpc z%4q)p0`{&l`|G`YD5wO=k_O%1c09S_xKpxsVkAGM*!)S3GqJ)yJG3r76fKA zrCjH73b8x#=T@9H=GnEZp-M#Rja!a`0XWXX=T}y@cMt1tR+$h2y_x8f0VHE;ZrFJo6`45F~)NvNvNBY1=c#=vCiT++( zs`1O$E=rPIop4~CNfRARZOK0hw|f0HjwSxl#HC|SshvK0MEQK`--G?F)xMHvR-ilS zGIN<29I#DsD+k(T2oj*Al#>c21f0g_ZgI-2I5qIl=DY%rWPL&1s zGIN6@n7|uzih9!K*2PG5#VI83%ndjsWbfxzRvcMM53=;5oGExSfuv&`&MS?s_fu#G zOQ9n|kFr!u7@x)S6Ys7Vt~%3&H$h5lwxvpnRsR402v$sZ`O`cl96|RSzHUhN73`eJ z(xmKk<7k{_uJ}l9$!*(>S=K=@sF5Bq%dbf_W9ZTnlt0?M)7T15w5UQ%;Dm*Hjy>YI z>ra5dO6AcVlGp5oPUP%7&2aI@*;bp*&DP3HDJn-X-S%R9aaJ5Xcb69~@dn{(Tr^Un z1SDXQ9d;8}HUiqx=SHU#;!dNwx_1P?j#;a21#((N!)qFx8gvq(!nC;?bpzU z3$6t>tq4(VJi-)4p(n<0E9@+?%dN10fV8h~=2rXlt3CsA?Y^UXcWSQHT3QZjKtNQ9 zN&aEcLMqLLSX;Q2txjmvxypUv#G=-=Nat5MbgxT-1aWEQlyjb{UuI>yU`^pu zuY|ZjKxiNZAr4M8me7zrov_9R{dKz!VS%A@0Y^)c*kbWb+kl;~tM+-Uk*%j~2N%f)oD$ z)7>Zpt!4!FZ$dj&6WuK(c^#pzN_fSq&Lf1f1FqbluUtw)cskNYx8MO2jOMtt-Twd< zdx7w7)%CG&a!^*ZsbSL7Y6x5F?rRq0N=7pwL0y=iMJ;%hg|oKzjVH5Pow61d-lo)2 z5~hk$qpL^>0dpPFWm>zuW#<~SS!`!X_hA13O8)>0Jsd}*ewuMkGsO^>?YJTmi&h-S za{A$9wyh=s>>FuIBQmA85d11)P zGkN}A$VG~ua5TbaKyOqe6ytt#TxZbMR*e@How^$u&`M9*E#o@S=AyMBI|7(fU=4Dd z)0({y^ogsNf`7}dmDs%Yf!+=nZB8#bl!Y1B?R79KiCEfkJ2fHQD`C_~BiT|&)C~B8 zJvmjcq?Z1T-5v{UmM<+^ORlR`!)yjZPkB9}&XqW+?ll0bnvx=K{UmDc`6=KmB`y?) zF0L*RuEC_KI?{!N5v}D62ExJoMLRQ<1O7rWO)E~7!k`(> z6&+-Ehll51YP!;=kXyU8Y?Il%q&#%2jZ)bm*1*`fojEvIBq%&=)aHhne!;g9t-rKN z&^9m@5(?6Dp;|gj?pb-XpoF}&5B;?^g4)iK0*P9bM)-sULFGzYE)ZR5l$3}_Wu&9t zN_3T<6=sn0O&|2Z-UcF_b*ESCgzD-2s5a1uk|0u&$o5m_ezv38#u6ub2tnoJKqL=k zHLWQT0Q;tnlR*jTS`sn^LO0X(@vSK7P$puIcdb4YP?6K#WArpmmCXHq{uG0#3O=Q$ zP>KZVAHd=4)*J)C`A||FNZaeBXdVaOn(W6F;cW1L6B^QF4b=O?OpN1Td%z~Z~6bD1Bg$4*^p+()R16{ZajT-K_c z>TB!A)Ptmowsfhz@-dyLgAz!|o_~~73b)}li~|YOPhZ=WTySO{G9^7={{U*X;Wn&; ztG$kVx2L!@o2s1rE!zw1(RWNazG_O1EWFbc$^aq(VR+#6;Jkx7tCs zQRlaWZ=Q9-I6bx3-pKZKK=zM7orj#Ld+Ufkw$!U~&V-{-5R)W+6)Q213Gu~ojRXEt!*~Cx0)5#Vxj-P9a|nzBJ!r&v&{3r|p<{g_NaHw%?S~VWcD= z1c4ABQmn0mouZJP=1<416tveLd` zDfXQ>kRU4=?+^@E3gb-iK+yj3^Jt!6qOSL zQAk#i)a;&g{lhG<^k)JEF>vUI}th?5~C6%#w2y5-s-kp&VtxN6s<1zG6n(3+~U60z9GRJ zc>%w)Ic}{?wBlA0;g7p2kO%%*6SXGB@IPo5Y#T{eZ2PHEUwkx%+d(?Jqez7!19Ooi zn&N3vF3ry?dsdQ;;*=z*ZYXUTAp&C`D&RJ~n{B;J=CA|6u)o>8-D|W zP`~(?^Ndx;qvHPIZyT4HS{u^Z1gs(HR67e%9Q2d`Fp&xs!#G{f1oW4O8>c?iZtGVz zq4!GE8*#?r3rZtPU8|`G4Z%th^1Jwh>6rfjE5ESf$w=30a?9y$GM?2-5_ z-?89MI!sq-qyT3=IC2a76e)Z}vEt024X6Bt}eUt?~E$EaM z(CArKlcz{E{xW)G-=usegIIbkaxS=U7+P3ifK>tgE>C20JiG@B1Q3RgU!fOT_rkqqd0Psd-_i z2xi&y-BMAoPQLbq0DGjQl*ffxdKjjdUlP4-l1o9xSWK-g%5_e)Np;5$d2Xw`qnrx# zL(%6rqug2Ry zp)MqrkF^F5PwQW24zEp`f~8s-Worm|W?%r50YzIRB&evsiJ%nGD^PH+R48UrMhbTk z844afDYCF-m)~W?=~5BeDh8R;-cRF7qfVg%A9*6KRQ1C3J7Z{-6eUkPZsVVL@`hX} z)~1l766za58`fnwq$TimAs|NB&q>ZUPUMl}KZP-!4ev`3sD zpDNOronz!`8&M};vqM2KuC+C^&)0<&wm(WPv?Kf0v>v}+>Mk|}{HQ$Go&E9p3hi3t zCYNwx5Hz1J%OZjlrRp?{COUe}VyD)yl_n3@N=Z{(HF8)R1V_4*rU%s zUUl}fu)&@E-a@|CxH%{Due7X>XpXRAyJOWxHp!39jmx~e{3155v^sVtJi1qCvodo* zPJc1-p{h6jm7zp#b48-85`Mk(mH;!KkJi+Z1VwADbNYIRAbJg_$=HB zB4Rhq6Wp04GqiQ`-{VBa4EY4@`ETc4sjlDOUAL8Xy*|EG+IW3@E4Jks@vhX5ujyU6 z=so7UUw7A)IQpdc{c;uBp1)rTZNg*qpssWe@o>k>7b*V$aUTp<2;x1G8`7hYnIHlB zAMZ}Bx2IBaP)I7uyiU_zku;4;AV50-&wr`+Q-TzH{{V&HQjfx(#C-Zw%TQ|@ zkv{#Z-RD(v*_57gs4*O~w)J+m18|ULJ>Lkc1v;{IB*5l;yrbbXJ7@HY;TBg`*6A;itRU=XCqF8Chj9yw z)MzP7VPR@nR#l|V2H>A~@HF~dZq%fEWPIcLbFLWG@pZ+zp5%Z#(oA!KfzzFF`*-eH z31vEnNx?A-KZ;C!9#z2jd-hi74=zrPrhCLm{@Yg(x4ON#0fhwjr0UuR8^MA2yO`(=aW+))Q*IPMQG#O~?qAn#wPV6M5 zKI)u8ZPna`c$mVmu;vc+e$$DuQ!JGNQV}C~=RIb)UkFW#5_?Bf;Q>pPf;AZ`AjIUJ zvC=B)!8e>?g*X;dYSAeK_cd}?JdH$j%uAYdSO zjL93vT6cpmn`_4HQZ3%PYe{vnrCQRREvWK34s+$snbp{|7wv>3ERW}o_r%J*^`r&Q zGCwK+4ZnlVwDuP-Ip0zW3djJcz|0{dDo}$78Bu}Gy)g8m)LYuxS%UMtNz|~}QVI(t zc_r4JLS1a60xy=|+Sp*8QfGWlGTn z$=ib4URhW%Wp<|B`!g-H)9EBBXhK3lT|$$(5;TVb&bS3Z8Lvv3WZ69GfM4CK2g~EP zNZ%Q+{{Sa1LwGkC{{RTR3B6m&XNp@r#NM}d+z_NTo*{j1t80X~R+rM_VE4d6ktxz8 zGNyRP3;zHQtPS6#JVgw$qYW)K*Dk1qCm(jw7PRbUbwCrVVP2VfPr|>%pH27&58(HA zODw2$ZR3yK@Vgh-KWnsyl#_PV+8s)f z+PK=6*l93Epi-p~UW{>Te@FP8=K%D}iH2WF`%5dg(sbS1!9AIBW4A#{fbC4J3JKS# zC>7~nq}p#`{{T%`N_A;ZaGfI}d)QSoYMW!G)Fq@TMN0u93Xg{JeCtH2Prz(3;lI3^ z#@k2q{p*z<;3N)oTuH`!57sED1O*hhhSdq}P(p%L_>`pkKnb7Ar7jXe8FdRWBeGLY z?SiG0En0K7tt#-E?HbawExfNisKU_X$uX%(P(R57{e>qq?dy)OQ`fhbAfvM=yH{y} z8Z@a&?r9?skhnT#C|w|X2?*|l_m$n0?w}xK`H^4dB_l{uKluz}q*vRHNl^HJ1o(6F zueU3GLkDqRZ=Kh%KcAI3eIqUoqXWyNo%$MA5Ca9_ra35nnW4lGB=(~`=RIR@){hcv z{{VNM-`quinKE~EJ#wV}!mA*5OE$qrz1m%=XxANr|J7w`J8`qO5)&de!diV&=`|GGfnYw>a+?YCI?`b*|8JG#nj8cBvf4#8G__?FjP}Zkrh^PsWYw zS?>=qLgXm>QYo{F6V8KfIAO3_9$&QnRFG0&`}d@e>*|=T{e5YbLWI)_ z)*zKe@zdo+CMOq>$k z=8ytJ3}%#+tHz{IN>WJ!dN4$9NdY1RM?pm?DheP-*qF!0q;($}LQsi_6XQzKp%^~; zk<@%^QZ>#b_|YkX3`aSnlq5u?4+yD2A_$+Zwc4ZkhsJ`?J($mpcBt$1@}*s{g9=<8 zpW43HZyLK%2kUC>+TT$4*KXe0ljSrn*fS2G=`dkH!RcRXVq>*O{{SII>fJI+s1cKq zO5%1X_MaX}N|pZr;DRa3hMj`bpsS#gHo-Xn?~yg>YcKGhNqBb{aX)FY`&u5nW3x$Y zTQ9kFBPBqWR`QZ$PBf?-`e>`}2k9RT^qR$#J#52`xO*_24=}PjPVh+~F0`d3D+jn0 zs2=rjt}ny*=MQIy@Ym4&yT}K+QdZNN5~VQuL04w_0+ZS{awHKbDN*#!_f_Yc?*<$Y$;~tB# zcz@ zyzP5?aNVb93V=gSDSDoRh&ob_d?T#cKpED2l_keJ z-eIOtRR>^v@m;;aB>k$(ABVGl9RWSG_~A24cH$JZUf4E-DhM|2&zMr~z|Su3deX{{ zlDpeLJQ<0ep;rqjILFKi)`=)j6Gk%~n zbr|lFayLBujdo2Er4*7NfdW79&XJCz5%{@M!azZUgbWA+-U;yQIi(haVtViS>^^fx zvcV04nKD2LIQ;%phmgY5u##j6PA7asoj4feGfzGq(z4etWn-@D%!3_%G+j!2+D@q4 zL}%w(l`}qI_3*}PwO7%KE0ZM0N}u;dcCoVSTHV41mior*W$(Z-X{_|gE zaVgNWnbkevnLc~|Rm1HSgRt`c)a|sR#y9tQ)$$5nf#zpu^33^CRHT(+A~DQ^$Pel$ zT)VJoUh$vSJSaPIt((&aW4RqtImHLAIi#eVBpmAV9X8~CRoYzuN}(ij2|4)*@&b$3 zQv^Z5(-GY{lOk)jyh$C=u_80?$Q$`$i}z_FNGc;?kp%w$Ha7XvpS?i?ndl68$epL0 zd#ks-)*DZGYREYl=1JH`&V!fbMH3xWJib(v-L6tyFgy&O{DJ)_H+XdgtzF%-0bXa8 zGc)k7v$(0&r9yd3`^Mn%*w9wu9#pIqOm7B9#}vYFJgO^zaIoro zT{G9+=kWLVQ@kY(vZR!9F^*t){{VX8wgTDgZ6-dvD1Kh0esrJUm?NcHuWp@8#T6)l zu>+s1M9mY_`s8&V8q}Vmf`?iwOzu84sXaw%Pf=RO^9t5Kn0%|WAIvMXPxA`x2lEe= zcB%ehU7~-Oe5p>Pa}?doDguX;{ODgUAg)LJsmr3jXpOqpYMG+E6+y4OE zPsCBVY=7KO#8=xH{{Y=b{{SINx@3RcPsC8YXzaBA0P-JS*A@2WKlfAdueUM$SK9~ml>YQ? z^8jaU(g((C?Vs_-Ep3ng02*g{7s=`|zEh8#9wgTyHzVunEBwO}C&$^wdCA1`>tAmG zYURwz2H5Lg=4ts(NbvEGhr++i+mZs2B02T1^Hg&nb`uP-6Q5J{NmS@)7wZtW^5$%k}hZEM~qv{eW~5X z%%|i#WBJkJR)-zC{Qm&#fwzHvzs)Sd~2>1iBuk%KxQ*Xpq(iVY_{{X;# zV?4H{aZoh4i)-ylUX?PaB`D;*VG?=DbS94wKwgAeaSOD7CB(RvMD&ldTx@YYpqTbX z)Vstem8*kZm0|+!THBv{>{$8Hx(Wae33ZNNZDKpe9phymFC16ep3*=2lKB!sX8zwy zcz@GO{3zVqf|34Kv=XTAaTYz_{;diB0Ln#beICyXLKIJWIFkwmMEg+N5@*jG%^Qn| zB-${N6{o#>Cme)YXU=h7Y`Fj^TQG*=980$fQ7#zDN?LF3ygM~0oz(zIytqizTVqPS zf&TzjzGMg}wQOpXp6u$=oZ@WJ#9vmVGQu04^2)Bzy)%-OINT{j4U|*!1aT{i25sGM zi6xjQQDi%#?}$t|(AHq9A_p;^Mwz?5^nt!BZ}x|5xG*l-+1ozZdq-!XU86xxg))Sc z#5SVZiB_ilqhI0mw-eyj0?jteKWh8BzS4y_+LUxbSPD*413*rKa8GR=+Vs3OICa9@ zM|`%Z=LR~*Bj79l0MYx!lf=Cf^rL_}kfrdSNX6;_f`MWwP{t*8Fh2Dx>`V+#q((TR1A9%lfZ=J)IjqP&kO$m4ZS?Q{{T0-ZJrP5BS^J&;l&jL9B*6?=De#2<3z?d81ls?@ct?qW8;0x$po z4pacAE*WG6IOAwZoULh3!cTbk4AZCwFFKThNoLyN)W8$|svGQvKbdJ7yR)kl zeLLYxQo91{p#{V&_9{YB<6synb3i=Oy*h-525R5Z$2g#O>=tjlSt|}L1t2F}q$Ihh zfdV#ZSlv0rwXOT?wB^O(m@698!!4#$sX=;sW#s7~6#d#j_8~}}O<5(C75$>^!guXm zO7{?d?Fa<-w1`Mh5HKkz3GRdY=fp*69V+pV{kx5*N>qgd?*tg}>ElWR4lhq=kXUqt z06Rn-DiC?Aef^R#NluIIyhu)+5G6W`dx7}855vZShM0*tFcO%E zl64J-=k7G-k|#(~yRiWz=^}p+Pn-!f0(6K-T84d~2opHcCmiQArxgoKr8|%`$$}#! z?0jH&%_1a~uTX=y>9*1GitQF8AxQy1l1e0*GsqJM!!rl1eWAr8DN3+XLXr@7?wJ!O z>wM60YdXqSk%=X;nLf`+Ffp7T7^1u>DFsB&vl2)>G?^Uq&hdy9DpGYiNGVUWKu*FY zaCH&ONi&}s4w#uCUEgTr=NhmN#F_D~*-PyVN=Vz7>k@YN1M{g`fK(jDLHsgK>IOTe z310Hu&jrUBC!9?`+&DH-wd z=niRCYC8_}h(YK#ogk4OG;EfgDH=gJon-0ia5w3gp~K33x0F;Q!Xu!8&zatR)OdQ5 z0qtDhVx8nj1_C@Q{J%MM+~PKkBR_^S=N0~5-kn6N1Hg#z1be;oEtv`1c!B``0PMPZ z&S^lUOICrc}@jud>;f-Ku z8OGau2kl&EfhDx1;Eg%u8-00GErcWw3OgT#aTbBON>%KsMspGGgYzPtw@4^ZNYs0? zIMO+eT}Je)bn3vuyS?pNXU7B&B4RTzXtkwj8dKAlf&T!E7(Q5~w%J@pNeR+9^WRS+ zJw7u|HriB(MHk8oXvf z9`CK|{NCk80Z{Xt`E`msPV8eo{7~Z8Y8ciC>o9!3tWvM;qfl~r{dcoVzP&jPm5-~Kn{`EOrtyNT@&zJDp}h_ANY z=ma`-9OhsM@vpYrl&E&fk+DpSpFA2DcX)@Ee9TwdE+Px+3XQyc{=BR07i9O|S18g? z#Ej#{yH~))!pSBhQILFkOh#gq`=9%Z)y&C0c>*)B_fz)|_d;DpJDi;DjP3b&Q+Mu_AG~n*NrM}loyRTdS4+}Kd07~OK_34AuP(j1)%rHvJy`J0EF-G>5Zu=czzW~_CX68akR~S{DI!yGBtV6K2`U@KKbe6=6sD1_edn< zj`#Nbt3&(1BW=b&RtXW~wRTSPB7LDJ0z-TC>)4AAmj;4G>lKCO{d0J;~0Qli`e3wssaRm4E%up4;+?_g1qS zg8&j@03suwc%=MxuGL@}Z{G=z2qkeJ{gIjqxa7_`{#=|t-iwb+4FgVA2}~!$a~RJq zl#uBQSynW`CBYz*{JpO!<~+PKzojz!O^$k3?N2@T>&$qX(C(ck;Vvlu04XOQ?vf69 zc~ZMc)7vBn0WJORm7R*WaY>E0_)^f~LugCrLRyUh!0af`v`9#UnA(SFs(#YhNsvD2 z(yd-TrD>b2M~-9+Vn{vMsy?qk~d0V9(0t1fRG>z05M*W zaQCk5E?Z^-^!Ch3bwjB=^ra&`_VplvpS&g{Cazz(f6=Zm-({nU@XPHh?4=H~ZtJeC zZZ;!Qd*HXQGK@sUe}{Zx$BTMBXqIjmcKXqv-Ro%`o5=62EG@(oq>$ri5aK~WDN<)r z6bGf&?%dltgbCDx`5vD7{{ZqC^tgH>{x0!HPcI}3f z%TvsKu?Yj)SwI_C0=2pHchm1kxK+c-bsSMhys~mrsl+z76t-59a^eHZGMSd!TK@nI zJ8qjU80Qnecre3kE!B302ungrfLx_RkyIZJrq9!^3CH*=wj4zMhi>jI*;>dX6%>%z{{YS)^Y%3vr>rhAT)A2a ziAz6sjmmXo!oQj|4a6Gs^7j7#gnCuOm1}c!(nEtngNk&8g#igu-Jm+BGL=s-Vv2av zoGr_aA#$~9Z3}I)*%x%_ohwspTefGIOGzO;-9(LN(GNyj;#L>897fc_t{zRQ7EY0= z)vZpYJ$~>uXZZ|Z=h40p-v<|#!2to+`$34210L<_QXok6N%(q|8cwaFHG81Fa2j#A zT2pWemUN{^hTI@Rry3Q2cb~;Hm*isMg$UUzI{6KV5!Q=W%TO#Of+l58El1r6kv(QB zMdFH*mfAwV&ZQM3_{wyj55wnOozhN~X$mQjTY`{&QU3suRU12!0*%Wv(@NH?;DSnu zB={%eOSV&GzSYDlqEYu{esM~+$7<@-$`#%Azy!}cbotS-LIR2(QAiq;lLa~7z+yb& zX}dPdVQjvotyz^FNgheaO*GmaLXcLT(LKlnr%rZCK>{ZmWN*@fOHLNbij<)PP?99h zCS&8CKnzo@C50okgC2QlO#JjtaLheI6C^6efxzBKYXKIl8bcATF8eg`z- zQiKUPP~Agwfw%Oo%m#wSd58z)h}*3pAx&x$Gd27WW)6FjNc*-AvM5@UaeFh6PPO?{?EakZ$<$x5Js_`hJI%OCx1W_;Fd9e$;3&Z5>hyBq3|=XhJ&S>Yc1nStpVstvUur^<0UjCg-VE2IK?rEH z2YMjK!#t~MG0wQ1huRaVJ=Kq7h?%E8+ShQPE)_d@M|yD){cE?q)jgSm%0@g!ccolj z5(-<$uQ)%hQzK^NqAoFoZ>rynChtEeSQD)Si! zU_m*>3tNc}YdV0AW9xoZ_7~OPQps0SoxDzHaK-LaO1jDXzoiZqtvHc2{!X07{ztFn zLxiKG{=V&~aF)*K82Xu{*rhuG9}2c_PuGnnZ&wVtHup`a7?T;EepSLa;l9agM@4`5)Mwr5CL)2UoxSxwq^n8t`sqx% zqL3tT9vYBuU2k{rpfOZf9jBnkE$0M zfHI#SXZi{(lbDM+J&)D+6qME zsQ5=H_@25?F>U<9a&-+s%{_75(r14x;*`W-{vA4J8x717Ap7_5pwdKY2!aNatDpN% zaY^gXl`Wx@tRi&bM^eo1?M6=|$;^0)Av4}7D(IzT$8-{Q`k3B}QlL@ZnUNA^amy1B zd=FTm!mjQWEu^QcoB%pcDBg4By$%4hHK}Uvf!1-%P+`8%wnzkO!jeebdF>t)n^cfH z)8q*8#4F#m3uH{{S&82>o|qpr_)^20IP&`1f*aCdDb6Bba@;6E z&rE)W2oc>toB^aro}hap8_-1KNS^`ye!9hIF)$}-jkC}D{Hb33JoJy!lO%3nWC7FS zBNVct2@}i#-Jj@3iKM9eFlUxhKUy5g@%(AYJ5E0;379&QfN)M@erF##(hjIpljH8` z%zsKcQxT+cIUiBy{cF1#QndSBLU|t=fig(vy73)k;Q4RoUDz~NKMGX8Bl;S@hLugZ<*2jRBi-_-yDWSdGfDF zZMaVfW!@kX+W-wg^1fG{o25*VukDD_sm9!8NAHlM8vg*?5UC0Ypf4|N8sdBw#jizp zkzZ=3ZSEgwZ#I?aC;_W}(Jfp7C6)G#=_6TKis9T^_Wst{hpm3n^LD8FZxB!nw&ThB zvQWrn5?39fl9aaE6V7p5Pm1v$Lw!5+W769-A)CGh#;kaan~f$kuG!|DN)$gBT7uhB zlCk${A_i;xT;q0}UxxZK={KXRTQ_`K(!+`H%ZoK=eLruuYT<;k;sP88?~;zDNajU) zWpn;5*m^v+JvY3!9iT!|${V*2Etnb*r)+exlnq_>qfk&;(;egJ{{Ri)!p&A(F4<{) z)|>l6`)Af}9BnYC6on|Zg_RWvLJ{54f*@C?Y+Ty;wR<)E|p2Go6KiE*1V!mQp(RMCA+n}vl9 zK#O3$(IAZKR1D@Thx$GK9H)X@T{m~dc!wHkq(eML$+j$mge0uCmR@}>0p3V1EGUD^ zYI&=2(OYRlDKQPFWXSv=SsL$H}y?tr_Qg?>x`5%0VL!eV}7aUxShJ~Tv?y8 z3nyDsfyFu*c)ELiNP9v%Bia>dPPC&=g9(8Ni3Rksmk-^xKI{b;P6UZ2Bj3zzSB|My z_KjMT_EwS?aN{cOB`4X}q-0Ju#%E&}7bso3$gzDc-7RGSC|E9P{{X^B#z`U|9``!5 zxNVDeg~Q+V1&~yS46RGkB{3SOU$P>4O-|ecORg2Uu}|p(ng0X$3`G zqmU;Qq}(pucFkDa2TF8>Eus*az&)T?8-F2LG22)PBq#Zil1Y&fNwMN;x>e8FfDi&(abvUtb1|s^ z&H$WdRn`6-#IBZw_9$RBWF=}UE80DbC(cilQ`Q_-<*vZ6+dPY^b5aP^J=CBjN0+sy zX@f}NoJ}nYao9$f?e(85woyF&kht;XOz@5*!b%XkX94_63qsN4Qm9byDIRp!1ioOY z#N0Bs7G+^=ojp6HDhK}nmZ_xh3$03Y-hJsa0VypH4J2xge$cP-2iA4Hc%r!kXaFD- z`#sVQ-3g<>o_GCw*A@gufE(Mck)L@r{zD^5?%pW=RGmK(AfGz_03b%+X}Hn0jeoB6 zI1Q*8QuFCYG=-QyoPL%5LuilmUU{hytqw%{xp|EE*ZD6F0BTZ-k|SE3R;cBfukwx% zl)*|*iB_XY;hZ8PLKX0zn4jLh#llg$ZJ+sfqrhVW!iV`wCPQt5wnBenOq#CJq|%a1VuE(9J7f&d_J>Y% zBi-j((hl|7AV`rk9&fE1gyd6K2%2enhB|tI(o(M<%DoZdh$&9I<3Jq%<~jAB3ch(4 zR_-SRDFrz(j+2R2LRUJS+L$99H5cbLhYA{CL@yqn^qTR-Hr@67yxQ`!v zev~clRXx)O5T!u*(6zdP1bIx3k>T^Nv)movc;gZE^l01MMPkc6OMQ-Vct6sfDj5}76-4CkKwz0`}11Px0AJf~>*M|f?|z)-m- z@xh!yjCI?7UOj2&Qyt=?8kHM$&N4IC@~dS1rC!k~-#^=xTJXlBVNBY#*bsqRQ>oOL z6j?OtqpFHL(vrkNT6Yu9rLLxgP`TY6PTW^?>HUJOnKUl2@S9TN(b3aCdE$yL3 zIuFb1m&36_inksl3G&+%+h|Dt07#HI=iSnToOWR6Z6bZyP;k zod~6&z^K!wI}HAlK6&$|nOR9wZHW?f87DZA_0z3Q$xup($JS3uTNhoPy?RH2Kp&LP zjW*rF-~vHB$uaQE_;aUi-EX?6C#*(%;+e8_#FzsU$SZF#MTLcw>C^!o0GWZxjhmsp zeZ=#^Q$AA^#iPnx7Y}=?iN}Uwt}N8r!VEZ*1cC>~ar36^*0d=>3?L^0TLw8}FnDr|g0m0d5)Sj_99se%@7UXyI39+YkVmDH3{aDc0Rf#uuys%x&i% z(r8+rv+G^MlN$p9PcPV2yAKs1CD#)@=|YH69SM<))!nO3EH|muq-9}F6%U-`bRwCx zwhXH(NX!7fm>j5EGzwM%fhxfY80UT)utw{j(jU|WQ3K>e>XE%+LEV|PjxHDF`)Yj@dYuQiNwgKv+=J^7PN3H(u^;$a3s(B zRbSyt{9&eFU78wl)yK5mrNv~r2l{{~C{WrmlhG%CPHh~yy|7UZDNbBlw4{TmC9>jm z!U!nykY+R8#b5dp!#>WBvb3PIrLtDFscT-HC)!+`!N85;t;2nb3dFY9NE7V$VMFVB z1Q8?EGs=BjTG#D%jx`dpnQZ?6D~TaUBg7~IDXtvl)#`38SW+4Z8k%=PlC_A8N|K}u z#Kg#y;|R32Xb{^BwL6B;lmq4y71*=?0Jee42?OWSl)H8u4Ybl-b$XSh8Z`irH4~`# z;BI+SYH7p=L_|+}msy^ajw52@fxTrVN`xtGsSUWUjkrdIc?0EF7k2i+J*v0%Qjn#n z#^fa+ss}T$#Wj6s@-?*kY6ApMc_;Z)lio_a2%1yvB|3_*1kd-O#BI*yL(E6MmBpIW zLrlE>oy$oEAQPD>{b@XDrLRw7@*{rH1w5z7`;1fkNev(oueu zid2_X%!MAm&w^QtmEBP0>h?f&D2umYr^0xTQfj zSRAncPr_u?y6#V0QX44hV|}`G^QJA9feNP40);Ep=tcNbYO-1T#Gkty z)CueKY5p3wtX;?8Crp`FgjXA9vbj)=Bq)#1>u**J{3_**VA7jyziZ2vI@H+Mf_}cb z*KD6-yEWUTIK zr8bOWnrv#?nlTU~)GN`8uFB{n$e{sNE}0e0ux7riIFh+>guM9I0=rFkpN=-acpYq}(r5Yd>EK zcH_J49E{}qhbm3OlkKaYGxd+soVZXx$e#{>n8hXaPfl}7xK@s)BAd7+V5^jFCj*=h zeJBNjV>@GVBbGm{G}-Nvh{v?4^Tb9uXO&yDkdcA(FODLh305~b;lhkO43`6J_uc+*d-h%2*YO3(?F$NvC=Ko}w<5%aDU z!@?4u4foA7jUWj3e+AvTLst&Km`t7UU{efsnu@oR@}X}MKey4LYK=4J_0EvOaZ7Em zk00&%ZAfVWS=-C4JcO7?6F8>YLQj7OYAqp4?u-g;EhQwYakro4U6MVZH#DxvEx;Y( z2iIB&N(xC#2=My)+MVp)Qc{%sISOw>OFD$dmSgMddIPpn)CYAq1oQag>M0K)wn}5X ze7>jmtttrCaj4HdzK-7-ap2~Lk-i7?_g1dK(4)u!@BM03a=l;>k&sCCkB8SvOXZ}g z0WzXYbKmQoc54mlT40q0d3aZ9r@~roDkEha$H-^OXvMR+Nx<9BrvCt4DJ{D3TgpO` zGZQ;fU2{ib+iOy%kox)br&(JlK`9`T3=n@>MYZMGO3k|aEJC!aPrrK5__$LHG^ZU` za3vy1<@FM2d^+mgg*f|4ZC{I0R6aA2v7!ZF*GTNjVuHk&krFdDGUf ziUc9GB+kPq)%E79I1#t{0gbe8Q%E(}Q2 zakvv89fA1Q65-EV7MfV>)vI&J^`-h5d&AI|oY3l4ge)mN>?}_DV=_7Cm2i(n9pl$` zZHt7mZNBiJ;H$kI3BmEMGr=9OM`Gc}Xa=x0j(om#Z|H(8nN7ntA^mAe)(^Gb6N3@? zdDj$aOkO>Y!2tN9BkMGqRXt|Qo0lHcayiKI<{3T6Z6OH& z4XAqVS`MRWDDMx15udI?y(HjXkJ@(aI>>R0m3^(-1SFwpac4r_v~(jvTu@KmHbE=W zpJD>5fpHt&7KUv2F}Swj$Z5wEk4YEW+k|fxrKi_$93&LBhFA7txhqH{s-5GP++At6 zuxj0-*!GVrQr%la1K7}nkg}*qacEjXRVXS63%0!DAL0K1rTj0_us_U=jr$iaCCg+h zQ%tP|Oer41+Ihawx0)~>ZN=&slj*OeYV@OpdMb}Zc%uIR$bBnshZ|dF9#FPt?OmH` zWLg8*+pUKkQ#VONX>cu)+P~8gdH(?9{pk0j+%;E>KKBv2U8>dg_u;iA<)U>Vw)=$! zdx3h~9Oi5M3UbNMMR=E@PB@j^T5&t{+_xz08|~JoS#+XGi*7fKN&pq5#Ek^xdiO}ofF@{ujA2r;H>{6ylMQ~X%;kyO!@?}xtAgBlh2 zXXjtxJ?bquml@!tKXki?T()-xU0|Nky~@ASQdO`6NfVJ*_7<;>(d2+pkfZoW&po!M z{Wr3-xE4xj$HGr!ZW$VzO2^?j?-YPa^pymDD8$;k#W=mo{6mIbAF{N*!?H>Hy-DvX zK;2xY!_KUGU$QgXkX_N=fdYQF@jk7*sETxVPnVs4n%lDpc}hZMNDi&FrIMr_DgoHh zDL9FzZu@u2TP4SovRhDnO}5)`J2fLof+R^0NhHbI9=JC4+LU#=Q=tHErz6~8ZdLo! zA7*t-IVpMDcaqK60u-*-9iWVzD*RdInZW_Zkd_wOPiB=NKy(_CMESwzNVB?f->?o^ zILH71Ql%|Ab}5Av$cz}pKW}o~%Wo~WZcv5;P>EOLm31a@u$*V5D%n?8O}fpiw(@@Y zYeJbSf!*$yDm_U|4n*=cXj5I8#vq=)`u_kcZaud(4yuvx+MD5*cFwq~SCEk6iimY8 zT2($od!u@9g}A$b{o9FhHbX$6vF;?F9sGdWpR!@#5EKxknM@I>BuJR|^AzU^b;J}d z?Mg@Cl#N0>V?PQUGVLkQi__Vk!lu%t5BRGXJ|Lc0t9wRlnM8=X%^mwh_;@K%4Bxl1P+sCi@y~>V++axQg!hS!}lf~Rp zyETC`%l17y>e=-u7jj@fD=5AJ?WdU>q#jytPXiN&xgcU zrTjcpBdiaWmCVF%v{e5C-DOgrc_?YGW>$6^=GGyZ> zy9Yhyl7cWy&_-fLYqA4!K6DCp-jK9pd;b7`&bw4>0W_tmJ(=l2#Y7bO2;1LXql(6w z?Hoe3&0Acr7!;Li71Q5VuBnI6ut><5^PhcsKYQC+x872e5)1-!w)=Qso%XIdZT7o0 z6-?^8R0IfLJckA?zjRr)C`uWjjL{Hbe zQd!RU`thR3DT+%XcKZ0znoNI64JVlT_eCkO5I(+j*$KrKj7PqMM^@io8thdV<*@nl zrmfVXcfidzXuTsJUtiXdW!{s#?;e0F2|uI)74y+*{=N)EtfmaqwV@gz&B|vlQ z;v%g0biPjzBPUo!*1_|rT!cMm1BliyGgw&$76aV`Y+4s8ffo^moWF$8{< z!gw0Eg~pv>00kcY1`fa;b;USht)A?N@{jFYBhl91wp;z8b*BNp#C`bpihGAB+!ofD z?;i|K$B?VvM_IJ6L$=PP(pyTFk?jITQd1HFdj7R#WF5P0E5K5~ld@+7`@QwYcp@zj zpR+A5G-JMk2tFnvGDP$6uSYmP3w^iE()%~?Sf60;I*#+S4T#>jrwr_GG?e!hwCO(% zU$;seH-kIF8#bja-S#l@98zSsIk%0KF&v|naO+!kID$XS87pNDed;}vr##5oxZe)3 zd6K>uw7A&GLVctI{K@6+#df%6rL5t8bS*?yC=d^ zFtf7x?=X30Y19rM#F^rjPPFO};B_!kpbAe<9&?Z@iSgbQ$68ZFCf4Ce%z>e55__r} zf8|^kk0*gN^^>|TEnHr`DIn=oMx>eiT*N_*q*oJnhh3?=`!~{+g=)}9O46WaFnMD$ zO7yvoCc{lr9_|>PUUBqy^pl)s2PiE8O+dvosP8O8o1WzqkrSXf4 z9wGLg43(RM?I%p7#Pdp%%u}3Z%Z%Ej-!g6P7L)ws(6*P#oKpXiAvN|-jyR#Qmv%OBR=@6m?-Y0Bcf6?iJ6!XCVZxntx55W z`iH4YLOr#m6M?BfN${MXbvu5EDP~+!Ri#ic55Im}O>v;z{gu^?x_fKk*{vyUDOtB$ z+PgKpN|B+ZWG_m!=`tHQt|i58thgh3Tw7dCjwQteAb(1#6d9iCIedpqK$Y=mP|MBaLv2YrAI<_ys0TN6vq2`|JEL z^zQS}k4f3!YP zU9yL6?TQ{!6r`26_eEMpm3M&rD+NhXVL@w|ukfGzHM`=BpYa;s(mo}_IEcLBDNVJI zN*lShX~ndr-*sf`ZTAr8Xwunn3Q9o2;c4RDjq$(nSJRunN7ckx;ppMkuDfw@dD zFDccR5Vt3_)2NiDRHaUogU@qbk8s8~8*f+#CtJOuO4N`@jUgfeeUJxV6Ev8JA6-2| zA}GDL(`>lgWg$@6DJ3dX)i7D+F4s#r4mKOsX@HCbwr-n ztd8q&Wlfz@qn&`IyLy!;vA9LvnFvde&BU!RPzn2&2^%L%eRWlf)@=ZbwpVEIohINV zu&mCMx(RK4?CA?p9R*9biV>ytEEx`y*f1x%2#6}{*YilZ;f0h#E-lGQbp6;OWT|ir zX^HUv+==`uHsttve-YQj>7$jAGWD$jBc4|_&NG3lje%bq-FMWwf19WXa_>XFQVxK5+kk9#h;b{;d zwIj1VQmBuF(`mB}c2^e8_PtzfYf_K=^Qe3O04lWMcMB>~bfKjyx(=;C3EDy4M$xr@ zmOpH=uFJMb-%eHGgSUyrDWHeKu9%e?Q|%bfE_99% zwICHZ0>?<-uHT%}_*LSF)V8GniOD3)&T=_omt(|X2nlby_~(BtepEPh_MIh7%+G0^ zQ{q2rJU;y$&|7#$@>3q@`O4P(>;E+$0}>FY5@7i?@1{l zN2t&$N|L>bR0uvJ%Doc198ZU`rK`N2>Wqm5cXsEsdShYRT8A0$_G#0%e{7s`{p#Tw z9Z-lo>T?vd&OCl~cV>g$=RO|_QtjEnNF;Nj<43#)*DtRM?b1mnabIdA4wD{UG+jv< zPIjJ?x5B5LYw+K1%7TR|BWeJGFgv-A}N#bk5>K_=!O20gehQh zBb4&^pWkX7lOB<)Vy=*E%=`o$$FMn5_D`hoSSI=8MP!dkjfDoD?l&wAnf z3f+Zj(4C`f{#2V}BM1>l5s%?e1ZKEx%P3QZ? zw7h27z~E1K86F;ALa+FxwbH_tl%-tu1o_pU7DbG$n3#!xcllMv6}P%{t!PMD+@}*9 z{*5ummuA^RaiLz&6G+7nfHlm6Z}O z6`#!S@ub~dq0pAf!6qRj=1Tt_)Nhv!PZy8%fKoj=PY{%7>1I{K28sY*fk ze5gBk@}pAJ*uf+i@PZ@tt1DaEtH$kZ%9OVip(&WuPQy4AeZp^SP`|Y#p-CP%{Hd{e z?io|d0O!5k9cSDQ)VpVt>Kn*$L<#Q*lM~9XeG$LmYzHnJ4y9-Zx}_aDgy}LOMC3`Y zMSUAj8G7-RK3iK&_NhiCaHODwr^wI3xSyk{;jOzTR-Ly5$HJ}nZT0tS_Ir08?6S4# zTEaxc_d>MOyf~w?LXcZJfN*J#%uPS&Ew#0sz3rpH-EASoiQK6nMmI4gJi*2)!$%3? z>09xk)E2cWAQC^_73mX*ZLqeGl{)05DQ`*TgN%I5Cc#=1^Xr!noDOh2d?{?V*@Pzm z0RR9a%Nx%<`qoGqw;cNTpHT4iIQknO%&+C^SFg0pJ9zLY3zksf3SVfocTm{&i=WC8 z3XdU*dg|imvVi4~eO;3_=}JxA#;?ZVm39q|p&h0bE+l{xX~P+{vimAKs#ks25_{`^ ze$bemQ~cVM)@#!L07h7O*KZA{Y|YnT&lI&tQe1UNaSgS4!odwUaE6PBQ;Y5?BzCw& zjuU@*=*9CKH__KF9kWu)x7K`J*4?&ckTP2=t!_5-5!ou)U5Rl;4)&O?F~|6q7ra%4 zvU?Wvw3gbobq_gmr*)M$ULDriKy5%Igg&wirJ|UpeF0mad|UzX-UTUILRAPTSQ^w+ zQWFPPe5pZ2!cuj54gNpzg!(bUzrz0jOkZgiOqMuL1N5EO`xez?RF*BQc#_sW=}aW0 zn|rrc*(szUmBNr5Kj5ztz4T7siFzgJCB5CXx7r=z7CcVqx&B*mYj{#!OE;%e2`G4} z=GzO05cnyRtdB_jB;a0+{{V<@U+}&v)2#6Tt4rR=TGMY1Ahh{YXZTT98o6 zF{y4jDG($cW9V1-McK4?jk|ig*0z^78u2%4Q@y5ylZ2%zN)C`GN>1d}(pghV?Z^m> z>WKM|??cj0@~iQ~>}{2OZWS)2I)P(Xd+zk5K}6u`l#cfKr!AfIg6zD9*2*lS?vk}O zt!@d_LU$m0Gs<_~tQv8adnZ<>3Lph83XVCRdFP4sP7PzNa-RcNVJW%0Nh$>P4hY%` z6on57?8bNL;w2!M8Qjd{;0X6r3@KzNCn(Z2LX?#b_u|H*%)#0z1z|9iYDgMN9|dxi zZU7@`J7$1GB$ig?i-3si)!N#rG6|L(kdB16*{GhPoqGMw`jCsQAh+6D5!!ZY0#(>7 z_b2_XEl2r9SX}V-8B}QxBobS66kHMk_M37Y?|(FT8euD2>+D)-@3baXrwk>cPC|RC zG7l_!GHH^&9PB91Osiie0_85^XC5Xi{(#gQ02aBR)hZ5#dkp z6s-#X0IRrLfQ2`$ViHFvLQoFCWLMdE!B1owwe0W$`(jLZx7hUm0C~^Gt(-hPud}I_ zE*;9&8c2yzB;`@hshn5Z_+#LkhLGBU%5G4Qq3_K3jCj{&!Y>p9F18jn>|D^a`9TJo z;cT|9(7OA|27dX%vDagYRr|m#O|p{HW)xJtDlxv1k@FS)b!ta(r=DN(w1Bb?j$j`G zW}4zwPKC+rl#gw%qNCPoFahRoX3)@EqwW8%J*(ppM z^pDoR&GkWk)CQG~zbT|&@aE-BHJIJDr#&VqSL(Rb;v7-{Cq~0>3D4JBYU=gueWntU zLD9d&#`HLa@Ly%xAfW1n%$ykNGw}UsS2xRWwB^E5j0sHh+6kG*hAXzYX;7P@4ltwr zylB6E*zUXviNG@v@TXnkF|EstPvD&-Zg$U2s?q13-cC$KTLnO$t-aKmG)6ktpd3L= zy7jiNY6ug!BzgQ|uOi`>Q3}#ilfK!K?^;%Q#C+?qk(E+eTWXMZ{+-G*a;tl!<^fR8zPM|@Xkig4)C7PsBxZBrUYJ;S1DH%>nLB$^9QL9h#UE7AGc`3d zb3ueBCMij0VUK+VkU5GynuL7+0KEht8Ika!rj>~JNT7z3-ZSx~I?}tLJ9C`=l$A7$ z$JddXF9n|ZYqmmil;`0^`N1AEm&1MFKUz0>m5@FZF7$giJ|DQHaT2d+neqDg=ACq` z9Ki&9K6KiTyUu?~JA0^ljXUg>bQQ+^B3+p&Z0BL|s}D*q9CN(nrgk&ed??or;vZ>k zD(WQtd#E0}e+t3u-w7lgI)rZ`k=hfGW_RA4VZ^W(1`NWw=07}A!u8}5XB4(v&l3oI_BlY=uD8EN5LbWD&o+G6giE?aq_Ef2>Gy8 z)Jt-pJjazAGNpvf3Fo#d>wvp!V$=G9!-z_;(5Lzl;Bae&@Ye2cS#8z!Xj;Nlqq1k6 zasCo4dx<)Sv#atr8K3K1H-f#yUoD_XN>slvm{FPA-JX?y!r74(C3;_^v&|1*3zrNbIHo5J!eb=UfKYh1~F`E!KvUdX*BA zs0v$TeiDC|awJVVY%I8x;t=8#naCh2bK%RSahtvy#BDof7jBmp*w)y9rqvzopl&gp ztASc@`;IEhJV8J(;>r}M03}2af>p2+1fL!2(q0DLk^6*75OPM62;^i}qxSqV_k*p4 zp|N_>)~x8%w$u`!L5#*h1m~2~_U>?QBHi0cA9CVcLCMNgFk`RfisPP=@UAAuHeXsm zS_w{&qB8_5B6h|+YtYUm!|g90w!G2UUANeWhy^XVAfS?e3cZzigBY(!xDaW>cWP3k zr0VV+K&Nm-cSz+w80OcdHW!u++VM?7<(9)i$krSQLQ*vjN`RR>@@R2X@IE4M_*=ue zXJQgke*%+@NhA8#6ZGuyJxv=#q`B?sN{H3rD#dyY#@XT5ud#L#i%aCCC2AhR(obfo z>E2RLm@$guye``9#}>-lk~M(hGd#I2yeCxH7MPLavb$lDb zOm8{csrYj^r#OqQsHV;g7}P|^Ve$_aq#glrC;dbgmIw=a|SyR+Tq>O2hdWQgG=*3AW&Z%>8F#`x6?f3D zOg`4v2)IiO@J>B)m0gYtWThpw+Pw2kxa*dh6&58+Qmr%_bg0{<5$J`t_+`YnQc=R~ z_;(n$yl6P@7W+uOcI8e9Qu|=)lHN+9-8xd=v678NpGbIrqP$ayTX3bQed^j#k@rbL zloM>p?vR%M0Pb=tCw&P}^qY#^ac(_(#9whv{h`E^6=y;c+EA1xb`9k)AZ~ZfIOaTh z(~6w^cvq*1YtnuqcqeMq;qIv*$RO5C}P zDj5MHCkm297hG(`+Xa}9yg}_+B>4c~6PVCI9#n-i=uv5HtvDmIAdJM5o_UN7=*)~M zMOg0gOyhAL@tTza03D=m4l%ARB41{164*{8 zr%G1}3M%$WQzyK4rfwK-hpgJ%A=ek(*Qgj;&gZ6?+vGN@XI5T7Wlt?r4@{Q)fij)< zigNkh*=$?3m8}33m8>9YGu;pjoN^E;BkhXqkm9YMOrcQ=L4y!M+h}ta#4_;g|n#7`+)MRX3fhbPH_jje1-OF(b<2r zws2#_WM;U1n%_&QRnw#;#U*hXU5~|)B6-0X^Pyz_01tI*wrsxA$nFII;tWC4sH6~j zNUO%4a_yUo+fdcH8dWDz25?uW1I!YU%~ix&wOb`E5SQg0o`90Mk?fJ24AVR&+p|Wu z)?Fe(l;?O8(s!pgO~TWpTmpgY_dr*?$Ja4Qv$g9w zGuNFS8*4DNIKL99k9X-x;cc#e>KurK=1P6|{Hy%A-(hzlO-SDgAaa~Xk6KFEVK9P@ zk|5`=O1HWSJ5o=m$2#EGim~DhItkOPC4MPAI#rvjy=oK^j{8|8pTq>@{dBKOxO$ND zjwApKp6KP6`roY)20cqiAjs-ITUFAVXvj#K`)N_z10T27#+7gt&+^SF{V}9u@*kZg z^-fOQzK1GOiiHwzJSib#VT$h^=%ke&Dh-tG4mQPWiR(#m1Y>`$wc4U0e!ex^M=G~` z9DRH#CPx1N)9dA3c~eTzw5y`OTJ&FuOG05#BbeGCN7gHh54T&a^HNkgkNA%t98aBI zw5Fe06e0=b5uZ__CO)}(qdk69eMLu^HJa@{zJ*SIO4dC}S1-@iG?}Gp=R8Q z)bh2BDLm@J!|aI(-ULlIu%HEJt$F&C54)e1)u9a;F&O2)KAv>%6m7;n&Y+&>uzlSr zzRa9K&S}-!Tw1gMN*!!zS1n#WJ=JLIcCRJe9SRD}5M%4(TuS!R^T8ftkSC^pA?~GL7S6O7=Z}>yjNIIg&ElnjwxSN+F+V!t z+(pY5lKKoNZ{?CwdV{eOTvv+PaRaYMX7CxvgVr}Y{{S=^xAcYn8>uWT=~uLzsVW{L z5`2Di{{R&GSyR9StmMWg=6&>T?#iJmQJ=yy`h52I&{NES>5yZ~H0K?=T0>5#t-ZU) zQ6C*Eynq_^s8uv)uBC%gBCOb;C-nmj@DLfKlIo`mhvlD;Ewl`ZXRK}jJ?2jVgP z4RBvaALG}i*|h{LHn%f52okZe&p`%i@6osTP*RQyeExg#`BU6qhybROaIn}qbg9J| zk2OH~(}mZRg)1slU>FlWT^RySNKz#V$T^Agz$U58u~6; zA8bRIb5s!A48&(DKiVsbaC>WHI9py@G7Vcj#N1I0sX>rP)hFN%=W4XHPPZL=>Ts(Q z_;cbnBNV>l(wG2_QOm*wIIUaM_|o0M(?NZHG+jzZk1D<5;R@{A9kZnA4UBiX6A|Vn zVwC#sSE}%ZBq$VHr~NdoC-EP}u*7f9DL&75j?5=eN)l6*D@aa_)S?cQ9WXn`Y|}xv zuG+O*?P=5+Qz%jiUZP5&a#pMj1i&89&Im$M+7gr`B`F$Gl!yQf0aNPqi-I+H&X6=H zC_QU(fCIKSNRr#^t_evB+-#(&Nhu)Lre9=lhL*4GtX|_GlG^UtXfhmLoV*)ZAt6I4 zS_+Y^QKf((JWKrd{{XdKA8UPieQ|EsY5Rq~n}t7dXsA-yZT%V)*cy<*Th0Jf8(WRG z2A@D}EjXtQUlt95-OG#YN}(mRA`+{0G*qzClccy%-`x~A){;)NqtlDKE*rzqXgf4L zaHO$r-*Ey~3u)*Qgz5^w2|yFDuS7jF;$DSb+FW`qc=L=f(k<_r`|if|YAO$ur2#DI zD~C|$dB9;TrNtG1$M~hgIG+%6?M+>=b9Cz8QDv7dnw77;tFlPAOf68Nt8EEZp{&6) zo+E2^*J#blFC%G7iBSY#q>0p(0wAP-q09=pzP7eTx2_mvAI|HjZ8C5ZsbmQ}gvsP9 zjrw6|`%c>MTibBqQkZj!xTE$fRTL_F6=2;yF#(Xa6O!YhNiC_rL+);FxRVUsIevt= zm%C2T=(|&`rNeMW%Oy&JcL|*0D}+6(h1r)7ZPe2UWyY4BCABi1&I)9}Izom{6f$b+ z@ptHc--osySd^C*e&H*|6_BMI?2+%UNBA!n;LE*!;nx2E>I#&$8%WWsy9z@0AOyk! zvL#c3YliUqJH)$taMx*c^3;d5cc37`QUazE26oKk&doL&1qnUD8bo_NN6vgU^#Oz9 z`cS7Wfp@klAuu~e@e0u)5_i+zB}n#ELQd(+w&=OLzV2&DHjRQt+C!@;PBH$WQI2QI zo8bDEZW(n+ER&@RQk2@UkVo~SWLCE|TZYyYPP=a8?=!zYeSg-rNNoM20sfnb(%|t5 z2~6~pHTKrRf-aElvdIzK1q2<&7CX7zOjmUGflAW^>Os~zW0dE>c=Z6bBsmH&qc91d z3<&T7d`(GQg|-TF-XtsFGDc|{kv)sLCJ9RANzZrr#DBLKh^4gB^78;IaQg*mS>$`j z(69dh40u(uw>HB~waagb{{TkhLxcUjssJOI?=+)`B=1YOQFx~5w`{vd3Y79rps|bv zw>_ARwS*lpXIh%&(ny#e+LwI0ClmH}Rdj`@ zBx+oZXJ8bp{&7pZy=@(>{jIXCl^vjM)h%dBph}Xa^r{XHk`6E_E8wmB2GzBzY@{D{ zBz&pP!&}{|)>OGIC}kxnJ>3O5lk=YnwRZ8|;;$CkB1B=p0oavzX9H?)h~6dBY?2;7 zg~gcpK|dpycEi#lPT9xsDWBy+nxehuK>RNRTh}G?-K@*vdgzh@>r){j$ zY?oRo3RDo_R+Bv8UDa+jG}jMx^rv0r#KAaoN@JGLYT0jg&s)mW8!@Q&wFsPa9}4W= zNd|h;rR_v0sU0`dKJVI^v~}51NXGLcYPGdnQLA~HNF#b1XL?rEI$>Q5@6$gz^kVQ` z@Wu;d$Us3Pj!}-duS>0nvrB|!T>!}Q&(Np94yro(lrTq8SBx)lJN{o9O^TH#SL{4~ zx20NX$@=(Gngod6lG8eS#t8bFQc_2Bj|^||t!pF+9d`XFTtJN=@|x6@4)@AvgE9%l z2NxnuYD$0y^8S_CAadS=X$Nf5(4C?`w9^d@Q_Jh6H6RH3=U!BQx7WtK8oJP;lBmpQ zU_URcQ)v&|oe?DmygJ5qpN)D)Y+JZ0(}M&b&+C6wdd(3&>MkH-P@a@p(l#|6XfU8A zH?GNDE9}Qa$jx>}eCbUhJF1h;KPpQKC-kLTBn|TvmH;!#l+!VVeSTDi+6GDecK6eT zg?l~}(izqiv)vzEDdgKLC^5D_y&$sD)?rafx@B7k6u3@CQmoI^&{X<|sEWNp6W&(Q zS00iv!_^Qlc>`8{lrwZDB6r8{`%@Qbbs{ioyw#MJql>6Gfq5#Dg94N^-=hxpz3+)D(-^A1DbC^4Ro;7D`^OAI{PlY_n^+XbW zf2B8I@L;&4ojqf0cv3AKacOJ_B#iG@+#TB{(b}MmLmu%xb6g97qljIGoNyrNI&};Z zKM0cqm^}K|9O1v^>J6tGkCrkFd_S;dZma|)MO&O5wx1mRbzQ3UX*=_opE_^Rr&Gg` zdI(ZnN{ADl>4S;K!{=NLn?|qNH>gQtU*3fe!f_{@1Dr*AO=D_=1=SX-eA4XtRH&X_u2_;VoRruD@*LhWulBAHG+DTHu^STk;vX}!`?@}mUL zccc;{VauG=hyMU_c%v`4fI}{&L@FUkoR9uB=>`7)3A?vit(`zqiIRxOKg+aN0^scN zek6-GUkwK}1gOMnNGb@45=>Vb;7Z}Hgz41UOim*Q!nj)aZTACe(Or`_R@#uQdQ+_= zl9i;GD#i@w^lj&T9O7c`+0>rNWTd59fk_ZTya*&`&bZg6_WVtv-(nE84Cz@T&QzJN zMYv}V;~Z1$_hh9mCDPdumr$KeqcR4p_?W>J$Ne8XG4Q67EhR&kCMOfq``7um4&q!P zq+B@C9chNzbqgUdrjQdUk|$}$&Yrpd04umI@b`B;(T;v{59Lm~d3J?3`^UbK-JQn! zKm&fYZlt!*N)mkhdE>^1bgE9~X+}*ce;QlHV4uiVH#=43^}VV!I-rrT6W%AHQ@K53 zZPf!b_5H=#T3Q$OOGtCJ)D`x%FJ{9r013$>Om3y9cLQxgl#4WKQ8U^RsX<5aObO?S z3F(?cDQuK~^$*9fk(9|Qz>cvn2Qw5B2yu4`P1JUc_Bz&WgStk9zTgeG_y{RfHng_~ zK~aKhgfRQAm)u;T2+$IQ25r;cRCX+cr%Waws#OuGMur4(+K8>GNlS@SYZ4S7j{{zr z`ZVS9F0$KcamSid7VfCRQ{E~`Qp$U)K{$=)5hl1RgVHZY7wG-k&A%Mr?Jm~--9Um` zN|u%`TTz6mr<>9U5~QptBzq-ZhH+cZLpbWa5_vyt;rvBPxn*c6?JO=}AxhIQ<4+_Y zI0}-a7Q)+}^G;lg?@4_(;#OJ`w{5JHEgD;?YfELsi7i*A4IEikbs ze2^nEGqLz7I$=aB1Z-qu!=y~fP}-8RL4pcqN>r0P&$Y{cEYZ@VB|NZsk0{Ud#deMb zMxf$j*i=mQo&1t~vT1hKZtmLc9N$}INF`g6QZTvL>j$ZWNOtzog(aYyv?v(LTYLkE zQRu`yUV@+{n_jrA0mo zQOx+}tn3qOtH0Vfr4=n?$t3ge^6s@eo4NzGWT z-Ii7md+*tzwG*QiJ4Q9A+N+dWZP8dIs8O|dQSB%CHHur zRI)}y{M#?;<#9)$n+5Nj5j{e+h0%Fqa-7$$e&Jb=FZLZ4S6R2_115AqP!srw{9d)H z`zsP>yk{v!-$YSqe}(gl>{piN%<W=7A0(|;SrCDycYO2`kZ#c zZi$t*K6`6jPL;jkQi+)0yZWmN+gG~E-`$4MsXx6VI3WU5TI~R_b%5comzNEWT?Hp2 z+9MGrs=|lA&i@fH8}|e+tURi7OJ;7W3f1^4HnA2ZUTSoHw5;Y3x)J7L9(4ba2Ktw= zc9E^<9=INQr<78yUGd)(o~xt8c@~D#3Txy(dn3vqAe|CXgpl8xZ*Jl;dtTeLt5hk( zq6xfred+EE8a5TbJch%<#j~r1ne(b9%fQqc>FU{k7c>E{_}4nVZXOhVw5#O5GPkq1 zo;r10J$f1GD#y_{o(U1cf(Hl@3YH})dKq{sz*T+9mHMF;L_f~4|L+lt11s9dMu~Rs z>2UK3zRUl4dngH|i3?Fh`E0tu(fY!PM)Ut>n#0?Y$+tpBWeUSBH5tuEIIZJ8`gLOen;2M zOB6rcvQ%j(33M$c|C5HlZ{N<%<)&S>{{Z}_>#&Q>XgeFyT;s}DxDAAcnQA~1KtH>Z(j`CU*;M_8

OdgL>8jKgR8*>-7rT^g|dr2Ku17gdi=-#fs~20Jllt#7OQyA z*~_s?#JCy$fpURhY>$C&VRp3;FUZC-&t3gL01?;tfS0AQF!Fj(a4$uH3i614FV&x^ z7*nfW0$R@L12emdhZ!oBy*dBFmik9iyE=%J+FW)ceI71itOR1s;Y;|X^o@StjcoX; z%l^H4;+d5w8LBXGb}t6r@HEX#TmU3$d*ju$VY6wh(ykWmI)74%Xa+yhmtD@#xAnfFZ~zAlk(~tBVX* zYety)9>2Q3Chg5ME8L6VJaMDoFX{yZ;B=^P9aWZFi~+>7=uxeI*Uaft-$&AMw`AgF zUd#Z^O8o(=Vtc9HUu+)|8ZIjvBl;r_(K6d2CgpEOOXCQC(kwwU=00gPN1$xhB{-)q z>e$#YT(ET+UF7aivK7c&G=vvu}5und?i=LVU)HeA(7`b~(yC zgdI?OeChb_y8(v~yY4L^hsS6y+a~mPVLXdkGE>z@Q`n>1WnD5xws0e}yM5u@#-}oq z@9_<))0HaIP|t_ztmgHl6=WdhbJHkLjeR*pAJ%&6 z_fBO-XVLhg6hZ!A-~-{6L1Br9$|)tvRWtWw4QVaxL`H{Sn?d5F+?f1JRG(4L0m|M)nD_?%HxA8Y$GQTA2i%;IA?b=Srz zUqBYg1&2Uc``Fp|m{3}jqAVqZ>z5o*O{PE{0v;ungM{*}7N{Ncji&=HgU(vH&qm&@ zSev+L@VELHl}dlks2Ga{FdebTcc?y=VUeeS4>@X&M*gg%x1U@?=8F>2# zz#sti@>bnmCAK)B6XxHcc6rgZp7F(#G|gG5!N6Ho-Go8bu+6ROHv!8fJJC^OnRG~m z#Vl&jVbLgk2Uq#k@gVDz=61wxdhT&mq89;%-qyE%a)%?8ek8X99q&u^NSP3yW0jB>pT0ZS2k!vM9x8?YB225sAIl?8r`c?oO&}BHV)&bL}8eIB5G{Ip^c&!6%cK&BSa_242$Q-820V zRiZbo8d$Na7TM6~;Qm_a=QwnKtjgdtcO+Rm+Xw1Ra%^yPZZWzH_%uXS&?^14Z;!Yx&jKLI8s zZqcHfpnP^&frhV|0jYh2rvPo+s<#-ZV{xX`Pss>hJGVpOHDzd}R!l zsvNOBeRDS-1Nps<*7ds!zGn;$Ht$1*r;o8oh0sWVciB>&TIHNcLZo9`j!>FHDrB>a z(>sJBsB!!rXX&r4Vx7n}hGD{140b+x z6xXSMjxk_PI&8E<1w zHe|k>TCu(V1)nvbFt~fN;?LgJFF=%wc09aqGl2KgiIlap_;&caw% z|M=N#y%~GPG`wFdQB#G881maNl{&=RD2eJCx%T`p*ZgeS%k$8B+*X^Ea)1aa5a_Dr z@LHu_GVClZXcfN^s*?6z+87gU8=AcLmgFA*9Bp6#i-`u}R#)!!CU?Z8%Wb*=wUpHmd_}yDCH@Z zG2Tn&^X11%lT2QN1S#PZtp7UG6gy-mt~6GJLR(Ejw?L5W7~gg^t0J0vNo7Bbf0E^= z=C`2xB=3>Q?lZ+o`LnT9z44VHJxP|F5zLeekiu%XS}E2Y=5n2XRzmZ(kru!yFVE3p zELD@)?q;n^H&^9tJU6R3OP^J`dT-L>hPEngB#G8mSla~9SI$Y#F=nOtTtQ=K$YQ#( z|JTE2nTBMURKD7hr(7)tEHg3-h5OFK0fQV~Pj0|Zo>x_%i=o0OtE z08>hCwPIO}`KHjs;^sqo@Vs%?xq%=fEcy7hNk$+kaCbwkh`t95Pye7)RQj}X(4J$ls9E}BYtAj@m7i+$>#W%{O6(^y=7Ztk396Q{@*0nbT`NxOv}qC3xy|7ie#UJW17K05j1I28M3<=0Wj$&h zpZ4CpP*Hgh$RPg2@7+Bj>g$uu@T<+9eeu2uC7>vUyqJ9+T-c||<8E*dCEBB5cG}n< zc-xw6+?jUp6OusDWo6El|I73g5pwdi(U-3yhRCWV`~hdPmUGP9tAdl8sT?`#f!`fS zjV7e5!8ovpj_|sY%5z`3itl_6UjA)f;AQ*T>$_K)MVc(9J@@^0AM#D3xDKaY+*T|} zz56x&60#e2iFL7gAcFY((iBHzIl`Ci3$1;lPYclGh+Pu%j(sltTwXlE0YJv`mDydx@0#D7QR%yXs$oyKF zS6)a(3H9lXOuCU8<+ANpbd7b*+_67D$%!8UHmHLH9fnZk;Bh<9Jpep1Utc{fs1mhH zvCNjde%<|}C*kF^x4smVYz%t$vC|(x+~P5+6v`j37I9@x9_}w_-WB3ilaFU#W>IzL z@(0VxG*_N3^@ZNn! z%X7~DaNeZ1YOmLM_G!uS+Lv0J7WH@63b9~EeF+A!<>d!0-e2u|Z|!`z==d$oZ`An` zt6=w-ZU$~}0`F3bx?F#`yW=d|n#CR+^Z34gPgYpKUa4ll%kiG-fS=T?Ibs!R9ZNJe zGz;(UGwVm1a==WriA6D3N_ui(vu4b@N0#%`93EoX%NCmw?lz`+>jMdOA=a_He}GSx zF(GL>WLG-iyy=qIsPZ+G*5Qn_PTzL#q(&9uxv2}PBRkYpLXx;PMfJSxUbRO@cSxf( z_MuFu+}P3Y;kf5wo+H1k?GPQw7411=JjF!%@p~E(XH1on{{Gebvs2FXLN&VvuJFXO z`CLirgQC+Pq)md?^>NbKbI*X&GL6&NF$2s}_|WXr;SRC-Ee~J`Oqu`Uw7^o`s8E(h zs?>_7&S%PENIfpi7GUh-3&6xusUB24H!u5~R>&T3%VLMWlMf9Q4v(}pfs%efKMd38 zn40`7-q6fyz^ekc8$3ZcjyKyjqQXyJ4M4>ysxW_&iP(0(5+6NUH9cuHb02uAZGhb( zZ)?s8ayQS%A9@gtXmxPNGimqDn{u(E)O+eVl-V8@(R%i>=2bG+hIJrS_UGm=6NBN_ ziDOkfs>a4yN8JM9f6{aZ z8M@0WwvPhj6jMJwZNvOsNevIjddMIGq(aC&)TpTXbg&R6X|ero(~b%D9ffKYo7E)6 z%Op{x;_HFa?_Ojm`SDNx@*+8*$7Y~S^l|B9cxC}ZRcI(*r@(X}^=ygxU~;(F-Wd2? zZ17Px+ILTLM%jve$F;QI)aGtXMC!Vx^fnl(~Lynh?>u zVX_$+C*!yK0g$sdgIl6EF?)UDwBWbelH|bN?hl1{BaFJ0E!9`UtKw96+Z+9liS-h{ zH?{lgleP8RtppY?6c<1EIxVB%MukyYV^?D<1|d-YZem$(0NdiW%yk%y9Fb(xPZ$ABf z(|1a^el33tmJ@T=SF9tksys2!us+JEUuj)$n)vf(74>iWf*tj9qAEyO0(?<=x|Bwy zl@MPO^Im&C2ui-9toHPa#S7f~wP;rp+8AyPm4cbFM=qu3a1ZuPmwOb10n#u{5LT<{ zUUbE}>H#d%u-^mh>U2u;6asg)r2Y;%PsUwy_+dI9WU|BfZgI#uDl*y z&;jAncVo#4g-i*p=!)GI0xlT1Za2q_0e#TZR-$7v_IL_*RsCnzPSWCXzDsD03|G5v zFwV=+>&Sd0w*AmM*dpszYF&U=9_L zq0gm*n+*3#AV?hc$=-Y^ch@fKcFm_db->To8oid<#0gDFjxILe!E!38&Nl-Hg`Y*6 z=^n4`mho%%EwTR+dhl$*G4TFGD^3Kz+$y9q1XxrrK}$(IHO7bWt9!g^^eZ~QXVdyv zH-GbWGr!(}BUm_Y_$TFiC4Bky#ZPW<1L}1$`SIJQQudh4f!IpwK=WxJcU8pQuUJ z(>9Y(&wf@<5NDTg#mS6=8*Sq`q* z{JpJGEFZ*6Z+-2^lg2~rMW~~j$1S#s7_ib$kV}H2Er_%amE|OBE>cB`BWr21qPN8D z*bd69#c`Yjf+0o=`VFqWEuxBLwtY9ZcR(R}jU__m(io@m)7tL_Oe07`;0|c}?eWm| z_Ur(=7L8-~F+ZhIe$t#&-jfbqi)^k(u8ZTOIWFy3XI=3YjUh{IGSd`skBZ=c4@l;U zX$VZx4K|n{49$28OIJvUOUMxR2;==r~YPgfQ35ADO z4{&~-h0BQ<5yk`Qic%Vm_xy@jQU;`GWatKX8(QHW4ny!h!o+fZy>(-|7SmT(_&Byq zLTZ!zRCvz1*V{hhXk50+`4(o}n(H(D;<^V}tjZw*qqEYE<$>?rR-SlMgM%Bkk{&pA zjWdXKQJScaX&==~H-vFiYM!tQ%VekMZ^D>1As>9Tu~>x#FmT_f*LTIRcFESF=N;6# z5fL2h`;X``&PDfCs6nCg2ZwgD3>7DtV11oHeo?73tXR*FBZu+tn(Hvpvy7NSC05^j zhX%XCq6s`ap}%6=N^#I%p;U1|Rc9+vl}TW>pr$4qg&1~g0H?(!cea>$YWo(< z*E&DE%_Mj*umb&zxu}qZ7~~mSGf8}VoleZ((E^-8FOI8;>O}=LK%jQUwS%+0V#EP1 zx(p{0e37~h>WMbpxY!sx=vfzg;yZBR7CTE*9}gSYFm6*jRJAHS#!oiTPunetKE*5; zvLaz>sZ&!Uldebg9Uf~)C`LxW+g3?Lw)vNzi}w={?Dh7Clca6QxPju23Kl#UEmkgu z@JbDZ#5YnQ$k$I2A8BGGVc$`z2c?pR(n4dKn|+1bmz#)IUUYm#U&!T?v~IqQq#x9o z8-i_RIs~xLH?i|8Z0OoDOHHSk>J-Dmu_DtNFQSS3P4t~IW2pU7Fd*i>mwQV2;gHjb zI=)c@**oVWvio~^W1fU>?9W_hvkpocBm8~87!I+=$5oVS+4l?bpBX~dnzk}nOwTXF zQ1|3I8IXfwm6{#bIW^2Dsz$_R=~Y6yFV;!r=+H_C{7_6oa|Ro9m_NUomw7t={(T@; z{6HP$uHrYMsfqJ4*3a&3dxB*$6bHlAGAy|HmJ1L|mR}dY%KCll8z(i%DFZS;*_vhT zD7EhxYbFcnSEIMayy`PZ36oeK;lnQ>cYC&kmSpdSGN8U|)woDaj~MC&FE88rM$11Y z^jYR_b)^L_d!|*jk*Y_FfTnBd1ySpEnZwz~;r{Q5V5bZc@@}75T_Sxq{t0zO)*OhRD@1fKRyuobO08{q7PsQ`p%ISqI9ConU zq+aPZnIo!J!T$_XUoPHzg<1Z+5Rtc8ziHH&IQEU^qE%=O>^hF4g2xnhN8?O8Ig=G5N{(RxL!e)pR|D2&L+MLAz zyNw6>=ef234xUv2fFMi1onQd+fQs*Tp1OJba{3C_i5yZah)h=X`ck14-rETB6AjLX zM;Bn}SbacZgzM%98CkH=>nBO-bO+0HeIX&M69FeqKT=(`k3Jn&)nDTOY#*U;Mk+;h zJjQ45Ce$aOD#j9K0x>z-=)Y^)NOrckC=Ldy>^k|yT>`t)x65Z)^B?BM+Ya{aIsd-3bm_Se7%4bCSZ0WdJAFyLGJ41Lz< zhWX4}Nd7`581x^2$~XDUXeokNV{$C8nu3yG#l$Leskqr{}@7HE{b;v+> zaLoAU0DO0YSE$wqi(y-ZJArwYb6s0EUSnw#udN@1*D>8xR=!(W`@3$kw7JkehJsbh zgwF}wVVZRg89swqML$bdMiJW&Rr@8STu*9*ofb|u59jYIxC4AFD+9J0#4c5f}J zfJ!MTV8JcI#w?55%`Zvb`TZRP{566~T%~&9aT;g3__aK#X@Pgv&3142U6-}G&~RiK z4Cz(OUfRtz89Y%rm7gj0CX92m&+XyQ)JSWvTI0Hr^-!ChbHnR&aY{X?(H@jUd5_>NbgG3rGT@G3N@HfAt+7KSGf;r z(7l)Wps7BHTgwHPq#DQ8f{BXU$A1jU`fRcxfEJ~#rAp9{fij$cR@p3Pjcdo{*dKWX z>c)d0nye!7LJ!N75`*C)znei%5wQNQ%lqN@c)Ql(}HvbmaCl?;Dxx3>t z{Q?y`>{pMMIFoSk%LQ2G4j{1#i~mwj;ayu&`VNHCpwa(|)$EzRmd$?n=JT@$Uq!=w zStB?de8&sIXI z<0Kwws78$Ml)V5M=a%JJGa#2(UhW#IkcQO9KxJtijr(}vhAkn@YV)WTiATTIki_`a z#RqzWRIaYH=NhRS-M~olTV5Fmb4z@LKfk9Ce}h&3Q1>6j z6waIW!F3tv@5tzGu!&mt+1ZL^1$|4qYv>~JecCm_v}d;^^Q>xt*MzTQG0DEkAB6PV~=1v)*e@U3-1exwmd;M^*R5q(^ zl=J9_i1TKa0Wcht*+5NXj-8D1^VWN9#6NRZ1V2B&sBFq@GI_|`I!s0@jf9-LA#wmg z&yULajn-9n=p0A{H{mIWV6jY6&DNS6Gq$%wxShE|aZwA=`ew2H*~;XM1FFiZVXQwN z^5sY=%2*yg08)Sc)XGp|ya+M}l$WBGe!ieT()a#7HzFpli`FReW=*`exQ(R7aARME+A z)0eo0*C*dx$#Icur)l`yV_~=w|GTjl?PvVHP!rfU_w@09%OQ=8+ID*NTSa$>!FrK+ zZ&lUn);f(}5h7wp>e3nG|qzOvUqfHsrX?sA+~OfhLQEi<<0l?Ehk(-M>IcC#VN zw#?mzuU;|nDr^{GX|w|wO!6RVcUCNCgLgnP+i6hv959CtMU`IF*5ui_moU+oE`+rq zX(RGfQd8zP^!@U8vovpN_T`?nki{+%~)wvK2X>_X@x;iCDU(2yVE99z4B z)Op%rkt*Kzn(U@P51V%0InX;d_-A17#`MQ5zod=CrN>b8#8m!nfmUcRch#`ac7#!3wQ1}qhZKSZvm8U-G`K!e%=G6-u?exM>vOOe|Lx}_) zRJrd0V`ZmHqpbOdtzkmTG@I^9Q}(0cLTLh1+TM5+>n?2j#pp zx1!hsy1E2eSgjBO_4FAf&ZHN4@yn@wuIof;kLQ796|$}7CjF_Sl%mi9n~cUN z;m_=pm`Z9q__w7KK%CM5HdxKS`5(YpTaILA+=v-Mzy?cE3_1j0;9Uqo$r6R-b1OzomP zPfRG@POTg#iwOUVuOlFF>bovvSf*FEK-Y6E15WKM7()ihWh>Tnj{e6ENkjA6#9?3n zy48K8ekkLIva~N0;jG`9`92w_L>E!?AK*hkfSmjcP3=!K#G0R3Vtjo9?Ug4jP0+En z_=hFXnZm2E4X%w5r<06{%#zD6KY69C8bpg6%abOMzc>V8o`(PET?syiYhh6yi@Ay; z{Ob%4^S^(-hyFQZf{zvXd>GL+A(a=Z!NK#sQaE{EeyHFvGbNXBI&X$w!IeXSHHtJ0 z`tUO_H`lH;b*_R(!azA@42RUq(Cf`*a`+Gsrxd@TD%-HwH?B!Z4DHtX2j$@wP3zv15QWTHs`ugJnDugMe?tW3T|#bru~d!}Y@CfRsMhRSb;8wLpE(u6x@9_?Lh zY(D5mhTivGA}{bQBwuQ_-^IWfTlYn{4>1FMk@*%qgsoP})xyJ4y{#eKs_^ z{pLK|NdS$BskU23lrO6OX|S&&+!y)#AK>HzUO!lAHXrw6AHN?L*O+T#mSAleJLH#< zc5lrX{9Qf_BVoiDldqqCdJ$0K^L=WrvVPs_;UCekGi0;NsEHhIYobovNZBZ(xZt)+ z-9y&28W#UY;4Y5W0w>Bv8a3CZfX#}t+H*e={KX`xg=&Cxkxd`bItG;=cGwnMHtn+> zR<@O!=SV~5RgU^6#{)I+%zC2Lk5Hf5k0T#`=PNz_QRW?cxqbp1PauVtemhiNSsu>% z6ZiVL=LSk-dJ>U}=|3+1gO`956l@<6^9CrrM+ge@ajsO$O@GT~{rJx{96I=FEoju% zJ?c$kC=?#q+cHY^sIANR-E3Da2?k{&7m4iNM438P`t{*A<0=>Hbd)cT3I74C|32Gm zTyryL$ueGVxJ&r$i+l>sIoSCRfcRV7|DpL2y@^!20Xs{2>I=6c1{G}!{zEr~3wT*GLRM0Rkh|CH z##2+r1Z(~ADHQ)mALdl4peAKvMyBV8@O(JK=$%aRCp>3ramc@a+k&L`b@fO?MJRq-F>e>5GfS#E9va4-IhbW?_&kxhQ$BxQmGsY>>wP~0( z!dM8s;(4!w!k^Ua@IQvu8h~OlRQPvc!Tq<)jpJ=H5-fkDTiL>2VT8d#L73=@Cyu^} z7nPe!nX~ds$|k{{!WmA7r8HOy{`D(z#aX8cO7ATKw>)3nRCjyn&DMilcnCy{0ks=7 zRa%$0hQSXUT{3U^9+ubSLs%<7wacyWyno!O)!6P1zUC#kKTP;oeT8fpB5?+~>@s5B zL#e2rE;jy{%wMu%Rt8!p3;-%JIZ{H8@FG(aJam07A)0=3#UA|HU)_vK-w8`Q!Bzpg z_Q?-_zU{b|Fdi=g=Wpu`G&hE?+B(FMX5P2C*PobeG4&g)YHZwV5^6~+Md1gGr^Q-ive;k;znl8$ac|9?cP5^YYJ3OloM0~#(aP;3MIu>QX=+^ z+s{*|OH7~~40P7r7l=nn1_Bx6O%<_kjjFmR7dxfmv_zn^0ObpE!;Vs{>j1(2)z#-H zr0vJF7%%f^355F_HMxx2c)Q#zuH;Fsdl!W|Z3Z0oyCN3%J#c36bF zjS$J^g6sM$OhpX$t}{NQz@*n0-z~Ti7pp7TQ9;utRw!ozTnwK>vg_jS$Ww^x(e5|gbB}wDlPZ5%lL)#T z?y%NwkTLT9(3^OW{zqmThLeranxmHxmgcBL;}OUqW;k31eBsnr;_T@hP&!NZ)q_%t zXj)~v5WZxN)jt43;D6}lOp`O*N9rI%|H^K(!+#b7A^+ofwaXMpbCoLtHN?m^-0Z#WH$UQg?c0AzSyA^?6%G<+`PK-F_7x5at?#Ek=h$)FsoLc?e z{G$C^KqVtCMh)F{UCVIfdv!HR-9ML^r=`qmHZO2>%u)x8lK`%I`_yHYf@M+22HhMz z@!VwIHat*vJqpg{)rHc3T6CdbZw$PVrP! zjn9OOv}maFmNFKE!PH>jH2jV_vt|f{IFu;cA2NYJ8~#?xdrvhu z?xZpx|J7P+=dk*EFW1J^h(D8^xVB|{_}BjcS7`g8RMYq)(8R|nW_&#Wew*%&0CQjd zgREW&l!^VQ@4>&}ztxiEx#xWAF$tp;ySkp^(Fau#yeor`w4>>HqsHmFbQh304}Gzpf~}7$qjkvyE&n8{N*% zt})^1b9Fc=4mRZN^=g=%=O>$3Bc;gvpSJF7`>M25op@OkW_ zkY+qbDFuaDqJ(55c)z<)>t~m+@2OL6>SUWm0z|J+MX%bSp!dEjs=Ejd<^TNIS99Cy zr75CLOT2b7S<akm=2Em2mu??<5g1zae$Rrwv@WFfv0Cd$ zC-x-gIAJ|?KDGi~fpkm_7r9YM9wqJ0BvB=)F60br5@c6R6vPMeBj+cY{Vl|gD ztbKZY*-qM?!6qDjM`%YV?$Wm;32=$FHdqR)GQOjUmvLoK?H?-qTRrgi?4KE08dup1 zTG-V`SADeH)9CoiYuZcRI}gW{k{J_!%Vhm!ltAZDh%g%zdn0-!#m_w}k5zvvb!r{$ zlu^@8I>kJlvwP)YP9xQGC%?edD8ckhXr>`CQK;*KXpO2OC8kh5U*}vuYa)2vb=!9I zC!Jbh`s(QtAzajdAzntrJ6&vXz~{t*Fycztnp#;prD+{EaV}8fEI8v#SB)cv|H`8A zx)O|9GT->15wtoo+>C9zq3>9W)c^GB=%5f=Ib0WPz(R&1c0B4`#d*Erv!Y6FCO}3J z3`&s0v!sAuTRSLI?$aczQW`GuE4`NlDrKkSmfF34#wxAN+bNRDUu>+^)=Uuw%+Hlh z%oG#1&EC6LM?~;c?a+A0^0d@HG?B$W;2zJ=tq9Y*hPG65o~Lh6_NWCx89CgsRlE}x=^)v!p5F=(%KE`7esXm zzT(4R$)REFH>!UT8jq@8#l?dS964cEp2-UKe$qA5^N6PXP0(nRNR#q20tnH2IXgkpW#Y>ma1XP2u(t3zn#bQ%aQvOWOs=HLQwl4HV}K%|sN7bV zCeYSLp3E*C$cy0KE1%qR7hNHi-=z|qdGQ|3kp3y<@41e{HIy`xgw*$7%}XvZRZcnX zR~=ImoNLUQt$aNEU|Q5!MSpYTGq{x2gpZ1$>x-?u!l~U=e#qjfVwiuOXsA|sMn-j-P0$X#8s_Vvnf(WA$q3v}`#a9i;$p$y?F*(o7 zrcSjmlpB9tL}xon6)h-OvSIrA($HSX+>-fHQNA|$b#CSXjeNcGrh z9EfYKWQkiJD@_)o+DpDK`dq1``_XgQb~QgTb6P~8*k*_M08d^9WM!t$qf*8z$_~1J zi)|me*!1pl>@=DmG|L@Vy*cwb6@^(=GWTw z$(>`u$0$9#0fHEumky>3WUtP*=t0|lYMI@&w;N>hLA}68Ko;_pV z>|;;{bn(X>pB)@2&Dg=Ud*h#;n_Z~CxOsP0Vvg}PJ875}cW0ZB*4bOFUTiboJSYxa z+NE;;^6`0#A6Y%=51A{H6OrffM>v;A`pHHN)mKWt%?EpW%wPo2^=)38);bA@G$iIm zT4}n9BgBjure??@4^G81aCrk&KLIB&WezQI5odq=W~3W|57@)Xl!D zqvxd;sB_Wy%lYMeU&OhNE;xL#9V+<5aYxxC95M@)Z%K`kgdmG#bLj^1?YT?J_wxz@ z3PwXK0>k6s$rD?tfk)NT?An==oRXRq{GHETgX2^%t8iS`NXw&Be&5o|#$WB6GvZKU zjoT7k(2r|LIWz>fS!Wi+qY?DaGwDBoq59tfd2;(Oq>0#&Rugb5LTnQ!iy_HU9m;@ z*0{fh<&~s)N*UZ`wAQ_}3oZ zXFq1jJsf6I4DGFpm+qFE^PCDcOvA6RKPB&-otS7NeVc}`bdSjbh2O){ij(P(@8L7P zN4v!b76L!+uN^rD0i zG;6G4;A06sJFy^3ahsVlSn-sE*6<*!l6J0@fUZ`Bb#-M!>zQLHSZZ0&FVFlab-~N` zV&mX92~_BTymqk561d`k^8Ug5?&oiI4F`MwfTLI2ieA|n3BuRd>8ASfJ8mp?T*#mD zp1V~K6Ruh&v$?9*s54=UJ9q|fl!{Rw1D#rDCujGL?2XY4xwqrlNRCvLh8V5J2dk=& z50WhEhB89u#7-^)%bTl~n_rrc+#B7qCD6gy%ydJj-CCV3Qmy3Y3Y zXNFZ5;AtcRG!G@Y#N4s6^*%3}Zbeoji{>>n!jADpo;Rs~|LZ&Y`GP3b4&(W)av4?$ zp-_puNvHyxUx5t4zh5(5wWCOJvDm2Kvd~`)WEv!YYp?H{kjt`hKd_tJ^^w)m ze}Jz1@I^E4fClm`uI!fTBE7EfxSpCLyv&+@TsKo_BPTBXB5}qy8CfH+MkuWi=QI#- zRhD`xsUPSrq?E)AChkOOBMW$>%sIi2#Io)T(;m5lj>aB{?R-wbpCkz686Q#_^{A#> zTI%jIzO;W__c?JZX-o<-nG2TylzTd@dQy0dPRr9iFR(i))~0~WXy^<#*KoDT7V)dh zwsUnr!XQY691~s!N=rx4l%Dam*3b0>+`zguYhGNbv6d!O zC-Gt9e#5r5C4F8X(xMLDm3z8`R~^_d{hX-DLVnSHf7Tq||D*sdya6 zxw%j2$K`y+GnBlp9FjWD+Sgvx{eEV^G4!6miSp~55SX$VSJnNkaf{p;Pa7#vo;w~j zrw0W4Xz=u70r#2fjjNJcP1fRzI^0mz(~lt!v?@58wNvsWeTpfi>=$&t75#0L`)fB% zK$%^atgY?W=lzR=^?a9z}PQq z75*J1`BZFrW%#X?$H61d_I*|bcJ|!fysqe4ji=Q2v32N&I`Bju>rc6^L$8yUA1_W~ z(h8xgmTM1g65>m#TlHeEw$ANo9sR^E=jI@fb)`?}*{;S$gTjMGPs1*)xVC2%O+GAP zSx}G-mPzorzG06$`9BTJOMJ<@btHTfkreIC2#{_}9u0Fsf1V}}jYIFsPI*W~qWoo9 z>H~leWRRh(QL1;jzoH;O^6!Vb^}v(ArMcOt%!<(XR(;{^vq6R!)vngMrf(jgG_SZR zU|n--Ez~=_?Q#Dr2H%}uk5xvVp??{zjZx_&s(gAwt4+k&m3zxp6uI{Mo0ah=5=#d1 z*MA#IJh_*j_uC&=agD=D8VH*dEG}p%D5@THH>l((bIHf>p7wJYFX<@VWhzvIv;A2%?VSCAuCVIW zGd5S!`x`RmGz>$=>WRH*!`2PXIa3bdls1FmbELp?6S*?q6{Dhf0hE=$jej}&%v*h@ zN^mzn`I%;_g2YDOK?J&ohgE4admrHIi!f|<7y-md=B4Xm<6PHkztkCQ&)coUDC6v} zT_#QbEnBO;+?eQJQvWK8=mu7uWA|q2Q((6s9^lGe-?O39;<1 zBB304-78JaK0u)dB6uQ#_ z{bk$3i?hg<*v<Xp^joil?9BiJ?KF-ksoy zmoNs>oRP4&BXqMtLeZOUDv(;Q<$WlIc5qYhfG=qk0P zDW=yxJyN5=F#r^QAA4;x(*MZAZPYQF?npD01drZ*Rt*LrLL>LbMG>A zW7K~f;zcY;Y6i8 zD+;QyZhIlab6blvM>X1h9?!kDMXa;) zjW@&L`cPiWO_@3du={HO=X znIalE`jT_h_`8m2-`w?}1~+;gm$Am&ozzo<%;hAo)iiNmmoNu2CXe&Uh`WhwmSAZ= z+1k*61sXPbAYiyK{Qddeo^4Loey1kJmI(>4@c_%nUBGkK$Ykr=7Uw+j4C&*|w-@jvxDr!E)xYR!rD$pOUpVS!3?Xesw=vt~1|M zFDX|i22e@f6Z3Kc(hJ8yiPYg7pYldwuqfe>)XFb$!d0aOD$Nsq#W8o;oj3zCRAB4v zzk{br$P!)+@iU7#*PS_8h4<9>K1V%0RoxAezrOVn++$Iom>8EXeuE<8o>bnppn@D? zyc8r2_*gV-MDeesYki;}Lf7|_F!>`ejK{xr(}w^z0UG=H(k&<>O)!OutZ6f5g~H<0 zamg=mC7-1Mw{EGhIDkAm{i-?}q!0!{gFn~Ph4X_zQ^4SHyfb`jUs}7Z*B`<_8?3vn zoYc_dF;^QW4p4Twisb!2JJ)qOd0?mDgz1x9Q1WTgf-Ig%#g_hNeB!PAA7UPRIMY0K z!2bX)LD9Y-jS`ypczUjx?GQ+ipfFNk_(nGeKI(Ifseg3p5_=^fr<8r5r#*s@1`<=> zoQ=mLTElRap6T{iI35S5hr)-d=Ghl0g?mYogV4w2;Xy0m&XFv&_v>-8`-@GwQsa7G zWoJu@Z7%3T$#F6R$kJ1#U<*DRc!NEgmuc)m5)g}R4>Y#YqL}T9Q0Q1G(z!}W_LBhD z5?Qjex3agwt`B5N4wBuv5)}G}InxbDAwh11NQ%*>^_J~cE!A{DeE|T1)|JO__Y;_t z5=JH>7RAk?gJvDlJFNl&oIv)L%9LQ}#-@*W4W|IK@?8N)GBzOKr9*H=2qWdSLRBF2 zr8g2HP-I0q)2z53wOK-wFtp{wctrQx>XJOGhw;)LOE*gFu0QR(l0qC%IgLU>raOl< zbo;joO58e?q9<)$J~P*yAr7IfN(3b5GoSBP&syp!eIC#{R|f}|&w6<$QPQ1Sj^lCV zMYj_I2=MylP3uV3WPE5{sXfvpC_$vMm8f@s9yH?xB*sT5q6=*TM*jd9uWNCGy%x|q zepI$pdG}AB_N^&wcZch>F4Zek#a!5d5%T`~c~N0$O!*98{CVboN=xcYC1FY%Ol~JQ z8JOD?7TVRnkWl%3N0kxdyhoSs?gF+3Br5`U@e|HRx`VMJPGbt#d^Z%Pn|fnPR7md( zCv>YW^#F!J!Sp2Keo;7lgCd%G#u`Lj1SF}OoGs{0JK9O78 zaOELu?=2qDpXufDt}dpWxN|`VCouvf$G_zswN>-sy&?vqfPMVv7c~WiZ}qhisbO5I zXVJWvqs_F zNl3y$-25VIwhBxb&h^-%c%-nftx`&URoj&JNSbNH6B`lB_oiTpk@eQLuY^~l&gj2F zH3WqzKGw#p8cV25K>%+jf1cIpzYgy9i6H3*Vb^@~{ixuYG@}$;`ua4GcY{O~ay8i= zhwI9cg?&va8fPXvD5Utu&XaDq3jWj?Cy}qSCr(KE`uI>oNHU{79R9u3=}Odez#P85 z6{3Zq(=on!pMTMy#B-zAfgiOYD}L28fAmc_aNg$=SNV;y7R zLFSq7BXQ1`#I>A}_2c{3ZkMuWR=|(fJJP$PgFEj@$f4`wZLHfZNRU7~c>P6jChj|B z>IBNLe!Mr^6~L_SZcsaf_GTmxeE9ONA8NLcop_IrI!q5&(DlB6MD)x|ZA-lSA`(G` zD>(fop5kxZdrKh1H z#+P_XmA=>jepI!s#cWT7Cdt*MDk26t{Y`p5Z)Drw^{xHhlf3S54^ti;D~Vg#u<2d0 z!9mCaBzgFFVC_eVza5x$T5=#Bys2nX%&WRTe9}-7*^lqz^^Xcqbe_F`YEhW*G*yaQ z@qztm$FV9Vow`bQP)|+s{b}2xaFPH%(vP%6Zl7r&d{31j3UNS_q$ELF(qN8Y6NBNW zoixZqc1X|_Ax6=H^j|?VZN})n>4*BIzTP3@91Fju9 zKO6-ge^~IQ?h@_8tf9W+Abs~OMn`5rp78>3cHCx+a*E~d^?3BnaMc%YUs+mKk`%Oe zKq&=rz6^W6fXBwTi+%Q-5#7inB|}j5WGEQ{T#h3?HD`8*+H4r@^p4aN!PWX4iz2ymtWPK7M{T|3ga>zUsv+c-Zl`TF>Um`lOoAw0ro zDBdD+P^nsZiB}?NPFww$H2V9+AR%O6;{^1K5PYYtGUO1!R;2`v_g+I+iQakd>$q)&7Lr5#$QS;ld)YVl(IZ@%)@+imJa zsZJErEtoEXCoj1!Ols`ABw&i+&0RZgyO!PUz;$WXL^!t7?9Te&ZlNkYPQj2nYV(F6EiDd+?yO|TF+Dxl+L^L-=Lkd)nLiF+UjDSTn|BBRD5sa#DsuG? zAuH_kI54h<#y_PO%G24XV{k?l{b?3zaad5mCJFs1z@#XJNQoa0(vtIlM&SG?I<@yy zWgzGJ8bdqeZAwak%>3wdiYQ8ipPeb7exvfEZg>4D#(@Ap{Ojy#Ad)ux{xt2Gp6Dar z`~H;<+n5C8k7(@&-9hbs)Q+c-@!paGfFWOBT=t-yiNWeWKchnJrpyD{8HhlYPB#PJ zGBMQcU8UHImYZ9BkOXQOgzt@`IsExmhab6BxYVNua7hEq!H*huizw?@1i?CoKZieY znrDnMygB!0$74u&4i4&)uYc+EDCV#23y`G#9MgcO5J%}k8*7mf^XW(d#FDWC$MeXi zOpPs_s6P#9R09WY?KK)T1Im)$Y)sF;KVQ8REj`Bn09;pSTSPC~`uEkbZDfy;wsLUg!3zbZj#e5f;}Qj?AMK2*U_=^pytz29CH zY~f+{+#7`hn&8(fdfl~!A7mK@5)2H0YmVEl;>AGs;Uvx=nDNbBG^U8KiVgMAUd_em5*J-GU`uWg~b=wh-ug;YJ03q@f+N-U0r1BIAnn?-% z^s9yKsKD~2Jv~YK@vT)V>yLdPNuqQPW93S9Us;)ETE-}0s}66|J^ z&OA4$=U#rL39cZGNo;IWAo$6Y{d~GvaMzw%X8@T00F>3o3SEem0UP5q?dyZOlLO)U z{&efBcL$%=^<%@IxmZdQI*tc3N#VtX=~@UQu5vy909mFU;e&^!-Sla3GD71jCzpqY z{uOZMf>PhIW<0*UDFtp$@frPTv^IrpC*nW2rS1&K$K~Z(yl9xEx&X%Xp1YD#oWx1gAWzKvBNRi9ds>va=Y+>hACyvU+9F&iARNqwLitP-^&z88<_L1A;m4MP&K$UxDRH8Ms#>o2q*^%t0A$OKB&A9uO3bM;0hc2&rjh9Ktl zP{r#De&7(;TWgJD@RE?7&oj?{wZ?e8)xuPjTe!wMvT-MGGA6B}9b`$Ku^H=$lt?xKFpem|A(yC;yDQV+xtIE=*6fuF9G%dgMW z^Fh=Und&2`{VL@T2a9ot`?&{c65oU#{vfF&N3d)By-!-TgQ)|$e-KvjJI94I=}U@X z?(2#6M%vTVc=h$(+DJDHBnOd_2mQo@&#HjP_;aQ#ua!S%xVCFk&b;V(wYaC0>%F0G zx?AkD1ExrJcY(06w_T;Ot;h-QI;3ejl9KAm^y~>pQ6yvCNk3~S;f*b(l2h4-RJX#P z&>=;VyKvL85>x^oJ8H^vR|y<4&eq1)?$q(otO+S$use4*5Tyc^(z%qW)T<;KRlbY+ zbXz&6w<=4Gp7x&Vl$B~xD-c8yRo=leYqWCQ_IDWQqtmS=VO`{?D0P`1UzIH(QhE4& zZBH~7Aw$3@Opkx*O+9tPN{a;{3d+)CH0bi#r$;3TpM7w?FfJSgwHEFYWlg9ZSspur zGdmHGVxB{fxTS~+S>@y7PVo0_(2~8BCsgC&DHiArDSE*pVb9KHyG5c%R1x!}Ee;8L zf6kVRWr3kl10(kEpxa>zg~{dpd}x&nAFquCpdR=K&WUAt9p4Y5M5ADSGz56jn$jsv z&dSsIQrpwx?xz|HGC}x#eCc-jjA!fPPB!CB_KDmc=sdh}{i?@>Id=}+I7mN*CrWqQ z5%8L};dZw94W>sp{prTirj&pn6sUZug((VonNTe{paIAuz#IVs!<lB}0qwD)qN&!odaC!ce-j`NnW2Gzvod_RX=oK-{ zsz%2j3T5D>sHjAJd}&%;Utg|t@?sF29OQDQb+9IWB+?&Cgp=`%4pdOvhpySBG^F7j zD_f1mtoy#B-&XH~7#}aM3Q3VdXyUyLy-MvvXWB=1-;8e`I&?Do3TAzzk%&3+uSqRc zZG7ru8r6}p@f&_#r6y>g_N&pmZBBN`BF@Z8+!PhqTOyMbc6eJt}AnJ zoHzPf3h4$AXAgG~3ZjsBM&bVt%pd(N|T|QKSfn4|a{{RKcTEv42Pk3!V zFloE4#h|m@P{+bK&h+mUcH_IKs7BNME3z*ued&$_;;j>Mlww5miCj-4vaf938a z(S;z${?&iPlX>1s0uM4jr#b$+(Q(3h#y#D0KSqjhlD~&PKP|CHA_#y7L66q3F+|Z& z6zkDHUoGiZJAu-3PQFyAQj(r$`MQA{N!~YzkU6^Ilr#(_aRUHja!JTD_e1e`n}%Od zPL?v#1gl9-0VMD8{g(4>psm6Zl!8e+Vz`eQV~MGD%(UPQxhYxp6{bN^PT@TB2g+Dc94Qm2IO62#vXK+qn*Aug|T3TJolGxxQHgkZarv?uodDjpE*NWTRxTHGUZiOo;T6#|BZTW4AzE#6O4JlFWEA)@g_zr#5 zc9OeiVE2MaPyB}8J^U)sQp0LjwGgh755r+eP*D2*zOHqC+@rJ`w~~59kgs-PGc{>{ zb8~#Q2uc}k3Xv19x`KuFhajm%V?+oE)OBkF1EpF|Jf}Rm4}Z(ocG&K_5>TK&8sd-WRkhJZxwl(g zk#Q{$R#2jQ@SQ!_CUFCKCb(Y?am%yBZW94bq%e-rE(E0hIYClP$Py02b63tQiI-gq z?AmQd?2rzUhRTvwusyKyyTg}frXcF8XB4C+;j3j@uTf>t6c=lBph|TBlMSrnNrdF- zDmznm2wM9%TTg+O9Zr?O{7K}r<8+k@+(dGvqj~Qn@`)Mqr>#O1E*X%v@(NFV1Hukd zKZQ~$jyg3q&C-Gjpe4|It3G38{{S*~=}WtD>u}z!X&%akaY)poiTd7>hE}nx>GKtG z%Wb%jlPDR)AL;I+?VTRU<Clo&&^x|gQ9%otj8L58 z>)l%FL4)$B=lM|))6}FRVm~VTDoL7h(ozv56U*vq)u7WsBN6MpT5WIL4nPk^lhEXN zZal>6$ja-2{pBSYw`2-_LOnXLfXOW!8z8_6#e(Wb$nE*li3v!7lhekM z!jUco89a$GM7^virc=*6ze+a^DM>-(G9rsD=#-Hrg9=2eCYyQL&n`q!bqn0*%z0BO z=^pB50){KEj??h3L~azDpR*_SMM@n9CnV`vykJq}pKd+%dl!3UK(g!*wYe73rA%tm_Dm*#SOKImd+rZKQ1M9|% zv&?(Hy-ebg-1PU*akkSMWnF%SF5x=?`_Xw_Ojl@6zJVoN`EO02dqhAU>Nna^p(#ub zXXa_kwGwl`jww!_XMcS(wH{L)cmC9*sDMb1+K?bn_1v@_X-MQjtG)z>RAoPlkox?q zgz&3NB%bPI{{U>yJlAT&e~CEgX%|RWv$t9YW54J82Cs+R6v6iK@8#e>TDG!zWCW%L z-#}8hQ`Wjv;z;H?d;b7xYl=B;j>)xmb2#Vud};R!s+l>@>&lvGM=HX6H$5mqZ~z$J z$IgsJNTQ)icw}Oh?n&qGr`}0PDprs==bu5nF7Y`_KqK&%RVrRa@w#&o5D%USs9UB} z-q+qU7z5hRcfgQkQShYOr2|`v35%RmAw? z+6pXEkmjCx0nWVvxwPVZ9_GsR4Y|ZEpHquj zLUp-rpfr$Uz1fimkOXxV=@7KEY0V9QyyOj&?&TlezQM$=3a&tTR{f&H%Cu?xqaT$p ztG1hF$xf|It6WSKAOK7QlNgT;sVGxP(j6N6NO1~6hjl=L4?|W+ z7VkN2-Y^2twaHS3#A;UYjk!{xL~W@j9K8JZ&-V3^B0AO6U5fp^C{*`$8lpnCoX(ZU z`%Q35Xj6q-sd`u8%tt+|h}$%R6w9Nu8PHF8Kyo>zoeqfyBibE3-n+&eZEtr^WEJ;d zwzY!Gj-|z=Djmks*)A$wT8U27A!W2O>U6e+ zIJXp~v)oD&l@+T@kO0m{SmBMj-w(KBORbGp0@JonX5w0K5`?KIDG6CnN>l*|fIx_+ zZLS|cvbJf)R00v&x!I7EBmkvGwGto?!#iYeS8cUnXvYggm0fDqrF&tdLZ5Pf3yu<$ zHlqY7dd6F;r*2YMxBmd@33Mr!M0U);B=jrBp&Y~l4Kr}8A>os=gJa4RozSkLD|%8# z;os%;`P24nzL+QhTgTxi#7_HX@~cb5aPV7lOJP9iR#cJricWPW@~$6oZsSUEJ)4MH zFh+A89QxCkC%Yt^e0fk1k=o31o|KeYb_!Zg-Xm~%`F~G+BH$wh3GWD>>^>Bx$vxeU z{e9jvL2SVp=xgmA*eFlB1#6w7#wa9Dg%C%V*7ONaFNyu8lD$ViIv`S#Xo8>Vzq*#5 z;#~YtG4+~ZT9Q0{ewKGGEQ#i@o|8JU@*Xth>TOO6vIy57r$8sATXCmeA-i;!H%y-B z271nMybhpETG(CQcbssxg?<#{$oct2T5xt4%B5yER(@t{j9Vc#g=j$TXBhmsQ!XXO z5eYudOFFiLC<}~g!{{S!oA~|@@X$;&jO11ct zkt3uTPlqGnwF~Dpcl34f@Ww>@`q8{;dO%puTz^U-tszH#xIYhl9ZP~0-5wubohj)~ zm_PXbzh64;rN0>dhsKd_s#pEJ_^En(yARTpainP?PB#Ak04fCq9Sk22(v7eqP$Frb z)hdbS*Y~S;Bxyd^tMjf2bM{^!%FYs00Y3i#%k`@Z^yo&BGM-{iYtrUZcV@Mab)aKO z@baImc&#N0AoVmwD>Vt*{OgYK*R7PM*(ZOg>6*9V z_m51vO1g93>OOVA?w)lC3)SX)X_?X|r$6DkYqdcf_a0+!uZ39Nb}G{0f}Jzxx8Hl({=+nfduvgrH-*dY!2z4Dx}t(?%z1CYI!Ve_g4^<0tFqMZ%z^ z0+c6xOFB~%7~G%yK{Wlsa)c>MU*a%86P|e@IpfNlaYj<2rOz%>I%X&RusTgQXRo~B zgv`bhj~N*G{AjqA(gP_*<4*V-`He@HZe> zgfN7F*&XzP2er_d&r!FHGr&;8MGUBbWU%FG-gvCqTH;pbdWir(=X zg<3Ogud{Q(I)>7y?#9^3ReCpS<)xzAT2!4&)HUxjpDnhd;Y0Wopnz0NML2%k?`GQc zq#p9jjQ~L;@3#I^UWxFl4@j=A>`Io>tQzfER-k^;l&m2}G65dZ@aIF(r#MB=+AQB& zE~ZAHNYs-Z)5;G&*1aa;%KrfA-AG%fxu{^16Q2Rpj&X9R$(5!cV0(LX=RhV*@0Nz}H`lAT6$rAh-*fRHm> zIcs*t-Nzg3R-{R6pJ)0~R1Cocq{4*kU>H3xLGmE__C9sjuF!V=)ng9T zPSMLe_M!`F&IeisbIbcw?c?g=2vceo4R=PY@~_79^)E>?j{GmxOKuUEnZ1pr;`J{g(w7Q3nXCb zj`V&k_*1UD{o7~SQkOnM&zFo-%qgV(p$Res!2DfD*T$HA7YNjYks6YHq@NM_9)6+% zgb|L1pY%0!h1wFfWHhtO@T-1%4=$Ti%69j(ar=PM(XERitR!2y*`CoLZt~UMB$6}` z->^*B-ay0Om%FNQ^{$bF&2TXiqov#(2+4BTb* z%n(m?dYauKO{AwxO>r_)b{|`J4mNFDOGTEJ_LU`WscBMMN|c>lqD@v0!q#MICqhIC zHg|5S-3xg;;NXmd1|)b=3Kk_MN7nR2(~P0vrNn|hVvwi!V)Zh9=|?D&p;P?BFs~7g zwZr(MS4!lEP)4TL6CFk}I!C&%lpHB3Om}k>lq`}`k_SHwcx^P>3UOd+6r!Z4rejTO zE{RtCX*T+kG7p^wbd%l@iZU@;hR5b6r7OS@U71c~ezZXwd+4w0=+?bmD^{k+!5|Nn zGx%d3zezZE+pW{53v9|&%{%9DH2(kz;x0ef7rTJ_Sqp-C>O6#PJgb86Rj{P@aU8(+ z{cpY|t=iClF@fs4Z?(5|5i*5%@~dZ1l&Pia1-|SAf@FA{kBF^ET!5*Z!lfoWaf8x+ zb(E2$NRv4~Khwe}om#a*CkGQA0YAMtZ>c(4NIg{$bK;r!Z(V}XJhw>@a|6aV_fRVl z1xQD94rF*i=kD4flYFF&3QW)99ohFBnWUi($-&>HDUwfc_eUZ0X-=)4?oU0Wd-KklxdlU5kL}W})`JkL8+w~o zg`q?6s2cQbLF+c0kb9tKdFRjbt|w~S)(+14a3g#fG7m4)HN_h2Zro4%k1rm){~1k)Cp!6%mU`~7?9w9-AS@AdJeT_kq^0C`gGWXJZUES_}RbK^|fx7n4c zK{3e2)KtTB?5pKV;tP!-L?m>i-K|C^^dFz)P7tB1pSqjD%?vsr@;|FgU5muZ%n=lfPG0&NbOR403f7XHb&+rj7eA2?g+XQvf z@|v?NGpLXzeEN=Ap)m((^N0#iz)tEN-xI#26TEfY4X7cuWaA#m-g?QAr}K`x z(0NYENbd9p`jSNnF87Yz&^&$dPBIkhC?`&$kfErF&t6^t81OVWYLtf1s7pxvDLGbV zOhkE84JD?+5+DtQTwJkg+MRi5LJ_)@eo?tT0C?9F;|{o>SamA3z*tC=oMjHchB!Ol5VmkM?HMYD5raEv$q0C8!Zz$a0ix6#$QNRPQznwS0c$W#d1oo^y{K!7g9SBhe!{jS3T)r+2r-0SpB}9WDoX&dtxtb{; zMEq!De~<4+)x_INifAYUrzxJlpYKhL4W@Y{Ps7Xfs|29^rsW->`(4wHlHe&Y*iE?7 zKav@ge==357*O?}%CS9ubf*<W4Nxfr@DXRMmdl?>PMf>r_a@P)2yv; z&ZI~o2@$0+3r~#uN&f(O_Gc%AaQkbf9C0KE+g7k7ciSU$Dwgqq^v9gIr^4_xRQklO0a69~}w=1{c=*)pVY*7jS{=Gjokm80JHjdTcIX!NI@a!> zligZ$fO4fsPMmBGOjXGHD;B&h248g=oO4N1kl4Xr@}+J#U~0e}qM+!C)b*XvVG421 z&`L~Tk?jMeBoB0nrfw3vDCl4E&*fM&8(EONr1BzvF;3a3rFM)+>Ib$5`%VOHgEeo) zQk@N5D|4X>Qqk0;C{TTQU|s9W|gI6lzn}8O%~Ri{$JXGK6R-)#(b$r1a$J+ zi*PsiVwi8bd47MDG)O-G0Ee%Lx!GE};ruC|e=57<7f8I;lc5DdIZRJE`Z?!Z2Jl@l zl`Gne$HU{{T)jtS4+HsCt9`3$aObsg)syD6K=XhH#8b?uE>K{eLumL9nfKD%b-3>w zb>7+Gcqde0N8}xb)#%GN=^vtxfuEU`C^=9LLn&t9gpkcJ{-+8aPwfKDgf)A ze271_Gkc~>kY-?ms&mW@sSdXC^rc@7_MFe{NtXMl%=rG)g{{AD1EHI4b%4^x>wIxz0tHze+^!~Z0ZXg`PG*yC+DLWM5`PL}3G2^bV=zTL@I)jT zj$DV1tV!N*2TFB))g9-`trAz5As`Y|P5_DCV0@~|$F+S*LV~-%>N>RGj~xAGncWcI2a%5tOw9@bzSWvX_aR}VpX~Go_%pwkF#!xQ;BTnOvDq@85#ZNkzn5!xYGK}pcTkb z(&|)ax^&2c5&=F!GS>=4x=3%k_kEfG*(1X|JTC#){DCB+-^F1;vh2C7*ajPyY2BU8JKI>!_ zQ{B-RfKf5Xp9uY2mcbm@EU zoB(@YiaDh0cI)9&r>~bf-XcBzwIxj7YYK$8$wv4K_M0FWN{+7V6OCJB*AEwWw_UZ? zxVKvLYC%EN2}Gn}B_wU6M&!z}2#?ll^7S}?;uMq5pHCmJjaythZs4<$*J$ed1?Oaq zN=A9crKEHQ39-Kz3PIEenHzn0dYx@9wxla!JSy$GhFxWaB`zf|7ZI((gedlF zOG;ODUc%0(+Z#;|6U5(s-P^CSwv<5z(dQjW*o6S&Z4|2zMn{ctAG0RmX?a&F4O_Bq z+_rHjEVZqDkx?ZppYsEUgk9c?mOqe)ygzDy(yIB z4Yv6TZ6zrMTOPkrNP66NRG6KhPwTa7MyUxA<4Vcb8~z>WYHvMuue2)xV;(a>DLEYJ zNIpL5DkB{_&{;G4(@rX4lZ8jWe>xj_t{M-tw$&O`k}HjHPqV&z>CviFCt)+oZ=a7! z;0%UaZWa^>8yWHV{**QzqxBTUy6x3)&LJ0101nzp%F!SAs7JtUK>{)bF4ZbJzc{BY ziNGJF8*-kXIrz|9sKfw1eLsIXC2iyqe0KbfD%Rm- zi4o^aFHrUR8Fks;7D>X&PIiu)j(DqQ8VCfGOhkD62;b#iomuHUsDczVY8%ND)31lA zUtK@FBYHnViHZc1OXWc^)`EN^-A*Y9Oaq>0`q5WNrAa5x_NXLnOxr0!Vre$PC%prn zY4;Ei5`pZE&gP1%vo0$U%k!k#sv|$WH*V8tC29cj7_Qk3`#%%c-O8T3TY?IVXUJ5l zdGF&)u%}MP;hIgHV2J#UHs!Mo!qcgK8&dC*qEiD*;1PlIrwCLOk9{EbsBi09WLF)r zapj#dWc$9ht9}o3v2RT6%_ z6t{#-{AtUHoiW|tH0{ngES{vtUhG8s&%2_O6lH!IKoSyjw5E3E6mv7mn_rpZ%bwqxkgS`hBYq-)>v&~AuAWR+PjkymRQi|VN=45;N0qzh0r-F)-kU#l!-OjVPKm*^5(=4TwfP}(R@~$Pun6W_# zDO<+~P9l7BO>w*Xn}<^25P(#ap*ltgfyT z2f}F_D4|WDNMXEyeYKve(g5*}u|?!G+^mFzjn#kxM3Q;{JPGit&NpX!_e`xyg~Ft0 zNj&t9@`r&VGs?JU3bMJ?a-{2cD5JfQoX8N|U6c zQ8HkVd(k<}fg?HL_Ac98HoYY+w$_xW$SP6xi3e|~>s()oeS*}j2-flTQ#c!B^B=8n zPA9}3yzLxQorAlf(69c(Cj*@AT8S9k&`ICcO%oM(zSFvo57(s7c{WJ5?AuD+Ql{c^ zbn-}uB6+LjieICgCg+9P@e5Y|>gL_2r#{h7-X>t>D+CZsjgD)LuHM12%V$ycLS}ru z)&3rFmTj)MhYr3ir8jM$va1w?b9vGutNzd~el#O_Bg?V3iG zfNu#2!UhI90gbwHsWSjb+>`ka>FYD~`q#VVTvP7u_+`eGLT*rnX)!XfxZh(R(zxK3 znn=l5Y;`3^PUjM4Bg?{+mjNT1U>))E{*>Rdlk2>1QbP9A&v?v*XC2d@b#U!M)hSs@ zoMlRFag6Ge<9xQXtH^_~rMQODr8uOaDH5e9fB^TA@tBKn7p{Eh6TWX%~ zA`YZ0Q17QnkU~_QNhKtZRV`YTqT2S{6@)D%)DtDQ+xC!rH-d6dspnVxL6+Nb#zvJa zdl8hAlOFz@si$3f@Fhg6v_1ZsPc8NsBgZwNRx3NHrw*z9RUOIYo_;&fP*&SU{{Yl_ zu5FQUf|G@Q6^+t!2g~6GX-p~U`-@a8sA`Z%3sD$p2nv`%QAhzPDluF(>;9#77fi5+ z!$RSQm~6D$&CZo4O4PL_){dF`#p+7JySrBsaJhQTl0odlW&4K^LRXTsFxpfGs4Gg= z=A9?FfvOjuw7YS`UAA{p9ksqgPpHp+)eZ++ce^9LfD++@1T81R;pE*VyK4oe;l(W| zR)wVL2iq#s?4)OKJh@ZtmLIpZwuCs%xEE{OEhfc@9EZ^w?m>7Gx$~bljKa&T)N@Q1tb(G`$GactVx1;#8tNzZsmFx z2wy^=LXZ1TG0^5|)%J}905Q{;_jz>YYeLpwA|sgJpD{EVRDsvVk8qUl5w?E3D^PO; z3~e7@S+2oq$ru?i`qD%|WC=KD(!bi&4_D0tny4XZQWR6}onGD^{6~_kjGj@uron0Q%J04Z_nM=Moq19ohV; z#$%BB_g7+TN`@f&sZ9fe{i(}+RScD@g`S^2S8(9K??utG0E&_a7No zghzS@y1RKG84x2I`RRc_{736S$QzTeNcJZ?kYG{J?Bzf~_J0xQB#)Q|e6vn6tR!t6 z*xosa_GUf*0F@~UX>khfq(YJj8+gx_aaw@XW6B0~c<1|hQXgCmaT=Ar=ahIKjQpvG znj}H^{)APkr6BzeIv%bP`C|EnCw)M89%5k4aQ2JMp~A8-lN_=EIQQ43HeI!$bG)>m zU=*hWkISxU^yqPEh=m$80Dnp=6V|sB+eGKzy(s{0MRvLp0HXYz=}Vpe0Hpv<#%ZP{ zUFi4GZM1HFzKwmOv)koMe5>n~DO1*)Ow&nAXHud%bEhuA*lDHQ6;C++{b^2;e!A9U z_NG`WgB-I>tu}q=8sanZr*BkblfUxPo-3T1N!85L4Xn)SfIZ&`{b(mna5F&8)C~IW zEz-P@4I!qPGXi-Yb=w7P5$FABwUT@&eScr!b4+Hg-%4>Hc*vdO=SK0Ug0iVG2nV`< z+;;aTJITI3-!mjRANGGtkTL>w)H-=0OFOI^1y-atu~xLymYtI03Ry*YYJg+>H)M3 zN?#$+d8?55ioL&T{VHXr9LUJ-okPG+$9k~zd7VFL4kg!B?4%CkU-Qp>ej5t3woRL4 zPgN6vJ~hWU`>p-WvIdidx^i>)P&X4fI8^&PR|yv__IFDKvQV`tsUVaPG^t61ndvz* zTu%A>n}jgfTG1FOIG$>e1o#;{Vk?Ct+q}z33WTL zNgVu=I-Zp86-C|XPi9LhDF7WR8fWoH+|MbFb4=RXp$P2TLIh(-0~_-5u5s&EspX|9 z$>mnzD}7HXVJx(+@|36oObGFwLYeeB^7hnm7P~iCd=()`I=R6~>9lxNk>cDZhdW~O z$hQhALU#yJ_KIgI)wzSbnr_t`XO1yo>-sx)v;`>hGt8Wm8%Q;O=yTjU;0D#OkgTOf zJpJ7N04geO(~8=TB6~*A@_S8EaXjB%!Ar3NNU>(U$GQXw~YnEJsjx>xirSx1CdZQsR+rrq;D3DmxUaJ{gb7o`t0=NyC6De84}`G?hV({A=MJ zr430VsHAFO+&YhL0^C4?7L>r$Ga+dM+k+se6qrp5Tg%IaoVyxO0$m9iOqlMcyhhkM zl9ir(fB*sOB5-y)(-&Xm4!o?EE&_W%XG#>DCEkM_(qq}vPbfST>)Gu+go1m3=5Vfc z!gz9A3w1D5+l2(5XrpwHPb^0D#P3;QKW5OEN`^#j<0B#})!yQ8LKQj;$%)wJapOSy z{a3bVx=u&lCn!+m;q{uZf9&V%w+)uYr6nsV?h=p=lA-vZgB=JvR~PI;ExY<&E-&oJ zZNAw{S7fl^4eCdAw5m#qfJxF0RFG`Ad3WshsNx@MPkTbkA*G@TO52q8hLuWG+Mt7l z4N0yd>mu#dCh6N`Hl}Uv?pp{_8ge_b97fHD2WqWwlBmf_w5r^2n_IiLTsKSXhExJe zsvXvm8%o?#Q?cJ*DTi0X-Qo8RmlyV@13W=WQ7G*m)DYqjRiUJz%?KTykQ*ecQ4>me zmS4Md^~J-lxKe^lsWMW|l$6ScVjD;)oQM+@XkD{zr!zt|e%6q$wdCo|3a2%##De{{TkZ2mq;Dj=gs0NLHaI>wT$63j`_% zh&6M=)RWpXFr0uev>E>ZwqjuONx=YP0<3tpfKhWGq`*>wQ$7Sw!_KYl#A`@O(xJ+n zQJLpI+OkG>sL+`PPtLnl40WNJJt*d(MEPw%60DAYQA&`cpLh4B_VpU{u-P`|wFq`1 z2Is~PzP%i~vvatCq0L8lle8awTgHLq`g+_!`&GLC01lTBddbRvDpu#tlqQNIi({mF zsI}AJX-JF_N@XW8npLhg@t>?x?TOrb=}jm^Z_8=lY0`08*4|+Ec}%Cqa6TO=HwZY& zNhW!Lx%Yd|N-ESgB;z@s{yy#LO_ENKHs&G~KJ3o**us}S(bLSqJF0SbpRPw!XWN+N zk>owDTMrK!v*HC1l4HX^mh{Ey6a=03pyE}rrq!irQ2Z(ey&S#|ShKQ@kv!Fi-*4?) zML%fa?}**AxCiz8tBEukx^NHXS18!}wVt${=y_3ark3pDlyNgjQ6`L?skZxono{@r zIHwkR(o{_+QkAs^l&WQfA-!rldm|g~PPr-|ZSJQ`(h_-pN@mqdR(>B{e5n?IWl#r= zeWkV=C_n`N05&{!r(f2indhI%lu70L(pgdERyF~`psaI~6r{4uppbcDo*R&SM0EF3 z6lQ^p`pBo!c~fXJ8Qze9njgTo0y-xf<_?mOqMJa)}F zd35v6I9w|#NrucySF3FxoOl|wN|$iMZn74Ve()$nYMdAYI2h&UNwKzVGTIU#2&;?q zunA73MmeWF1jPHP``#gSa+q0OrNBr}a1BtPU86SnhLz`1BF(BeY9ts)^x>B|FY zt{uT&X`=Gry0qzS1KCJFi>@;h2CP~(R{9moyrO@bpTyS`^o1y2V9GU0Os!tb@=8Q! z9L(mpc8Bg5Tej&^T$$7WNF(tCL@EzmjeVW8r9uaI9Y@_1lyK{7kkXe0YR0J3tn!%d zp9!IE(sGaoIRk$)TyfT}RGVPo(mkaidlS@sZCpRmrkG1hQuU}Sw3#Mn#~$hcqya#B z$@N}4slb4DCS!01*UVF_I^!u}0O`WdiiSqrKR+7u2ahJ#hP%P9$x0hioV9f7{{Xmq z?JJ(2#Gm&S4t42Q7YJ>{vY`sZ^Zn>N^KLV8$7mmAK0@jItf+7|3?Kqdt5jEZ97@LD%(bS1V7N!~nsXm)D> zNP;;UG96K- zl{eWdPcm9{s8HprR@CC$V&%(L)7rF|PzqFbdE`Ji&d1$J)=og*@S2=>`tJu|>KzDD zkhN%gG6QQGRVjn1BNzh{s(A}LrWF?5vramcl8q}J_Q!$Fw5Qrm@!zK$ZImg;7L*|# z(f|QL{=Sr;kUk`1$DJj>uojXEPd@{ zPTLTBHxrM*L2bb^I#e*RS5~fYfU<=cRHIK=CMxB(-*sszR<(DsXS=A3XK!>>m4a1l zmi>}}?Gg19N}6**{l}8JXV-gRi=Vttb>#Pgh9(Be%x#I^#+CM@-jxeg-drUqWs%yp zgto}ltR%Xmi7M|aeO=tbL~w>K?R#`Brx|JY*7{p;rCpNUJ@kUw)Qu`vdmo6L!K8;A z`&FxUD!fapd+lzt^{;iuTw0E#Db%dNDg(Mmh~*Tf2;j}LcHnF5>9?00%obcio7a#O zWhhJom0(UOz8QOZfvWo5>u%G$l(4qlLfcR}6cps8K<}v__zGFLecR&EJ*AU@yHt}1 zmXHedj_6-#_|pdP8bVNcKMPbs<`SH2mIOwP$Y* zCQ@EdM23oFlwkc^=S2VjI9D#-(ZkLS))qz5<4j>KiaZ zPk4D`<}(C}Wz@KdN#6u>2ca8-;A$tvu58foJ0$hYA21JxpGvj3e!CUMYv zGCFgsH?8i_77XvsA}ZtnzUa~b9QXXGuxG-M+BJ8T@t?2Wl(Hm=q^PJ(7!|KcuFwM` z>%xkp1^bBU<4t=t%6xrZme{@9eWfW%lBh65=cIHz>w??7-Nv9GNj}fz`FYiYg-xb@ zr`$bvPWCB7oP*7$%UXgzT2yDu)L@R$h<31G66;Obw8y=%RBl4!WsuVq}iu5Omq%;JD1#Ai1 zKT%KdYh!M-m4PWx-*3t{t~^^+(v*b-O0ypS08$c7B^>!up*ZP9QYfU8U6~@Aw}B^> zLQ|XyTiw_P!nGP8sXz~-Nw-xr(`}hp$LmfygwBu$zLxnTf1M8TnfXv)tc_hj^Py^# z0Wdk&Y#R0>>*G${sPFQnI8;7AUtbD9Dn9zRwAQr#bFimA%-6C(BAvaC>I`@aUBZ>Q zK2m9y6s~hPqL@+e$0{2N2iBz20A`0V*Y=^0A5kD~YUcTt5=)BDATm$5XXRI1N!yZA ziA!f43Gj&qmmxc81#_xqO!7LUd^|bRR?pnKp@hnYbqEok0Tbd*degQ`vn_2TOpN#A z#K*{0%G_*{wLv}NdiB_fWkt~m%%`D0tp0vAYidi&)?x>abMNc0kJ7%*`;O@igtjn} zv8`J~$%yb3ZpskSK?76`Mmh8P>sL38TMassCuuMzKVJIc*S9xvgt|jh1u4`yVo2rT zR@V1LF{t+mm1#ZleUb-`$6!1wgxN&9aD)Y_GXN+Ui6^NCmz65g+T5w+q!kHK$o>BS zGxM%1#I6w0MY$+bglljp64Ew-J1Jd3oWQFycIs5?g~HNRp-OQeOPr$wl1|B)t`TgI z+LZff)}>COp7HaNeghSHi$;fR;!tC0P!r*u{{T*PWyGzWmQobjkUfLbsPM-8_wlYJ z#_b7RvKF-w?UYWD%XservE@9>iQ)E^m)A)TG_??p(XC-20M5oepgLlD;8S);X+_b# z2EqX71i&5u0nWI$5-I-xq+!i3IFb^xBfZf-?jk@jBXL$-HvLO+=Oz?PAi-OU$9M=Z zk=A3Nt|s-{Ts%oyk4@v9pP%cya{r3Eek??6oZL=oL0HlFr*3Sv;p zXg`HIeigs0`k!ziKVM(1GLW9y?LaCLLqm~Kn4ERb=U#v=&xs=T$A~o7ZV;EPmY^hr z&uW2#CLoU^Ty0i7FfA>hATZ&SQXG(L|8}+Y6xMvCD9*rVeZ|#<= zaW^>o$jXqiAmEPd;7WSe9=5aLY^)>OlcZq#v0jAnV8zAdqoKW52};>f89G%ZyqNNt z$&Quj5kPlCZ6rGAlLJq+8OA(jt&`a`*`3l)yq)OL!7A~J;rvNAu%!(vPf$`l#Qy*X znWe(pT6(09>-yIXb-%HFp|{FjwRzSM`wG%=r9~z)_@O}HgVLMgy`9FVP@~$8&1(=r z1c+QnI6IGrAYJaO9e3P#@*j|<%=+%y?O9M8#M747DQ#D5BT!}05aPQ=)Pk8@ay{W1 zb;=0}?gA*<-*GK3IHeX`DT0zfK*pijz#uI{yg-s*s7`65Xh26Gl%#uvQ0ePU<<|+i zMg5Y>905pJ8ezuPJME||1u7o`0T~r{#TUgJZPd1OkG(2abt>O(bAk^;y;v0g0GL}l zbd4;ODGHpVhXkbiCu1L2mSU~7+`P6*iqoW$RU`$>jU(P* zh^tbx0@I|DlLxTCAEd4czLq@jSQ_Eh_cWVj+= zww0BG)iZ-lyo+nAC#@brgCF#_EF|jHZocegMCxgJ7N2OCGwl;xW#GGuCf49>hSIyW zsYU{wK}&3j1Z4$IE;{KWY;fy$g*|m-8}7Mm<;|OliCWM*&8bPjSnjDhj-mBiQJ+t+m4rb<9*BP8!yWXC$tBY&@~(z~$+L{KW93JDS<{&cJ#3UDVz zHZdN2{#4QB;p_Ca^>*oPlq4xn2uM_E<_yXCbFLM|9%l7PciEiAM*D9ust8X#kxApnaO2#C_cp1+=bt_4n6yQWec;NFUK8&Z9qqd5yjF zsOOjyow4s9S)`>p=Tsfi5+mYM6YnOt2N_kEN))Im+kU-#zr8EcG_9>AT)K~cU(T-h zf)?R|GI<%mq}(N2dDNf{fbpW>o){ThddY z&rHYmr!H~Qi={{9N-B^i@~9+l@~d`KqlrH1R5Ol!ex{s#U1++ZbJmsKG>df~39DN~ zjIRPPO+NA)5QEft(%mOAMF~+knr)T1-~*j8WLgs$8Q9YCG7rpBTr&fg*GdOt>pM}# z)Rj$00-Sj$1gS|0=1Bk#ja~71`@3@|ZE=8n1ZVQ+G@$Fpv~@*F3e++-85?fYiRejW$=)#CuJ z9M+PP1Q2uy=c~?gNUH`VGQlNN0O`U^@-rKF3bV27RoX0-tmRU1?h}am@L6p+Fb|$% z>vQ^5?-L#5Hne~S3Ray&^vHlGocwvX4E|V;FF0|Zl3gJnQaMaDIiEnM8-@40FTIfqMy7%7uh9k$UWn)DH;4DV~B&X#`VRx zjnl4#rdwsXfQ?^xKb-F>KSm%`vsVgf3V9iH{nA(MsXbIVCMTYK^>1#^V%S;|3Q`0C z0X_rhnz?v0DQ`}woRE_o;!nHAxSKb3&xlKo6NcMN6d+GrM^bsyb~jd*z=RdKr$Hd{ zJB%ppw%O<5XTW~faHp542~K+wk~NdOtb>laW@^`mi)HJa?2rJ`gpb0J%i&yKiY>O* z)u;<_C%mm*%MwS6|j?^YEHh|-DWIr$3V_blDpp~i#*%TAx`@%?>C+IsrQno-gT=}K|i z+mOO%Ntx)8@Pix1E77hIZ^xhi04{0Zhnj8GB&{Fn_IX$k26V|!mh_)RuXsJrY|6;d zkfiEKjP#$KdO)=oCB+rFJ?WF@pRYRM{*G{~-$&TuHsyV}E(gEb;z^Y0!5z&ePxo^A z=Ym`xu)MJ5Whh>R>FB7LosKq+Rm3=hyjQX-!rXv*0#A71InP1mPWl^v!`o)jB5{N3@%T~4jPj(j*t2}lB$0L=&Y1z^sVCVRCqhS;OxF|iFZ{aIo1*^! z+6tOOijQRLKsX^@Jvmb^x}dg7O2b4U3o#)vu_thm-5X%WX#*m;&m-z0aA}YFTla0q z`@6L3LCki@<-VCyWn@5%LGMK(8IS}vqpOlaNjn)co##2mD6J_@r4W!ZN{)~`$-wvf z>6?UHBeZ2&ktAx!1~7EWMxp-UgUFHVT0+K?v8Ee#-sQ_=AG>{OS`wfkE}!)h378Li zU}wLq&v^+JcNPob;fto!o3w+rQ{{SlgjWs3V!=B>c@Ya24EE7mR-0eqO#M z!^59`k?fsLfIXl#J|r5lHWwHSv>t51meLoG_iy989qWi(o12H2w`G+zWP_=0HkVTE z+HzS5A%Aw#H1?!Il;ed7QUiVKBW-`f`+H_vw{hlHg*Jqwb}xXY)|@3i!+?NbOa)?T zE!}o5SvO(!h7z8|w!YxvrJ*iV|um1pX zNlt_|r3EOcP7)QZNuC{QZuH$dclMIX*4b>b8e1zEC~_8MKoCLLf(%3&c?estaT|Mf zmffT4M`jS8y=|pwb==H2vI#(e-O?pTQmOT#_lP#?G?rSjV6(o@scT$#_gYH7mq^-a zZ5|EB^p+ar7Lt2EX#0+aXJ)K_CL4|1`;z$;E z!D)wPQz28hgCAU|DI@|FBf^&0A_jcw=FwfyN4BnoJX(kycz;Nl8u4G@oeW z{{WY>6vEn6EikDQ=kTTbO7kQSI!bT?sDT(Xy+hfV^Zn~2c=MqlvQM7hUkYhcr^lby zhp*CG7VfS4#081aNg_OP=T^2Yi>*DXb!+&+n&Aj2LQ~Q|O6lrydo{-T6&(3hql$Lf zmly38z$5*`2R?MKuRm1B!hxBZiS-HViqs~Klk{k|J?56y=byX#(P#T_N^5Vg%9hAi z*Xv7W0iC|NQDeaUc+q1?1Oq<)el;uYbS6?trU;oH`JXzq;i_CITDf9yJcRviPS}(u zQgA@upXd5hm#;D0Dktdpe_CDowS%rgzYIp7-kRbtGNLI&&@yT>G>||YGen>1OH!wQ zch^b>9cP^(5_;)Q*jAPrvn4)#-~ z1~>4hUMe}wD46=qHEyNnIq>E6G}W*fJ$$K7Fp&uoX?H}JpLh1fEyXPV09s3HQN=aG z&Ye+?rjUl(P(O%xQYFWd&=lD zpFGvY#m&+C)fBcfpeaHJQjkH<{CDx7fSA&Ivz~GeM9Qb+2>8+%*Ch9PsU$>r01v}7 z5a3s4%44gh2~v5)$xn=Dtyo%ykvzzsA6v{cuW1QTJcyc4WWXo7gvMe3{RLloLd!kd zVcMOEosX9L{{Z{dbAIjHW>l{9N?`jupd~>3K?iUJTH4%P7*Dd&#HmDplq)hp1wKI_ z&c-IVb(?|E;>Ls{02HTEljdbf@&HqcWu%p006e4qN0-+syuDhRSYdta$7ig-gCr;n z$e-S=tu9}CxQ7m+wK$`)03OoyX~56o)=nVRt+c-0wu6ngvepRibpmIsNys^_#jkAS zff7vnhJFLxSGPr$)>;TENbaPpYAfX^leYR!@tQ(7h1JfsKRvV3t+*3>RpngvkdUQo0YvIl$efer39CCXWYB3R zZhZd$I!O3>&#M08vq4BX>-FPYI@QIpw-J|~AOZxCH#%lF*qE*c&G!c4cDKzXXj@K& zOknEv!5a{vAlDw_?LBU%nn7<{a#CjsBWWAK*v8zs)2_RDa_I=_FLL1vXHKIex$R(+Grs}-7Th4luoRk)ld`OIA|n+zN~{4X16RH?d`|j zxB?utaT+y*l67akg(Wfqi+XdCX}&LPv`g+aZs)M3)ap)?%_=j49YE<6!;HGxR>IJ> z_6lt3PB}=&ua+ne*Y&2E*LwR)(gnf<6SyfLfH`MT&zFd#amE+J+ucojb#NRx}0F!G?p4eY5XYyOv&-ib6X!g`tQ)KDS5dH zXr)pkk>B0FkDVSOiftfu#QcJaS66_s1h#H-~+_+lEqQJp2Go??Oon z>{bd=_LCr}PSdqtSRgLTh7RkiZRbAHfexW9XoMk2Qb-G0%;bnf6!(EjO0BqM<)ToQ z?%Q>%Wv#RAH*n)=HyXhwS7fE?<`g#q4P1oVT4)DWBT9SPj=?Dqdc>ICXxk}>Q4Uv7$Xp5j-svZn|yyNgoQSD1aIa% zx2F)5?e+1ijvj{szX>4u9|QfW+V$%NhL#oCjfnthjzSJZb&@)nt6PRHQz8#hl1IXx z0zn+Ur{7WDkeV(w5BH_0Mkp^^XApV$Q#gP#@ zk;-Xqej1ZO1xm*{>>zkjA+ySyxcU=Ia!1$3fs^^rXsB&XwAxS#j@gaqx`g{X{61e( zPFx>}tz?tsQ7Vt0Pu`njR!E@Y8cvWUQ!~@_?Kqn z&~mMSQG+po5r8(XA8m1@+$|~%Mv*0FTDI;&Mx^H^L`87KDF{8dPkTBvjCjuGYU%cE zn(awKL6nVZ(I+ZQdxS+jZQj#ax zlR4@L6~OGAvTb^SMz}gpUCH$UAHeFvXi|xcW6$S9Ro&1BEu~Vd^BkhMXA^eAi!$<3 z3k^KlgGbmXNgBq{-UIck`+gg7Y}NI+Z?b)`<8h||k7YxVNx|piUXflQPW_pa3E1X* z{{U|a^k(+ohH=Ke)1_9=wx*p?6WR8Ojd}i42c9P#Jt%(0*tn};+O>%VA_3GesTlZI z2;$H1o+`%>V9u2u(I16qAcZ97Vhnrh(oQt4F$I98gP72uFn!opKz>x8Mfin?YVr1# zgt!BM;K)`+)9yVeEVXf=MEAgtJ+q8`ZAW?=)bz)zjIAk4L0xwD`O?107B0RT1uF?* zPH7P1iPDggsP8Loun!<=<%BGD!L;^`f>J;dM0+#P^rrYN+L`-9h-AL%m#Aq%R1&pG zUfDnG-#*j|;r8jXhEOo1>R1pGl?(-An!Y}~RP*>y2kn;X$9qydih&9E7(Y{AVY}jY zZd+QitB1-|;(*yGOm~z-fs@m7igSkD+bFkl+BWM(M|pCU11TV$TXL)RXR@(imBB z0s&5!0OlkRte?XX(2Dy*Iy+v`9hd&*r0Cu^nA}I6H>-QZT`66XNo_y(72TC%x)O7- znK9+-QbN*Fp&>#D>M7<$z4K4&Q)pbF)us<{kPN4pL;{|1BblabulPmEZf(gc15#H6 zrN-PEvN0%FW#>X=nW<5v>E4*IK*cPTn}(ou_asO75;SrAlc8_giQz6o*`eO2|E$20Q8n z946b8ZK16{gc?WBjtMPMH6)xouH z+TEruP%f<$h1--ZGL^UNgoy;s#Ai}W998wrx{a&KQ_bHYss8|{XgpBT$kp06{H8FR z5>lwhF=ox8?A*CGA8Tp!mmPIsAQ0L}P*Ml6paKdAkY;mC_Ds2N#N2F~N0x-8rI!|M zTT$*V98!kGDsw)Tkat<_*-l4+D;AzfE>ulaFI?!j$B-osSMg6 zjZGQtT{=Qr9EsHl!I@Pdhmex-cfL{zQiU0kCIJ{!ev)FXID*e|;AmeZ45d-mB!g0g zr*Y?=l>NJI2vT(kqF=FhwQWS~5AupSffPD9#&uA6aiGv=gGql#`qCNGdqKdg6jbc1% zDmnVTrie)%KKdx2jL=4hK_UU$epEKb)URb;M!h2|ORHGeD8TT|eWbVuz)~dn^Njv= z!cwPDOcC(#+GxP(McDck+7eAoAtT*bPQsjYj%Kw^^sQ4A0g7dkrF0aamc&oLG`C3G z!|Q786i?9id}%`z+bTXrnqeV9OWOnI_2Eyv+Hlx`{V7YIubmvLtp>`30Do#?$Y=!Z z){+w5+taQSy$MmIx6OWd{eF!}oCq5Yw*IvcMl zqM5X6)qSV{5&qHd&0cYjX{Lz50Iz-g2VWEO6>D~~`rL6uk7OVaQdT*tG9$~*uT7*bbAz=~(4(J~U{HpHZ zEcX($B>3(J{6^jrAGZ}l*B1y^d0p6UJKN?GoQWjPGdoqCo6IsbrA|8Lm}yh@Bdec> zR>w&b{{WR)TDIE>X=y;tq5@zNdiDCn6o&T1d3;GH0COb3t~YY+!0fHuB?1!>Rti3bpi!oBjt5k=wSyP+L~zXb==OKJY8DSyybLR7sKK za~}Tyl~23Ehd(c06-aURTRUqXpVvC$stQe&l382IT3vfXY1HBpfRu+5j6#1VDuWcYG?4Y3)V{9#$LvfHh#}ZY~BYIFe zkU@YaP>Ize8RZ@u&V6@GcI>GeD|DX`pPt_OV~<=pY}XH2{{X3F9hw|e<$-}G@fN+6 z8O}E~WVV>%HjX?J@J+%?ovU;RVD1VF%0?&q)9I6evnmAcNyq+&k>g0#@^O&JYy4b(AUw)5sJ|1E#I`b)#eLNx5-p z4asrkpp>8jWov-|0VJ4?W|%^*Uu~A|muGKr+8aQo(0gE=N`ee2wJjk_LR1u@okBJJfyVJ7C`OaUJ#f95|Ndz2X(Zp?-gR>Ox-5V`r5;^xIuA?i&lFysY&*l zb5UA?^!J-qzVHMHrZF+4ex;B zJ&6h2rG2MpnSeCL;;+;+rrojHEl0CLK_Ke#7>X}N^w%ABRt{o*s>~@Gq z<=M`XNcMt;;L;qqV3efx&5hE$DJlN|Y574k#q(|?K^{Fp=tm<<2ykK#&-174GL^SF z&}A@4)8uEIWM*p5i>b8ex;PL6n|OD+d}5I59Y9(LROf%8^|d%;c#c%gs3LLC;k7f8 zJmc5K?Zwv*d84sR`~m#DDOPLyXJ(@?xCg^jj#>B5FDl?kaiRj}!+4HgylqIzN3ZQ6 zH%{BedluFXF{w)*3<@+LoxEs)s+EfUY9#nkBvgo~n$t97P+V_GgGDu-MzTEVwfBV6 z*(r{{)|#C^UmsVbJSe=CDIR8akAIC^aPo_QnIcu*j0_*0a9dH>M&dteQjEr2x3Cunq@KxF1}rgz!YRkmbOYK<@7!{f#igLH4i!N{1i^hSci;K{`hv zu=3w}vf-4Ou1Jbl$`!5?D4tTaJ`-YCybRmIS>TrDLh+B zBhMqi?}?;_bV>qe!z7-w&+_M2cWPx0c6vjp1T-}X*S4%q*(1g%BIW1GQe0BpRz#~; znVH0I^Q&ujlJiLtJ1sih11jo?$T5&r@UA7q?d%)dQ^#Zh&#I3}t6xYiAG++^LXj(k zj$@|BYU4arXi9CH%G^Rriv>e|L0vHiyOSdoW?Wz1xB>%e?vwujaa@MjnT}M?X5&e5 zKn0O2>+~y(TrjqaC|XZ?2*D~NloK9%^4hp}4Y%SBDQbYWpeY1E=L*xZvM>lRc~hJ^ z*{fpQLU&OypA%MG8pOEb!i$=}2CN@{<|(!iz=UBSZTu4+rK?Dqk#l#YK&dI29Hi`d z$sD81%`1jJ;6tsUL?gPG1|V_-bL(6?ja{+9MT5dcxFMyi9ce<0=#?L25@L3oVy?c? z#V>m_9d0enC`mh?!;h$|t_OEwr1t1oQ+%NOb_eHQ{kJ;z4sOQaB)r36v^zcJp+3l5 z{vbaPj1IK2{nO7Bp-vS^o#1)@07~J!LjKOt%OxoG3X|CqN>G281MHK|FknvD;QR%? zJ9ls$cs1Fexhfi@f*~Mdc|X=^{syidrKFfZ<|aQa@mBW*)h(i!?6Im&cHfl2>F}dM zy85p}j^4DCWF>NQ7!&%CebG)iY|X{6XrejgW%~{;s{hTW80WLt-0z1U*2kR7^ zq!G_Pqf=Ku=_?*2&$^s=l}d?JHqk)IIc+Q0W;66@yW6IFO)e=ZGo&g&*c~zav&)q? z#2sqoFR$+t?7ESFT06i$hEZWS~aDo0b6oMXp`-?AcOaSM}dRAU+^9pZSC*)aU#;~l(^n~i3Aqaj4icF6g5a7 z`O}VFI2CRlmYXFIqN9Lz8^G|#%9ygaxoI~jC1Hz#7J(;1+Q>d#F_Bzi>Bk$$(Wpw| zeg6O+m2T6I-626FHi(G!c@lHypWd9eTPW>tTUQ`*JY%1pK6DSm>L_iBd6Yidn^=&c z@H~j|tLE-)5apo++dQ_4h}}&k#HqvyKa33ryaW@tsJ^*NU;WK}j>Y6XZ2DBvlc@@j zq1m`pj7)-&gB8UT=z7ijhF0PlWyGPj&{n0sI*HEhTg+yX(1(0l9Yr;wg?~0YU0IUuIA~E$=jD0w_s{I zn_qnPrNm_D8r3KvP?+a6XvpEtTnm&JUi&l7+T5>EF7{~DThg*hPQ(cBZQez+%zw0#(MQLZ!xWbi zDkPNocyr(7R<~^2x2sZ0vOWDh)Y?E!G6VQ zI=FrE=wEEDYF<-28TM1TIo~50jLmvCcDEaC4j%9WJk2+h4^i-^EvEQB4oeyc>!C_e z=gV5YwluC@H5j8)%D)el2sEMcqrNB@-hrYfw3;#^b6Td18YvW{tFt~G>G1mZ)w;DK z)x=T@IUQ>1(IwR`KNjBl;V9CAJUV%K&;+ZmGm7lIX|yE=BY%JIOHlkjl`T>?kDVkF zwRUP%1h$lNpQxocorHNzQk~!H^rWs&g=r;N-<3AcQTu!8Dh+HoQ@0Z%^ra}MZ%NMi zpwgAfo3jZ(Q6oQ~`sq>=?BmLoqE2%|S55u&5|NoYyhr~4vs=f^Q9QYNrYM-Ji`H$# zsbkA?_3*}O>x(-2zU*jjV^=ac7@mIqRijzdu5**9Nykyotp3!P(}~iafD%>j@gxuF zG#gXB(3qIW36MF3K}>5yF|9!*Sj-F(XE@vETz`Xbr_|}TQe05j z_i}u>R}iucNGXG!Q~L6!1b+t;Yqn=W_H#c2OX2CabQFW_CL&Mb5%ej1K^B(7S??tg zr5j$_r zD%E!{xQ!)i{&dNK8Iqzg&m8N8whO9RX*x*KSEszQ=hJ+^8LP|dD^s8;0mCFEF{=~E zXP3IJ-TPPGm1_%B4d!G4&IC{N+PG(<%{Bi3R`P?ZQgtN61cE-gRl^J}iZn(YFXye)f)CIAow^Ye=Ij{509vu<>R^T^fz04P5#tI?nH5~Ah6 zQd1{P>H$L#VBimMtwhlEpFdUmKVBx)}29m2A{>;DwEw=5v)WNce&FycK-lr zU7$K11GUgZYa10OtaFN6XkDF;p{dHRTuM^P1S@7asi*L~zTqIGE@ z0!a!_P&Af~U}0(`Q}-&jQdGt7ZElj0*?Vp_RqTRKv=jjdNl;fr$9kS|>-(k}aK6G; zq=3@3H=qbQv?!rOEomhsO~D$nN=BOt1X+b(c8d0vKXadrN3BCpinrr;oH2=sdYh8jYMNu5#>Ti)Y=&-BN@b^&r(ioXl=a6U8w%n) zMb6P(k3PG`O=*GbJtf-DII_g+gT-Ad#G(hDdf&|zTygtiG!gnrhBnmJBcK4!u9IA z)}d&)TnTftB_TjgRO(_8&1wmqfJ-(GT-!N$V!KxE-O|Bk@#gy%7bUd3+6o&Qz2z{t^m%~U( zpJd@hN&_x7zUep$8c3l$L+!UNY^9XhtMN3;UBq^0@Hpauc|>oh41oY$i|!iV+Z;<* zHjn8G0!xm!C`ypn?y0(3zj!$T1nno^p%yX_hvGQ$j|l&4{+7aUX!iIkx9 z?Bja9QM-4rO0*>s>+XZyX}0^>$r54&=QP7Ba^F*_QWT(Z01ZEco%b7@5UEa_O*Zn` zItkSTh?yx!%#+hUT$@;NIf4%`Y3pF-2$9IpL$*rQ-ck=S8gu-^m(HxXsz#))b);Ys zAc*oGwOd>v;&hpf#QdVUdbp8FZ5}GvAw^z8Jn`19*TeqarRvfPxl9O>XX`b=8f{u# zVN#UQrZOu&`jc9yfkZ_~9#jsrDLZ`s0Bx$=4qw~VcAZV1FQNKZ6S*urKu_X3 zd;b7j*9g7V+O-Wh`s+a{Mq+-xR9pkc-$i{WsLc^H$_ZCLEPk}E?>bt%aay|3%tbcI zF^?Jz1eqe1@B%psE0gcVDEFx-QN>$Y1HSwFv0a)Fapy}>A}1X-{{EtqDLlE)*Y~L> z%C_fRqNbMMrQIbU$pCe$t|X|2&ymSLT&Yex@he)+B#jwuw8cYoBpFG8I>o`a%-v=YDAv#B_;Mbs>Q8u?JQ-MqD z$ie0&M)8hY&y8{a07$R+qw=@c*{8bOV335MY$F?0qpvOGpc1V_cXyx8y(i&rrKC6; zUI8ir1}F8Uwy4?^{F934KBrvTJ#NKW9vUzt|Xe#pYJ1P=H z7(MVjI#X<4xp^D*)LD~H~T`=o`SkR2d{=a6?8 z_xMs!1E@zsK==6e2?W;IlFko{CQIEEe{xNDrsG+ zHQILSC=G`&doT`ip`%u#-_kSyR6?3-S7;D`vOS;@G2&vc`*(Q5-GeVF%XZKkb&)Da zR!Gby6{{eb=Ugu8@#e_9XrX9PNF+fZ69qu?B0MRJhTql^KX$U(q((MctE>V!(~C$}6c3S~ z-jZZ(k>l&)?FbHSJ;f+wr6&p?NGBg1sBq_)SK2jph(Td;8y|SkP*$RaO1nmZ!h6s# zfzkVR?mGvBYh^*!mH;@!iQW{RhoR+Ns&wjCasec$fCO(RXdQN;#6y<}VTe>8yi%lh zKnJ=boQ>efJ<=gx!Njdoa?Ft`M|fi(jD-$*f!K=SiFdPOh}o(xEnEnBAx2W-M1?@k zhf~z<6pzE6C&k~raa!~;r3iCCAs`LTXFmS`D&UsZmwZfGzokvRZnQR|$?=e{5~PIz zCvqbuulRa+aeX1k+yS}yW8<1#lAO3{2iba7fH&@$gV!E3lre8@{{T_2NlJMioKjtH zwEMD4XTam@-AN$+^|fBvH+bAALen}I%oDX*@S7DpSiDQ&zzJ z8%rx59oeBlsdbXWdJCoJP_W`#4X3=h(<+Z;BU*?FCatabmlkOn)npiH^o0i8biUf! zA$k;rG>*-CA85)<IND8vB zTSNTH?)|HTb_KxeXzbbysT$Ow-&(T+I*)(`MKx^UxM3#l;?mabe{_U|5YvjC45`JW z=urUjQg!{_F*lY&hh5t(%}cgzm8`9En}WDfmQ&mcEx-j@L`bV=n|Fw`{er@fv@N&N zi76?@i6Ce?2s(2)CYxKWII9as?c8Z=bPm%}R1BSADgdGF22wyNBWWa6^@DAB^c)Qta8uX>hlLY84<+em)Qd0_1@ewj9eYKmS78Kf}x@0R+ z^1$%gt?omEKM&l}lc*4KIvRS|vU^sf#_7Ps@;~4Awz!YHWkoAbv=7WH`Mj#fh@tS5 zIS6z4WI-Kke=6dL?JTYkGpUuQ{{WUM?S(S(?F&-pXs^70K?LB8;XrdU%Do#7G1<1M z14>SOW8KP_R;I_RHFlI0+o@0rRzeSol4s-$QpPZ6pS$bdM<7t5Cwkbxtn;Xh)Xq9l z9yO<(YRpzQ+OhGXDC!1^j>pu5gFSlYnL1n}moKdPp8o(zaniV}Beu+aa>1)6#2CgS z;CyTU!~jwe009F61Of*I2Ll5F1pxsO0RjUN00adRAu&Nw1`{G-ae?p@GLfON5FjH$ z!O`IrQt<~fVkB}FLsNp1Ff>$SqQWIabAz%qlj23A($n()+5iXv0s#R(0qCu}!pWsM zA#Qf#Z4TT$a;$t_HDsr4+&R*j3D;q`-*6)&Xke5!Qk?x=I<5yOX+PYhLBoVfn9|J`{XfQ$ej&$Klw(y`v z)KoR&U19k7>HJbm@!ReF{!};n9dQkUR$@5%`qFQ$oH;{*DvdKhpAB`V*E=XK2-|=a z)ttbc$0NhneKelA1+|hyh(5j*>|}eZ5I87$@}|(1#+&i=x7w8EP#o(E!_q)e1{1m9 zop|rL+rMgd*`tHIZv!Ij9M7htmdTlk(Cb7&BauIG<`D2qh*}P2oZ{NX${pX_IHpB( zW235lS5M+gQrmIII<~W%s6@wSPkB?R5gPzFV^>b}dka&TOCj|z;!)IqePNh0%NUw)=abc5TLxNN3nVGr z`a3B1R)o%{wL5dHBcirgUAiuB;^OTH%4X`Nk5uY ziOfd%G~cv$EL-51V!EbLY}4d|QQ1nq5wCS(IFZifu+StqIPREIMsIvpUll{2DBW6Rx+RPRkOC8^|PXR25! zNy!c+J;f*LDSaWuhgMj>xMe8>WogABGsaR3E5yww8NVx0a^=s&kmG?ztkguz@8?}} z+K#o%q|RK%3Fbt>J~SP09KpqcIE5N6xUJTsI-PYUy4NB)#gX2kPsHm)l6BY4zcleX zeXR9;Y6GJ)Wk4)M_D+<$D;ClCWdpcn1ZS%U)0!oK}uZ=r_zSZh3 zQ*iHNcGR*{9vekoUSihHGM4T0+srtu%8)y~8grx;mUj8BoJs@_dxcoPX?&3C3KrV+ zN`V^wwDprg(piL(btBfa?VIg59n7LXw^%%UKQwl#_is63PB^+jX2qB z{lS!td`~}@g<*Xoyu;fqBPx-pg~^W%es$6OVRx91S$MwElAxJ7C%AtR@u%*ZVFazl z`%{zyGe0^2(?Bf0v9U@4dEU~T?LgWNqsLFuu>~U7qkve_G}dV^NSGiI-}J9&=d5kx zQh_r*z7&g; z^?gg}&AwF){0`KnhrF4}PL!Y`c06>f!)0wz0(e(s@cPnYhK7``2b};0qKO8DAGCr` zbr|PR4%9T$^*MY$ntKyzt5JV`uC2X#hJo$6bbu0a`qb@M-$*WTcSt0+Y?JtG zg8%`ft~XR}cH{+leCSX#nfnDsz2C3gCbjoKQ)t`*U>f77HFMDtjYfZF<(gIJ{^{)@PhS?V(M@+{<^5Ix@gEkgSwt?Dk2Od}E zT8|I=2GJ2BWSy_NV9&GM+O*TDxb0i!KkdR)Qld4P+(uA27^5VU#FBm{e~-GW%l2)Y zZpqZ4$SP~Bl7PNO2vAD6!SAN}U2~G+-x#z=cm2DD&`3jw*exAl+;6^zwK1hyba?cE z?!Mi{H-|mMr|}iq)NdZ_c7%;;!wJLiTSl$z&=3IZ?HP~mcRTA(bo%w2YU>HcF#f91 zFFS7C!W2}MBQZ!W1q8raNaAwNv#nm?-_WlA0I1-^WK+i~m?d3eO267(Q@EdW_e6@o z`ZL4~P5@<yCt{tZR(G&l9ekqH74p+P#+^1*Iq6 zLz)rsGxDp9PY$?2LvFIQOlY(pq27iIX^68AwuPkdPzT}beiX(Myf~?wC6u)%DkQ+3 zRn}sbcca=ncFNN*8l#l$r>;VmiZhiBEW(wr=faehmdcg3nt1(dZ@GqIR_u0e6Ci$Q z?yN=jZrqm6^B>@N(`=U0nOh#{rk`3Jmex{6pn^uCn#69GaM5|^3KF1TsFe5twK02a zt7hC&p#V3rBTYE^{b`ckDEgiw{+W);XZw}Ue?B~_@eO-2$N*&<#}6uP^0J}%cqjrZ zG;uz)r7SEEMu&e|RsI-->X;WwN8Ul}Fi!+jWONp0wLzR}BW+5$nI#=|@p9 zBZqenI#2|9^Q&hYM6~#nD~~CwhLRQdW>R>}@$&HQ@vf{NFI?#9r38`THJ6OU`PNay zdC~0Y&Vc3iLE}J2+2=~<&q_*o{3%3v(cIIASmpNE+vXXJczV)`LO}Rc(tpJn8;WgO z!8=k_m_;R|#~N`u(!frm@2w;mt1H6M>eRfcJ8M`o4BRr8a|M|_oetiP^?iOCZC3Vc zO0MD%l%0<)HZ$eIXyKy4XA{TV&icD{_<9@#*SE@C1RklO`IX0H<~mj_h}~jub+-!2 zl#HyhkM@~IrXUb7a`I0Is?CUwSusQt=ed8lz=C~x=NdSizPI?s_f`wZvs9Z zHPMtJ-G)$+5xD*0u5nh{Y@sRzKyc?x+^+KEr7E7#o%sAdRc6dKlsW>_l!B6-An#bd z9NSJU)_W)_+h0GOA9RmX_FYeon|x>!`fdI`GyyRiX+az(*P%&FZNu!_eJUoe*5suT zrsVich~HinZo*tMyzLwR00xD!RLBQd9CatxeL06EMCEX&jB<_wD&EyB4GAa6e?K~! zlh5uj(RE+}r#k4)8iv?*<>ZCJl7xe(0EtnEiGioc)&BrW?C{qvEc&Nab#A4$41O0d zW@l~@@D+CAU$}YTAUNWj@GCNYWYz(KuNS(?sYR<V8f|!&LISx@KD)SrZCLM@6Zmv4}P~wuNy0nam%wb4a{u)R2p)f!B9cuHYSUw+% z{{TQzx~s4oD(vMz4v9x?P?Dt&$_#JcSo^&q!m*dH*~H&

U@?oySzWW!o)fNJwmU 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
GH&=+(R39 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 z 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�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

7l{@>5+yMQ9@MssTV-HWaIxdIP0x%Oh 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 z¥8xio~$w*ZtoH8$h0J2 zGbenAugg|g9oXtCo`F<)fEZpu#;+Q^il30cz^V%&7coMvf)5(kYj7uRi~KKt+zDKE zmCW4F4+vE(?f+^XR^b>|OUS?;qb+W08_=JPJ}0cB)`!z6B75sdSi;3%Jybfx;q0Fy zAQnB}brDN2~x6%@|^V0&8WcVZIO0B4bfDCo_EuXbm&Kkk27gV%) zqIKtFqmbMm_66fH^6YlIuazQ~4pScL?K0xa-mnXpGF?gO(l@t&?_=i!>AKkFM7 zNb{6|JJ`tpIL1>SG_O5z%1A%6&y0eUlW zgsUP?v}CEkKmZ)z0-#a=5bJea&>G`|mE=gN7z}-ty-A0%KdRQ4s!*gel$wU`{13qdKJId)D9HLTSN1*=e+0es3xD#l?9wX*7f!-7=VveV zbF=Dj9nIKGoICFj^jT2?WjAF(x#4uz7Q6z}lC0+8BiuWlJl{%yWc7qU!8{7Aebx=; zr!DK4`C-p~hy0db)XWLxG_RLBUt)&JLJ`<65j$h_CPIAX&y6O{05Pno%U=Py5X>*L zvbC?~f|USt*|TKPR>7w|WgexOlB|4$S(?qOg5Rw%4v~LL*mMVBRNG?5HDKaF& zKp2w;^DTY;h%O~CBkn?mS_gyGc_jF>|6n=^sbkfoh}W{xF;Qz+K~1o{REe&K{n zI);bcUe?Z8r-%6dNdZ&lwANZ+$InBB58>y3LVuZ&+q{@Y7LKj(X?19=x16u}f2!?V zYWBV5oVYy@rjvL}uy;6+T3i*q-c@bVmOD=pY#J9qiD2NkO7dia$cc(K8o5~kMS z+h!Zs5xTKfE_Y~m8{$(IpTGHrQLVi*Xq|j>J8T*mb~$W7L)SrUGtJ&vbfv&-^~Kz; z*uAg=7fWv|&%)_0$IY`5fS&$dR)Mut{%toS?~P7lLE$2oHM-f=xqR|v@QCt-kX%8% za!Z)HlK@i{U1ntuRp><8u_BgXV{bMwmc-f3hhEAgMiI^RD5z|%y$&(gozD7ZyD}ZA zF!0Fmlorir8021chqPR&fsm)aa}T{*)%oh(d-_P-xb67sZhjg-o|U#s?`cPGQM9xvM8d^s;VzPRU)*IgIrfo2?fCzE^tK!=QYDR_XGv5v$ zKgM;XaI~9FY*ULoc{}|jtn)$=W_$m6Kx?fu-rO~RB#RZL)RH~?n=|j!45TfFl3Je%&%_o5F?{Ar3tV+}3IsdjRHeFKpE z;->c@guaP-N~j;MZSmde74lE4cO*T5t0AsTzb@Mj}jk7 zRTUS}H7@dOEYZyDS{)*!nuI(rBnPXf%Z*~vX83M3bV+sKpEj_pQCf`HM7b3iAQ z0>J;McsJ;|uiO~2P?gszF&M70d=7P+XwYo*1tss}aqS&SO%_ijqT2R974{hWOakH2 z#E}DZNzpZDG`!7Eu2Oy=VE*J)GDu&b5Jur(puw97)RK{{}kkpAsiazTY>N;1BxnYKK zXLc0wyZ;Eu^OVh(%zjqOhe4YY`t~G>uMa0Ijvs~uJ)ndFA3na+Of4ou0~|#n(udrI zXX4d4&i(_uJ22Q0ev;9;fl>=pl2x2)#oxdS3seI|m9CWWf*Q88N5i*3ICWHTPSjLc%oREFrv~3_=~3#w!RQ&;YoqxLFbVcZX|O(|ZuvuGDFg=K>+*d*OW8 zzrR#5RMj3)9u3LG8=wo;cKJBI0rVo|94<{0$8WG^aBu#4nX$X@(KD~>>%)w=6K6(TIW2Q002zP)?KQS4Oaf4j%wR-yt`23WjTqW>FavG$y}O(k9KXc23MZ=`7tC>r3C= zUgBc-0Kw)(h{c~G8_)81cVC6bU7n9Ylpb?PceSZF^rWbd*5d2(t~==5iqJOVu}@=P zz+VmXwVGXuG(hWH>H}7w+iJ&IK6_mXvjQChI@-WoIc8<;tAD8OT-2j!> zjmHXud}$iRs%`V;q#Y*E>Jz_{9aHjq_z5hluobNjqh`HHbN(^5>>VkSZ6H5->bs-1 ziZ(l$9FBrZkn0Qk>wn(wMRqgZ|Gx2G-bSZ@x(TYUkcOi>TYQZ(~esnso2BsQ5rKY4{v>B zh5;vqfPWMIO-R)9v5F4J_UXig!U9+CQANxwDAN+ZC(OgJ05P90w&^K7LT@y6 z%i6Y9&rq@}Rd}X$BE|E_67l97C{X{ZHn4GJV64!Ct1sO zL)%Wd6D8`{HzsS^Su6bff)Xrs^0RmHoC0Yx)aE>~vrq<#+1!~KLjWKkE|Lvieu%rM zq#*AD=#O0Kj%BXczb3qz^syyoN4~FRY>1v$n6KkP&Zs$H)UoJttDMO%=F#Bl(lL`$ zFOoo-Qqy0PnepcHygG2;2M9HhY3}g7PVXs*+v|sMh}9JkcSjE&Nl41nz>XLIzDw%y zRP}YcJ$(r+)}i1Ki*YAm*6+adGS&?Z=Py}2zc9Zmp|JS2(|DfW85ByET@+4Hgy8z{ zZZm^jmJbdxq$AY#B#IE`W{Nk63ZPq)`c7S{i9T|V7aE}B7R5>@Ga3_dH;K{P)DcxO z;}i&(iXNbc#bJ;Yym-y+MsFti9;R17slS;*n4c1?s%Hs?3mRLZu{A)p%KGPP`}Qdk ze!JxC4Oc?-Q}h~)GYw1gsj!vumJpj0r#QW?luo%v2n}Mm=t&3J{T>qf2+|rjQLsv; zc_tML9~rGu?vjtC>-56TGa#eXP_*qAeU=^sPvynmZpIL`7=4f747gO`= zRpSj3;|4jmb+^f|@7zUMY4gKbA$j&PMjg0Xd{B@1=R{c+xi;eJFKZtJ$ttts>J8Dp z<7Nf$$;ag>8L6_Q_x!prQqUpxTp^O*`z{xXyemioJmTF0@~$>TH_lajynyR_lT0xR ze~{FElILd24^(;HIAM9Qw2-`!fAJ2txiU<0Tw6wI___I&FG*}}%6gaHDKd&A{`XMz=nh#2Px>o6=R_;xE)`_|)Ci=F(eYr33uKyN6a$+J0M2%dWUE!(jDS zNpCp-$@?QMYWPTt_p(L-aJ-^eU4tS_P~BnW^yd+gnJJlIdGzi3s%|B|1OL*$%Uu%$pGjG{Ext{pTnEJ5 zBl)wjr+J&YS^!gRRyv`P`BLjB*+!1Xz*9PPWka3STL^!Ms&f~1-@Td#fN{k0h37-_ z&>Y;|MKa-UEP>-t>d!wEtv47wbW$;sq*pyWxf8&4EaeEBMR)q_!=1!MC#=@)8s$O`ruKw|hvHm*x zSIbt?{c@T&CfvQU+hIKVn$8lVN0)b>Pfvd0aYoH+gNv3sh#8CN(E+ipvZPSuCz{}# z3BX`fYOV~prP(XiVVX{R8bQE9<8ioAyzois>BIDvVV?)!;_M)3wk^2aSB#F#iKQBM@N35N=*4(+778iL3y~x@}QslRej$q>9=~QKr*|fnXf}~{GB$j=fx7kp%_6r4)Zf)3fQ;fdAUq995bu@HpcU?{prUSI4*HjdB zQV@ZGVzYrC;OtI9QT40nQ;wku;G&t2~EdEl+jT$HcUV(ZAlN zzU(_)1^-8o_KI@;sJm_OHl2Gr&$DX#Otb0%!@ki&;6n{WL*`UDiNmudXZ`FZ;eVNM+YNfZ+7M+7u3o) z+E(&rh^tohIdQ}Hg`6ph-bXOE)lgiT3o|@@V0q}47q@$3kpI?iEkGM4HCxOp782*$EmQ0W)-9uAo=N>> z*Q8)1tcedUDNfXCTp@o#p~?N&#qGS`hEu?{yA;$|_Qk9vw*Rs1r(Yi_a(Hb4ks|k5 zNV6BMNh*Mv)-r-Q+B(?pATd527*$OXIuYChc!;zYyyP|v{dnh~(4Pu|O^+~k=)F*7 z54hs~Kxq($--+a!RmW{J$6LzMo;}Z=Hsw4k?ns(NX1&hb(e2~|`k zelVD~_4VDE>SMp1p}mZ`d)V%8-fi>e6d-!Sj*z?1^9*O)5@%tOino~|UQUCz`(|Rv z+Ss|hZMmZ>=zaIC;|lj--55~L!m!BZ65NUWhhkGPZLIivIDB|~6L9T~_)R<0y@+1B zU*qRL9pAR1B}TBVIX3WW+`WLG&klHfpqN!>s%AbWuk+y_muhXulLLS_yfSPW4;(W>(rPgG@Zv?hCY#+P1n0Gv z$Gu{jE@R1ML~5R5rA;RHfffs8@RhT|`wL-h$&~;XOVV{2G{5mZ)ZbeVckv0SA`~B- z?mnYc-Y=#8yBT{plF8PEKV$GF&{CZGcfS_vgH;=5hgQ2BA9)M0XmklvgJ||{`5K*f zx~|vsx-AAik^Bef@apTPNSP@)!5@^?GM^_{*SiXr6Cd$C{{auL%ZxqAI*{^Ad!EEZ zk`g^~pm^4u@PPlr-fD#qLpP!(P@#u)+apDq0VHH4sSSx6-6^u2(b+y_;ZyY``?Fah zLPOP$>8`D${dC`A^jWQYr-(-}0aGSM6H0Sx{h=oDjnRyL)h}Uhh%*`jj)Eih!?}G7 z=<6lrP|1bv;R?`NK^-a^e=X2z4t;Bt{wY>I`S@Jf`0+~^4Kf`pgG%NA=|YdR2<{D|bY z<3GnIZ+GE8ojtMSmQ$jYHDK~5e#cLXKX!+Mu!5TRhKR7#X!F)sKE-m)~@QFBDQT z^sNV3^(;`Fj%GG`4+}Q^KMU_dnG>04%(!B~4By;|k^!53=9y@)8S(I%nmv}rqC7QG zjkUeIz&zSBnlE>j@mqu}xpCjf`&}j;q%%lT0dvaaNuozz6OHYCwm`u0*y%i3(6Y{q z24n>z=a>x9wigVTc6p@Z{ha|z%_W#-f}V#Y00FQmE9Fh8)k`4108P0zZ$LK{A%V78 zmz&xp(|3t-V~UhqxN>=-pD4LXiAsC2j}zg-({OwZn<&}C$Q`q!lv6Rl^7Z}|5=E+> zEY)%IMD6t+KHo`&jpLU<>dTLOh4;>-?B@(jIaF-QJCU#mQ^oVc^KPePZoxBO;ENrd zzxE+l$5$RYoEFQqofMhT`|c~K{{ZKOUie*(1Wxt%Nu+Ru-X5B27pUCcQ(hs~+cEA? zHMv^x94{B|2t2>IyO8O)Qy+pbma?6Ie)3$L4uT3(=Q@hs*8UB|Xia{U8CQQvO?|k! zrl~2% zgQ7{3^6}9JTw>MX^uKKen~5UO6;?z_)!W$?ZPHF$EG8fCrgOSdGV&QP6{V)Q1c#+D zVy?FWL!Bxw9!h2_U)QML4DTi=Y znw$K6>uSP~__+~w`Ks6UV7dMgg{Qm-83QV%trBB=^3JWKj@~1;C)`UyH4o(hxV&Ip**L;CR++_e*c0|1bl`88Q zo}@v&Fr~SBj$hR>(KgYGe|P@_EH+M_FM)B5B@{oB_VqBDA~aouudLR&wntr2pMXW^oPZ~kTpP&&)eZ60l)U|akI+X>B%>**duW4cpi zUu+X9fb|?TM*$jMn`W!7!BN-8S05PXAqd&saE8{$PZIym$US>mkB4qR@rB^kZ&rht zI$8@0|K$2Xy3BtozrHEY;{*1vS+hF2o7XKvFf#xXB4NYfyUmBqT1v6T56a znI>T5U#*6b^RG;m-2ePc#u0M6d16!Tj$kfwgFS6FYT-Ohq3~LsqMB_5CUC886%e3b z?6#!*Xe!M}>ihe<58;4cIV3zwwL$B{ZAYSC>(swFs)HiGL%B(DK_M4v0M7^WZp z4-lz=6#@vbN{@0{(mlnRk@>bO>%D2kcE$n*!d$|bt>s`*mlS;wEY*{wXb9Y43j9w` z=kd;}TF@;J$qJG8ctB(^xJ8d%O0D50u(I;|*)9Ku`oLc}|1xEQ8tH+x@nv!wpmck` zcpcU?Mcf#v&#ZZi3g!4boSDVg^=-T*`Tgd90Cw-9Qp@qXrt2jD9oH7VVqB8AU;E2F zazedph#D9abf><%*(3k!pUd?UK8aBBr6OhM$v^jy!ADlF=mdA5INFx*CD=F&*Xn+qXN}+gt4jEeL8w7VdG?wAdi*ioCX1+mGfm0y z|6%E?-u^784zLjermFcMP?fnwb|QUBu=%J}ZqrSJbpZ*NOKqfRY=&${C|CXp?j%V)ELm zw@i6eS?pYSobGjFZ8MB(D3+tmtkwoTgET;z8PS~Qi&pi+7-Uj$Q}G>x5H*hMn}B<5SfVo)jWndQalB1DFG zmPVhAXeH9#{#`QtCy9#q!w|G`vAJ-ezVjGoJk(o4P=BO{l>PPdLCM9CvDnhrW6E^9 zDGG3C$kL^Hud1^2iVbNQ#ouws?)`Rbbfoyfwn+M5ckg_CXiM@}HySxRtQpU0 z&%;lU5?$=zR`63nL^$nUig4t&seh~FF|~aWQE3l%g@UGPu6=e9HYMu15vtdw z9D@SS1alpH9+hskJQfiEbWwri2x=JTdy!HJh$q5(Jxsx>4(bVjnDOK`)tqPK7T!zl zWv)(*}64MvH2 zH`6ViJo{3A=!a~xxxtcxQ|0?^!Mqs6scer)@o!Euk0wI0CAD1Qg&@u-^5~4}FEQa- zjVDU|9wZhmAXo1xbf3S?I#r3c$4?9K-6FGS zW1;T|Mg8szz0Yz^c6mfPL^%}??VJ9OND34I4O-1GFk|No=X_qAYt?@v1>i=Xm=KqU zb4?Vl0Qh2>56*ZR)tm{7wNw&p?`GM#_h=q0l`6%nN$p3Mq7!ZM)!7F&p&g@9ge2PRR0S_)(-xT5sWW5KDwCr`1{-=>ODP6H5FmyD$gpqmsQ^rW-!Thq_9zL5FjvVyy|>&@Eo@d zsCxtM=LDdH@&0_=S!p;ku<$^v9+;{OteUGNflP=W9}@0CGEnDb4A5wkZj!>MMtSu+ zD3}LCpwPtZ6B0Ya1)49fqy3x-=4bYL`{Y}9Y3h+{pL$u4egGxkcNE}fpdS!0{5qA; zrw7+J^1YC)UBED5V<`XdPC)grd%vlScK*>V%qoiC6h8`T5TO^e-?XO)Rg7=FT>te~ z?7WfvGih5_nR$I(to3eY|6ez32WoELx$L>ErhbN#T^#*>!TRN_q~^i#`Dx@uFmQ2u z>+z$AOGOzR?I3Fp+2{(TMUv||@a~4L#PQEUga*UBI>U9;%_NC=c%%oWD5&pV#>ZE; z0dJDugj$HO8b=#TSmGQiG`3k97z`1Brwl==n`b2dA-u2UdXO~kc|T-I?Nte7wBOD8 zlYn)h=9m-7E4mhGyHh%YtZ3BhXQ+f!!zO@+V(1ZbMyw3eeO82JODPjvro-GOqmD34 zqvOlcE_^$ofdgM!wkpLmtg%IIC4a-dn3PPX6G*2?_GyS_kr%rv zD8S7wisxdGmHr^YY4Kw^1K~eFSATUv<3<)#Ul<>t`?mGq&yz%%by-IrvL*#ovsj=mDor!pY{zI-$1*J5&B!SA>Tm%CglB=|Wkd}WBV?dwRXxm=j~Y~bWpm^sd) zcGGiIqt*7)H%8Alvb7@88*%^6L(JvZ|1td~)$Y0>bQuc#k1alq?M8!%9*qzFu3tQO zzB?Oo)U&@x4(^D5s~-Kg(7<`%b?flt3k6e|DMv&mzytLl0@z?s2Wau9usYdKw?6b) zHr=>Z+OH34UNs$tYAfk)U}Rs0t)KthYJV}mbYij&g{$pnf*kByma2u`!*_blDF z+JOi$d&o$c;qHo5oFe>9zGqrNar_t&=YVy98Kz9u9BwmYmg>nSkpjyY{S}}EzVRJB zEP!r@ly_ETB4i!YJGht0+T1H|q*wtB35p7>{PXk{njx%O$$ZL5Tu%Y#7n7qvE#fvT zt$#eD4dU2HNDx2ZHCT+Jb>^T!A;n|R_BAFe)cx*6AV@)(e)OYL8<3dl5V#xMTouSJ zDth{AuqtLCV{t*S|B2%~^buAcVV{owJ|e(cRvPU^QBG_|^(ABhxb*{uojWqtr|$D9h`ifzCees6&hago-k$dVa<#6Isv9a1vg>8+ z!5@Cv%wQR);5z!QKI$eoWF;zdRUk_9;@C{YPoly|%&3t#J74vBCPN5g(jP1%AJ9sw zAw3NC4;hL$K%~w`%pHdYhQGV=OMz_FSX!cl-;`}M@OA(*{SL(3M=!g}KZip;iiv&Q z{S~Z%5$l*CbKO%DROa-zZ4PhujC3k4mceU7OHGn3F~6Pr*E5>=fWA821uz3N<;^9_ z7moz?u^}mBKnM~EL$%g|eOaUcloBEkyO;j^am@bNP+lev=Gu=%egLfKZH*V&vOv!7 zUgnwco|YwOsx2!IGN3yuNdeYTb%)?hW7(PNQ^p}jX%C)bcm)|(u=WNerN_SI!#vj- zrW#4SZ8%3&jc`AdcGcAJ@RArX&yYxCMm_d^B^>8vpmxJghMYyV7D^|R&fM8w2uOTL zV$SnJ$?(NWuKlC*M20K!pc9>YmeWeE%d$f{DbGn=*WGJz?m}T~>_%OA$7Up1 zu(f->r+1T9m&Eg9fa_;atEb|F7ySkYOdrVa)y6yCMa3khf}N{Xm zRf{?*pwQabI3m$W+(ZLPy%{tDq>X9QW5)Lk3l@28*3w32y(DX|GE?E=)_4oh8L6R{ zdBss+!sN;ZHPo7R+z;FM5aaT>9D|r`FXd&Od;7u+%ln;aTee#ujMzzIB}fBm+^43% zaJ=&DOv_hX=7KHE?|;A8xFi|4OTLW#>QBr6w7s2fbJ|_TKhJ%2BJv_|GN_QBV57sr zZqZs=c=si_`)YGbdiNvF=8XP+)}Ofi4@ZS&GQt*2pbn5^@@6!eA(chjYFjur{P7{V z2Ri2qEwP&F)tWTagGToe2vLr9gV>7KuCpUy6@E+W|7ZnZwY&M#!I()Cf0h6!@*$3y zHF;_u#_57^zrvua56`eyg0k>HS;ksOf~ zNS|WR%D);jf2U*Cg@?g5-FnacWtEIU_o2j?XJWd8KGqCHMDR}&o3UB?FxQE0J!%)Y z(kqE3Tqx3iX%Gr!yYsEuzwnC^CY;ArjdUY1}q-e1dgYOSIZBD{zv zgAhF6F?RfZFh?dSa@xxNb`18QH~hfLnJVVAGqE#S2xP`$T~@$VC_BRC%Fu$OHw-W# zS3aq^BpX@d;GgyF!fLC z`XXvCRf+XndF4yrLYn}Gty}$3==rLX30BdlsPHJ zH;}t!rEkGW{leK&%z0#3PcObRHLbyLKlopT13&810OjSng`KNqosMy?{mzK|e}{Xo zOZ~7TGc9tVw|GX%hrhx~`MvPOCxZr#KzHi9`aQ6Uw;?Q3QyY!vykda5e1^_qInQD$z3GpFs={C%%x2w+G@8j$wYRI^UKW4hGSmrzDY}47`$>?F#CR;la(UmSi~CrA-qobBa-|V$^ik^3SK{Ey6ijo zt0As(b>uV~#nUxHW_J*Fb$)nx9iof<^F^Jj+k@TTclYRM0y4k5Q7rj8lr&6LeOb!! z$}1aJ2N1mBkE4|m^)hnnC*3yn!3qO*XWiRXF*%coYYTLlJ>t?Y|WX$c7C&1OF*-K6!h`8FyZp48CU zwP45<{qj_VU(GZvuC$r4d82AK9t{Xw5GN5~TxV(TKM$>71N-7G&i{e`*+e{PUcD-A z&8&OuL>=0GG+M{cusHv5aw(|y?UDdsk4jSa+p9v0QVNqp_jd$x!+Sy!(_iScg^m7} z1=<^mR~hF~fa(a#=Xhykjb#dkRqknpSBT>W964aL&YC{q@@c_f>>n~ClvGX`jjdmy zO+KcwC-(tKBf$&_^@eB6Z|$p^z~k`kpCwPv*A%gi8V@X7CvKMd;q{2+om$4WfqBs9 zg7SmMCdJVcwso){h%%^>Y@n#HJ13yzk+r3@WoD2LaD}p^%<;WL2eZxzo)Und`zKVR zv|DTt)blqo;_PtTv&>bh_nFe!W}^xjoOn;C>zs)EAw|MkA3o!0J8BEjq{onP zDL07~3-xK=PWEYEGhJC8N*Tx5?;rPeh}Pc+zZQ)ziJL5bQ|S%3&m%RP-BncdVp?SV zI}i8B{7U$8hPQ}w-+U-jXnm8v zOb}1;ChuuWZD?3l*)6hfsEku@NJ27ul9-ak+JtCUlZYQfDx=4sl%5IhQHAJhtsL|F zJ2kVm9`Jj<1+TSBfm;s>%9I&(*s34T>&WRfKz$XZo>9$9Qr5}bX_jDn!)8MGpi6Fc zYh4_R06}C-L&EHSSZj;u=;6V26$bL{G<8Ov2_Tu^?l?!V;|yqeV4$7c=jYa0UXEQn zp?{lw5AIH$K(4x-h@%jOWvfazmTVOJBnnM+U8`FtDgWw?F#UPu7d+%msqW;3NgQCa z6xga%7WWfTi05ZGv2r&eBan3{#8vKrx5Lw`SP$Q!V`*Zj{p(bmDSQMDbc6+CWqB!u z9mR|AsvZa|b(v*yHJm-m49Uh>$z@7AXj;=l5ykm;W_#yy@=r;h^v7biC>%-mL&Df{ zoKFO!eUWM7aeU7Js}ecpv9fM?hk{#Tyr7sDJY;KLZ;5S0=D3|bM)`VLx=i2H(+nAE zm|pNt4H37-kIL=S9LHgi|9tyncqL}QOg*K$ajo?1(x<#U$x*B3NwDIdf1|3lcZ*3$ zf)bis0DWR&q?>svGM|iGjK-cHLU44pPw$IQ)j4-Mp}Sn?+NKtt(^?E)-kT(jeLLE@ zRU)Y}$N{C+*UHoYPU0J^W<_NLD&lekvxNB*9%|}VQWZH3Y@IBQ9bHGQ9=X?`h?Wuh zHT|y9n$v)259tfQ&Ad2wcwLoNIg&zR9`{VvpCbHB@sZPlHEh+NqP@6_Jma@eEa8o8 z>^ub-k%C@(m7WN-PQp{tU~5?cLPcAHU%(oy#4bKD$7PHbDg4AUap84rwaWG~tG19a zx2=E`qVIL5mdt38Pvg^Am(@S44d|iq-i%eh?g#Ai)6B6(QtRlue9R+j0E<2t=TXB4 zKD=-cR{xYZI;9?O*WlN6avXQ{r2K=csB5 z-D~HzW&$R;h%4|zy@X7YHNOeL<94m#^WeDZ-!T+jSuSrasuRJ4bHLQVpkNE6%-o9} zf-$T6G^iOsd9rcrN(5Y+iD1gV44Y8tfWgqj)=os>V_Xcf38=X=vzoKYfap&V(Dm!_ zUu8Uj^@K#&vTgncxMeQBueH*4GIN-}P4jS$R1QTVVS0@86#Q*DJ1rpk9D~ zWKWh`+}TQE$>ju7cITJx3D;NJU-Vp70G1ivi`itab9u;oozic7tz=4I5dn;yu1wM9 z90S>LE^k6HlW6zyXFOyVy+L{W@Fa4chG!)ae#V(Z93joGZdL!=#=)l|=!_0$*n1MO{=3dWF)ksB1g8Y!J{`cNTAxDF{5@e=cv-|C^ z=#)>_rF-^$^>Le?Im5(vWlQ&1rl(R!M`^zD2 zl)NiBa^n(@^ypIyaHFNe)48FmAqR$am7yE0J~nB} zdJzv@#oeXt>I2;3q-iBN`JeOqJ7HVy?WQ=H0IEjp^{!qyOS(A*h;Quf)@{gUmzvw^?YrkAS>8V}o#RzN|0Z?6AG zJNq?|7ufX5?Z=S2Qn9M0A4#If2Uy&E>EEoRZm@#b%&vlWjGsPDg$e~ooHw5SRr-FQ z9FgX7=`&CK4`6t7qR2P*mwRXPv5}kISX3J85;2GA{7z6a)KoYkwLTFmjA20U41seE@>M z`_Z;e^5wSAP>nX;YM*|8g5QXRznIj=eHLRdpZ0BdR7DXl0U;NFasw@0;`ekQyuy#0 z>A$%%&{&xyK}yR$C`5;u4$F=Ux&!w?g8y~_cSM^s(MYq(z{f!nSSBb`mH3XI**A9}JU) z7Zx6{YI-uTd!n4yYX2Kb6WqKq=eHbAe>u$w5pWACl_12+9G|>J+qterO?%RQIKN}U z{^%L!@^9|eGA?gkjnDQR<6YU4QgK_XdoFq|$g`vO-3e|At;2 z!u_4S@JZWKK~t1!hAChG z84gJAN}ZJw(-Ck~Mhc68T)9&$OWq`v38m7K74h7-l29uB* zv0!h*jb7OD^pwSiBcC1M%wJF+w}XA_hhRKINdt9zrs&Yd%FM)qG6TC2b%}V0d@USq z+HyP8MPvoABYJAt7=Ya$+8EggOp@k4?ycCLYTzjI*m@TBaYfK+H=!Czg>!T`ToDd5 zxniSeAjzgteSujee*d=5|2(i9s6uDgDmak+JfJrehGJ1-kg=Amh1O{JdzJRi$!m6z zglYr*#X^T-UJ-<~8Uh=haHJ-ZNr5yuT0H5725shTtt|&#l2C4Ng;?iFcu>!j%6(qS z`t*&}<#+orp%Q`Q3HWlPca?y%$Elyk&tNvCg;ivnqyCe-KE3DCuYN##wyH08c^bf} z|60;}=fbDdvs0%dSa4U4+@NaB)P@^2C&k;K`SP#Hvx4V*Ue6 zuk+16++97k@8ByFYK>ZX;g^J49f?j)SM&Y>4K?L54^!d%4`4*P(fDw$HAKF>DpvdF zW-%ZD<*TEeFBTI0V}R7OD%yjgRyYNlax0ok?<^jXiPHN9T^Kw#{~fk^i50HI^bn## zjz(LZKbKvM^n}}=#p4%BbsNer;FptVuKRS_9va{9IsuAsYE1^7`0%s)-*3np9=^Hi z>$}2cHkI`L{P)lA1>V_-TaIPr?#IJK6WX7QVe+AodI#M7?L<@Vjf%ZGBNakb8)i;_E8wwW2~Ts|9Wo8s!=o^_L| zq|5IH330OE@d?Yihd=8W7##%}oY_DJ3Fg33Xa)Rr<-?=VYiG+LEZ~9-`zj%0;ynaG z*6chov!8|;t{@=G+Qu|zbAh*IvR>7}0QB0Kj1&E$gA@`=@>*3XT{*eWwfGX}{E^uh zN<%Iz1~b_2z8mAr$jx?0ve zUmi#E;f`(kk7LPtw^!3LT;FHZyyg3#%}ma~g!Q3~IV(0$>#O|8Vt{@4k7nQ>JB&)}xQCVqb5TD;h2$+D^T% zTu_RD8hY2(_x}MF|87*%kz1#=cpMiFefj7{l2JW5Mkkt>qS-;R*-$QR?dgmSDbVZf zjPPPZlB?3NwCMOZaz0j7lOSp81)!k%ip@0V0e3iedr78*3UlO zeZ_*JQV1sB_<}1_PF?5Xt>B$VnhVm6fVXt~JG;H9rE)T2kR7NmUeWe~D~9p~@>g2y zWRaj~e&PQYRdFVCWr4T9^=;JuwD8y@o8nh|qLN_25^gaiHrBp#YbOH(XJM+gl3+6n z8{O@fcm;qzB_#}i{i*-F{i~xO@Miplyof18T;u@8Za$cjRqF&$VXoArm1pC!^db_q z2Nf|0PagXOB)uEjk>7C;UTdI4?AN6tTE5Z5txubA7lYcUiJ!G$F|xWk06GR>%xj!) z-RBrZ^5Sjn;XTn6VPh9rTN5H5M)^)oCji|NRT@VNe56G45uxV#nVD9xd}X>jXl|Un zqQX%Za>zF>HB9x|RX#Z!5YXRdhj;pnD!XWU{JXo{vO>t!y0lW-u&iY!+4%F_4#DR? zGQ8uA-hPSWtGRLf=k4%Q#?oXOw-3cJd)B{l{_62Ge^RVmGmj0=cg>w0+Q$vZfRS4% zSL8P$4*Oe>2SvGPM3!5AH|#gjc^1%Y%rEeHr?v8hR@t0Rns~EF$ht?*Z4w=|yYLTA z&yX-2&Ubxr%T|=+ArgVhibe}Frq9NLFH)*yZ~Jqlun}m)(Df9L?wi0%L5(|LEBvy( zQ;N!+o4-kF)bb>*?!Qs$7ZY{NW0WfU|I~HiwgX02;s_Nb->1pr&OMi^*ih&rh_)h2 z8Mozj>ZR_{DE!VN&C3SC5cS2I zZnmv`8wo=#H$0>=o?mY=6*-h~ca^+3o2sm2$Ji>TZ8ie|+Ba%7lE@adKG42WWi%~O z-ERoEM_x5n{QTO)G2FEKNBLd&Wr^wm!)biHci-ER%@lpmQ#g~;SFtO5@$V*|sh=-{ zv0=NxSe*TO$L7?p{^qv7C7U>Qo_E8-z3dSOwzwam|40QloJbKzc!166L3)EAkpQ6f zr$2XLeN(e@%T)Vi|F&yJXd|GqV{D>aGCiFRIcvvfu6o}mZ8Q73b)L0wmy2U{@NUmK zSU6of8}?|QO8RB2-HNK;u%rF)?;=uC?Y&>j9^P9tmu3@beM0O%9hhaDUpJnc~U1P6_Iwh_sDOUodlf44#vk1uRFC({5$alGGfAblwgZO~3r;@>MQX?Q|9bkadBcsXTzku6 zxrz2_EuG1U{M@tiA)A_7=MOyHROY{{;KSWS838JeUNYA+hcQsXhboPq^gJ@@#U^@I z^u0wE8yicHZ^In2$8$dIo8B{Qdj)C(gvi-EHiMyan$qSqF^AQ`wid4ll(~AtreBfc z%}g?=Qu5n`RXweiAx+~2w4xH?J*Iqd8^BD{-#(a+f%6%oTq=~l6)$ZuK5Z6HDutx3 z<(q%c!X;r_P66(1j-t<=P>VU{J&37$>b^OVh1Eq4Mx#4ABkOgln>VFYm z5aJlpou*qPULp|D(P_)#;Cum0k))}<)caHe{Y-k(x3^@C^Moxlsrpd&xhtkin#Dxi zh_d!%5~y4@Sa2$wG2zc0(U8ZiW>_rf7MayFp{t4L^11o*v3~B?3_t-BKvZ+w+WfIB z-=Bz%;rNkhc5xMH$9cG7ENJ{08M-V3{er;=l9#;1-4g5^pcVZUL;t&|ChL}pdMz~F zRB8Cf$-H-%{RN)gc+XLSk$8kvXCVflE%CW5uKeKhCA3?_Z%d z8P^>_a^HGcaS;JJO|$A;R>pnh?_rf{R^#+DTR?9xuJWV5468PJI371<&~;uX zDNNXR%l=QPmsL0tNk!5%E98!EYul0jw};(|6j^MGY5OmKXtvW0NRfI0Npkbt6h+(U z6nzZ|fmhjavVhq#Fc{8%-+SH~RmqGeXp-HV)rzJU6={Ci7Ra;*aAUJB2m(QF0LX?C zg>^)*spDv1DJ^@o8JpQ_$Nr9HydsN;EsLx-lTiwC?Y2KEM@d6$o>Af5Xx1=5i)&1e zp+giJ9ze~TneL5XO>G8Gre&~to?!Ev<7mB-mw?J>R5a`6Kkd9@7X{7p=d|;55w4#QeJxd51NOo z>~}K>8v{yDA@&FhcXIX}`Q*7@uFKv~Rw)R-&PA}0wF=@nOZdBl8K(IAOMY5dChNr) zz@o6Qpj4O~a_&Xat%u8h*T|tfIJs#Q-kPJ^uUZb|MVlyT*D?tv>H6BYL=t)7JP|ho zdf$zCxPv4UO3+AJrPd^C#@d%*1Aq18b$jK8kVVRyoqzWeib^VCEZ*&wza%{a2*@Ip zskGyV2Pc4=84LOs{>p>L%4cm29j44megk-ZLneruO(K1HlR64hoIiKQx!-oFi&4 zqj*%L4jx(rQe@9q#Z?yinm^+bT9e6f9IsJafttLmGaVV)%-jb)@(+A)($6@U6E;7p zohh%SAF0A$4q z8?ARx+*b9h&SX%{ngj&=6=p)q-J_KPCbis41iVUC-Z|jc*OQTF2iz8S4YYHhhOF0u zM8Vb8h0XP(^0P+tPLm-3yA`M_9%7) zf7Gu$$pjhb2v0%Sc8bgMV&|)yMA1T>-ydI~8nJotVheLBQ|WA>;as1NHjajUQL_OB zQM{uxfiYaNw)+Q`1d{3WHdtg1o1&f>E41*Z_g>r+FzZcW{}}G|W!Kk!{>t1` zY9~S*7f01Y3S|G`!1-D@onQH=dFA=pFxwvgRoMRm7c<3c?Sisge!lsTS);jS%llf? zDBxyFZY_X8p0?Wi!K4C>j3t=QO)r5)C0%XqO*ZxKUw;b8Sjm6iEq-#iu|nr~5!J6g z&<}#{w+?;Uemg=4bRkpYFrgEoC?!n|`-jVBULF7n>kHlS#KZ-~A!A;EgdxFxb5`}w z1Q@4=N+sK@IG7ucQ^oWLGSB8`VArJV7Q+DEm6C~E>-Tk%l8Rs>=(jP7Z<*1;PVA+h z5LN9pkTy-Y- zvB*(iI{YNIC60aTb1~FWynGgDA_fE^Yfl@S<{LbfsfZLLY zvdZG+ndh)y5RCU;|JLUrO}rM)9X`FcVfIxl)BWNFmKrCT0+wS81<(d)Wm=p39H1>yi)a&~hcy!$N=--Q5ip(m9dfx`SuiorO-q#fPh@ ziuq;}>>|18^invc^rRd7J<J*i#LhzK#SPh&M6(6$v^Lx?7H(&k(Fl(cPbSzOHp*8%@5nJY6yj0*aiCb*t5l;A6 z(U;m*!HAda7$5||9nMVv;)br5N9c}n-Ab&;g`T#yo zItBH{N(rmHZtEXZan9wYkKdnCnGaC^4RR=R|6SLX7LanYK09^YFz9tC zQYXc5-vVzR{JjcU$6L_;jWP%}ISkt^?PE-5i5TbMkeuvQ=yg&;L8nkX?$?UEdJV*C zfWuJA`ilf(&)35biiJ)-@ZMeHILj!^XIBYmjJ%9DZ9p-S9i99)Rk)SkkBdrX_{mUnB$4~Wpl@!J{ z3%08A-kt~7G!!31Q|6ua4NbiK7H=2&Z$GNi<+1fy#>z%xny{P88|@=@^^z$l-ksN8 zG&;`TjTs5RgRjWL|0eWB>Pk2hO zW1!b`92#)!dkUMwqdD`)PEAgA2`&(fmMhdT;?=JZmuBUqfJ+r4+ATQeD_IBF%9k_) z0xt6gZEOGI>WK_GZ{(Ipoo_#s?!`g0$r4YV?5g5iHl_?*Y9=R%TRX2ezKv*!s8us* zEg=I1lySu0-6ROyKNXAY=~{MnM};VnKwlP(jq;+E^u0BrMo*$`#Ac*IZ)>{WLy-vk zgoLfkY|oE~vgBFSQkMFQcz!krwEqJsEViM~eSVW#Q|mu~^=46sicuz#E9~mNxp!EI zyK+GKW7C+f{egE(PriQuIATq*dMBYLtsB?p_f4sfuCR%DY;ZH*V)(ZI@}*Bu z@7Uk}$BAr?{IC3t9BRG4AbA+#&WV$tda?IK@@kRT7;~fHo zjQ?O_SONz2R$O9&C|PDcM*gv)2Dv_vVggf}cfy|v_=3#=;HKK4HdVg|FzhM7n{S^L zn3G+aH7(*U4dtb$VSK|=F-eRKS6aZc#)qtn3Qd@Wza3Wqz|UP z#Y)F6vT8<<)3Bhno1sfAB-ock-aaY1#=(k6?*aAG!breA**k)V7|On_cYLtFNH zIZjASr(*(8aXxpicphZ;bg{dyJ&JRLdx`I0x`g#Vz>CN{6fC`5s1wFWSG*6&oM+=v zk6v6Q!8|ep@xIWL9yNtUM1+Mrz(CTy^Z=3d;iRt}61~T>k_74j_34HK8U~C0mCOvV z;(yx}uN?(D#xF)4R{ns05^w}tB4u?cRI4j8w5>%~twjA3*AziIMx^$X_0-RSDb~!; zjOsCT8#0rH-b@OTkgE(fEBB_hlpzc-4@Bp@l**EzwkEV;bOB55KWVTdH9p9P&5 z4}Amho7j4@#~edcMa8HtW)O%1h?%R^_+EZ2` zeJxww^A=q$+%OXqPVIY~gk$qeB=5q2#jJgA#k&D*2-y{&!IStKk2Oc5X#|`kw2TTn zgx^~8&u@`xCWS@F$_=UXG{R*KXiOwEq}fiu6G1dKzOM9hP#6nHy(XK?;fBPMzatN)n(5;c3>{4vgoq81T{pxam^V1jq0F~gClTF{y_T85k zTkCXT%Y}fge^BDT_?{1kRe-OmK~G49@^PkIE4?Zgk3LnuF{=L$5Gr0nt`Qk1=o9Kx zIE|N}XVPU z&Yexvyu)_cMJEK8xHD7>`h45y4vLE#0G;4PPA_Q2aR#H~0XcEbOWAiceamojh7Osc za+Ya-Vq~R%o8P|*et)rQW1YJ@%0NZ^>t9#SQes@d2FkG3sxPpFXwOaic>Z6SmPH?n4F{koa(xZ7T4*Yq=gvhXYVItVphGF0H zMg9ot6F~=!a)*y0r_Nr)x9AO-a#3E~{NG?Fks@Q`5e{mhCz}PTZ(&rz46Ej`d?tvy zzLiS6)b!{ed&*klYO9$7#kp0c5d8|Ilf0J|`+1KLplXwc^mV-M_I1ZZeD3shP_ski zE%|EcJ3enIWV|DT2e?$r*OrQUct#JHbG%L`lg{=P?M{|pVq5qA1KjB~l;FGYXwJRb zEaCfRD~m(`94EVDmV-V!b!4~pDH-of@|D7%1j;RzYTIR4jthpk-2)cRd2c*zDDuQx z)X*{U(~62%rqRc{tF!WG`G@poBC7?MnjL$Q>QrPL=8s;up~xbW5IT1&b`*$;ZL<&0#~?1;B{Ab23^l=>*)*OnO* z3Xc59kJ?R=j66mg`xkWv4Z$q(&p3GXWa;B^-^I#O$Og<$bJ9eHoo0apdbQ*Qu=j6i z{~UJ_P}0$gx0&yw+^L6TQIZJhg^YeY{P}GhVT=z)jcw9NpcR(LI`uWerX9u-5EM*4 z3ObrEguygDNhS@xu;?nc#@QX&FAkGXAIfA}n9Z!{?^*Tk^@Y2JcX8wh9E{fwgIydU zZVk2x#94y#gs&~mH*oS!njd*0{26g@-r-SiMt~bZ*pL#;IOvHj<5zMPF42p8>TXqb z1A8hFcq-G#>|DcYCJQUhyY;o(Q&yZHT%}$1X&kT(l*2iN_N~10sb4M(m-u7=(3#eeREep0h5HWY zj~SIxKpsxt3X!0bMe2wo1$9(c2B83GP2zl=@A zNAaYm&uUJSoUd=z&Q{MZ4#)ZXRQ)L$(~Kiry?Xz+UWbTut)^Xm%D$))$#EDuIozL` zGm){!>F2FD?c!-aElPkKZxB!F*9Me!Eq?(wkrzr-)$H%+o-JGjY%cQ2qXERQhU-nF zFcnap$?`ySNnrh!lAhs`b0#NfN6=ha&gKM~XH8wGXQYGw6=bc%?0fF* z45OsK_wH_6pxV?v{%z7<7MmpPyyX7Q%qAi%!*x!7L`xVGRQVs^-F4w5;|SGH2a>_+ zUfhe%-02iyzpu_$Jtx8|f+EA+$mi6asB;G!g}}}h@0{$7MTUFC(r8EPu|)N zOSey9|6K=HGJNaNIN#sxWp7UTQ~Z;4`AD5p-(5DzrsZ_b=1Du=%F}G}<&#J^6k?l% z1zyEF6pKs?^^p>#yK{jj`L{#A^>wc+^10&tuWBW8T7}3#9*zl6+qIih{+#d|{++-u zy%0=GYOvHFc8n6vr)HIBihcP-96-DlU5UAY;NJ$M^6&Vr z+1IjCk6GRM{%;Gd3cQTWil~0T38w7}QQlCH^|##Sjr+XVprf@f{q^p0q?$r<5|FE< zjNRS7MlRv(b2$-ioo#KvKp%chFWQnbo%wb$f z>+V(m;Y`Q<;nb%uQd0iOyzuEZNeytI=-iLU;Xf9!O%3c|kM%egfNF@umBzZm+N>Oy zm5Ws`yZ!@kr_Ygue0!puY~o%Y-8NHaM=P-7PtCSU7!%BmY+qQ`huox_^qtoOFJ;)1M z(EDMmcYJ76AjQxGj&I%r{_0K}|1pdMEke8G)&W`uKmyHM=)&RB0gc^DjWmFvxS%BD z(bu7D>ozBS_tFJQO)YU(D})!{Kn{-47|I*1UsF#gIliVBwRu5e?XvzNVEuC|;6jR%l-kQK7*YVF7 zO|sly8DD=(!i!5v`qZO{%6IPx={6QKN4r+$%lVYBjW8RR?60JsQ~r@sXnjb3c=BGL zU*Onb^KvylaKCZR$3~eXOFatt3})hJG;B;Ry0?qt;yEy9zCqn5a&eOo9}#X{;;=tP zGc!GYd>rZ0ykGw_PL&_wt%cylI8$Vi(OU=K1%97l$rgoYOvF9mCXxd*@_I*3>! z!l0suBb1CrSCUGK0>`2+x&XY9%^PrE`wroir`&f~V61?B*_hFq%h$)4*Th6B_r*Ab z1Kz!Q=Aw1PtKXU_hWW0}Yhg9fCzW3Ila@Fq3p#G}LAG)d6VZ{%vJjOb&aRxRp_;Kp zIJ#>`iokJX;$pGDa0pSZ0fg&w3fzhxX7z7FwFYMIhr4Gs%qI|`T@>#{Jx$y{v3Lo; z$fuN&<#d$-zsu(cuh`$kk1~ip%`Fj)Q+?n^hMEy&7Q&D0^@jU7j!jsxeQ~gV<~%jc zQeJGf_w>}A^r9x&SyMXPI``Lhq7?92GucO6yNc+^x9J~8&bli|aTmI8!o1bEC)s7p zXvfZEg1+x`mqL0?Gee8h(|3~uVIcSXho^31x(E(cug?4wD-N1vJSFXW>C``4`P&zy z#-3`?CQz+Cu6Ih`&>v1dz32gj2Z?V$m~iEKl^UP;5bHR!Bcz#?aL(#$`tTP=f4RoH zZhBOvYlmdsJ7Mb$tws+rE5{KjUD`K>*5Q&rOBTm?i60$HBHwQK{CbxUq7kyOnNyGA z?jY-VXeV~^AhLMs8WJA#qxZ^pW>0#1)#5b#$tun3uPn-w;)4A`EtkH(F4m|rBwZYY zT7~w91rCC?#HNkBhIO<|ib@mj1^>GUMVnd8)6kla)gIpdKZ?%!p~?R5;tMvmQ5)Tk zQKLaXksL5O939evgea(VZgfcr2uOE_peWJ}deev)G?EHP3-W#T{BZpTpSsTboY!H_ zMIkiwT3NJKuuZ=b%i|C|rqkYkK_^1K*doFAzw%l~Mkjk0zCK*;@z{!~14unZWTwAB_)Q-} zx$cQ>!Lz?uy$$fMf9}ZI{1~O~l+Cy|P~ELs!_DFs0i44#jG})fSqs=xMgr z9ueWgKr3oVH$HQ2!{4oU_{k(_a-(JV%GBTR1_ljKiE^#3)Y;14HEkoOI3FRLYrqrM z9HYJlPEf6bE_ZnDX21v44G4Wgm2%i-D*vd%L3G~$@ zo%49AT$FKHe7oOcm3>z*kv3Jk%`N$|Wi2PNW+a&vep$a5;sRTcAVPD;Q_{Ut*-a@@ z_f1-yvVx5(je1dPG>D!%j#l`FS4BM00O4|IfE24=6!TABlLs%I8)ilkW7?KQJzUrn zG?&3mvOh;(??(o!dY)bepl@=NT-{yfiEa$|szFO_lKNq?m-wDGnN85sk?#ra2$F&p zqUeD;xT&T8%=@rw{21Z@BF5wlV#_FBdgcv_WYDNI4{ zDe=w@cqFz+o|Y=(PDPwy`we<=D)WF=T>uaQF>zBQI84!~J-?%j2t*sPK-@ti#gqSt ztM{ro)K#(I`XJG*KVWwB$p+2NZg4Dv#*Ecs9WTw9wFrLs>+r|q-#A!=+sR+5>MmzSI=`f;^t2Tm{aA#23CeJBqc3^* zt)S(%&Wp1i+HMOy;>=j^gY&RZ@7x0G4~-UK-Gm`&j;w+%35!i)_M5+XJLDY{d7^4* zi6W>``4$z*5hp|c2N-nd91WMgKCdKUQ@2|oG|UZ&0S13K#IzkS`c!g9ybg*<40#~n zjt#v`(GSG8VltvGQcWr~lh=nA01^a3e|T$jMVQAUe8~)U`26|x5C4>(=#I#@e6BfX zBalZ9Kzd_gZCmwUL%m2m*dJ_Q@RGe#0w|D~M=k3HA4mccGmP9B9@bW*_|gx&FmJ2dztWPlr2=+2z zW_*LJ`n0u)#zag__O@byao=Zvls($*N2ygEMW&H)HjH7z>*>LB97;&(VjyIWPBs8Q zqMj(ZF}!_D7XqArYJaAJXS7wmL1xRYr2^xZ&I&nE4v%EIMp8_FA4=mb8R}jkj$g`E z!m5uM-mZnv8LVkgKQ`%yi6jIp_DAeVMpPki#FuRjN2>evtEDlEL$LgeJ;}{(%xu@7qN(cy&aIy3AYw}c`6H1-+TVdtz z26K&{*8c3__^iA~XQ7=`cz@tM#_hMrY>WP-e^1OBuj%YNSNIG3V&*sV+a!bwdj+KR005vA@2eZl%L-qLyQzAtTkN;lIH;YDpy0eqhHJ zTkPS`Q6N^#Zuvmg*I1v>k~e!fqc!m+ziMKacX8(k;k2%Ln;Fg^Ni$fgUJV`daR zJ=>Y!)Gnos)j!&4pN|09Rl5c+4PK2S6OFIPO62UH`OgPTw|Lc#VSR+b?@fl8weBCL zSsl5?&*G*IZ~ve?Z;98%D9r&ByTYede!d1?QMEnkT#9!Z%xn^u;Gd&CJ$NJ<=ZG=; z6Y{cSS$+Juxcje%Io;i$%FT`atLyJ~gBfai)Q&4H0~V@SaQ3#H%CRj0D%;*QV|=e( znZB@N#M2+7^a*s|T9h|JdX(Y$+p+Xnd6JXiIi?mIycqO=Iw6AdHF@uIt28p z{06aR=}CS+9Kx(@D*X9jtit~QkjL2~_Yk>HiP8^k$Q>ZSI6!f;oW2_pQ^XrO{i3;z zq;r9OcLuMrZl?83ZD$u}t)5c zl*D7+=}n@Fnb(EMhNdXo2^6xL9k71D#md$CWr6+$_q&_MlwkZ9?YmL0Mf79_tWwoIdIZm`rWd=^pLR~*$9L&^y|vCwJ|)iwtb-C8u)vRAO|YabeP)(V zLg;#mUWj@MGRhsnM;le>sQMO7c)|UWEuDB!>tUL~jQC)zZN!cL_zkArDvZ;tjm4S< zqML&W3O7^ecN3Zj6lxg5BjG2;0W9e&MzEczqc3R))+*GX7!yPB@;KezLLTUCKyV&v zM`CUERAneE3I4rn==6Kxf9K2ZWVeI)70>Xg0-;$eS>L1GEtz;8x}*b}DKVyuh>pdt z)S%R;3@ilZcW?}L68=|F?td`Zfdu1A_rlGZnvNI$b`HyroNYe$NHGjPI(dENt)U@S z*%n0iDlFWFZuI*)p z9RSNfn0;XHAJD8m2vVlq$rQ;0@-QD&Iq(~1vU%wV1xLjt0;Q=GwVqF=0-~Y(+fM_y z8+pYB64Z=19y1tj6ikZZDa>1B9(xgws!n&Y0{!g&DaXQj&Hr-Rr#n2#Fq-gQ)cGN6PNdiKtbEfi+_xW!y#8P5L_p32)0)| zKQS>gpCXd)JYOu<^8Mmc&(TvRn)1H~%Pu<2TX@&%mi>W?W#D!adC0y$Ka98~qv|6R z^l|rY?XaaNPIdzj@hKlf2X2zuEdsE+YPs5q2t$dC)U*c=25Ca3@J;Q<@&KzPD#>U$ z2wN?Y>({;STQY9+PFOY(+T-PBxGY47LHt+<+%hUzjg@(K^Ks_Odta$h#=WNu8-dQm zH-N#u=1lPXXG2wD)VuDa@y?3?xJ||B^S?hu>|Qjqgm8sEtF((0EVN z4l^UHO71>e)%GWD&pVp@C7lp(QwI{D`D5Se#N}cY1MdATr0CmqWi?jCT`W<&baB`# z>qg*)`0pQH%Z2!2DawNNcb7Il;!;H!iVl>MyS*(BL%Qgem%p;VYv02cptslak7UFJ zBm&7pCl%#$2RUJ|<(Lw4`HMroJg6lyNr>vtE%7m=2U_h7zn0NyM&PZpeDi{Xi5u_F zJ=o)n44`z*E{Y4AX{s1AZ|c4oot%5_@LAn*(;W-(*4u5>qcy^xg`5@Qj}C9gxJB7; zo1&G@8uA&^UU5osFY>evi=&^~_ng_~hwne_8v%nmPG)E3Smp^65{&cNVGjP~ zC_~P&zbuZ^sb@BmOXsVfU-nlPcZbvEkBQO@?s2VARx|!fHUwHf=Qjp~6ofeC;j!&s zlYTO*e_i3!kY+ApST3&8812b>h(h6BPDVu8p~QO}NDh!JYh}1}f(u*80MLk!M=qV^ zziB?WEdG6$wp&eqZZRzG381uG+n2CP^C}MnD~Eq_-$MDsJ=*R1A0QKnmoPpP49YL% z8MWTp<~t_6s9axh2+BwV_jJ)6=t%(1#<=Bi}qSne*emvNK0w%ov=!bE>jTsVd-<+D%cgZ5PX!%_F!`aOlGkMi0_$adQLB;D=fdJV^~;lELP4NGNdv5WGolW>B)qG-xv9{ z7Qy-`4aTv13PV+HgmtfynCO4T zDTOli`E4@fN4cvKgOWw?K8{VPS~n*%{f?`g-!V?@4p7`g`h1H2i5^b5bAQ2quYcJ7 zKs3@XHx<6&M(LHpsRhRoonwIBHBue0w&4~A+p0L_+(<+5BUANw{W}p6rG|8TN|qXs zC;Co4`-;ZQ)8(MlH!LmY=WM_< zF;(LaFJmQD-?+B$Ikn?L*Cghix(&>U*YrV{AykGMLJXjqWeKPj^tjQ@Ftc%J*h@|r zT=eAsb{n{U59bjc@jE@DQ@wn`U!Zhy`7dxcg!1RGFCtJyayCK@OVac0qFD5tQ$4hI&7r5YKciQjy2yA-PO0Rk9c5tB&y zL8NeEOG+9HdIL|y1b&K$f^}q<2v52(zDG;>Vfrv5RY02n2UCIz5=p_OCLnH5F9#&h zg9S(|qhq{oa7QKpxdCOm!!ILfwVWMS{CZ`{=9M@63*Tw{aJk#97;|GF50k32NOIZ=ocPdZ z#>XlwERU*G|9L+7n*4eYSD3{mm^d>*)K7rs{Kh=Az5{cj5Ngqqj|FmK4ziT?auCCv zv!t)7gChNWQ_@d-dHW)s>duFbz4fQW^1` z(4JCoYqA76%->|Kle$ZK*fh%KoH0#p!a{UWL%oT^$_qJ5wp-xLqVO0?{1P(65R?Od ztRd{XGQ7T8bAGgTwwqet#_87 z#;0f~a_dF^+b)yWct<`zKTqz%@OXqVKrbmVD5vGq@@y}pPOVq}-N_&GZ)&T07f)gY zL+zy1MvB0>wi{{z0Xf7SsxSR-1Fqju0eoj7zc;G(Hkdjz6yE8yIX##P5o?p4+P%i< zn}4BY{i&*=c%-k$Qx-&lDQ7$l^~2Jy!u4eA(^9}cJhe1Y85xm5klI;`F{L0^=bfeV z!CL8tzk=aPSKdCV-uvE=_{xcoc_5QfG(3Is3*AhHl`vZ52m@2Q>`?n$z9mi#LyGDO z3N5H%*~?vQ)3gk=Zfkk=VB#plL6tN`=5%EgeK9pP$_8=}6arb6#mr*?i?UM_m@2`a zep-Zmh@EvMz?~%HKv_-fv?PT9P>(2U_7yn#x3GLdTXbYK;3gAA4NI?O=b~Sfr{tz7 z{@L67&I8ED0`>6RFqH=7g_D_6FPI-x{dKHH_V_AoI#N0=`m@xiLu@?%uzochaRG z>TO_{1MuHqRn44b(Q;I7V2v&)L!nN*m%Zut>?gNoa_jKz3uK&I;B$_lMjZ|m(iHMt zJr*jNevBZPXUjcjiIEpE`ofw(G^K;{OFnV~HS5~OlmK<7p$~XrFSX>f{zFDUsX7hx zIppPpg=u(_LM$Vkeg(wV&6c)VVsYj_GYtcBg zv_P(C<%f|~nL=nAiCIr31H?n8!HAU*_>l|no5ltsOXXaPK&_T&GaH)V<=3ped!A#~ z8a^iKOg^1;Rs>bJbtGZW~A!hW_6HAhKKmL!!U(})oSyJet z$`1tZmXY}^O1FP{)NS1iW#RkMzbF4NuH z&j|7=9PVD}s>B{I`h*pd&%^!N7R8`zIZ~R%RCu^OS?z>aol#yK4Ql9qmOOOL_#)z8 zXN(ULRCnUTyG=dwhH~~xroIPLaOWN(n_?B^A}sE; z8l6xgrGQOGP|i_JTP<|X+n3oTPPmrt9~Fid0FY!KbhviY-qG6Set0Yq0krU5S`BPE z3?Rf8Rm)FGd@SBykepQilC8>H%%J+ahF?r4)iZ1sPDwcdWCtuWUBwu`qn2~@*$wzbng?`rau7K`u zQkRgksNUC|VVQorAfq3*=Z{8^#`ULmslQhOjcWc58=o8={f83TVlgeH{qoiESri81 zKG|>nfnw?Ti`3<))0@2>$72OA+?u~Lw0ZEp!4d2@#CSaUK{!dOg5^UvW0b>+lW-yq zP=Q4mOb)~S9SupiX25e*G?9kFb=3L*B6&05K=`X(te~Z9eR$+QIh3jTH!;QFtBX~X zZWlab`s4Sjr}q3W4?P9%&kth;97-xl3kpidiU1%}ZQBPfn}X_|Tkq_1*}^A8gKnTi z!-pFuXp`Fy=hxQabGO!sxe~Tb%A54Ix{`i_P8{pON*y}4nPlItw&%2V6)?B~13y;d z7<2j(rZ>FN(Kk?kPH6Jq;1%jnA7@iL^Eo1ve7GxZcaz&B*+CxqLC;;>pI&v)x{bY{ zYfqc^FOApj>b|@YMi$P}FD38KU)L`6?xu%Q$nr?4K|o-?yqgK1kO@d)9P2{Jfe#3a z9zqf63{itX#@}hob?p5Ea%p$(7M}ZC#&6c&__=VjpLE`21axRM;V$f5vAs9r!cgOe zsTiA{5FaXW)1WC&xi__H3A0OkI9{h$!*!gEvJq0n_RtdZbq{XQDFZ0xFFA) z@8)OAng6ceMa74(FLb|H%bp%?x>2gPln}TgYMX&R?peCW?@B3aU@apo-`ROfZqcL& z6@(B4vkLS)uBoVEEOJH<_SC$51A6$@Kx`+C$MGbfor(eLIoo_1tX!u9kI{imHhUn~-$n)$Irl3x9Cm)u^K5n-ZQvXH_#JDg+q@ zrT|u~ScE5gd)l0vxJ4QcyArDK6qLcmRTx_!krJj7W>c=f+qj^-Kg^cHLqWi6WB2cg8MnCBk1bGekmtX70x-4Imn6Lg$`*9o7mO{Csu89)7*K>nLyOds{w6 zS=*IC+WQR^eWEW&98w*DsPZ-YpeDtWO+0+dcMGMgTcuWS$m9eg!HOj-vcwLkZbI3c z4dw*iM&n=8>`Z6Bqtms3u#&zE4{``zbUf>oCXY4$=kRvnse2W#KJ7GZ{?AZe39lC9K#XtWyGa8=b3 z=1n)2ejmK_Jl{XzL^%)kFntwQ$y>CLZDPjpbO4Y{4AN?O0G^~>y&$$-qN^$?ok!j= zs*O|jAvX{AFoPwo=%8JaHH|ugfD(iEC-O&Ie7{$pRW7ubbpm1pqhQhEG;)c>qA^7d zP^+0ItJy_GxjNHQ^1EG}NFaE=+v{WBul(0`9rrfBkJC`z-oJhaV1+&0KPHHb*#Z_< zZ*)&k5n~c-^R+IX{;E$f%d7vSG)J|McMSMFuHAO##Hj>Y&&ieLi{fGgb z*sYxlPyfMjm&j-GgvGaik49mpW+pR0505u=mQSNtdnDO{WipmU_1Zw zukd389pATq;V0`AkfZhMz}V7L6%E?SOZ9l=u+r;5L*&=-OeMlq*Sn7ZTEU_%@M;l% znB^G=LG9;G@tpB?RLm>=ifpweZO{E=w+?zTg}7$tz8zTzDOGO=#-w@g$DZqaf6zbn z`Qx{vzhNxPzs{BIIh%A_f5k}Nh+7+r=&j?t3COQ&t5l1gxo7HjY(-66+~*pPnX>zE zC};`WF#9Ft@;<6hA;<@QLgo2hNhKIR+h!VN1M2AVn zq&yk~kZEW8{%i8RPAnnownOx`q{fQ?LK17X((&m@1IsY0aiy-a3u=74+m$331N)>{ zX8q&lUe78nVZ=iF8@T^Rz6qHw;9naR0rl&aq=hp~+?-#_ynVH#v~=F-{GWuH z&qT8E)N>So$uAIyQD}*XiILakLrf0@>c}!Q+G^pcw|ba=&k;=7BYr%8uXAyguoQZ6 zL{|QL%m|sE#hcE)<#|bo(sP->o_m!xG5im}>jV5&zI`upQnx94v^Z4_Y~(8@|MS4v z_&JLy*6HCw2Rbv`*vZd`(CEwk4%xhBLad5*DHl-ZEGi*9(!wJpnO1AFu{3b~3`X$0 zSTR-H77u5+31r+p6#|L@L5lI#a>sc8o-)SiqFYWB$)(62_@M1D=CSPVs96n zGBtVU{TNUhJ0djoD5=;Wg(3IUNy9kx@aN-DPUKg5^yFR0{V#MJ9Zqo~^qE?3etj{o zfvpf+qPVzvd`v451S&9ldR%HM@X5#MgRJUI9&Oxu0!Ft8LHTjADbCn!n;<4qek_w! z=7IHI=;0!%eO9BV1RIm<%mlRQB?X~GJW#>4**qa>HzO_q4X#&}1#_z>xc_oPWBH;5 zgzn5cQaD#SK7sl?foaF;Qj~y5oOCo`abhY(J`EM~P)9LFUhL*-MlXQT_yy87D*>q9 zJBJvuuiLr__7Hh3#{n{Ea#6NbN9RG|ZN;r(P`^jpw}+9dFZ=GD9}N$@*>+aJ63E_$ zo3iP6aRn12K0O9LSM=P_Vlbm&_NP2d6{Y8YMaNq2KTkohmlJWur(`bXo`!eP)+=w*S5 zYRgMXhpYbz?~P42C-s^oLA{+MmP@Xo@L{lreO=dau3rnG~{sYZmb8hwvzxk6h@Iy}HA%HrMg zWw0)Z!3io4>4T;aDa&VO!zw^euh>%zMWr?&3z4Tb*y%mNM2vV)2syUj`-cGZ_9+=B2nyuB~fjUEQm(b00q-O0P;fB z0Lm2b?tGu0=vX!L{{A#NTQT}Puq?%WhPyrJXc(2rPIFUsMCqKyBrT1VM2(_wlr=b< zyC-V!k<A`aY#TtYt- zl?bzc^xu~9a!GIg8@Hh<>n~?=oZ%C;N{>Y=parJ~PrkbkL@>hmzOBuEd=ORIC5%fRD5A;*$J1-(DpHr}~=h)Et6 z4Y??=^%r%bG_0sd+ma!BK038aPN+&-rF-`TvFRfqk?E=wWzDN+`sirf{{W>I-NP(0 zymXY$K3#6DEQ6oW@@#F6ohl1T#wmMtr=%Q(uWuDxJnJdH$)~$wH-&`%4nFv9W<*bP zM}enO00?$;PRWReFNpPkg3&oXgYE?rRx;#C7C$Q0toHZ!M)$9mq}JzvqfqTYf0JMJUk9qopNY7F2uco z|CF(xH44Qrg~-#y;ZgDEKR~uDVX2$Fvo%+sNZgKD$JDz-noR-Dt zWN<$C?6yvkFN@O^j&}o+65X<*&=hG?0U^%`!`~C*+>HR9x9`N-066(RMQD0gP4<@r zi8|YAAGf}lMHq-O*Hhf^>O@GU6+lAxZ^(O>-O2(aM|jMh4nMC;q@DP#EckRuLe`&V|+y7aeIXQ zKo?9p3@691?p85cT8d}JU@&aH+DVXvGQ!}^cui0WG-*lrhRXi1NW{WiOk@O(Dno?v z3AEJ1{LS+h=~%!mi0qyVMeBPtz7bUz`WG$<9Rxc!{;TqBK+J1C8Qr-Ds`3rn{jj{e zjEl#VB+!JzDq=Z^Oo-XxFpD7j(T`^?K0sLl9K;tn-jn^TdZ0`QXl{-D0^BB+AuS{P zaZ$=KFQ621jBV2o_`s%?yd{L3jev-U%b)t`Msi1bt$}6`uqMDeI1VA_o(ZH@6X`)# zTR8P|qfFcIa@0;WReg9hLZo)*7g?zkRWqjNz(>3TER!S8)FS*nsrnwFOWM=i>&Zdm zb!#UWbk(yJV^I~r=iLer1Kuxf`s*stYhL;>EzJ2A`GiW9I=(oZ&s*9Y-eD)wR7K6! z>A@Q0ZkMO&djnwUEMAZ|E0jF|z?O0{!QYz7XW#%m$Q=`F`cy;EZI6!o?dE|o9S+;$ z<_dEM+d9gwvv>-6bSyJFKux9Zhv|)=q|wA6a0%I)1vKA{|9py4pD#`OeP`32Yo>b+ zE!cgzZlETgR2V!Dq;t{6wz4X1QQFzEs(PeS%Ty7#c6h84_RS~1$~zbZVE$6*E2{$d zf6eZA(NTEezN(d@3LcM~^gF4V0#0KjW$VUrHK=EmjY$C6W{g(+0xY5ii@G(-GZmmq z()wn#h~4?%w-5MK1QS*C=^3FAwDcCM?0tXaeZD+NN$!a00Z$d~e+$Q#)XqOTctUc? z2a*XbBNIV|^K8Lf#|@X);fe%+!RX0u+M^q-DNE;JcEX}uogArqM_%d^sG{ajHnb%W zpup-h3%bu9!T8@z#(*j-z}tMy-V4C^^=wWgf*ZXS;&ZZQJ2K z6+suB2b~n>!>6Tl*XNj`G|ltJ+n4@FBdV;Hs`Y<{e|_q({$-|M>%%Soa^hyIf0aK0 zHR5l+mjP!tm7yvD%Xd>N9%`4&O2p*+P_XsAM+0d=V0_M#U-YevS@QLdp4c7jt|gjY zKv@m~ubxb(okVyMhd-w@NIrBn{DAP`0P8w^xm!%`e%Z%}P?qtDUg*f`(6*fYwj!+gfbUE%ZFM@xbiz^O8aPe;LbpCwW|sm?}l*Xs|2 zWD?t&UGrJF5g=~Mv^}TW@88BDHWQw1m)&na)KASMEg`Mr(u;Rn=DWEAGE4@Xc3p?_ zf-#uIDV_ij(sas#NeZRy*)HMI@)v{Oa9j?UHUT9Cq51qEss=?xBZ-2M; zH8tAcKw=-WZG6}q_`4cXkekx0AWuWK>EB8e0>sEZ9M%)gq@XgfxyXs>NWpOPG zsx$a+?GqDTIVi2v%kDZ5VtpCb*-egv3#3$4VPc}FRwYm6yirxB7!8h3AO*aB@U$t~ zS=Ta&09{U($$kDL!OyhEq8BIsHl_>Z=;IW7H|1PjuuJmT5oW!*w0I`7&~yC=LQ_Se zQODJ~IYss3G@N~c1Y)~f?-dK9i?o@EwjH?J8oCI^xH}9@c%uX;Pdm2ONjSmsWz3&M zL{pKqZW_J;SdyK~NPc=)(hM9|d zaa5Uj-VlMcM@e|D_^O#{*36`5!>5b2owrMTqBR`65)D~jPBBmNsA0Tp?{dmh2)~PC z(J#lq&P**l#W|hO1PF4rBdG@%A;*YYb}}&nmkmUKn&kI{knUMefhC<~wgBb~b7`Jb z%MqF(C=q*6+aoN!nr~DNnN)v>`rYr$&&=rXP}~%$n(;@S#k(!Jlc36L978IB^~(X6 z@XtrxeC7Y+rQV0y4Cz zX~TVqQgXSMMbZv6>P*n#IyVtBvnB+f!|v+BRZq#3&6D4hp{RUAszf8!pT0yYt4&MrWoA(KS0~x zJnJeN_qyhDx#hY1YBPh({22|={Om)7^4-sr7ru&Q;QS)@dus#JfP|^7h~!=@&6+kn z@D+Y7G9IJ1K9Haa08@hRa`BjIk*pKO1X4?X#zH~oap&JJUeOC=nd@Zw;SuuC_ixp2 z7XSxGD57~{DYs1UU)Ibe%b$C%ZP2i`l%_cB~_gYAa?9ggM~b$StC$E>vUPt3juhp>?o zk1U!&cSV=Z&i=vY(&Xxtpi6z%(g_Q;JiBVFW?;1@$v1W|DHD;o#pMpI0|z^j#)2E@ zVZ#L?Upu|4e9Btu<16}T3{m#KNL--R(7J525D72iy8G_>c*^7e{}E+U;LXOfY@DY<0{97*8VqlDac?^wG+HO1_j4R?atJR{&i<^f? z#o`1|xM9XKKoJMJVKJ^Wx1G}`r$#L#Lc99>*PDK9`8HiWy)Sv!%c%lFfM+Ti)J%sN z7hU87LxGKLE_Q!@he&U7(KGS)LPa;T5jTI4r$xG;JNyr!=9+or7xaQ?gJ=N1h9o$@ zl^$TugoNy1%fMk~&N%r7*vJDSt02k*hI>T}lDAOoJS-Wr0R-XljJ96Y?r&_!_m6Hz z_b=IooGoEQ8Hx=G4CgybGMp-_wZH8>-0!XpgB=4o0DTFjXJ|>V|+42 z8E&KCPJuxSJ=*)-@rPi{RXpcBxttzQO z#7YjBXW~ukPuY(r;-mAPf`o*UsYHk1pV|a^>qi)<)DIj2d9!U%&PiCJT1SDyIf1Xo zvuBI;066MY_nl2N)aMD}1s>g2;b#Dg4O4&T{;JHOWpcG7FG$pXHaVM&=+F__(ls9= z^y091_n=Q=KM0nlo|Ta#WwZ_^Z5!w7qC`9M}$u zPMwKs&ag+%4Xn(oyM4=mHEd}EH;tt1)uJ(?U&`J&4g#%lO!8HaGJejxRiST{A&sI1 z*(x^Fa8Ou68BOASL1#*hB0K70X`1g6mBM#@)eDW**>~aVKvrbK}CS_^~D&| zu2BOenCPk4L{J}UqvZfikAYM;B&EA)Ug{^e^BxKt#2pBzdQi7Uh|%=-q@#*@+1uaz zzi-;Cm{gb=-GzYl*l+J=GjPOT#e{|LCxeo2mK-6K!c|6?FoLn-HUU8MuIwwvwcBSa z^P887mO|Ut&#n$Mtx_RsJwl~A5?Z45^;69cS9lZ}bW;eK`n2=ZZwRO3cASq=BfyA_ zL}XhJp8}wUBmL4wlt*6v(?eZAuvhik3v9ez`e*$R$0ZcmCg^a5%BgJ2ME2`!a`F|1 zHxf%!=2mLjYd0>!3&^GIRg66A`=N|{aZcZOJTEJ%A=mc>WK1(zz-AINLJ&J}ZpEQ2hBof&qRr+Nl_WOV(G`Fs< zW60vvou!WJ@aiSL8T*3nJ0o25AJ_g~?4HyYSuw-wGP*AJ1AIiFRkbYH4nYN*0r2YGgZ$E;|t-C zKtVPfEXwLX#7AFofAlwg&Bg(5k>;S5VJ6Q6{&5X9S=uL0ABZ-D|q=o zhA&?t-l_=~9ne{X0^BVp2Z)g6X--}bmRZoL)XD*bWwNnH#BV}HrGMaM=84L>dfl3Lj3ckdWi)w=3)7=OGDl8A5 zBqo85q8kT<8|^Vr!BZ=2OxrcBz(_`JL1GoUlX1*(NJa+CY5POiO|aTSnrMt1>cNZX zb7$v$9EvvP6N;;AO|(e`H1R;O{Y$aB^fGGE*pdi7#vL!fbk#a@7pO9{Jc}jsE91h# z0!HCCSq+hwM)iqc(zcoueF z!^Sid0g)Qzd=$*yBJ`jix~=_1DwTA?b_ zDT?OI17xuA+vB0MXgP!UF&F}`Dh0!9mvEF;eI8#(FE%l-j-`1@wkAX}_M11Iiemm; zoVO6gGjcUeS=h2*66n;Z!5nHaZH!FE^KUDOhS9fJijD^H6hU0P8$0J)`>RiZ>rMfE zp(jTpMt|%lmfjC$uDm_>RBrHJ+HwQVIdFKmgFETp2fRmo&r%~#06Yb}@7^M$r&

`62Fvb_1lk@*WxO%~XHk4$EQth~ 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%0DSVNYjoel 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 L3lY2i_u~Hmidkmm literal 0 HcmV?d00001 diff --git a/app/static/img/favicon/android-icon-144x144.png b/app/static/img/favicon/android-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..86c76eb2beebd2ab89abddae793f5cbef9d7f1e9 GIT binary patch literal 11944 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 literal 0 HcmV?d00001 diff --git a/app/static/img/favicon/android-icon-36x36.png b/app/static/img/favicon/android-icon-36x36.png new file mode 100644 index 0000000000000000000000000000000000000000..747aa8414e12cc681a64c37d28b76c7c08a0e73f GIT binary patch literal 2623 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 Js_^{v{{X--zIOls literal 0 HcmV?d00001 diff --git a/app/static/img/favicon/android-icon-96x96.png b/app/static/img/favicon/android-icon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..f1005975806e9333b6f9c85794761e9cd626a020 GIT binary patch literal 7515 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 PX8xJKnTG!_qbh{o literal 0 HcmV?d00001 diff --git a/app/static/img/favicon/apple-icon-120x120.png b/app/static/img/favicon/apple-icon-120x120.png new file mode 100644 index 0000000000000000000000000000000000000000..3877b6befb9e76a0a593f505032a55f7235e39f3 GIT binary patch literal 9497 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 literal 0 HcmV?d00001 diff --git a/app/static/img/favicon/apple-icon-144x144.png b/app/static/img/favicon/apple-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..86c76eb2beebd2ab89abddae793f5cbef9d7f1e9 GIT binary patch literal 11944 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 literal 0 HcmV?d00001 diff --git a/app/static/img/favicon/apple-icon-180x180.png b/app/static/img/favicon/apple-icon-180x180.png new file mode 100644 index 0000000000000000000000000000000000000000..dbb3bba0f86e37d40b27002395e4fe21d06f3410 GIT binary patch literal 16115 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 literal 0 HcmV?d00001 diff --git a/app/static/img/favicon/apple-icon-57x57.png b/app/static/img/favicon/apple-icon-57x57.png new file mode 100644 index 0000000000000000000000000000000000000000..951ada55e253b3a43eaa4b10f6df930258a3e142 GIT binary patch literal 4083 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 Js_^{v{{X--zIOls literal 0 HcmV?d00001 diff --git a/app/static/img/favicon/apple-icon-76x76.png b/app/static/img/favicon/apple-icon-76x76.png new file mode 100644 index 0000000000000000000000000000000000000000..b9b0895081c71ae6fe341057d11cb76e461813f6 GIT binary patch literal 5624 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 literal 0 HcmV?d00001 diff --git a/app/static/img/favicon/apple-icon-precomposed.png b/app/static/img/favicon/apple-icon-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..f64a9a7749d1e91ff7e8a9aa62a2ab4e9f76cede GIT binary patch literal 16073 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

    fj)zomW6C)E|%OsrO7eX#Zn8BH(<{ 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

      fj)zomW6C)E|%OsrO7eX#Zn8BH(<{ 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 +#ffffff \ No newline at end of file diff --git a/app/static/img/favicon/favicon-16x16.png b/app/static/img/favicon/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..02814481d9eecd30a40a267f80f36cc8ab3bab35 GIT binary patch literal 1498 zcma))2~d+q6vvlC0z?jxLow6FVi18GUqXV(Ae1ynP`N?`+YlsoA|%1&<5W3B0V{}N zrk+%(U>yon(N;&R^(qduMI047S}9c!@F=m9Y78M?7pF6&o#{+>zWv_3|Nh>4`*wFn zT1ujqXRs##z$=N*6F}=bGu>U_KaA{?0gbCFJ~gM1e(TW&NWJD?>Dv8IHNF)RTK_n98VY1A9@eaF4=4NFOf7QgeGm&Y@xzel9-cvt=Xjs-8^#>P^Z z(HFh&;~s9u0s~Cjs_$=5_v>|4wRNx&QfTP4t5*jH2U}ZPOG--e^Yck064Xs5)6Iba zi^VcLJlxjS*4f$F(a}*-QvB_AKmITkLl5CBA_ZHDGwHg{P|PM9^jd-HbpY4_b-U(rQJ!qcVYvTa{$8hgcC+TZ63 z-2hmXU63r^=)mKq@Hh;Qd+mv{%ys{Dj%qhXbA}l!t~M+U-*q=CE3=eRm!|dTtvtJD!*w746S!&pPVPVs+=R?We8! z!^2xnPFHke<=xokFW*$0a#VCX%1=2ePh-fG#RU6DQ9;Vg%lSW}`f3r3UZ0SM0?(PwynSdR&@lh#@#RXOGxlHPzHoMu!spzpu)&niG6ZpK*679d+2g zIq~pgH{{It!9eG*un&F@Nr6S3q^lEo0i!>?IR+h%0{(|a04VTCDIrcJZE;0VoJiuu z3m4p$<-#Es+#9$fRaQC$W@?-L#4A|mz=cckngcEKaP>EP<@th4<%XU)^M_ey!>AEo zoILZW%G3PO17YUctOxgzmsM}PQGtntN=w3}vC{bNxd~LS)NqsG^ zUTQU3m#sx{7|=`H+~(c7ysN)UM^sOG_yx#veFJ>FCtf@|LX&VS)ca4k4*2()>vrr7 zP5m@Rv7yxzwVN8UC}4%wR)2t@x_-T{s$);%&LhlCJ@stk*pemTm9GAKn=%ArZEY&K za@n%#=HpGxdk^hfpSDie(cW_zfE&a((*FEnLz;!pws9yGA){n zu!RVd!=Q8MtOy#7L!%KdIynCb(CXzHW$Awhqz|vGfdMOLDj4-jv{+(LfF!L%rAU^j zG_pJ*ixN#)PG%G7G$e{lW0Da%F&$wM)hJrPp;C*Biz%8J8cs-4^aj<>H7{U7uwW*m zP+h2%ayUG_tWc}ap&U*cM2!IX9J@gM7xT6zhoe?#RB99;Y`PCHY==zHtUP})SsFR2 zo@P8B{bm#=}HikA|(kuhlE}YQbSQfNkRe=0;Etqih#&Tv7mG@NR^}2g zYHw%d3VP_iLHNOu8XNl!bi71!v^fCOXA5r!@PYFKR99OIpl(QEZlA>2xuO9e_9Or# zrU1YuxRf{x0CX4teDMbWWF7!WhZnWFn1BKPKu23EU~j*dwpZQ&R|LcDyr}@7t-Nms zqRUYXkP5T6GI#fS#=?+8-QLLlGSqnS0qS3C^o6&X?JBstk`|?AHs?}%M3o5MG8&;@ zhR4pln(byb5Vj#1dV1&@hcdW6s>X%&{&nU~Rbmrf?WXoeW#_RvZx=b_%%$#bM*8AZ z#jf2|R2_=*PRs!#_w(|o>F6nM)1}i(tEMmGhT4TB6D!v_NiiRglOIDj2b2yb{O0Q7 z;=cL&drGKJdoOl%)35hvxnG%L$2wN&oK|u}&b^JrpN9+26pjfz%j(4s_-9)AxB%{@P*qs_m z32HTPHFQF{5Fy(mP36Eu_+?Vp8;=L{@UCb~$hHcm%_#o)lhDyx`%0s!9K$;2KJ`Lh zA&G|L+*OU?@fZbB&sO(}#Fxu-^=iwKK~}y9j&U}x>4V%>$dQeg^Qw2}+c%1r1S~s! zbcolo6SMk;pEK3`BDe}dPqx;)tBNgQ>5n|*ZwQ*Vq&${$o;4bj=;SUs7TjrmT$kR( zd|Du2&0h2QPCaOtWpeE*N})p1$09Pehv)0z&v$=+jgQE&lbFUhk^&>Y^s9G;(DM9t z!cSTR>j^_0ZjVp2UCHBCJ*P+iIlBQ5iaX67UD>|v=0Eirx=U;E-0eR9qy>45s-kY4 z!NUvOes<`P*%eJ3*5;jR{y<~Zn|ayQEsTvnyW^tsLbY<;y~j9P*!K3C`{+q=Gh0A^ z#ZQhGxG@-RIrnW!es5!|QCh>W^uboVIj@vYB(j)9CZ}RyChZT_UUp`?+^fofdat545B&CuU(FS%ra;9ZU5gCmW7&ItI!7JmETY@72~hFy8uyxQUe2YN z7`y9wCMG5exhjGZ5)xmz@!@SB_@wukTCwd|Sm9v#I+1M8bFL{gNiCy;!{M;SL_}1K zvUV1red#?+XiB2Eqztc9rCUisft+6cnP3)X3)&K2dm$u5{MVt}W(CvtTW@c)z3D@A zRU5-nk{rsrSBO0Rkfho530CLMM?8CaTv-y|^yra26U6o~qvuzQf3}BN~l$4?pqR^&U?bP-S<- zHm>gw<(j9_zW2;X3^|oT&AVsj%(q$#A~9urxl8n$kEEXN4IOTu5mz!Bjyg3Tft_bB zY#eBRw>JNTS4!PENXPt5Dpt&PQuT9%uWakU1UoYw!aWb+Qj|>=ZG1A4#Lb+nC8SDX zS*ss#?33Z!eiZ>=o*qXE~c-cu7ZW1HqBuZoJY-iwt zZ5@qYMq+;Hj}WEQmI!C4&RCe(6%a`P?8yN{0y=;gjJp6e&^FXI(lUl3U~oMxn7$Sq0d;{JKuI)OI8sL^ zDk@4lc%KFhq_ruL#J|!OK|w%fU(uaJCkG;tRumkaObDYPklu?Z94y8{;r8c zk_f>>5)FVGBgBBnRFIMWLFYe=XE2^d+DBg1DnUR*_6GzVOeWA`!U@3NyV3~{Bcd8G zPXEwByMq(}*EiOO8zKz#479p>OF=~J2OYQISONgEu(-)IT>wLvA3`3k_CQc@C;>da z4mpe#N+Ie51u%kflrXB!e=kPII4BSv1T)mf2kPq^8{u>V3=q2dx_BdFgdUy{q#L9S YW@v-^+mv7>gB1XKYbUEZ3;*PQ0|NZ{!~g&Q literal 0 HcmV?d00001 diff --git a/app/static/img/favicon/favicon-96x96.png b/app/static/img/favicon/favicon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..f1005975806e9333b6f9c85794761e9cd626a020 GIT binary patch literal 7515 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 F{|oH@tY82D literal 0 HcmV?d00001 diff --git a/app/static/img/favicon/ms-icon-310x310.png b/app/static/img/favicon/ms-icon-310x310.png new file mode 100644 index 0000000000000000000000000000000000000000..36933858574646c922f927e3ca426af8487e1e81 GIT binary patch literal 37381 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%0DqTy@@UP=uo%@$MT#LsmWwJ%;Im|a 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 literal 0 HcmV?d00001 diff --git a/app/static/img/fldicon.png b/app/static/img/fldicon.png new file mode 100644 index 0000000000000000000000000000000000000000..68b6de219227f3c36d33b6a917f4009d3283b7b3 GIT binary patch literal 33807 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/static/img/hiclipart.com.png b/app/static/img/hiclipart.com.png new file mode 100644 index 0000000000000000000000000000000000000000..99370af38fe94a820508ad394d580dc15168fd1b GIT binary patch literal 518309 zcmXV11yEbx(+%z(q_`9gM-HKZwQ0z;8|L@LZ zUgphYCU4)~vuDrQ8>_A=kA+T(4gdhKJ}Ag&0ssiz002A~6&ZF%>j6(1c0qGh(DwiU zFbMvA-~d_KB(R&*mI|6G0DwO|000gL03Kdp*CPPHixU7iHUj{JGXMZ$m(QjHasZUy z?>@*#YWuF7KI_-AE&EZ%1ig0YSf6)H`d(BSB9sFx@|p6H6C&Z!TxYhe?urqgk0(+zkr_Jx4z!U8X*7xi0B=MmRN&Nzx*R$-q%FC*#LT6-0^T zn&V`)EWAFNSA7xjIbS=>4yZt90-sa}dQGfLW545BG}!$6^7knnf5jRSjzuw}8`;bNk%PgemMj6T& z$97dem5!t_Bd0Wp4%$OqtTqm3i?21tne$525hKSuU~=`mXG%K7jMTy<*CzZV`odIR z-aE<>M8NU9oVPPkVLB9Yzsmvs16(lhwSuJip4U97xt-i<8MS$1p*#+Oaj|i5>YAER z4$03q0w|iCJL2S>jlz3j|98P4Mlc3d0dp9`dGpyLJ8uoiXVDFv5c#bU0XNpfc~?|w zs&4m8uawkka$=Wsn_aujvH?jopwWySP&hSFZe~qFcCOJkyEK74Ar#}X9fWYGyL~?w z9nj{36LEsuc(^(+c#CJjNtj<4!Iw(!#%0AW>HXK;ytK=zyh9xFtAj(udNv?({q>mY z>5hYA7ApQA@X~}Sk;rvF{yN0L%ne(#xzG1D3ZR1Wr(2HaRur&J?kg_>CqR+5T>BQa zyQo|k<&q6h3b=#I4tZAUVs9bj`S+_0%*(#yO_|FL)<0;c$zyk~=NFHm3O9r!Pt_Nv z{vp1VIIB@@6CsYPx=y2YLB-Fvs}mUtki?_lR@rc+mHR~ULp?H1k0v%yWK2Hm=(+Dq z9e1=W!Nv37qpXI6O!t`WD$yWGn$_|dU5cCKn14zb>V@BAfUB!3xR40|a3WJ+mz`M_ z?+kwY?!@KcbJ}(uZf1B-5!kg~ z#h$x<(+#>{xiF3G_Ss~Nxbl{`l-T_q)~BYP6tDCtoKPK!8l6T$mP0=^8B5lOahe_> zY?+~e^pNN+!VlmCp$5I$cLBWjg%Yfpn+GEaC`lMfIS=MmVq-ODiLdr|hHc0k;xT65VOLpEmJG8-c zYWma3JGa9Lidyt?`?w=dobtFvCy{}M0M#8Y#y$X08Iv3E27w#%!iuLPj5+QRKE;#*kV&_tvMi z^*v0#o>Cdo{z6xglN&64esO)$0cnDyPTA-_s2T~S?5%adg8T7fyAYypc6&SD_Zyb* z-KFm@iZXZb_?&O=wnaRJdZ_F^6&wqdJe>(oX!K5>`8<(pHkY3-iF1W>R!c!A13E5l zAA<(?$}+%?6}_@$m}HJzj}nD2P{HM?9>;%N-;4$;?S*GNz$GRfE+1+IfW~3mv!81p<_?5h6~o`>+Uzo5qaX6OOE!4l=E-1LQK=WI2(Q(+{3dOn{wg^m81U&|bx!|>H1*x!jv+ZfZx%X*V~@b8ZZzs5R>7s(GcK6HF%*Z2oD#|w8pkwgkOlFkiTWs zTzF?_wnEoO$g@d>yOjW2N+T|>J|XPWrhpK-Bbqn=EgV^JO}TAn=2An)%Lz^@j)+|S z5ZZmXQ&UZC^}G=2cmp|0*N5e{<6a3=uM#X!qm~VGL5ZL74=x=s7NYu@~ykG zRo4lp@;wG}U15G{2ksUwyIC(LH}O(GLAbP(fZZP>yMs1ulb__Jej|v6wDm6U-r`v* zJ0!RbW<+HMi4zOc(b4Ui5B)XXz3xkT{$B`)@wb}%%~}#r@e;|{&)$}|-4V#jQ)X~K z0BQY0?K>X)HC-21*G0LJ)4~VGkiYYnPXIiqdjJv|V9@;~kCdyX!pQ&@iQ1UVt&c6y zml##W2NiTzVxGi&!6*vaJz<_DQrz^~Moe_ZAy@l4vv+2Oy-WB>(t_Od+<8FbjWG-& z1}4PTQ+I6X<^+Nc8Csf9zPIQXA1e(*wBLLjx;Xgi6x z&}e&1sB>u390H{@c^J&=TZ{`M*&|9`=~GoyAK5CDIKwn~SQyP{4~XkKqKqM_VlrCo z65wl9f= z9-$d4m0;?|znn{G$_AK5dUk$k9{YVHxn@7K7E8dDU$C5R(w>u~C&jUTv2?-3?NR*Y zV*1JKI5n9K>96EUmTeA?=$ei$KMPBrtVaIP{^xW13K;9U$Qt`@seoP<6T!K@0bOZ~ zyf;JF`D&G3)Mmuqv(WFvL==zYsNpr_0X;XKyCJ#=+@Z*ru+C5|Wnw|O5M$wqbV7xm zulH^DP>4S4rCz?zFav=iXJ=>gFG&$%i)-77`)^4}2!?6G+i;=UB@imNO_y&1bp0WM zc5|WdPu8bJAsuo=B|q@~K{$e?qw>-h>-mciZoG;AU`q+@aw+0roZZKBIbU$?qR~9f z5m%}P9=_){1D?{maib;nKR%Xi9quBr)I735KXv)#KZhw}S|B9DW%M|Ph1b+kb81VU z+jf~ai0^$-2%kCP6O^(v;wq91@I#C?TS#7HHoFHtWTCpIr#c2W(NVC)1!qxQF>;$} z^#F+q(L;MbhjQ^V#hv!q2s8fv&Pkx4X-9qBTO`lO1iX$d2tLc|kiBEe2TpR<`^;9V z>tXN{P4HdLNNrEo^QoS%4R);7puh)c7L>D)Q&Cy87=;<3^oLfry)x!Tin& zm;;ZaL-1d>PeKyfHeW2~ys)?1RRyN@ET939(WAj~(!9T8gqiOT{L`}c?k8*KyQ^o;81W*PlzIrV0`vwsH2%5f& zLU)JP5)bsvZidclcWjXiuH|v`f{ z6BAoZNB)ol` zPD1l`xFmWcwxyWgY$M3+(Fxk}?-Y|A^%rj`5SP?XC?hVRc%m^{dLA>HeInc4;ZoHU ztLUoplG_d7?c_;&%q4>uS8cFez42o8%CkKo>PR)&7(4S6O=*^=Zx>>zV`wCLH@+g) z8(KXgCJa<;`gh;;3ymiV$}?0-0N@3bof9>Ow1u#x{M$G}5z)W7KD#Knexx>qf^P3v zgW?zP6X3NuwrL>hVHja-Bu1P%Red{8*d{Lr0+;>cC)7nuYydn?W)j3(%JTOc@3;;# z36Djow|N-eqDHsd(bl2^u?w+)PV(SHcgJGi9RIlI1FW`A9a{Vw4>TEelMPQRs}tld z$RA)MxgOt!JOj(^}8cw(&Q^jAf8*hat`^Uk@%(;D~=uOq%RL+la1LQz)*$5vg={XsqjI3leji! z)B5+vh6JA+U7K@0*MQDb(obdSeK+Tez;opW3)F|e_t7zC4MzD+hP9^OV2we%(M+5;}?7q+H|9Qu{n9!-me)&&yjo*Dda`xS=6LoZav!akas z^zJPPYc;5g9SftsK&SRI8eiA|pq?QQGmH^X$L}PNqCuH`Qu{|u@IbpMqaIv-*6D&u z4eA!az0Sx(bU#`lU1{daM5JZ5s%75ND9k3`UKhWITe7Dzi)YOBCvP&rwn|MvPe9L~ zPBFBH;BJvF#UdFYAPh#ZbzY;G_G?`P!kdKIV<`71<8lGk4m#*4JFD78$YZ*zeR5FM zoeDPKc6z2U|v&o;Dd3lTq*aegN!olPAYw`{vnDbZ%# zoqG{`fM;#4$9Q363oCJ8d0z-dyXbb?q`+Q_{ba;7o!$gDO<@oC3697lKFpUUMGthgv_3BevC16GC808SA?`H{yW%DA)U$$xf8 zL)hxdbp=IN`tqJey86by37Ex77OJ~}(Wz6OK6_5gPqZYz!-Q9IJvt|qsDGFG{acdR z^DUS}wss=hq)9{DO24Nzc`K0==zmM?UKDXxKDml|g$3n3Nm~kAX3uo0_?XSD1~9=- zpaZ^C8QA`UCCCe7kDa-P;D%{&po!eSHAn{6MS;CD&eZjXQz&-VE8ML(aFq+b?t~}( zi@(2mVaT$dsca9`C>_NDa`2LOhpoBg>Dp)ElMbr1q(W7Fm7(M8a1Up?nuo0|0M&gr z%2XrUuOIy%xqCJ?D6z4zU15}ol_=izr#$^q3+|v1P}WEJ=0P+~x4c|c>}61(vra>& z!gRy_bmfj1!@EVM3-7j*%Fp$SlaaTnk#>~b-cVQUi7_mfGZ9^GRXV6B4lw^8F7#{H zcubYe+m4{J$YL%V045EieG23c;kdgHu9DWKWRvqU?uftD!3BfBNF%vSO*K!`W z4k}}48-R;4L3BN``mx=)W^vM@cXN*g^IWIjC5#u-Xb2XnfkTu8P-7weW&e}(BWHQrp^M55`4KP}*;M``OAU@1c#$a7Vw$e9i zFfiX#c0HIZkbV3vxh~q_Fznry8STWxsu>$B?~~%o^g%Uy`vRU+7K=TLP=V zRfHy_YfI^E&E2B5SghAOSXNJ+e~?t0^l28Ck?Q0qO%5)}$fL-m;In2KLozdsUeP67 zV^TtL=lhE`y&gw;Xu?NFXGunT5=>>>Bm=<2BLtv>*d#tG&{$%`{6AD7`-VGqs9aGG z@#}Qj5I=N6N-n<<`ZqXS2J10yM(aD0c+^r-T51YLlN_MpNY7V)P7O@CUYg8P@f&)s zy$&WT-c^X0G>CtG4$=l80gQ92xR600bKx8d?#%phmNY9gfa^pRMM11OP_}8ZwYm)n zjaEwktDrc}ZS-u{EOfO|76c+Qzb>naIt$jo7Bt@Z8sGDaAjF|uQYy@lhSX9cTN zjw<}@zelydc+bQC$Ipj-f13N?rCzLU-GJj#u3NS7jtsC=5gaZA3RkZg-h7yM4JYKl z^T}(WHAdY$zk6fsfs*^xvZagcJN7sF^u`s#CXdV^1{}kos&5f;Z9rp!#)0XxzhSt> zK;%InXNiOc&{oAAL3RJr0)rZvQ<7Wy*=1|2RoLQ#i89h@eS{BiP7YTFfD_3QDLkN; zK8hM5;=9?K1rGw530HBxD`ASEF^d807*rC)-OTbR%=U%>EY11$XbmlJ4Z6>E+nKpC zPvN|Au!&>|V}8(JT!*Ia$X=P82&pQI@PtC`uPDbkEj|t&D=)EX#jP*=v%)s6+UGm0K z`b!XKZ=m77_D$dm;8RM?#lo+X@HvFFVgsjdqE}z_wNQmhswD4O%1>nxuEHC4s||YE zCN5}cMejPMp~$NgEbX!V`VJyio_dUeYzRgR$bB~#WC`@CRUbg+4W21~oI{$_g0+%3 zd3>sq?m5*A}2#ZucfZWPaO`6`SwzY<}9wRo-yA9TzZoS zj*gg1tU~|M?4Nzi*&duOa1Mb^tKLIzvdfUl=a`Qz(FO73PMANH9g{7}d0OK8 zO+T-=T#TO2Z+GxjK4&vRU{C4-GzC?M5)ksyDZigbqc>pt6z_B z*83WhDIa?|=vOk*nFaBeh3?(wN=S;J9{VomsW2)bZ_(@c(no3><1<9FPnA`(0Z0r8 zZm@g~^eWQ36()YkAS;qy2hO^EcapOTGJf@mK!qBG5YVVteVW;n25DKi3m)C`{bpdB zSv`qLV54T~c2oxv8mPG{;^LAZWw3CP)e`$&<@_kuBl}ovY4kv}xa)PhA&r#dE}8>e z`Zk^)PXyAim=|s?8Tcq=dyHIc)qaSwf%Q01T4x}{s}jEK7}c>17rccM4Dh*FA3Rz# z?O&hO3cUG}&Lxy#F8po_B6~un?nox!!mr$-&6msJ^rr2Uq0Dk(Wn?_y>}j0b0j>f? zQiRX9XgxaVz%U@~Jk0UyX`Ik4sy$D=9{xAxZuR>h0P-FsitB6Pp^m%kKb47M&*vR| zw0A-cU3}^P;{{RYA%z3`sA)S>4YXXSlK3nDVqjW)a8Z3`v?mqxAc7QpY=AC+qn&Dz=l9+676Bdgc)PE`@<=!Q;uHn;Dvj2i`|hGH>Wt04bzY_^EY-S znM@OOeGcKPmZ;%mnK}doWhN9L#)b)~A+GOrN5Qd@WH~>QTP?I0a4RDg)D|P*g=-lgX zGfF(-*x(wyYplaHA#& z0X&0v+xCOxYf8$Mn3})93nlL6MnKl%*Z+|7f&{KJ=II>0j9fKib2z^_IE91!o`2YI z@^|@Y4&U0m0al(``HHaeS9J+AYLf4co1EKJXkU=SmpnK529fzdZyYh1qS{$RF;S%? z#SXq_(as^B56h=hinwAAt~9@+@PQy0c^(S1)4s{C=Yo2?T{Tb_79>Klli>r^FbN#hjPhX{1s9d}c2B`9{&pm2E3% z$=O`xZ75roHyV8?U8Ffi1EzT-8&bwsTmtu)lakPV_l711<92e1-n9UY&X%|;SE)`BByw<`wRH% zJg{Xoz)veK8OuDz^nf2f{vH#VM%u68(Jv#G?i%vH`|j0mEcN3H;M~Gz}EGDsvoL zb{IV{)kDm=plts^k&6%eznp|N?i99;e_dEN;Jogx( zWG1OPD~WoyiNgFnc&wJ>3``~5f!nLwD`@cF+vrTTKu^Px^VgAeVdr>$=jmQlS+t~=;Tyq;)HL~!3 zQ6BHI6^8jY0M5=rC8@o@!g@uVm99?lsR2HhOLU(K?8tB-=?J2M{I*5LJ}NIUgL!2y zVuaQ4-cXP&6dAosHmr%5*?%+9M_2quNDkQqXGuf@eMWh4cbM5%E4u=VgQP!tAcpc^ zmJMK$>&X@^SS0m!mp_F>Aq#cZQ-(JYUD$pnr-94==l8;OFLvHL_ zJERRMA~f}CYPvZj_}PIAvw`T%q|gRy$4?!O)OdH=STg#Igmd*0IDQygE?^za)g*nd z3q-oRW4(hy>;8B^SPpK4+M(1+t`h~cQW`+LL4(dg64$X1{=s}!CDs6_t9|$*^rFa) zR2ww!#52c03F)e@a=zT6T-H2&xu#FPB zz$6N%4RHE!S%n~DE*K#$!U!{2hN4k?|D?!Y{_;yi(;w>y12Q#B#1ox{3wuL*r!8mE`!%J7_+1>h8ZmMmW1 zY7ZQ!AHwPgPVkP+@6T!RGI6u{{pI#>yyYjNnJK|a0AE@bT*oV{g>BZj->J7SKVG^# z3$*=Tdy$$=VR>|)~) z5Ev_RtBSxqHDR=xcte@Sf9&D|vu`35U6QwgA9r@Lw`m^EPz%sJGV8MXV40T?W%LzX zVvNk~h}mogN$G9_wemMEBt;cAImN@=<9+w#H*UoapT|10N_swWOIGPsOpq&A{Q9v5 zVQXjq@U}Ss3bPW9gXpk#!|wo2dnXJttFPa@H>f;|9|IhEENhwE-l$QuH5S4ra{|=4 zxh(nn&0Az;mIBmvC+%~itv?2K?Y2<8WO`+WQZAq2v^+1GJU!L$cGL)PW&26vB?UFz zb*hyc$m6ed-anYSO?F%^e|Xy~B~v~|t2qzf z5iCY4lVYw4kPR&}B9ltj#Jp{#h6+iETEi;&;arTl4MNL=|F7HB5eY4d#wRjV$}7qi4-R$Qgqn6CTQ%2n$p9=k{W zh1dP>wiPIN1*}Rj{Flc?S&E#4VR5)6YcB8b&a@5jR)fTGAJorB4B{J|dSsS1H-}n2 z?R{PtnrUQX0C6_EPe-l{3HOyS)fw;!iiq@GUAZmt%g_lOwXVNxlP~`2&}zB#Bk@q6 zVCg191oD!)Z&LJa-AuII$6d_XCqcuxkPFc-#KJYoK(w?}?qNLB<1nu#%tri5pY-0q z6YYPB(TfOAzPCOJ$wf-m;mOK!bMl?;1uP2=I63FvJQ8 zFe&G_){t~RCo#@5x3F_v5t^ZhY~ZbP$xoeZjb~g zF0M8SI5h6)xShoyhBs8ZWXi@c41ze|KOh02Z)dpP=1^n6{|UbZuZ&DX%NnutIcl?v zvQ`b_NCVAU249Jx^}QhkO?(2G_9%l3Av{|Gl&@?HfG}^XAaK*O)*@3|%+W%QNfS2^7_69NwbMAYCEG15N}3scwi%J3 zPj*?F1v0UART;Ua@*2Wp=wZ7-xXk1^y+S=biBw=_bOpZz{|i!<3iS{if*-aW@IVZ7&G|O+{(M^z7U@_zqpcwX<#+Vf`R% zu60#GGt^5)?MDOi2!>EaAsr({m0lhfkjF4;sgEKdf|441F;K~Bxs|z5r0boDkPy}R z>XJ(0WdzQw49^jP!zIX%Nwma4b4Wd$ZO( z@}7i_3yspcr|~%1^^j-YvC_h$?Us>RwsQ^YT3gA;$gYZktgJT>I0^FcQlx2tGLgg( z$fahxuhe!1R_h6M1tJ+rhZ)!-<)jS@Wmh-(2!Y)7_YNRD{+J z<_T~E9`2~JZq}~T}fk3yYdHV+MQcCg=<3&L+v31)|b=;bU2fAd(l_ssVyp0`+0co`! z0c1xQIZ~o)Lw^bJ-~!t>g(8mn+*c;72u4Jw$A<6U_eKZb9}a6OXk2fk#^CDraRk4l z8zK%6Qa#O0y6jyKzHfSGr41sCE1dd~0pXHEl5tusv?IOSNHs^mD`<48f(FBHk@BdG zkkA*>(PrUJuW_a;j*YFAU*dy_@#yEnV#vV*@up9FL9g<`{!+Lo3^cSs2fN~Aii|7)`5Dc!8jVstd&393=MD`KS4>=p!&_xok zK%ZtTQ~P)D#r!h`ofz}sjJuvjsb2izAF2FD#3emsEjVsuW&VXd5aQ6m8Ru&CnwGq8 z*xOY+uLDUj^A+lcXH6OY&o0(cq#Kfzi(avIMRzW=f0#|@J!KNA;0)t?_4H6>40)X} zIFMPeC+d@RV5auLIVLYi*)jIUAFWwp!scgC23nDh**?~HLOntWl0;OU3c?svub&aT zUevwlzKh)=D68!GGZN$PhdD9PhB<$gOWCm+c_e+%mlW&fq`oFQG+yL8-{>GCVlM1i z&=JC^r;xm8auGii*k5C5BzEA>V{Vz@nK$)BT^y8Xc(cqfP+sp15uFK=wMV_CWM`Ar{kLNpk6+RneGfg%8PQJG8S ze8-q%EQ!-Ww}CsNBUmJ~{8=8~LPBa4>(Ja3`^H`4l z{E@wpr-EaeqaEPW%%mo9Hwp4WPX=_m zO#I>j53UJ*F}0@sA2mL}-J(GYrrVyv*%cL&Yb~>JocD<^39-(h6CJF5w7;Gb^GiRu z;tcUlFVI=R=JAO;zvFMA(?uk$(iPRt6+lfgF=_JEeZ+FuOlo2EQM^kUz!{J@Q$D1O z^}_S;T_yp;P3QOXuSCqqSHYZQ-)r2%0xr*>R)MpmlhaeoXd{=otjcoq)YyUPX*^g9 zakVlU`kjG(`76;z08E#6U_16Tnmwx5iZwhGnBds6Ei#l)P@OIQYLpZadvj^1GBH7EDvYGbebT` zgu1R*!&eJ90E{_!AU06P1r>$T)AA3JI#k8E{MvtTcd5(XbanPhozpeRVl>ve5K!Uq z2);ErTN%~e4c$y~Dkk*$i2eRp?foobIW z78s?jSw>F_UBh{;#7zl4^9gaf4gK_*BL?!4fV?R!|GRc0uEG(_)h7F&Qw9IT-yIc;Iwx3uZ4?lp1A1GAm)GWqucwcd%yZxXnn6xAzI+wz&h4MN%R zVCs~Z6NP8XFau-)7{llg8yrz=+R3l0l0=78iqnw;Z8Na6*Z{UGH;~F9brC1H23)xQ z0Ob-QCpcwi^4+U&v84~8i>4tIHv{P9gsMb*N$nQsQnSJk!8H0lzn*eu^{+%k=#22& z@V$sEs0#oj(hOQQ-b$=)8N})<*9L@lW{GePu5EH}n@lLa-ok5%Ap8s^US!iFk+tDG z2*Lp2Bqzz0nby}9mE$_HGxT4N=IAf|efYf?gbn@n`K0QmvLYUFvdJ^AIWZt-_h%ZB z^~V4%#zE;v_~gd6uFvqfk8`lyClq)enTI6@as+_Wh5?+W&rMye@Kd7Dk;xS3hD2I| z20yuSS^kaBV#N)WZI-pv45i4TXk%91`xc{|F6q^II+HAUy%jWtB+z==hl(&%S?!D* z_u5KV4Lt@pxacU<{y!!)=uU)Q(t2g^TYuY`j`v^QThE5C?oUU*eC3;Gvwp8-#-4N_ zvzPmDzv=zG^?v2zMG1zpAr2)4MK^%GZt|N9Ewr;T z=`wteumV-;L6ekzMMP<&avkDLDP4Mp=i-Q?E81DW{Y}A~R?}Rn_vBKuxY`lBR{!w+ z2Y(@j;?04B^pA*~W9ZV$g6ec@3lrx~!dW(~c3oz#<&CcdDkC!YuL=<#BTS;#Ht4aZ z)3ocqnLPpuB)M$C6rcG&fSU*MoyF}1+L?WXfQzDE0aRlN`|hy=7H}dM@fc2R{Vy-? z!TGd|nu}%YDV%rn&uQ_F3CqpIe-AUS(~CI9?!UK@tZH1i%`< zm;R#H{2Y`jZ&GaoHnC(gQ%woFRr}F8B=PbAL%AI~gt*Sw%Uk?A;)RDbd8IJnb-zf; zQZ^a*c{`2vCk z{M+Kz!=2TAzM(Z0K7<`!Y6Z8huTt2YdTRDG*&c6YIXXs`m%Fm7pxS*U`q=lplY_Ati#H_M@>RjV zLCYG;gP7lmkLkJ+Og*QmirA6|U0u&(Ihi`kXkG78?YlPU3otAq5bp7uhAW3JR{xf{ zVYoI;ir?!uqc_=7w-8h*k-{IG|qR7FheZ zUCt6H{~49$V;1G#Y@f33a&!&2@5JYd-^!iylAVl*9Yr*tlOp@m)zV#deSG@H)Zae? zH4Ca4+!qJ0Zc;}O6YJGMBz&-8cL2E2N#koLUHpVlrB20!tT5g?cF*>r{O;Q%s{n%-b%=;Ez5|8Qm>V(>J0f{6Pu zt9u2X^o!}fm$AM@H!UlC%)NqjuOEQ}BHc~ma*D1J!}dXXZ!LJ zH{g-J{P|5a)rDo9UUwU^nXD7b@P=15JKP~TWsY&5->d{hUmE?vVQI79F3BSb538!0 z>p2-Js>-aHfkEX8!`A}*7-3+f>}n&Jso$@5JL#0vvis6?hkC~h6Rs1>Z=z!$dmJgv zi?_G-R6Ea%G}XPU@2y5=pO~<=r@7Pyzi7;pT#U!75YM3FS3CrOyZZK}W7JI+%M+G_ zwTvK~U0IOBkuQ5z1;FNGd)3vp+Ot&U@=4FwTo@MKa?R77xM}dEmblvVVHj}3{$yTn zOwk!9eKg>r?RiDu_1D94RhLECL(k0bI_UVEJpmC(n?l9hYd_L#GvG+`FE+8;6@j{j zo>LihC-yMtatSM(Q!903ZShI%Z%sqJ}-fO-Y2G}ZCCe7 z@{5$Obi2PN=YcivG9Oj#j=ro={k@;u*$moV{0g{SV|>qphlhf7ewT^*k77L`(RBBr z@n4#4k4j4k-K~&mM6v%p&)^RH5|qg7peuAJuoEbvea?BGqtlRzzaHsAFmNrE0&rtLSALRm@uZ;r zZp4SMaJ295MAFu>JD|;8CqyuLT$CL4o}ER#5f%*e97J|}Jv|Y{G5A8EP$*ZXGA9oa ztPfo<_-DP;$s^F@O&-$7FV}oh1JTqub7J_Q%WC#!zQH~IrFEwH`Uo}bV%2yxsJtL> zG>X6F5pKpo*{}TrcRu=V4La(ZxIgY+4TG>wkNYXckYIIlwhX-L_SNj2{VTus)wkrWXJ2nrN7r}Is!`;?2c z8lsGp6=<8@S2n(DM6HeKhTuG8(V*39^%uVj0+L5`I7dnF=;L~*yK~sK1-H;+{<>fS zNCSpKoYGu-g%J(&FB1~aVkHIY(EMtSf)F4$U2rk?8r->3Um9+c8+(Im;gp?T;U#2*WjkXr`$-rs1S-~uS1YFDAKSdcPphs+LzsR zhBM9rr=jKwCFJjg+p}jZ*CYJ!*q{`F!J zf&cKTO45#b0NLb6+JhDsn2?Y=Bp-5mp`j;nlaI~W^}5=%My=l+jU*@i_6yrO0c*w3 z@!uzTo!e!coZPjC{+-hot(%+2fIS&UyOOyqLBCqpB)F~jc%ZQ{>M9weLM#gavG%l| zfUS}AjpDb4>9)VO<{CZ~Poyqs78L+(^!#KKfnOEn^YZ}%Ii1kc(}q?PiuTi0mv!OR zmwth2!re*EC8+cXC3)-I5ViE!o;-$cRE!HxY z&X?j!7;k_b`rE|Y;`;GGU69a*SxX6Q>*V=*xWw4eMqaeY-qLX)y2r_1LS*WlM9l0k zk|UfZr%2~ZtzP({=cJ}vnIWaCL(&d@c`OUpkQTEBe9a0q^*7xN#3kLZOV3Y%A>_c))^t56uKdZ=r!1qH` zuUAw>TVkT#zE~iT*Q%9uyT5zbPucK*!*_vO2vpryw{)T}_q(u@kf|eYNox9^_GG-V zzUdX(b>ME}rP&^gCm(p`21WW}I(WS);wx=Zo@a;bXCDK6CQ*L>(x6D+zZ~4%s(bn; zdpA-2EqD3YiP`<~;_~`)9#*!0A_77#MP7~a9=A>3HacdO0qs5=+&ozNTy(vp3>=-| zupcm9(AkwL$MqWEA~hW>$#*E{pOpKzpO<>B-GJGt7^SHi-uQV=x0^X;ThqocLKNnC z$9t*_o3dmR?Tk-6y)TD5neS?JL0+b29Wkf``hfAD9DxQgwzn`17?kJtGD`^Hpp}yO z$Cc=5$Nwj#Z>k~Q7fK!|7EFm8PncvHUC&Eb#iB~ZJk%D5st@ZY*z0dvk(|`7vJVOD zchI_;hxVS58(E6YZwNV)2!>h)pO^SeMaB8kY*RBmNKn#~2TolSQjUi9Gkxla>L4xWl;J{7k=BFkGxxJn8r` zxiLvIWa$x7lMwr)Ma>6^zGH@k;)f^7YD}2Lqrr~AMeB+!@l3&M1|)Mrya1>e*yg`} zT14GgA+WKLBQlQTU%Ymk4z^K-2u!$a_MHX5=c-Px5Dj=nIi#ZB{@Ol0Ke_MN?1)!; zUiuVvq@f)^sH#d)X*FkJ24zU@?JuT{icFMQmoA_YSi$Ij`-9Y@WjeIs|2{pT=DvmM!BPK*oAUWmm1@Y=pFdw-A4WQKUsraXCQPr# z^{qxqk8cVFn{}uSH$azj2x|CT{Q*pYmAT2o&VLSKO2SJj>Y}SLHSdiFxoDHb@QJZf zXzNx?LLyB3dM`)g6EPBi;Sh^u>1%3x7yq8|fsv8NZ~ILr;T`fXPh0nOF65MJPsiU^ z0y6FX&KK`|V>$2wZN@+XU~R5p7i?R11|K|3s=^6^2n%t!?_dd2ToZJq>rR~h&z^mj z0B` zXu9ZAoRr`ofVSjL&dYx!5CnHsZ2&Ol(h-*)TXkBC?IMahg9V zp72?e3t)U+!-d>WejQ=V1o~JN=^uK9EGOkxvLK}AAl+fgrLM+VJn*>r8vHb;_6&6H z2t*0-e56!WQ*(2_pezYUSaw9_Pbe>^?u>*|c0I3lB`$BnZQO)^^7aD%E8#h+<|Kfp zs1q+?0f+K?sQ2$$Xz-uq-|yN^?)sxfy*1lo#}+!83$i$Ot1fd%-wSj+&sZVCI?UZR z`QQKy^UCt4$FAqiM!*zZr;Nmuu#;}S;sE>*w4?U~5!MCj4Ao0sE6$}t9G;d%w5>3Ua4h`0O3*MOe` zf9_Yt!^5BDlWc_pA~GF7#&N@npw&|GyV<1SN*LOj&cnWEqJbyI|MM!#SY9rnFKx;Z z|C*uBbhJyom_0qeuT2(V6oX}>iKU-MZ(1`{KjmW|tUE-KmP?fb|w;bRnP6WCx?l*dk9`X-rDhX?5 zVQ%DL)$jrYJ&>7O@dLrVGJMDAw3UX7jvKOn>f-PHN?+pPO5*!mj9_>2&sOLJ_U>=z z5^H^j^hfPmoN>fLp z>T!;0W$$n8=XGKRJ>T%{%E|4N{CxQ$q06XCgpLrP&^h>tz@tUkeic-J?xRok+1x?h ziQ44zC)yt+)=)X_0w_Gdw3;Q;(xm33zhAt zyAW!;pm~`O68qiTyG;=eR$%HS=Bqe_wPTALAtMPSU?`Y z`qc!zPrw$t`Tqg79AKUP*HZ7tb zJlo@*Y&jZ+UdM$B8*yJzs$B@;yVro?$4kDqCetkIBQzIYHvJeQ#0tBKYM$S`@shaH zM++TlvT^hO;@@H_Y76ah$~qp!poK%rG>(-Bsbf`1`N9Y_Lt|xCHp_NLb>X3shGPtD zcRx3^cY*~9Xh2gpfGBz=K7Qb=P@)EylQD$z? z=UMNK7uj|}Prufz?re~+8Dw6& zOxq{G``Pzhf!Za~Cd+qb?FGe0{_l}7g1cB(p?#`s@hn(FJe?~KA5HyE zIS94AT!V0HPnm4V`oF^C9FOCO$r~TdtHKY~af@%squ`f;8{n{k>-88PN6<|Y9O0U* zSBP08JOV3r8W=T{8naMZnOTF{fg?ow6#}L+ZnDe+vA+Mtj}<ndCW`k?xQH&EI%E^`C+1 zsn30Sl(Jpwd#B>tuX@#THCD1Rm`!-L(Rx#Rl?V}~KYLNvPzlH*i>Q)xxFTem?#rv} z3;N8AECa_Off8X7qI*3WfH(jf0H!7~Z(Mg3=nxOaxbKYEk2_9`3l(?TM?&p9VwL<- zuo<4GhdPzrSNZj#Dnic|DF zH4|UI ze_$28gp_a=t_O`&@230UPfAU;GC1{qNGR8f;p=J(_}sVj{=}ECF54+W&$`{&dWB%H zsK>fd0>9bY&o8#xXOG3>_^2DsOhHRVJ0@HO7PdZl<)jnQW%kgfB6@hUjfunWr~7-@ z_OH7pN{+97U4L3hVicxa=K_H>e+yXc1Tgt&cYY3s16Q~216{&I__$2QT~9)#Qy#bGmy$LaA^YTb;bu zP_|O6a`%p-aY6U>n!)cw*Gv0rf#<`0Zgpj&VG%y)U*%5=y3?ia`|sJ1!riHcy36Qf z@sYRDn_>>dCra2t?rV`=4XgQwsS_I2RNIpe#d*)uNJQv5pEnG@1W(0&5Bgd+#g1Ex z;k!oFB{cHYE1hT8uH4$8amWqHts5;CM(8TwF%dyS3Ev8FmIyaV&P?34d9_Lis&qq| zSYmAWQ+df&PZ5_I!=zIQ<`+$Hti!Dwuk(mM{Q+&6ek#G=*t|sHQj+mo%0aVp4@~n} z-v&jh+=GJy&fK=p0)$NEPs^NB<#_~%9wiaDUVZW!-o8t23C0!#ho^2`IWm#qs6f{Z-xgWit93Uj&1*Ljc9OjgN~z zf{%SdnioQB@3kYp-|^6@nXQV4^JTT(=$en{hZIMDjCV7T#u*7YYTb>>6CqKrliMf6 zNi7CZ2N$2`_3O>UoBl%54b3fk!9l)3{8x&aC`_MS=QGUir!gMT`>Uq|W)KEazWNf= zf6xkVSWLWXkK~7Dd-$-4@%F3?KKffite}b{re%#s_f#C8rGxP58$_tx4y|ov24qYyYAEA8e@g|QY z(lJSKS$+?vF4Mj|ZvOhA9foeNal)vC0$E0TkC)y)38>fZ75@J$>H%?2hZ{e77wr=J z-+_D%WnS1g>p4y4Cj<}785kHot+%R!b*2Ra=cG1KYB z21$rd*Egz#Pj-11Fsz#_U(Lm6*>DOk9%tlGaOCi(U`cnx<))>#4`U`tODG&wIF&V-*9dk zYlmi>tM9s0?LTBi5dnNi*Z?3NHkP>QV_zB7@`0gOK7CVKbz2aA5oZ7Fu_~dWhEXHbAG#g66;S0 zt{MGiZ(wGW85WCd+8llP4bD6$tvjG*A_n6-N>BwStKtcyx5CvkYfN|!{8U5(9ZvZAP%tf3 zp%(JSZyoC0!Zs5fgRV0?1DaFk&=n{6)W6}qoSpul(dl|pE3vz%L%J?b{%yQfAby$%=B=YR->`p|w%^wOm3Avw_TKOw5au(s zH+Fz%wzK1uJ;Q7tdc5&_Anbrm5IMUrG~~&XQv%#G^fXQBtuPeGo-AYW+s%DJ$3A> zsNALO!Cuyhe#zv-#Aa5%(8j&eKeCC(x%Wm?a4>8sGXSV);!}5fJWW|A&4IGHUUO-< zLHyX-hEmr`Ff*Dr+C^@@U`**e{~qzUx=i@=yghZ4-VHpP5in4_JV-Y!EdTnfN@7Mo zw)eMorP;pwpb=u|eR~5jdcE@z@wYI5oMR^0|xab0sB&cm#K(n9g|+@%b}vp!-Fu<+7Db9CJgUQ%Fg(i^{rxpRO^0tvQ;1GZYr6QL-M`<{H`+sKxx_or2UdMP)y< zQExAWqj)I!w5Ew1Peh|VnWoKz1VN(aXqC-(E>zk~*3?t1s30htrXy*alU}V(v5@_g zJe<><1x;_7{q-|d4TpZfDO#A_2or&rtO?rA^)+6V;pWRP1J(m)mr;7$(E>47hluAB zKI3v^eS_dOj-%421)ePD026ME9*K*^-zP18r-;)YgVzp};o;%h!i@v%IUYFYJ_kbo zVL?6_J*Z`6zX&BI_ay;cv}zP(SX9(6K`QczbfB`N@KDZaPyHZNUi49|pC=|XEiS>v zb5#e;bV88g?>MW;q^gfYIrUrbgz1hN7CuLBzCp;wrK)rw9Xc(;_y^s}48wdqWOtLK z3XM(ae$sng428acIp1QwburRgGMYGl@BVsbLn$QMc|$p0F$?WyFAl>i=Ru+<&;JyH zj#5P!c{XMPL#8S&4}v>~(CNH!L5QR)xetPVP5Nv-4#rrElo&)zl%-^0o#G{q>AwiR zH4Yx^RxBJ;B05Xj_}!&606Wx^b{M`HWFH(D_*UUfe7Q*X<9hqe->K^TPk+eQJ)lK` z54t*v=ShQqGFc9~;nN_IjrW_wuS$y1x}gjzp10+Ja0ea#QLUPpz+IL>KG@WL6&krW zJ#9Z1VzC9uRo?X^R-RYRID{FtBB#!^>gIB&p{SS^Od(uty~OC7bt{XI zoBv~t06qE>aX%lnQa5TTWK>Qdvz@h^`u&&IMxY*qhbFOnbGq7oY_pWV=*h_DZ63A4 zvTl@ljKIQd&Zj6@?jMi-^*N}3vCXXNgv9Sxi`ywlj_<7w|C>cC zc#XjqTg>y8dm;c+1Zd*`uK*yT6ANO@v7HlALPayXUwO{j8aq1)H&8!rm+PKBI4Pgx znBK#1)q$TF@o>JF&b^a97S4t1@wsn)aYO}C-q#v!k3>RK#|CLjN*F%nm(0a4{DOeGA=w??h}duLKQV5=t?aKrLDPB>w?`ss>F+oV z^W0|sC`jkElje3BCiyMGomzMRtsobT6t9UNZt3{x$;Y+H@?5EW&-Qh*G)HN<|JO_J z?;6uGXAl(JVDz|M{q|p1TFwy)a^iRS*PB>L2A!iIc3B2^P5nAM{Or#G)>;-8#|+jV z`E}Z-^h+!fY-T3BDl6L-)DDM#I?50l_&zqij-K1#c}*MA%qLMbuSLTc`dvtYx4b}Z z{w5d}a|1Vl4U;ck`q-BtdTh>SlI?S*0#$=8#F`DuKrnHcbtO!{!{8wzUDA7ik_+ui zPV%HS_l*Ei{aNfOL}lpGmpx;D&xsm-z>7sx)wrIbgs&ceN){^Nvp zv}O>mDGM|tVcZjD;+=?fE<9R?mK*majuCrR4y?wJQXznK<&ZgK!u2x`iyxB5%3xe) zTu!AMs1^7EZEjb zo3k1*3xknX3As4cK-Y*{vV}Q^pQ)tUZhuq_rIuCNK0KTCQ);B2Pg6*hB&_;^CJm_( zqxveeE4W95E5X*$C+Q=K0`6SBF!)qqtXx;2YQS(PBXf9aAGr(o_jk~@X+>X9i%i8n z_l!%Syv*3Y?A#XSKD0}*hRuD_$Q+)ue+_?i@pSupcl314ux9PY*ygc(MI?R|4KU?#DUN0y=ruBrrI(Rso>M89J%=rZ`u6sQczK#j3 z{Q73hK#e2YQEra&PeXah3**n=?v}u^6a4+p*x#VxktdBNf0eGOMG?0>I?RoYJr7Tn z*qJX%DgCFhzW%n}{SJpw*3W0EaqJm2Xw7`ZP7HJw$6c4B7edc%J#xu_0SMTO(|((; z6|s~NSY-l}rPi*AQ02~f>(Ki8dh{Q6fN&BhRSjYtSDF9=5Fp;lK1wZjJFhN8Y0zRD zsQO5M;}qz=H+7KfW~)-wie8LIj} zq8ge_`W<^eu47}?1^DT_oK=ZfKww@Lx4WQSQ4;dg>WROKO!p;e%E3Nkx>0qkEN0`1 z2dj;HPM&rmxs+WG#}#{P?e5U10uRJ@qGz4{MXY0G&>W+uCw6u)p44a6?&m+l{`Btg z|L&Idu#4x{7|jTDXRX{>E6dWtl5erB80(IQlR>W~Ei-Bt_m%?TyENkNav|6ceZ+ zAb8OiU~FuhcNoei$~VODQ7Q)^Zy*0Q=;{;CJJS+s8b z=~pbGV9o3Y*98n$|_Q&~T!99|&)TszyL(>NTSIufrKS}!dP)=J)l6Sx@1_S^b> z2oDJi;tw5STLvl`1&i<&w`Ub~L`071)B38^9_!G$_kSev7!u{UYfzXQJVH6)i@*dH z2mkitm)*D*EYa(i12K7r#(wM8o=caYA78{k)}RA84UIf2f&Fj99K?*RVm>@f%M=rh zSOK{Q_^YaEU~MJyDy`2dfz(J=Z?iLiz- zTV4SNZ_)rRc7Qw?mQDIb z{MI$unaJCJ@k~qQbNIxRS=DTNthYih`Is<;P?f>)IZ$~%+hHaLHExZzi8#J87_?uz zXE@+X2LdN3pyw|y-^@BWe%92O?_6(s3!Ir9(9#nUpu;Q`0{nmsg(ut)5g8d-4^i-c z7t)&(h`3aX?;|fTFKUlJ;bzkPsi`--u2q?+yZujnnSH-d<&~=C%KfSO=Bnrsqw?8e zx6b>q0K(?Y>xDZr?(&Xnordm)k8_j#X-M>ssZV-3z+}6usP1|Q2ELAmf%DoAsmJAT zPBbN~=5iI2#^K>+bJksr5_0aWig7svbD1YfT0V@4b92LS6=R?@W#*4rm^(vbB|j_Y zYfE!~*{-3J5}x>LmmWL2$?oxIktLsEZ~-F)Ljl9&?t;fb;ax5S|8?-#LCFVY?nw+Tm?O+P?1vij|u${iYFzG9P8>C+*i@* zwxU_rKDCM(;ri-Ij{v0?DKp^SFZAk8U#XOU4aUY@;oo}=>p0X_YI*&A>J5TlOsV-2 z+NW951RAM2k*N!cLQzk`()NHyLgR)1^BF}u>KiJaN;(7b#E+;!l$S<5U|(&#vh)oG z99AEC7IqHv`kaU*a*TZM<7)UHc`=|wr^ggsH#3mU<45hBbqOYlAG+MJHM(zA@Oh;` zSiQzL3N>g{B59SL>{!*7D`KN7O$J7&-xpz2YN-(O4)Of=O`QX2nYrPp!m1?Qei}qMz8lao)|DdBDaP9 zx#gn{z=&Y?&+cBgLm?vft`ogcs2UOIu2ytq>%JSds(bUy4y$$XuI)6>l1DW}T zXRs?N#js=Asr0t*d81F$#$w9YZD45h z3z#3VYf|1FTCj+bWB)=FeIb4rC3F(`@3!iW`n0xusm=ChannPGyc;n)#3)HpNQ7!O z`L9KF0bSf__a{xaWac*6&b9fRmH^PXb#Rw%>xq}}p&y&zI(LFx`8kJ-hip$Gj0zq+ z0FYAFnEz1qv)rxX4$w0HW4JnF)Gt-4g?2)L^ORpepf|Pq=}X7mb`-ymu=FhVT_0gr zz`akbz5nA10P4to$VBp7XweP zmoxtp2?66QxOatBHXQH16_l#qObGy03lny}-HIeA4p_xG<>fgz2{PT!r}pQHC9|~V zIYegT&g@TQ&s*ou@`_Sn+h7ssQ_0mglYd3AJM!(Ro7hQK-tHpVS{Tq&a`ojy7|_ln z*i^2gw``g^C z&4u$W4W$%0)HYaG(Ll*gwGkgD*+gIV13F_8gw)W3y!v)zfX8FGBOSn9K8CEO*f^*Z#tZf%lq77!ULs`V6p8<0tG2; zECo5dT^gejRTEYRG}EDBsQnp~*bgiFjDLllYVy^Xb31S7zr|xWbu`$p6 zTt0*u2<4&W1}sw!`9~vA5gQN>^)N)8G0GQ%i=b4`xIT)eI#Ud59vR-q;f7BTU8tWn;cH*9e?nTBE~0jYxWx8 zH3^J={GYq4!JB5Hmmdel?;>A!DQB{U++)vxKJR*y9W=bP#dp5xTq##I#4U!?Ooc(R zIu!4DW-M~esr5Xr*|+)NI^Do*TKajaMwFNow|eIFhi_47-jeMCF)f!fp>&d8ma_q+ zAAoW9*&*HN0gmi%iHW$Y-TsvSigh}ycUr*PH=p=PL`U>${2k+1T^pdd{4A0y`fzIR z-~P{$&Znrxf1n`xn)=QIfc*w^G&-5Ap7DI1CKWAE{1OKhgk$OZ0CJ z84++_2=avszK^KGkR(Z3ax_YxFOx~ zTNs`9Lc+sNt$!k@`T3`U$xze+G^mcZd`ZcZ61m83S=u`Hb5@`GdrV9_*YmyW&mR&e zNN`c-rvUU zGTViqoa^GR=fAkolL?}wF0b1k@N+TNyG+-fsj9Q9rm&CYl7Fr4p0TrI#Dz01tYUpb z%ZyTNB$;|xvCmrVT-MjbWM@_*zcD%g1!HUJ+3YyH3Oe~_4`4a9ocS*h!SeQARHzYV zooD5w6MK7m8=Mim+c`Web@pF~wM6Hw&sv`f>YcKml?EQ@ zI2)3go}XGuY0G=n{iXDKx554ernUtDe1r9PVR+$t&ggz>f87!NDf(n4Dzo>(BPb}S z+AjgJU1@rpXcd-%9MrU&2ql*K33UIyl=b#K6I}kF=AtzEJ7zzc$)d?BL+M^|g%BGl zG=gYKmvb$m8v%t)XZTIx~i<)Bf(f&c9nxZHGE`lOOj zQ&?)b(HbN03q}-pzyQOA#66{7VL3sRbffm_-oj6@a{PA? ziGg)**gWNV<~FfeH_wt)qknU&r%=>fDSeP-}~Gda_mn`)~R8y+4?a5RCIKfSWp> zWsvn<6azekkxeCy>qwO#q$Xxe7JLax%G`)bQ6NG2xd)T31zmo^UzySDIJUc(Q7!`> zCx|Hch!L=)$gZT+1{igB1Yv&(mo+-%hS;WOA>g;*YZhP54@7NC5?=~Q^e^8UlV%+a zZ_!|TFkgpXd0tmusY`p(0YAn2agReF7$bzt|K9y29Tv!yKnwI;F>Vyh{JCHKD!Z2T zT4ebwxfY~*-Km|*q1&C6bifwM6Ez`$*(u!i zM=`J(Sst^6GG|&+FKaFHx0(^;xMEiaMIuU+6H`MMhbDR$-Q*f=Ws=fbOTEAfcnyuM zX;MB1pC=^H=K3ja)&!}?Im_KV97&QT7IV-zm3jp;Y>m_hyuNR{$Bcn!2hj=t?vLF> za2}A)Ua8X=1rGm zOS#t(J;xClTg99AIdQI@FU}j0Evz4bwP$CxSb6vJ>e$}juBfi84Qe2fSsbXtsjk52 z{Kk$Dp-cCtsnR*#zn6Jyi#o!Rmf<(i>~rS8&e>YK<<>>4dk5?n6nv=>gUrc;e|U}m z@n}cuqzoVd)|Jl{z}3K^EB3y-!_lA!eWk_k8R6Iqo)RBt;l_84`?sJB2HKq>!=Xqo zx${@@byQ!;3=_YbVAHt(^hL((c>_ub`bMCEg)MT6+bt#a<>IaJ80hIr^b%Uii1L@_ zcD>Vk{uI)66U@;3)i=*7!wgnIO%$P6?6dp)6Zti*-r29|DP`m}m@minf{lF4J^AO; zKeM(?<^vi=+!FYtRQ;L>`>nV)2sdN8{P;h~3IMRZo_Bv-Fyq#J&}NrJQlbccLJeNi zkDe^zhfH%*B1r=V>uWaQjD#QkTOP6 zuM^rUXt9t{Fk~BVN?o$}W&JcGD-r~y$*6ryJM$BAT_zf_nw0MIeS>CbbL;SLDWk`RWtqvgX8L&M7ofU%JH=r zt6==}JZVMOYc(cVV~Nn*EqG} zN}J7LwWsB;2-UA&1_GgC3^IE+qpcVdunDEr2I7yyNt%0)7*ml%I177xZMsQ0ys@EZ z?)ks$R<@1VD+eI4jzA(6AgL=*ON|6bcj4!b|6yI@rg#9XM=A5f|nSW;9c^U|OD0N>`e(?&r_c>)L=cM=m5hgX_9*=SPKOK{M! z(urXJQbm71r|V;@B5GRLTkcykm>{G;1)q(Oc(aiDe`sZKjMzusgQ%@QLF3dXw9fZml`hdpR!&VOpSbj9`|#ex%xIL#%gq3eax^(ub9yfI5+ zMj|9OjPm|Kxc(#l+=(#sU`iw%eFvNVY(RKd`j%#yls~d`tg(n~*IL21o>bm^vkMygZseI?K)xe}82NFPVEkN((qYAOmLL%TuKPign>`C>CP! zN_#BG{cLGKnM;|=L^Q1TbI)f`f4~vbw|*z#Y@x;_I>|7TZ$#hin2}OJPj1@$Dzd1W zBySPt7=EWNA=fC`yG-&u76e*bydrKPxK5Q)>x~Tj%pCQEI}lEDnNJ zxXL!4t}$+*u~XjyN(1;Y|H4F^N1H`+as(-}=wSa{;SK?#a2k8vFI6f}uF<9N@1l~j z8Ape5^2VDHm8wKg#{=;k;nofr#P0&!gahZ)g%&LefF^=LSgm!}6X|OaIKY~#-~I^@ zqQD0bz8r77U3*#xZ|!^q_Z~g6P72l2n+Ao3sv+i`9&dh)&c56TL$74&X_C00LTX%O z>ik-MD831Ha7z2p0T~^rgn%k2qrd< z9~HS0r!sv29zN`j0Oo@Ve%dMdzk)e9-duc(E7As8-B!BCHCC-`o8<3u*CZ1#k z%g6NhOOjDgY}=kq&7o7Y`T>TIu);#xQs)2Qw7F)Q>e*aa3n*|DC^m2Z?G82mXqPZ% z1zsn@L?n?mj2S%Rz8^XUt|XY;QCk{|Bx1z z`##+z@{9PO(TH{GLOz^zykTS|A~MTc7k_G-aMaM@z9C+2lHQSMrywH>8KDY6DjZ~P zy+hSD+tqkqTx z$ynk`eNnGj_&`pk)d>0Fp;}sV6wzbunWIRvg($DhM>V**nsok=BcBYLm@)Kei=$M2 z{L}Y%D6>dXiI{RRy5(%3myN2}nvZm$;D~LnexCz!G1opQGxi+Eu`-C-c$t+UpEGyq zw$CoOk4QB}2x6-w@5((pqxg>H2UZ`c<|e!X?{0M+cm+pVKwPi7z#1KiF68PKtz;(P z6Q@OTq{*UG-!N6Ra>E6407C=`7B1N^avID}ZXhfOp0uHYws#Ku|-d4YsGN;(383f?)*^7p}2&CDm9s}#uAxDtFA z=(}=B8!D6*zA}(Wo=8suNjdf#Ckoa(T|2XrYUh^+Bzk=mcu5HqXY~L$=HrTSec^8p|o2N!t^mhwe;5*d=je|{5PjC z=HmFd3Iw~g9v+N!KI3m@WiZ>qSvC^gV)?mRj-7rMP*V$|XL8c3^m3w@y*{E*oN`cJ z7-0}1cu0!R238uJ*JEo>35lib?QJX(mjeE=3bhiapMdLgk);F2Td=n5T7eb$0BI>+ z4Sb+RjrQ;S9BQs!7u|oJ_$HL%h=Va{S-Y(kOF4>^w|MBsO|gb}C{fG=$_~k?99=0X z`62Ry8bzucy(srMdGpJSdd~jo|EBV5WWnqt4eJ;!)}F}*ETdXwE00twos6O$ExzQA z+Z}(%*j4X_#w#dxTi73o_fs)e827#_(&tZ{x(J@?=R*WW7g0PZFz$R^ThzXKV`NXX zo;Ah{#-};YH`$Gxe2dLALvdZcHLdLdSbRv4RW|>EMAO zt_74Fx7L1SX%&|!Ho0GGE)3Eo@9FTrKpKz3!;EZY!%(w39?LKK*VQnC{e;J&&ZdF; zQB*GNK+>FvUhX%(O0P)@f)uWXlWS0y%+rQ%66)^|yZX_F;9bK+-AU*bR`| zIY<*CrDwyZZcfwJ+YA1u_XEDE&*tdmMKWh#D|q95UaR}F4GMH^FDws*?n~Uri$Qx` zT>m!fQ*isoR?m9b3k|gDp$*b_$ZpE}yQ<<2eH2%;_SJ=53~~WKcRZYKLdhb?In;@P zXAe1i-VJ4fR@o4Dd3Rm5W5OH%825dgU&88FoW8kMnChz{(<&z?YmD3Y?2OL#7>Q!7 z?igac)npy<%EF?^h#n+n8`gHDl%yyUNmn&S?w|e<#L_zXSq+TK#920*DOH&PXeT1Y zZkR*4TOATFy4M_G!Y$+?aj-)@P-F{rzvO9fES)s)cHY!)?w)>7B>GsFjmM5@+ zm;?UXU#z`rB*e$Kyfh_FqvXI1+@@RR0W$@lTOxIWCY7*_Y9N8h?-Pd`5 zrQ8E&2K)kKt8;kC2jAIC5^tcR)n=fUeymZtQM(@1S#PYN@zT)imtWTZnd`+ zrp9xTkX9slB?-E()0yOdu0j?#kEp!P-yG`wF1yduGa`!y2hB!+_NCIO@?s`HVe|XE z!7*AhZ=C<#i^iM*`LF6uOIOd5tE<@ClXgC{&q42+`b3M-uAAF6@rjC7?uSE8eM}O> z0wNczzXH&*;7W8?4zoK7EX^IsUuY0=3*E?Er4omUP~>>%-KbVqkbCF3B*1CMg4i|bm49P6x_F@J5ol+Hzu!I!gzn#11p%|dxiFk+qEOt~^hFh;+E!^7#Bn}7hQlS+)(cwd6Y9OZ z#Y))K*1b-|CFoc9V&0MdSB6mNuzGwUpuUu&Y;LGJxGFA zg5P4n`Gjz~{*C0ms$6^(GY@Cl+c`9O?Lh*9Z;h47h{d*6L91h5&c6uK!Qau;S5|!A zREPx>9Q<7uq_496ccS;<9GWbUtk(djg@5+v7r#E34+cKws7On$Yu;|z$Y#tH`yEn$ zg}{Vw-Xs0QEhWg`FagYCCiZR-)^(I4M(r^Au*n2ss6j!SR7fF2Rteu-4*CxF3;vk9 zhGzRB{0Qy)T$fysjDm$C244U-k27eCDI)`{UJCJFeJ2#*wK0$scxCCZ2*YgLZ_tns z5gvEi``LQFNtZ#WUH-=!v`av>fiL12Z9V7q!}a0^5mC^8lR-t8ry5V@)Uu&=iOP-W zUsqu(yRlGq=e!gaes!Za{(os8JHG?Fy-gZK&Nb9m{JafaVhIIA!@>HzM-oPfNjZcn1VqpzIaEtRv=Qi>~+p4U@vQ*g37XCVqgIIVJaFL zBU-^SDtL@zSX^07&C#5I7S7=VM<)DiWn0y>Wz^1&S!K%G;#sDz8x^(P-Emj<&o?&_ zqm7LOh8braCv6y`PU^Y%%gJIS6-Vuk241bBq)?Wc{1*)8u_3(c^AU-;TY=rh&gf{w zo-5INBV`{qRc7&FKMCK<``wr4$GCY{-(V@@55rVzy5q+Whl?`FUy!+qE1X$y9`McA z4_OYbJX3etmqb5S>gNeV%YSozb`1Lg33-br8(3IV zKYD1nKigAvwN)un5>jk$;H#7pCm%zEtW;v}OwbMp{yiY#4S1NRY%WWpG0aXBxz311 za6mYs6*zbkuT{sb7)ri&`-mccCg{#RuU6Fc=v?_KM3RFm6Cb8hz!~_v&wP-f4 zZ>k>67^tO(S}rTo^ICJ534LP4Hr5au05dD2xTf_2#4Z!`V2x&ZDSS5=vwcg0;6a)e zH(rsDfgd$ppTBMEit8vTL5)kC@qS2`!LjqeAxLZFRi%~|yUJ+ljkoV--2XtYtdzEBZt0%o*xG&H?M zYlJcHGzAP50vRenI1X_gU8K}BhLb*VEIpuXpr|EQhEnJQ57Sg7NsD=GlSV*4 zO^$nQRw8YLb{52{X#mX8$jOJQCSPK~&rfbnA0c@jWl14@@d=O;Yuj;Ft4`EF+CPnejP zLijq~JUoFweyH4~Vl{*Go5oN6-?>v5gxy5Zul$FPC5^a$b^KZPojRz1-0q8a=K{g+ zZMSWKujj9)gh>&lb}MEPJ)VdMYstCObC5U957*I6b}Pw-AAPr-S_e#P50gft9w1Q< zsYx3`>VED5(s4H|znBEJb_g2TyT_j12WtLXTaF$4L#ced=~V~Yf>RV zr{KT8`BD^+7Tw=_9^9>Rqi4`Fb~4F$0Wqt^OLPM0RY`awO9xiw@vWc>dB~^3?5G z5!AgW9;c%UTY{0yaA>Mw+OSp&VYI9PUnByRn+ZV!SnpxSLG|Kwf+l(aZTK&xPVf3T zfCMn99%>Bs(!uRs1dcG{bQO{)&5xxEYd0+0m+~1QI=J-ehW+4yVp{xoj~e(aBk}o= zwqa>-DKgV?!Nsw%&hd!3P6{ZT>@(5e{Te}>VLJv5tQir7xV8@Kgd-3QFXrgsfJW0t z>9<$GI9Agc{LKMFyq{X%tF|S^2Ev>K-^=&SX83%7FNHlnL;d1-`c8nkX>&%*1`!8n zlZDHik|=l}06zHJm6}^Jg)I^$a&a-sdp{1tOSozbT(&-6NsSD7@#zpmc_c%y2Wla{ zEK<$e=;XYq9$0H|qYb*-|B-Z-0c~~77B1EnD6YlbDGlzlxVyW%y98)~7I$}dcMnns z1&X@{cL?rs^M3b#e&w7qd#{-_&k}o#7Os>9#KwLH!wZ-F1z#;k;jZqE)(*D@S4885 ze6DD^M)~sVEzQKxVmhda)yMohqtX#Od&@<5&!rJoFeVypN9ay);BM-O6y$7wD3G{)Vbs>I$XHQ<6T^Y1a{Fp>oI+3Iz)4Tv<4-*CI z7W)5UovL?HH=mSf*B(?8JbdXz|Jy2+O5k5**C(ydfnO?ME;!=K4PxdkA*8lk0lYAe z9yFc_lhiH0sS6KVO0dSCXl!Xldl(k2`)g?1XnS`-2FUY|yhCNM8!DR&=L!)M24+Mt z{d_wZ7B0%s(UD9?l;7+?ta)O^#p0sR@X@4SLgl|$Hn7?XUq~N z2`eIC-Tp)OjErn>hJ%m zLzh_h)UT;PZetKdl#MFb)TXoHUJ=tc%l}e>8LznMKK|1Jc(Qzu>lr1NEejm>QKCys zOPCJ%n9Ci&Ms(u?g}Y&>M81uwDa<1M5osgUwSUE@S*fw0Mer`mt*!#5ZrVJzFTTlb zFUB1;`Vovz#fh35qzXx#DPMQMW}cA{JD#jcpSW##?b5d*|FDnW0H!i!cCj_&H1@Ob zni?aXlmDFxPB`#g$(faX*>yNU9$sNkz38OK4i#a`ubU~TcF4yJ=_@4vJa+s5v&qO{ z@ykBkq~#`~>Aa(o4AA<3ptfI&{Z(ljJQ&>Bpe*)~F+36Y{U@wTj83rLy-aAYRVw%i%9p8UYeT;v{uw=p{N-1X| zXJoCHf;`+Hy}a?x8Sxt$x(+!@U>&QjCNBx4fc(!SaTIKEPD@P042tijww%7b$6os! z>K1!sDIzD?IyxRltA0kY7;EiROlLy->K2x}b$5oxJ+E&)T&)o{Yu0Nyh6lqw#NKAQ zRe+*TWa&7)Y!$e4EdTBf6i z>8DKd>9XC`<5&4=*#O##o3O^O^;aaCLvOwhoR+=>pIHOu`rULWcW-6Ci_;l5rii6! zxw-wj(05xZqiz#8T=joQes>=D0)mFU?FPQ)9{s9$v)F$2%hDB%(gviN9~6Jo80>2` z#AJf!irh=HFu*CKr;DY@Pb9J;n9QP%L{j*q-^!ZZLs5LQj)aNzoU#NQr+~o<9GMu9J3`klBxTn$p&(GkdWk>EJN(UDZd` z{vBf7xDLmQ&mVL7@5{lp(BG#V@c7u{f8{nYIE$j96+QQcOy3C^^e_@I#OM-&KO#&z zj69Q~7Sop4*C&bolL%*LapaPWh!OP^x27|VZz+1-C6Rmp;&bk&nZ@vd4sbSBc==8iMIef^u!idi)yOIT6+h{>dK@wbeR&KJDrkCn>|8y6L|zRz|WE zaN5ZrA-p=DPgRAjxZDTfvmZpIN!qmw-nofejg1@?Bd|9hEb$83P5xlwVbG}mrJSjC zyZbon4{l}50SPF!u%PTNN8Ms#q#Wbi`AfE2m?jSjJ2;J)T~*Cvw))+?-qq=gJadiG z8EJMw567~=5XnT$-Af~c12@vV$8W3Wk@&3=@w^sz7pU3n;P=5<$DGY1OMq7~#(;X{ z@9CHWSWhC*tPujuGus%w$5%7QEQkQCOp=NQe!$zycYZ1#e*%D~?7Sw$3F9^Ebq3#d zvUY7Hu!q-#5!l)>($a>Mj!D3?ZH0K1GX!Odu?-BHg?`umB9DEcAm-|MiBh;hT}mE- z;`mD9$5mA!^ApRH0-|xZ*Ov_h!2>lKH0mISfw&S=b9+W3Kes|WENYy?=L_MqD+u2n z>}gFX!9NQ|Le>Uv@&upLF&O`D&2R^HKAtM9WM};-Ax3=&UYRpcmzQuR{F*}Z9#6n` zgH9fQY)suyoH7bWkIAqLaAik}k6yjBNhQZLoJaHC*&*WjtV{uFoxF=fLnTiA<5$_B zmFI@*3UPtn6YFFJ09yL5SLQPQw9;bVA^qPQX&gkphZJWg-r0esFu736b&n*rKrta( z1U%1Y*HByQVnKb8>~?Zc{rbC%Hh-=*S?*7+S&u(cOP^seVYtqJwmwEy!-FQM*b9Ol z-%-Z<#^MS;Ebivu>Ye2hQcG62;-N*XEi2&_NuUZc3!pXx)zHg^g4N+XmDJ@d#2qeu zG}VCtHBoV@Qcp^-x8_GUC_+io8+uvqkIDDp_lD(> zxHF5kn&RO1IVoXLpi~TU;Ub$PSgRrmu*B9-BL&&OglUE-U}LJGZ#d8Tfh2&Jy4|L` zf~lhcqrBo`@%`Xj`I^*pl&|&oRw=BOQsECPcK0khyOaK1Zce1W+}Cvu(|X>T9=C8g zW-(Sn&<888uE3!WH^gt}cd{B9&!cZ(NE{CY*!X%LD)M}jIkso<&WzQ%#YN0(zt|=; zjFJDtpT$I+vzPn13jwk)lg%N%^`I)wZ`G9Zyr)OX{`-7CELnMDO zjF24+%ejL>5{#bH-`ZZ5?_M$;14RET6nw%?$aPC{gt?Bnmk;)St5~r_-cf#G&_?eO zH9&<;<$~}8G8c`R%N8aJSUYO>cXjks6;-t5E4|EBq(5r9X?UKc-?Lf5$D$}-bm{A8 zn7whrEWw6k3Z*1(06e!?F^n<+{;pxMUeVmSUyA$q!Q=1{{n7;k=fSanZCAkROC6=o z&jSkDs>LeD?3REA0aR`PgH5J-s@Lv7GlQC(a4J9&Xl-L3Op7h1bl~@GmjO$z>TjM0sMEIh12)POp1z1?fT3Y4TUx-oMQ}yFBMLhxp^E6t91ZrD@2{C7IX$1Wg3K38YfvM4!mfjXa zb}epf#C`Z=E%~bi8S%jO;p9B zr5@^nnz8M6G{^YP;SRCKM|9SXg%nUDLsaIDX)DWzEa|oE(rPBXip8<&r8t}KXG5Y; z64?4nRLxBOR~ypU7Gf)J&|}uTUPoL08lq|DWYUntETuy57Xr>w`YKK4Bk<%6>+2Tw zGFOX3xc`KOUpi7Z3k#DLN{{S0D`ittCfa&y$YL;JR(cIq$g*X86`>hECNl}-z@O2y z#AWRQXcx&zHNdpJ3|qy_IAv}*r%_;KDCPR8?CNiN>B#GEcs}D^7;6^I-F7iRk2M*iUiIjKOo+>*!d~zb+<%_D?sDu&z`|Fl?E38}*wn#Ire2{Ri;(VmWd$O%{)0YF$+le7;XL1#&tC6I`WHewn-n?N zPhBFZO&j#}^)UyH9mL$+L!ei@kXfm!@d=w4E%i|(e@Nq!ecXWzU~2_mMCF19Y-}JI zV0Qf(>z23+f+_ZmE9&#(4_HVXZ13rrt~KP&U+H7cPeW7jIxu#kh_WE$$h1g^Y51#@ z@}A|szFD<{cu`9IsqL!aXW9Mw|9_lrIq#IlPE52CO{C?2ix(ewuYPS0%n`quq-hXP zLkAW4C7#B~BNroibU=|iv=d7GJ2O{wqeC4C6Wh~OaKJW@_~&lkZIX77IR}jP&sTiz}SiP{8G{yeD#OG3015*pL1s<0zXV{w-=t*3^>u z16Wx{%EJCaX1uogU3e7CW30HA(CyBD)ald4tcs+URfD|>@Ml|amOtR#EVb|8~7oab|65%_mji;(i`92K-(hzjsHaC zKHFB*?koNJhIKv7L)f6}-Px#M0PttC#w`cF)MfYx7h+EzZ|KMSw6aX38r$>J_x1Qz zBo#r;LDj_59fOO~7RHSr@x%$?1oIsl`W?or(X1a@>O%9DQ$zrSRAA;JIH^n@! zwir&aXc2OSI0mbyDCkbkdhvEXeTj*QS=0w6IQx(v!<;jA{04a<#^S$5Ljnt3-5cA|V;es^TlaNMVbsgxB=ve@e4 z7}xh#r_7Gh-q=bU2>NgrU&T<|;zm2=-G!~oyo#y?yPDeCCtnGRYA)dt z6=Z#JbB2!p-9G+Z@G1WAdJs|4it}dseu#PmgQxlYsrX zv5TqF+GU)`&ONB~ye@R-g*(aL&v9nnEdCFa2b@Qzr|AueEo+5|3hap_Y%MLVckTu} z1?_*h8DB|+{39L=BI)3L4s2KFN2GQMv*#V35uwYbA71a=wi2B*O0YH z$h49GI{KQ(Om6O=SK$2Ckr8X$ePF5qszJMZUv zz|@mHBW~+9V@aHa=`tfoF*JNXpFeswrGPQtWUIB(QM`O&V!W&puf+BK&;7>|EDO0 zwUEzw4+!2M!;>JMrBj6nRm^|aHo8>@jfoKA$N;w)A>)jVGx{3=h#8yB--=F4CSZGF z$R{Wlqlv1xm=TMgY=0(v20Y-GAYWwyO(hb&O+$a9q_i-zI0iS$9}`;A#3IH7A({9Q zIq+x#+%ML>mWh*y4wn(^R9;HtK0Xe!h6T7%GKuHfl@kp-*jCB6`IQQ52%uxNfHEYXoUuRO^ zV1P);-T>68G=*t#k>)ZiwiWh`+X#!ai)NaoY?~?c`i2f4ZNqil0(|?Kp|4EiXI+1{ zLt}lO&xK8{5U1p51P2DfBG?duSRZj1^{)Bc?1BXTVXXLs5g#MWi8hzB5TV(!%yX-c zB@Aw*`Fcb(qR#3DX+6eCW5uCRwaNVY3#n4 zyR8&qryY|AZQ&*G^ch638nQ=wbd=a|RV5h8HH(s#rH1cP6C%@<4yAEhOhJzrTRkEd zd6V5ZM*fEDyP}{<3)1c6k6K{2id4k z=5b;}XDX(3L1d4}Uz+h!ev0}?DGv-F_}x(x?y{28t^Y-aG1}pTk#@PI_?SORfT{>K zRaxAXFNHJsQBlDwEL>8-v^)>R)v2hU;zFzETEf9@oXHV#4%yCA9Mk;B0-Z1(z@|s~ zoW1JDWJ=&{n7L`j5DDQYk~y41tqZ8L9;&kJu4Z?1;Z zV}SkML_pnnU^pP7#x64ygB(O+COGoipx2FP$12+bk%Q;`nKsm@W$2$gX32qnppI7C z^UA-^2Ku`_6#H->B{H&i6hQ~II??P;sv&2^P3?9u{EM9R3bUDF#;GX?LuQg2c&Lx!@d8Wmb z@Run)9q7OR1nR#F9qAvC5gOr_H7noqfDDVtCfbupt6K*z$2WA}ujMODYJ^cP0?6+f z}#B{gCEjF0m9dtoZ33p zqtF2$@VK2ju*l$u+0{uzX9Hcn&nTyJe~3UV`8Rmze33^pEW_1GN*v4^S#B#IM!hgh z(<`eInbNTMHz$d`{I^xIQetxRAZFUK_GcQ#;SZd2QS}r$yPT3@5m+jHrpQd*5SRUD zq!=x!5KJ(Vy1_zL^FDPDmf6nbFw%RIc70b5k6(b_0W)Tw%Aivl;r?3QT|rt(8ps+J z^+`iks^ltR>O;&@L-Ju`uh7;~p;H@^0+JC6$GWTC) zJKr9IiTs)5XEGEqQKTu{Q%ir3j&|>JUH64IyP`k85D9(v8=_UDr5oa?RN0hm+OA@1 zH~+4ibhn3o@vT{~GwgUumUc^x97+}JfFWsmVmVU1d)^zw>Y{smEkdMJdXJbWv^--T zP^|36o?P6-UCOEZ7B=4%F$25nDf^*385ViM=8=f=(}grnmeR9$n9{CFA)2 zvx^-0JO*;6r_Qr3bt9}dTq`*Altb^6O9h&6BMD~zN=F5t!ghUXHjl>$57*YMEMYKm z^dJSgg^JH5a3-f5|9M)GGAL!ZMqjw?y&wX7nA&1Yc&xhWIVShR`A%MOuAvbfq(}Mt zqE7Z|y)BwWmFq=ub;F+7SM0@S$0Al=-;tuwnhB*eJTek>;P`J}^L&Fgi?YTSGE3US znq%t>SdMD)RALg&Nks+tm_YPfRTQZEPqmsxJ04%ikK})Ii9zFEQsp?s&(oE<&Mx6y z8Qu}<#i4eWQw5Y+H^#mmt^4Qu1^ipF+Idi)c3SnCQ2EO=`xD7oJ;4ZpMD)kqr)HSw zi{uD+BYy==y?HIeJ5(owpbn5bDaK-7{+2TVoG2n3{|PPN%hSCT=<@g;wl{BL8l~U5 z0L$mOyc}gKtPu3QW~gMsIC}7pO{{L{cFf(L&Q3ygu=(~aw5PtBGnRL@9(F}17$X~DqQe{HH1mL_;@-g44+mPBI7FDR`pAKb+ zpdr6l76b2-Fy=D)jZ0{Wxjdg0Aewc?U?rv?J$Pe>vgqm1Gkl^|v#q+UP0S=d+r^b% zb9{RbRzCnk`_ym&kMQ0+KS|n3b7e*#rPCSd#9-V`k>L~8*IZg`cRzN9ft@LB>Jn-n zDS07qNH!wfU`!H~bb4L!mvF0O9P8~m0G3&3xNMxM7{D`I?)!%^!^ld~WdC2t^j?`v z$%qXU{icrp@^s>8Of2614fpjAUJI7QZ*!K15%;O1YiYGr^!vtYXyH5K$M<`2!EGZ* zQUQ+IjM7rUNHgye#EJgt_ATnOdvmB6HZ;ycrSOtLTKFy&aeIp|) zkW=}s6E`t;Capgd>t?ZI^TZnIn}e$gEGer&o7+0KPEqEFPgvNp5!7GO#fIasm)}lQ z^j)lIg(hPc&`_fs64zjvG-#pWQvOx+djOjC_e0tfeD?P$9CnzU-6d-IHHY0ovsyVC zq3kFsEw4)xx^2l4XALKAUiZx+0w(#UL`RhH*6_F^8IMk71p)J(=c4yGKV60WVmlez}C}3_fYt|3ddu7+P8e=juVznw4I(Po|C0)W4fdj41kF?i?xmTKW3#F!N(-=FQ%@`%+sksT%NP-4BH-#NXj^H z5>aOaRR1d{d-o)Cy{+Z9=$=fu(VF|M3D1g1h3|1MY?2pN_(okZ;nt-VZYx{#0vCDt za>C1Ib9kqW=>b4)yY~|6V+@4c&NZcfPe2Rj(IL<2s5NWb83iFqVsK7&k$C8p%24Vg z>WXq?=HG;)uhXCjwnWHj!H5rW=V}va(-JqLnN+jYK1t*V7D5x9tFQ0KH0!|vu`k3G z2>b{0Px(WvLOioI^2kNHc20mYGo0eXx61Rn%PoU`N-Hh1m6nm>c11QsFm96#&w@4i zC4ffCfQJ_^!8ZXTOcJ*HyoW(A^f!3D2Lod*SnWE{x96<&8+pf>l3xlsC6Pc2Y3tDB z`)>6)H53#UJf>uumI{j}F>%$RPvx z08L;F*CNWiNe%lB+)VD1ITK{qgKhmRQ9lcV`cO1sMO6baXdi z_X3N4h|Ss8mw#HZrnY9OiS!5|;3W(M<$&d!d4yNBGZjX!hcEi)ojaTvFd>{lJ+ zzW5eGDMIAsTw-t$3TE0h!9D`ToDmpj1kV_FbEVs-R|L~|8fdy(Egqx)kYEjGKG+*T z-y5+c6XM>4z`)u)f1&_yS$gC1Z4aHb%SGi%RH z>Y?lU*v}jiis9q>qW5`NDZWGX@e4MPf-;NM$h`5q$}F@oMjEm8-F_VASL_2ek?+K0 zro08v+`6)n{;8HYesPjy15BKOJnc*<7PGNL7=wRAS_haDRlfV*9kO1a9dd-4lmou~ z!S|JZN;2;)e2zs`{O&VCKk0|!K5BqT;wY5>BcAZ%t6QZs9OL_BPZjC@)77bDGd)R|kO*=hP91i>O zLrj_FKIEmqKn4*5EYTCGz_lknp9Sc?)!VDoeRC`@N#UMmh>cWD3pzj-*?#|3YHi57 z4WzUp)F+KrA{IP^Qq;uwLewI-kiKAN#>6F~wRfocJg2?)NB>)M4V?s>8nrejvWEY^ z;fK!(9Q-t*HZK+@t>h1@bLH2gIJjygag=?Ia z9U;DAAMy;;&==Gz_Cc zTnso~T{BK%MA8o5@w~Qv33KJi>uwmBv%zI)n5U`{b%sTsXB}y0M)t@9F4nlG zkmp_3p@PN%=}vrgLKEQkU;NJ)lpCFn`n*Nf;FqF;7}h~-MjM)6aZ}gBH-A}Y=;%Z2 zv342RPqRi_C~)l1^`7aEJII85%%TL_y9#RT6k|2ZY*l`*qa=PRYtTk5x9m2&+8Ivl zM>~_Eo$9FJfO_#d(YdX?Pd<((&%tJtd<0FrCI<6+q6n;Vp0G|Vu21kJ<8F@ck*plL_t#|;3_o! zq=U9Zp_8u@$?b|gYc8&yO@T6h5T?Ac3-5xi#^&t#vpmD$qF2fn!9YHpnFZghqKhtr zuD6Xi{MER5Xwl!Q{TjD_4&=QqqR3!eKZOmACI0+*LPfJ5EHELOCoi*xrWtiN2VN zXk%w5B-JS3^F9grTQr85gQT{?uJ>Vas`vdlWv0S}ALxYnBPC3?DKzRDM@fW-#Q97E z=)_qluO%icyp@Tii2x>g`h=&+lFSUbwF-6-H9s@^L7-AlYE=pKc*8)Y^;T7f%l@< zd=j^4;$&50s-4HMM&~}mrcw3iP`vo6FAffa!w-xwLKO?akaj9+m_cUsamP)@dacY9 z0>CSkFwy@fqPP%1!nB9-_d5wK>dg06slPA<9)n0SRez*dO#*YWPlQWP%mU#UCH+(vcdnbbS;xqs4g=P0(<+WuOht$wsDY28(+*JfQ0R6a7 z47%d_%jweJlWsOXS64l#-k5cKXTbRz#hU5&-ITD(p&fY#@q_T}KTkqNYnM>8FQ*RS zuWIARN%Y;Ldie4qsJL!FaD=jckP?@DchUKmMxhkzknt%NxRLNq3Fm_mkaZa+pf03@LBUqxqS(AVs<=PmHV*Hk=1%4 zK_XpG^0t%a)Y*!D2!A3ZP{7Y~ItCbWxY|^Ic(@B#xeI4Twt(D4CQV}v8rom;DdRg~+XRJyFLLt}@4p`m@g!&CmPl0SS>3m#1l za*!4pG+w*9d2=SEC9kM>+!pJ$=9IMeD$Ghzq>Ou1IY*9Kk(+8zSwA@>80)aE=jR$^ zknn?7P>6*h@PBn-T@m@bF=4|>0dpc47jl~;CUfZUv}TZ|^s}tMQLYAL87S--w_Xl0 z62-#KV0o`Mx!xurrr|c7l8WiWnh(ebiO3rnC9Z!8 zaD??glE1OT#WzVH7Bj8aY21c#d5#9sJ$*t4Lb8#yoD6vwPc`^13TgZwl*5o^BBuWN zktHhP3b^!6x~OpDzB9LbGQaE}B>bxA+*~Y!TII;M5*+IK@jchi8Vu`OF&3sNv2Oha zmPlO0K>6iMJ|)cvZ>=BLqZ>L`vSez7D>Utfr6R3D$#a!KD) z%-AE53!h7%`$Y)be}wVWV^r~w5*tasSXla&>Co+7mbsKT?wmA6~X=W6Mo`)s1 zHC7A2G;-OCZ#dYuEIxd~!{$Tnsv_$3HAvx?5iwGMiMXy*?KrMVG-5QS5TmCLoQ}FO z2Y$`xUs5^Y&t%@~r|uHf!$m%X*=FeXV5cWx6NV3pl)bpHm$nnMsZ_K4Iwi9I=kcy+ z5j(u7to?;gT>R72JW2OCEy>!8?K*JF=XnG9#bW4C=FdgJcO+OV)Atg*ScJVlZKMD`ar$^E~G@^5Yk*S&9;q zxvKwW8qNH4#o`bP+BZV#W5RF{burmFAX-{76-sR^1^!*AooNy9i zV8uwtQ%-|Yrn96#mKZV{4w9}s2<=$Es$^eA80%jr4OrX; z!XS>9_-P62KR=+N*{2j1O-`ELP~7BP&sU7*nzJ{dz)*dEZk2k^NKLXX^bgn+95#U5 z9f55x;+W0~rYd+_Fd{E`DD7|WW8qM{&I#t6ifaH0E7TP15W0|js+4#9auS19hy`gh-+#p@?}A`PN1XM;~F$F*ctm{*8lxc8=f@4N<9y5tGdp@W-=DXQll<;Z-=65U2p$_FqBy6XC;lE zs|T|TGNdIXrz?PlzSWd1cFyVu;Jdtp14(@61JhS2S(y zSXNRydUm(X!~T0tOCMh+VPYSlM}u?(4Y6|cb-k6p&mfo}aBq2w>CdpO4))Q<1QDyK zd>f*p4!Yt2*LHDxiIopgE+KJsCBu;^xRiT#i%*`+40v)|m7k+M%m?^NzR)LgUv2&_ z;rS`c*&^&O)56R2Z?2`SWMUz(*4?dDeW2 z-U3SKY+4pg&tTA$p8vX)UMwGIk?J&~FDAKIx8OS8p<^sFu(vh#mE!QIGNGj%ug!3> zG=$@Qd`RaNp87u2@?|GuY>)_^BsV*uf_i=`Ppjv<{|&MJosx71oSyosoLyZ}mNnXy zm~61W(W>0+wE1hZ&xY2At*f!B$qvt8~2*;cwTRp5cd@Yn8hJ61!&4G&$(*8bzaZXBey zK@9T_5SgW`aaO#Wa+Dj&kTaY0Za$aDZO>iheqYqPyXpZG+%y&-9wRD>5DRd?;q<7Z z6u;VUg-v!zY1128iK&FcW!B(7lc$}*c}mlZ5Okb1D(%b{8q9y^Y>)65pw832)(+Vj zXs9?}k7c+#zmgJpR9W6AKmIpo_$AfdAk-uMgZ_d?%b9e5)Tz%7)etAypI0Gn5+1W@ zGAWIVQeOa+5_|ilhzHVnbte`nw6?2=@e2utsMA`v65p3tgqan8ZxMrD*kZ=;X2!#u z9&e#I>a-!sF#qcO-Ag14NUzqfiT54v21dRutB4>tTi?BhVK4o+geehYQsiLLPpmW^ zmPK)X--jT&5+fmMpWaAEb|jEZ`FPSUHjtOV{sQKQ6@fWd3ANg`whnMwM3GOGpiqyT zL3NnKU0&pASx=o|?S+FU5~2DvWi->IaFY%xB&nVIeGtUFH3ZYuWJ;dDUtAJUb9(Qq z)^s$v`cxj}Fd??)JGz47*%1tGHzo7^{|0*x>>9w^oy!<^VJh72 zGqR35qYPDin6PLAFQDvV!0^0z@PWw4LP`If*4|b*({+B(kg*sR7Z&HHe`q~sCnY7) zAWlJ^KgED@QWipaUhl9rVsQO~fE2D(pF}aUDdi__sgi;k;tJoNSfP1l>?0fCfVFF>& z@_OaJh=bhgpDX8=lMt_}-x33jVDS?ZJ%w?DRdCr@8+@QNQ)L55R*|befsWUMihYf? z1NwsPcRvquftAf`TD}k}Fr}%C@J0pRvGB##8r%NKvxl(H8(ev3fAPT7;pgx9PPJ{` z_bRJ5PI>D%_9ZLkl@!_XdeqmMfhL})u?VbE&D!(z-sgcj z02&6bm#J4t59(1P*Mq*G`~D4~<{U_R^ZO_hP`PhETFfe=t8O}*35xSGZ0M+cZ-BX> zK3k+gh&8C(R!kX!%r1ya+QLBNXFDj?-pi&Hji}x`+ zE9*B-g)3 z962? zCOxvc&at81Ljo|H%0IL8yQ~~gFAUq$pGdFt-}o2S%q2m~g|LOJ2N{A1!3E1-6%|ki z=079CdQh-5Zd|oFci3`=4xq;qHN$ey)kCo26yp-nVFi1O2-(J6ye?tC543{2fJoXt z0(dWqGLWQK!UdK;-Z&iInCSosuf<#Xe!(~mj96dqKm+KAy0Lv1+4&P-9e9<-_rGB= zx6F@Ro}bU|@6R0IIje|Aiu4ndhSjWENSCu6J&{2&UfA<4PyA=rRu=4388Y-wxnyZ$ z!!RD`YK0!PC7k0=b+kny`(R}gwP+btrgOM@{9_V;=lv~Jr5+f)kdnGr+gwz!<=i1qnzPci*|NWWqpofx@Fu8!Ly3m%# z{57v0t;N=J`BfeZmO$t&06;`6G^U}d|3yeC5oD|Br%24%vbY#;8p)`C031Gzv6wG4 z+7J!c>A8oDpAV84b>+i9q^IOQIK8dLRAd#68yEy!+STNAT{!srK?M?ebobC>GYA`g zi)ygCumzx*xDfbX>J=S_&W>S0fiJZB)%u1)c|C8;>X}d8#IpJ9F~5X0B&Icij=I)W znZJ{;v!Rrq>(IFr=6l0})JsXobKTs5QKmXhf|R^bm1RfNu#cqdIHN>|iiSHi_UeAg z;ry6+gNh(jZfoU+ubuYhUC1O}gq%_Y0979^Gz8e|l9hYa)5$tPRnmr&mU;Z{-E(P^ z;^)YBJPZbYTv1jmPB1gQa(yE8O7jh~o72B5Q7o0&CbfaA|9bmr+it{r)oFhNxhs-d z^QE4;7OgJKbESZG9odJ7#UJ8jmmXIYRUimC-D)7aoa;ua3kvjx6?SHUFzBn@$OX{Q z@I3zx4F~#TwgfrU^RZp5Y(sdOZ|${)r}ivwy!GWY&gry|`)2ro1Z!_ol6Bv_BNhbp zxf$}$SK=KY@B|lHPH%TlR)i{XK zoCpwB2r#Mi$kAfKwrbY`mY#djFd+fMezmu?8Fw3+MQzS$ z8SP$QC&dOnZ?ATG!D#$m{L%069$#v5UI@W(QGHx!EfwJXcAYPL0s>~ux(?m`|Ka*! zz8Et9(CA@&H(23-F~W0U-j#+Wd+=ErX1_F^PVK_dhc=RJV@jSVg>v^1`N)~4?Jd2j zKWz@{%eh|Y(Vd~ffhz#PXnf14;jJLBaaJMIIOfy#jdP;l#Iw+U1pzQ*#j{$PQHGAw zS30-V#c>Z+;I{pSHjFEmqiUg$5Xk+MSh~LIDLEMtmTb=lPA}44*TYo${L@^ZAgPSD zJkK(`c~>LOxEalsB$|=6wLsf04)^dS!_zGsT06D)^LCKld4q>j#c zamvW9A@t&-IYy!lpJC*hg7H$oev)ea-ms_eI3K4ZC!PGN0U^y=g%HN;aD^<1N`HgV z8j}Z|$VE44S1MOR#0xg#8O^FdWD}MPw*>2o8I3W`?ud`7YFMX?`v_hQ z8jBCC7s*nHW9m`^zYxnh6*(Bhv+f-Xi$`is8C$-pe7jEV(>Xc{i^eGGhdUF~^sPD0 zAf%3z;BXBJ-4ZuEPoCck!YwN~`D`$&g_EIj>-zHEudK=z zh`MBL!@7Vg4ZsvrLJ=b3F2g7aY6@dw^pLidNq`FdG_~5rWYvyn+YgWw`IWI;b-_MF zAcf@fjfM77EpVR=@yDJ2(_I8sJO=Q|NLMBx4Nf4zD24MR)7H0V7JK zZfo)tgR(Doyx@iVZQ~FkIg2i(+NX(EQ|697w+36RZvkgy(a>IsL;WX8)+Sq6iQpMS z90oJ1hp6UFt2=+PxFOKa?Pt*3(cb_bKIz3AQHnboJ)?9peqlfHTLiy)wotL?&hz>r zkb*V=LJ@xT!4w=mP<&)AJ+?t)p8NZILe{boXMGP@m`$TWw;BfU&C1Qas)uw8-P~}& znz&uJHL2d)uR^MS;kD@ZxnRRldMDu#+i58&eFFmvGCc@nLl%k~7}fXmm29O~ha6vO z27mv>?_|;+#QbA$(bIoBLvg(Fj_gKn3ZOz;^0h#0!k0ToW55>{Bn+z{X=axvf7i8H z7|UB6I_+0(6{9Z3ze0R!^=@v;4aMSU}idy zJW;+%BIP-Bv1aA-jVkyqFJ^8Db+!8mMZqoNE}Vy4_*;=_y>^}cPRhQ7Thq)1Y!wpZ zpwj=B)^Q~TWR$pNS=!6zNh~3PFRdoKl43-?{mkyZ0Oa5PdsXwHWP8P7+Tpv^D5Aao9_|9V6|ufdP&Bhc%Y4+wysubd%X$_L?d^Oj)BUJ({oER? zuMtF^y7{^D_^3QDiG#SrxlJoa_Ohn|%yk28lUNGrI8vhFNG~~bx?iY!sifuO;2C`x zvP{fS2;@1OT3q1`!x(>J4G@X)QTvkv=zZd+JV@z^r$Sqye%zU8jKxuxk8&|FiqcN& z!~`^2$IQzhBO1>s+o)XYuxNIfsKw26o^L={AarCw(04OhzzsoaEU3ZA2&Aab79WN? z1m|3pV#T>{q*#gfc%G_Vq1v;}>^(`h{#31#2waF zP@+%rL0v`$tGv$R&(iQHY_r#ZguMIjuExgJ7M!C?KgThn53^0x~8S zai+P5d~uadxZT%&r}3+f2%78Z!vi7loF>&*gnfgh`oBhPD!cjcIWzwpPauE<~~)rsrS37Kdzn9mga19aAPY>h@&| z7NNzvUqm97&bklyUjt+ND(79`7yRm6#c4n3Qx}o%3#Io{iiy5Ukec>z*_bT-dUb_A z1%}3%NG%mE76rsB8eCdS8ry#2p`+lF_%$H;KeI09U|81oL z5TX-~l_y}#a}I+qH^(s^@%?_1rB0YU` zbJ^DK<=MY{@@WDll5^X`7?uKap55RREhtQ=j>VCb=W@_q5j)F_#&36pw>M|@-&-+y zs)69!OjJ+Vm8Z@|Jv$1{zBh!g)Y1(8O^k-OWN zy+M_l%&tDIZT3o0-Cf!LS!mWg{ek1;{(1GN$NTxv-9SA+2lhKEj8jdTxJ3WW(%}b) z%o{EyhYBElB2OSvftl4<>I;Q+X+}=*|L%b?XGD9ZtuYaTKLi=yO856MHvI6Wk?NWlC65N!)k>IT zKr>7A1O63Z4e;P$84LHdF5nl{Gr@Pj1AjD}4Z}0dkM@vY`xeZM7bcxxw}m@GB*XkQ zW}OyK5ln`h!xgx%K|JRm;LWpb%rrOnRz4N+TPmI?@Lnx8G*&=GVK6&UY9l9nULLQ| zi@(BhM#-*W+%68KSl&32D4k8$LI#5Zbu*DX_r^I{5kh(?m6|;c%{2<$dHAx|l+YuvjiMVa|G*Rau+} zJF?=k*ui{$F!wr3kE}-BTlqTrUPTSBH~V<_)h@nyL>VRA1eBBJdHaKSLxevT!wNZk zNtQM!$s6V@jQ0fa0@-gUnwY!|lwU{n#}6|q$MeyDE_3G&IE#5fE5LJ;IY~o+Uv%rV zVpa%;k+1H*id~3+qX5+4s~lS3F;q(acck%<0;W(ajE`W3DnfrFy>UR9P7}c8<+LOG&Rz+AduCw7pUm>9tVWpAlsi{F}Y=Dbbh5jzSh-!~5fUU7B66cANC0)^WB?g%+bIh-eG#$Y0Ie(FXoN~ju1 zuL7(=z-^_wTdRSmZ&z1L{a!I#GB)r^LHlpYUflfdoiddck(?I5geXCqe1NCR4X9Yq zA~!P>Fh%UiK8;N`h(C?2ndHsq;Q!%YhxQ*0#qditV_7T(eazv3gtZclWf|%80>|ol z;US)sY*=E%S!oE4Wltg=vSMbyRYFlFswnuS+!(N5MDAnb*XbVlV8gtiS3UE$4`3Jm+Rvif| zG&VMNaf3)}e5_Nu5So>3nHf3CMHhl};A^>Cdk4&Ri1?2dD@;v2_=r!3^4>_OyYqW| zJN&BR_YL-L-vF`{J#{&H2RYH+IeQ%Fg7r8Cw1^U=`Hk- z^75ZI2n`?pK_0|rKOL7I$wG;WEE1=Y-UxM3R7_XJkt z6$NJLKD`Hfk)jOn8fxSK<)rhGM3&Lh=Hamo2l2SrY^9pogQ{0bMA{EJz&_i%LNT5}O5kENXi!NaD3W8itr!ipP72GtPg$;osE?r(7Qw_?RZ^M#1^t%vT1U z1p0}cRXdh}c}fd);yEAbD=Vm3?PQlQE^o`nU=JZJ924m}SnYJ3T*n9BBK2Lu}3l#EW zDDW41Y^=4A#63j13Clo!g-dhi((D38+0up5LY`1p7%L38LFV+znTgUI?ym&+4#{Y~ zLb+MogU{{)Fu93PHp0H4Q`1m$qD!Mxw4^!!FX)vFdPFI#omayJLkx@Nf+r$XcIKLR zygn&|K)n+e#F{f#qBvl1i(uaj(Tp^Dwu-NzjTEK+H!1X69KGu3kE{Zye)WDAs~I?0 z|Jrr$GB6Jqn$;g_2aXr$_cIyd!31;;OIz+|jl;|O2_VN0+G=*P$cV%pMIU8yPET`R zS1#yV5kP9?dcvsVTzp+ItnJm;@Y|B%ac8H?Yc=+{{RKIAKcA&VsslTS+_ zqzGe26H@)Jssi9W?gczp;fp8Imy5nnh(4R^|9k&CAk6E<1m<%cHIS8G&4Av1KbhiW zEGl3E*}%`qJr$Ece@A!RFjxV#){4B3!#RSm zT7bIco8l=v>E2($n3=t5+9F7EOSI3DMU_k#Z z^_7qyUf*Dsw@(GOdSaH7tx^)vMY#NExa}gdb;P$vZ%w~FO_G`X1aXpgOqLpcZeP0O zj4&F!4S6(F*{~|&U!`mm?9C%)^}B!QnQSRU=JAU1_SI&%tV{&gF@BSae6op*D-B}G zTdq0mO#(O;uyg=gVieUNa}O_D8nsWt#{bJ2`eoy)dGbtPQ|V^LrZOINbH_zXOOsU?#JJn9#Lh*8S1jez^0rVkX@3N4_!n-()NgbsW=X zmWZ_FVlquxlj)!mvQqZJpPaMKLNITW7H^+ODf*T4-^+D>4U0sOy;{jNx{ol6_ea1z zqB(N=`QQuMZ{s-M^fKs7U~aRrVMILyN`hDh}G96Oz$2aGkXV} zy}jXpF0e}LBbV!oU~`!cVR%XTav0fZX~0_;x$m6Ck=8s-`RopFYYAa0)#U(c_Ix6e zFt8hjyI$6Onb_bzB|}#uh`j#*+$2_H{ZJBBP9{+@64r*<;>s49s7LbA@Mh(9it+DxjW z_^|#->@UDUd|gz1SP2R6Qvgv0RqY4W8&>MFrG%N=%I@6W@DoNJ@Sj}y@3SpbzRr^x zxPf?Ql4T-ytE7yGiwJVBog6BWZLEu8l1BrGEFM>?GpeL}PufKz1Mh?!?q-`@_}fy^ z^|1&z$#*AAMFW?evo*Sj)FpQfvn#^hNE$NJD<$FE#N(MANuo!oa93CU$g@eej(kmR zLx2kciC%5K#66#2`@w#}bEA+8u}tdq|0**b#77(YE+^c(4tE4omtGHPA0Ah{29}Ga zdRDXib=aaXoSZP2RxVsrzN&ry#6I{N?jEwa=&?CCe~~%(zWp^>u)2SomW1jWeF2|0 zLKvjmT&SO=k(Iq25ED}yL87TM-`dwg`>H%~d>p>ch}1QtN4(oAr(YQ4^bRHdn2t-t z_AGB$vvr~pvBM~s4m`YC$Be8oSVP^iY(;h4oUXd`MOlkZ1|31;4@Ic?T7Ml@6#=S- zeS}pZBZ{9QDs|luY8nl1fAE}I)d_)+8mF=(j*&;7JkME>Zw#GS}00X zYG7h!)S8Zomg}R0TEr)1iFnMxEI!*0qhR}>IKP@*l+-Z~nmpP&o;)bS z&0O#^iDX1iYEFVp#o8@#>T#!en+cV#esYsbL7GAKQ_;v?LKcI=icr4cUJHgShBgW- z&0n>1bA}%y=OHANx4X|5vlmP{IE3qrFNb0kYiF|08ghSqW=tSgLVP-uPxumZr==u8 zH7aEl_@l-?*PH&8Yv)@DIiGNA_O23Qh4a6bNA8y+n}SU zUHNux$}^9Ex!Lx-&+;j7f4Mg2m#q?CWvF?k6Jygi3v>CsJs`A!+?lSv7AT`N#gQa~ zoP<$H9{0cDjVJ;a z!7J~MEV4<)u@GDyM#hDB3g>6nvr+WG3)G4#m z-&PfM%uhOHKD9dwLeI<^Szoq9;LBnT%{eA1v5TNP+JM1u5Mg;hT?fz=3{fdFBx=EAEZMpLokai0h0n!n2Bb0N;YjRf zcMW+Z&jNABp>G%pGQjmXA-dD%g~=CA*}+d1ssiJdVyv9l`~I0tNcyo1@zEmMGQT zv#goK=y3{3^Y44~<1w0;7%_ut3Px-anIi)8?QL!rp%-+N6VnBCW9a!Zfu}C+VqV<0 z%Pv)~rDV)<+@EC5UU$-|Cgzi~w$lyqRgB2XCkK1b;)tIwc_rIobx9j1%tM;tlpeADi19 zKQ~E!_Qp*H6A>#SD3cF3$vyGZt>t$1_J~h^e>L(P_|Zm!VbEJvoF<-4Zoa(A66NEt z-04hUA1MZvD$5r~@szi=ghcZE3TJYl?JqdvZ|sK8QQogz$v$5sPTGFCdU$C$O~`o` z3XnjEbh6127H(;6e{o3l(d3LtnT{^lu}JQ>a%@;&tD!W(Y3&a_L1Z2yv2CcW8%@5)v+PtEgSCK|Z% z&IF-2TL{-%bW#|DDCUfS4vOlF#N2wrU_Ct7_n7Fj`jrFyq>?#px$%s_BOYX&{TXh( zxn+MDZv1{f;!4rc|Jnivh2bbi>5fz*8KD_}^i0=%JW2*gNX1lNFPGMkftsAoV7ZR|B566(EAOfW;ebW}Gz7W?brxGT!{%q*mDl=6!+O@^ z+MrL{F7lvQ7+hc9c~H@bar`$W;4Vd=%{LtI?O&7}+qOf1hzPs3#dV5Z|ihqu0V)KG=hK*I1gGJ@i^M}g-IA!&TSfPdox2k2@{hpzJQY{Lsh6YJWVapbQ6eUKUWk%)7WcqX44yQ9+ zgg(UeGkg6*cw9P@Y)#@&lf^gEIl0)_+0SFt)_bt{(CcFBbxKMKKcU|rM4vFm`{bsM ze3)Hj4>|JG$q3(r=+UN^I>xxn@JVLgShiKk=1b`>udu$vkMflxX8u!^x;znFqL|Di zK3nV2&6mbRQg7K*jI+{Pucm$*yG-hKmKe^=lujC9YT0|;N9PakhW zWM_jA!)2fP@>kjFYGx+uVz4Ek7=RGF(&L!XNED;-%DwPHs30gcjFgaSM*DpiT#NMn zuGie0my)r7N@oqN)e)(TUQuRSnuZ~09`#T~FSA{|L%5r~=7YQP4@1-8a;2&GLM6^WsZT3f`)}h0_#XOy$p8+egz|H$R5`s3AlPb6dizzr)&3_SY!A` zQQ(dOuN3SahnLPEX~LZQnu&eMhAJk0oUY}gxH#HNf9hQLsO}p?=J-G1W7S-RlM30~ zx#=yXd23DYLUGQRH8|_NKyyB=v$XXN%BQVwfqHC2r7ZACr53Ut&$0c7BgK6dsU;7TYn9+wF5)zm{MI&ff`l;ON^5y~Aj!Ke5W#mnKZaX7zX18Oxx(76Sc5aku!8%B1^l3)8)kg< zN>cW5;EI90Xuk|DoBp&`5u1H);r1C@%Ixn>!|fyto>a%PSF4=U@UiDR4ZkVMyCJSL zQk3;W=%sI!mWKak^UH#lxx?0d-XVq9`6}o0z(Pb#dp;&CTgL?A-BMa{|4f==`0WsF zJqKrtgj=m8JvE#tNVms)sDSP}4sE*dwTt|k70|jYrZmG<#n>+n=-P)LZLOl>b-bPO z8GU6ZykB*7Yodei`^q<lzVmk|mVV;VZ}Go!d2}Hmy9RxyiC|+=C5i)K z%Ct#gyojBk)!J`E+*lv=d5jZ5Hh(CGg_Ka zmGZ-->YBq4HFn~N<;pmDm2s&9Wu*P}@ZabY7P&9R8et83szteFO`?tE3-oCbHkFq} zeu^qN7#UScCRS!yYH_RD+1Ld?HKm=lFb;zs z2sTHpN=gsLWs+Fuu;3*&eDGaXmVx>QW2(5(L{TgL4;J#HOwZYisaB7GzKML@5 zELm*(kxX;0VZG{D*4{q7$A z+bIr9mf@ib(KWw6LJPdrq_6F##+%t4>$=m^E#12@tvK@-Vt`hjqws%CFwW0Tc&ci` zpI1kf%8LlpyS;5D*<5_Ov^;Al=q@>&?9mh{P+dOwkwP~5eDou<=4`n7zW!(=tvQOP z&4(gc7r7+zBU?JHwk#tXk*vjPsV;lWS3|d}r=|pEX_G$id;E1`TKR|W%cxSHNR&9E zoGZV`A{70LR9gl00Ajl+bHaUizmFmBu+=XsbA>!XYOnG~R@H&!nJE!&x#dhwb~Z~b zQJk@BkxQmF2m~~j3HXm_Tzg%sQh6Vnk-28@uKS@Aa)fzA)+9{a9hqQ<$ijuF?bU{F zu`g_js@dR&464 zt?TJVz_hwT`SA=A^=0d);lW3{OnE~vy+uMwQyTPy(+IZ$a(_7z{~FyAZucfx+s$u# zNbtMK>+~P=(J-)F(+id`nhVC^7i$|zf$XQaoHnlxqc^gQzAwZBhr1cAUkm_^%>`C$ z>L^A*k#VAKrF7-3dH<-jv0Vc!=GWI?J${d%1CQbTox+HJdQh~!I*=3Z`x*3Xtx;ce ze~CYgA;}%6m=mNi7Ju75iekSZCsT0z%0y!l9zBL#Wb_m}pB7dsF`Iw&Fm{RkRPy4A za$6m6`~r|7h4)%5I?#4F32Ea#%SJka1NP?*hvwczgtS~v9zvrVOsE;`t7|w$?k5;e z>?!>5&f&==*F19D?vdhR~K z16v6#-wBk5!-#_uRSI(GrR;b?4yewKXR2FVV|s6y;p2a#oZJ_&884E#o2rY?CFo~v z@q&9RtZ4D)NC4nWa7K2JrJ~=meErQttJL5i5(z(0tE6AF^x-X}d$h%QgAwatA}iQd zniw{kbK-1|eVzxyM4UQ)gBko)Q9q=NFkbXJT}hz#L3nOS^dnUUP2hKhusS+Zy&enx zWMWzX5U(wK^mivJ0UWD5t2N5iCG?Iom;N;sBl@e47!Gpjw)Ll(lw@}{+w*3ex4&T- ztt%~5n7{B2HRlbmYB0kp3ZWI=j!>>?130q1c}2GoCVX_+>`9Odi%l*IggrlymrG`tWyZ?zkNgH0C~7xGia z#`*ZF21(0L)PQ3aHtgf^?K@j-R^x!3qQ)(-75NlsA zc(Jv7E^R#K9XNiViRYo}tXm_eoH@0Aue6&hMe+N=5g9zfn?~V3KjJk!Di9r`Vv~;g zg)!#D6+SLoYKqk;VRjG8_Q}B<>079_Nx!!JvB(6{%M&iN4IjZ@Op#wJxE0Ow6Ok1 zBtZqB6d+d?9uZgwF2F}^nB7xuws5VB&goCnO3PoHJE3XU=@TdtAHQYLkRT4gtlyv+b=C|#twE26h+Rb0u7Abztm(OkepWiq@K7VY2w z0^ynwFQtX{s!VZjBHFhyarecBd97`u6cS1b^p{bQt?q_w)jM+OEEXOGl;t(1z9Wqm zT(WPOWU00dH?iD7V#Mm%`VPP`OBFUl(#Xs{Z&cYbW&jIrifB64u{QuJM!3#7dG$>F zY1g|90~f-=L@PdX^^=+GO(5U5maXmat{gZo`O6!!cb1D9keh9^?ZFpZVv9;x=d|bU zBO17;YM_7oKB1Y7EcG!YDU5_(qrg@`sO|UNf{~ItV(Y66W-?Ja4vsZ*_r%&2RM+cR zh=1?({p*aOe&PyZVL2)S%sd;!Qoy>usx%`|v=)d2CP>I>#i5U)>j?QgCXwsLpR(~B`T7IYz-$2KP5?|-H z*HDQN!WPA>gtC81bu+dp3?T*F*$nhjHwr2fy+exUC%aU;({`Ol@(4}2A%M({vsm2- zCx)60M#L@~H^&HDb-GD-EL^`_uQpI!+7{Rg{CeeX$fE4EQfS*k&!{M%X`M<-OOq)j!_KkNQaF43w#4igzA6g{QE zbkGa#JY8sy6M~|nU9&ls z@?l@jsy(9OL@n~wdZ(6S|;~Lg;66MRrzUjIRzTPM$Wsv?5dmV8lWXMK;@EGALqW3DW6+@YJ5ulD51f z{rQlVpYF$)#kJsi~Y1zC-f~92(-xW-co^M2O zxBTOcBY!d=cHfw4&`F9nk)x}*v7_1x+v;F zt7S*$*1`Sjqik(tAdBFt1Oa=~&`UokOwKJTl-cMC`& z_igrW@{tXmA=_|+qPi`{q+M-OpP(#=y$(Lhb$7f>4$lpg35r2DeGkMW_0`*7xK^yzi(o&SJR@&}AQr7PL+c^x9NM&bng)v~ixuZUlJo=1^VhCyZT=x7bA zYZmNzg}pDn%vU*2nkxM&Bm&FU>*ZEx54kwspU+H0KwE9zQC>OUWmvEH?=e2xiZ+Wudp%m(h;AJ~5@D|gLK-!gSfPVg@6%x}&1h(;$=pd%6Ee4MJ)L_VA4=l||h_}Qn3$wJl^YGnlnOt$@136?<%&7qVV^js(i<6!a=u=Oe)^xlK zKsnl5p-zy59Q&$XetJ|znx*&GMzU)#A>$^##74%XhpLN9ZGZ2pJ_i&lkwnWgs<{90 z-VHUUPq%=7d62&$@4U`F|L&c^SJM2ale=(HGH$C~Jy)dg3oe1(Ji}M0!{Y$1etwxr zQpzJko+kNa{{yVyZ*8A_T(}ruv-BSng(n-XJ)ZvT=F|Nfu5-D)Md)lR)~i9VPL5D2D18GzZC7eM z_sD|61Hug^mEfgOzE=U(hW2KczGCF_db=QjQbu`KI?0^*Lq7H2C@H{%ua=0hruI4K zjqGnSfZOF8Ciidy3;SI%<{kjTs366|JrVw2S=`8F!<08>r=^SlZ>UnIfrqUwxE!U9 zY^l|5zg5Y7z^ydwRLJ&qnv~IK9Ru9zU|Ku#)E}{Jrvm~NaUA8MNnOY1ysQUs7yQ@! zaw#`1;k3>8_zjggY%VvwRCiV7c`(sQyQl zRhbgV<0Dsk{BP~IyQ!Jqv4LN>L(GrtK@48>r0h?dh?_Lj@8b>3;y3cCo5*>Q%ZckmC4#kLEihWi zlo$1t=c{y6C&B>n9iE!%^@(!RuXx8j?X)g>luPSb+$ih1Bq$@w8)#YOPN`qy>oA&P zQeVvmq4s_P6tnnMY>!HITi-Y~_1@bMq`Pojn)|EfBqk#EeOV0dnk1FQ3BqN!?&v?D z@5+u>k_7`nw}$(zR`?f)r?w4X_a+Cc8(W)#al4^>{c&%gv;Cvl{rr^om>p+l_>XR% z70E_A&YxxyM3O+6NF7j64{~0=u0#b2%iEe{64@ldy*X~#l6J4%f9Wyh0~BN=n(T-h zfKE*I=ML{b>K)=r;!0HVe-tX=`|NYn`1*qh)c0{xDCL>wrWk_caq;=)r}2u09{CJR zYpuhDzL%|fDNWs8=Fxz-G%((wtmpvEhO@9`;m?u&Y<3wRRCz~2<;q}sst>o@S@h0L(|23UsL;hKn1+TQdBu4&Nt-T|1F@5&aXV?UX zSiDAf^zto=Y%tnFgm)lastQq!=&p&oEH#^{<=ahk5M+de$!t-YoHuz04Jl$cO&=p!pL$ zpzsK`7wmpd;_X>tOuOsTTdFl0L}t9h^be)v4TPYyY*H(%I=VlalxFi723QWisgaY1 zw!JcE7tbHD!7T8R%Gstq+Z4t2@N*KujG5d|HUhkg4K%x7==pk4KI`VkCJA{_`XNCMJ$(Afp~(E+l2<(h z^{@UEV)@}9rDgYL9FOTqxZ)tTOprLjeH|)qh!*M+{(x1x$89>+y6viZU*mxFdg#q3 zi?bNWEk@_rR1JG7E4RV}kju;St5<%e+NGo7DjISA^7Xk6E)@3hlUQm>+cn_)5Yk{D znRh6hUg(BL0Qs@7iY5y5gEI8ek9IE%;Kop{?oI@SZhBYuj63?+4`PCpKPl))DcwyF z>*q9+33bGMISFe?lvNu%^w!aArmrv7)s#o1O|a7tWC?B@c0hPNP4L15Lp{irJNH@) zu-x79j9wc(A6dIY3hc=o2FbL;;=v!po;;zRTl#*Rlus4lDj--V^k#q+b`k*Je&GGW z_gq8_&+WQG-aqg#(ECXMc*GBU)pWJ6`edzX?UI?S!W_KjgrI?*?U#ymvllVXf5mp@ z0yb0jo(Q{|b8#7oCP=2^KNG(xi$r3U#xv*=RzR3YAp*Y#zNOV{?uxag@|2aYW3Hcd z#0Oc)b~p6))+t=bfx?Kx+^m@&znCQOo0h!d_cS3B0$Ga(hbeVr~$ z1ik~R2Hf4=8i{#7ceg?6^j4n)bp7S>4X~vyeW7<_TE9g;y8hRmU4=7 zK5BoWFWd~S@lP;RWZbxBVbeFFA@!W8b)J<%t0DI4D^kmA%<%$L?ag_`5Art-OLaxc zi^M=>-~|uKV=8)7`yz9AM-8e-yXsq4tx(_~HS(=Zcz3f=vlX-LiOJYschU`EhEEoC zjn_9bL85)XH!Q^wQDfE-_CJqCpOWKjNSrA~G@EOiIjV#H>DYDzD=M>da$-8WkYJUE zg7AO4E;$dMAE3nV0G@xl_=_DttfOOSxE1W9`?=3$nL3z8yQwX!e6U|&+28@C*x;?Yn7!v<@GV8g`_>v(;8A^w`j3WSg(z( zrm7dOo`t!OB{e{ix47pbN3A%p9Zu*+Z2B7`Vh@Ki)S_dFW4)W!<|bDQvYDSBU9zE8 z+=92=p5j(jLOgxzW}>rjt6BBfX}g!di_670$;0?VBkE)*XH z3JBnM^Z#!#It~cMsPb0CG<}4d$3-0-5whboIqGX#^}F%144~ zx7N6y2P%NSce{rU>Rn&x;$^@X((GVXYRP2|i1^2TEsT4CT-4q}PhBnL5XDOOp3>mh zF!f6T9?26#Hc3769#1`;O3oVVrEEr3j_)W&=;@^ggiU3*l=ZqpTW{^t86FVP*pI!7 z9&6|Bk9ySF!VfFZ{I=#G?+tVWa4Ao!OH0KaSX>M~MFA3@P}E|aSoa8aQ5 zLgqTXK#m(9p__*W6-E4?);jwAsy=fa=@05nvkKIBjZ~}jd69LbL>S(ce^_+xh&8)) zq2#jPs*^X6+D%@KTrO6tnb#MUrZb^zQhy!0v@ino2G%UW>wQ}H-b&aPyGjr%HF+5c z=v1*qA|d$x*c~%6aQdHrh#R3(q|W=EH2a=*tmBC}Cn+O*uvw2KD&ZQTqUeceZx~3S zU+o#k8xn*u-b|0H$^ALJez1_<~nMd^BBN-~Wk0k#YbFHal4RrZ#C-Y_ZRx*r`LBWAPnMBc zQAus2-w;+{a&jY-Rv$%T7*%Ck%36x-PNjmwTCi520RN;_S9&C(0dx6+<)MLalVrw4 z{lZY{Pf&7VY!XX?Wu?L9EDTgAmxiiwRXA^<_=eImVcoQj`i_hN6j)69y~4E6^OT5| zA);=%lhN!@e=@e?djePkH<<*#EuX*^S&FLo(fIoN8)7Ta(f$T9)lK%ELWF4;^0ham z2ELgLC%n5bZ_kDI_ke+xX|%pF*)4`oz?t`Vw7l0n!wH|wCbwG^5;`bNe)4Fd#qUAAaU}G z9xr51ME-l-%77kns@^+Rl@j08L9a{tGhQ;_y@o%kk2-4w%JhBTaSOgeF0Jpj{yxDB zh1+4Nwzy!-hOU9+BZw^;LcRLJD74u$B> z9OUHma_g_`{uD~*3*Ee3WLel#`XI<4#(Q6#P%^ECHo4GQ=|clk2oj@iLYsoxP`&Y| z!bS?46K?sfQFi5Su#Id+lM;{xtg792l41Di4cv%#wxZH)S4fIKCoEc|Zq8Da$V2{$ zE()bH3t20NW3SolT4yK4Mh6GrATLSNOKk+8izE)qyZUL4z0*!HU{;EtLZck;`6gip}#ok8)>`OrV$6x11A)o z-g4ineoVXXyP2kHt?bFFeU5w`7OSK9c zQOw9^w;XK#VE*bnm8bXS4LOvRP}AD%0%pclF`j+Fpgj1*9~_ANqMuD!=1*a=CIx$q z@Ai^bRQnz!d$U>Z@#`rZTQM|&2h5+V9EL8@IuFr$%yUGQnHM4shwjgV9(H3+pyx@d z)f^C=13nWX??8D4i#H7WQn(%XU{z%JVaY4L=NoO}73FmQ6p)x={GuUx@jd1o6MBXT zR~cZpcy;d_a2*c4M=F}?;lb)WmI?n8wx@EG=3q*QobAmYHxm4H8w5Y0`Q^;e zPzTkC6Df+lh2N><)t7lKeuB|`#5a9Cjha8%tG37sE!#T(5cv-DR|^W>-L|b=pDi_QE`jwoJ4eP( z!1MDR!LCjwE!`v1SLJ7NibbAskrBV29Jw$I=r<%D^K(}mK_aBlXN@3{)dlZTVA--)>#4E7qf2OMwMB&+(FXjq za(?Lry)&KqVYU$&m~89*3=w4bHDxYz(D_G>ttN9zpBZ!)YXQMhxDuIw;UF39SxZV? zkr$83{j?>)onRJY8{qw#qTcJ<_G!RFmYK5{ETAL9m2N;JFE3^M<~>ky@OgB5IlP!% z-%uJ(hs0~VQa>16VG{kxLYaU~-lxUJBE)e4@2LMgrNA$6@z_OCxhCW3R^)_^verNo ze4RvT7{;z!H@6e!Ji{sUe%iL(lHh?@QFZht*=#iD>m{)oEwt6v8J4)1=&*d)^nz_qlzo^zzDy!pvSa^6T(URl{lZ zyEkvm@D!-h#nnFrH@;F44{kNhWNjD~f98w9B)oR9M&Yo%>~jct)R62>kHyQQ>tw!- zv&-l&s-=BfB z4sg;*GR7yY!6278`k&4aZLG;2?!ZCZ|7kszJ|J{riJ-K&13E4t4WZR8UJ?){gw?wx zcDdpoz0rTtNtrfd!&G7}V^ukXh2-aDePIE77gZXPutYW|Dbo=O1STgbb)HhCaorJz zX3eoBDcfO9vF+U`f9kkAe+Mt}dPS1efDD&Qh{Y4mJ*(M6X3N)f)n$>4buB?l zT#vHAaJj-7Olx$Cjm3|0uhr2IC%XNU85}9-A@)AIRhRKgQKS%iJ}aFR1XZot^TJ_< zD%ci*JM-Kp{^Y(Ea(B?+8tfFxYzx2`Qo{Kp;qerQ?S^a*ds#5i*-swp%)HoU=%=0X zHH{X42=z2S)=|a|%+t^6!|($xeFeW@KVq(N($EB~w{=oVk2F6{K;uu=9&Q&%DPOMF z+B!R7p&CCSPT@~OJs*hf!AJY8Zx30(VQlZP{13~Nf1`Dt8+e^I`!TlqrBObkLAzrf z|HQ0wQm7SS)j7Oo#!>oHHC&YI+i+;pEz9$zqVx!FSEY7#<6#K5%e`8SrI01tGObOh z$fIY=(=RaVwMFJ7P?|NGAo4LYB_LGVi*kZcgn!MCp+9dz(3wjNJAgE}qv>>QbO<2R zv!`i9+BCxFo#EY%rr8?0cxX55GO^-)J|pXC0)ZuLZoWH-+kz;SxsHZFUkcW8Rv*xw zJrzGZU4fq-(E>iJK>o`ZuD(8F4h@tcW8jD(L!OO> zW9){@>wHl|A)6xSgm@u^EM0n8UhZQb6LDR_Yo4grik662P1u&wi-lwj){1r}#;{PrdAcQ1ZgbRM`^p~Q%wayew)6#-dJXz1GY*mH#6zD@v7iuP?8_A@^$U_YpRdDYDS+_|;7 zpvKnkir*C_oocppwkMy9+H4LO^cOu2)$Cw7j}A4d5?EVmJhE9sYR$JTpn^Liy=0VB z*Pn83rDnq+4kZz_YC(7*Fc|(E z5;^Oy-<{@)F?bT6bv0AG{c^*$Jl{gPW(VHFytpKh0`h9NnY-9N)<+63@UrZ4!b-%-K%QT znV(-f;YJ|B%|9_7d%_e`&Mo~PL4))1`#C-7M@IPC_$iiYYMw~nkh1C{hf$e5Fsc?_8qex; z?-9!>EX{{^pwr|>OcZoRN2l02vpBA&zbDsFvNV>d;^y?H_l0lZOErB_sFd4{W;)~86vGfDnj&Z)+F3T*H(8rPK75$kM~^qbDFHU);L3?EQVAk%A5zPmolPE;Ri3SoVKwm=n$3Sgi_rKv2+E~ zp8`jPK3IOhyetirmcAT04l$XjAaf|J4RMpEk-QZvAc-OjqbBQtHhYQB!Z^OoiRSzT8BSzRT4 z>a}cMjYIzXv&jffbCEeGjP3hF{ra%0f!n?N>xXN zEu`#nRl1>_$C09L(D`GI5*^4TR#27A)08P=Y}oKTnrpr|oc$xrfLi~@>-d}OjAY%# zPac||YSbe`LQpYa^}GU)E}JaWKXoNqLzZgDAy>p@fc!?!Jc7`w&v)d^Dvj4wJVqS3 z(l)fG&}XOrTptL^qX6Zn&P(XKRwZ+QIiWc+K z5FHh*`$M_eXl6mib0y*n_Aktw)ZObmgu0KcFzRJ>NoCXIBrAXU<Hm4($uWLpaE?RK75-4w3O2XktNx|BQ zhyJU;5}3I<@SFOk-m;Y2C$dzv)&f~Q++0^I3Cn)XtG`^eyj)YS-qkWqU^A*6o}0r$ zBj-npuJPrnThejk@25f(0&b|8l^OJNH|3R!$F2t6Xbkg4kG~ zou7jSat{Q2gg2AaGQmpX`kIb0+k-)sBpG`s_|EL1YV z)0@8FiHo)NBR;%1uF>XWEmJ6kX4oeXpX~K_x$z+`q~E@r`zpb+8>akQ{)FcW4y66| zyB$d^IU46gg z^3nWtZM2)y^Z@JAq$5hex=nR$YwsBVSb)z^Yw5s7Y+uTinVhwL=%E?YEVkk%UFt4v*PyCEZ7*9Y^I5{&*cUCdPFlsV+%=`ra%K) zSZ3_~85j2Y-U6pQX)pi*kgfM$If0I4NZ*vfje~7^ZvViON`L?I-tM~i{X?4h1fa!2 z9+TYE%xJ?26aK?K{AZ1y?0SaY^!!a}VD6e-7}5yYJqUbt%Fp9Xy1XqthU>Qzu&eMzW6ovgTfd)E@gz0vS9(8=F_ ztNi|=>u|Jb^GSwI>iVjGCV@XMVOswpo-3c?Y1Z?#Nfo65uEx8J8T-3yLu$D(oz7TOwGDUnhUX-8xRk2Y(yl554Eo|dtcY)Q zDU?7i5}zjkp_q2nk^piKW^sJ{*!t!#O!!B|49Ylg@S#u+J$D*4wY57#S&9`lcC4s- z-_M&TR*qrCVNkhUe=s%FDpw#{9jp}CtW?)QlM_19_i_tkV0{9+PoVnxCXT5N+!N{zN_$w&7Zez^?ICv z&mjWtFW}Ja=`$!A=~F4k&*%i$-7nb@p-fCn?f+8bfxqzHZBbGoh0( z_Q*Jubh=)UQ?AeW@`ZJfZo|tlOLXT14WG))So}+5)q%Q0=jY%k_B%LHG=*MgMKG8p zQ$`M}ZnZ{`hmHHZ!8&2Gn-z{QyJIuIHq`2hV}P{h{iMcll$(rZ@wGN4y1KsWn`K?> zr02lQL zgqM-b&dvxGlPWCxr%=esZW)PXOG%^h1PW*FNRFkO%g;>4IB)I=h;EoPWG_n19qF=n4|zCI%8 z@^niwLkn&>rr?0@;rtXQH(GRtS2#=eryp=1g5uo&BfApAS(oaS# zWDB#O%sXa)1~{Y8-rAF2U}_9Hih{uoXdR*`tZmwVCN5+;2e`U_yY}`jYkKR7CaD$n zewEq~nu&0%?y3yf5M4K=p%Yvr#2u5;H4!Fnm zMWZoFO5yoFfh4z`$ft1ntqm|PG&j|*Ba^mbd3UNjV5!8b1oqCAPCl}#Vp1!DRPo!W zeZDNHcnbd;I5p$mtjL~DCxkh8XxbPkUGsXctrHaoEEM~g03%AC-Lwc?+4E-Hp)2Zp zgrX326gx+j>ZsUzFyLav3yo@pid8gDKcT(B0k9P6-Lcwqk-)$pib%QZGExC<4bO|! zm6lV?E$N0)1aUY_ML@pj&O+KiP{5gfUlqFdnLIy05Q_FUleTCJNM>`M$l!nQY41-6 zvt0}F$Y-<**`f2IrE2Gk+$LIKnYo)d6@>}?jS>X0d)|M6c_Xd7aW1l(^3(h_b|!>~ zHqmNv4Bdd%Je4&GnrPq_GwD(plmn8u=@B^|NvTk@@$n*!?<_1$l)9p&BuX$#F929$ zkogPT4HrIld(ruEE45`I{Wa6gVjFCAXnXmh-L~@QB|lcB;>{sWEG5(Gf-~n-FWsDT z+oaSwrkKI$>DJn-0K^wrmewE=N2g_AFtWCWd@Weu>}z2WH)`Cy>`_XPINCDqsscNo z>Cl!qX4YgbRGsditd;IsCoF>JF2m{GH)&eUmmXVOg!pTi?de04!EUwgTAcjYm3PXE zIjaJIsH(G4b>+FrM87y6k`SAMKb%f}>OHrKYzkwv-jVBwwH07gmJ~Bg^t}uQ<~Z-? zu^#5~Iqx1_tfT*ZnVF|Y6RZ-*(%UXQLN3kE&r8&;*Sq9;qEgEvj^NyK+xrxruQKOL z$1PS#J2FU_gf*AYZ^en68jak5Zr>xVaD<}*Q&4(El6!EeL8q0*X~tddFW>qMAA}la z*PGUUt(KYPg+?6A>k3~s)4@K!qbC)AdfQUTc;grAc9-u1?;jB?y??8;;!@ij9jsP~ zh+_)Nlo2>fXwm7>ThMp}t&jo|(9C&c63i;I~|-ucfoz z!Iw3YB#KQ%1j7K}1za}+f)$uF)PmPmko=i+viT^m4;Xl)=}FcSzj96t)&#+p~)xopjf?`-8ijT+VY2l(;bR zL%O7+fD^?2fhB8_OaPM*A@yUWaN`&Jl3P+ku&eP;eskzwh{+PEByjf7IBNxrM#rLClU*R55eI2z;t@fmvEDy1M+asQd}{YlDTCOEktqfuA#_sp>4Os#EuNld$9gPaYv{8boc)zBgpgfxzT$P}u6_-14eQ)(# zJGKQatf4~u`2>xs&@u2PeNfUZMa#3|iJHo#E1l0*-qW-gio;j>Fph2r@h=`=J8SET zUQ*I)p4{K}xnX5VUn4Ql0NB3!c_cE7Qu6X;y}g9%*LS%E zDWdZ_-?o+~z|)gS@V8HgMX2V=%y$v0=hD+gQRRXrzRN;kpfjWqW|_2o_Q2Ntu@GDV z=Vcyx_NSjyzmMf~Wz38{*+uZkTk{sGZN48e0BI+CiGGc`xE`Xc*@y+<^9QcNV;TXu z%xI{1`8%;jsC~?m;=MQlb{g;toG$B%N5^#+OugtTmBzGEN^qIL-m-})+TVY<##Glx zx`}>I{ry?3LJK%K9R&K!fj2l zH`_jJ4|(r?0F79}??s@M;7?c#yO;A(0C`Y*(jhbZbp)JB$Ni$JPaTMsJKAnU~ zoN}xJg8Uc4zh^C<*#dkxVS>C9kfiL%TD4Mj?N#9plnIHFr=S;qziFU44!cZqe7XVQ zhD8|Tz>sm&%@*rIIdQakpk#9++cPQrMb<7#03b;Vp1_Yf-{*%6Z#dNta zp=v`>%eVLnFAb~YwfXKr*XZ?p8X)<8m1tNq?R7=Ij1qVc=}muoLpN9u7HoAt47zj; zOg+G$44;pm6nH-NZY~EMex1cpEO1ZZOwL zgGtYQaUnG>VpoVMPVB4hW!7X@Evxx`fS_l6o`G+*Z*YO4ic|B3MTkub@ZRWV_u0e! zor6n)tjkZq3Jy|?fxf~#JavcCV0*bSYuH&x)6B1252Kl07R5mSj~bj7v-+uqHA9kS z(Y*<-_dlR40(k8VvNm!ki6; zS`VyqXFn|IYyl)X<<|0Q>4~)yOKaA)9I%pjBSgS5Fya|-QK5HXjG zL#|C!*3L=JX+v%l!g;5m`H;Srf2o)g=4ibO|LEF4bU8gY&|);Oe9wsuQZz@`O!IGu z|K*0Zq`&RQi!hR&Rub4}bI?0HJh_=7Z^dDXjTFi)$Z*B4 z>ESsa{%Qn+MyCDl+&i~WARU-k#>{FRuQUvRDweAeBQ!HUNW=AUQgD#&8Mw971E&D3 zyB?Q?pXg1E;+2e+>D_AH-4U>^$dDV~s5kVcaXz1xWTdoIFOQde``53bsAGZ5Ht0IehNJNXO!lUfO zU!AEe5r?Z%tkSa-<$s!}fe%EUr?Ng-X>WhThw0zFZ2j!m%fJCHzfCHo0bceB-mBd{ zZeH=Cq;~dCBMZT|)4Wm;SP=_ z{RSu&aN{knMrx$VJ~v-Q_Bii&mpp%Ri*}c2l<4Qql!6;MLLXYdHH-n;@^4fG_2&23H<` z{Lgx>lJyU{H>CbZf*dkuho^->%4cJ{esAXT20az1MWg<{E=x^nKbSPc%%oMJkATCae zo+^feB^l?87pUS^c?Z(ukZjt7(JJN%N8UFNV>a;6-;dAti#gQQt%NJy*g~hWI?(lQ zNZmT+P#2-aN2}&KP(qg^^km}b#F)+uu>Rot`haALg}6#MX?ORErBEg&dE~|~t3bZt zfbXp>4$FXyu-FhcIXS<=%ORR9fQV?u+zluhgWYgIpa}6wbXckmb_Yz8$t}glJ^pw_ z+SW)u9Lz*wW*DZ183;q9SMgOeVh3szrPXDBo*~P^yi;ZsgOFxveFw}QbCLvN-LL1C zPm{)rR4G^=h^)J*(&zoTqJF5|`{&U3p?#xkO`~4@@Ss9VbG=D&)l;sU+ z{X6T$tdgIc%P#n^j^E{|vw*~5^9|=ZM>ea7A_|KH>qE4>I_Mk8xj}rX1lK)X^j-Wn z6ww7wxMarOA1MMnqg3k21X_>B8}5y}gtYyQf{hkS&)(L~8=CSBQ|$duyKXb*=EJ~g zAxy?*N_M;;q0%ah2i+oooenaJT91l)EAxgOoCi`$Q@iStWQU zxF@D+B$#?XysVu0_2>`iLgapu3Qi(+#SrF8<8@d;4JdQnxmSF}s`y*la#Fa%OQ};v z;RK(?9JvDXv-!r~_g?Smst14bv?p)#q85V*8Hcu({Yqv$hH7M zgyOKt?PyCAN5;*}p;g7q@}+V!73vAAaw!ySNOY-4U&;5PT>6cGppyjsBgnIsw)X!R zt@fl`h(lW}r(*I?#so4Uoj@7&kFdNY2>;wM((I%SN!`lj{91%c|wnTLM>|c6}oa@Sf5)SbO1C>`zgol?x7=vB1b#wMN z_R~x%+nWFOKn!}fbPG!J>|nX*zYfcpPRQa&9-Y_?f|csVz+`KtK-3CK zs?`TJ|D?N<6Swd-uN>?GM9Ie#1I@DreJ^DO*Y)_OZf3oVLIz*k!Qbr$y3CWNDUg%2 zjU`PPhhALr;zeozR}+wrHXF) z?1IW*++bN;Xcq%#LoJ8tN};BWs_CimxainZ@Q&rn|uhD9&H>K?g=g70Z($c$3BAZ zo_xqB859smXq{~WBq(GS>R#?#rC!jQWs7X32B?E8X7M$dxXc)Ar0AE1&=Fl4aT> zqt&q(1r0@%Qa{Cy-#c;uDmM)e)Au*u;^otwqsam(1Jq=th}p5>Pkk0vg~xs*&s3UtR=Vhh-8P#|54W{yo?Pb*0v; z!qyEG>tkZ~?Mt({){*c`Ra^d3Ri-DQiE5i^s*1EXM8ic*{vDmS_3P*}Emj2tpu19< zT7T*NFz!*K4?a$7x#O5PZY2hiD=D`3F8#uxK@uM`gAYhjQ7yE&5+8r~ z4|5lxwq1L6rW#Z{OG!J%&NRGh*A`&DXdO`Tocvs}?zP~QLRq5B1j21=cRX;f2UZtg zpc?}YFxbK(EEBFoK501jF1AC1R6*^F+Fj7%i%P@) zme6tzoj`R>QTY3S>BD7*^1G#Gt0CLh<&c`c=ZWETOw9d1Xj#??V8%U0R62-4ixCsn z^S;G=PH1}fbaVF_6}SO`JTytHALdBT=0X;L69_ky-@JR*F|sb9iDDZYiJ{p1 zgyo_gPjk>=USUq>4xwq|2*GiPEZYV=>Q;32(7vLYJG4xm(YkB5d;)-TL~T8}8`5u4f13 z4rpjw_`(YO5ry0llC_Q>IFBv>xfo8+$M5IM+48%Y>_COr&Ogk$!JWzvFn5yT_IC6( zcO8AYn7v+uGY_IpJr)uB z=4&@a_%~9EAVNBW$W*J_@_<%>3YRHQ%ADwmt1=k8+O6qkE`0dcPx;C0Jb<%gyv%NdGQI=Prt-ayReEua5YQ6DuqATk+ z$!?@qOJ^KGR% z6f-r9hMPf-_Q(^UrC9GqQ)+yFo*7I;Ma9LUq5*bHm;=hE_W|3s!jL{WH`3BfKudZa{6t$Y8FyRC<62a^ zA*IdPto7%lwe|Xfe;fA(nwD3&@VG(+r+Hk&#(sRutmPSrs@N@Ye5dsXtBb5tQcX{w z1##BPkb6zDw&IunUwa=9Fuf5@?2z=1$>q@qtjUYE*Mp~(b;un6@mG{z~SW0E_q1^i+> zWKO)&E*dvBFGE zteX8i{D*qM3n~UHN?NecreKKssr~(6I`R=I#6B3x%HzAG!?kg;Dr91d@~XXJ>KUUJ zE7A)qBN;m@WYqyHOOZ|>?nqfR<&U%dlaJdINDqR26HQ1&dOG6AxIr6*zg*k@xL2oiid*)me01zDN);=wcB=C{2);3d5tS-v4xiJGc2RmJ%2 z%2S~f+s&^yIV-DQ7nNmwpMNCL-k%7`%0jZ~`6u7Yj5X`xp2+00cV%P^{CgBXn$tCI z(v*TdGfPp# zp{Ik&%}UgS&pzpI>2G<@*WJYmH~T_p3y#dH+hXLup~|NQJ_xa51H68x2GBuCA{q$$ zDO!04%Z0>-RmxdTmn59+xp2$P zDL-(<@CYn;ddYXAZHme(XEcYC_YJ{%O>F6yLM|m6sSePPG;$_}a43Xq2-@en7OZbZ z$$6SOA88tco+gkjazRU9!?26cUmV`!*>Ye;xt+U9)q-i);NP~%W32PM(>X^~L`~4q zR2iVsEvbF3@vfQpro&0k^ubFn6ZDC#XpynGn#{F#C$cz>JThi3A(ST{DyhsAe)5%% zE@DR1hjNAZr*W@EB$G$aAC$TgkWQD=?hs!atxs$g6uXf^b3kp&U1LdI+-TU82O6iS zL+WFJ<)-DR@@0zax!;tdI&Lj{Kfu^xbmH@(o>uXAuCEG8M28Y~;4;ZvJ6)D`OdxSg|47qK!- zOuopeEQ#GT#Hn+iR!iZ6zrx-6zk~NU5N@gaE|#$mmTX>#@CCdisoMjsCV!|8w}$vh528pbRFqA1Tgz$ zHs8jdlIY*`;6cQuf|4!l1TV5Ee*dQ#UE?{+cms;8xRltK%gan*5BkxDZ` zT}Z!BnQhYcbUMrsWKJuWR)dV93UlE}onNe5O(bCUh}UdOJmN~`-4|f6LrghGle0|H zY!HUyv`qlWb6-P0yXS*{2(c)4vc(jmNK{YxIg8fZGU3QRHQvUq8b(S%5!sx?bKtd8aw536trAb*7PjBjZAY2%)kt%nZSwNWhte1tmK+l?L&W zsxfNy=in@p=U$ezM0IrqCtX8-P)3xj`te5_*0}HJ_0sD#@kG@C+!vi}ndq~oWDu}> zRGTQ|0{)2~2TxzeOmEq_gcI})aM_QTF~J4_-0pl0KR+Kf&)C3@!_|WvPw$tcj$U6K z{X@pC1u}m9V$3U+eY@?SMK70r*|F_Bt-acK3QoA=O7(cQ6jagn5&+L&Ew#_=?cBjQ z=7wz13mz_W0EEr&s`9cjOCUoYM*=#_z1|v$Prof+k)h@joaz+GOM3%gg6^U<)!$dD z16S2H@NtkOhn9OEX&;}r`0Yyq{>>Z6@e8q~eXmBWUBFOx`C4V-3XuFN6MvlAB)-TY z-rd#0IPrDMQl5$-W|lpd$6Q-0BXNoT(Tb1Uq3#nr@v95_hvVR$zx0dLW*3VZ7N{N} zyuQtOPShyfvB56UZFyOw<$c$8qrEd=XR>&V5`io>MK$Sj^?(nBv$D`6y5DtTb=65< z&uieR1o^w`@&Aqi$ui@m8S_1Gzh}#V#{W$#>^H;!-K0r>p_MN~BJBq_5i;?tf~Vo5 zrp+D7iglMX-A61-;Z2rwK158+<4G2TDKz2HbYzR3JRC07pJS-36k2j^tW4|9sr22- zZtQIm+8iLi!g+)4I^L&;QMon>tI3yEm%vh{n$|&iu25$Oe7w{Bn1x(~+qI^>EqA&2 zfYoz1P#SS7XFvFFK;6nJjhr~D^uAL(sNvp6$m=rM0_kG{HbVSe2IUhx%tzh(@f-&A zkso6+=JA=+JExO{N}p$mznFWs$McyAbRS}Z7T;g4nA@pS4f}Y_kAKpHv$Je+stc2w zxj+sVkv7GJ?ETq1uImBNM`vdz`bV%r{(naBdO9`GS4T2=#f%tiR+s=ap5~six`z3n zHfLt6Ap3qt^(j7KpR<{K7z78u+i2=GLHvCq5zb3-+;1cVAz_#TUjPK+Yo~k3=z%yM zb(j5-A}_NqH_Q5c$re8n;fbH4aj1kPCsh15COywqg5_B{m@jKKOikwMIMPul$&i4? z2PCjpWKY37Z)*NjLI-?($yGjVG3>cEI`Xc7zt-Tcip}?*84g`FG9ssG@lIh+okbkq z;|m8NiQa30JUA92$3l+Y+E;IFZ)bRlSJZU@w2Jj(@LUuLkO*Xj$mQXWKidKuhkKX4 ziAwd_q^u9NN=6cE9;A$(@rSHSib?Jv_T){sGGj5BrbZl_mVrKTP3?vF4$dA4%cRCA znT6hg@Zk_Y?t_g0Q#F)&e_!t_&mE=a`|{>sKKLe_Z3JrOL>TYd@BfQe7nigF4J^Ry zY-cB7gsq`NznOeTp@c2W;7U;tr+JGY^q_Td!VgrLNi*1d_h)9MmIlxQZk8#{_q%Oe zf!`HAeGmL(QL@E3&Ik(nS_V=nHK3pR6l^nS{lw_(NZn%qI1(f*c8q@*h69I|%IU=5 zUPKErhES!StfExF6H0@^2#L*l=wezDTA)G$k=EQ-dM5WaT_b|ih-HEtnjfM?7%@Lt z^~9~#zKwha5~1qjARf$1I#FRTFl4h4#!LX2zrsqZ|6wa7kf0}4cH7R{*25%F3WKl{ zgLE@(-kk{v9K~mp)-h;5HrEX(M#RRUhu~y|a>KkT=Gc+tjBbG1+geF9@FPqMX&CGn z>=d>;i@|>=hX@f7^Mln0vOB28C9>dI zrLCZ{7IizcZ>9rqR*d0QyAM};4QED$40_QR|E!CUOJPMvz&}bDzER5wfU77p{t1st z!e)(8Oni*xv^@!PX)p{aif}g58`MOF208j|Ik_ywiuf4Vg5>tt%(ki9KL{agSB}$# z+Woqn$%6V{$U^SFS)=@Ku$2>S2Y|Z;088b@Fym2+630VG14&!xm{^BbCzZh7?=s0Z z2@2uL5q{I}AugjjuEBEFv~pOZ)+yN&XTKObtPD4VqXJq0TllYJY>1A58|cTXh8Us^ zN%YW1*~{<0TR|VV{9Hhzb_;Kru=)B^SNQQ78^N(-Aj7gwb{v!WtCyEDZwGa=$Jh8Df_9hZ+q?>2{G2smMa-i??0q^#zwBuPQg zLJM#KNn)gyGYG*#hZ-}`N@LJ8L+923eZ-_C*#eX#YB1BvNz~MP=uYJ8q4tTqa1To= zJ2u1H4wS1BCrQ4g=IXy069G2_@LUJD$BwJ)6J&H#+<9qy-4NEw%iQrea{ch|Ck>Ehf`((i-hy>T;IIO2xJG@IG2xU+<#aTyyqai)H z`1E<10FYG~;Ys`nOl5fqSQzlh9(l7mAko|#&kf=O41V-&zN0=>pHi&X=H*8-SiB;C z49`A35rf9SF_RH5L1`775Ao_zJ>(SP$xpf>-PI)vY_myl9tKXB!SZlAROvPMicyoX z7xh3yL(exHwkC68CeNm&9M%p6r;oa)FvD2{-|^hc7Wl<2B6fztSSv*g1Ff6oi)-uu z`dst$Wb;Z7MQ3E0K4tT~{N`)+%X7W$AQrv}T6gTY(Eb{VpsMZhi`fY9u%eWl4U|)l z3Q2|C(6?P_=_SrM>zf|w*L7HL-%r=2djt;&A<-g|sguJeOJ$pRcm6VMYIWT*a-ZIq zs;N0Ar8u{bS^h+YgGuoj;6J?uzx~{P_)@Q+P7A&FB|>%iZ6okC1xn}r`k+9&oh7mJ zNz)<(fTtim`+>P-VyHy9A-nGye%tmUZ5#K;)cH>_Pa&A2<<{{1S6fhk>XfJ?UKw+3 zEDqJ~y6UPbN>#S*knJVrcz1QGfk@NR*)+{p@fZSY&b}|?KBKHHptk?Cem4l9$@DST z7K2S(3NPKDH77>{*r?NGsxDt)qJ3?}eGewwzvWq9Y7~=c2(fbdX$TcksN@8cxq|2# z%m7$Xp5T1ICEM62!yiEaXPQp60J^l?FAtOZss>j&$rd(5MX^xXnWubrszL*g-?1BY z8(y2JHE+ZSNwk}T_~ua$Y^atCV7m&;CfeXHR|A>A=&B zYa5v`Q9(F_iWVEtE@Y++O*LQyjLItf zkVH3hcE-@i4V(goygybtQCq_>_-VfYkRq&x=J%v=PT*3n2rNb_vqB>@dB1(Mz$|S3 zskfN&NRzM`^6;9VY@7Z{UDL+sWLP?}Q!z!EW<{G$fo-1T>me0Jnr^A05&czVe`Y&a zgG9_;Dc1w}Jl`r${H7$nGrsJZO<>N zeLL^U$8`6<4@JC>lh=hIzb1EPFUPIC-kW$01{ul$DX6=sE?ZDDgpg$q_e+nqF5}AO zX(e)z#;fDRUTcUEP>T^IlCuQ^TF(LMkITAt*Oyb~jiz6n|M7cOCIOaq;nR9D;DW%v zaMyYRnru2v5KqV!Y!EfoeihWAJjO$Q^(G|Un)r@{U=s}o8z6XX4TZx~$E99F=>KuO zc+eB>l9lp_yyP;yE1(*UB^01wt8Gw|Wa7j^s;oYFR0|){9epUDg^u?bnOYSjF))R1 z6PC8C{<}~DP(kk;y|+_la9hccNe)w7Y!8-$4wI{@f|xNF=0fgH@ierxsEg1oXbSVptxJ%H#0lb+Wqvr#9oREGEBkmhP1SL8QIxk}ktRK5YCPpR4 ziym77O+U!-pOlXhZsyqSJ0sA}leXfN3FNT~k3D2o~l3WmuGjdbYRdU&XX$gueZxjID7 z3yzdANl|vB zFZmm7A>pZIi$bYsX+m(TZxoQuWPES2Tp!ynn{PZKI`zw@1HNPM8#OHBs!YMBeqT-fRN`fSe{QZEhPz?6X_RRq5lV~vtZlhEX4P%WQ=Gqe~Dm{f+5Xx#t4Jsq)NGN4DD=oF3UEjIY}y0lAuwamhp>+Wj19qUX;d379O<}w;=tO-9sJDCt69v9 zk|{^_t8z+Q(dz^_GLRG;3`J?iVcWnW{o4_qBJIs*B+48awS>6k^W>Wryf3`E$1Z9T zWfJ=HToV+dayqR-)$bIv1*VZbl5hdIoV%GtTm~FDB9LSLVJ3|Zv6Av#|j3#o8 zT#-1~AjzDtbAyGOhsXJBh3!^AUu!+s70o(D5@NT|sOBvU?+Wt^o1)=LtIR4!LKUEZ z`V9++g#4x4dpiD=e5o-kgI!vaPno3NRna4NJ?xd_a=X1x`HsY-_QWu*z#PyxNr)#Z zE*W9;^`NkX9*goj6wRmDhVnL!exEn=?u1S7$r94jcx_$4tmANKuqD6Kb|}q1`@q+d z^^18(_gmy`*4CR1M}F>RkM}j`Rf(i~KOhGIEj}^_A#h>m_iMGF4YZWZ15Op*R5|cf z{cOz}QzL!(n)!4;$1>sI<33V)4qFBOKc>F&FUqwGcNn@$VUUzYx;rIAX{5Wm1nKTh z=?>}cZUO0T7`kETjx&4jbI$MmGJnByuUYHLg-@4;6eI@(GSd??yTnZuXNzw&iNyGx ze8;D+$-50YAr*(D8L^qg+(AfxyV?(>Oy_SdCSJzg`LYZJwQyF*fG;Y!U;EWgYFa_> z-dvU?ZP{T}%Lp&?vo6DrmK98VXP&Aa9<~DB1YpDIMaplyKE2+2UU=>u#TPu0W|n82 zW8}|D7q;>HmnKxzazO@k_F;~?ycbxPJZ>98cfV!lGdc=*$WUF=C0z0Zd%oJTV-y)8 z(c?{naAk_W9PRS$TaF!)dtE&Mf9-jc;T=3iGpnplE!C;+-{eIMq|zg(P~>b^FhUah zYIXo&hz$A^6wAi0pM_Y{Fmm;EM>W5q|7vo%&x$E7U7Xx=>SeP85~7| zhCn;Qmf{gM8!3eSQC69SJ;RX`AmnhuBbkrwu2E!r(>OnXjN{9}kk2sUs(qjG5|L^o zxzEwQ{^U+NZuUA(IH4jlFF@hhxE3;8twDYue zUoM(-d9YKPE08!*xs^F$qYU7WkD2aNz2Dom34`gzBl$TS?Aj+gXxqFQ9G4U@^3g5j z){#oao)LkD&V8ip;j&WD*2W8>Z}Ibv=lFD7@T3rhnp~+k_IU*SqTZn^?|BPRuYnI8 z;>`0C5qDhxzuv1+O}c}%URN4dp#JTS+8)q^1fBjcjxcmmeD^anGTIx|FKdy4%zQ+%o3rKsn#N{SapC#0oCI=tvO^pS59Iz||2BMsKD^;cVy zy9lbK$&$lM4^2@0pUgqYO<`d@}A{OOL*ciA;t5 ztXhNOzxp=W^2*B7?`=xxPy;eSAwGaCtgeKJ!{I=^*At`aMX)w4^{S|7EAchaY}N z-hI7HNus2eTs$@KSUn}B^|tKYeU|)~6s_P9T~$s?82D3oNhhb8FV7>ab;o?jw>doJ zvZLBJKbL2*HsOD~ERD;p$1vyk=_MKkZ`w%eegqp|_l^CxFUR2rEtdHz90!#5;rH`# zYxofJi#4XhH3SxJ=c)|KZhs<(7$&t;LMh0o(?$mS8@}sRjlT|U!?l6$&=3O9`Z!i= z=&#DCM^-qBmoXNZ4e96+S`3#GdF$0C8UiQk^4}9qoLH^dLN6DLkn>-&C$?Gp2TmZU z(rr9!B$-bs{UAUQj8k?#9x>l18q$=0N|?V;KV6?NfCF~eTnalQu&Fd%Hmkq|BmzrZzXqT zM33$9x2mkiu`a1Gx6x4hP?5*RuKQO;{#g&ZiiYQYyH_u_K|LA23zdmCVW*?f8bR*0 z`z4yF2_koQx4i?2Fd3$%a~(xBGZS`LT|lV5$sN<`u`cEb(~a}iY{?8^zzpGF3@I-Q zfi+17c@ScN;v;YXzy(uo;#9XgHNJ+A$+YN_3t@zO2tBk$x*&j$ie$wIzFDivhT@-| zeP!{1OM@kU9wXfrz|YBe=4(CfU}3wT;kN#U9Lt6HIx~GQcE?_hos6yj?UapYKL7%l zx_E2FU~}y^A8chMSx_$e3E((S?GO^DRuB? zY)1lU^fH$(fyjH!a9Q+whC(#kP{3BJgy#V9qO`tWM+gtR@=(CLi=4%QvF{Qha>PNf zvLH5n(W#0>H(vo-WZr&Nbaen;U^SWn&jptGkOdxloh+w5h5tfHUp*(sOkTMd3pKLx zThy(dN=Y&mISUtH9+39Fk~U5qm5$gtO`n6v-#WNHd(LJC|7V79EV5!0gO2ciy63$K`eVnZcKmJ}&&?y743fbf0zx5{zvRIAJvY46y-#X{wOA+f z1Dbq3>jOOH!G0QEuOj@u83@L*zfW9~A+R%|u3zC%)LSqqKhBRE1Dz^PGmI10O2%R- zmk{C{j^^GR^CfQGz;Bw5Vq2rjkC>l!?MLm+kMV&oSJ_^7jRc+FY-R9Nd0Cfcx?WVY zqY?fd9Q0i8*kpq}F7Fv99Jlkqh(3Gdi$EcxUlIp}U%qyeOB^P_3=d@dUh~ks7q)w3Z`<(y!za%--I1M-_ zpTCTr&7=K&RU*OLyka4dZqq$i)~YYK*JPxc%-`lE8(fFXK;Nyg1Zx2&I33!My3jVx zf1724)MWI;g1A?v{`=6y=6II>ieHu>gE8$O$cPff6%!A)+vCspc-2J4eDhy(CPRLF z*+7n-%XVb-cuJ@Mo^}LBI=+vyvx>k%rD9}x`NOm>X*BH)Fqul#(ls-A%T(&(*la zJvA751T^vwZ;dnGp%%*#fsf~&JlrnnkF;}7lA;9Wq7iyvAJAqK8&gn^t~9y}pMtMal9RJT-Uyn*sRfQ1jX*A`KHf zSGMh!`Mv@wF-ew?2XC+~f|Y_9Nqv*s;yQ3v z*8Hx5Y^P_~mC#(zl^jBuIH(yPvi;;EX63O z*_LvNB7p}v6;a4RC5>7i63~)x-xUTn=OAzmkjt_I-WhLr+mZ*uee!iAF-bMr9tC{+ z)#Ic@$rZp!H(ei)15u#`jmuLcl$#WkNR)_v79hf?sjvUuB!(-q$Q6doywx+G2Z}K? zRzm)Uqwaj8p8(|Y)2zI!3$-H}B>99A_m#PG7cR7%T`Z~2;QLbh%yzEBYV7P&4S}8b ztawJC#6u^lR*Au6^)Fa@5qn=H#PhbzLw2$JZ}6S@1A;+|Yh;>PIDL0&vciWPYls_q z2GxBYKCtb$jo)zyGKKNp9$oZ`!RG;0c8cddKXhIyd=wx7P3?OgX158U8#X=<9qbR) z@~?Z~kBRYsSWe5&-%|>Nn4dSUPchd8obACSpQTRDcj88_{vMY3Zf?WF)Ba3p)-N%&Je$7B(_K656xg@9v(2pOoTX}E_?oIJVzy1FDI@uIjYnlDfAt~uZ)IeQK>=$w!L zCVmoXtaa-7Ir5Dkam`yVgq9XjAPhzHdd=?st?>AzU5$zwpjQ&@74r`Am`-XT`maOl zAAdh5>;|(FjM*H`df09TdMLL}4lBK127H&94*v4xdP$=bJt~oIEC`=c+2%B3#({mX z$DADVx|(_5`g9kS+z1_ztzAi=IjrR@=w=cH&+^ z&i1~()sYXGELRw&ukWz`o;YA1Rr%ZnF&^B@mlyf0yyaiiW+%yRrRm8}$GT(-0e+c=lkUo9t~wD|)&hH2y4~cBy$-Jnd~^Oa z*^e)gYbXJ8@TALaW8yuH>dnvU=+-G7X!TlX<6`?S4gviEw5@%f!tX_!5GYU^WwyZ_ zXdagQo$}`!-YA|-WZo$_C_sP|$fS*7 zuqikf`d@+2oD$R6ywA*a;(3`?jmt>gLI-|xu=*&}3ZWPS%Vc>ia_zoAeIxw@IBTRz zneG-C0*s~J;GUnW2{70Sp<+}!`&=|+rP5)OK*oRcP=Qk%<-&+#R!~KARU6uPD{Xil z7r&MNg5{5V%~yLKaotD*v^o7dC?~0PnM!}6&6v-So;BBVQmSbSA1jJH%YR=?XR36c za$0sC_a1+A-*{nzXJ~zbSMi6Mtbl>&H!dv0YJc`hJ=`ilVm8d`?=8>4Z=32-%8Zg? z?#Q_wqd4GL5IYAo0YSn6XA~%7|E>GD^Z~D)dh+d}`;H+2TDlA+VLDzKw8kp_Sunpz z3bxLt|AN^v^lEo=KOLIV%Kou6l+I6P>VbEnrg zh1I&LtV?r z)lPH00a9mm?1AZ0J4X>*$Er^(aLf-r?|2Nvf7NqeIEFob>c{W=6qSYz3964**S-o) zy7&*Qf_@|)0Qa8VJDD(@E|Qq-Ywn{1E!K6F;Xz=26EplOJKS>)A3O`&^o_dd#CcXe zbVk}Rky(oSpMM}&X(r+OAmebda2A`X$~S&gfbDB%=G7%fcrkBQt4Yhchc8iiDqGE5 zV@(Q3T0DX{WV>pVC=Yrg;M4uE+WZhbzmi%$))v6VUd!;AH*FO7I`C?_$DxK)<{TpD zWNH20YA~9(`F<*&onquRRt<+ zPt*_R+KwHY*{gbP8@&iPs9o21KWi%!S=@t)!64l@p&W$hJ5gDi%MeXdhX z6`9IB3k zO8)I-S`PGB+D$bBL~8LRWi==^sNVZMa(`&K{HDn#Kcf=mHr2;ZL}`)PzyA)iYWd;` z7a@ZM@l7#6CGDRi7rpz6o}{XhOXM^>cjXN4D~+ygjgFzO*jTQ0vtE0B1Lx=JPyhMV z4%b*|^sfngAacPBtHXG%{b#h0&mbd~!*?LXuqpHJ@-nWpGHLohe{%XRQo?LNfojWu z%)%*E`HvZ(O5zTTE zn1w|jxO*q4{M--9SfHG_u8&*h6?`5iyHprTLlN!plw1O8knTf zB3aqR_Wya*2k2F=k}tueo;GDKFXZ#=ou@J8&SJ(RKQo~*k)38*lTW|wo?ywzK}xYa zKmPQ~Tt>}7Z+WLbCEHDUKll3ms+b3g&OWmpnQHf%!(fW08n4wd^f{=y1W}6I0k2h= z34HEcUe&HW%GLt7!D&7_u%rU^2LtkLY{Krme?L+pVXuhbH+EeGH+bDWFVsL@DVR@R z?CrpRirhQ0CTas2iqDx`)-e<5KJL}82NwzMzfsa{c$%Xt$)gqj;q*(N1TW-(Un9}+Ja3`wcJbjRg3oHp{iK? z1RI9vsxf*hBBdi-#imjjKv}n4hjh(Fupz-TIp(Dev!UO~;kCw#D2ALM{Ta4hKU;Z@ zj~~8a0K@{C*HpJMvbu9pqLN_>d@Hg*`TOk`lPQDM5CwImVJ=>qKX-mYhU1Wz`aVi^ z7B72mjnSZp_3=dHpb=DN;?$-iGai|9q?kkn)t^8$)(%_!VUH=r^{a_YJT>pM%0I7g z1RmdUt?Z?5vrphm05_Iis=v&vjcVxbV0lZidH)ophAfS49T{09wdh6oJVlnS;{&ES z1XBtROE_dh;$Uu9U{1PT*OFd3%8sGf@SxeuEe;?9^`5JZPMdXeh9>$a266LgJg$_T zN5ApaEY;A&Dk%9GL9t=&$%j{!m9y3V_pmcz0cz0=E{%oa6gKb%;x#sS4K`PX zrb{p^02TMyZiZf#ep(R(8BrQ*L%B+K{Iy8M{qbPP-np)LCRNZEviHc*)8bg0vEZ)+ z3Z`E;VR?d#d}YG|+0?1j3qIn{;0nAGgF)+gU;PJ;gBSMLv70wENs;DwgR1^5v9#Jc z$FQ4H!7dj{!1}+yZ4rcxb$_Z>0MSO8RkHYL65Y>3z^_KhlU1PpUeLQ23$ELQGID0IdE2sO@_b3j@5wgGx&~X z;PEY`o4f{@&Cn@waM9hV4R4KggHx)i%$~3NFbcV~Lxll%TQsJV#`bv!Q9o&Zvt!Vh z4QA0lm8A#k_hC+YC9p-5W{fNdwg?R}NZa3yt1n`ok6Zu}`6~wZC4ouC4A~kuv`1Mz zyDlHQND0)$<>*qp(&iN<#CXd6j_Kzc*gZ_9qFzOo{h32b1Fi4%7u?Zrp_oWIL%izD zzZdWmnIUY0=SS~8$Qq^l6FTw8%5G=CfiR8)LCE@O;wK-LFlwC+*$eBQ%(>eRn(CbP zJ(jMCE~cd$*B<>Z(S`5bm8b>YLf$^9yEpwzPNu0$U1)m#+cXi-#i)Ny2Y%&8^Zi9h zMgF=k{IvNIAaEtoWx*xC+W9o;C;zfh(#P$kBgAv9e@UW>qF#HRk#|isiCdKn`7tY1!$Can<}fN@!5X6sXosu zr7{EfTIs&Q{?9}j#{^^(Ze$&|YzcSO)fl>_^Y)l&-ASa@ub5PEvD-E|>ex1tg@7_j zw4C&nkl*=KX%^y}bd6Wy?#)X#jqOx;3zN?4?#r|kyrLn#fy5?R)LI4|&!%tO$2oJk zyVzO2!f`_BZBv*3Fwa}nV(H7oPsIC2oX#@xQXOikj z8x9;GWMF2_U)km(Z8pN4v=2W0p%*7DUdR1al0$f0rrNbdVLmyEwb){>{p3`wB+pZ7|bl?v9;3vcbwC%`(X( zyJj9Ep7QSu2V(+dT+{OdCZl#4_wy~Prtc;E{7l!CJQ5Q1PrJtid~nG{{X84s_J|Fe z6%Y(KPo41G+ftUY^}g5No-ZO7uA>n>=wxBBKicp-!PCzwJksp0h3|8I!e6U+nj92_ zZDaNUL1QGNW4y2P2@!>TwiSJ@TSd8eUUS61{i59@`;vfWUAGEy+{#K`yPCbcjJ_Bi z{+dd?hU}Zs-4dKi-a-uo({!CTv5{Y*{4_WAEcvwls%F#X_^%NBAGJ&f;2a-Azbp23 zr-CdIa8A5{#cV&PLj=?38!WT-)$Ef1eA+NvriH;Dys^qV65Ziq#PQ8PqB_`qQ4uYb z*c>P#)&S^85kL4yL0(U z!?7qFHkpDtvV+_?@V#F)>jDmzwNqf$2Yw5q(TavI@f&#=l*r``v~FoL3{y)4B5Qlr zA`1IP^R@tQ6AihQ!hHT8H*KM_r^y2#N@;(Fkqzz1m&(d=e|S(fUlgHjGtBYvar5Oc zea&6G$JSN$n}BV{1!cJo`spZu3(-v9D52{bIwdN6?d&>RhB&R3~O9q)Ne?G&h zcUr=1oh)j)@t>8~BO24k@|A=9w#L`Pm_~oyGWd=|`7Sf9+&lKp&o~C%8{I)IS>;w zpx?R2`H=5=;dSn8<<9Pjsr>|ecgw^ROSz^jZ7BW+Eh8Lv^TR#D`4c~Kx7>TBv87MQ z>#vWEYc2m5lU{CB2HXobHG<5hT4b`X%K`4|VUO0}HubAELEKfi?)N+wTW0Dy5^zmQ z4N0~-$!B0e9{Df)72%RVyG8Ui;xlZYe5iOg3?r50nf8DV}bF(Nm9qk~9A@ zbuKb8pOU1;tr_pdh4Ng`c7#Lww8YA%l=ZHU#CyXw)A3)SWB2p_jNQ&_C<@ptB@Z@& zF{K6d!wr-lvuFM(E?Sx<>~z66uz{_G{Vtv776CIP5+-^RYd=ZZH+~Q2Mz^UAZP2}E z_jAR(FmaM_<_wVhlIK{J?I46v(T)cQ&@X({%)kuRpIzb;fm- z>iiGG{SSEnI*|Yxs-I2O)Yb9E~KC_ni=^Wj9fMTTsDZ2c3QY zk@Zf`zh3LDt=sW2OzDXU-aEwQfg`1*?G@7xo#&VgDetN~Ys=JB+Fx$K3nWJWNzkD= zO!%Y#a2%-M=%sa%^~EgtcO|%fj32rm3uQ*z!E>aqOs{r+ zMU>I)F-5_WfK!r8K18a<(z|mYI=%%D2w9#*)H3vZ&$HrJKCQ9LTq-NQ;rq!){LA{d z(F_2^{1xW9k&-(Ra^@ac9gIV-mO0y&*H5E&AB>7MRb8`3&2#)7Xc?E|Jp|UOvk|{@aKN*s$iVP z^gNkJ$Ca{OaXcA{n)nnGeTU>P_<+A#3a-T znI4%a;J-sJsK>ofVyjC&e}NK@&)8ne+%LL?rCCGaqdG&H{{<2MBT0P;f!Szl-4lf* zH7+ueBC(lZgz?8+{2Fpck)a?|`6KcLKTW#?!N%dfq`O*#4*5}zI@ZFtP3b&t&wWkc zi)SWm`MPLFKr`!iO3)Yhe!Nb?kDpbr)qB#AO;BT@3-Dq$C0Zj~BQ{9&cycnC>&mpq zm%|#^c#_R%k4Ecg3I)q!2U`ZbSPE8DPt? zT)VLZ-~y(ozv^{sN;W0?z2|X1V40p3>A||u|LTv*i`EWA2IY^TgKl&C03=`Oeob%W zp+|2I-*}g5CoYX14W=isis!C~iu?D~!9_K=BVr>e;u9B?o%u?(-K>V?1zyEpsa^b? zX&O#)v?=5{YGeILgHJ0!>i{e+#wLf|s_n>Fe|Rhs&M@-qy25-QeLZL!=PNs(7k*ez zo%nZ&=9VXgWb?Wm2oV-x2sMJTz3=T^FXMK1MkV57pjpN>-4+L5Kax9f1|hNp2fye6 z@N}HI0ces3z6(tK5||zWBsT{%2K$dp&nrbjQOE0VA2WDet(fwUq1KoK6!zP6INERn z`zm==zxu9CH73{N%inih&ih$yK9TV^69+5=1!?z9?FPvhRqN1|2xWg z0Qab@)oDVbKASlpN0CUpj-rbl-L4pX_R;KN3w2~j1Jpm#I47!BMaUjioOUXfQ|C-%J-C-` zr*(y&N0>DcXWO|xO6xpslJq5tHJ(!1gR=wGisV^nyX`f0{W%2Oa4HA2?{>u!3;#G4 zl+Wh*QDx})=ttQnMXjw%sZ=?!FC7t#rbq6tjOY(v2eVaxPRY`X)(d-f2hfI^UJM~G zRsH*R0>0dx7g5bGds-VYS&KPS1Bx{18L20=VWhqIBwW&Bw$AZ8{I_RO9UCTEqyQuBJ<#!vCe zAZ^^Rz8^s!x1oCTW8~1R426}kkE}5>)w8{}+>L$FSF-8Y-zcS5GGVTGDdWDsx@E{~ zs{lFuqNp+mA^^LsqKe}4kBBoR0mGE7^ozhS6RS)p`SBnr z6?^43!F=KQk--qT0W1!>raFevz^L-R73U@xhbRbk2z`4a1NB%6h#fM$TfOe5ug~eL zuT??s7)tZ$TWpg0(H%>wjQ!py0m!J@(F?ikn7`WL9xF*zZBh%_RNEpcXXSX~x&}GE zUo2y=X9d%sqYHN431ISTOY~O`Em6DU!Ovut4;e5uQfX}8zxgr@PwQKhM7a54-V6*Q7!gih8^w^SQ~{qObBqw;`3lGNE8S;|B|FRyTw`CM$LPaaAI zOmg~2FgMz{_ALQ7M~)aM^l)k@?RTT2CXpgaMtI!kLeL{Rd>N_0LhzVh?=!UO*lvxD zWa2eixUlPO8?t!$I0wEmgTlPWTpM?OF^_x6wiyD>4<*Vpq$x36cUaW;R7$|_{wg`~ zeW0L66hcD6`vZ^l0Qt^4 zV$iBL@#wj|u1s)?VRMK@^A?)Ea1SkavHPh>Jn7_Pqgz-3M~_$GyenFt-9?Cq|Kaw!{gZE~6N{nrRm&Qbu>Zx*%uo2Tm)aw=%m6b(p+utKP#_vojg3_R_9q(KWcW+XtV#|q-__`PoTl8#zHazwtlxl?v zbCQyh&X*?Ee7l}Uy83amZp+hD6jMB-}ga4?aZ3Xr51FRj-0 zR&cpCu3t-mOQEaxg2ELv>jKU@`%%Y7(pLfMJ$`uVAUQX>9SuwPyXf;uV9Tb>JhBB; z1vi+^A5`&yOQnks2GH0PE%o95s8{!*(QLlRdrd1}#F}|ioE*X5H~Bnqd*0S%|6wHc zVGc<dqz}cB9+YCVPU7AjDq(cxc1;Nx1$&# zdL`z_W8pIYA?uVMJ(>msZyG5e@*a_f)rFh(<9=6DFQO7Ju+IN4FjzDL$OU5!Y(x%a z9HRcH+utvs5y)Veq+!Hl4Kt+l_We;k2r(`~gsS`-Wv}AlcWJND^9o<9-%FWugi>-s zw)sF!!dfOFY9#j5W)(u0Ix6>X8Plt8QOIimtROzbpQ5NE)*s(Bn<>Hf0ib~wFnP3B zK;B)}!Y^@@2-dzA#z>|cleq!+t2fzyI?jGFd!AE}4!l>>_8b2}O70JZy)n4cx+~e+ z-L0){d+9dgN6sRuyw0hbclRc?Yf2RC?wNF=V;!bH7t029~>pqwB3`^UH&~B*WpcOa< z*LoCw@s)`hUZCttZf_SWudZz;?_uKF1o`3DX zZdGpn?ZeLya@#1KDxtU|MUxZm#ZP}q<(g+FH>QT?@l!$xK?^4lIEs#|>62WD3SkM$ zVW9CP3?PX0!iAZ0$|PJ68S&TG8)eukn)dr9 zcH?ov_pHG8hmHTwdD6K2IE~P)Cv)qJZ7&F(P}LlxCgZ`UcVO;@6u-wW?QfkRay_H(7C5U>SsW%Wg!g(R~@*_c` zN;A8xE8-3+q>)gB%RJ+f@wm|`4XtW33 z4esqx4{WoF!{O_?e$*!EECcI_`M41TsS)uzqe&=kT$kYHNQVU=VoI*r(}*)T;6sx- zn_Lu&y7L@V|KQoTn(K|rfEa#gzRC0H5uP{=ddN#CI(-lCFSJlR9X#^bAKWc#X|(bZ zQWLyf>WV{?Bhlq|JDHb?lqc;l6B2rG+Lmk!eID;msbm$cVq&q+JKxG3)$cPhJsX&R zJR2TH2|kL8kVh12z>YAdaaxtCGYdf^ZHl?4u$1j3)T|8;mr`R ze+j0Wu*PD!++x17HyEx>TVO$Wc|DqHJ8iqZrosoin7e4RjLyki3NT0cJwXN@! zbv?`>F4WW5N9PD+>NjZ;a!B*(@bhbe@4mvzZ$$(BWe(X4Sn={*I=GVwi& zaMsH9@%|Oa7_-KvgDFjH1prGmBPw66XoP&nhq^cHR$j)^q|F)8;y6XAM z0@JC^vsgdKPD=CfIA0@iagFCJKxX$e8xx@ZCsaUD)rF;gLz(j~NQ#q`pn$`yQgs&? zl5zL}5Mfw&p}~8!^3%E3ln@K;z)(axV*YfACc@B6yhFIh44`poTZ`IDZz4C&mOO{A z=tPiICFXi{1HRhl5I*d4@kR2vZF<&oyj;xPjZzMQcwP4Ul@0bKsO@em>wRX^+aMhQ4?9`Ds_S2KIzP7l$7Z`A6CPzVKTd-gD!Pi3X<6 z*2s30qeCh1*LkkXtD%Qy)4!>mEx?Tj#7*WvC>}KqX@MpX-{kmo9{| z*TLRZysdk;;nj3rxo=C9pXAwS?8peV32_KRsuiqcP}N%>!lK>otSp;wxlQeGR(uL3J00YtXu-U^;}C~KlO+n$hs6`ciKnEKZX4Y8ms3c0 zk?a@g1+#FqN7lk@X=VEn{(&|fDrw8@`_q=me;B%( zY@qLr_H4gEXhs`;Y{vTo+lA$bR4IGMdDWe|HRH7IfN_Mt8jv>IN=^W$-zJ~lHeGB4 zbhS;F(KTnb-XM$9|(*P^Weg2Sf(}*0r8Y&OB)=rMTJ_yHTAWT)BH$c zE7#E0sk|~*j*PEZc?tEtZ21evFylR%5z(BWceyWhU`Sq9dtfa?ocv`_q1t;~1~K;2 z<$gdha7e&LF~*mO{O42CoseY})me9m*2A@Hx*Sr_i|g5bNufvmqh%hY?dL?ns6(zf z+z$iYApe?Kcnh^z$XBFj5u^7LTZM|xGsr|6_F~|EgX9dC3-$U%*at8;LW#sp%LJvJV+dAL8Jnq(xmj#p8Arz)Jy%SMko~orR zqC>7;SJ}ah`!qf?WeFHH0n4A}@u44(O9SS!jn@(YERj$b6+$rmID}xaZ6GeO&FGax zuA1p}`>IGO{2~Rj!M_a@>@&^WwObMLoOtnWOett9HBFJvAl$J{ z9&25Ds)qrkLDF54*L&l$wx5dLz=c0O<+xi}gj=S7ZEHe>2#d(3-?gP!I7J&nefOP8 zM$v3{h}6J;Mxl=%p>X&2L$-&>cSB%;^+OaHlFb~H94ifn zqBnW8EF>|xrBJ2X=cbhk;#_)rOmUrB1eR6yLg!xyFd9jsD#yF3+e&o>IRpy)5Klqj zGjd>J_amMJjJyFM&`Kxkt)}A(jlfl=Q_*$z*fw627d1IF2Zl~o8aJH>DZUwNne#*GB z*ZnA?pYEG~o1A~B!?~G2ja+Mt%)j7l;C0&Txp4LkL;FY52?N2!`#D0K4c2-4G;R{E{U6^?#OeH|f&BeLJ+Qx( zGe&NoB>SBRdaxGRzwG}FDU7ei1j;3zAafblvW-!al}hLQjwHId$!D3w-0AX_YB;b_ zb)Z00Hv+o|at?xJZ-7hUQyFCxqBnx$hc1oY(?}cuUV#RnmAXDL-T{lQn~deRg0w*~ zq8-wJCJRy+PP{q51P7HF__4cXquc6xZY7*{ScYKWyJ*krn&>z(z;|>qI8}d9AQzo} zZ8IZ+eo%a1wj^rxlq4$Wr?H|KUzwcASa2zTt}ogDI}uj{fK1_=f{81J?NBZ;ceA=< zqOx`a*uPuco@Ik)APcD%uR5|ITwbx82c92sn^>J#{VNNqfYvXEuFBMR$S^yCUkI2e zQu=$bSqxBj(I(*v{1ktF?~Q{2ru~_gd`9Kdi zCPKhNI4U=%r;!6wui~aJQBqru=JjPdTCJdb^Z-h3P?S`)U~i=$e;oej3|>cs)P{2f z(2B$`!GOuoCMO*%4{~kzFAs%5UwKv{64A8VoX+WfCH;i$<}koKb+vP2N9wyTkrh56 z%ah}!RL_$z^)Sk|zQfyJJpFoE-=W#VDHlzrGHH2wj;WkUk9RIqD(~ zMDX2qR4qpAlgB=tK;E{mAwCfPaI@FR?AY+0biIzb`=dkoH(nvnjjN|<;;xs!`4_20 zNRnzaLJ*XgHcQEK@pEs+fke7U74?L^(g3=J!JQH-Uhxl62_&k?F5QdoB25_Xn0tTN zL7-CkCoZU%*yq^~bD7*pPpFGym8`e|#&+&b1fL=ke|vZzRg4gtn8BhV}K<>Odc6F#4lMq=vO$9wkrpW!=wQZ@N5V!uv`IUF?4m&jAQs zSH4w}dM_})-`9kM=-$Lfe?7vQ-cO7Ie0rRud43lM^1NT`n$P0?_f*$o0C<{#(ll^0 zuVx0aY&0U4qq`JTn+euxhoqZI-A*Abph1Z$BR}57cGaJX>(D%9{2Esty`qh}@Apqj zHUAmM$YA>M8t79ip8dQN_~bw|4fZ%42Q}rV}rfcmsVbl zoG2)tQXQ4r@!m?6wRm1rh8lO(`{{JC#gS%w)d^>w5PE`bG`3veVq+DIKbjP_5-$PH zz4`XWd0D2HysGM!4Nurvid=r?SE8{nfe_ zxtWNrU^#ZW0%vpt^=xOxaSQk^`MRm=P1bBJr|Yc)LYsB*;v=pbl&TIbLlz#?dIdMl zX1i_lc{A|;+-ZEtAKO-wxn#eiaK@)=sVsF4>wCZ-;5RRtL;60lOee@%xN_(eYq}|* zwbBAz$wYs}E)y?yT=g2^L)z|2=qp{jH|Z;zpEvJ1fJ>E`z7hn+WB|D=qL+x$*TX$~ zM<3fuQYNodWXkPgN6hX-XpZA=%g#o}{Tfu}mZvaO=5~9Ez)CUrtj^)_&xL$drGDg-YpvJP2 z88rdsOMfSFG&8BKXkzb|7x$orN;u?EHI>>r_ z>afN5#Y?5EnS5kV#kq4I0Q_nqa{=gnu6$|=O)L@m0wjG_EHOAHP%S3U{!!8v^k4t4 zF%sk($Y?VoXF*FW>1O}}LE*f(V}6h;G~I0$Hm$#z5ms(`qd&5+uWCSGXY!CmI2Q-N zGU24a;n&2B@`YE7RR|isxetKi5q4C-hldx>*9IN_+Y@jZaww%7PrnyA24&|rrE<4T z4_-4nB}Vq*C9EH0`{V#2X5PzW73lu%lOVK@`06i~Rm%c+d{XmCPxk?*L#H4ou&0&8 zdrtn8*Li24ivQf(CD?L1&a2zX9+tRI_@e^#!vZ0BL>RKL~ApRV}C5Z10o zuMnBMz{g)C;4?#VY~n7Op!?xAW$@< zQPaIqQd04}*Xdf$lK*!Mx=;Z+DO$TLH0sQJ?z0dFWnH#T0T=IRC*3L*pcVpPrK3Ce z0lW_bX~`%~KWpC~9u&mS7r>lu@>b*O_~&Opv}C`#=PrtXDWWUnv%sc>~}z*YJ;m z_rT1rQG|AmJq))=sB~0bpprrI={w3I z8Z_z*>$kpbA#$W4no%pIa`MgIL!2`oiv=dvv7v7-jM(R=Ya zWI&wrn{FiD+One9RKG4g^qsY|fE`Y1eCp=!lZen#vF}d6IUHY{NzQ?L=tq}`tD-W8 z<#re6^7a)2fa%dI?;_rhO#qXF>G3>*1Q7B(Wp3L4SGPK^1LKQq8X-K5Mxl`|I@)+p zn$^bWhONJjawgME+^@YJYcm|TlnGxHK~ii|`OQ_UJM7b02n@>E=rEieQV!+$h&Wl} zR4s397lwWw9Tb%g^_SRG`PeU-PDq>vt0!nbURK&(4BWETWf)piJABl%Swm^j0IRc0QikFKJ|a_oj0- zO2&P61s0kCGIor#jp^9%z6|TKFd!Rl5cyZUZxJz-T z6iRU@?(S0D-3!ItDeeS!2~H>!cMa|koSXN%_h!w%%v#CJIx}bQ{TNFKJkI#F@GePZ z;LzY=3F5bJ%>3>rs53kW+_1O@Sa#H|m*@Iu14gN0UidX7@+ULV&v$ZG;3*iDSru*E zO>`Gum!@py-)?l_d!4zDz4!((q=#dXRn2s2+<5lV%8{+TsYIrpjD5vGi*8ChOhN9w zX=JuJX$iButV?yv7E$z4o}3-$u_vxh6=J(+r|ucEob-;0S3=_x{C*m7S^2u+g3q)} zS48cD0Rk{1g0s()b_tCnkagF>4^hT)+kv8c#{uO5CwJhDm&K^8x1KFfz3kr5;Zq~4 zu^oS|{ZCo;=(95nx7Q_XqP&L_`U9vTG^!G% zhz?s!Be&Biw8(?|8_B8_;@3pAb{F)ev)??rFDH-PKEAt&G3;-80p{nH7*Itatx_Dn zW7}>zD?h_$lnmD?`fNG3^!M-AuPm#_U3CpTMUFCR^A|s=Pr`Hc%{;9?&usgqIq%K- z=PbH!zZ8Z>OAh{4`S_`FA~r%~kHCz77Q6Gd)bf{ZNT?RMB}qwD5`l~}+=C0s?-lcE zUfLQlMtX)-&}`vqNQU;;25^Ov*!Qp4!P@O>W|+toCfHI*AqpsCO-y^?92p+)W z(C(nl8+y&LZ%ds&BfVU7ybkZu#0OaaSn|OU##t`xxvNN<9$sH+==;B=CI`R(v3RP5 zkW2XIt3zYVP4{gN`13C-tb<%1KR4#ZY)d;!V!;WHj1|rvZVc|`g;$4R(Fmb~f5ldh zEsP_pTmsHm;iq;xoKzv|dz;HVn4gR}%IX;Z1;@&m%(m~flA^2_`7>YG#+K{m!{yH& z{&#R7eEoODw_qx2**fa2VLu%sh?Ti)_7R0)dQz2zmDSh}f(uj5@;h%6r;}u5W#RnZ z#G#O=UlNXCzwg@XRtILTYM#$LdY*gD)AXC257*a9DIbBAKlGhi%4!0QR27|GN)@;F z$*#oiZ-!&iURK#Regw*H`9mLs1XHL4Xcs$y4CvYh2J6*c2R9S0J-Nt;?UV! zpFE*RX^Qij?wDwfAf}^i*T?+@M5m`%qBm#wUJ}z{L6^5fCEcRR=I#sc8}2`+Q@>An z0TWLf&(}#Z=K;^NhNBf|?1;S;PPm=#wnaX&yP&PfnQX7(BlHza`qbJ0&bx%4N8e2E zx{GtW*k|MV>XPF5+R3u$8~%cua#$3_SH?Jg!*O5Aa+=22!S#XoWtz4+%X zc$|Fqs5w7oF&DD$WMg_y!+V%m;r)Jho0sVP1!fEB@==u+qyRIWGW=WXx2@#yzM%;z z(DzhB>>E?>aIO9A|6Ph6Bmjeds%-}aFH_B*9n8gwBDhEb6^yPh*a1C#ll;%K!#;i5 zl>N!QVT(;Lc;ZxvvX(uz9+pHm>z0PMXE^`aK0 znqig-6-9)u{kQ?#cRbqBAbuqTq!5Ey-y_03W=rj5@iscx zIk!@pQU7U^qmLZK7%1dw8aTqppi7#q%Y>h5 z&96uvGA@CjNtM;zQDu}@J;(87fD{28+17ft)T@fnUzO?M2fTlTD_@L#$~&n*bbw}` z4K;lrbJ`p=D|+?&Ct`WrLA5UpLm3-yRX_{r6w9U?D4;!wpuqS)+Frv#(6S)Z)OC5Z8Alhzg2UrF2CnHmefTo090uEOUueN819DTViu71ET=)L8Qb=~(lDmAz-9fjIf3vi`y z9p{+5J`3@*Frt_LU-SK! z2T(8wi7Pz$=D+n}A|{pl5UL!>8x>k|f_!`LsrSgtBA3x#J~=(61E5USCBhyJf35O0 zwLLk~1uo)M)qhDwHver(Wo|a(Rh=yU`xk69S-El^<7b#B@*S* zh|UG^{NaqNeFs>7w`qWJPhpN9(PKC`=&Oo(_F-->CSxbQ!E{~+r>NSdlkVi$YVC-S z&;418zKjjKZ&>S*cWXQSKqb``!1E=efAZ8=_HFU9Io81=5qx&vMjmPBJQd;JJ_DtZ zQNAf+Xg&mRK*$;F{HO<|HM2mE3p&TmLfc5fM$NJ-BLXNPi`zt1$;+Cu!kM_309AQJ zi9ikvIOcGLYSs5Jzprina2$A;4n(GOR-#0;?`Rp9*p%OOKen+Sr%>4&Sy&7af@n^T zo(1BBoyp{DFT27GII8&`=FPTJkt!^T@2)CjX&U{Pm`pd`%}v}CU?DjbgO6$D8Gwy&1(YVc@pe0^r z2;iJ}4vcZ>rjB(h@{>||WMhISD1~-b&RR#oR;}goO$o-$)9Xag1|;Cz5PhnR=0_c> zE${0V_)o6~siDwCN81c0e6QHUYu+eelZ5>qXiVA!OeKPHX=+hw17cmL_#t|zeZ-~{ zIs?_f+*Y5d^Ftcj zfV^6|me~)4Q;mN4+Q!M3`hReJ>2>&9&vl6_jWU=YjB^p`-j&2{tZQwot!pX4^3wTN z3YS2XqC!2)3~4qRTY+`;PCu5D9KGv_G0wqE6-9W)}i|#ev_eK498%CkcW>fH4)m()*;d&kMqZV#3ABH%^#7( z5g;V^RgK_!N*+lo(43U-*5?nuNi3HE^wk;=#`-$EbYmQSo=t#`CuBR?u6Bq`8rW)9$rt%tZN>EL}Xi2qDIWf9PJ-z1 zG7SNL6=+T)%7D*Is%&Qixx!$!z^bp{ zX3#rldnWB;R!CpE3H;#T{P7s!;aZ5!fpFM7NvvCjg91k{aau{;p3YL|Iw-7)t@*~N z5bfp{U|G@@DFKcIJ&}CgOgRII{b8ZE;p0Xn`E{q$T+*I;bTnLGZ!O7`KrhuB#)Z%8 z#ooX`z$JE9QY31?lWc7|s=whS)oXUwv66u;U{iqIms{6R$gSrqY>Hod>ScTysRu9AwqDwAESC)Vdi?20os{*DGen$x7~iry&71_Na~hh) zbli{r7~_L2otaQpu<5Ur88%nMKSD z-n3RQC7r!r02rO{U*=Syb=U{L5Vx!iS4ibFy~s&wO67Ni7%f;~veD81)ab0=5goR5 zrmxooWzrxBquC+%DmM1d0d!}9C~vugT=8$+CHgCX>oAhd%hxA))4H6#=J4EhRjjVB zvTz&(d{Rb8J|ZqGN$RyErc$Z%*PS$|pM(r%JAshYRCv z2v>BxqaohoHbAs$UK=23aWcQxRn^LVerjvN9TyU_$e1AZqn7+TwSSUXEE{~Ul*ic^ zQ^%en*B4q}h5?|N{ZXvBKRtw;dXY<8=b!`Q)91i7CkPk|B>$;oLIlj+eZHc!ap^5Y z41EhQ4wT(Ff4fg1>P!#@H*P#0ZR}VowSOLvS)Z(Km1ac8k}F_@_DK^Uw% zzf1|&#tHK7&c^&^ZZo0I$CM&p@f>ZAU#Q1cx&46*l9AQDQ|f>1_`Zq;e2qHNnURr!W@*C~-Cp=a-PJX32N?k0T zS+d!!E8T1zJ%o^!PqfF7W?_5X0i7$%wV1Qf;318R1A^HdVZoQR?t(dYFuSAMbw648 zm=3JeB=yoR2eF!~|)^n}@a3 zEUIR89AZ!8U@F)5I7=z%HhH1mFGhaH{C#~K*7rfoEUh7|@K3t&pr8dJD$%LM8E?Bi zp9u}m#W)2@e^TIr)njWxkd@l+8hiY7)j;_4PhUMZClK)9BBlFi;{irRXn+cejtNwS z3s&)fm^va9VI^t|DMSg5>}S)1%i~^Vgdk24VfK)nMMM)c9iiqd0=LC1$ReRAkVio& zsR0p;K7D#e6B@z)Ys+iB?yZnPvS-8Nc0YK)LWZfLF(s4_Sr2E1=S%9x1hf3_Sf=>I z=tfoW^gYUK9y@cmd}^Cs1w01XqI}*oasS+<$c&r}eh=s%#gH>-S^nq{K?}c4y)>)W zPd_z5tl_KexwQRBy;?#aOOrPLW7jYc&qS<>>iT&s{Gva3e8!2|{{q~-0O*Z*eK8cP zd4EwEaL=C38NU87yirMY+{pfXw!vJ@n&)|SbXD$nbh`q^`p68PBe@bbz`^yA5L8eL zk&yFG9#TddaYeF1ki!_nWWnHXx!{+LkfkP}P7~M`R;pYCwma^Bg@iNLcJCkALbrO2 zsh+SsQAH4tkPxsn5lZ8CCPebm7J9CD*B`6FRa-D2qU`NErKj1-j%tG3A=U%EoEdF; z+IcVnBd?cBuCxFe^HWEoYlNM0MdXC%O*!8*eE%!EwE3t9BSQY{5y z?R$G!1xxsALsF$4$E^Vp1?i{&CeBQ zy)C^%hi>N@FX5*7eO061OTL^jKCX#-X)eZuA1v!MCBI_ieOG{tup0FvwnZf{VedL? z?LV&;5K~u7S6~i&ymc14chCz{0Ex{FTJU&Y}gY8)?hTlzLvi-=9Qmkc;ijzisO>2&Mo0E^+Z+ z%V6z`1n`u#@aQ*t+@SqrA5d7q_K91=Fe?7CSWts6sE>RtuaV0H4{pCq{#ubwiKyZ) zg{{u?7r zbo-V{a|S0V{Pv|QeB(n)5X3PTg44~qz92*Die-YE9rc^X?T3=^=g$#kvlM?sojls!xN!dpQVVu^ny{i#>5WUsP z>$u%>#GK0Wx>=ro%z$`H8Zw7!OCpGjBy#qa^A`doJ_Hwfyej!K(qh|`JPRV!NuB}#=U>W z`t?S)?MP?W#nT%KNZ~ zwq*Gd9{T&k6pOZ1 zM481e;h1><+wT1Q67AD8#TAH}vLtY_;={O4$ac6}eo|H4f>(lnEer;5bQ!SEkp3Vu zb-FuQTI)U^!1lfQk?Q*u#$w&O)$OWUn}4-4RcdX0n$hVJojoaCF1EID=-wl`(WiPD zy4ly=AO;LYAL1h_!77<_&=A7ru)In)ab*trI}7`%MRcI{Vl_-B%t>YWC*u2tiDn>b zoQl+}3NvlX%J;y%b%=~TJBp=?>{fM7a&5%6?5+V`P&5G>l26&{xOgi0@i#<8JCmIA z5A`)U{W=gCVH+}@wjI0QNPHxW&edzQgM z9Sq4M3Fbv~SQFrC>T-SS82?Fl8;^p{-qXUz<4D8o`;W)SU)tu zhU<2$T@2AeEny$sTh;H#UKldID+GUI>!G<5X4eyaL=}%i(JpTqFN<4pXh6u#IhpHv%?JuRwANX(DqikcUz z*;z8{xGc9Ga2nuAQY8v)s%Mnvr&|Kv47rNlNw4Cj2LU%@CCK8SZx8<)?_m2!MS2yo zoOSMq4TF9AY7>B|=)sN(jn2>iih@Ry)^2UQ0{&T_0zY*~r~fp}*yBwaa{Vm4)i73X z8jrYk(&U&Nq!RWCfoKF1L7D{p`e|#yy(o{f$%mw~?r6c1tSrrv$h(WO7)!OT+tL2# zXiWyk>77n@v?d_huV{frUZdD~Sta~oPzqcW>CAn;howq(xWX)%qh>*O(Bqw*R$SpKX~qj7EB^5W~gkkgZ`@c-WM&&+^}58_WL zprHzpc!bs*_uCYm_Sl7UT)neHal~WEjTIF?Z;bTsCQka^7n+8;vE^Ul7mgKGTh?bj z*;Q~0aWXg3A@JA8zog`*NuZs2=Ebsoh~-Wg*r~TbbsCm<9%^z{Q?OU(^!0f{+2GBO zI$TGf+6?5p?-nyFK&j$3#ZbW~IH`^Qa9E(nRnEICLE(wb%mg!MF&4_CCXkOl?$n{)7%d0wP^ALQK$gqIV14eGPamrmxt~${T6Tm z@Ba|+OvZ)m38wNJuA9w$J8G%lKWgY{@IG7i|L0|r>E>|b+bk>J_8EL#r&+mGQCS1O zG!s&)l!t{)CCZX_TV*-QZ5bbt_wsKzp;+IkQn^}l%Zu`gMw| zyfp*S-DlD`ow?dIq)ofb?TY>|%u;a9@S4Z%y3h0Pbw?_pwr1bwd*`lp|J>U`UYmW} zJZ1T{_)eEpxF{S+?jj481TK(w40?=rP5pvr3aRL`M^BfzvhexSt0C?bbh*6>-C(tQ zb@=Rl_B>m$u=J8Q%ChI;vz6UT93WEY{2n}d%KplV7A$V2y>DMtjr>wZQBza%7_5+z zq>thE##H2Nok))|!$Y7_s{hhQbsw}`6fb(xbKTW*el{7F*mM08s!}mk>~nV_2gDRA z)R_`iB5|>~J-GG$vvE!*mpE9=xI8&`d@X$Iv-Zgd4?t+0Su-^;@sHRP7=*blzL(*Q zW$NN70l5E|Op2af&PVMTr~{1UD3jb1@7bu;cN@B$)-iqi_%v-(yK`bgq`fX%MSJt~ z!gDHJJ})@8O!-Y69!Ed3gfTL<@#5N#BlLB7Y$hmf9@5WT19P2q2JgAee4UX#%yRTA zqD1POuU_B&qq{Di_jFLJP`mNJ=5_HMK#XwnMP4ocvxd#^r=5ZGcz8-o@d2GvRRn81 z2F$?xdb)m1;_qUVCziAEX^WxB#{H3z;Q1Ys*r4A|cw*Z|P8h6o!F^MOdf{;M_)k1` zo_6k9aXX8H1%ZidHUYBDDi_l$fc@!GPsGLZQ&+u;%Dbo zsYZ%{yK=GsZS18CEcxg5qgS@>UX7m_u6hKnxx&0eGkS1Dk9E80y0=Hnw`Rs723*?0 z^tlP7*Lc-!F>)Po=qa4$5h6n_UB=9TYD{S>1njML78al%;cf}brUFY)G2fquQ$2p? z85`Z(4KEQ*pykKMTyXcDkRIFBY%a9D6#DeykbF0zSUQ*31~ri5Q?)A9vCRo$O7(eB z^@1e;cTDtmOO2?;DLt>%ItXFE-Ir#`Pi?%Ozb2z%e4=|EF!W#exh))5D<^!6)T3w$ zrbxp@x`^+2D^&w<=op!r##undT=&{r*il1lg#-30N*YVCcvi-h#-5E7OXXN?Jm8QF zvoKC?-N^M8WBj&~>i%g5&!3cm{XQ`f)N-~E6{=pRWZw#{6~oNyC+DB1zTgcjQA!o* z1oH}{|Ein!C4QM=`bimr*c%o!<{H?EqznM3l`W7hYB?fo0_5&Xa7kS;ao%_KMkM13 z65(9bch3yHhRGbH58NT#Us5uZY`T$^nURvk*U)K};v{1-sXn46=UtP3fuPIvO%b_GOZ{9ff%I5QgvRkmtQ#qMWbY`zAJHp9=hZNQ-P_f3Kk=ve%rahJd3WEdVgB z&iQ}yo>nb@FHORemiT?4S^<5~PA%=1j1CpxG7UplWYpUSP4@)JNr4FCB&6yueaHM{ zma%Z0LVw9T)H#kgSNN8D@a}r9+ge*+$sA`1ouaD++KcR(gO&=zySx-uY_(B(-INi8 z4X8v!HTh;sKEsBkjt%Wa3iheyQaDw~!8{g&i6hi` zvQnRdg~{r`c=mZCUmk!n-XA}6YMwov*QH}Q!Q^& z#x<~sl@owKe%6RBIJAg0tb1SdnU=;^#=p+S`&oC!LBM%pR5B_H#3={DU^!d#nPsk( z&1`zf5v_0n5uqLua7S*!Q&-Det}) zEDiSGa>S8buIUx__qnhTV$Jfd66`_b{JR7bgY5ShGcvn zzFAH?I&M}lvkxq(eLHAc3Dn%oMadafo~8zcgYj+oVRtB!1qHq*ShWOg0}2z-r2QA8 z%kO;j!NS5q8I8%R=JQ%tXMu7pxNzaHV9qAU^_N$@7E00FNt znD4+x3h(~`34iJl0RAlD7o0)o;;e07tv_`jamLwM?)vMMQM-aDs*RDVN(wF9m3P4mh7T78;}yRc}$F))j(&k?f5bp@U`;!)V~xzD@T>DAAy@X%ON9 zT-Wb8Wf-h_m&)Jt(Fz`eUduY+ z9n#^uG(|gM4z>Gty2us;Bg8lmj%e|V?4x3LKeM0k%0!ybzH()AWTR>T3w2~4(~n_@ zU@u|r*lwUX94-O9)u<6th%xRad8%;276&}_pXeUO1WhC5%}*#K2#g=|bHtMqrqZ-+ z)7pnpgm?i#uJ1Ijw!m{Vg2xB7!xt0cNP_HD#-X-JKf<%$8P8$-BrRIglgVVbHvkxZ z<@iorZ3KjcD)uv_kNzHh&r>U|iB!dR;6c}mBiR!=zbrVz6UJF%Z#^H9tf6H~ZI3pF ziBTKmRb!FFi7uv+z!X-iYs4pE2oAOsZRMa=65khKGI*CUnh+9_ECwki zb2-Bs^R|Z@#{e~!PM7C;kGI_mleasnd$RVOx0heT1g+kE*e|?vjOjSRRncRAR$#6= zJ=wtJaU~@?h$Zo7C6h+(#&Vns&6l`DL$t;(0>Z%N=o(WO0^QvNtwo^ET-t48_qid3x->n;fFgLBF=fRR zsOpshd7L=9Op1BYjF2w?=lz_7TI90x@63<81zXfE#mxBQ&FFv%xaYacWiwq3CV>Z> zp%tPnMuhv=o7YtLIgI%^paoV3@4t??^hk#ABfNAPg+gzKZfF3}%b>g{gO?D;>&9o_ zy@@ocir{|)I=8i_Y#9i?{tmCtM>a*Xhi4%cz>1Bs$;r^ytD|}>hCAK~f^gJfuvnyr ze|`uvdw~4WjFNB zw_~#bDhWb)H^UJ&l`ra>;U~_PBJ?Bje$CmvcXjQcE{-oL`B?RZU}WsQdb)%W0zg06 z0{22(eC}6~>57qSugki$cIc*8^ffkxj1pCZBSCw$d9wV+i3TzWxM>@9A$z1Ly)SqW zYC_s^%urNnj3A6_fh(!8sxCo8CBp{)hP7O4-)qdMDcG1?^i<$&$oGz}Ct3Jb!0{@P z1(*w2%5r!Sc!W)hdAf-H13S_|`~b=qb9z1pazH={Z+lYj%?}-0VY33zGLQ1?$LS&9 z9(>`CB!8+C%cfknCaNz(`BiT2qDhZ-Wr#w3%pRrPixvGHZh1v$(?Ua5(JbE=H$IeX z6o8ps(ZEG3nd;+0uOjrgB`xF-YE}VMc-TJIjWh7-f;M3@;``WrjiG5B>X3@DG!2J$ za#V*L^Fch(?qwpi8K3hjo#oJ2_sxeYAnE{)oS5Y1(@31I`DbOE{t|Z~0z(nAR#*kN zv&{H{_2^-z5YvxqvzRJ5nh64h%{vG=lS`GnYY>K0M>f47GHMw(i zZ1GYc(eM6wU$z<9{n0r=y?q55pvscO`^^r6 zv{-*wNAp7|PgI2avyjljSrzzL{ReFOHPp3tV7Y^VW7e6ICDuAwhI*dVzl5&43>!IZFTD9HO%XQZXCFH=1)UYlg<=SQIf*8w4n$RM`0eLt1m zMpYiw*Q)!K!p~jz_}?uGDXxyKp8JwHzuOUu_X`1RWdqKZxP^pbSmIY*Q3dd=p{pa_ zS_Vf2q%8T3ex5dicFtJB5FABfC=ufI|b?C$ZyIvcFnH9JTD=~}~ z-Wv(ZCTI0sdHz~sP&Sm^G)$)@1K>oT#|$DCAA4BP>DAIGhQs6cm=I=0tO%wiR%B8J zEUE7)Hbo0jlUp*Xrw%M)qyo&pZ$;S^Y^A#`_Mf-a(efdhdHvE8!huCm3a+6-QqvM_ z!&KX1VPQ`t_=z7RMo7l?xR_GVbdJdw!Zc7nZF*5+ury8ewv8()%M;LEtf2RWyGV)fii?yY7pt3o7>3eG_aS<)vX3y*7rIu_y9~~VPSvNJaM+yGe zm0SMRamu`W3Z&nySfD@P#q3HhZT==rrtoykb;G?snvG|Hzcgqy-|{8X+deJBdSa_v z=cMbc|XRFZIY6S!Z6i0N0PF!lY; z%1zD_aNV~`)#;gwbq|p-7oQ|CwaLxjk(=*sS}~|0nF~+ASl+Fp=78D5A>L|Z3pmm! zeI%~9KnR*E;hkW^?d(Oc{OCFO9%AYIxGVK_hhR~mj}$@CJg~MSOh!w*)u&OP8}U6$lYuO5j#N(ow)%1q zFNMcB6w%0+fj1^`HSU9zlUtE^F@q7!L*p zzo5fys$4WC&7Az%i|=CS6?zAV_gTOitY!O0d9oQ7qe8Ip?kS_G+8NM!x>%P2r2Iic zS$jxsSxEnY8Gq){i;tB63Y=S=c{3g6n1W61Xblg96>#lI8A#$=?4MnG@1S2+c&yOt zt9yNCF0s=OC2}h9=9clpP^CGCxEiD~&6dI-cM!@a_b8V-K8}w`~ zr&RQ|T*>QxD}w6&p!D@pJ=L6ketD9+va-^$=*%Ux)Q|m8wwmP#sFBO&S~*XW!E0+j zOiY0=5|$tU(ZhoPS-_8NbMn#3=Q^t)FvgVc{!0Ky&Z^?hF=L!3MQH_vje_8A4CRMa|k2;Jlc$D}{z~k@X!8QJ6WW zhrJnYCSZAn5}A8OHY)}Wd7hNGG8(+Jz4yzx%w{sQ@|rc>d6-ytc%P7E7qA&MElUl5 zpFM4ZAeY+T+n*8zD+`R_*b_`JQ@Y0=46++0|I8rCKxal4WI z_9*)Ai1kvu5PSdWuv=A?S*!+K;UvBgacRxq0EB^Pqy@!y$?Nl3*X&k&gJk>5b3$c5x`Fz#I*0KFc!wTp; z*myy5TLAlfv!wL?V*4=2N*Uvr_b%j%J$Usu5D2VWMdjo+98hfvzb%W)@b+`$-Q@Rq zLooL6qi|WkNNuECK7Yc|{K2Q(WkwaT-Cf+47us>)9vmha!c(b#8k%Eah2x-63ss(5-sg?T^|$%PF9}^!w`k z7bphJX9b&WVEC552~DBGx6?Gsld~Zy&rP}jzMN^r9cO_5#+OwNr_vLpd8f-Q=!^PQ z710Z!HrwKtr-?JNJl}_wm)WP+y#)FA1?U2{e_MaCjhhfzKlDy+vl?PV0juv4w^fnR?~qXVuQapom)8L3x#6Sp?}5DDZQ^qOoF29{{wqL} z^Mae-CmLW|6ZTPu%ejgZY)7q12KM!b%n@dA1tKwNMCFqPBg(S>GKzZ=l15cT-o$XX z>PjZ!<~`M&nFg>d05(H5-tG+OpM5KHUe%N>&aXqlo?LD1#N=<%#O`eWCON(Z$On$4 zU-GaFPl8_w+K){g)7QEG#|;=jd9neV4f#SOt%u@~f<5HF=Qh2lTnLaR9cj?lClW0W zGi;J6t*s+R(*Jw;#Vi(o7Es!~Tn=_$UMSw_nro9?tt<>czrW z;m3y{)m!lgFFhom3)0v$6?gy6b8E>@gCA=5a=6Gq0UOrO@rKN%3*W3_mrSee0TSO}E!%b9i_&z$tLUSgBr`K} zjIFKh0;wrh%J|-wa&;yT!5n4OpyQg3vpyKYo(p?>GNj0(4sZy&pJ=r{HAyGIDQ_5J~PfK?Pte6gu9ati`zn8_IVqlHAw&q_QpLrdaG$UY}wU(YX zI%uTdFQv(TP z_p(mmb?m8bi+}wVxTutWQn4uakphMzquUp@{nUz?LlTm>$t(y1>p5gFtDG^NU$i); zb=xyrSK?WF=`VwQ_c$a2Ls6L1pL`1Ng-OU8gMmP5C)EAU5R}7zs_l836Tl6JmcZ?7 zDdrY?L&5wEGm<7C1IovLW4u~3R_@Cq*S@x=yeurP>x0WWH-(7d#Lv_KBKR>YE%@}! zuNuGPOSbKzVkLk&6!Uc77&&2ms(%YabuGNRe=18S?w%6jg*DZdm90f3PnP~K(D|Kd zjGQ{>FW)V?aaye$_)iGdJA*1e;s5a4<~Z)bN7K`Z zbatOe4w*+si}JSTYw$v-8<1s=)>5BFdQ6UPkEndGyIwpDZQdTC2BMc=ZW^eb$l!@z z?>r3cH=sVXt0s>x4GZ1hJGX&7`p30YK3$Hd+~Oui(pu!F9Tb^Y8tj z-?ODkq5tGKKN})l^E|#_DO85Qme$CbAfKS$ZmQ`UUXA$9rbAUV(CPI?PHR9Ji>P<= z2;o{-woP5W8n`BMtyHF=CGxVJCh7q#XBT-Cu*vneaKGD2(*_YkIWko{EqFu_7Bptjk-{ zT7S&)eVH*tP{6Q4mpHSKj0VWS7~nWYW{9+L{DM&ipF@&e14nzCBKEi~6K>)qQt@NI z=QxBXa%2RZ!&%QG;uV-0k|2bHa$=0(Mt(5jw{w`bcMu-~@Wu50B(WvKHn#Ud^1|(l zMlogy5=O>YrH^&z3nC4i)D!A6!VIa0=c)?&u|FNf!ZTL(uks?qOTAJfeKpGGVFtm} zp^ra`;7V`63Vq7!NX{|ky;!BIk6TUZi_U0Xd|_*IgRcYhb$~nOLx`KHouNEfhYU^} zgD?$XMqOhZ*7cBTnBO7#7&H4c@?XEi2%tpiFTz`>b=UAL%_CB~7D9~4wA$R z4O)Aj9{-g6tD#q@z9$JkpMGvTxVd2(G0;j#mv7Y3W5#5F54jW2zXQx98UVzz3&xg; z$KPG%+wa7l@%`mgus}jt!3oCvae`7lD^wpX9jeC&2t0q{0Esh(0fD>>6f|+(2W}lB z4R$eHT&5U=zf#hI#BPX?0W^q5w}KTw0FxVUC%s~JZ%ITv^>;OC6<9+R&22d)E+0iN zy!FoWq7UUa0}}XJ@3eYU0>p_82+z03H^T%tFME8W$R21FJ~tM_NVl)%{aKSAhlC%3 z9HNLSpHRwqk}$Wf?o3HZXUdUJ0X{8Ly7_}WW3(C@)9|-Pe$b)P^`pLex&>`*9O0dET>4zpf}f7>%VI(j#__)FW330pBlw`Qar=<={5e)3jno znc9sR=5*_!fr$mUC-_P9muU;mwhu$v_`|8fWDN$ z2U?1}u@)!ym&juIEW1OLL>>~m?U7XQtxf`35G8v2PaoyNhH;rx`K=!P91U+fIn?XadJaAX=+uuUKWL61t0E|{32VosZl8zm40T|4bte@|N&pIrVN*JdI8Iplx zTeT%ejaRxu*|c*a54mAvQf>J8`)aK2ohFGXHLRHmZ2ftg>2y+zlclfZKld_Hp_YiHNZOO7_U)DB|AR?}EHd-k+2e z%TDymYaW?H7YvI#iADEVmC;Y4N`|2V3`ZR({+HS!!hCTIa=$A@)7Q+-S?R2_81@jq z5EBhFV?A=A1{=%&Y*~>lot4ZjT?E=v-g*;^k3(Q0$pnai`{cwHy5T)M76pGKM;ScG zPstYZ*Z1)c#OQ|Jk&o|=fXEfx+*$?($gL=tSYOC7NHbKe?rG9FIhexd-v3-hP7YQ< zE@rvXlYqQapNZh|(;^#4L{1N4{3Mhphm%x?Q-_G-VZF3mCJCoOWLF!+sYtLK7h|Fl z+*~2-YVhwD(d{vZH+mf}H4cHz93Eju6Q9xUK%r6KC;|};amtkTz%NurQ~N6<2Vsx^ zn8veB3w6=O^!|9mF9Rv?+;`1~-A3kgPV7w7GNW@-WMALW>sEPp&&U5>X$f?7IMy~R z>*!FE`#8^Ivp&(f?&!B(XD$4VFX((yoGc{H0N&ob^=&51R?wMjR34AO>EGSCRB0pJ z`gssDLO^#AkU?_v@xmqiVk{(msRg@vDO8bwp$U~q)J{lpRTrg^T&^Wv968d&d|orb z-K>1+@aI&9v<$hh3SpOjW{$an&!>1{&}g7au4VdO!>T#gS66f?b;%iDCp7QU%huQx zgDaukg6*nx-$}6>w&7<{SW1-aCWd*>gay++N#5%}S;NpOHz9s_#VW$&iteokHLfqp zu}?7(P|@_`sdb*i1?kazDqzA*JD|~s4~1UbX)D*w2-OV98kytD_-fT_-zA1+C2&}^ z7i~8qc$ZvWCP9@J90Lh8Rz}9b7;^n5TcR03C75^Hy7c8z93|iACx!*VV;839rqOCJ zqC^(PvX#?E^y(noST2rvuSxE#z)<87+8-ns2>*wtw+ySQ?ZUO!A{LA8M!LI8x&N?q`Pa+=iU4J_{G6L<}u?QW1QDHn32J!edib_^pa)W(1p0< zVgaEZNG)TkTIoDYp$*LR6}f=;0i4ZZ)E}aHd$9FpthXrtoh0vF?b&`*`@t%U@%mB6 z>~PS({XSQ-y)W-=)7Ht9&CWh&E9`NRz3L$6zcuc^#!l2nyO>N&w!D$7-~1_){U1xs z0D9fT!Y^;gDZK2&9^IItN8ju%O+@~1M99Dca+}T;pFhJp`@v(hm+jW=#pL6 zEE(ynCwQC5c%J`8T5;>vh%Pf%ABD09-EDJ6&I~YiTDPD6ltmN2Ofyhfb=H^i=0}Di^k&%(L zbyj)-&@GhvqsvLtQfO+QauKD!OYh_2rO>mm4GIq z+sW{YaKf10PH1l;rRJyg^DctgTq@}S|*f#2ZJ#ZXc$2-jUk z-szMC{6g<%$B3E^UNv>?b5VP+SJx5}b3*+4E zfrO<%Bl*7dg9W+k^mw0}iF41KuB2Xzadmto4pz}63UFcw-zU)AUw4Ec?BTV?kY~Xm zh#%n)5y8PK`vw=9M9$n(b}zC@#<}rfak@(ChOC2G2w#3M{xT|{p~chg}Z=1<%%?&=%gE)A;c=C9{$!ur*ajnF(RpT~K< zAl$sRtDD=ox68<9o9P#6WnznXj$44Tmh)PF7@vEZ_`gT3ZWVtXhSZ(k-pnRUbc#Zm zvU8r!(hzc3q6?<=dQ|lfU$fr9=zc`WCLlRH&zbB6fv~(ty9RSI&TG+@acsw>*PSlh zuu~jjDH*=F3BBzq78&W`^x)R2S@h<#?4bK%3pfndU#xHTALE}m3q zvUoq`hnViJqfFJ2mQ$k}`d;fNmV6HbqYP2YhM^#|pcEKM{LAQti=v}uwt<=g)hWI9 zE;Btz{;Z%Rjx_WI6xvWg18=`4R?EAUUjUM4s0?lu%idFgZ1pqn+NI%c8<3duXsk)h z>x!=$hD@14t+g#clb|9KcO(aO0=%&3BypTLwlHa^BvviVSN_&-VIiXyg4TZ>h4k*; zg@XHhu!yxWe5RHNO~0L_E+B~^IdGP^+aff7GIa|v@m@!*;avjJf@sD5hI|IaJrNIv z+4Vl7j{AIz*&?_bqs!d4V|}LGS;NX0=zA!CyKcEo*!0WlVn6pNo5DkRyQ*TVt9ib7 zZ_Tc`@v!K$c?+~He)jz6c{s_?2Ho#Dy$JX?9?UxF8VO&V`Oc1wR~-)AF^AS8um-SS zlD9@BUB!1RST*oRlA||#idA+$;tmZqHXE9 z1x|2`s6_Dk#6;BUM&~$BSTIF+w(a^~j zr{ge2VMYP?dCP*zklC!1e9%^!!g(kNN3ZwsTWH)ou(5FqqM*aB7q)=%1^-SwJq(sy zRi=zP%GHA{JazO6Dqn6aA50x$kL1{N^@9(h02|q7;idzgYm%;UAQLWym@sM#49k)H}<#tRj;(c(DH1ITpu;py>fWqMOA z<|`VYpl9tw=ub@t~!f zf@|$?+W+6=%H-x{doO(&hrzf1i}WBV`L^`2~ zx>2Z>%k$Kv^giA4&f%dix>Wo?UVQia+HjtPe=Nm<-2Q$s@3;o0}PO}MKty~A5;>_bHq3BwbDPRIK?Iy+q=myD^^t5$! z00n-?*__LC@se}d9(F{LrXF(f057-$~lw`uA6e}BJ40RhFr z?|2|mf+3BW>9NsWnDYrMJ`LnNWzwgg!;MWo?qxnd(v^k~z-7$8CIQD5J~!wbhmL1i zX*udPqEBB1Hsi1fj%VeMTa8B*`u6##STB1VciUf5&S&cGrTFX#Ncmtf6cNrVCngT{ zyyoCLbkuiWjl8DIM4Ul3eMa=U9Y($>xBRx44qQ3=^;jp{c{}`Ix4K^BMESet3o;r7 z3|zNj%yd)4ES^G{wwgcml zQ_uZTx;n1)u)Lz2taInA^L6+UT-&(8!=aa1@sPV;u(Tw5B~(LfW((|~Ed2X>%n}j` zg$wVF49fx%jB9kQFgGLFja zJQY;>#ah3%j$El$D;O5S#FLzj`VNMK>KM(CX?GDq7^c>&a_e=cFpWJkOgRml#<4I0 zRcbpG zK40P=R%c=374|A|&^e;Lpqe(m3(}*f(u2VKHu*L+keUo<<|?tulP#arMPrY4QrdL#xchxLpTZ>OXqFjdoS2q?7;Fp2;V9S za-<0&r>f-@=8rt~8?14AKNgryCRd>N>IlJDHw#gq4|KGa9HVITWf2gHOTl#V}RoicN+S*GPjN2PF^Y zfaU7V8Wfv=O$H|8`rfQ8{-Ashl%#O!O#|T%sOh$`XKs84%y{g)OB|yXusE+XgDz8L znnARon`e*7J(R3*^ETAF`^tu1kM}?Lq?lxl${en_BdHq;$#;u!KYh{rOK4hzk~&+^ zAd`&o1*{VrUvxDS>3ous8+z2U`>n2dHR3Jn2|z|?s=4mP3Aq9h8@T+oGLBRP$X#I- z!z-6$YBq=Jbzq_YSWcu{r2kcVIKLgRzIeokl^iNE?>fUN953ral zPw31ZkOEcb&-P%Rt-q&l627BuCCMOV@&+snuv9=I6MQn*)-agbNIbndOdhQsF?DjS z;iE$78f8oMPaF*j1)9IZvcrndaKGkBxrRxqQmt5#6)7Iqxt8wq z_G@G;dmMg#23&nSEiW!5#DTZ!ZTYcrC)dq%lDMbJ1L&0%~3GL96Zg zQtV3?!JkTG9hQ$Up5GYiU}^1ejL%R?>B>k&@t~xe`%0joTHlY$It)Ik@Hue7QAoX1 zJVW0+dObg5ENZp6_fTEEAAA0&i$Sn>_4T_^9GJU#fhMsWjQ(iTxVi4-P;h8ZmwWVw z*Sa5ovQAuI+cC|P>xImC4U^>^nda!8oM;fAB2%ue>U&NQK$LaC|b*l*n0ok-#i6 zq~XlX>hr9`4&oCa+K4*;QjxAKmbxtAkYs5@qU@uOGHpKzkO|E`PCYPC?0!kDrwNY^ z$6(mk7hYU`s?O^SJ8p(A{&?P@{+!qn&=PQ>{7iH6^s)*NI86X29^_csAWduk&jzL{Z;haxq?D71I|z|ic=a{rakye-e5VI(cbd|2?K6%bLA2)aYjMP1pH z@(0uyAqV zFyS0z3c8;@$O*b%JqULvO8neqej0xRBC6PF?4^S*nkQ$X zmlW1j`|)FkkgPK#twCFo5#&Un=USs2hv4vzjImJhg)CsdM6jCUY*i~AeUWjcI7Z|Q z$|yFhYK<{4@&guQjV2E$1htm_3=f_shn5v z1ZV8hw0kDxI)MF)oS(2%P6F)wBB(zGC@;0^K-v2Omm0Xpt8m`IF_Z*54^N5u&7a)@ zxyS3rzfRJE?zh&AjEvYk1an*i_BdY~^#Ub>9)G;8!1S(@y*?ZRX(kM9yQ}~2$v_D1 zN$8QoE~FX=maJXB4bfxl4Y-?s!021`7mz-@ zAlU$e^5BB$R><4hH>yD1NtYdnNiD@)2{3=EuDN6q-sypETjOWh-+kkN4(q?TsD>do ze<~brhuPg0sx=`aJWXvi5M~3lWfdb2uOsWJkH`+yHaD)|G|kkqPh^P*4u5h8wdJLJ zr9qO_H6=%uqrkXP2jC8wA0hQP+QKd2jwNAVuA@>ADBvDnL=tknF>Jm{xPn=;ZwAR} ze3N+Bj&4+{BF=@-+40IW*%w*b{>n%OgVc<(jVonH?~<;+)iOqs!&?$iGZW~ro7OHa zFcDkxg_yt?)`B*fsF-QRC&mhbnt1RgIQbRVzfS>WFyd7BH#%U6${z~;JMq6^Ze(h3 z5o66qZ~Aw}a^!qOYcOpweIHc)K5~PB!~Qb@07Hr21e7)Aea>w}nGXskMY8tx8V6bDgg26(4$730g&mQTY>TQJL~^HG6# zv$GdwfV~kKP{9*nRAd6)!;=GeWF7lIw&`NWG}8a z{@ScXWPwl0-}Zyvf+iJf@X^&LuM$1IgeQ?pPK`7#K9u^Y}pT(QFHlBqoMbH+j1(k0y zN%iRK#HV8E;Dv=yjPICstMPMcquG5vW;7lB5NhlQ=_egzX$iDDx&MJ)oY#I8CaYty z%Q?l;_y^g>+{tGvS2pN2Mp-aB;1L_`dEb zp7*rzd$YF)KtP&-z1gYCUvks~EthSM{N^c3_uY~{B3PC<@gCeE09BF#!ymO0!N4g` zg%?ux`;^0yp9C%22K4qsj?Kqrwe{6afG$l}R&EaGKT}}2n41Nv2|@oJ8aIBED)2|y zMAD&LVZY{hm(YrL3*9}^LQKA@J%*VGQyAGBoMv3xHw<*MZ`E^gy*7!@veUoVG9Q0#OvF zQjL)%NByQALj*Qhv&@)7adn@Dm%n0sX9}0&-$&dRB5M&{J!nOE@*Z*O`Wu>?x_SLo z)YNXg#FHgY*ym$S!y|K=XP)`x#wShUyv(e3rSGv_t~&w>Z4U8hx9rEmoo(v|TlGLc z-R8?lpMk9u7S>D=fU`yd0`@%Hh^I5~;n7si8+5fpY|=%IIokokMy2U^D(Hyo6D)#t7B4^?s^I^%^w5dL0s(@X}bLHtsR}u#R zXa`wtip&49>QC{0K!0Hf*y?$Ex*mG_!|oGpm>~Oa_R!Y2OE`FjB-A=)@RL(Rn#o!0+1Pt`5%V>?s6A=X`Y1c>ZY z1!>a7T<5lk|1FHR{qw06xPUIF6Bk6$1Loh5FZ309)}7vocpT2p_SyR6?vw5dbsePh zEl&qrYkdK-x@KZhk{HjazXKCQo|4O?fBn}pd>a6tm*P%JIk#c|3s;wc12Ou4Kxpzu zDPAuAwuz<@xBkj6hC+@G%7Z3k+s=?jEH(k^=XB$EvvN6S^PxbY0r4cq-AokM$9@}bD+n(XY#p@ryBw9zUFS#!cn6D5JKpaB;B6=s1T>78XA$LtJd z8(2#m0zwR4VFQQ0Sag1O^$*nijo9<`cv4u^wA#Td+wf=(KYeZ#5GVEDkfx9>Fu)ZK z1uDX(HR|`%wCNytxV8R0JQ+f5OYya$1bKtnp<>WWE&>$MF_zm1vqK)tQA#q}6vA8W zsRN5KQ6^}m1G&@yAHs=|#386;N#t7mb6+wJ57DX!%?Md0P-#NxI;2u)58hgC;*VlJ zGqLb^C%!d6fNBbkvnXXpbKqu%)6S-f`8`S>VTpUql|N_-9Y+c>M6Q>wvo(s;geygh zvz4$K-x?0(KyRDGblYcR{wpS~AHoU$S8RnTi?T z4}aRsIsPo#e*ei<-0;KN`~Eg`+5ueWSxYtA!Olf}YR*oj3)= z1S}|bCdwT7yp1?HeR2<6INFp{UK23ef?Ll{d!p;9Gh@YDVu(m zd?+GxDn8T@T~DGpLhi7IUd=MT^+Z!b#42R28Jxk$Zi4!bmYt6)tlmhrl@*v8s_11( zmuX6y(>%kw&hWH*psIc(yw(y1tisRGB{HB#@S~`ze;AARcPSqWs%|^&_Kc*~HNXso< ze+sI>74fGvMh&Ti`9UJn)F;#uU5XLR4_2T!q%+o+H6^)HoMihING z?7cpC*`6A4-Oxu&|8Wp;{&CuD^LQ{^qfIX-q=Fhw$XWfvz%>f>UcL_W2O%S4dzCUrtAakz`fZ5MlijWlh$ zw`2xhCr5#=TYX`cO5x&`jUNRR^Zbv9C-G08cmFa>KRk$4NV!b$3~)c0|Ci_D1A)3# zjt6hi`j|bd@i+Rje`$G1<`nuLH~Vp%*<91OFqpW|&|<|9jeb`-6%<1cZu1q*mD;ec3k4{ep-? zFd=%FcS6%ejEVg#eSn``MgpLBI_ zI4S4;hz<*doFu795Q72BDYF~1u)d7UA1=X4uBFvpY?wiREpd~H+9@xWCGh+$E5I>R zYf_Ac^5gt?U@2e zx$VxmliQ{5fnSp>#ydPu+ArqIuoa0X7k1VSuQY0wL~uu3%uRd<;7T9J8x+6=5*U^DA#ddS;WRt#;7vnh$_WT7{9f zQrhliNLcWka%IF*JWs|k#+fVOB0CYxzFU5b;~HuhY88l7z?@+IFWG$J2szc7IlJro zHSgnX>o zzWUScK4kFWs>Hx@YMb)#Mu(dS)tPD5=v2Zko*e~17EN65CVo1^0acPE^X!2;Ft41| zH;Ckc4Dx60M%P32L2WLdlLrO*)ewEM`|*JdF|DY^sdL`|9yG}S9&#WDnljOVI9rY5 z(;$XsG2W60LAQB;fKS2PTJXsY*hqq1B6m1xLf9yWNQ7c~hv~HIZ2UjybFo12?w&fr zA}&j4dOqSNat`>sP7ZNye~d$KkU84^A|?Ol?vwVO zhNEniHU!<)fse&aEGzXW=H&z&f5vaPl5EW;*zR=9(V3~(Ic&JvIMoQz zi%f!LhlG=E`kuKVuC<>r`IjrVv3UTyZ~WDIlQtq0Vpt~!sFvn*{fat+cx?)%Pjgk zL7Ez3?*4%GXG1J-p|N{7y`6X&DT=~qDoo`#HM?dzha3zX+EjK}qNadGx}cM#ok=`| zE|i562a+N-2~Ec)pi0^@{wuD4sO&rB!dPNj#S5;5?Sr*!2AxhIHnX$#d4r~eoKL|M zUT>DwwCMz}JJoq|?O$z=1RQLO1R8D7)o+X)RGp5MS^4rW zP`#ze-wf|gLJ6Ygs%58y^;cf|Q?}P4I8M(B% z$jUwu?-R#Iq}dj2lxtcEsya?=5%~?hy`afU`95j`MJR=1z=K|yGnz4bT+lU8h_2n% zZ&HcxZXZ}LjICzmxdh(K9;K=w$PZ4#*%`sdl2eNxtgV+K<@u%QY47!23CYzUg-X?E zmHwiNq=i?hXXr&hWDqiE5cj6Ioje_QSitkG^6)kxBMJV=5>9!plpyoH*8dboBi%$~ zEsPwB;f0fwkq--YfYYGFq(f@%M3+CN3i_w2G5#rfmBL+@A(JnvaG}3b8*~PV_CNq| zYZhVa;=05IK>u^GyGLZp8FkVWf>Nqk6L~`W@0v`EBnP&ncl}$D*jGyxTQoxg3Ds?! z!yhQ561C5MnEjFoH0+JD(`N3!d&Tw9;3ML%$&BN~Gl`eiBr^7AmY=APg`GPZ4$Or0 zIYkk^Rv7O-V+p>f|MQxL{TH0yTXp<5rd-_XMFE$M{d#w9U#r_$<0{|?=m^Y-+N|De z5?%`?e{|}8L4DXieZKkcv*@F2=YVML)Omw?{qR1>;{P9rVC4ULd&SA3Apb^w$$kDS zXVf@^HgqnBK;_Pzjr4+w+`RGCjU?MtV)8F_(XPXyqS**%sYNsPqdykaOO1fn&I|iS z_s<}<)gj)Y2FQuCM-7sMeXM5u;sK{?+-dO1wGg@lbflh>2=h0QjnV94LE_11Cb7Nj zuD!P*kXBheTAlsm`2LOry~j|Ed$aHLUM?6-P&A7kq{jRS-a1{hIcqA*};9kU50x1uP@ z(}>EsuB^H7{zDl_1YF@V^cj;a06!Zni2K{e#@_+fW+w2GQ!M52gcE1EfR0gMEyev} z{wOazti$uqa-G@z%t&H2sc2wlTXS>cuS7vU?3D%Es(AoBcMk@>AAo8 zBIP-*7#Kx>4X5=q{)>Bee=3K`uIQG~42|yP6(*KBgL^8clGLOklX9(#6Gak(`q5@j zA5O&_8CTQmG|O=Qx1_0y%dE|NskS*jsJ~YpT_oVN0RT>Pp>xnG&E6n#T0dZzjN8Rn zlg(A6mWOfrOUPO@c)IRa2f+7DqfvBY7`W&s3h>Q4_Ax>VpP4EDGuTPNEZE{Mw%-wp z2Lq}XZXy^H0#gqjNM!`zZ_EW5pKC)0;OqHakuQeaivDIe^S7d0-9R`SkgcXR5o(SH zpK{yovhJ^6@*st99LR}nx?6!?@`WV%{qNcTONE$?oXX6fQpWK6Z;tr$qelX1-+U_b ztSZ6^3So2?k}x>f-b1GSDZ;*lG<1Wm5=~YFmvjpmh9al-llVP1vWMN{;@=zeRTW16 zZ)(1o3Gx;S@ci9lgKZvY5o|x2ho>;1w1A&3@X35!+#Wl-K17IxABQ7pm&(ChlE*5p z6ext?k2O`95hRYq3cZgw`pd3~tf6+s@u3SyGf1n9`6^Qu1d11=q1_OgUuNe_uoblzxD8iTQCL-PaZ=hf#8f!lnWGu<8NrGOTf^cCK&ppYlhV^or zdf_jhh-kHDXrq$txum^8$IK!8VH_X=ac`2qe_)X?rKYRK9O!%w-HEkm8$6T?ZU;7L zv<+5B0t%?s?ET6#Lg}b~QHvKDhG4*SIfgeiebNtH02sB&f)#m_IXIear~*an%)h3N z=r5$tD#3~{Zf(&e7ikwZi49%w)7Mt=}UJA)a;?qf%f;*bpb(f=C#R67C7K{n{WfATrB%L;4F6$&rr`d6mk z8pa)FnPB+e_q{0t_^^sTT~uV@#tzc~7sr64G7iVFxVlBr*9G)IY3#zK?$<83;MZp@ zBXdx`+u?@YkG(Q7T;Cmw@IWXo)wCIO?{MUkA-IxWZI^|cgMB)R8!>LGuQBq>ZK23ppJ*6aCuVY@0?%BLG`ZGhdC*-6)W zrN#Yz4mbXgbM}a+m1``#pP7#;-NouuRehzq;3t@7t1LI?o~I=J@u`n7%y9IQC^$k;*` zFj9s-Ik+zfVyz5zl_Z$B7~wXgA^oz2#xjmRk&2<1v>^O8l+?vEmI;v^*EU8e8n5pC zDMgWt^!c+N<|Bg1UkK%T|K-6PR49`E7t}4nRYCjfZnRKD`2{8qRb{gD7K@mKNjFY! z>aB6rxCy^3hVN*far9OlihN7d%QO7>FGWma(x&h~e$|1zh7X5f_an-ABf@uUVPYpE zANlk@yAdN1^M_wOs>|I7uJTH^8IG8~fG$(dV-kB1{%b(F=YC(XEm(J?{HU(MMA7ey zE8|vZgJ?3ETx>IPwW9l_neAf=>Zlki0gK(f5?RL}WTE8UTF^}il-$U7Ou`aGZk|@p z943wSAw}(fCtfO;Ethj{w9o?%QPHf~PK+7Smw=H~9lOYsCzf8vwdq?Ja%YlorE-pq zuaSZeTstrI*q;T*Ku+*}zmK9$YF|8~aQ=NZ3+5xdJefEXOZG)37Ws+o-S0y%uTHcx z@7Xj)F3fve@+T0sDySQp$=?DSS;~~i@crUtPtFf4P zK&lWZJo>uj&0p6CiQgm+E&OnnS{W0 zBxdj6z(8F{2%!a2)o3@G3~2b~Tt_0UDKM}T_GXB5l1u$tQmLN)u4y3F#EYyPY5aja zMxErnCyJt?V(D>JXteX;ynLfB3&vb@yMey%Uv^*zpXNLyJT3fmer$Etca_(JkmJ^y z(G4XL4J0vePqwvM`I|8g5TUY7f}g3k`8}%R5lFp3<~;xTx61gP{+4cn8&G6mfh80m zShLFX3If1$CV6hR?ucL8U8CLV{d#|4(7=VzX$<$P-K=cCzYQ)GbZKqri zI9~IXSpTvDQ5G3n%_y5z)+^i5=k`@&R68CV9q%9H1OlLLi+)iY&tDL89%G(~d~_tw zBwU{H-$S`;E*z`62oqaE?or!Xo>sk6jqs68MG#G5_MKJH<8h8UW(+2Rb8&|zGoly{ ztD@d;^;L6eB3>pu2BadZ@wH7cOZs0tfsR#8Gi~Z7%|0*`EdAW!sU6VMrBC~g+tiv+ttLc!DVPW5^p-o2` zuAcJsVlfVOdYHyh-z3UKrm*>+{9b)K-xs~itRG@~$ZfgUb))mFVaa>{>#S0UD|XRH zinhJ~uROglQpDouB>_3IJjyUuBc=5ZF_^7iVHhZbAO`T*;Y@bYt{5Hyvyvs2 zw2R$Jc`YftK`ik0801r&+)obIzVB*_BZ4Ts?zn&Er-%s3qa&c54&5mGQI5G$C}j)8 z8ur9zDG;7$_B6Dw8qOl#q)#>0@DAUPGtnuP*!YUbe{oY-iOM=xa^ZDzUFs*rS~IHB zu%xtG_O0$(CP>Fh_PHYyY&yz#J?|)VS39+2uP)gFcHq>szTi3)Og^DNx1OiGUbUZ( zGrH5Fqxo%;OLAmty1JR-m+t%w&uB|slcWd3&jXA!$Pzr9NBct+fwVMHhKT(M`Q(Z) zcG0=P*ILY(nHl;%B-nZ+O}g4sKp z3BT9h0?}pGoiAaKf-XNE{%m>qUaJHe z0H&l%bL(%MxI(%Em~_9np% zD3n7gNw$p;Zw*{sg&1<^mQSvk=ZU$|Kk>1XUM;WQOVmu`Uqp+p)((*(y;9-)3CO#O zWC{$xOs~);7HGurC#aU$FCt_p&}h4QSY~si0*Nc`Rb8ra&Qw@3eSX@N9n#Bwy+z&6 z%;Okzm>TJn@xCgwZX>oo7aDP!1|9nf&V9^bgwD6dv0AS&QW*z)t&y9HYFgM|hJ)RB zdGVSPd4~1d*S(8F-fw~+hoftC%dka%FE08CV0E;#-cx?ZONdt|@_tprOyt4qdEn_` zn`0?4mmjF3-9 z(zSmR;bHC*iai=Q`3+$_yG}JN*m~3c?}_6(f4bZx6X}nM1}BmEj3m;ubZy_gyWh>$ za{yxAX%$RNMIUIM%8Ry$isqBap=fX+cVhGEPrYqU@gZZJ&ZcJ57W)MGsS;nPS)U?! ztDg0FQKHyETnrk?HrQ}r1)2~cF1c-y!zLu%Dm$}b0D*|t5isDuz==NKZaqrZgAGWr(ESEg4n03R0-@9E-TxSj zOVTK)@EF=>b3G8u$u1 zO0v9rjG@suyhp~~F8@XQcH9h=^WJ9uuLk8_6bd@~3l@^&=+ZvQnUohIhEdHJKEg}O zNx@O3* zZezs_juI^E%MrYgMCWTjesEgjN|qq1nU7v#rK*jl;OvsGtvP}X8$%ktlxofBr$m1@ zeS)Q(Lz609GmlXOCo?5oM~aO5&&+wcQAk+{@I#Yed~(C+;Tyzq@o#<+85?6{5748k zLgTo~OtM0oNP)xtED_^QbUP9SI>pa0dC-myL5`Re$1iRPQCmta#LH4-v4L}(VtzCz zBnh3JEK~s_5b@WQ7$+!$;@KJUt45&7@(;xlp>YxHU0dh^M5fJ*<_87b?=KS8RS^`S z^$7Nh#rzq!LiY@C~{29Aqa%v)1_?;?R zNie4IQDo=cd0ihZtB0#0O)X(=pv#=b=*mQw1cz+YEX zc9F3nPWuCTG$Z+cB9|7-nS?^uOTFrbsMn$pDYEDb(C^-uUl7uIr+z`r88rtu3JO(@ ze4Ko0V}k1FAP}Rb_6Rmm~kw9pE&sVfq-#aMT%5h$Ha9Q7eCs1>0| zJ!y;r&Oucl0-Dl)@4x9aa`?0r2xTknMIPJYgkvVd6d#atXxP{;>GUu`#GanRvnx-& zsMFa$8SETR``%(7#WB*KP}oUqw)OL4vo;hHNGN1q37Roq3n{~rQw%mE&bqzUi0&R$ z>{}(@jscIQ(?NBv-nHY6V=nlg!b#@F zD8L?v1$;`zjBzcYKaoe`oO07_Y#vkD0&^?cx(6;{pWaC`=^iZ@dj=M9aBTwXl*eIv zaj-=FT!hQP3K0p$k%Td~-{3ZOEeCzEpfou%C zB~bHBRorB`zq7^fy z0CU!Xv*e-XBYgY`*iq21x*fRpZJy@=+sS>)-I;%B>k!F*ZUqzChr^j-vD}c~2x)kH z(po4Jyjr<>U)^*{W_K2FE8wAkb(><>boL-T9XQo`_rB)trTXmb>BW*MggK*-H6t8D z)rv33v3ph*@WuJ?lRVNlUA#!xeN@$e4!hW^`RYu1$9YT@G`_tdBI|w1;&c0Imr~4d zC*sa_GK}oYx{1L$-fa-6M=v~Fo&A|NoFS4xPWazQ`p(nrRA&xf0Fk6gDa`; z*1gC8P*|wPGYc50Mq{ysc;CN9wUO_)77|=% zRq)4l6oQ!&WwY)+V<*(mm|;m*QzkU0CG_KnG`%Fs} zr>&)XKd4su`SvZf>ml)_rH&(#9U9krao!QA?SFcgm{X8=)S7T4$_aWd0!_262gkhE z%g+M$sQCo!aDUcH$jN>OGtCR;HxcTf9a(A94E%XiL86{v6Vk5`(JPAyW$LV6vc*87 zqeH0?*A9EvL;Lkl%4|dfiKDB9pU_p%LklA=og6Ua(}G%+J?|M>$q93 z-G_sBO%CuoC?=NKy?1_j0d#}ZQMz#}FY=2#%VlPbPN6gEbWRMCDv-hZXAMJa)@=Cw z+OciRJ+{JF3`T{dKgbGnH7SCK;Ybq>AqoBv2n ziWXZ!?8mDb7WlQu+4SJEae1ycS|118lG#&JtScu+jYo*O51oTc_i(p2S$22J9Uwm*E*h~vf0d!4+|hjXdvS6E?CCZStDM=q%W`_H{dJ;9i!ErcBKCBzLuG|3+EgGq0--JxK|Q6md#>R9 z8dxy!7lz_4k~=}%$QLBO(~U2`l%2tu^@_QK?k6~t)}(Zd^{;|M7>AR%m5Tqaxneub zwbL|oDTr7!#)%mg?VR=oW3aC$NVN=oVqB{fy9`TA(xHHBpaVx*oR#r|LyjoHGjofV zlbgT;tgl6)UrqP7p4;M{0pcA2k((_1hi`w*0I{)X^Yw_&$hJ@DjnmHD3bOsw3l5c@ z>8^l`Pe!j?WSVi!a{nHU-g~}T)krkBD$UP*7>;KrE*|R_d2b7E5l%0AHT#bTBdsfT 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

      qA-r;>wSy}k7u5a5&m_e=nhklb&F}G^Unuk( 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%0D^H8_K`Q_j8F4la;zWQU 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 literal 0 HcmV?d00001 diff --git a/app/static/img/logo.png b/app/static/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..605f9897ebafe6c0317fc040639e6bef75f85d95 GIT binary patch literal 25811 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 literal 0 HcmV?d00001 diff --git a/app/static/img/no-image-icon.png b/app/static/img/no-image-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1849ae7c14853f799495d776f67b2b9ca6c0135c GIT binary patch literal 20003 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 literal 0 HcmV?d00001 diff --git a/app/static/img/no-news-img.png b/app/static/img/no-news-img.png new file mode 100644 index 0000000000000000000000000000000000000000..3411fda1b33cdbefcf0d0219fd0b1a9569ff7571 GIT binary patch literal 17922 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 CpQ{)E literal 0 HcmV?d00001 diff --git a/app/static/img/toplogo.svg b/app/static/img/toplogo.svg new file mode 100644 index 0000000..9e2ec89 --- /dev/null +++ b/app/static/img/toplogo.svg @@ -0,0 +1,482 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/static/js/app.js b/app/static/js/app.js new file mode 100644 index 0000000..0ab6635 --- /dev/null +++ b/app/static/js/app.js @@ -0,0 +1,79 @@ +var app = { + loadpage: function(modulepage,modulename){ + location.href=modulepage; + //console.log(modulename); + //console.log("Load module:" + modulepage); + // if (modulename){ + // document.getElementById("modulename").innerHTML = modulename; + // } + // document.getElementById("moduleframe").setAttribute('src',modulepage); + + // if (document.getElementById("sidebar").style.display == 'none'){ + // document.getElementById("main").style.margin = "0 0 0 0"; + // document.getElementById("modulename").style.setProperty("margin-left","0px"); + // } + // else { + // document.getElementById("main").style.setProperty("margin-left","210px"); + // document.getElementById("modulename").style.setProperty("margin-left","150px"); + // } + }, + // sidebarclick: function(modulepage,modulename){ + // app.loadpage(modulepage,modulename); + // }, + logout: function(){ + req.reqdata("POST",location.href,{"logout":"1"},app.reloadpage); + + }, + + reloadpage(page){ + location.href=location.href; + + }, + viewpanel: function(pnlname){ + let panels = document.getElementsByClassName("panel"); + //let toolbars = document.getElementsByClassName("paneltoolbar"); + currentview = pnlname; + for (let p=0;p 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")){ + frm[f]._flatpickr.setDate(data[frm[f].id]); + } else if (frm[f].classList.contains("timefield")){ + frm[f]._flatpickr.setDate(data[frm[f].id]); + } + else if (frm[f].classList.contains("choices__input")){ + if ((data[frm[f].id] != null) && (data[frm[f].id] != '[""]')){ + if (data[frm[f].id].startsWith('["')){ + choices[frm[f].id].setValue(JSON.parse(data[frm[f].id])); + } + else { + choices[frm[f].id].setChoiceByValue(data[frm[f].id]); + } + } + } else { + frm[f].value=data[frm[f].id]; + } + } + if (frm[f].tagName == 'SELECT'){ + if (frm[f].classList.contains("choices__input")){ + if (frm[f].multiple == true){ + choices[frm[f].id].setChoiceByValue(JSON.parse(data[frm[f].id])); + }else { + choices[frm[f].id].setChoiceByValue(data[frm[f].id]); + } + } else { + frm[f].value=data[frm[f].id]; + } + } + } + } + } +}, +fillselectlist: function(obj,data,vidcol,vvalcol,defval){ + var sellist = []; + //obj.clearStore(); + if (data){ + for (var i in data){ + sellist.push({value:data[i][vidcol],text:data[i][vvalcol]}); + } + } + + obj.setData(sellist); + if (defval){ + obj.set(defval); + } + return false; +}, +// fillsimpleselectlist: function(objid,data,vidcol,vvalcol){ +// var sellist = document.getElementById(objid); +// sellist.innerHTML = ''; +// if (data){ +// for (var i in data){ +// sellist.append(''); +// } +// } +// //obj.setChoices(sellist, 'value', 'label', true); +// return false; +// }, +savefield: function(obj){ + fdata = obj.dataset; + fdata["save"] = "field"; + + 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; + } + } + console.log(fdata); + //req.reqdata("POST","db.cgi",fdata,record.saveresult); +} + +} \ No newline at end of file diff --git a/app/static/js/formsave.js b/app/static/js/formsave.js new file mode 100644 index 0000000..648fc1f --- /dev/null +++ b/app/static/js/formsave.js @@ -0,0 +1,90 @@ +function saveform(frmid,aftercallback){ + var flds=getformcontent(frmid,null); + flds["fn"] ="saveform"; + + //console.log(flds); + if (aftercallback){ + req.reqdata("POST","index.cgi",flds,aftercallback); + formsaved({}); + } + else { + req.reqdata("POST","index.cgi",flds,formsaved); + } + return false; +} + +function formsaved(data){ + var sb = document.getElementById("snackbar"); + sb.className="show green"; + sb.innerHTML = 'Donnéen goufen gespaichert!'; + setTimeout(function(){ sb.className = sb.className.replace("show green", ""); }, 3000); + return false; +} + +function showsnackbar(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; +} + +function getformcontent(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]; + //console.log("field:" + field.id + " Name:" + field.getAttribute("name")); + if (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; +} \ No newline at end of file diff --git a/app/static/js/module_global.js b/app/static/js/module_global.js new file mode 100644 index 0000000..1a13d38 --- /dev/null +++ b/app/static/js/module_global.js @@ -0,0 +1,37 @@ +// document.addEventListener("DOMContentLoaded", function() { +// //console.log( "Iframe "+ location.pathname.substring(location.pathname.lastIndexOf("/")) +" ready!" ); +// initpage(); +// }); + + +function table_setbounds(tblmodule){ + // var cols = $("#tbl_"+tblmodule+" > tbody > tr:first-child").children(); + // var colnum = cols.length -1; + // console.log("childnum:" + colnum); + // for (var i=1;i<=colnum;i++){ + // wx = $("#tbl_"+tblmodule+" > tbody > tr:first-child > td:nth-child("+ i +")").width(); + // // wx = wx +3; + // $("#tbl_"+tblmodule+"_head > thead > tr > th:nth-child("+ i +")").width(wx); + // } +} + +function sectionload(sectionid,callback){ + var sec = document.querySelectorAll('section'); + for (var i in sec){ + sec[i].style.display = 'none'; + } + if (callback){ + callback; + } + document.getElementById(sectionid).style.display = 'block'; +} + + +function emptyform(id){ + // $("#" + id + "> input,select,textarea").each( + // function(){ + // console.log("Set Empty Value On" + $(this).id); + // } + + // ); +} \ No newline at end of file diff --git a/app/static/js/record.js b/app/static/js/record.js new file mode 100644 index 0000000..0831ee5 --- /dev/null +++ b/app/static/js/record.js @@ -0,0 +1,125 @@ +var record = { + redirectpage:null, + table:null, + form: null, + dialog: null, + data: null, + parentid: null, + add: function(page,tbl,datafields,idparent){ + if (datafields){ + record.data = {}; + var adf = datafields.split(','); + for (var df in adf){ + //console.log("dfid:" + adf[df]); + var cdf = document.getElementById(adf[df]); + record.data[cdf.dataset.column + "_" + cdf.dataset.table] = cdf.value; + } + } + if (idparent){ + record.parentid = idparent; + } + record.redirectpage = page; + //form.cleanform(tbl); + var dd = {"ins":tbl}; + if (record.data){ + dd["data"]= record.data; + } + req.reqdata("POST","db.cgi",dd,record.afterrequest); + }, + confirmremove: function(page,tbl,idparent){ + if (table.selection){ + record.redirectpage = page; + record.table = tbl; + record.parentid = idparent; + document.getElementById("dlgdeleterow").style.display = 'block'; + } + }, + remove: function(page){ + req.reqdata("POST","db.cgi",{"del":record.table,"id":table.selection},record.afterrequest); + table.selection = null, + document.getElementById("dlgdeleterow").style.display = 'none'; + }, + edit: function(page,tbl,reffield){ + console.log(page); + if (table.selection){ + //record.redirectpage = page; + if (page.startsWith("dlg")){ + record.dialog= page; + record.form = tbl; + form.cleanform(tbl); + req.reqdata("POST","db.cgi",{"get":tbl,"id":table.selection},record.loaddialog); + + } else { + var refid = table.selection; + if (reffield){ + refid = document.getElementById(reffield).value; + } + app.getpage(page,{"id":refid}); + } + } + + }, + duplicate: function(page,tbl,excl,idparent){ + if (table.selection){ + record.redirectpage = page; + record.parentid=idparent; + req.reqdata("POST","db.cgi",{"dupl":tbl,id:table.selection,"exclude":excl},record.afterrequest); + } + }, + loaddialog(data){ + fillform(record.form,data,table.selection); + document.getElementById(record.dialog).style.display = 'block'; + }, + afterrequest: function(data){ + console.log("redirect:" + record.redirectpage + "Parent:" + record.parentid); + // if (record.redirectpage.startsWith("dlg")){ + + // }else { + + if (record.parentid){ + data["id"] = record.parentid; + //record.idparent = null; + } + console.log("redirectpage:" + record.redirectpage + " -- " + JSON.stringify(data)); + app.getpage(record.redirectpage,data); + // } + + }, + setValue: function(obj,newvalue){ + if (obj.tagName == 'INPUT' || obj.tagName == 'SELECT'){ + if (obj.type == 'checkbox' || obj.type == 'radio'){ + obj.checked = true; + }else { + obj.value=newvalue; + } + } + if (obj.tagName == 'TEXTAREA'){ + obj.innerHTML = newvalue; + } + record.savefield(obj); + }, + 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; + } + } + req.reqdata("POST","db.cgi",fdata,callback); + }, + + save: function(tbl){ + + console.log(data); + } + +} \ No newline at end of file diff --git a/app/static/js/request.js b/app/static/js/request.js new file mode 100644 index 0000000..8564efd --- /dev/null +++ b/app/static/js/request.js @@ -0,0 +1,128 @@ +var api = location.origin + location.pathname.substring(0,location.pathname.lastIndexOf('/backoffice/')) + "/backoffice/"; +// if (location.pathname.indexOf('module') > 0){ +// api = location.origin + location.pathname.substring(0, location.pathname.indexOf('module')) + 'api/'; +// } +console.log("API:" + api); +var req = { + multipartform: function(url,frmdata,callback=null){ + var ret = null; + var rdata = null; + var async = false; + if (callback){ + async=true; + } + + var request = new XMLHttpRequest(); + + //console.log(frmdata); + var sendurl = api + url; + //console.log("sending URL: " + "POST" + " => " +sendurl); + request.open("POST", sendurl, true); + request.onload = function(){ + if (request.status >= 200 && request.status <= 400){ + //console.log("Status returned: " + request.status + "resp:" + request.getResponseHeader("Content-Type")); + if (request.getResponseHeader("Content-Type").indexOf('application/json') == 0){ + var xparse = JSON.parse(request.responseText); + ret = xparse.result; + //console.log(ret); + } + else { + ret = request.responseText; + } + if (async){ + callback(ret); + } + } else { + alert("ServerERROR:" + 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(method,url,data,callback=null){ + + var ret = null; + var rdata = null; + //var async = true; + // if (callback){ + // async=true; + // } + if (!callback){ + callback=req.asyncNoEvent; + } + var request = new XMLHttpRequest(); + + if (typeof data == 'object'){ + var xdata = []; + for (var i in data){ + var value = ''; + if (data[i] == null){ + value=''; + } else 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 to send: " + decodeURIComponent(rdata)); + var sendurl = api + url; + // if (method.toUpperCase() == 'GET'){ + // sendurl = sendurl + '?' + rdata; + // } + console.log("sending URL: " + method + " => " +sendurl + '?' + rdata); + request.open(method.toUpperCase(), sendurl, true); + request.onload = function(){ + if (request.status >= 200 && request.status <= 400){ + // console.log("Status returned: " + request.status + "resp:" + request.getResponseHeader("Content-Type")); + 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; + //console.log(ret); + } + ////console.log("data returned: " + request.responseText); + //if (async){ + callback(ret); + //} + + } else { + //console.log("ServerERROR: " + request.status + "\n" + request.responseText); + alert("ServerERROR:" + request.status + "\n" + request.responseText); + } + }; + request.onerror = function(){ + //console.log("ERROR: connection ERROR\n" + url); + alert("Connection ERROR!\n" + url); + }; + // if (method.toUpperCase() == 'POST'){ + request.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8'); + request.send(rdata); + // } else { + //request.withCredentials = true; + // request.send(); + // } + return ret; + }, + asyncNoEvent: function(data){ + //console.log("query done"); + //console.log(data); + //console.log("done"); + } + +} \ No newline at end of file diff --git a/app/static/vendors/flatpickr/flatpickr.css b/app/static/vendors/flatpickr/flatpickr.css new file mode 100644 index 0000000..64eb467 --- /dev/null +++ b/app/static/vendors/flatpickr/flatpickr.css @@ -0,0 +1,784 @@ +.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/app/static/vendors/flatpickr/flatpickr.js b/app/static/vendors/flatpickr/flatpickr.js new file mode 100644 index 0000000..c989306 --- /dev/null +++ b/app/static/vendors/flatpickr/flatpickr.js @@ -0,0 +1,2596 @@ +/* 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: "form-control 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/app/static/vendors/flatpickr/flatpickr.min.css b/app/static/vendors/flatpickr/flatpickr.min.css new file mode 100644 index 0000000..46c57b7 --- /dev/null +++ b/app/static/vendors/flatpickr/flatpickr.min.css @@ -0,0 +1,13 @@ +.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(.23,1,.32,1);animation:fpFadeInDown 300ms 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 .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 .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-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(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,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 .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 .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(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: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)}} \ No newline at end of file diff --git a/app/static/vendors/flatpickr/flatpickr.min.js b/app/static/vendors/flatpickr/flatpickr.min.js new file mode 100644 index 0000000..9418133 --- /dev/null +++ b/app/static/vendors/flatpickr/flatpickr.min.js @@ -0,0 +1,2 @@ +/* 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/app/static/vendors/flatpickr/l10n/fr.d.ts b/app/static/vendors/flatpickr/l10n/fr.d.ts new file mode 100644 index 0000000..7b51e27 --- /dev/null +++ b/app/static/vendors/flatpickr/l10n/fr.d.ts @@ -0,0 +1,66 @@ +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/app/static/vendors/flatpickr/l10n/fr.js b/app/static/vendors/flatpickr/l10n/fr.js new file mode 100644 index 0000000..5804a19 --- /dev/null +++ b/app/static/vendors/flatpickr/l10n/fr.js @@ -0,0 +1,75 @@ +(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/app/static/vendors/flatpickr/l10n/lu.d.ts b/app/static/vendors/flatpickr/l10n/lu.d.ts new file mode 100644 index 0000000..148e6d1 --- /dev/null +++ b/app/static/vendors/flatpickr/l10n/lu.d.ts @@ -0,0 +1,67 @@ +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/app/static/vendors/flatpickr/l10n/lu.js b/app/static/vendors/flatpickr/l10n/lu.js new file mode 100644 index 0000000..c366ea8 --- /dev/null +++ b/app/static/vendors/flatpickr/l10n/lu.js @@ -0,0 +1,71 @@ +(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/app/static/vendors/flatpickr/plugins/confirmDate/confirmDate.css b/app/static/vendors/flatpickr/plugins/confirmDate/confirmDate.css new file mode 100644 index 0000000..9508ea9 --- /dev/null +++ b/app/static/vendors/flatpickr/plugins/confirmDate/confirmDate.css @@ -0,0 +1,24 @@ +.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/app/static/vendors/flatpickr/plugins/confirmDate/confirmDate.d.ts b/app/static/vendors/flatpickr/plugins/confirmDate/confirmDate.d.ts new file mode 100644 index 0000000..a4ddf39 --- /dev/null +++ b/app/static/vendors/flatpickr/plugins/confirmDate/confirmDate.d.ts @@ -0,0 +1,9 @@ +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/app/static/vendors/flatpickr/plugins/confirmDate/confirmDate.js b/app/static/vendors/flatpickr/plugins/confirmDate/confirmDate.js new file mode 100644 index 0000000..c1fc0ac --- /dev/null +++ b/app/static/vendors/flatpickr/plugins/confirmDate/confirmDate.js @@ -0,0 +1,84 @@ +(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/app/static/vendors/flatpickr/plugins/labelPlugin/labelPlugin.d.ts b/app/static/vendors/flatpickr/plugins/labelPlugin/labelPlugin.d.ts new file mode 100644 index 0000000..1a9cbce --- /dev/null +++ b/app/static/vendors/flatpickr/plugins/labelPlugin/labelPlugin.d.ts @@ -0,0 +1,3 @@ +import { Plugin } from "../../types/options"; +declare function labelPlugin(): Plugin; +export default labelPlugin; diff --git a/app/static/vendors/flatpickr/plugins/labelPlugin/labelPlugin.js b/app/static/vendors/flatpickr/plugins/labelPlugin/labelPlugin.js new file mode 100644 index 0000000..ddad2bc --- /dev/null +++ b/app/static/vendors/flatpickr/plugins/labelPlugin/labelPlugin.js @@ -0,0 +1,31 @@ +(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/app/static/vendors/flatpickr/plugins/minMaxTimePlugin.d.ts b/app/static/vendors/flatpickr/plugins/minMaxTimePlugin.d.ts new file mode 100644 index 0000000..4fe2e5c --- /dev/null +++ b/app/static/vendors/flatpickr/plugins/minMaxTimePlugin.d.ts @@ -0,0 +1,17 @@ +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/app/static/vendors/flatpickr/plugins/minMaxTimePlugin.js b/app/static/vendors/flatpickr/plugins/minMaxTimePlugin.js new file mode 100644 index 0000000..291ac25 --- /dev/null +++ b/app/static/vendors/flatpickr/plugins/minMaxTimePlugin.js @@ -0,0 +1,326 @@ +(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: "form-control 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/app/static/vendors/flatpickr/plugins/monthSelect/index.d.ts b/app/static/vendors/flatpickr/plugins/monthSelect/index.d.ts new file mode 100644 index 0000000..d3864fc --- /dev/null +++ b/app/static/vendors/flatpickr/plugins/monthSelect/index.d.ts @@ -0,0 +1,13 @@ +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/app/static/vendors/flatpickr/plugins/monthSelect/index.js b/app/static/vendors/flatpickr/plugins/monthSelect/index.js new file mode 100644 index 0000000..7fd66e7 --- /dev/null +++ b/app/static/vendors/flatpickr/plugins/monthSelect/index.js @@ -0,0 +1,174 @@ +(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/app/static/vendors/flatpickr/plugins/monthSelect/style.css b/app/static/vendors/flatpickr/plugins/monthSelect/style.css new file mode 100644 index 0000000..cacbafc --- /dev/null +++ b/app/static/vendors/flatpickr/plugins/monthSelect/style.css @@ -0,0 +1,69 @@ +.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/app/static/vendors/flatpickr/plugins/monthSelect/tests.spec.d.ts b/app/static/vendors/flatpickr/plugins/monthSelect/tests.spec.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/app/static/vendors/flatpickr/plugins/monthSelect/tests.spec.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/app/static/vendors/flatpickr/plugins/rangePlugin.d.ts b/app/static/vendors/flatpickr/plugins/rangePlugin.d.ts new file mode 100644 index 0000000..960a834 --- /dev/null +++ b/app/static/vendors/flatpickr/plugins/rangePlugin.d.ts @@ -0,0 +1,12 @@ +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/app/static/vendors/flatpickr/plugins/rangePlugin.js b/app/static/vendors/flatpickr/plugins/rangePlugin.js new file mode 100644 index 0000000..407e388 --- /dev/null +++ b/app/static/vendors/flatpickr/plugins/rangePlugin.js @@ -0,0 +1,146 @@ +(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/app/static/vendors/flatpickr/plugins/scrollPlugin.d.ts b/app/static/vendors/flatpickr/plugins/scrollPlugin.d.ts new file mode 100644 index 0000000..a367428 --- /dev/null +++ b/app/static/vendors/flatpickr/plugins/scrollPlugin.d.ts @@ -0,0 +1,3 @@ +import { Plugin } from "../types/options"; +declare function scrollPlugin(): Plugin; +export default scrollPlugin; diff --git a/app/static/vendors/flatpickr/plugins/scrollPlugin.js b/app/static/vendors/flatpickr/plugins/scrollPlugin.js new file mode 100644 index 0000000..3a5ad99 --- /dev/null +++ b/app/static/vendors/flatpickr/plugins/scrollPlugin.js @@ -0,0 +1,58 @@ +(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/app/static/vendors/flatpickr/plugins/weekSelect/weekSelect.d.ts b/app/static/vendors/flatpickr/plugins/weekSelect/weekSelect.d.ts new file mode 100644 index 0000000..88cc964 --- /dev/null +++ b/app/static/vendors/flatpickr/plugins/weekSelect/weekSelect.d.ts @@ -0,0 +1,7 @@ +import { Plugin } from "../../types/options"; +export declare type PlusWeeks = { + weekStartDay: Date; + weekEndDay: Date; +}; +declare function weekSelectPlugin(): Plugin; +export default weekSelectPlugin; diff --git a/app/static/vendors/flatpickr/plugins/weekSelect/weekSelect.js b/app/static/vendors/flatpickr/plugins/weekSelect/weekSelect.js new file mode 100644 index 0000000..e8792ed --- /dev/null +++ b/app/static/vendors/flatpickr/plugins/weekSelect/weekSelect.js @@ -0,0 +1,86 @@ +(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/app/static/vendors/flatpickr/themes/airbnb.css b/app/static/vendors/flatpickr/themes/airbnb.css new file mode 100644 index 0000000..c47c711 --- /dev/null +++ b/app/static/vendors/flatpickr/themes/airbnb.css @@ -0,0 +1,872 @@ +.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/app/static/vendors/flatpickr/themes/confetti.css b/app/static/vendors/flatpickr/themes/confetti.css new file mode 100644 index 0000000..d663ae3 --- /dev/null +++ b/app/static/vendors/flatpickr/themes/confetti.css @@ -0,0 +1,795 @@ +.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; + -webkit-box-shadow: 0 3px 13px rgba(0,0,0,0.08); + box-shadow: 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 rgba(72,72,72,0.1); +} +.flatpickr-calendar.showTimeInput.hasTime .flatpickr-innerContainer { + border-bottom: 0; +} +.flatpickr-calendar.showTimeInput.hasTime .flatpickr-time { + border: 1px solid rgba(72,72,72,0.1); +} +.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: rgba(72,72,72,0.1); +} +.flatpickr-calendar.arrowTop:after { + border-bottom-color: #ffb866; +} +.flatpickr-calendar.arrowBottom:before, +.flatpickr-calendar.arrowBottom:after { + top: 100%; +} +.flatpickr-calendar.arrowBottom:before { + border-top-color: rgba(72,72,72,0.1); +} +.flatpickr-calendar.arrowBottom:after { + border-top-color: #ffb866; +} +.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 { + border-radius: 5px 5px 0 0; + background: #ffb866; + color: #fff; + fill: #fff; + 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: #fff; + fill: #fff; +} +.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: #bbb; +} +.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(72,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(72,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(72,72,72,0.6); + top: 40%; +} +.numInputWrapper span svg { + width: inherit; + height: auto; +} +.numInputWrapper span svg path { + fill: rgba(255,255,255,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: #fff; +} +.flatpickr-current-month .numInputWrapper span.arrowDown:after { + border-top-color: #fff; +} +.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(255,255,255,0.5); + background: transparent; + pointer-events: none; +} +.flatpickr-current-month .flatpickr-monthDropdown-months { + appearance: menulist; + background: #ffb866; + 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: #ffb866; + outline: none; + padding: 0; +} +.flatpickr-weekdays { + background: #ffb866; + 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: #ffb866; + 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; + border-left: 1px solid rgba(72,72,72,0.1); + border-right: 1px solid rgba(72,72,72,0.1); +} +.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 rgba(72,72,72,0.1); + box-shadow: -1px 0 0 rgba(72,72,72,0.1); +} +.flatpickr-day { + background: none; + border: 1px solid transparent; + border-radius: 150px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #484848; + 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: #e2e2e2; + border-color: #e2e2e2; +} +.flatpickr-day.today { + border-color: #bbb; +} +.flatpickr-day.today:hover, +.flatpickr-day.today:focus { + border-color: #bbb; + background: #bbb; + 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: #ffb866; + -webkit-box-shadow: none; + box-shadow: none; + color: #fff; + border-color: #ffb866; +} +.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 #ffb866; + box-shadow: -10px 0 0 #ffb866; +} +.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 #e2e2e2, 5px 0 0 #e2e2e2; + box-shadow: -5px 0 0 #e2e2e2, 5px 0 0 #e2e2e2; +} +.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(72,72,72,0.3); + background: transparent; + border-color: transparent; + cursor: default; +} +.flatpickr-day.flatpickr-disabled, +.flatpickr-day.flatpickr-disabled:hover { + cursor: not-allowed; + color: rgba(72,72,72,0.1); +} +.flatpickr-day.week.selected { + border-radius: 0; + -webkit-box-shadow: -5px 0 0 #ffb866, 5px 0 0 #ffb866; + box-shadow: -5px 0 0 #ffb866, 5px 0 0 #ffb866; +} +.flatpickr-day.hidden { + visibility: hidden; +} +.rangeMode .flatpickr-day { + margin-top: 1px; +} +.flatpickr-weekwrapper { + float: left; +} +.flatpickr-weekwrapper .flatpickr-weeks { + padding: 0 12px; + border-left: 1px solid rgba(72,72,72,0.1); +} +.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(72,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; + background: #fff; + border-bottom: 1px solid rgba(72,72,72,0.1); +} +.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; + background: #fff; + border-radius: 0 0 5px 5px; +} +.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: #484848; +} +.flatpickr-time .numInputWrapper span.arrowDown:after { + border-top-color: #484848; +} +.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: #484848; + 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: #484848; + 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: #eaeaea; +} +.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/app/static/vendors/flatpickr/themes/dark.css b/app/static/vendors/flatpickr/themes/dark.css new file mode 100644 index 0000000..e3518cc --- /dev/null +++ b/app/static/vendors/flatpickr/themes/dark.css @@ -0,0 +1,784 @@ +.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: #3f4458; + -webkit-box-shadow: 1px 0 0 #20222c, -1px 0 0 #20222c, 0 1px 0 #20222c, 0 -1px 0 #20222c, 0 3px 13px rgba(0,0,0,0.08); + box-shadow: 1px 0 0 #20222c, -1px 0 0 #20222c, 0 1px 0 #20222c, 0 -1px 0 #20222c, 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 #20222c; +} +.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: #20222c; +} +.flatpickr-calendar.arrowTop:after { + border-bottom-color: #3f4458; +} +.flatpickr-calendar.arrowBottom:before, +.flatpickr-calendar.arrowBottom:after { + top: 100%; +} +.flatpickr-calendar.arrowBottom:before { + border-top-color: #20222c; +} +.flatpickr-calendar.arrowBottom:after { + border-top-color: #3f4458; +} +.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: #3f4458; + color: #fff; + fill: #fff; + 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: #fff; + fill: #fff; +} +.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: #eee; +} +.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(255,255,255,0.15); + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.numInputWrapper span:hover { + background: rgba(192,187,167,0.1); +} +.numInputWrapper span:active { + background: rgba(192,187,167,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(255,255,255,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(255,255,255,0.6); + top: 40%; +} +.numInputWrapper span svg { + width: inherit; + height: auto; +} +.numInputWrapper span svg path { + fill: rgba(255,255,255,0.5); +} +.numInputWrapper:hover { + background: rgba(192,187,167,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(192,187,167,0.05); +} +.flatpickr-current-month .numInputWrapper { + width: 6ch; + width: 7ch\0; + display: inline-block; +} +.flatpickr-current-month .numInputWrapper span.arrowUp:after { + border-bottom-color: #fff; +} +.flatpickr-current-month .numInputWrapper span.arrowDown:after { + border-top-color: #fff; +} +.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(255,255,255,0.5); + background: transparent; + pointer-events: none; +} +.flatpickr-current-month .flatpickr-monthDropdown-months { + appearance: menulist; + background: #3f4458; + 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(192,187,167,0.05); +} +.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month { + background-color: #3f4458; + 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: #3f4458; + color: #fff; + 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 #20222c; + box-shadow: -1px 0 0 #20222c; +} +.flatpickr-day { + background: none; + border: 1px solid transparent; + border-radius: 150px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: rgba(255,255,255,0.95); + 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: #646c8c; + border-color: #646c8c; +} +.flatpickr-day.today { + border-color: #eee; +} +.flatpickr-day.today:hover, +.flatpickr-day.today:focus { + border-color: #eee; + background: #eee; + color: #3f4458; +} +.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: #80cbc4; + -webkit-box-shadow: none; + box-shadow: none; + color: #fff; + border-color: #80cbc4; +} +.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 #80cbc4; + box-shadow: -10px 0 0 #80cbc4; +} +.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 #646c8c, 5px 0 0 #646c8c; + box-shadow: -5px 0 0 #646c8c, 5px 0 0 #646c8c; +} +.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(255,255,255,0.3); + background: transparent; + border-color: transparent; + cursor: default; +} +.flatpickr-day.flatpickr-disabled, +.flatpickr-day.flatpickr-disabled:hover { + cursor: not-allowed; + color: rgba(255,255,255,0.1); +} +.flatpickr-day.week.selected { + border-radius: 0; + -webkit-box-shadow: -5px 0 0 #80cbc4, 5px 0 0 #80cbc4; + box-shadow: -5px 0 0 #80cbc4, 5px 0 0 #80cbc4; +} +.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 #20222c; + box-shadow: 1px 0 0 #20222c; +} +.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(255,255,255,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: rgba(255,255,255,0.95); +} +.flatpickr-time .numInputWrapper span.arrowDown:after { + border-top-color: rgba(255,255,255,0.95); +} +.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: rgba(255,255,255,0.95); + 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: rgba(255,255,255,0.95); + 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: #6a7395; +} +.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/app/static/vendors/flatpickr/themes/light.css b/app/static/vendors/flatpickr/themes/light.css new file mode 100644 index 0000000..da9e4a8 --- /dev/null +++ b/app/static/vendors/flatpickr/themes/light.css @@ -0,0 +1,798 @@ +.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; + -webkit-box-shadow: 0 3px 13px rgba(0,0,0,0.08); + box-shadow: 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 #eceef1; +} +.flatpickr-calendar.showTimeInput.hasTime .flatpickr-innerContainer { + border-bottom: 0; +} +.flatpickr-calendar.showTimeInput.hasTime .flatpickr-time { + border: 1px solid #eceef1; +} +.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: #eceef1; +} +.flatpickr-calendar.arrowTop:after { + border-bottom-color: #eceef1; +} +.flatpickr-calendar.arrowBottom:before, +.flatpickr-calendar.arrowBottom:after { + top: 100%; +} +.flatpickr-calendar.arrowBottom:before { + border-top-color: #eceef1; +} +.flatpickr-calendar.arrowBottom:after { + border-top-color: #eceef1; +} +.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 { + border-radius: 5px 5px 0 0; + background: #eceef1; + color: #5a6171; + fill: #5a6171; + 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: #5a6171; + fill: #5a6171; +} +.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: #bbb; +} +.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(72,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(72,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(72,72,72,0.6); + top: 40%; +} +.numInputWrapper span svg { + width: inherit; + height: auto; +} +.numInputWrapper span svg path { + fill: rgba(90,97,113,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: #5a6171; +} +.flatpickr-current-month .numInputWrapper span.arrowDown:after { + border-top-color: #5a6171; +} +.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(90,97,113,0.5); + background: transparent; + pointer-events: none; +} +.flatpickr-current-month .flatpickr-monthDropdown-months { + appearance: menulist; + background: #eceef1; + 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: #eceef1; + outline: none; + padding: 0; +} +.flatpickr-weekdays { + background: #eceef1; + 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: #eceef1; + color: #5a6171; + 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; + border-left: 1px solid #eceef1; + border-right: 1px solid #eceef1; +} +.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 #eceef1; + box-shadow: -1px 0 0 #eceef1; +} +.flatpickr-day { + background: none; + border: 1px solid transparent; + border-radius: 150px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #484848; + 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: #e2e2e2; + border-color: #e2e2e2; +} +.flatpickr-day.today { + border-color: #bbb; +} +.flatpickr-day.today:hover, +.flatpickr-day.today:focus { + border-color: #bbb; + background: #bbb; + 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: #ff5a5f; + -webkit-box-shadow: none; + box-shadow: none; + color: #fff; + border-color: #ff5a5f; +} +.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 #ff5a5f; + box-shadow: -10px 0 0 #ff5a5f; +} +.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 #e2e2e2, 5px 0 0 #e2e2e2; + box-shadow: -5px 0 0 #e2e2e2, 5px 0 0 #e2e2e2; +} +.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(72,72,72,0.3); + background: transparent; + border-color: transparent; + cursor: default; +} +.flatpickr-day.flatpickr-disabled, +.flatpickr-day.flatpickr-disabled:hover { + cursor: not-allowed; + color: rgba(72,72,72,0.1); +} +.flatpickr-day.week.selected { + border-radius: 0; + -webkit-box-shadow: -5px 0 0 #ff5a5f, 5px 0 0 #ff5a5f; + box-shadow: -5px 0 0 #ff5a5f, 5px 0 0 #ff5a5f; +} +.flatpickr-day.hidden { + visibility: hidden; +} +.rangeMode .flatpickr-day { + margin-top: 1px; +} +.flatpickr-weekwrapper { + float: left; +} +.flatpickr-weekwrapper .flatpickr-weeks { + padding: 0 12px; + border-left: 1px solid #eceef1; +} +.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(72,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; + background: #fff; + border-bottom: 1px solid #eceef1; +} +.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; + background: #fff; + border-radius: 0 0 5px 5px; +} +.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: #484848; +} +.flatpickr-time .numInputWrapper span.arrowDown:after { + border-top-color: #484848; +} +.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: #484848; + 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: #484848; + 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: #eaeaea; +} +.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); + } +} +span.flatpickr-day.selected { + font-weight: bold; +} diff --git a/app/static/vendors/flatpickr/themes/material_blue.css b/app/static/vendors/flatpickr/themes/material_blue.css new file mode 100644 index 0000000..5368deb --- /dev/null +++ b/app/static/vendors/flatpickr/themes/material_blue.css @@ -0,0 +1,795 @@ +.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; + -webkit-box-shadow: 0 3px 13px rgba(0,0,0,0.08); + box-shadow: 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 rgba(72,72,72,0.2); +} +.flatpickr-calendar.showTimeInput.hasTime .flatpickr-innerContainer { + border-bottom: 0; +} +.flatpickr-calendar.showTimeInput.hasTime .flatpickr-time { + border: 1px solid rgba(72,72,72,0.2); +} +.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: rgba(72,72,72,0.2); +} +.flatpickr-calendar.arrowTop:after { + border-bottom-color: #42a5f5; +} +.flatpickr-calendar.arrowBottom:before, +.flatpickr-calendar.arrowBottom:after { + top: 100%; +} +.flatpickr-calendar.arrowBottom:before { + border-top-color: rgba(72,72,72,0.2); +} +.flatpickr-calendar.arrowBottom:after { + border-top-color: #42a5f5; +} +.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 { + border-radius: 5px 5px 0 0; + background: #42a5f5; + color: #fff; + fill: #fff; + 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: #fff; + fill: #fff; +} +.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: #bbb; +} +.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(72,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(72,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(72,72,72,0.6); + top: 40%; +} +.numInputWrapper span svg { + width: inherit; + height: auto; +} +.numInputWrapper span svg path { + fill: rgba(255,255,255,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: #fff; +} +.flatpickr-current-month .numInputWrapper span.arrowDown:after { + border-top-color: #fff; +} +.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(255,255,255,0.5); + background: transparent; + pointer-events: none; +} +.flatpickr-current-month .flatpickr-monthDropdown-months { + appearance: menulist; + background: #42a5f5; + 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: #42a5f5; + outline: none; + padding: 0; +} +.flatpickr-weekdays { + background: #42a5f5; + 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: #42a5f5; + 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; + border-left: 1px solid rgba(72,72,72,0.2); + border-right: 1px solid rgba(72,72,72,0.2); +} +.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 rgba(72,72,72,0.2); + box-shadow: -1px 0 0 rgba(72,72,72,0.2); +} +.flatpickr-day { + background: none; + border: 1px solid transparent; + border-radius: 150px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #484848; + 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: #e2e2e2; + border-color: #e2e2e2; +} +.flatpickr-day.today { + border-color: #bbb; +} +.flatpickr-day.today:hover, +.flatpickr-day.today:focus { + border-color: #bbb; + background: #bbb; + 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: #42a5f5; + -webkit-box-shadow: none; + box-shadow: none; + color: #fff; + border-color: #42a5f5; +} +.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 #42a5f5; + box-shadow: -10px 0 0 #42a5f5; +} +.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 #e2e2e2, 5px 0 0 #e2e2e2; + box-shadow: -5px 0 0 #e2e2e2, 5px 0 0 #e2e2e2; +} +.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(72,72,72,0.3); + background: transparent; + border-color: transparent; + cursor: default; +} +.flatpickr-day.flatpickr-disabled, +.flatpickr-day.flatpickr-disabled:hover { + cursor: not-allowed; + color: rgba(72,72,72,0.1); +} +.flatpickr-day.week.selected { + border-radius: 0; + -webkit-box-shadow: -5px 0 0 #42a5f5, 5px 0 0 #42a5f5; + box-shadow: -5px 0 0 #42a5f5, 5px 0 0 #42a5f5; +} +.flatpickr-day.hidden { + visibility: hidden; +} +.rangeMode .flatpickr-day { + margin-top: 1px; +} +.flatpickr-weekwrapper { + float: left; +} +.flatpickr-weekwrapper .flatpickr-weeks { + padding: 0 12px; + border-left: 1px solid rgba(72,72,72,0.2); +} +.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(72,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; + background: #fff; + border-bottom: 1px solid rgba(72,72,72,0.2); +} +.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; + background: #fff; + border-radius: 0 0 5px 5px; +} +.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: #484848; +} +.flatpickr-time .numInputWrapper span.arrowDown:after { + border-top-color: #484848; +} +.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: #484848; + 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: #484848; + 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: #eaeaea; +} +.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/app/static/vendors/flatpickr/themes/material_green.css b/app/static/vendors/flatpickr/themes/material_green.css new file mode 100644 index 0000000..f4719f2 --- /dev/null +++ b/app/static/vendors/flatpickr/themes/material_green.css @@ -0,0 +1,795 @@ +.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; + -webkit-box-shadow: 0 3px 13px rgba(0,0,0,0.08); + box-shadow: 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 rgba(72,72,72,0.2); +} +.flatpickr-calendar.showTimeInput.hasTime .flatpickr-innerContainer { + border-bottom: 0; +} +.flatpickr-calendar.showTimeInput.hasTime .flatpickr-time { + border: 1px solid rgba(72,72,72,0.2); +} +.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: rgba(72,72,72,0.2); +} +.flatpickr-calendar.arrowTop:after { + border-bottom-color: #1bbc9b; +} +.flatpickr-calendar.arrowBottom:before, +.flatpickr-calendar.arrowBottom:after { + top: 100%; +} +.flatpickr-calendar.arrowBottom:before { + border-top-color: rgba(72,72,72,0.2); +} +.flatpickr-calendar.arrowBottom:after { + border-top-color: #1bbc9b; +} +.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 { + border-radius: 5px 5px 0 0; + background: #1bbc9b; + color: #fff; + fill: #fff; + 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: #fff; + fill: #fff; +} +.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: #bbb; +} +.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(72,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(72,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(72,72,72,0.6); + top: 40%; +} +.numInputWrapper span svg { + width: inherit; + height: auto; +} +.numInputWrapper span svg path { + fill: rgba(255,255,255,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: #fff; +} +.flatpickr-current-month .numInputWrapper span.arrowDown:after { + border-top-color: #fff; +} +.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(255,255,255,0.5); + background: transparent; + pointer-events: none; +} +.flatpickr-current-month .flatpickr-monthDropdown-months { + appearance: menulist; + background: #1bbc9b; + 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: #1bbc9b; + outline: none; + padding: 0; +} +.flatpickr-weekdays { + background: #1bbc9b; + 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: #1bbc9b; + 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; + border-left: 1px solid rgba(72,72,72,0.2); + border-right: 1px solid rgba(72,72,72,0.2); +} +.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 rgba(72,72,72,0.2); + box-shadow: -1px 0 0 rgba(72,72,72,0.2); +} +.flatpickr-day { + background: none; + border: 1px solid transparent; + border-radius: 150px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #484848; + 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: #e2e2e2; + border-color: #e2e2e2; +} +.flatpickr-day.today { + border-color: #bbb; +} +.flatpickr-day.today:hover, +.flatpickr-day.today:focus { + border-color: #bbb; + background: #bbb; + 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: #1bbc9b; + -webkit-box-shadow: none; + box-shadow: none; + color: #fff; + border-color: #1bbc9b; +} +.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 #1bbc9b; + box-shadow: -10px 0 0 #1bbc9b; +} +.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 #e2e2e2, 5px 0 0 #e2e2e2; + box-shadow: -5px 0 0 #e2e2e2, 5px 0 0 #e2e2e2; +} +.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(72,72,72,0.3); + background: transparent; + border-color: transparent; + cursor: default; +} +.flatpickr-day.flatpickr-disabled, +.flatpickr-day.flatpickr-disabled:hover { + cursor: not-allowed; + color: rgba(72,72,72,0.1); +} +.flatpickr-day.week.selected { + border-radius: 0; + -webkit-box-shadow: -5px 0 0 #1bbc9b, 5px 0 0 #1bbc9b; + box-shadow: -5px 0 0 #1bbc9b, 5px 0 0 #1bbc9b; +} +.flatpickr-day.hidden { + visibility: hidden; +} +.rangeMode .flatpickr-day { + margin-top: 1px; +} +.flatpickr-weekwrapper { + float: left; +} +.flatpickr-weekwrapper .flatpickr-weeks { + padding: 0 12px; + border-left: 1px solid rgba(72,72,72,0.2); +} +.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(72,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; + background: #fff; + border-bottom: 1px solid rgba(72,72,72,0.2); +} +.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; + background: #fff; + border-radius: 0 0 5px 5px; +} +.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: #484848; +} +.flatpickr-time .numInputWrapper span.arrowDown:after { + border-top-color: #484848; +} +.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: #484848; + 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: #484848; + 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: #eaeaea; +} +.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/app/static/vendors/flatpickr/themes/material_orange.css b/app/static/vendors/flatpickr/themes/material_orange.css new file mode 100644 index 0000000..8ee7d2b --- /dev/null +++ b/app/static/vendors/flatpickr/themes/material_orange.css @@ -0,0 +1,795 @@ +.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; + -webkit-box-shadow: 0 3px 13px rgba(0,0,0,0.08); + box-shadow: 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 rgba(72,72,72,0.2); +} +.flatpickr-calendar.showTimeInput.hasTime .flatpickr-innerContainer { + border-bottom: 0; +} +.flatpickr-calendar.showTimeInput.hasTime .flatpickr-time { + border: 1px solid rgba(72,72,72,0.2); +} +.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: rgba(72,72,72,0.2); +} +.flatpickr-calendar.arrowTop:after { + border-bottom-color: #ff8a65; +} +.flatpickr-calendar.arrowBottom:before, +.flatpickr-calendar.arrowBottom:after { + top: 100%; +} +.flatpickr-calendar.arrowBottom:before { + border-top-color: rgba(72,72,72,0.2); +} +.flatpickr-calendar.arrowBottom:after { + border-top-color: #ff8a65; +} +.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 { + border-radius: 5px 5px 0 0; + background: #ff8a65; + color: #fff; + fill: #fff; + 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: #fff; + fill: #fff; +} +.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: #bbb; +} +.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(72,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(72,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(72,72,72,0.6); + top: 40%; +} +.numInputWrapper span svg { + width: inherit; + height: auto; +} +.numInputWrapper span svg path { + fill: rgba(255,255,255,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: #fff; +} +.flatpickr-current-month .numInputWrapper span.arrowDown:after { + border-top-color: #fff; +} +.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(255,255,255,0.5); + background: transparent; + pointer-events: none; +} +.flatpickr-current-month .flatpickr-monthDropdown-months { + appearance: menulist; + background: #ff8a65; + 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: #ff8a65; + outline: none; + padding: 0; +} +.flatpickr-weekdays { + background: #ff8a65; + 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: #ff8a65; + 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; + border-left: 1px solid rgba(72,72,72,0.2); + border-right: 1px solid rgba(72,72,72,0.2); +} +.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 rgba(72,72,72,0.2); + box-shadow: -1px 0 0 rgba(72,72,72,0.2); +} +.flatpickr-day { + background: none; + border: 1px solid transparent; + border-radius: 150px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #484848; + 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: #e2e2e2; + border-color: #e2e2e2; +} +.flatpickr-day.today { + border-color: #bbb; +} +.flatpickr-day.today:hover, +.flatpickr-day.today:focus { + border-color: #bbb; + background: #bbb; + 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: #ff8a65; + -webkit-box-shadow: none; + box-shadow: none; + color: #fff; + border-color: #ff8a65; +} +.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 #ff8a65; + box-shadow: -10px 0 0 #ff8a65; +} +.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 #e2e2e2, 5px 0 0 #e2e2e2; + box-shadow: -5px 0 0 #e2e2e2, 5px 0 0 #e2e2e2; +} +.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(72,72,72,0.3); + background: transparent; + border-color: transparent; + cursor: default; +} +.flatpickr-day.flatpickr-disabled, +.flatpickr-day.flatpickr-disabled:hover { + cursor: not-allowed; + color: rgba(72,72,72,0.1); +} +.flatpickr-day.week.selected { + border-radius: 0; + -webkit-box-shadow: -5px 0 0 #ff8a65, 5px 0 0 #ff8a65; + box-shadow: -5px 0 0 #ff8a65, 5px 0 0 #ff8a65; +} +.flatpickr-day.hidden { + visibility: hidden; +} +.rangeMode .flatpickr-day { + margin-top: 1px; +} +.flatpickr-weekwrapper { + float: left; +} +.flatpickr-weekwrapper .flatpickr-weeks { + padding: 0 12px; + border-left: 1px solid rgba(72,72,72,0.2); +} +.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(72,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; + background: #fff; + border-bottom: 1px solid rgba(72,72,72,0.2); +} +.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; + background: #fff; + border-radius: 0 0 5px 5px; +} +.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: #484848; +} +.flatpickr-time .numInputWrapper span.arrowDown:after { + border-top-color: #484848; +} +.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: #484848; + 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: #484848; + 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: #eaeaea; +} +.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/app/static/vendors/flatpickr/themes/material_red.css b/app/static/vendors/flatpickr/themes/material_red.css new file mode 100644 index 0000000..159c6a6 --- /dev/null +++ b/app/static/vendors/flatpickr/themes/material_red.css @@ -0,0 +1,795 @@ +.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; + -webkit-box-shadow: 0 3px 13px rgba(0,0,0,0.08); + box-shadow: 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 rgba(72,72,72,0.2); +} +.flatpickr-calendar.showTimeInput.hasTime .flatpickr-innerContainer { + border-bottom: 0; +} +.flatpickr-calendar.showTimeInput.hasTime .flatpickr-time { + border: 1px solid rgba(72,72,72,0.2); +} +.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: rgba(72,72,72,0.2); +} +.flatpickr-calendar.arrowTop:after { + border-bottom-color: #ef5350; +} +.flatpickr-calendar.arrowBottom:before, +.flatpickr-calendar.arrowBottom:after { + top: 100%; +} +.flatpickr-calendar.arrowBottom:before { + border-top-color: rgba(72,72,72,0.2); +} +.flatpickr-calendar.arrowBottom:after { + border-top-color: #ef5350; +} +.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 { + border-radius: 5px 5px 0 0; + background: #ef5350; + color: #fff; + fill: #fff; + 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: #fff; + fill: #fff; +} +.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: #bbb; +} +.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(72,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(72,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(72,72,72,0.6); + top: 40%; +} +.numInputWrapper span svg { + width: inherit; + height: auto; +} +.numInputWrapper span svg path { + fill: rgba(255,255,255,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: #fff; +} +.flatpickr-current-month .numInputWrapper span.arrowDown:after { + border-top-color: #fff; +} +.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(255,255,255,0.5); + background: transparent; + pointer-events: none; +} +.flatpickr-current-month .flatpickr-monthDropdown-months { + appearance: menulist; + background: #ef5350; + 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: #ef5350; + outline: none; + padding: 0; +} +.flatpickr-weekdays { + background: #ef5350; + 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: #ef5350; + 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; + border-left: 1px solid rgba(72,72,72,0.2); + border-right: 1px solid rgba(72,72,72,0.2); +} +.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 rgba(72,72,72,0.2); + box-shadow: -1px 0 0 rgba(72,72,72,0.2); +} +.flatpickr-day { + background: none; + border: 1px solid transparent; + border-radius: 150px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #484848; + 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: #e2e2e2; + border-color: #e2e2e2; +} +.flatpickr-day.today { + border-color: #bbb; +} +.flatpickr-day.today:hover, +.flatpickr-day.today:focus { + border-color: #bbb; + background: #bbb; + 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: #ef5350; + -webkit-box-shadow: none; + box-shadow: none; + color: #fff; + border-color: #ef5350; +} +.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 #ef5350; + box-shadow: -10px 0 0 #ef5350; +} +.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 #e2e2e2, 5px 0 0 #e2e2e2; + box-shadow: -5px 0 0 #e2e2e2, 5px 0 0 #e2e2e2; +} +.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(72,72,72,0.3); + background: transparent; + border-color: transparent; + cursor: default; +} +.flatpickr-day.flatpickr-disabled, +.flatpickr-day.flatpickr-disabled:hover { + cursor: not-allowed; + color: rgba(72,72,72,0.1); +} +.flatpickr-day.week.selected { + border-radius: 0; + -webkit-box-shadow: -5px 0 0 #ef5350, 5px 0 0 #ef5350; + box-shadow: -5px 0 0 #ef5350, 5px 0 0 #ef5350; +} +.flatpickr-day.hidden { + visibility: hidden; +} +.rangeMode .flatpickr-day { + margin-top: 1px; +} +.flatpickr-weekwrapper { + float: left; +} +.flatpickr-weekwrapper .flatpickr-weeks { + padding: 0 12px; + border-left: 1px solid rgba(72,72,72,0.2); +} +.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(72,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; + background: #fff; + border-bottom: 1px solid rgba(72,72,72,0.2); +} +.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; + background: #fff; + border-radius: 0 0 5px 5px; +} +.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: #484848; +} +.flatpickr-time .numInputWrapper span.arrowDown:after { + border-top-color: #484848; +} +.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: #484848; + 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: #484848; + 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: #eaeaea; +} +.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/app/static/vendors/flatpickr/types/globals.d.ts b/app/static/vendors/flatpickr/types/globals.d.ts new file mode 100644 index 0000000..a36e45b --- /dev/null +++ b/app/static/vendors/flatpickr/types/globals.d.ts @@ -0,0 +1,20 @@ +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/app/static/vendors/flatpickr/types/instance.d.ts b/app/static/vendors/flatpickr/types/instance.d.ts new file mode 100644 index 0000000..2a93500 --- /dev/null +++ b/app/static/vendors/flatpickr/types/instance.d.ts @@ -0,0 +1,118 @@ +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/app/static/vendors/flatpickr/types/locale.d.ts b/app/static/vendors/flatpickr/types/locale.d.ts new file mode 100644 index 0000000..75a6606 --- /dev/null +++ b/app/static/vendors/flatpickr/types/locale.d.ts @@ -0,0 +1,45 @@ +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/app/static/vendors/flatpickr/types/options.d.ts b/app/static/vendors/flatpickr/types/options.d.ts new file mode 100644 index 0000000..45f52dc --- /dev/null +++ b/app/static/vendors/flatpickr/types/options.d.ts @@ -0,0 +1,144 @@ +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/app/static/vendors/flatpickr/typings.d.ts b/app/static/vendors/flatpickr/typings.d.ts new file mode 100644 index 0000000..fb32d88 --- /dev/null +++ b/app/static/vendors/flatpickr/typings.d.ts @@ -0,0 +1,38 @@ +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/app/static/vendors/flatpickr/utils/dates.d.ts b/app/static/vendors/flatpickr/utils/dates.d.ts new file mode 100644 index 0000000..962ff6c --- /dev/null +++ b/app/static/vendors/flatpickr/utils/dates.d.ts @@ -0,0 +1,17 @@ +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/app/static/vendors/flatpickr/utils/dom.d.ts b/app/static/vendors/flatpickr/utils/dom.d.ts new file mode 100644 index 0000000..b15f309 --- /dev/null +++ b/app/static/vendors/flatpickr/utils/dom.d.ts @@ -0,0 +1,6 @@ +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/app/static/vendors/flatpickr/utils/formatting.d.ts b/app/static/vendors/flatpickr/utils/formatting.d.ts new file mode 100644 index 0000000..b430324 --- /dev/null +++ b/app/static/vendors/flatpickr/utils/formatting.d.ts @@ -0,0 +1,13 @@ +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/app/static/vendors/flatpickr/utils/index.d.ts b/app/static/vendors/flatpickr/utils/index.d.ts new file mode 100644 index 0000000..91adb42 --- /dev/null +++ b/app/static/vendors/flatpickr/utils/index.d.ts @@ -0,0 +1,8 @@ +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/app/static/vendors/flatpickr/utils/polyfills.d.ts b/app/static/vendors/flatpickr/utils/polyfills.d.ts new file mode 100644 index 0000000..e69de29 diff --git a/app/static/vendors/moment/moment-with-locales.min.js b/app/static/vendors/moment/moment-with-locales.min.js new file mode 100644 index 0000000..02cd72b --- /dev/null +++ b/app/static/vendors/moment/moment-with-locales.min.js @@ -0,0 +1 @@ +!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 Ie(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+Ce(n=e.year()-1,a,t):r>Ce(e.year(),a,t)?(s=r-Ce(e.year(),a,t),n=e.year()+1):(n=e.year(),s=r),{week:s,year:n}}function Ce(e,a,t){var s=Ne(e,a,t),n=Ne(e+1,a,t);return(Te(e)-s+n)/7}I("w",["ww",2],"wo","week"),I("W",["WW",2],"Wo","isoWeek"),P("week","w"),P("isoWeek","W"),A("week",5),A("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)});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"),P("day","d"),P("weekday","e"),P("isoWeekday","E"),A("day",11),A("weekday",11),A("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 Ue="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_");var Ve="Su_Mo_Tu_We_Th_Fr_Sa".split("_");var Ke=re;var $e=re;var Ze=re;function Be(){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 Qe(e,a){I(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),a)})}function Xe(e,a){return a._meridiemParse}I("H",["HH",2],0,"hour"),I("h",["hh",2],0,qe),I("k",["kk",2],0,function(){return this.hours()||24}),I("hmm",0,0,function(){return""+qe.apply(this)+F(this.minutes(),2)}),I("hmmss",0,0,function(){return""+qe.apply(this)+F(this.minutes(),2)+F(this.seconds(),2)}),I("Hmm",0,0,function(){return""+this.hours()+F(this.minutes(),2)}),I("Hmmss",0,0,function(){return""+this.hours()+F(this.minutes(),2)+F(this.seconds(),2)}),Qe("a",!0),Qe("A",!1),P("hour","h"),A("hour",13),ie("a",Xe),ie("A",Xe),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 ea,aa=He("Hours",!0),ta={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:Pe,monthsShort:Oe,week:{dow:0,doy:6},weekdays:Ge,weekdaysMin:Ve,weekdaysShort:Ue,meridiemParse:/[ap]\.?m?\.?/i},sa={},na={};function da(e){return e?e.toLowerCase().replace("_","-"):e}function ra(e){var a=null;if(!sa[e]&&"undefined"!=typeof module&&module&&module.exports)try{a=ea._abbr,require("./locale/"+e),_a(a)}catch(e){}return sa[e]}function _a(e,a){var t;return e&&((t=o(a)?oa(e):ia(e,a))?ea=t:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),ea._abbr}function ia(e,a){if(null===a)return delete sa[e],null;var t,s=ta;if(a.abbr=e,null!=sa[e])H("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=sa[e]._config;else if(null!=a.parentLocale)if(null!=sa[a.parentLocale])s=sa[a.parentLocale]._config;else{if(null==(t=ra(a.parentLocale)))return na[a.parentLocale]||(na[a.parentLocale]=[]),na[a.parentLocale].push({name:e,config:a}),null;s=t._config}return sa[e]=new j(b(s,a)),na[e]&&na[e].forEach(function(e){ia(e.name,e.config)}),_a(e),sa[e]}function oa(e){var a;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return ea;if(!_(e)){if(a=ra(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 ea}(e)}function ma(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||24Ce(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=ua(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 _=new Date(e,a,t,s,n,d,r);return e<100&&0<=e&&isFinite(_.getFullYear())&&_.setFullYear(e),_}).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 Ma=/^\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)?)?$/,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=/Z|[+-]\d\d(?::?\d\d)?/,ca=[["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/]],ya=/^\/?Date\((\-?\d+)/i;function fa(e){var a,t,s,n,d,r,_=e._i,i=Ma.exec(_)||ha.exec(_);if(i){for(Y(e).iso=!0,a=0,t=ca.length;at.valueOf():t.valueOf()this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},it.isLocal=function(){return!!this.isValid()&&!this._isUTC},it.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},it.isUtc=Na,it.isUTC=Na,it.zoneAbbr=function(){return this._isUTC?"UTC":""},it.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},it.dates=t("dates accessor is deprecated. Use date instead.",tt),it.months=t("months accessor is deprecated. Use month instead",Ee),it.years=t("years accessor is deprecated. Use year instead",ve),it.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()}),it.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=wa(e))._a){var a=e._isUTC?c(e._a):Ha(e._a);this._isDSTShifted=this.isValid()&&0>>0,s=0;sDe(e)?(r=e+1,o-De(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(De(e)-s+i)/7}I("w",["ww",2],"wo","week"),I("W",["WW",2],"Wo","isoWeek"),H("week","w"),H("isoWeek","W"),L("week",5),L("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)]=k(e)});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"),H("day","d"),H("weekday","e"),H("isoWeekday","E"),L("day",11),L("weekday",11),L("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]=k(e)});var je="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_");var Ze="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_");var ze="Su_Mo_Tu_We_Th_Fr_Sa".split("_");var $e=ae;var qe=ae;var Je=ae;function Be(){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]=de(o[t]),u[t]=de(u[t]),l[t]=de(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 Qe(){return this.hours()%12||12}function Xe(e,t){I(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function Ke(e,t){return t._meridiemParse}I("H",["HH",2],0,"hour"),I("h",["hh",2],0,Qe),I("k",["kk",2],0,function(){return this.hours()||24}),I("hmm",0,0,function(){return""+Qe.apply(this)+U(this.minutes(),2)}),I("hmmss",0,0,function(){return""+Qe.apply(this)+U(this.minutes(),2)+U(this.seconds(),2)}),I("Hmm",0,0,function(){return""+this.hours()+U(this.minutes(),2)}),I("Hmmss",0,0,function(){return""+this.hours()+U(this.minutes(),2)+U(this.seconds(),2)}),Xe("a",!0),Xe("A",!1),H("hour","h"),L("hour",13),ue("a",Ke),ue("A",Ke),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=k(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]=k(e),g(n).bigHour=!0}),ce("hmm",function(e,t,n){var s=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s)),g(n).bigHour=!0}),ce("hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s,2)),t[ve]=k(e.substr(i)),g(n).bigHour=!0}),ce("Hmm",function(e,t,n){var s=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s))}),ce("Hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s,2)),t[ve]=k(e.substr(i))});var et,tt=Te("Hours",!0),nt={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:He,monthsShort:Re,week:{dow:0,doy:6},weekdays:je,weekdaysMin:ze,weekdaysShort:Ze,meridiemParse:/[ap]\.?m?\.?/i},st={},it={};function rt(e){return e?e.toLowerCase().replace("_","-"):e}function at(e){var t=null;if(!st[e]&&"undefined"!=typeof module&&module&&module.exports)try{t=et._abbr,require("./locale/"+e),ot(t)}catch(e){}return st[e]}function ot(e,t){var n;return e&&((n=l(t)?lt(e):ut(e,t))?et=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),et._abbr}function ut(e,t){if(null===t)return delete st[e],null;var n,s=nt;if(t.abbr=e,null!=st[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=st[e]._config;else if(null!=t.parentLocale)if(null!=st[t.parentLocale])s=st[t.parentLocale]._config;else{if(null==(n=at(t.parentLocale)))return it[t.parentLocale]||(it[t.parentLocale]=[]),it[t.parentLocale].push({name:e,config:t}),null;s=n._config}return st[e]=new P(b(s,t)),it[e]&&it[e].forEach(function(e){ut(e.name,e.config)}),ot(e),st[e]}function lt(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return et;if(!o(e)){if(t=at(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 et}(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=ht(e._a[me],s[me]),(e._dayOfYear>De(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[pe]&&0===e._a[ve]&&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=new Date(e,t,n,s,i,r,a);return e<100&&0<=e&&isFinite(o.getFullYear())&&o.setFullYear(e),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 ft=/^\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)?)?$/,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=/Z|[+-]\d\d(?::?\d\d)?/,yt=[["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}/]],gt=[["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 vt(e){var t,n,s,i,r,a,o=e._i,u=ft.exec(o)||mt.exec(o);if(u){for(g(e).iso=!0,t=0,n=yt.length;tn.valueOf():n.valueOf()this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},ln.isLocal=function(){return!!this.isValid()&&!this._isUTC},ln.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},ln.isUtc=Vt,ln.isUTC=Vt,ln.zoneAbbr=function(){return this._isUTC?"UTC":""},ln.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},ln.dates=n("dates accessor is deprecated. Use date instead.",nn),ln.months=n("months accessor is deprecated. Use month instead",Fe),ln.years=n("years accessor is deprecated. Use year instead",Oe),ln.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()}),ln.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=Yt(e))._a){var t=e._isUTC?y(e._a):Tt(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/app/static/vendors/slimselect/slimselect.min.css b/app/static/vendors/slimselect/slimselect.min.css new file mode 100644 index 0000000..753635a --- /dev/null +++ b/app/static/vendors/slimselect/slimselect.min.css @@ -0,0 +1 @@ +.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/app/static/vendors/slimselect/slimselect.min.js b/app/static/vendors/slimselect/slimselect.min.js new file mode 100644 index 0000000..8638634 --- /dev/null +++ b/app/static/vendors/slimselect/slimselect.min.js @@ -0,0 +1 @@ +!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/app/static/vendors/tabulator/css.old/tabulator.min.css b/app/static/vendors/tabulator/css.old/tabulator.min.css new file mode 100644 index 0000000..bafd6c7 --- /dev/null +++ b/app/static/vendors/tabulator/css.old/tabulator.min.css @@ -0,0 +1,3 @@ +/* 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/app/static/vendors/tabulator/css.old/tabulator.min.css.map b/app/static/vendors/tabulator/css.old/tabulator.min.css.map new file mode 100644 index 0000000..47a4c5c --- /dev/null +++ b/app/static/vendors/tabulator/css.old/tabulator.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["tabulator.scss"],"names":[],"mappings":"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","file":"tabulator.min.css","sourcesContent":["/* Tabulator v4.7.0 (c) Oliver Folkerd */\n\n\r\n//Main Theme Variables\r\n$backgroundColor: #888 !default; //background color of tabulator\r\n$borderColor:#999 !default; //border to tabulator\r\n$textSize:14px !default; //table text size\r\n\r\n//header themeing\r\n$headerBackgroundColor:#e6e6e6 !default; //border to tabulator\r\n$headerTextColor:#555 !default; //header text colour\r\n$headerBorderColor:#aaa !default; //header border color\r\n$headerSeperatorColor:#999 !default; //header bottom seperator color\r\n$headerMargin:4px !default; //padding round header\r\n\r\n//column header arrows\r\n$sortArrowActive: #666 !default;\r\n$sortArrowInactive: #bbb !default;\r\n\r\n//row themeing\r\n$rowBackgroundColor:#fff !default; //table row background color\r\n$rowAltBackgroundColor:#EFEFEF !default; //table row background color\r\n$rowBorderColor:#aaa !default; //table border color\r\n$rowTextColor:#333 !default; //table text color\r\n$rowHoverBackground:#bbb !default; //row background color on hover\r\n\r\n$rowSelectedBackground: #9ABCEA !default; //row background color when selected\r\n$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered\r\n\r\n$editBoxColor:#1D68CD !default; //border color for edit boxes\r\n$errorColor:#dd0000 !default; //error indication\r\n\r\n//footer themeing\r\n$footerBackgroundColor:#e6e6e6 !default; //border to tabulator\r\n$footerTextColor:#555 !default; //footer text colour\r\n$footerBorderColor:#aaa !default; //footer border color\r\n$footerSeperatorColor:#999 !default; //footer bottom seperator color\r\n$footerActiveColor:#d00 !default; //footer bottom active text color\r\n\r\n\r\n\r\n//Tabulator Containing Element\r\n.tabulator{\r\n\tposition: relative;\r\n\r\n\tborder: 1px solid $borderColor;\r\n\r\n\tbackground-color: $backgroundColor;\r\n\r\n\tfont-size:$textSize;\r\n\ttext-align: left;\r\n\toverflow:hidden;\r\n\r\n\t-webkit-transform: translatez(0);\r\n\t-moz-transform: translatez(0);\r\n\t-ms-transform: translatez(0);\r\n\t-o-transform: translatez(0);\r\n\ttransform: translatez(0);\r\n\r\n\t&[tabulator-layout=\"fitDataFill\"]{\r\n\t\t.tabulator-tableHolder{\r\n\t\t\t.tabulator-table{\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&[tabulator-layout=\"fitDataTable\"]{\r\n\t\tdisplay: inline-block;\r\n\t}\r\n\r\n\t&.tabulator-block-select{\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t//column header containing element\r\n\t.tabulator-header{\r\n\t\tposition:relative;\r\n\t\tbox-sizing: border-box;\r\n\r\n\t\twidth:100%;\r\n\r\n\t\tborder-bottom:1px solid $headerSeperatorColor;\r\n\t\tbackground-color: $headerBackgroundColor;\r\n\t\tcolor: $headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:hidden;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t&.tabulator-header-hidden{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\t//individual column header element\r\n\t\t.tabulator-col{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition:relative;\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tborder-right:1px solid $headerBorderColor;\r\n\t\t\tbackground:$headerBackgroundColor;\r\n\t\t\ttext-align:left;\r\n\t\t\tvertical-align: bottom;\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&.tabulator-moving{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tborder:1px solid $headerSeperatorColor;\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 10%);\r\n\t\t\t\tpointer-events: none;\r\n\t\t\t}\r\n\r\n\t\t\t//hold content of column header\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tpadding:4px;\r\n\r\n\t\t\t\t//header menu button\r\n\t\t\t\t.tabulator-header-menu-button{\r\n\t\t\t\t\tpadding: 0 8px;\r\n\r\n\t\t\t\t\t&:hover{\r\n\t\t\t\t\t\tcursor: pointer;\r\n\t\t\t\t\t\topacity: .6;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title of column header\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\tvertical-align:bottom;\r\n\r\n\t\t\t\t\t//element to hold title editor\r\n\t\t\t\t\t.tabulator-title-editor{\r\n\t\t\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\t\tborder:1px solid #999;\r\n\r\n\t\t\t\t\t\tpadding:1px;\r\n\r\n\t\t\t\t\t\tbackground: #fff;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//column sorter arrow\r\n\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\tdisplay: inline-block;\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\ttop:9px;\r\n\t\t\t\t\tright:8px;\r\n\t\t\t\t\twidth: 0;\r\n\t\t\t\t\theight: 0;\r\n\t\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t//complex header column group\r\n\t\t\t&.tabulator-col-group{\r\n\r\n\t\t\t\t//gelement to hold sub columns in column group\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tposition:relative;\r\n\t\t\t\t\tdisplay: flex;\r\n\r\n\t\t\t\t\tborder-top:1px solid $headerBorderColor;\r\n\t\t\t\t\toverflow: hidden;\r\n\r\n\t\t\t\t\tmargin-right:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t&:first-child{\r\n\t\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//header filter containing element\r\n\t\t\t.tabulator-header-filter{\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\tmargin-top:2px;\r\n\t\t\t\twidth:100%;\r\n\t\t\t\ttext-align: center;\r\n\r\n\t\t\t\t//styling adjustment for inbuilt editors\r\n\t\t\t\ttextarea{\r\n\t\t\t\t\theight:auto !important;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsvg{\r\n\t\t\t\t\tmargin-top: 3px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinput{\r\n\t\t\t\t\t&::-ms-clear {\r\n\t\t\t\t\t\twidth : 0;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//styling child elements for sortable columns\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:25px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"none\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"asc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowActive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"desc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\t\t\tborder-bottom: none;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t&.tabulator-col-vertical{\r\n\t\t\t\t.tabulator-col-content{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\twriting-mode: vertical-rl;\r\n\t\t\t\t\t\ttext-orientation: mixed;\r\n\r\n\t\t\t\t\t\tdisplay:flex;\r\n\t\t\t\t\t\talign-items:center;\r\n\t\t\t\t\t\tjustify-content:center;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\ttransform: rotate(180deg);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-sortable{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\tpadding-top:20px;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\t\tpadding-bottom:20px;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\tright:calc(50% - 6px);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: absolute;\r\n\r\n\t\t\t// background-color: inherit;\r\n\r\n\t\t\tz-index: 10;\r\n\r\n\t\t\t&.tabulator-frozen-left{\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-frozen-right{\r\n\t\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\tbackground:lighten($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\t\t\tborder-bottom:1px solid $headerBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen-rows-holder{\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\t&:empty{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//scrolling element to hold table\r\n\t.tabulator-tableHolder{\r\n\t\tposition:relative;\r\n\t\twidth:100%;\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:auto;\r\n\t\t-webkit-overflow-scrolling: touch;\r\n\r\n\t\t&:focus{\r\n\t\t\toutline: none;\r\n\t\t}\r\n\r\n\t\t//default placeholder element\r\n\t\t.tabulator-placeholder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t&[tabulator-render-mode=\"virtual\"]{\r\n\t\t\t\tmin-height:100%;\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\r\n\t\t\twidth:100%;\r\n\r\n\t\t\tspan{\r\n\t\t\t\tdisplay: inline-block;\r\n\r\n\t\t\t\tmargin:0 auto;\r\n\t\t\t\tpadding:10px;\r\n\r\n\t\t\t\tcolor:#ccc;\r\n\t\t\t\tfont-weight: bold;\r\n\t\t\t\tfont-size: 20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//element to hold table rows\r\n\t\t.tabulator-table{\r\n\t\t\tposition:relative;\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tbackground-color:$rowBackgroundColor;\r\n\t\t\twhite-space: nowrap;\r\n\t\t\toverflow:visible;\r\n\t\t\tcolor:$rowTextColor;\r\n\r\n\t\t\t//row element\r\n\t\t\t.tabulator-row{\r\n\t\t\t\t&.tabulator-calcs{\r\n\t\t\t\t\tfont-weight: bold;\r\n\t\t\t\t\tbackground:darken($rowAltBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t\t&.tabulator-calcs-top{\r\n\t\t\t\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-calcs-bottom{\r\n\t\t\t\t\t\tborder-top:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\t//footer element\r\n\t.tabulator-footer{\r\n\t\tpadding:5px 10px;\r\n\t\tborder-top:1px solid $footerSeperatorColor;\r\n\t\tbackground-color: $footerBackgroundColor;\r\n\t\ttext-align: right;\r\n\t\tcolor: $footerTextColor;\r\n\t\tfont-weight:bold;\r\n\t\twhite-space:nowrap;\r\n\t\tuser-select:none;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\twidth:calc(100% + 20px);\r\n\t\t\tmargin:-5px -10px 5px -10px;\r\n\r\n\t\t\ttext-align: left;\r\n\r\n\t\t\tbackground:lighten($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-bottom:1px solid $rowBorderColor;\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&:only-child{\r\n\t\t\t\tmargin-bottom:-5px;\r\n\t\t\t\tborder-bottom:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-paginator{\r\n\t\t\tcolor: $footerTextColor;\r\n\t\t\tfont-family:inherit;\r\n\t\t\tfont-weight:inherit;\r\n\t\t\tfont-size:inherit;\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-page-size{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 5px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\t\t}\r\n\r\n\t\t.tabulator-pages{\r\n\t\t\tmargin:0 7px;\r\n\t\t}\r\n\r\n\t\t//pagination button\r\n\t\t.tabulator-page{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 2px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\r\n\t\t\tbackground:rgba(255,255,255,.2);\r\n\r\n\t\t\t&.active{\r\n\t\t\t\tcolor:$footerActiveColor;\r\n\t\t\t}\r\n\r\n\t\t\t&:disabled{\r\n\t\t\t\topacity:.5;\r\n\t\t\t}\r\n\r\n\t\t\t&:not(.disabled){\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground:rgba(0,0,0,.2);\r\n\t\t\t\t\tcolor:#fff;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\ttop:0;\r\n\t\tbottom:0;\r\n\t\twidth:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\tleft:0;\r\n\t\t\tright:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ew-resize;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//holding div that contains loader and covers tabulator element to prevent interaction\r\n\t.tabulator-loader{\r\n\t\tposition:absolute;\r\n\t\tdisplay: flex;\r\n\t\talign-items:center;\r\n\r\n\t\ttop:0;\r\n\t\tleft:0;\r\n\t\tz-index:100;\r\n\r\n\t\theight:100%;\r\n\t\twidth:100%;\r\n\t\tbackground:rgba(0,0,0,.4);\r\n\t\ttext-align:center;\r\n\r\n\t\t//loading message element\r\n\t\t.tabulator-loader-msg{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 auto;\r\n\t\t\tpadding:10px 20px;\r\n\r\n\t\t\tborder-radius:10px;\r\n\r\n\t\t\tbackground:#fff;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:16px;\r\n\r\n\t\t\t//loading message\r\n\t\t\t&.tabulator-loading{\r\n\t\t\t\tborder:4px solid #333;\r\n\t\t\t\tcolor:#000;\r\n\t\t\t}\r\n\r\n\t\t\t//error message\r\n\t\t\t&.tabulator-error{\r\n\t\t\t\tborder:4px solid #D00;\r\n\t\t\t\tcolor:#590000;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//row element\r\n.tabulator-row{\r\n\tposition: relative;\r\n\tbox-sizing: border-box;\r\n\tmin-height:$textSize + ($headerMargin * 2);\r\n\tbackground-color: $rowBackgroundColor;\r\n\r\n\r\n\t&.tabulator-row-even{\r\n\t\tbackground-color: $rowAltBackgroundColor;\r\n\t}\r\n\r\n\t&.tabulator-selectable:hover{\r\n\t\tbackground-color:$rowHoverBackground;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-selected{\r\n\t\tbackground-color:$rowSelectedBackground;\r\n\t}\r\n\r\n\t&.tabulator-selected:hover{\r\n\t\tbackground-color:$rowSelectedBackgroundHover;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-row-moving{\r\n\t\tborder:1px solid #000;\r\n\t\tbackground:#fff;\r\n\t}\r\n\r\n\t&.tabulator-moving{\r\n\t\tposition: absolute;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpointer-events: none;\r\n\t\tz-index:15;\r\n\t}\r\n\r\n\t//row resize handles\r\n\t.tabulator-row-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\tbottom:0;\r\n\t\tleft:0;\r\n\t\theight:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\ttop:0;\r\n\t\t\tbottom:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ns-resize;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-frozen{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: absolute;\r\n\r\n\t\tbackground-color: inherit;\r\n\r\n\t\tz-index: 10;\r\n\r\n\t\t&.tabulator-frozen-left{\r\n\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-frozen-right{\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-responsive-collapse{\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t&:empty{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\ttable{\r\n\t\t\tfont-size:$textSize;\r\n\r\n\t\t\ttr{\r\n\t\t\t\ttd{\r\n\t\t\t\t\tposition: relative;\r\n\r\n\t\t\t\t\t&:first-of-type{\r\n\t\t\t\t\t\tpadding-right:10px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//cell element\r\n\t.tabulator-cell{\r\n\t\tdisplay:inline-block;\r\n\t\tposition: relative;\r\n\t\tbox-sizing:border-box;\r\n\t\tpadding:4px;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tvertical-align:middle;\r\n\t\twhite-space:nowrap;\r\n\t\toverflow:hidden;\r\n\t\ttext-overflow:ellipsis;\r\n\r\n\t\t&.tabulator-editing{\r\n\t\t\tborder:1px solid $editBoxColor;\r\n\t\t\tpadding: 0;\r\n\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-validation-fail{\r\n\t\t\tborder:1px solid $errorColor;\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\r\n\t\t\t\tcolor: $errorColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//hide left resize handle on first column\r\n\t\t&:first-child{\r\n\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//movable row handle\r\n\t\t&.tabulator-row-handle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\t//handle holder\r\n\t\t\t.tabulator-row-handle-box{\r\n\t\t\t\twidth:80%;\r\n\r\n\t\t\t\t//Hamburger element\r\n\t\t\t\t.tabulator-row-handle-bar{\r\n\t\t\t\t\twidth:100%;\r\n\t\t\t\t\theight:3px;\r\n\t\t\t\t\tmargin-top:2px;\r\n\t\t\t\t\tbackground:#666;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-branch{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:9px;\r\n\t\t\twidth:7px;\r\n\r\n\t\t\tmargin-top:-9px;\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control{\r\n\r\n\t\t\tdisplay:inline-flex;\r\n\t\t\tjustify-content:center;\r\n\t\t\talign-items:center;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:11px;\r\n\t\t\twidth:11px;\r\n\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder:1px solid $rowTextColor;\r\n\t\t\tborder-radius:2px;\r\n\t\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\t\toverflow:hidden;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\tcursor:pointer;\r\n\t\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: transparent;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-expand{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-responsive-collapse-toggle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\theight:15px;\r\n\t\t\twidth:15px;\r\n\r\n\t\t\tborder-radius:20px;\r\n\t\t\tbackground:#666;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:1.1em;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\topacity:.7;\r\n\t\t\t}\r\n\r\n\t\t\t&.open{\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\t\tdisplay:initial;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-open{\r\n\t\t\t\t\tdisplay:none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\tdisplay:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-traffic-light{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\theight:14px;\r\n\t\t\twidth:14px;\r\n\r\n\t\t\tborder-radius:14px;\r\n\t\t}\r\n\t}\r\n\r\n\t//row grouping element\r\n\t&.tabulator-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:1px solid #999;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #999;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:#ccc;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\tpadding-left:30px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\tpadding-left:50px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\tpadding-left:70px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\tpadding-left:90px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\tpadding-left:110px;\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:#d00;\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n.tabulator-menu{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\tbox-shadow: 0 0 5px 0 rgba(0, 0, 0, .2);\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-menu-item{\r\n\r\n\t\tpadding:5px 10px;\r\n\r\n\t\tuser-select: none;\r\n\r\n\t\t&.tabulator-menu-item-disabled{\r\n\t\t\topacity: .5;\r\n\t\t}\r\n\r\n\t\t&:not(.tabulator-menu-item-disabled):hover{\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground: $rowAltBackgroundColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-menu-separator{\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t}\r\n}\r\n\r\n.tabulator-edit-select-list{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tmax-height:200px;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-edit-select-list-item{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\r\n\t\t&.active{\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\r\n\t\t\t&.focused{\r\n\t\t\t\toutline:1px solid rgba($rowBackgroundColor, .5);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.focused{\r\n\t\t\toutline:1px solid $editBoxColor;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-notice{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\ttext-align: center;\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-group{\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpadding:4px;\r\n\t\tpadding-top:6px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\tfont-weight:bold;\r\n\t}\r\n}\r\n\r\n// Table print styling\r\n\r\n.tabulator-print-fullscreen{\r\n\tposition: absolute;\r\n\ttop:0;\r\n\tbottom:0;\r\n\tleft:0;\r\n\tright:0;\r\n\r\n\tz-index: 10000;\r\n}\r\n\r\nbody.tabulator-print-fullscreen-hide>*:not(.tabulator-print-fullscreen){\r\n\tdisplay:none !important;\r\n}\r\n\r\n.tabulator-print-table{\r\n\tborder-collapse: collapse;\r\n\r\n\t.tabulator-data-tree-branch{\r\n\t\tdisplay:inline-block;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:9px;\r\n\t\twidth:7px;\r\n\r\n\t\tmargin-top:-9px;\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\tborder-left:2px solid $rowBorderColor;\r\n\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t}\r\n\r\n\t//row grouping element\r\n\t.tabulator-print-table-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:1px solid #999;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #999;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:#ccc;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:30px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:50px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:70px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:90px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:110px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:#d00;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-data-tree-control{\r\n\r\n\t\tdisplay:inline-flex;\r\n\t\tjustify-content:center;\r\n\t\talign-items:center;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:11px;\r\n\t\twidth:11px;\r\n\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder:1px solid $rowTextColor;\r\n\t\tborder-radius:2px;\r\n\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\toverflow:hidden;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: transparent;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-expand{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n"]} \ No newline at end of file diff --git a/app/static/vendors/tabulator/css/tabulator_midnight.css b/app/static/vendors/tabulator/css/tabulator_midnight.css new file mode 100644 index 0000000..bc9796c --- /dev/null +++ b/app/static/vendors/tabulator/css/tabulator_midnight.css @@ -0,0 +1,999 @@ +/* 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/app/static/vendors/tabulator/css/tabulator_midnight.min.css b/app/static/vendors/tabulator/css/tabulator_midnight.min.css new file mode 100644 index 0000000..a9ea0de --- /dev/null +++ b/app/static/vendors/tabulator/css/tabulator_midnight.min.css @@ -0,0 +1,3 @@ +/* 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/app/static/vendors/tabulator/css/tabulator_midnight.min.css.map b/app/static/vendors/tabulator/css/tabulator_midnight.min.css.map new file mode 100644 index 0000000..0a41946 --- /dev/null +++ b/app/static/vendors/tabulator/css/tabulator_midnight.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["tabulator_midnight.scss"],"names":[],"mappings":"AAyCA,WACC,kBAAkB,AAClB,sBAtCgB,AAuChB,sBAxCqB,AAyCrB,gBAAe,AACf,eAxCa,AAyCb,gBAAgB,AAMhB,uBAAwB,CAqgBxB,AAjhBD,iFAiBI,cAAc,CACd,AAlBJ,0CAuBE,oBAAqB,CACrB,AAxBF,kCA2BE,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CACjB,AA5BF,6BAgCE,kBAAiB,AACjB,sBAAsB,AAEtB,WAAU,AAEV,6BAlEwB,AAmExB,sBAtEyB,AAuEzB,WAtEmB,AAuEnB,gBAAgB,AAEhB,mBAAmB,AACnB,gBAAe,AAEf,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CA6PpB,AA7SF,qDAmDG,YAAY,CACZ,AApDH,4CAwDG,qBAAoB,AACpB,kBAAiB,AACjB,sBAAqB,AACrB,4BAzFoB,AA0FpB,sBA5FwB,AA6FxB,gBAAe,AACf,sBAAsB,AACtB,eAAgB,CA8LhB,AA7PH,6DAkEI,kBAAkB,AAClB,sBAhGsB,AAiGtB,mBAA8C,AAC9C,mBAAoB,CACpB,AAtEJ,mEA0EI,sBAAqB,AACrB,kBAAkB,AAClB,WAAW,CAkDX,AA9HJ,iGAgFK,aAAc,CAMd,AAtFL,uGAmFM,eAAe,AACf,UAAW,CACX,AArFN,wFA0FK,sBAAqB,AACrB,WAAW,AAEX,mBAAmB,AACnB,gBAAgB,AAChB,uBAAuB,AACvB,qBAAqB,CAerB,AA/GL,gHAoGM,sBAAsB,AACtB,WAAW,AAEX,sBAAqB,AAErB,YAAW,AAEX,gBAAgB,AAChB,UAAW,CACX,AA7GN,oFAmHK,qBAAqB,AACrB,kBAAkB,AAClB,QAAO,AACP,UAAS,AACT,QAAQ,AACR,SAAS,AACT,kCAAkC,AAClC,mCAAmC,AACnC,4BAnJmB,CAoJnB,AA5HL,0FAqIK,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AAEb,0BAtKkB,AAuKlB,gBAAgB,AAEhB,iBAAiB,CACjB,AA5IL,0FAkJK,YAAa,CACb,AAnJL,qEAwJI,kBAAkB,AAClB,sBAAsB,AACtB,eAAc,AACd,WAAU,AACV,iBAAkB,CAuBlB,AAnLJ,8EAgKK,qBAAsB,CACtB,AAjKL,yEAoKK,cAAe,CACf,AArKL,uJAwKK,sBAAqB,AACrB,gBAAgB,AAChB,UAAW,CACX,AA3KL,sFA+KM,QAAS,AACT,QAAS,CACT,AAjLN,oFAwLK,kBAAkB,CAClB,AAzLL,qEA4LK,eAAc,AACd,wBAAoD,CACpD,AA9LL,uHAmMM,gBAAgB,AAChB,4BA5NkB,CA6NlB,AArMN,sHA0MM,gBAAgB,AAChB,4BApOgB,CAqOhB,AA5MN,uHAiNM,0BA1OgB,AA2OhB,kBAAmB,CACnB,AAnNN,+GA0NM,uBAAyB,AAAzB,yBAAyB,AACzB,uBAAuB,AAEvB,oBAAY,AAAZ,aAAY,AACZ,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,sBAAsB,CACtB,AAhON,oHAqOM,wBAAyB,CACzB,AAtON,2GA2OM,gBAAe,AACf,gBAAgB,CAChB,AA7ON,uIAiPO,gBAAe,AACf,mBAAmB,CACnB,AAnPP,uGAwPM,qBAAqB,CACrB,AAzPN,+CAgQG,qBAAqB,AACrB,kBAAkB,AAIlB,UAAW,CASX,AA9QH,qEAwQI,2BA3RgB,CA4RhB,AAzQJ,sEA4QI,0BA/RgB,CAgShB,AA7QJ,qDAkRG,sBAAqB,AACrB,eAAc,AAEd,6BAAyD,AAUzD,0BAlTiB,AAmTjB,6BA9ToB,AAgUpB,eAAgB,CAChB,AAnSH,oEAwRI,4BAAyD,CAKzD,AA7RJ,iGA2RK,YAAa,CACb,AA5RL,2DAsSG,cAAc,CAKd,AA3SH,iEAySI,YAAa,CACb,AA1SJ,kCAiTE,kBAAiB,AACjB,WAAU,AACV,mBAAmB,AACnB,cAAa,AACb,gCAAiC,CAuDjC,AA5WF,wCAwTG,YAAa,CACb,AAzTH,yDA6TG,sBAAqB,AACrB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAOlB,UAAU,CAYV,AAlVH,wFAkUI,gBAAe,AACf,cAAc,CACd,AApUJ,8DAyUI,qBAAqB,AAErB,cAAa,AACb,aAAY,AAEZ,WAAU,AACV,gBAAiB,AACjB,cAAe,CACf,AAjVJ,mDAsVG,kBAAiB,AACjB,qBAAoB,AACpB,sBA7WqB,AA8WrB,mBAAmB,AACnB,iBAAgB,AAChB,UA7We,CA6Xf,AA3WH,kFA+VK,gBAAiB,AACjB,4BAAwD,CASxD,AAzWL,sGAmWM,4BAtXc,CAuXd,AApWN,yGAuWM,yBA1Xc,CA2Xd,AAxWN,wCAgXE,kBAAiB,AACjB,QAAO,AACP,MAAK,AACL,SAAQ,AACR,SAAS,CAUT,AA9XF,6CAuXG,OAAM,AACN,UAAU,CACV,AAzXH,8CA4XG,gBAAgB,CAChB,AA7XH,6BAmYE,iBAAgB,AAChB,0BAzYwB,AA0YxB,sBA7YyB,AA8YzB,iBAAgB,AAChB,WA9YmB,AA+YnB,gBAAgB,AAChB,mBAAkB,AAClB,qBAAgB,AAAhB,iBAAgB,AAEhB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAuFpB,AAteF,qDAkZG,sBAAqB,AACrB,wBAAuB,AACvB,sBAA2B,AAE3B,gBAAgB,AAEhB,6BAAwD,AAWxD,6BAtbiB,AAubjB,0BAvbiB,AAybjB,eAAgB,CAMhB,AA5aH,oEA2ZI,6BAAwD,AACxD,UA3biB,CAgcjB,AAjaJ,iGA+ZK,YAAa,CACb,AAhaL,gEAyaI,mBAAkB,AAClB,kBAAkB,CAClB,AA3aJ,wDAibI,UAAU,CACV,AAlbJ,kDAubG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBAlcoB,AAmcpB,iBAAiB,CACjB,AA9bH,8CAkcG,YAAY,CACZ,AAncH,6CAucG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBAldoB,AAmdpB,kBAAiB,AAEjB,8BAA+B,AAE/B,WAxdkB,AAydlB,oBAAmB,AACnB,oBAAmB,AACnB,iBAAiB,CAiBjB,AAreH,oDAudI,UA3dmB,CA4dnB,AAxdJ,sDA2dI,UAAU,CACV,AA5dJ,kEAgeK,eAAc,AACd,0BAAyB,AACzB,UAAU,CACV,AAneL,6BA0eE,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAElB,MAAK,AACL,OAAM,AACN,YAAW,AAEX,YAAW,AACX,WAAU,AACV,0BAAyB,AACzB,iBAAiB,CA2BjB,AAhhBF,mDAyfG,qBAAoB,AAEpB,cAAa,AACb,kBAAiB,AAEjB,mBAAkB,AAElB,gBAAe,AACf,gBAAgB,AAChB,cAAc,CAad,AA/gBH,qEAsgBI,sBAAqB,AACrB,UAAU,CACV,AAxgBJ,mEA4gBI,sBAAqB,AACrB,aAAa,CACb,AAMJ,eACC,kBAAkB,AAClB,sBAAsB,AAEtB,gBAA0C,AAC1C,qBA9iBuB,CA05BvB,AAjXD,6BAQE,qBAhjByB,CAijBzB,AATF,0CAYE,sBAjjBsB,AAkjBtB,cAAe,CACf,AAdF,kCAiBE,qBApjB0B,CAqjB1B,AAlBF,wCAqBE,sBAvjB+B,AAwjB/B,cAAe,CACf,AAvBF,gCA0BE,kBAAkB,AAElB,0BAnkBkB,AAokBlB,6BApkBkB,AAskBlB,8BAA+B,AAC/B,UAAU,CACV,AAjCF,4CAqCE,kBAAiB,AACjB,QAAO,AACP,SAAQ,AACR,OAAM,AACN,UAAU,CAUV,AAnDF,iDA4CG,MAAK,AACL,WAAW,CACX,AA9CH,kDAiDG,gBAAgB,CAChB,AAlDH,iCAsDE,qBAAqB,AACrB,kBAAkB,AAElB,yBAAyB,AAEzB,UAAW,CASX,AApEF,uDA8DG,2BArmBiB,CAsmBjB,AA/DH,wDAkEG,0BAzmBiB,CA0mBjB,AAnEH,8CAuEE,sBAAqB,AAErB,YAAW,AAEX,0BAlnBkB,AAmnBlB,4BAnnBkB,CAsoBlB,AA/FF,oDA+EG,YAAY,CACZ,AAhFH,oDAmFG,cA1oBW,CAqpBX,AA9FH,0DAuFK,iBAAkB,CAKlB,AA5FL,wEA0FM,kBAAkB,CAClB,AA3FN,+BAoGE,qBAAoB,AACpB,kBAAkB,AAClB,sBAAqB,AACrB,YAAW,AACX,4BA/oBkB,AAgpBlB,sBAAqB,AACrB,mBAAkB,AAClB,gBAAe,AACf,sBAAsB,CA0LtB,AAtSF,iDAgHG,sBAhpBe,AAipBf,SAAU,CAMV,AAvHH,+GAoHI,WAAU,AACV,sBAAsB,CACtB,AAtHJ,yDA0HG,qBAzpBgB,CAgqBhB,AAjIH,+HA4HI,WAAU,AACV,uBAAsB,AAEtB,UA9pBe,CA+pBf,AAhIJ,6EAsII,YAAa,CACb,AAvIJ,oDA6IG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAElB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAcpB,AAjKH,8EAuJI,SAAS,CAST,AAhKJ,wGA2JK,WAAU,AACV,WAAU,AACV,eAAc,AACd,eAAe,CACf,AA/JL,2DAoKG,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BAttBiB,AAutBjB,4BAvtBiB,CAwtBjB,AAjLH,4DAqLG,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBAruBe,AAsuBf,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAmDf,AAtPH,kEAsMI,eAAc,AACd,yBAA4B,CAC5B,AAxMJ,kGA2MI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AA9NJ,wGAoNK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAlwBa,CAmwBb,AA7NL,gGAiOI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eA7wBc,CA0xBd,AApPJ,sGA0OK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAxxBa,CAyxBb,AAnPL,qEAyPG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,uBAAsB,AAEtB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,oBAAoB,AAEpB,YAAW,AACX,WAAU,AAEV,mBAAkB,AAClB,gBAAe,AAEf,WAjzBqB,AAkzBrB,gBAAgB,AAChB,eAAe,CAmBf,AA7RH,2EA6QI,UAAU,CACV,AA9QJ,sHAkRK,eAAe,CACf,AAnRL,sOA2RI,YAAY,CACZ,AA5RJ,wDAgSG,qBAAqB,AACrB,YAAW,AACX,WAAU,AAEV,kBAAkB,CAClB,AArSH,+BA4SE,sBAAqB,AACrB,6BAA4B,AAC5B,4BAr1BkB,AAs1BlB,0BAAyB,AACzB,YAAW,AACX,kBAAiB,AACjB,gBAAe,AACf,gBAAgB,AAChB,WAAU,AAEV,cAAe,CA0Df,AAhXF,qCAyTG,eAAc,AACd,+BAA+B,CAC/B,AA3TH,wEA+TI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,0BA/2BkB,AAg3BlB,eAAgB,CAChB,AApUJ,uDAwUG,iBAAiB,CACjB,AAzUH,uDA4UG,iBAAiB,CACjB,AA7UH,uDAgVG,iBAAiB,CACjB,AAjVH,uDAoVG,iBAAiB,CACjB,AArVH,uDAwVG,kBAAkB,CAClB,AAzVH,uDA4VG,oBAAqB,CACrB,AA7VH,gDAiWG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,2BAr5BmB,AAs5BnB,qBAAqB,CACrB,AA1WH,oCA6WG,iBAAgB,AAChB,UAAU,CACV,AAIH,gBACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,gBAj6BuB,AAk6BvB,sBAh6BmB,AAi6BnB,oCAAuC,AAEvC,eAn7Ba,AAq7Bb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CAqBd,AAnCD,qCAkBE,iBAAgB,AAEhB,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CAUjB,AA9BF,kEAuBG,UAAW,CACX,AAxBH,8EA2BG,eAAe,AACf,eAv7BwB,CAw7BxB,AA7BH,0CAiCE,yBA37BkB,CA47BlB,AAGF,4BACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,iBAAgB,AAEhB,gBAr8BiB,AAs8BjB,sBAv8BmB,AAy8BnB,eAz9Ba,AA29Bb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CA6Cd,AA5DD,6DAkBE,YAAW,AAEX,UAr9BsB,CA2+BtB,AA1CF,oEAuBG,WA/8Be,AAg9Bf,eAx9BwB,CA69BxB,AA7BH,4EA2BI,mCAn9Bc,CAo9Bd,AA5BJ,qEAgCG,sBAh+BwB,CAi+BxB,AAjCH,mEAqCG,eAAc,AAEd,WA/9Be,AAg+Bf,eAz+BqB,CA0+BrB,AAzCH,+DA6CE,YAAW,AAEX,WA7+BgB,AA8+BhB,iBAAkB,CAClB,AAjDF,8DAoDE,6BAn/BkB,AAq/BlB,YAAW,AACX,gBAAe,AAEf,WAv/BgB,AAw/BhB,eAAgB,CAChB,AAKF,4BACC,kBAAkB,AAClB,MAAK,AACL,SAAQ,AACR,OAAM,AACN,QAAO,AAEP,aAAc,CACd,AAED,uEACC,sBAAuB,CACvB,AAED,uBACC,wBAAyB,CAwKzB,AAzKD,oDAME,sBAAqB,AACrB,6BAA4B,AAC5B,4BArhCkB,AAshClB,0BAAyB,AACzB,YAAW,AACX,kBAAiB,AACjB,gBAAe,AACf,gBAAgB,AAChB,WAAU,AAEV,cAAe,CAoEf,AApFF,0DAmBG,eAAc,AACd,+BAA+B,CAC/B,AArBH,6FAyBI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,0BA/iCkB,AAgjClB,eAAgB,CAChB,AA9BJ,+EAmCI,2BAA4B,CAC5B,AApCJ,+EAyCI,2BAA4B,CAC5B,AA1CJ,+EA+CI,2BAA4B,CAC5B,AAhDJ,+EAqDI,2BAA4B,CAC5B,AAtDJ,+EA2DI,4BAA6B,CAC7B,AA5DJ,4EAgEG,oBAAqB,CACrB,AAjEH,qEAqEG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,2BA/lCmB,AAgmCnB,qBAAqB,CACrB,AA9EH,yDAiFG,iBAAgB,AAChB,UAAU,CACV,AAnFH,mDAuFE,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BA/mCkB,AAgnClB,4BAhnCkB,CAinClB,AApGF,oDAwGE,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBA9nCgB,AA+nChB,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAkDf,AAxKF,0DAyHG,eAAc,AACd,yBAA4B,CAC5B,AA3HH,0FA8HG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AAjJH,gGAuII,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA3pCc,CA4pCd,AAhJJ,wFAoJG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eAtqCe,CAmrCf,AAvKH,8FA6JI,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAjrCc,CAkrCd","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/app/static/vendors/tabulator/css/tabulator_modern.css b/app/static/vendors/tabulator/css/tabulator_modern.css new file mode 100644 index 0000000..90defa5 --- /dev/null +++ b/app/static/vendors/tabulator/css/tabulator_modern.css @@ -0,0 +1,1032 @@ +/* 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/app/static/vendors/tabulator/css/tabulator_modern.min.css b/app/static/vendors/tabulator/css/tabulator_modern.min.css new file mode 100644 index 0000000..df7a81a --- /dev/null +++ b/app/static/vendors/tabulator/css/tabulator_modern.min.css @@ -0,0 +1,3 @@ +/* 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/app/static/vendors/tabulator/css/tabulator_modern.min.css.map b/app/static/vendors/tabulator/css/tabulator_modern.min.css.map new file mode 100644 index 0000000..5f594c8 --- /dev/null +++ b/app/static/vendors/tabulator/css/tabulator_modern.min.css.map @@ -0,0 +1 @@ +{"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/app/static/vendors/tabulator/css/tabulator_simple.css b/app/static/vendors/tabulator/css/tabulator_simple.css new file mode 100644 index 0000000..fb660a9 --- /dev/null +++ b/app/static/vendors/tabulator/css/tabulator_simple.css @@ -0,0 +1,992 @@ +/* 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/app/static/vendors/tabulator/css/tabulator_simple.min.css b/app/static/vendors/tabulator/css/tabulator_simple.min.css new file mode 100644 index 0000000..c4148e8 --- /dev/null +++ b/app/static/vendors/tabulator/css/tabulator_simple.min.css @@ -0,0 +1,3 @@ +/* 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/app/static/vendors/tabulator/css/tabulator_simple.min.css.map b/app/static/vendors/tabulator/css/tabulator_simple.min.css.map new file mode 100644 index 0000000..0a0672f --- /dev/null +++ b/app/static/vendors/tabulator/css/tabulator_simple.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["tabulator_simple.scss"],"names":[],"mappings":"AA0CA,WACC,kBAAkB,AAClB,sBAxCqB,AAyCrB,gBAAe,AACf,eAxCa,AAyCb,gBAAgB,AAMhB,uBAAwB,CA2fxB,AAtgBD,iFAgBI,cAAc,CACd,AAjBJ,0CAsBE,oBAAqB,CACrB,AAvBF,kCA0BE,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CACjB,AA3BF,6BA+BE,kBAAiB,AACjB,sBAAsB,AAEtB,WAAU,AAEV,6BAlEwB,AAmExB,sBAtEyB,AAuEzB,WAtEmB,AAuEnB,gBAAgB,AAEhB,mBAAmB,AACnB,gBAAe,AAEf,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAqPpB,AApSF,qDAkDG,YAAY,CACZ,AAnDH,4CAuDG,qBAAoB,AACpB,kBAAiB,AACjB,sBAAqB,AACrB,4BAzFoB,AA0FpB,sBA5FwB,AA6FxB,gBAAe,AACf,sBAAsB,AACtB,eAAgB,CAwLhB,AAtPH,6DAiEI,kBAAkB,AAClB,sBAhGsB,AAiGtB,mBAA8C,AAC9C,mBAAoB,CACpB,AArEJ,mEAyEI,sBAAqB,AACrB,kBAAkB,AAClB,WAAW,CAgDX,AA3HJ,iGA+EK,aAAc,CAMd,AArFL,uGAkFM,eAAe,AACf,UAAW,CACX,AApFN,wFAyFK,sBAAqB,AACrB,WAAW,AAEX,mBAAmB,AACnB,gBAAgB,AAChB,uBAAuB,AACvB,qBAAqB,CAarB,AA5GL,gHAmGM,sBAAsB,AACtB,WAAW,AAEX,sBAAqB,AAErB,YAAW,AAEX,eAAgB,CAChB,AA3GN,oFAgHK,qBAAqB,AACrB,kBAAkB,AAClB,QAAO,AACP,UAAS,AACT,QAAQ,AACR,SAAS,AACT,kCAAkC,AAClC,mCAAmC,AACnC,4BAjJmB,CAkJnB,AAzHL,0FAkIK,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AAEb,0BApKkB,AAqKlB,gBAAgB,AAEhB,iBAAiB,CACjB,AAzIL,0FAgJK,YAAa,CACb,AAjJL,qEAsJI,kBAAkB,AAClB,sBAAsB,AACtB,eAAc,AACd,WAAU,AACV,iBAAkB,CAiBlB,AA3KJ,8EA8JK,qBAAsB,CACtB,AA/JL,yEAkKK,cAAe,CACf,AAnKL,sFAuKO,QAAS,AACT,QAAS,CACV,AAzKN,oFAiLK,kBAAkB,CAClB,AAlLL,qEAqLK,eAAc,AACd,wBAAoD,CACpD,AAvLL,uHA4LM,gBAAgB,AAChB,4BAtNkB,CAuNlB,AA9LN,sHAmMM,gBAAgB,AAChB,4BA9NgB,CA+NhB,AArMN,uHA0MM,0BApOgB,AAqOhB,kBAAmB,CACnB,AA5MN,+GAmNM,uBAAyB,AAAzB,yBAAyB,AACzB,uBAAuB,AAEvB,oBAAY,AAAZ,aAAY,AACZ,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,sBAAsB,CACtB,AAzNN,oHA8NM,wBAAyB,CACzB,AA/NN,2GAoOM,gBAAe,AACf,gBAAgB,CAChB,AAtON,uIA0OO,gBAAe,AACf,mBAAmB,CACnB,AA5OP,uGAiPM,qBAAqB,CACrB,AAlPN,+CAyPG,qBAAqB,AACrB,kBAAkB,AAIlB,UAAW,CASX,AAvQH,qEAiQI,2BArRgB,CAsRhB,AAlQJ,sEAqQI,0BAzRgB,CA0RhB,AAtQJ,qDA0QG,sBAAqB,AACrB,eAAc,AAEd,6BAAwD,AAUxD,0BA3SiB,AA4SjB,6BAtTuB,AAwTvB,eAAgB,CAChB,AA3RH,oEAgRI,4BAAwD,CAKxD,AArRJ,iGAmRK,YAAa,CACb,AApRL,2DA8RG,cAAc,CAKd,AAnSH,iEAiSI,YAAa,CACb,AAlSJ,kCA0SE,kBAAiB,AACjB,WAAU,AACV,mBAAmB,AACnB,cAAa,AACb,gCAAiC,CAwDjC,AAtWF,wCAiTG,YAAa,CACb,AAlTH,yDAsTG,sBAAqB,AACrB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAOlB,UAAU,CAYV,AA3UH,wFA2TI,gBAAe,AACf,cAAc,CACd,AA7TJ,8DAkUI,qBAAqB,AAErB,cAAa,AACb,aAAY,AAEZ,WAAU,AACV,gBAAiB,AACjB,cAAe,CACf,AA1UJ,mDA+UG,kBAAiB,AACjB,qBAAoB,AACpB,sBAvWqB,AAwWrB,mBAAmB,AACnB,iBAAgB,AAChB,UAvWe,CAwXf,AArWH,kFAwVK,gBAAiB,AACjB,4BAAwD,CASxD,AAlWL,sGA4VM,4BAhXc,CAiXd,AA7VN,yGAgWM,yBApXc,CAqXd,AAjWN,wCA0WE,kBAAiB,AACjB,QAAO,AACP,MAAK,AACL,SAAQ,AACR,SAAS,CAUT,AAxXF,6CAiXG,OAAM,AACN,UAAU,CACV,AAnXH,8CAsXG,gBAAgB,CAChB,AAvXH,6BA6XE,iBAAgB,AAChB,0BAnYwB,AAoYxB,sBAvYyB,AAwYzB,iBAAgB,AAChB,WAxYmB,AAyYnB,gBAAgB,AAChB,mBAAkB,AAClB,qBAAgB,AAAhB,iBAAgB,AAEhB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAkFpB,AA3dF,qDA4YG,sBAAqB,AACrB,wBAAuB,AACvB,sBAA2B,AAE3B,gBAAgB,AAEhB,6BAAwD,AAUxD,6BApawB,AAqaxB,0BAjbiB,AAmbjB,eAAgB,CAMhB,AAraH,oEAqZI,4BAAwD,CAKxD,AA1ZJ,iGAwZK,YAAa,CACb,AAzZL,gEAkaI,mBAAkB,AAClB,kBAAkB,CAClB,AApaJ,kDAyaG,WAhbkB,AAiblB,oBAAmB,AACnB,oBAAmB,AACnB,iBAAiB,CACjB,AA7aH,kDAibG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBA5boB,AA6bpB,iBAAiB,CACjB,AAxbH,8CA4bG,YAAY,CACZ,AA7bH,6CAicG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBA5coB,AA6cpB,kBAAiB,AAEjB,6BAA+B,CAiB/B,AA1dH,oDA4cI,UAhdmB,CAidnB,AA7cJ,sDAgdI,UAAU,CACV,AAjdJ,kEAqdK,eAAc,AACd,0BAAyB,AACzB,UAAU,CACV,AAxdL,6BA+dE,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAElB,MAAK,AACL,OAAM,AACN,YAAW,AAEX,YAAW,AACX,WAAU,AACV,0BAAyB,AACzB,iBAAiB,CA2BjB,AArgBF,mDA8eG,qBAAoB,AAEpB,cAAa,AACb,kBAAiB,AAEjB,mBAAkB,AAElB,gBAAe,AACf,gBAAgB,AAChB,cAAc,CAad,AApgBH,qEA2fI,sBAAqB,AACrB,UAAU,CACV,AA7fJ,mEAigBI,sBAAqB,AACrB,aAAa,CACb,AAMJ,eACC,kBAAkB,AAClB,sBAAsB,AAEtB,gBAA0C,AAE1C,4BAniBmB,CA+4BnB,AAlXD,4CAKC,qBApiBuB,CAyiBtB,AAVF,0CAaE,sBAxiBsB,AAyiBtB,cAAe,CACf,AAfF,kCAkBE,wBA3iB6B,CA4iB7B,AAnBF,wCAsBE,yBA9iBkC,AA+iBlC,cAAe,CACf,AAxBF,gCA2BE,kBAAkB,AAElB,0BA1jBkB,AA2jBlB,6BA3jBkB,AA6jBlB,8BAA+B,AAC/B,UAAU,CACV,AAlCF,4CAsCE,kBAAiB,AACjB,QAAO,AACP,SAAQ,AACR,OAAM,AACN,UAAU,CAUV,AApDF,iDA6CG,MAAK,AACL,WAAW,CACX,AA/CH,kDAkDG,gBAAgB,CAChB,AAnDH,iCAuDE,qBAAqB,AACrB,kBAAkB,AAElB,yBAAyB,AAEzB,UAAW,CASX,AArEF,uDA+DG,2BA5lBiB,CA6lBjB,AAhEH,wDAmEG,0BAhmBiB,CAimBjB,AApEH,8CAwEE,sBAAqB,AAErB,YAAW,AAEX,0BAzmBkB,AA0mBlB,4BA1mBkB,CA6nBlB,AAhGF,oDAgFG,YAAY,CACZ,AAjFH,oDAoFG,cAjoBW,CA4oBX,AA/FH,0DAwFK,iBAAkB,CAKlB,AA7FL,wEA2FM,kBAAkB,CAClB,AA5FN,+BAoGE,qBAAoB,AACpB,kBAAkB,AAClB,sBAAqB,AACrB,YAAW,AACX,4BAroBkB,AAsoBlB,sBAAqB,AACrB,mBAAkB,AAClB,gBAAe,AACf,sBAAsB,CA6LtB,AAzSF,4CA+GG,iBAAkB,CAClB,AAhHH,iDAmHG,yBAxoBkB,AAyoBlB,SAAU,CAMV,AA1HH,+GAuHI,WAAU,AACV,sBAAsB,CACtB,AAzHJ,yDA6HG,qBAjpBgB,CAwpBhB,AApIH,+HA+HI,WAAU,AACV,uBAAsB,AAEtB,UAtpBe,CAupBf,AAnIJ,6EAyII,YAAa,CACb,AA1IJ,oDAgJG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAElB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAcpB,AApKH,8EA0JI,SAAS,CAST,AAnKJ,wGA8JK,WAAU,AACV,WAAU,AACV,eAAc,AACd,eAAe,CACf,AAlKL,2DAuKG,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BA/sBiB,AAgtBjB,4BAhtBiB,CAitBjB,AApLH,4DAwLG,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBA9tBe,AA+tBf,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAmDf,AAzPH,kEAyMI,eAAc,AACd,yBAA4B,CAC5B,AA3MJ,kGA8MI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AAjOJ,wGAuNK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA3vBa,CA4vBb,AAhOL,gGAoOI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eAtwBc,CAmxBd,AAvPJ,sGA6OK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAjxBa,CAkxBb,AAtPL,qEA4PG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,uBAAsB,AAEtB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,oBAAoB,AAEpB,YAAW,AACX,WAAU,AAEV,mBAAkB,AAClB,gBAAe,AAEf,WA1yBqB,AA2yBrB,gBAAgB,AAChB,eAAe,CAmBf,AAhSH,2EAgRI,UAAU,CACV,AAjRJ,sHAqRK,eAAe,CACf,AAtRL,sOA8RI,YAAY,CACZ,AA/RJ,wDAmSG,qBAAqB,AACrB,YAAW,AACX,WAAU,AAEV,kBAAkB,CAClB,AAxSH,+BA8SE,sBAAqB,AACrB,6BAA4B,AAC5B,4BA70BkB,AA80BlB,0BAAyB,AACzB,YAAW,AACX,kBAAiB,AACjB,mBAAkB,AAClB,gBAAgB,AAEhB,cAAe,CA0Df,AAjXF,qCA0TG,eAAc,AACd,+BAA+B,CAC/B,AA5TH,wEAgUI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,0BAt2BkB,AAu2BlB,eAAgB,CAChB,AArUJ,uDAyUG,iBAAiB,CACjB,AA1UH,uDA6UG,iBAAiB,CACjB,AA9UH,uDAiVG,iBAAiB,CACjB,AAlVH,uDAqVG,iBAAiB,CACjB,AAtVH,uDAyVG,kBAAkB,CAClB,AA1VH,uDA6VG,oBAAqB,CACrB,AA9VH,gDAkWG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,2BA54BmB,AA64BnB,qBAAqB,CACrB,AA3WH,oCA8WG,iBAAgB,AAChB,UAAU,CACV,AAIH,gBACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,gBAx5BuB,AAy5BvB,sBAv5BmB,AAw5BnB,oCAAuC,AAEvC,eA16Ba,AA46Bb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CAqBd,AAnCD,qCAkBE,iBAAgB,AAEhB,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CAUjB,AA9BF,kEAuBG,UAAW,CACX,AAxBH,8EA2BG,eAAe,AACf,eA96BwB,CA+6BxB,AA7BH,0CAiCE,yBAl7BkB,CAm7BlB,AAGF,4BACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,iBAAgB,AAEhB,gBA/7BuB,AAg8BvB,sBA97BmB,AAg8BnB,eAh9Ba,AAk9Bb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CA6Cd,AA5DD,6DAkBE,YAAW,AAEX,UAz8BgB,CA+9BhB,AA1CF,oEAuBG,WA/8BqB,AAg9BrB,kBAt8BkB,CA28BlB,AA7BH,4EA2BI,oCAn9BoB,CAo9BpB,AA5BJ,qEAgCG,yBA98BkB,CA+8BlB,AAjCH,mEAqCG,eAAc,AAEd,WA/9BqB,AAg+BrB,kBAt9BkB,CAu9BlB,AAzCH,+DA6CE,YAAW,AAEX,WAp+BgB,AAq+BhB,iBAAkB,CAClB,AAjDF,8DAoDE,6BA1+BkB,AA4+BlB,YAAW,AACX,gBAAe,AAEf,WA9+BgB,AA++BhB,eAAgB,CAChB,AAKF,4BACC,kBAAkB,AAClB,MAAK,AACL,SAAQ,AACR,OAAM,AACN,QAAO,AAEP,aAAc,CACd,AAED,uEACC,sBAAuB,CACvB,AAED,uBACC,wBAAyB,CAuKzB,AAxKD,oDAME,sBAAqB,AACrB,6BAA4B,AAC5B,4BA5gCkB,AA6gClB,0BAAyB,AACzB,YAAW,AACX,kBAAiB,AACjB,mBAAkB,AAClB,gBAAgB,AAEhB,cAAe,CAoEf,AAnFF,0DAkBG,eAAc,AACd,+BAA+B,CAC/B,AApBH,6FAwBI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,0BAriCkB,AAsiClB,eAAgB,CAChB,AA7BJ,+EAkCI,2BAA4B,CAC5B,AAnCJ,+EAwCI,2BAA4B,CAC5B,AAzCJ,+EA8CI,2BAA4B,CAC5B,AA/CJ,+EAoDI,2BAA4B,CAC5B,AArDJ,+EA0DI,4BAA6B,CAC7B,AA3DJ,4EA+DG,oBAAqB,CACrB,AAhEH,qEAoEG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,2BArlCmB,AAslCnB,qBAAqB,CACrB,AA7EH,yDAgFG,iBAAgB,AAChB,UAAU,CACV,AAlFH,mDAsFE,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BArmCkB,AAsmClB,4BAtmCkB,CAumClB,AAnGF,oDAuGE,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBApnCgB,AAqnChB,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAkDf,AAvKF,0DAwHG,eAAc,AACd,yBAA4B,CAC5B,AA1HH,0FA6HG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AAhJH,gGAsII,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAjpCc,CAkpCd,AA/IJ,wFAmJG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eA5pCe,CAyqCf,AAtKH,8FA4JI,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAvqCc,CAwqCd","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/app/static/vendors/tabulator/css/tabulator_site.css b/app/static/vendors/tabulator/css/tabulator_site.css new file mode 100644 index 0000000..7139757 --- /dev/null +++ b/app/static/vendors/tabulator/css/tabulator_site.css @@ -0,0 +1,993 @@ +/* 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/app/static/vendors/tabulator/css/tabulator_site.min.css b/app/static/vendors/tabulator/css/tabulator_site.min.css new file mode 100644 index 0000000..2fc522d --- /dev/null +++ b/app/static/vendors/tabulator/css/tabulator_site.min.css @@ -0,0 +1,3 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +.tabulator{position:relative;border-bottom:5px solid #222;background-color:#fff;font-size:14px;text-align:left;overflow:hidden;transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator[tabulator-layout=fitColumns] .tabulator-row .tabulator-cell:last-of-type{border-right:none}.tabulator.tabulator-block-select{-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator .tabulator-header{position:relative;box-sizing:border-box;width:100%;border-bottom:3px solid #3fb449;background-color:#222;color:#fff;font-weight:700;white-space:nowrap;overflow:hidden;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-col{display:inline-block;position:relative;box-sizing:border-box;border-right:1px solid #aaa;background-color:#222;text-align:left;vertical-align:bottom;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;border:1px solid #3fb449;background:#090909;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{box-sizing:border-box;width:100%;border:1px solid #999;padding:1px;background:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{display:inline-block;position:absolute;top:14px;right:8px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{position:relative;display:-ms-flexbox;display:flex;border-top:1px solid #aaa;overflow:hidden;margin-right:-1px}.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{position:relative;box-sizing:border-box;margin-top:2px;width:100%;text-align:center}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{width:0;height:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover{cursor:pointer;background-color:#090909}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #3fb449}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-arrow{border-top:6px solid #3fb449;border-bottom:none}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{-ms-writing-mode:tb-rl;writing-mode:vertical-rl;text-orientation:mixed;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-right:0;padding-bottom:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow{right:calc(50% - 6px)}.tabulator .tabulator-header .tabulator-frozen{display:inline-block;position:absolute;z-index:10}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;min-width:600%;background:#3c3c3c!important;border-top:1px solid #aaa;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#3c3c3c!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{min-width:600%}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableHolder{position:relative;width:100%;white-space:nowrap;overflow:auto;-webkit-overflow-scrolling:touch}.tabulator .tabulator-tableHolder:focus{outline:none}.tabulator .tabulator-tableHolder .tabulator-placeholder{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%;min-width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder span{display:inline-block;margin:0 auto;padding:10px;color:#3fb449;font-weight:700;font-size:20px}.tabulator .tabulator-tableHolder .tabulator-table{position:relative;display:inline-block;background-color:#fff;white-space:nowrap;overflow:visible;color:#333}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs{font-weight:700;background:#484848!important;color:#fff}.tabulator .tabulator-footer{padding:5px 10px;padding-top:8px;border-top:3px solid #3fb449;background-color:#222;text-align:right;color:#222;font-weight:700;white-space:nowrap;-ms-user-select:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-footer .tabulator-calcs-holder{box-sizing:border-box;width:calc(100% + 20px);margin:-8px -10px 8px;text-align:left;background:#3c3c3c!important;border-bottom:1px solid #aaa;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#3c3c3c!important;color:#fff!important}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{margin-bottom:-5px;border-bottom:none}.tabulator .tabulator-footer .tabulator-paginator label{color:#fff}.tabulator .tabulator-footer .tabulator-page-size{display:inline-block;margin:0 5px;padding:2px 5px;border:1px solid #aaa;border-radius:3px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{display:inline-block;margin:0 2px;padding:2px 5px;border:1px solid #aaa;border-radius:3px;background:#fff;color:#222;font-family:inherit;font-weight:inherit;font-size:inherit}.tabulator .tabulator-footer .tabulator-page.active{color:#3fb449}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{cursor:pointer;background:rgba(0,0,0,.2);color:#fff}.tabulator .tabulator-col-resize-handle{position:absolute;right:0;top:0;bottom:0;width:5px}.tabulator .tabulator-col-resize-handle.prev{left:0;right:auto}.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}.tabulator .tabulator-loader{position:absolute;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;top:0;left:0;z-index:100;height:100%;width:100%;background:rgba(0,0,0,.4);text-align:center}.tabulator .tabulator-loader .tabulator-loader-msg{display:inline-block;margin:0 auto;padding:10px 20px;border-radius:10px;background:#fff;font-weight:700;font-size:16px}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading{border:4px solid #333;color:#000}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error{border:4px solid #d00;color:#590000}.tabulator-row{position:relative;box-sizing:border-box;min-height:22px;background-color:#fff}.tabulator-row.tabulator-row-even{background-color:#efefef}.tabulator-row.tabulator-selectable:hover{background-color:#bbb;cursor:pointer}.tabulator-row.tabulator-selected{background-color:#9abcea}.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}.tabulator-row.tabulator-row-moving{border:1px solid #000;background:#fff}.tabulator-row.tabulator-moving{position:absolute;border-top:1px solid #aaa;border-bottom:1px solid #aaa;pointer-events:none!important;z-index:15}.tabulator-row .tabulator-row-resize-handle{position:absolute;right:0;bottom:0;left:0;height:5px}.tabulator-row .tabulator-row-resize-handle.prev{top:0;bottom:auto}.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}.tabulator-row .tabulator-frozen{display:inline-block;position:absolute;background-color:inherit;z-index:10}.tabulator-row .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #aaa;border-bottom:1px solid #aaa}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{display:inline-block;position:relative;box-sizing:border-box;padding:6px;border-right:1px solid #aaa;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{border:1px;background:transparent}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{border:1px;background:transparent;color:#d00}.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator-row .tabulator-cell.tabulator-row-handle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{width:100%;height:3px;margin-top:2px;background:#3fb449}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-row .tabulator-cell .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;height:15px;width:15px;border-radius:20px;background:#666;color:#fff;font-weight:700;font-size:1.1em}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{opacity:.7}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open,.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{display:inline-block;height:14px;width:14px;border-radius:14px}.tabulator-row.tabulator-group{box-sizing:border-box;border-right:1px solid #aaa;border-top:1px solid #000;border-bottom:2px solid #3fb449;padding:5px;padding-left:10px;background:#222;color:#fff;font-weight:700;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:#090909}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #3fb449;border-bottom:0}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #3fb449;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#3fb449}.tabulator-menu{position:absolute;display:inline-block;box-sizing:border-box;background:#fff;border:1px solid #aaa;box-shadow:0 0 5px 0 rgba(0,0,0,.2);font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-menu .tabulator-menu-item{padding:5px 10px;-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{cursor:pointer;background:#efefef}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #aaa}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:#fff;border:1px solid #aaa;font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-edit-select-list .tabulator-edit-select-list-item{padding:4px;color:#333}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused{outline:1px solid hsla(0,0%,100%,.5)}.tabulator-edit-select-list .tabulator-edit-select-list-item.focused{outline:1px solid #1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{cursor:pointer;color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-notice{padding:4px;color:#333;text-align:center}.tabulator-edit-select-list .tabulator-edit-select-list-group{border-bottom:1px solid #aaa;padding:4px;padding-top:6px;color:#333;font-weight:700}.tabulator-print-fullscreen{position:absolute;top:0;bottom:0;left:0;right:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-print-table-group{box-sizing:border-box;border-right:1px solid #aaa;border-top:1px solid #000;border-bottom:2px solid #3fb449;padding:5px;padding-left:10px;background:#222;color:#fff;font-weight:700;min-width:100%}.tabulator-print-table .tabulator-print-table-group:hover{cursor:pointer;background-color:#090909}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #3fb449;border-bottom:0}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #3fb449;vertical-align:middle}.tabulator-print-table .tabulator-print-table-group span{margin-left:10px;color:#3fb449}.tabulator-print-table .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-print-table .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-print-table .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333} +/*# sourceMappingURL=tabulator_site.min.css.map */ diff --git a/app/static/vendors/tabulator/css/tabulator_site.min.css.map b/app/static/vendors/tabulator/css/tabulator_site.min.css.map new file mode 100644 index 0000000..6970f0b --- /dev/null +++ b/app/static/vendors/tabulator/css/tabulator_site.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["tabulator_site.scss"],"names":[],"mappings":"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","file":"tabulator_site.min.css","sourcesContent":["/* Tabulator v4.7.0 (c) Oliver Folkerd */\n\n\r\n//Main Theme Variables\r\n$backgroundColor: #fff !default; //background color of tabulator\r\n$borderColor:#222 !default; //border to tabulator\r\n$textSize:14px !default; //table text size\r\n\r\n//header themeing\r\n$headerBackgroundColor:#222 !default; //border to tabulator\r\n$headerTextColor:#fff !default; //header text colour\r\n$headerBorderColor:#aaa !default; //header border color\r\n$headerSeperatorColor:#3FB449 !default; //header bottom seperator color\r\n$headerMargin:4px !default; //padding round header\r\n\r\n//column header arrows\r\n$sortArrowActive: #3FB449 !default;\r\n$sortArrowInactive: #bbb !default;\r\n\r\n//row themeing\r\n$rowBackgroundColor:#fff !default; //table row background color\r\n$rowAltBackgroundColor:#EFEFEF !default; //table row background color\r\n$rowBorderColor:#aaa !default; //table border color\r\n$rowTextColor:#333 !default; //table text color\r\n$rowHoverBackground:#bbb !default; //row background color on hover\r\n\r\n$rowSelectedBackground: #9ABCEA !default; //row background color when selected\r\n$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered\r\n\r\n$editBoxColor:#1D68CD !default; //border color for edit boxes\r\n$errorColor:#dd0000 !default; //error indication\r\n\r\n//footer themeing\r\n$footerBackgroundColor:#222 !default; //border to tabulator\r\n$footerTextColor:#222 !default; //footer text colour\r\n$footerBorderColor:#aaa !default; //footer border color\r\n$footerSeperatorColor:#3FB449 !default; //footer bottom seperator color\r\n$footerActiveColor:$footerSeperatorColor !default; //footer bottom active text color\r\n\r\n\r\n//Tabulator Containing Element\r\n.tabulator{\r\n\tposition: relative;\r\n\r\n\tborder-bottom: 5px solid $borderColor;\r\n\r\n\tbackground-color: $backgroundColor;\r\n\r\n\tfont-size:$textSize;\r\n\ttext-align: left;\r\n\toverflow:hidden;\r\n\r\n\t-webkit-transform: translatez(0);\r\n\t-moz-transform: translatez(0);\r\n\t-ms-transform: translatez(0);\r\n\t-o-transform: translatez(0);\r\n\ttransform: translatez(0);\r\n\r\n\t&[tabulator-layout=\"fitDataFill\"]{\r\n\t\t.tabulator-tableHolder{\r\n\t\t\t.tabulator-table{\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&[tabulator-layout=\"fitDataTable\"]{\r\n\t\tdisplay: inline-block;\r\n\t}\r\n\r\n\t&[tabulator-layout=\"fitColumns\"]{\r\n\t\t.tabulator-row{\r\n\t\t\t.tabulator-cell{\r\n\t\t\t\t&:last-of-type{\r\n\t\t\t\t\tborder-right: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t&.tabulator-block-select{\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t//column header containing element\r\n\t.tabulator-header{\r\n\t\tposition:relative;\r\n\t\tbox-sizing: border-box;\r\n\r\n\t\twidth:100%;\r\n\r\n\t\tborder-bottom:3px solid $headerSeperatorColor;\r\n\t\tbackground-color: $headerBackgroundColor;\r\n\t\tcolor: $headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:hidden;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t&.tabulator-header-hidden{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\t//individual column header element\r\n\t\t.tabulator-col{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tposition:relative;\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tborder-right:1px solid $headerBorderColor;\r\n\t\t\tbackground-color: $headerBackgroundColor;\r\n\t\t\ttext-align:left;\r\n\t\t\tvertical-align: bottom;\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&.tabulator-moving{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tborder:1px solid $headerSeperatorColor;\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 10%);\r\n\t\t\t\tpointer-events: none;\r\n\t\t\t}\r\n\r\n\t\t\t//hold content of column header\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tpadding:8px;\r\n\r\n\t\t\t\t//header menu button\r\n\t\t\t\t.tabulator-header-menu-button{\r\n\t\t\t\t\tpadding: 0 8px;\r\n\r\n\t\t\t\t\t&:hover{\r\n\t\t\t\t\t\tcursor: pointer;\r\n\t\t\t\t\t\topacity: .6;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title of column header\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\tvertical-align:bottom;\r\n\r\n\t\t\t\t\t//element to hold title editor\r\n\t\t\t\t\t.tabulator-title-editor{\r\n\t\t\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\t\tborder:1px solid #999;\r\n\r\n\t\t\t\t\t\tpadding:1px;\r\n\r\n\t\t\t\t\t\tbackground: #fff;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//column sorter arrow\r\n\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\tdisplay: inline-block;\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\ttop:14px;\r\n\t\t\t\t\tright:8px;\r\n\t\t\t\t\twidth: 0;\r\n\t\t\t\t\theight: 0;\r\n\t\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t//complex header column group\r\n\t\t\t&.tabulator-col-group{\r\n\r\n\t\t\t\t//gelement to hold sub columns in column group\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tposition:relative;\r\n\t\t\t\t\tdisplay: flex;\r\n\r\n\t\t\t\t\tborder-top:1px solid $headerBorderColor;\r\n\t\t\t\t\toverflow: hidden;\r\n\r\n\t\t\t\t\tmargin-right:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t&:first-child{\r\n\t\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//header filter containing element\r\n\t\t\t.tabulator-header-filter{\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\tmargin-top:2px;\r\n\t\t\t\twidth:100%;\r\n\t\t\t\ttext-align: center;\r\n\r\n\t\t\t\t//styling adjustment for inbuilt editors\r\n\t\t\t\ttextarea{\r\n\t\t\t\t\theight:auto !important;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsvg{\r\n\t\t\t\t\tmargin-top: 3px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinput{\r\n\t\t\t\t\t&::-ms-clear {\r\n\t\t\t\t\t width : 0;\r\n\t\t\t\t\t height: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//styling child elements for sortable columns\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:25px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"none\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"asc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowActive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"desc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\t\t\tborder-bottom: none;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-col-vertical{\r\n\t\t\t\t.tabulator-col-content{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\twriting-mode: vertical-rl;\r\n\t\t\t\t\t\ttext-orientation: mixed;\r\n\r\n\t\t\t\t\t\tdisplay:flex;\r\n\t\t\t\t\t\talign-items:center;\r\n\t\t\t\t\t\tjustify-content:center;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\ttransform: rotate(180deg);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-sortable{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\tpadding-top:20px;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\t\tpadding-bottom:20px;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\tright:calc(50% - 6px);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: absolute;\r\n\r\n\t\t\t// background-color: inherit;\r\n\r\n\t\t\tz-index: 10;\r\n\r\n\t\t\t&.tabulator-frozen-left{\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-frozen-right{\r\n\t\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\tbackground:lighten($headerBackgroundColor, 10%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($headerBackgroundColor, 10%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\t\t\t// border-bottom:1px solid $headerBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen-rows-holder{\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\t&:empty{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//scrolling element to hold table\r\n\t.tabulator-tableHolder{\r\n\t\tposition:relative;\r\n\t\twidth:100%;\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:auto;\r\n\t\t-webkit-overflow-scrolling: touch;\r\n\r\n\t\t&:focus{\r\n\t\t\toutline: none;\r\n\t\t}\r\n\r\n\t\t//default placeholder element\r\n\t\t.tabulator-placeholder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t&[tabulator-render-mode=\"virtual\"]{\r\n\t\t\t\tmin-height:100%;\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\r\n\t\t\twidth:100%;\r\n\r\n\t\t\tspan{\r\n\t\t\t\tdisplay: inline-block;\r\n\r\n\t\t\t\tmargin:0 auto;\r\n\t\t\t\tpadding:10px;\r\n\r\n\t\t\t\tcolor:$headerSeperatorColor;\r\n\t\t\t\tfont-weight: bold;\r\n\t\t\t\tfont-size: 20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//element to hold table rows\r\n\t\t.tabulator-table{\r\n\t\t\tposition:relative;\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tbackground-color:$rowBackgroundColor;\r\n\t\t\twhite-space: nowrap;\r\n\t\t\toverflow:visible;\r\n\t\t\tcolor:$rowTextColor;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\t&.tabulator-calcs{\r\n\t\t\t\t\tfont-weight: bold;\r\n\t\t\t\t\tbackground:lighten($headerBackgroundColor, 15%) !important;\r\n\t\t\t\t\tcolor:$headerTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//footer element\r\n\t.tabulator-footer{\r\n\t\tpadding:5px 10px;\r\n\t\tpadding-top:8px;\r\n\t\tborder-top:3px solid $footerSeperatorColor;\r\n\t\tbackground-color: $footerBackgroundColor;\r\n\t\ttext-align:right;\r\n\t\tcolor: $footerTextColor;\r\n\t\tfont-weight:bold;\r\n\t\twhite-space:nowrap;\r\n\t\tuser-select:none;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\twidth:calc(100% + 20px);\r\n\t\t\tmargin:-8px -10px 8px -10px;\r\n\r\n\t\t\ttext-align: left;\r\n\r\n\t\t\tbackground:lighten($footerBackgroundColor, 10%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($footerBackgroundColor, 10%) !important;\r\n\t\t\t\tcolor:$headerTextColor !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// border-top:1px solid $rowBorderColor;\r\n\t\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&:only-child{\r\n\t\t\t\tmargin-bottom:-5px;\r\n\t\t\t\tborder-bottom:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-paginator{\r\n\t\t\tlabel{\r\n\t\t\t\tcolor:#fff;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//page size select element\r\n\t\t.tabulator-page-size{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 5px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-pages{\r\n\t\t\tmargin:0 7px;\r\n\t\t}\r\n\r\n\t\t//pagination button\r\n\t\t.tabulator-page{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 2px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\r\n\t\t\tbackground:#fff;\r\n\r\n\t\t\tcolor: $footerTextColor;\r\n\t\t\tfont-family:inherit;\r\n\t\t\tfont-weight:inherit;\r\n\t\t\tfont-size:inherit;\r\n\r\n\t\t\t&.active{\r\n\t\t\t\tcolor:$footerActiveColor;\r\n\t\t\t}\r\n\r\n\t\t\t&:disabled{\r\n\t\t\t\topacity:.5;\r\n\t\t\t}\r\n\r\n\t\t\t&:not(.disabled){\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground:rgba(0,0,0,.2);\r\n\t\t\t\t\tcolor:#fff;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\ttop:0;\r\n\t\tbottom:0;\r\n\t\twidth:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\tleft:0;\r\n\t\t\tright:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ew-resize;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//holding div that contains loader and covers tabulator element to prevent interaction\r\n\t.tabulator-loader{\r\n\t\tposition:absolute;\r\n\t\tdisplay: flex;\r\n\t\talign-items:center;\r\n\r\n\t\ttop:0;\r\n\t\tleft:0;\r\n\t\tz-index:100;\r\n\r\n\t\theight:100%;\r\n\t\twidth:100%;\r\n\t\tbackground:rgba(0,0,0,.4);\r\n\t\ttext-align:center;\r\n\r\n\t\t//loading message element\r\n\t\t.tabulator-loader-msg{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 auto;\r\n\t\t\tpadding:10px 20px;\r\n\r\n\t\t\tborder-radius:10px;\r\n\r\n\t\t\tbackground:#fff;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:16px;\r\n\r\n\t\t\t//loading message\r\n\t\t\t&.tabulator-loading{\r\n\t\t\t\tborder:4px solid #333;\r\n\t\t\t\tcolor:#000;\r\n\t\t\t}\r\n\r\n\t\t\t//error message\r\n\t\t\t&.tabulator-error{\r\n\t\t\t\tborder:4px solid #D00;\r\n\t\t\t\tcolor:#590000;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//row element\r\n.tabulator-row{\r\n\tposition: relative;\r\n\tbox-sizing: border-box;\r\n\tmin-height:$textSize + ($headerMargin * 2);\r\n\tbackground-color: $rowBackgroundColor;\r\n\r\n\r\n\t&.tabulator-row-even{\r\n\t\tbackground-color: $rowAltBackgroundColor;\r\n\t}\r\n\r\n\t&.tabulator-selectable:hover{\r\n\t\tbackground-color:$rowHoverBackground;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-selected{\r\n\t\tbackground-color:$rowSelectedBackground;\r\n\t}\r\n\r\n\t&.tabulator-selected:hover{\r\n\t\tbackground-color:$rowSelectedBackgroundHover;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-row-moving{\r\n\t\tborder:1px solid #000;\r\n\t\tbackground:#fff;\r\n\t}\r\n\r\n\t&.tabulator-moving{\r\n\t\tposition: absolute;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpointer-events: none !important;\r\n\t\tz-index:15;\r\n\t}\r\n\r\n\t//row resize handles\r\n\t.tabulator-row-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\tbottom:0;\r\n\t\tleft:0;\r\n\t\theight:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\ttop:0;\r\n\t\t\tbottom:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ns-resize;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-frozen{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: absolute;\r\n\r\n\t\tbackground-color: inherit;\r\n\r\n\t\tz-index: 10;\r\n\r\n\t\t&.tabulator-frozen-left{\r\n\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-frozen-right{\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-responsive-collapse{\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t&:empty{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\ttable{\r\n\t\t\tfont-size:$textSize;\r\n\r\n\t\t\ttr{\r\n\t\t\t\ttd{\r\n\t\t\t\t\tposition: relative;\r\n\r\n\t\t\t\t\t&:first-of-type{\r\n\t\t\t\t\t\tpadding-right:10px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//cell element\r\n\t.tabulator-cell{\r\n\t\tdisplay:inline-block;\r\n\t\tposition: relative;\r\n\t\tbox-sizing:border-box;\r\n\t\tpadding:6px;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tvertical-align:middle;\r\n\t\twhite-space:nowrap;\r\n\t\toverflow:hidden;\r\n\t\ttext-overflow:ellipsis;\r\n\r\n\r\n\t\t&.tabulator-editing{\r\n\t\t\tborder:1px solid $editBoxColor;\r\n\t\t\tpadding: 0;\r\n\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-validation-fail{\r\n\t\t\tborder:1px solid $errorColor;\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\r\n\t\t\t\tcolor: $errorColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//hide left resize handle on first column\r\n\t\t&:first-child{\r\n\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//movable row handle\r\n\t\t&.tabulator-row-handle{\r\n\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\t//handle holder\r\n\t\t\t.tabulator-row-handle-box{\r\n\t\t\t\twidth:80%;\r\n\r\n\t\t\t\t//Hamburger element\r\n\t\t\t\t.tabulator-row-handle-bar{\r\n\t\t\t\t\twidth:100%;\r\n\t\t\t\t\theight:3px;\r\n\t\t\t\t\tmargin-top:2px;\r\n\t\t\t\t\tbackground:$sortArrowActive;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-branch{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:9px;\r\n\t\t\twidth:7px;\r\n\r\n\t\t\tmargin-top:-9px;\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control{\r\n\r\n\t\t\tdisplay:inline-flex;\r\n\t\t\tjustify-content:center;\r\n\t\t\talign-items:center;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:11px;\r\n\t\t\twidth:11px;\r\n\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder:1px solid $rowTextColor;\r\n\t\t\tborder-radius:2px;\r\n\t\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\t\toverflow:hidden;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\tcursor:pointer;\r\n\t\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: transparent;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-expand{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-responsive-collapse-toggle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\theight:15px;\r\n\t\t\twidth:15px;\r\n\r\n\t\t\tborder-radius:20px;\r\n\t\t\tbackground:#666;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:1.1em;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\topacity:.7;\r\n\t\t\t}\r\n\r\n\t\t\t&.open{\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\t\tdisplay:initial;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-open{\r\n\t\t\t\t\tdisplay:none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\tdisplay:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-traffic-light{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\theight:14px;\r\n\t\t\twidth:14px;\r\n\r\n\t\t\tborder-radius:14px;\r\n\t\t}\r\n\t}\r\n\r\n\t//row grouping element\r\n\t&.tabulator-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #000;\r\n\t\tborder-bottom:2px solid $headerSeperatorColor;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:$headerBackgroundColor;\r\n\t\tcolor:$headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\tpadding-left:30px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\tpadding-left:50px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\tpadding-left:70px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\tpadding-left:90px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\tpadding-left:110px;\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:$headerSeperatorColor;\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n.tabulator-menu{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\tbox-shadow: 0 0 5px 0 rgba(0, 0, 0, .2);\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-menu-item{\r\n\r\n\t\tpadding:5px 10px;\r\n\r\n\t\tuser-select: none;\r\n\r\n\t\t&.tabulator-menu-item-disabled{\r\n\t\t\topacity: .5;\r\n\t\t}\r\n\r\n\t\t&:not(.tabulator-menu-item-disabled):hover{\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground: $rowAltBackgroundColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-menu-separator{\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t}\r\n}\r\n\r\n.tabulator-edit-select-list{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tmax-height:200px;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-edit-select-list-item{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\r\n\t\t&.active{\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\r\n\t\t\t&.focused{\r\n\t\t\t\toutline:1px solid rgba($rowBackgroundColor, .5);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.focused{\r\n\t\t\toutline:1px solid $editBoxColor;\r\n\t\t}\r\n\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-notice{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\ttext-align: center;\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-group{\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpadding:4px;\r\n\t\tpadding-top:6px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\tfont-weight:bold;\r\n\t}\r\n}\r\n\r\n// Table print styling\r\n\r\n.tabulator-print-fullscreen{\r\n\tposition: absolute;\r\n\ttop:0;\r\n\tbottom:0;\r\n\tleft:0;\r\n\tright:0;\r\n\r\n\tz-index: 10000;\r\n}\r\n\r\nbody.tabulator-print-fullscreen-hide>*:not(.tabulator-print-fullscreen){\r\n\tdisplay:none !important;\r\n}\r\n\r\n.tabulator-print-table{\r\n\tborder-collapse: collapse;\r\n\r\n\t//row grouping element\r\n\t.tabulator-print-table-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #000;\r\n\t\tborder-bottom:2px solid $headerSeperatorColor;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:$headerBackgroundColor;\r\n\t\tcolor:$headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:30px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:50px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:70px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:90px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:110px !important;\r\n\t\t\t}\r\n\t\t}\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:$headerSeperatorColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-data-tree-branch{\r\n\t\tdisplay:inline-block;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:9px;\r\n\t\twidth:7px;\r\n\r\n\t\tmargin-top:-9px;\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\tborder-left:2px solid $rowBorderColor;\r\n\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t}\r\n\r\n\t.tabulator-data-tree-control{\r\n\r\n\t\tdisplay:inline-flex;\r\n\t\tjustify-content:center;\r\n\t\talign-items:center;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:11px;\r\n\t\twidth:11px;\r\n\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder:1px solid $rowTextColor;\r\n\t\tborder-radius:2px;\r\n\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\toverflow:hidden;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: transparent;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-expand{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n"]} \ No newline at end of file diff --git a/app/static/vendors/tabulator/js.old/modules/accessor.js b/app/static/vendors/tabulator/js.old/modules/accessor.js new file mode 100644 index 0000000..33c6008 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/accessor.js @@ -0,0 +1,93 @@ +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.6.3 (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/app/static/vendors/tabulator/js.old/modules/accessor.min.js b/app/static/vendors/tabulator/js.old/modules/accessor.min.js new file mode 100644 index 0000000..670da5f --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/accessor.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (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/app/static/vendors/tabulator/js.old/modules/ajax.js b/app/static/vendors/tabulator/js.old/modules/ajax.js new file mode 100644 index 0000000..9abd307 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/ajax.js @@ -0,0 +1,465 @@ +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.6.3 (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/app/static/vendors/tabulator/js.old/modules/ajax.min.js b/app/static/vendors/tabulator/js.old/modules/ajax.min.js new file mode 100644 index 0000000..eec9e11 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/ajax.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},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/app/static/vendors/tabulator/js.old/modules/calculation_colums.min.js b/app/static/vendors/tabulator/js.old/modules/calculation_colums.min.js new file mode 100644 index 0000000..3174e0f --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/calculation_colums.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},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),r=a||!a&&"object"===(void 0===t?"undefined":_typeof(t))&&null!==t;!r&&e.modules.dataTree&&e.modules.dataTree.branchEl&&e.modules.dataTree.branchEl.parentNode.removeChild(e.modules.dataTree.branchEl),!r&&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:!!r&&(e.modules.dataTree?e.modules.dataTree.open:this.startOpen(e.getComponent(),0)),controlEl:!(!e.modules.dataTree||!r)&&e.modules.dataTree.controlEl,branchEl:!(!e.modules.dataTree||!r)&&e.modules.dataTree.branchEl,parent:!!e.modules.dataTree&&e.modules.dataTree.parent,children:r}},DataTree.prototype.layoutRow=function(e){var t=this.elementField?e.getCell(this.elementField):e.getCells()[0],a=t.getElement(),r=e.modules.dataTree;r.branchEl&&(r.branchEl.parentNode&&r.branchEl.parentNode.removeChild(r.branchEl),r.branchEl=!1),r.controlEl&&(r.controlEl.parentNode&&r.controlEl.parentNode.removeChild(r.controlEl),r.controlEl=!1),this.generateControlElement(e,a),e.element.classList.add("tabulator-tree-level-"+r.index),r.index&&(this.branchEl?(r.branchEl=this.branchEl.cloneNode(!0),a.insertBefore(r.branchEl,a.firstChild),r.branchEl.style.marginLeft=(r.branchEl.offsetWidth+r.branchEl.style.marginRight)*(r.index-1)+r.index*this.indent+"px"):a.style.paddingLeft=parseInt(window.getComputedStyle(a,null).getPropertyValue("padding-left"))+r.index*this.indent+"px")},DataTree.prototype.generateControlElement=function(e,t){var a=this,r=e.modules.dataTree,t=t||e.getCells()[0].getElement(),n=r.controlEl;!1!==r.children&&(r.open?(r.controlEl=this.collapseEl.cloneNode(!0),r.controlEl.addEventListener("click",function(t){t.stopPropagation(),a.collapseRow(e)})):(r.controlEl=this.expandEl.cloneNode(!0),r.controlEl.addEventListener("click",function(t){t.stopPropagation(),a.expandRow(e)})),r.controlEl.addEventListener("mousedown",function(e){e.stopPropagation()}),n&&n.parentNode===t?n.parentNode.replaceChild(r.controlEl,n):t.insertBefore(r.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,r){var n,l;a.push(e),e instanceof Row&&(n=e.modules.dataTree.children,n.index||!1===n.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,r=[],n=[];return!1!==a.children&&a.open&&(Array.isArray(a.children)||(a.children=this.generateChildren(e)),r=this.table.modExists("filter")?this.table.modules.filter.filter(a.children):a.children,this.table.modExists("sort")&&this.table.modules.sort.sort(r),r.forEach(function(e){n.push(e),t.getChildren(e).forEach(function(e){n.push(e)})})),n},DataTree.prototype.generateChildren=function(e){var t=this,a=[],r=e.getData()[this.field];return Array.isArray(r)||(r=[r]),r.forEach(function(r){var n=new Row(r||{},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)),a.push(n)}),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,r=[];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&&r.push(e)})),r},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/app/static/vendors/tabulator/js.old/modules/download.js b/app/static/vendors/tabulator/js.old/modules/download.js new file mode 100644 index 0000000..cf576be --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/download.js @@ -0,0 +1,949 @@ +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.6.3 (c) Oliver Folkerd */ + +var Download = function Download(table) { + this.table = table; //hold Tabulator object + this.fields = {}; //hold filed multi dimension arrays + this.columnsByIndex = []; //hold columns in their order in the table + this.columnsByField = {}; //hold columns with lookup by field name + this.config = {}; + this.active = false; +}; + +//trigger file download +Download.prototype.download = function (type, filename, options, active, interceptCallback) { + var self = this, + downloadFunc = false; + this.processConfig(); + this.active = active; + + 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); + } + } + + this.processColumns(); + + if (downloadFunc) { + downloadFunc.call(this, self.processDefinitions(), self.processData(active || "active"), options || {}, buildLink, this.config); + } +}; + +Download.prototype.processConfig = function () { + var config = { //download config + columnGroups: true, + rowGroups: true, + columnCalcs: true, + dataTree: true + }; + + if (this.table.options.downloadConfig) { + for (var key in this.table.options.downloadConfig) { + config[key] = this.table.options.downloadConfig[key]; + } + } + + this.config.rowGroups = config.rowGroups && this.table.options.groupBy && this.table.modExists("groupRows"); + + if (config.columnGroups && this.table.columnManager.columns.length != this.table.columnManager.columnsByIndex.length) { + this.config.columnGroups = true; + } + + if (config.columnCalcs && this.table.modExists("columnCalcs")) { + this.config.columnCalcs = true; + } + + if (config.dataTree && this.table.options.dataTree && this.table.modExists("dataTree")) { + this.config.dataTree = true; + } +}; + +Download.prototype.processColumns = function () { + var self = this; + + self.columnsByIndex = []; + self.columnsByField = {}; + + self.table.columnManager.columnsByIndex.forEach(function (column) { + + if (column.field && column.definition.download !== false && (column.visible || !column.visible && column.definition.download)) { + self.columnsByIndex.push(column); + self.columnsByField[column.field] = column; + } + }); +}; + +Download.prototype.processDefinitions = function () { + var self = this, + processedDefinitions = []; + + if (this.config.columnGroups) { + self.table.columnManager.columns.forEach(function (column) { + var colData = self.processColumnGroup(column); + + if (colData) { + processedDefinitions.push(colData); + } + }); + } else { + self.columnsByIndex.forEach(function (column) { + if (column.download !== false) { + //isolate definiton from defintion object + processedDefinitions.push(self.processDefinition(column)); + } + }); + } + + return processedDefinitions; +}; + +Download.prototype.processColumnGroup = function (column) { + var _this = this; + + var subGroups = column.columns, + maxDepth = 0; + var processedColumn = this.processDefinition(column); + var groupData = { + type: "group", + title: processedColumn.title, + depth: 1 + }; + + if (subGroups.length) { + groupData.subGroups = []; + groupData.width = 0; + + subGroups.forEach(function (subGroup) { + var subGroupData = _this.processColumnGroup(subGroup); + + if (subGroupData.depth > maxDepth) { + maxDepth = subGroupData.depth; + } + + if (subGroupData) { + groupData.width += subGroupData.width; + groupData.subGroups.push(subGroupData); + } + }); + + groupData.depth += maxDepth; + + if (!groupData.width) { + return false; + } + } else { + if (column.field && column.definition.download !== false && (column.visible || !column.visible && column.definition.download)) { + groupData.width = 1; + groupData.definition = processedColumn; + } else { + return false; + } + } + + return groupData; +}; + +Download.prototype.processDefinition = function (column) { + var def = {}; + + for (var key in column.definition) { + def[key] = column.definition[key]; + } + + if (typeof column.definition.downloadTitle != "undefined") { + def.title = column.definition.downloadTitle; + } + + return def; +}; + +Download.prototype.processData = function (active) { + var _this2 = this; + + var self = this, + data = [], + groups = [], + rows = false, + calcs = {}; + + if (this.config.rowGroups) { + + if (active == "visible") { + + rows = self.table.rowManager.getRows(active); + + rows.forEach(function (row) { + if (row.type == "row") { + var group = row.getGroup(); + + if (groups.indexOf(group) === -1) { + groups.push(group); + } + } + }); + } else { + groups = this.table.modules.groupRows.getGroups(); + } + + groups.forEach(function (group) { + data.push(_this2.processGroupData(group, rows)); + }); + } else { + if (this.config.dataTree) { + active = active = "active" ? "display" : active; + } + data = self.table.rowManager.getData(active, "download"); + } + + if (this.config.columnCalcs) { + calcs = this.table.getCalcResults(); + + data = { + calcs: calcs, + data: data + }; + } + + //bulk data processing + if (typeof self.table.options.downloadDataFormatter == "function") { + data = self.table.options.downloadDataFormatter(data); + } + + return data; +}; + +Download.prototype.processGroupData = function (group, visRows) { + var _this3 = this; + + var subGroups = group.getSubGroups(); + + var groupData = { + type: "group", + key: group.key + }; + + if (subGroups.length) { + groupData.subGroups = []; + + subGroups.forEach(function (subGroup) { + groupData.subGroups.push(_this3.processGroupData(subGroup, visRows)); + }); + } else { + if (visRows) { + groupData.rows = []; + + group.rows.forEach(function (row) { + if (visRows.indexOf(row) > -1) { + groupData.rows.push(row.getData("download")); + } + }); + } else { + groupData.rows = group.getData(true, "download"); + } + } + + return groupData; +}; + +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(); + } + } +}; + +//nested field lookup +Download.prototype.getFieldValue = function (field, data) { + var column = this.columnsByField[field]; + + if (column) { + return column.getFieldValue(data); + } + + return false; +}; + +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(columns, data, options, setFileContents, config) { + var self = this, + titles = [], + fields = [], + delimiter = options && options.delimiter ? options.delimiter : ",", + fileContents, + output; + + //build column headers + function parseSimpleTitles() { + columns.forEach(function (column) { + titles.push('"' + String(column.title).split('"').join('""') + '"'); + fields.push(column.field); + }); + } + + function parseColumnGroup(column, level) { + if (column.subGroups) { + column.subGroups.forEach(function (subGroup) { + parseColumnGroup(subGroup, level + 1); + }); + } else { + titles.push('"' + String(column.title).split('"').join('""') + '"'); + fields.push(column.definition.field); + } + } + + if (config.columnGroups) { + console.warn("Download Warning - CSV downloader cannot process column groups"); + + columns.forEach(function (column) { + parseColumnGroup(column, 0); + }); + } else { + parseSimpleTitles(); + } + + //generate header row + fileContents = [titles.join(delimiter)]; + + function parseRows(data) { + //generate each row of the table + data.forEach(function (row) { + var rowData = []; + + fields.forEach(function (field) { + var value = self.getFieldValue(field, row); + + switch (typeof value === "undefined" ? "undefined" : _typeof(value)) { + case "object": + value = JSON.stringify(value); + break; + + case "undefined": + case "null": + value = ""; + break; + + default: + value = value; + } + + //escape quotation marks + rowData.push('"' + String(value).split('"').join('""') + '"'); + }); + + fileContents.push(rowData.join(delimiter)); + }); + } + + function parseGroup(group) { + if (group.subGroups) { + group.subGroups.forEach(function (subGroup) { + parseGroup(subGroup); + }); + } else { + parseRows(group.rows); + } + } + + if (config.columnCalcs) { + console.warn("Download Warning - CSV downloader cannot process column calculations"); + data = data.data; + } + + if (config.rowGroups) { + console.warn("Download Warning - CSV downloader cannot process row groups"); + + data.forEach(function (group) { + parseGroup(group); + }); + } else { + parseRows(data); + } + + output = fileContents.join("\n"); + + if (options.bom) { + output = "\uFEFF" + output; + } + + setFileContents(output, "text/csv"); + }, + + json: function json(columns, data, options, setFileContents, config) { + var fileContents; + + if (config.columnCalcs) { + console.warn("Download Warning - CSV downloader cannot process column calculations"); + data = data.data; + } + + fileContents = JSON.stringify(data, null, '\t'); + + setFileContents(fileContents, "application/json"); + }, + + pdf: function pdf(columns, data, options, setFileContents, config) { + var self = this, + fields = [], + header = [], + body = [], + calcs = {}, + headerDepth = 1, + table = "", + 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 (config.columnCalcs) { + calcs = data.calcs; + data = data.data; + } + + if (!jsPDFParams.orientation) { + jsPDFParams.orientation = options.orientation || "landscape"; + } + + if (!jsPDFParams.unit) { + jsPDFParams.unit = "pt"; + } + + //build column headers + function parseSimpleTitles() { + columns.forEach(function (column) { + if (column.field) { + header.push(column.title || ""); + fields.push(column.field); + } + }); + + header = [header]; + } + + function parseColumnGroup(column, level) { + var colSpan = column.width, + rowSpan = 1, + col = { + content: column.title || "" + }; + + if (column.subGroups) { + column.subGroups.forEach(function (subGroup) { + parseColumnGroup(subGroup, level + 1); + }); + rowSpan = 1; + } else { + fields.push(column.definition.field); + rowSpan = headerDepth - level; + } + + col.rowSpan = rowSpan; + // col.colSpan = colSpan; + + header[level].push(col); + + colSpan--; + + if (rowSpan > 1) { + for (var i = level + 1; i < headerDepth; i++) { + header[i].push(""); + } + } + + for (var i = 0; i < colSpan; i++) { + header[level].push(""); + } + } + + if (config.columnGroups) { + columns.forEach(function (column) { + if (column.depth > headerDepth) { + headerDepth = column.depth; + } + }); + + for (var i = 0; i < headerDepth; i++) { + header.push([]); + } + + columns.forEach(function (column) { + parseColumnGroup(column, 0); + }); + } else { + parseSimpleTitles(); + } + + function parseValue(value) { + switch (typeof value === "undefined" ? "undefined" : _typeof(value)) { + case "object": + value = JSON.stringify(value); + break; + + case "undefined": + case "null": + value = ""; + break; + + default: + value = value; + } + + return value; + } + + function parseRows(data) { + //build table rows + data.forEach(function (row) { + body.push(parseRow(row)); + }); + } + + function parseRow(row, styles) { + var rowData = []; + + fields.forEach(function (field) { + var value = self.getFieldValue(field, row); + value = parseValue(value); + + if (styles) { + rowData.push({ + content: value, + styles: styles + }); + } else { + rowData.push(value); + } + }); + + return rowData; + } + + function parseGroup(group, calcObj) { + var groupData = []; + + groupData.push({ content: parseValue(group.key), colSpan: fields.length, styles: rowGroupStyles }); + + body.push(groupData); + + if (group.subGroups) { + group.subGroups.forEach(function (subGroup) { + parseGroup(subGroup, calcObj[group.key] ? calcObj[group.key].groups || {} : {}); + }); + } else { + + if (config.columnCalcs) { + addCalcRow(calcObj, group.key, "top"); + } + + parseRows(group.rows); + + if (config.columnCalcs) { + addCalcRow(calcObj, group.key, "bottom"); + } + } + } + + function addCalcRow(calcs, selector, pos) { + var calcData = calcs[selector]; + + if (calcData) { + if (pos) { + calcData = calcData[pos]; + } + + if (Object.keys(calcData).length) { + body.push(parseRow(calcData, rowCalcStyles)); + } + } + } + + if (config.rowGroups) { + data.forEach(function (group) { + parseGroup(group, calcs); + }); + } else { + if (config.columnCalcs) { + addCalcRow(calcs, "top"); + } + + parseRows(data); + + if (config.columnCalcs) { + addCalcRow(calcs, "bottom"); + } + } + + 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(columns, data, options, setFileContents, config) { + var self = this, + sheetName = options.sheetName || "Sheet1", + workbook = XLSX.utils.book_new(), + calcs = {}, + groupRowIndexs = [], + groupColumnIndexs = [], + calcRowIndexs = [], + output; + + workbook.SheetNames = []; + workbook.Sheets = {}; + + if (config.columnCalcs) { + calcs = data.calcs; + data = data.data; + } + + function generateSheet() { + var titles = [], + fields = [], + rows = [], + worksheet; + + //convert rows to worksheet + function rowsToSheet() { + var sheet = {}; + var range = { s: { c: 0, r: 0 }, e: { c: fields.length, r: rows.length } }; + + XLSX.utils.sheet_add_aoa(sheet, rows); + + sheet['!ref'] = XLSX.utils.encode_range(range); + + var merges = generateMerges(); + + if (merges.length) { + sheet["!merges"] = merges; + } + + return sheet; + } + + function parseSimpleTitles() { + //get field lists + columns.forEach(function (column) { + titles.push(column.title); + fields.push(column.field); + }); + + rows.push(titles); + } + + function parseColumnGroup(column, level) { + + if (typeof titles[level] === "undefined") { + titles[level] = []; + } + + if (typeof groupColumnIndexs[level] === "undefined") { + groupColumnIndexs[level] = []; + } + + if (column.width > 1) { + + groupColumnIndexs[level].push({ + type: "hoz", + start: titles[level].length, + end: titles[level].length + column.width - 1 + }); + } + + titles[level].push(column.title); + + if (column.subGroups) { + column.subGroups.forEach(function (subGroup) { + parseColumnGroup(subGroup, level + 1); + }); + } else { + fields.push(column.definition.field); + padColumnTitles(fields.length - 1, level); + + groupColumnIndexs[level].push({ + type: "vert", + start: fields.length - 1 + }); + } + } + + function padColumnTitles() { + var max = 0; + + titles.forEach(function (title) { + var len = title.length; + if (len > max) { + max = len; + } + }); + + titles.forEach(function (title) { + var len = title.length; + if (len < max) { + for (var i = len; i < max; i++) { + title.push(""); + } + } + }); + } + + if (config.columnGroups) { + columns.forEach(function (column) { + parseColumnGroup(column, 0); + }); + + titles.forEach(function (title) { + rows.push(title); + }); + } else { + parseSimpleTitles(); + } + + function generateMerges() { + var output = []; + + groupRowIndexs.forEach(function (index) { + output.push({ s: { r: index, c: 0 }, e: { r: index, c: fields.length - 1 } }); + }); + + groupColumnIndexs.forEach(function (merges, level) { + merges.forEach(function (merge) { + if (merge.type === "hoz") { + output.push({ s: { r: level, c: merge.start }, e: { r: level, c: merge.end } }); + } else { + if (level != titles.length - 1) { + output.push({ s: { r: level, c: merge.start }, e: { r: titles.length - 1, c: merge.start } }); + } + } + }); + }); + + return output; + } + + //generate each row of the table + function parseRows(data) { + data.forEach(function (row) { + rows.push(parseRow(row)); + }); + } + + function parseRow(row) { + var rowData = []; + + fields.forEach(function (field) { + var value = self.getFieldValue(field, row); + rowData.push(!(value instanceof Date) && (typeof value === "undefined" ? "undefined" : _typeof(value)) === "object" ? JSON.stringify(value) : value); + }); + + return rowData; + } + + function addCalcRow(calcs, selector, pos) { + var calcData = calcs[selector]; + + if (calcData) { + if (pos) { + calcData = calcData[pos]; + } + + if (Object.keys(calcData).length) { + calcRowIndexs.push(rows.length); + rows.push(parseRow(calcData)); + } + } + } + + function parseGroup(group, calcObj) { + var groupData = []; + + groupData.push(group.key); + + groupRowIndexs.push(rows.length); + + rows.push(groupData); + + if (group.subGroups) { + group.subGroups.forEach(function (subGroup) { + parseGroup(subGroup, calcObj[group.key] ? calcObj[group.key].groups || {} : {}); + }); + } else { + + if (config.columnCalcs) { + addCalcRow(calcObj, group.key, "top"); + } + + parseRows(group.rows); + + if (config.columnCalcs) { + addCalcRow(calcObj, group.key, "bottom"); + } + } + } + + if (config.rowGroups) { + data.forEach(function (group) { + parseGroup(group, calcs); + }); + } else { + if (config.columnCalcs) { + addCalcRow(calcs, "top"); + } + + parseRows(data); + + if (config.columnCalcs) { + addCalcRow(calcs, "bottom"); + } + } + + worksheet = rowsToSheet(); + + 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(columns, data, options, setFileContents, config) { + if (this.table.modExists("export", true)) { + setFileContents(this.table.modules.export.getHtml(true, options.style, config), "text/html"); + } + } + +}; + +Tabulator.prototype.registerModule("download", Download); \ No newline at end of file diff --git a/app/static/vendors/tabulator/js.old/modules/download.min.js b/app/static/vendors/tabulator/js.old/modules/download.min.js new file mode 100644 index 0000000..76357da --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/download.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (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},Download=function(o){this.table=o,this.fields={},this.columnsByIndex=[],this.columnsByField={},this.config={},this.active=!1};Download.prototype.download=function(o,t,n,e,i){function s(n,e){i?!0===i?a.triggerDownload(n,e,o,t,!0):i(n):a.triggerDownload(n,e,o,t)}var a=this,r=!1;this.processConfig(),this.active=e,"function"==typeof o?r=o:a.downloaders[o]?r=a.downloaders[o]:console.warn("Download Error - No such download type found: ",o),this.processColumns(),r&&r.call(this,a.processDefinitions(),a.processData(e||"active"),n||{},s,this.config)},Download.prototype.processConfig=function(){var o={columnGroups:!0,rowGroups:!0,columnCalcs:!0,dataTree:!0};if(this.table.options.downloadConfig)for(var t in this.table.options.downloadConfig)o[t]=this.table.options.downloadConfig[t];this.config.rowGroups=o.rowGroups&&this.table.options.groupBy&&this.table.modExists("groupRows"),o.columnGroups&&this.table.columnManager.columns.length!=this.table.columnManager.columnsByIndex.length&&(this.config.columnGroups=!0),o.columnCalcs&&this.table.modExists("columnCalcs")&&(this.config.columnCalcs=!0),o.dataTree&&this.table.options.dataTree&&this.table.modExists("dataTree")&&(this.config.dataTree=!0)},Download.prototype.processColumns=function(){var o=this;o.columnsByIndex=[],o.columnsByField={},o.table.columnManager.columnsByIndex.forEach(function(t){t.field&&!1!==t.definition.download&&(t.visible||!t.visible&&t.definition.download)&&(o.columnsByIndex.push(t),o.columnsByField[t.field]=t)})},Download.prototype.processDefinitions=function(){var o=this,t=[];return this.config.columnGroups?o.table.columnManager.columns.forEach(function(n){var e=o.processColumnGroup(n);e&&t.push(e)}):o.columnsByIndex.forEach(function(n){!1!==n.download&&t.push(o.processDefinition(n))}),t},Download.prototype.processColumnGroup=function(o){var t=this,n=o.columns,e=0,i=this.processDefinition(o),s={type:"group",title:i.title,depth:1};if(n.length){if(s.subGroups=[],s.width=0,n.forEach(function(o){var n=t.processColumnGroup(o);n.depth>e&&(e=n.depth),n&&(s.width+=n.width,s.subGroups.push(n))}),s.depth+=e,!s.width)return!1}else{if(!o.field||!1===o.definition.download||!(o.visible||!o.visible&&o.definition.download))return!1;s.width=1,s.definition=i}return s},Download.prototype.processDefinition=function(o){var t={};for(var n in o.definition)t[n]=o.definition[n];return void 0!==o.definition.downloadTitle&&(t.title=o.definition.downloadTitle),t},Download.prototype.processData=function(o){var t=this,n=this,e=[],i=[],s=!1,a={};return this.config.rowGroups?("visible"==o?(s=n.table.rowManager.getRows(o),s.forEach(function(o){if("row"==o.type){var t=o.getGroup();-1===i.indexOf(t)&&i.push(t)}})):i=this.table.modules.groupRows.getGroups(),i.forEach(function(o){e.push(t.processGroupData(o,s))})):(this.config.dataTree&&(o=o="display"),e=n.table.rowManager.getData(o,"download")),this.config.columnCalcs&&(a=this.table.getCalcResults(),e={calcs:a,data:e}),"function"==typeof n.table.options.downloadDataFormatter&&(e=n.table.options.downloadDataFormatter(e)),e},Download.prototype.processGroupData=function(o,t){var n=this,e=o.getSubGroups(),i={type:"group",key:o.key};return e.length?(i.subGroups=[],e.forEach(function(o){i.subGroups.push(n.processGroupData(o,t))})):t?(i.rows=[],o.rows.forEach(function(o){t.indexOf(o)>-1&&i.rows.push(o.getData("download"))})):i.rows=o.getData(!0,"download"),i},Download.prototype.triggerDownload=function(o,t,n,e,i){var s=document.createElement("a"),a=new Blob([o],{type:t}),e=e||"Tabulator."+("function"==typeof n?"txt":n);(a=this.table.options.downloadReady.call(this.table,o,a))&&(i?window.open(window.URL.createObjectURL(a)):navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(a,e):(s.setAttribute("href",window.URL.createObjectURL(a)),s.setAttribute("download",e),s.style.display="none",document.body.appendChild(s),s.click(),document.body.removeChild(s)),this.table.options.downloadComplete&&this.table.options.downloadComplete())},Download.prototype.getFieldValue=function(o,t){var n=this.columnsByField[o];return!!n&&n.getFieldValue(t)},Download.prototype.commsReceived=function(o,t,n){switch(t){case"intercept":this.download(n.type,"",n.options,n.active,n.intercept)}},Download.prototype.downloaders={csv:function(o,t,n,e,i){function s(o,t){o.subGroups?o.subGroups.forEach(function(o){s(o,t+1)}):(f.push('"'+String(o.title).split('"').join('""')+'"'),p.push(o.definition.field))}function a(o){o.forEach(function(o){var t=[];p.forEach(function(n){var e=c.getFieldValue(n,o);switch(void 0===e?"undefined":_typeof(e)){case"object":e=JSON.stringify(e);break;case"undefined":case"null":e="";break;default:e=e}t.push('"'+String(e).split('"').join('""')+'"')}),u.push(t.join(d))})}function r(o){o.subGroups?o.subGroups.forEach(function(o){r(o)}):a(o.rows)}var u,l,c=this,f=[],p=[],d=n&&n.delimiter?n.delimiter:",";i.columnGroups?(console.warn("Download Warning - CSV downloader cannot process column groups"),o.forEach(function(o){s(o,0)})):function(){o.forEach(function(o){f.push('"'+String(o.title).split('"').join('""')+'"'),p.push(o.field)})}(),u=[f.join(d)],i.columnCalcs&&(console.warn("Download Warning - CSV downloader cannot process column calculations"),t=t.data),i.rowGroups?(console.warn("Download Warning - CSV downloader cannot process row groups"),t.forEach(function(o){r(o)})):a(t),l=u.join("\n"),n.bom&&(l="\ufeff"+l),e(l,"text/csv")},json:function(o,t,n,e,i){var s;i.columnCalcs&&(console.warn("Download Warning - CSV downloader cannot process column calculations"),t=t.data),s=JSON.stringify(t,null,"\t"),e(s,"application/json")},pdf:function(o,t,n,e,i){function s(o,t){var n=o.width,e=1,i={content:o.title||""};if(o.subGroups?(o.subGroups.forEach(function(o){s(o,t+1)}),e=1):(p.push(o.definition.field),e=m-t),i.rowSpan=e,d[t].push(i),n--,e>1)for(var a=t+1;am&&(m=o.depth)});for(var S=0;S1&&p[t].push({type:"hoz",start:w[t].length,end:w[t].length+o.width-1}),w[t].push(o.title),o.subGroups?o.subGroups.forEach(function(o){n(o,t+1)}):(m.push(o.definition.field),e(m.length),p[t].push({type:"vert",start:m.length-1}))}function e(){var o=0;w.forEach(function(t){var n=t.length;n>o&&(o=n)}),w.forEach(function(t){var n=t.length;if(n 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")) { + valid = self.table.modules.validate.validate(cell.column.modules.validate, cell.getComponent(), value); + } + + if (valid === true) { + self.clearEditor(); + cell.setValue(value, true); + + if (self.table.options.dataTree && self.table.modExists("dataTree")) { + self.table.modules.dataTree.checkForRestyle(cell); + } + + 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); + } +}; + +//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"), + dataItems = [], + displayItems = [], + currentItem = {}, + 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, curentValue) { + var dataList = []; + var displayList = []; + + function processComplexListItem(item) { + var item = { + label: editorParams.listItemFormatter ? editorParams.listItemFormatter(item.value, item.label) : item.label, + value: item.value, + element: false + }; + + if (item.value === curentValue || !isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue)) { + setCurrentItem(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, + element: false + }; + + displayList.push(item); + + value.options.forEach(function (item) { + processComplexListItem(item); + }); + } else { + processComplexListItem(value); + } + } else { + + item = { + label: editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value, + value: value, + element: false + }; + + if (item.value === curentValue || !isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue)) { + setCurrentItem(item); + } + + dataList.push(item); + displayList.push(item); + } + }); + } else { + for (var key in inputValues) { + var item = { + label: editorParams.listItemFormatter ? editorParams.listItemFormatter(key, inputValues[key]) : 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); + } + + 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) { + + if (item.group) { + el = document.createElement("div"); + el.classList.add("tabulator-edit-select-list-group"); + el.tabIndex = 0; + el.innerHTML = item.label === "" ? " " : item.label; + } else { + el = document.createElement("div"); + 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 (item === currentItem) { + el.classList.add("active"); + } + } + + el.addEventListener("mousedown", function () { + blurable = false; + + setTimeout(function () { + blurable = true; + }, 10); + }); + + item.element = el; + } + + listEl.appendChild(el); + }); + } + + function setCurrentItem(item) { + + if (currentItem && currentItem.element) { + currentItem.element.classList.remove("active"); + } + + currentItem = item; + input.value = item.label === " " ? "" : item.label; + + if (item.element) { + item.element.classList.add("active"); + } + } + + function chooseItem() { + hideList(); + + if (initialValue !== currentItem.value) { + initialValue = currentItem.value; + success(currentItem.value); + } else { + cancel(); + } + } + + 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]); + } + } + 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]); + } else { + setCurrentItem(dataItems[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; + } + }); + + input.addEventListener("blur", function (e) { + if (blurable) { + 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; + + 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 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 (editorParams.values === true) { + values = getUniqueColumnValues(); + } else if (typeof editorParams.values === "string") { + values = getUniqueColumnValues(editorParams.values); + } 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 = { + title: editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value, + 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; + 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; + }, + + //start 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); + }); + + 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/app/static/vendors/tabulator/js.old/modules/edit.min.js b/app/static/vendors/tabulator/js.old/modules/edit.min.js new file mode 100644 index 0000000..06a11a9 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/edit.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Edit=function(e){this.table=e,this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1};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(){var e,t=this.currentCell;if(this.invalidEdit=!1,t){for(this.currentCell=!1,e=t.getElement(),e.classList.remove("tabulator-validation-fail"),e.classList.remove("tabulator-editing");e.firstChild;)e.removeChild(e.firstChild);t.row.getElement().classList.remove("tabulator-row-editing")}},Edit.prototype.cancelEdit=function(){if(this.currentCell){var e=this.currentCell,t=this.currentCell.getComponent();this.clearEditor(),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")&&(i=u.table.modules.validate.validate(e.column.modules.validate,e.getComponent(),t)),!0===i?(u.clearEditor(),e.setValue(t,!0),u.table.options.dataTree&&u.table.modExists("dataTree")&&u.table.modules.dataTree.checkForRestyle(e),!0):(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 a(){u.currentCell===e&&(u.cancelEdit(),u.table.options.dataTree&&u.table.modExists("dataTree")&&u.table.modules.dataTree.checkForRestyle(e))}function o(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,o,n,a,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 a:if(s.toUpperCase()==s.toLowerCase())return t.preventDefault(),t.stopPropagation(),l=!1,!1;break;case o: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.editors={input:function(e,t,i,n,a){function o(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",a.search?"search":"text"),l.style.padding="4px",l.style.width="100%",l.style.boxSizing="border-box",a.elementAttributes&&"object"==_typeof(a.elementAttributes))for(var s in a.elementAttributes)"+"==s.charAt(0)?(s=s.slice(1),l.setAttribute(s,l.getAttribute(s)+a.elementAttributes["+"+s])):l.setAttribute(s,a.elementAttributes[s]);return l.value=void 0!==r?r:"",t(function(){l.focus({preventScroll:!0}),l.style.height="100%"}),l.addEventListener("change",o),l.addEventListener("blur",o),l.addEventListener("keydown",function(e){switch(e.keyCode){case 13:o(e);break;case 27:n()}}),a.mask&&this.table.modules.edit.maskInput(l,a),l},textarea:function(e,t,i,n,a){function o(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=a.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",a.elementAttributes&&"object"==_typeof(a.elementAttributes))for(var c in a.elementAttributes)"+"==c.charAt(0)?(c=c.slice(1),u.setAttribute(c,u.getAttribute(c)+a.elementAttributes["+"+c])):u.setAttribute(c,a.elementAttributes[c]);return u.value=s,t(function(){u.focus({preventScroll:!0}),u.style.height="100%"}),u.addEventListener("change",o),u.addEventListener("blur",o),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())}}),a.mask&&this.table.modules.edit.maskInput(u,a),u},number:function(e,t,i,n,a){function o(){var e=s.value;isNaN(e)||""===e||(e=Number(e)),e!==r?i(e)&&(r=e):n()}var r=e.getValue(),l=a.verticalNavigation||"editor",s=document.createElement("input");if(s.setAttribute("type","number"),void 0!==a.max&&s.setAttribute("max",a.max),void 0!==a.min&&s.setAttribute("min",a.min),void 0!==a.step&&s.setAttribute("step",a.step),s.style.padding="4px",s.style.width="100%",s.style.boxSizing="border-box",a.elementAttributes&&"object"==_typeof(a.elementAttributes))for(var u in a.elementAttributes)"+"==u.charAt(0)?(u=u.slice(1),s.setAttribute(u,s.getAttribute(u)+a.elementAttributes["+"+u])):s.setAttribute(u,a.elementAttributes[u]);s.value=r;var d=function(e){o()};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:o();break;case 27:n();break;case 38:case 40:"editor"==l&&(e.stopImmediatePropagation(),e.stopPropagation())}}),a.mask&&this.table.modules.edit.maskInput(s,a),s},range:function(e,t,i,n,a){function o(){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!==a.max&&l.setAttribute("max",a.max),void 0!==a.min&&l.setAttribute("min",a.min),void 0!==a.step&&l.setAttribute("step",a.step),l.style.padding="4px",l.style.width="100%",l.style.boxSizing="border-box",a.elementAttributes&&"object"==_typeof(a.elementAttributes))for(var s in a.elementAttributes)"+"==s.charAt(0)?(s=s.slice(1),l.setAttribute(s,l.getAttribute(s)+a.elementAttributes["+"+s])):l.setAttribute(s,a.elementAttributes[s]);return l.value=r,t(function(){l.focus({preventScroll:!0}),l.style.height="100%"}),l.addEventListener("blur",function(e){o()}),l.addEventListener("keydown",function(e){switch(e.keyCode){case 13:case 9:o();break;case 27:n()}}),l},select:function(e,t,i,n,a){function o(t){var i,n={},o=p.table.getData();return i=t?p.table.columnManager.getColumnByField(t):e.getColumn()._getSelf(),i?(o.forEach(function(e){var t=i.getFieldValue(e);null!==t&&void 0!==t&&""!==t&&(n[t]=!0)}),n=a.sortValuesList?"asc"==a.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:a.listItemFormatter?a.listItemFormatter(e.value,e.label):e.label,value:e.value,element:!1};return e.value!==i&&(isNaN(parseFloat(e.value))||isNaN(parseFloat(e.value))||parseFloat(e.value)!==parseFloat(i))||s(e),o.push(e),r.push(e),e}var o=[],r=[];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,element:!1},r.push(t),e.options.forEach(function(e){n(e)})):n(e):(t={label:a.listItemFormatter?a.listItemFormatter(e,e):e,value:e,element:!1},t.value!==i&&(isNaN(parseFloat(t.value))||isNaN(parseFloat(t.value))||parseFloat(t.value)!==parseFloat(i))||s(t),o.push(t),r.push(t))});else for(var u in t){var d={label:a.listItemFormatter?a.listItemFormatter(u,t[u]):t[u],value:u,element:!1};d.value!==i&&(isNaN(parseFloat(d.value))||isNaN(parseFloat(d.value))||parseFloat(d.value)!==parseFloat(i))||s(d),o.push(d),r.push(d)}k=o,A=r,l()}function l(){for(;E.firstChild;)E.removeChild(E.firstChild);A.forEach(function(e){var t=e.element;t||(e.group?(t=document.createElement("div"),t.classList.add("tabulator-edit-select-list-group"),t.tabIndex=0,t.innerHTML=""===e.label?" ":e.label):(t=document.createElement("div"),t.classList.add("tabulator-edit-select-list-item"),t.tabIndex=0,t.innerHTML=""===e.label?" ":e.label,t.addEventListener("click",function(){s(e),u()}),e===C&&t.classList.add("active")),t.addEventListener("mousedown",function(){w=!1,setTimeout(function(){w=!0},10)}),e.element=t),E.appendChild(t)})}function s(e){C&&C.element&&C.element.classList.remove("active"),C=e,y.value=" "===e.label?"":e.label,e.element&&e.element.classList.add("active")}function u(){m(),b!==C.value?(b=C.value,i(C.value)):n()}function d(){m(),n()}function c(){if(!E.parentNode){!0===a.values?r(o(),g):"string"==typeof a.values?r(o(a.values),g):r(a.values||[],g);var e=Tabulator.prototype.helpers.elOffset(v);E.style.minWidth=v.offsetWidth+"px",E.style.top=e.top+v.offsetHeight+"px",E.style.left=e.left+"px",E.addEventListener("mousedown",function(e){w=!1,setTimeout(function(){w=!0},10)}),document.body.appendChild(E)}}function m(){E.parentNode&&E.parentNode.removeChild(E),f()}function f(){p.table.rowManager.element.removeEventListener("scroll",d)}var p=this,v=e.getElement(),b=e.getValue(),h=a.verticalNavigation||"editor",g=void 0!==b||null===b?b:void 0!==a.defaultValue?a.defaultValue:"",y=document.createElement("input"),E=document.createElement("div"),k=[],A=[],C={},w=!0;if(this.table.rowManager.element.addEventListener("scroll",d),(Array.isArray(a)||!Array.isArray(a)&&"object"===(void 0===a?"undefined":_typeof(a))&&!a.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"),a={values:a}),y.setAttribute("type","text"),y.style.padding="4px",y.style.width="100%",y.style.boxSizing="border-box",y.style.cursor="default",y.readOnly=0!=this.currentCell,a.elementAttributes&&"object"==_typeof(a.elementAttributes))for(var L in a.elementAttributes)"+"==L.charAt(0)?(L=L.slice(1),y.setAttribute(L,y.getAttribute(L)+a.elementAttributes["+"+L])):y.setAttribute(L,a.elementAttributes[L]);return y.value=void 0!==b||null===b?b:"",y.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=k.indexOf(C),("editor"==h||"hybrid"==h&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t>0&&s(k[t-1]));break;case 40:t=k.indexOf(C),("editor"==h||"hybrid"==h&&t-1||String(t.title).toLowerCase().indexOf(String(e).toLowerCase())>-1)&&r.push(t)}),d(r,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,w.appendChild(t))}function s(e){var t=[];if(Array.isArray(e))e.forEach(function(e){var i={title:a.listItemFormatter?a.listItemFormatter(e,e):e,value:e};t.push(i)});else for(var i in e){var n={title:a.listItemFormatter?a.listItemFormatter(i,e[i]):e[i],value:i};t.push(n)}return t}function u(){for(;w.firstChild;)w.removeChild(w.firstChild)}function d(e,t){e.length?c(e,t):a.emptyPlaceholder&&l(a.emptyPlaceholder)}function c(e,t){var i=!1;u(),L=e,L.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){p(e),m()}),n.addEventListener("mousedown",function(e){N=!1,setTimeout(function(){N=!0},10)}),e.element=n,t&&e.value==E&&(C.value=e.title,e.element.classList.add("active"),i=!0),e===x&&(e.element.classList.add("active"),i=!0)),w.appendChild(n)}),i||p(!1)}function m(){v(),x?E!==x.value?(E=x.value,C.value=x.title,i(x.value)):n():a.freetext?(E=C.value,i(C.value)):a.allowEmpty&&""===C.value?(E=C.value,i(C.value)):n()}function f(){if(!w.parentNode){for(;w.firstChild;)w.removeChild(w.firstChild);var e=Tabulator.prototype.helpers.elOffset(y);w.style.minWidth=y.offsetWidth+"px",w.style.top=e.top+y.offsetHeight+"px",w.style.left=e.left+"px",document.body.appendChild(w)}}function p(e,t){x&&x.element&&x.element.classList.remove("active"),x=e,e&&e.element&&e.element.classList.add("active")}function v(){w.parentNode&&w.parentNode.removeChild(w),h()}function b(){v(),n()}function h(){g.table.rowManager.element.removeEventListener("scroll",b)}var g=this,y=e.getElement(),E=e.getValue(),k=a.verticalNavigation||"editor",A=void 0!==E||null===E?E:void 0!==a.defaultValue?a.defaultValue:"",C=document.createElement("input"),w=document.createElement("div"),L=[],x=!1,N=!0;if(this.table.rowManager.element.addEventListener("scroll",b),C.setAttribute("type","search"),C.style.padding="4px",C.style.width="100%",C.style.boxSizing="border-box",a.elementAttributes&&"object"==_typeof(a.elementAttributes))for(var P in a.elementAttributes)"+"==P.charAt(0)?(P=P.slice(1),C.setAttribute(P,C.getAttribute(P)+a.elementAttributes["+"+P])):C.setAttribute(P,a.elementAttributes[P]);return w.classList.add("tabulator-edit-select-list"),w.addEventListener("mousedown",function(e){N=!1,setTimeout(function(){N=!0},10)}),C.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=L.indexOf(x),("editor"==k||"hybrid"==k&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),p(t>0?L[t-1]:!1));break;case 40:t=L.indexOf(x),("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,o(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",a.elementAttributes&&"object"==_typeof(a.elementAttributes))for(var v in a.elementAttributes)"+"==v.charAt(0)?(v=v.slice(1),f.setAttribute(v,f.getAttribute(v)+a.elementAttributes["+"+v])):f.setAttribute(v,a.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(),o(e)}),t.addEventListener("mousemove",function(e){e.stopPropagation(),e.stopImmediatePropagation()}),t.addEventListener("click",function(t){t.stopPropagation(),t.stopImmediatePropagation(),i(e)}),t.appendChild(n),f.appendChild(t)}(b);return u=Math.min(parseInt(u),d),o(u),f.addEventListener("mousemove",function(e){o(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,a){function o(){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===a.max?s.getElementsByTagName("div")[0].getAttribute("max")||100:a.max,d=void 0===a.min?s.getElementsByTagName("div")[0].getAttribute("min")||0:a.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%",a.elementAttributes&&"object"==_typeof(a.elementAttributes))for(var v in a.elementAttributes)"+"==v.charAt(0)?(v=v.slice(1),p.setAttribute(v,p.getAttribute(v)+a.elementAttributes["+"+v])):p.setAttribute(v,a.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,o())}),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:o();break;case 27:n()}}),s.addEventListener("blur",function(){n()}),p},tickCross:function(e,t,i,n,a){function o(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=a.tristate,u=void 0===a.indeterminateValue?null:a.indeterminateValue,d=!1;if(l.setAttribute("type","checkbox"),l.style.marginTop="5px",l.style.boxSizing="border-box",a.elementAttributes&&"object"==_typeof(a.elementAttributes))for(var c in a.elementAttributes)"+"==c.charAt(0)?(c=c.slice(1),l.setAttribute(c,l.getAttribute(c)+a.elementAttributes["+"+c])):l.setAttribute(c,a.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(o())}),l.addEventListener("blur",function(e){i(o(!0))}),l.addEventListener("keydown",function(e){13==e.keyCode&&i(o()),27==e.keyCode&&n()}),l}},Tabulator.prototype.registerModule("edit",Edit); \ No newline at end of file diff --git a/app/static/vendors/tabulator/js.old/modules/export.js b/app/static/vendors/tabulator/js.old/modules/export.js new file mode 100644 index 0000000..b0184de --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/export.js @@ -0,0 +1,471 @@ +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.6.3 (c) Oliver Folkerd */ + +var Export = function Export(table) { + this.table = table; //hold Tabulator object + this.config = {}; + this.cloneTableStyle = true; + this.colVisProp = ""; +}; + +Export.prototype.genereateTable = function (config, style, range, colVisProp) { + this.cloneTableStyle = style; + this.config = config || {}; + this.colVisProp = colVisProp; + + var table = document.createElement("table"); + table.classList.add("tabulator-print-table"); + + if (this.config.columnHeaders !== false) { + table.appendChild(this.generateHeaderElements()); + } + + table.appendChild(this.generateBodyElements(this.rowLookup(range))); + + this.mapElementStyles(this.table.element, table, ["border-top", "border-left", "border-right", "border-bottom"]); + + return table; +}; + +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; + + var groupData = { + title: column.definition.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.groupHeadersToRows = function (columns) { + + var headers = [], + headerDepth = 0; + + 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.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); + }); + + return headers; +}; + +Export.prototype.generateHeaderElements = function () { + var _this4 = this; + + var headerEl = document.createElement("thead"); + + var rows = this.groupHeadersToRows(this.generateColumnGroupHeaders()); + + rows.forEach(function (row) { + var rowEl = document.createElement("tr"); + + _this4.mapElementStyles(_this4.table.columnManager.getHeadersElement(), headerEl, ["border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]); + + row.forEach(function (column) { + var cellEl = document.createElement("th"); + var classNames = column.column.definition.cssClass ? column.column.definition.cssClass.split(" ") : []; + + cellEl.colSpan = column.width; + cellEl.rowSpan = column.height; + + cellEl.innerHTML = column.column.definition.title; + + if (_this4.cloneTableStyle) { + cellEl.style.boxSizing = "border-box"; + } + + classNames.forEach(function (className) { + cellEl.classList.add(className); + }); + + _this4.mapElementStyles(column.column.getElement(), cellEl, ["text-align", "border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]); + _this4.mapElementStyles(column.column.contentElement, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom"]); + + if (column.column.visible) { + _this4.mapElementStyles(column.column.getElement(), cellEl, ["width"]); + } else { + if (column.column.definition.width) { + cellEl.style.width = column.column.definition.width + "px"; + } + } + + if (column.column.parent) { + _this4.mapElementStyles(column.column.parent.groupElement, cellEl, ["border-top"]); + } + + rowEl.appendChild(cellEl); + }); + + headerEl.appendChild(rowEl); + }); + + return headerEl; +}; + +Export.prototype.generateBodyElements = function (rows) {}; + +Export.prototype.generateBodyElements = function (rows) { + var _this5 = this; + + var oddRow, evenRow, calcRow, firstRow, firstCell, firstGroup, lastCell, styleCells, styleRow, treeElementField, rowFormatter; + + //assign row formatter + rowFormatter = this.table.options["rowFormatter" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))]; + rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter; + + //lookup row styles + if (this.cloneTableStyle && window.getComputedStyle) { + oddRow = this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"); + evenRow = this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"); + calcRow = this.table.element.querySelector(".tabulator-row.tabulator-calcs"); + firstRow = this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"); + firstGroup = this.table.element.getElementsByClassName("tabulator-group")[0]; + + if (firstRow) { + styleCells = firstRow.getElementsByClassName("tabulator-cell"); + firstCell = styleCells[0]; + lastCell = styleCells[styleCells.length - 1]; + } + } + + var bodyEl = document.createElement("tbody"); + + var columns = []; + + 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); + } + } + + this.table.columnManager.columnsByIndex.forEach(function (column) { + if (_this5.columnVisCheck(column)) { + columns.push(column); + } + }); + + if (this.table.options.dataTree && this.config.dataTree !== false && this.table.modExists("columnCalcs")) { + treeElementField = this.table.modules.dataTree.elementField; + } + + rows = rows.filter(function (row) { + switch (row.type) { + case "group": + return _this5.config.rowGroups !== false; + break; + + case "calc": + return _this5.config.columnCalcs !== false; + break; + } + + return true; + }); + + if (rows.length > 1000) { + console.warn("It may take a long time to render an HTML table with more than 1000 rows"); + } + + rows.forEach(function (row, i) { + var rowData = row.getData(_this5.colVisProp); + + var rowEl = document.createElement("tr"); + rowEl.classList.add("tabulator-print-table-row"); + + switch (row.type) { + case "group": + var cellEl = document.createElement("td"); + cellEl.colSpan = columns.length; + cellEl.innerHTML = row.key; + + rowEl.classList.add("tabulator-print-table-group"); + + _this5.mapElementStyles(firstGroup, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]); + _this5.mapElementStyles(firstGroup, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom"]); + rowEl.appendChild(cellEl); + break; + + case "calc": + rowEl.classList.add("tabulator-print-table-calcs"); + + case "row": + + if (_this5.table.options.dataTree && _this5.config.dataTree === false && row.modules.dataTree.parent) { + return; + } + + columns.forEach(function (column, i) { + var cellEl = document.createElement("td"); + + var value = column.getFieldValue(rowData); + + 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 (_this5.table.modExists("format") && _this5.config.formatCells !== false) { + value = _this5.table.modules.format.formatExportValue(cellWrapper, _this5.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 (firstCell) { + _this5.mapElementStyles(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 (_this5.table.options.dataTree && _this5.config.dataTree !== false) { + if (treeElementField && treeElementField == column.field || !treeElementField && i == 0) { + if (row.modules.dataTree.controlEl) { + cellEl.insertBefore(row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild); + } + if (row.modules.dataTree.branchEl) { + cellEl.insertBefore(row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild); + } + } + } + + rowEl.appendChild(cellEl); + + if (cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback) { + cellWrapper.modules.format.renderedCallback(); + } + }); + + styleRow = row.type == "calc" ? calcRow : i % 2 && evenRow ? evenRow : oddRow; + + _this5.mapElementStyles(styleRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]); + + if (rowFormatter && _this5.config.formatCells !== false) { + var rowComponent = row.getComponent(); + + rowComponent.getElement = function () { + return rowEl; + }; + + rowFormatter(rowComponent); + } + + break; + } + + bodyEl.appendChild(rowEl); + }); + + return bodyEl; +}; + +Export.prototype.columnVisCheck = function (column) { + return column.definition[this.colVisProp] !== false && (column.visible || !column.visible && column.definition[this.colVisProp]); +}; + +Export.prototype.getHtml = function (visible, style, config, colVisProp) { + var holder = document.createElement("div"); + + holder.appendChild(this.genereateTable(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || "htmlOutput")); + + return holder.innerHTML; +}; + +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/app/static/vendors/tabulator/js.old/modules/export.min.js b/app/static/vendors/tabulator/js.old/modules/export.min.js new file mode 100644 index 0000000..246d149 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/export.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Export=function(t){this.table=t,this.config={},this.cloneTableStyle=!0,this.colVisProp=""};Export.prototype.genereateTable=function(t,e,o,n){this.cloneTableStyle=e,this.config=t||{},this.colVisProp=n;var r=document.createElement("table");return r.classList.add("tabulator-print-table"),!1!==this.config.columnHeaders&&r.appendChild(this.generateHeaderElements()),r.appendChild(this.generateBodyElements(this.rowLookup(o))),this.mapElementStyles(this.table.element,r,["border-top","border-left","border-right","border-bottom"]),r},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 n=t.processColumnGroup(o);n&&e.push(n)}),e},Export.prototype.processColumnGroup=function(t){var e=this,o=t.columns,n=0,r={title:t.definition.title,column:t,depth:1};if(o.length){if(r.subGroups=[],r.width=0,o.forEach(function(t){var o=e.processColumnGroup(t);o&&(r.width+=o.width,r.subGroups.push(o),o.depth>n&&(n=o.depth))}),r.depth+=n,!r.width)return!1}else{if(!this.columnVisCheck(t))return!1;r.width=1}return r},Export.prototype.groupHeadersToRows=function(t){function e(t,r){var l=n-r;void 0===o[r]&&(o[r]=[]),t.height=t.subGroups?1:l-t.depth+1,o[r].push(t),t.subGroups&&t.subGroups.forEach(function(t){e(t,r+1)})}var o=[],n=0;return t.forEach(function(t){t.depth>n&&(n=t.depth)}),t.forEach(function(t){e(t,0)}),o},Export.prototype.generateHeaderElements=function(){var t=this,e=document.createElement("thead");return this.groupHeadersToRows(this.generateColumnGroupHeaders()).forEach(function(o){var n=document.createElement("tr");t.mapElementStyles(t.table.columnManager.getHeadersElement(),e,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),o.forEach(function(e){var o=document.createElement("th"),r=e.column.definition.cssClass?e.column.definition.cssClass.split(" "):[];o.colSpan=e.width,o.rowSpan=e.height,o.innerHTML=e.column.definition.title,t.cloneTableStyle&&(o.style.boxSizing="border-box"),r.forEach(function(t){o.classList.add(t)}),t.mapElementStyles(e.column.getElement(),o,["text-align","border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),t.mapElementStyles(e.column.contentElement,o,["padding-top","padding-left","padding-right","padding-bottom"]),e.column.visible?t.mapElementStyles(e.column.getElement(),o,["width"]):e.column.definition.width&&(o.style.width=e.column.definition.width+"px"),e.column.parent&&t.mapElementStyles(e.column.parent.groupElement,o,["border-top"]),n.appendChild(o)}),e.appendChild(n)}),e},Export.prototype.generateBodyElements=function(t){},Export.prototype.generateBodyElements=function(t){var e,o,n,r,l,a,i,s,d,c,u=this;c=this.table.options["rowFormatter"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],c=null!==c?c:this.table.options.rowFormatter,this.cloneTableStyle&&window.getComputedStyle&&(e=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),o=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),n=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),r=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),a=this.table.element.getElementsByClassName("tabulator-group")[0],r&&(i=r.getElementsByClassName("tabulator-cell"),l=i[0],i[i.length-1]));var p=document.createElement("tbody"),m=[];return!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)),this.table.columnManager.columnsByIndex.forEach(function(t){u.columnVisCheck(t)&&m.push(t)}),this.table.options.dataTree&&!1!==this.config.dataTree&&this.table.modExists("columnCalcs")&&(d=this.table.modules.dataTree.elementField),t=t.filter(function(t){switch(t.type){case"group":return!1!==u.config.rowGroups;case"calc":return!1!==u.config.columnCalcs}return!0}),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,r){var i=t.getData(u.colVisProp),f=document.createElement("tr");switch(f.classList.add("tabulator-print-table-row"),t.type){case"group":var h=document.createElement("td");h.colSpan=m.length,h.innerHTML=t.key,f.classList.add("tabulator-print-table-group"),u.mapElementStyles(a,f,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),u.mapElementStyles(a,h,["padding-top","padding-left","padding-right","padding-bottom"]),f.appendChild(h);break;case"calc":f.classList.add("tabulator-print-table-calcs");case"row":if(u.table.options.dataTree&&!1===u.config.dataTree&&t.modules.dataTree.parent)return;if(m.forEach(function(e,o){var n=document.createElement("td"),r=e.getFieldValue(i),a={modules:{},getValue:function(){return r},getField:function(){return e.definition.field},getElement:function(){return n},getColumn:function(){return e.getComponent()},getData:function(){return i},getRow:function(){return t.getComponent()},getComponent:function(){return a},column:e};if((e.definition.cssClass?e.definition.cssClass.split(" "):[]).forEach(function(t){n.classList.add(t)}),u.table.modExists("format")&&!1!==u.config.formatCells)r=u.table.modules.format.formatExportValue(a,u.colVisProp);else switch(void 0===r?"undefined":_typeof(r)){case"object":r=JSON.stringify(r);break;case"undefined":case"null":r="";break;default:r=r}r instanceof Node?n.appendChild(r):n.innerHTML=r,l&&(u.mapElementStyles(l,n,["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size"]),e.definition.align&&(n.style.textAlign=e.definition.align)),u.table.options.dataTree&&!1!==u.config.dataTree&&(d&&d==e.field||!d&&0==o)&&(t.modules.dataTree.controlEl&&n.insertBefore(t.modules.dataTree.controlEl.cloneNode(!0),n.firstChild),t.modules.dataTree.branchEl&&n.insertBefore(t.modules.dataTree.branchEl.cloneNode(!0),n.firstChild)),f.appendChild(n),a.modules.format&&a.modules.format.renderedCallback&&a.modules.format.renderedCallback()}),s="calc"==t.type?n:r%2&&o?o:e,u.mapElementStyles(s,f,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),c&&!1!==u.config.formatCells){var b=t.getComponent();b.getElement=function(){return f},c(b)}}p.appendChild(f)}),p},Export.prototype.columnVisCheck=function(t){return!1!==t.definition[this.colVisProp]&&(t.visible||!t.visible&&t.definition[this.colVisProp])},Export.prototype.getHtml=function(t,e,o,n){var r=document.createElement("div");return r.appendChild(this.genereateTable(o||this.table.options.htmlOutputConfig,e,t,n||"htmlOutput")),r.innerHTML},Export.prototype.mapElementStyles=function(t,e,o){if(this.cloneTableStyle&&t&&e){var n={"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 r=window.getComputedStyle(t);o.forEach(function(t){e.style[n[t]]=r.getPropertyValue(t)})}}},Tabulator.prototype.registerModule("export",Export); \ No newline at end of file diff --git a/app/static/vendors/tabulator/js.old/modules/filter.js b/app/static/vendors/tabulator/js.old/modules/filter.js new file mode 100644 index 0000000..acb5ba5 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/filter.js @@ -0,0 +1,766 @@ +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.6.3 (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 }; + } 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) { + var self = this; + + self.filterList = []; + + if (!Array.isArray(field)) { + field = [{ field: field, type: type, value: value }]; + } + + self.addFilter(field); +}; + +//add filter to array +Filter.prototype.addFilter = function (field, type, value) { + var self = this; + + if (!Array.isArray(field)) { + field = [{ field: field, type: type, value: value }]; + } + + 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)); + }; + } else { + filterFunc = function filterFunc(data) { + return self.filters[filter.type](filter.value, data[filter.field]); + }; + } + } 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; + } + } + }, + + //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/app/static/vendors/tabulator/js.old/modules/filter.min.js b/app/static/vendors/tabulator/js.old/modules/filter.min.js new file mode 100644 index 0000000..ba522dd --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/filter.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Filter=function(e){this.table=e,this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1};Filter.prototype.initializeColumn=function(e,t){function r(t){var r,l="input"==e.modules.filter.tagType&&"text"==e.modules.filter.attrType||"textarea"==e.modules.filter.tagType?"partial":"match",o="",a="";if(void 0===e.modules.filter.prevSuccess||e.modules.filter.prevSuccess!==t){if(e.modules.filter.prevSuccess=t,e.modules.filter.emptyFunc(t))delete i.headerFilters[n];else{switch(e.modules.filter.value=t,_typeof(e.definition.headerFilterFunc)){case"string":i.filters[e.definition.headerFilterFunc]?(o=e.definition.headerFilterFunc,r=function(r){var n=e.definition.headerFilterFuncParams||{},l=e.getFieldValue(r);return n="function"==typeof n?n(t,l,r):n,i.filters[e.definition.headerFilterFunc](t,l,r,n)}):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)},o=r}if(!r)switch(l){case"partial":r=function(r){var i=e.getFieldValue(r);return void 0!==i&&null!==i&&String(i).toLowerCase().indexOf(String(t).toLowerCase())>-1},o="like";break;default:r=function(r){return e.getFieldValue(r)==t},o="="}i.headerFilters[n]={value:t,func:r,type:o}}a=JSON.stringify(i.headerFilters),i.prevHeaderFilterChangeCheck!==a&&(i.prevHeaderFilterChangeCheck=a,i.changed=!0,i.table.rowManager.filterRefresh())}return!0}var i=this,n=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){var i=this;i.filterList=[],Array.isArray(e)||(e=[{field:e,type:t,value:r}]),i.addFilter(e)},Filter.prototype.addFilter=function(e,t,r){var i=this;Array.isArray(e)||(e=[{field:e,type:t,value:r}]),e.forEach(function(e){(e=i.findFilter(e))&&(i.filterList.push(e),i.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))}:function(t){return r.filters[e.type](e.value,t[e.field])}):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},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/app/static/vendors/tabulator/js.old/modules/format.js b/app/static/vendors/tabulator/js.old/modules/format.js new file mode 100644 index 0000000..07247a4 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/format.js @@ -0,0 +1,725 @@ +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.6.3 (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 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/app/static/vendors/tabulator/js.old/modules/format.min.js b/app/static/vendors/tabulator/js.old/modules/format.min.js new file mode 100644 index 0000000..f43eab5 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/format.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},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,l,n,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],l=r.length>1?s+r[1]:"",n=/(\d+)(\d{3})/;n.test(a);)a=a.replace(n,"$1"+c+"$2");return d?a+l+u:u+a+l},link:function(e,t,o){var r,a=e.getValue(),l=t.urlPrefix||"",n=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",l+a),t.target&&s.setAttribute("target",t.target),t.download&&(n="function"==typeof n?n(e):!0===n?"":n,s.setAttribute("download",n)),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(),l=t.allowEmpty,n=t.allowTruthy,i=void 0!==t.tickElement?t.tickElement:'',s=void 0!==t.crossElement?t.crossElement:'';return n&&r||!0===r||"true"===r||"True"===r||1===r||"1"===r?(a.setAttribute("aria-checked",!0),i||""):!l||"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",l=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",n=e.getValue(),i=moment(n,r);return i.isValid()?i.format(a):!0===l?n:"function"==typeof l?l(n):l},datetimediff:function(e,t,o){var r=t.inputFormat||"YYYY-MM-DD hh:mm:ss",a=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",l=void 0!==t.suffix&&t.suffix,n=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(l):u.diff(s,n)+(l?" "+l:""):!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(),l=t&&t.stars?t.stars:5,n=document.createElement("span"),i=document.createElementNS("http://www.w3.org/2000/svg","svg");n.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,l));for(var s=1;s<=l;s++){var c=i.cloneNode(!0);c.innerHTML=s<=r?'':'',n.appendChild(c)}return a.style.whiteSpace="nowrap",a.style.overflow="hidden",a.style.textOverflow="ellipsis",a.setAttribute("aria-label",r),n},traffic:function(e,t,o){var r,a,l=this.sanitizeHTML(e.getValue())||0,n=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(l)&&void 0!==e.getValue()){switch(n.classList.add("tabulator-traffic-light"),a=parseFloat(l)<=i?parseFloat(l):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(l);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 n.style.backgroundColor=u,n}},progress:function(e,t,o){var r,a,l,n,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":l=t.color;break;case"function":l=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),l=t.color[f];break}default:l="#2DC214"}switch(_typeof(t.legend)){case"string":n=t.legend;break;case"function":n=t.legend(s);break;case"boolean":n=s;break;default:n=!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=l,h.style.height="100%",h.setAttribute("data-max",u),h.setAttribute("data-min",d),n){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=n}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),n&&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=l.element;l.open=e,t&&(l.open?(a.classList.add("open"),t.style.display=""):(a.classList.remove("open"),t.style.display="none"))}var a=document.createElement("div"),l=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(!l.open)}),r(l.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/app/static/vendors/tabulator/js.old/modules/frozen_columns.js b/app/static/vendors/tabulator/js.old/modules/frozen_columns.js new file mode 100644 index 0000000..9e081d0 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/frozen_columns.js @@ -0,0 +1,275 @@ +/* Tabulator v4.6.3 (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/app/static/vendors/tabulator/js.old/modules/frozen_columns.min.js b/app/static/vendors/tabulator/js.old/modules/frozen_columns.min.js new file mode 100644 index 0000000..9195faa --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/frozen_columns.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (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/app/static/vendors/tabulator/js.old/modules/frozen_rows.min.js b/app/static/vendors/tabulator/js.old/modules/frozen_rows.min.js new file mode 100644 index 0000000..2c61d7b --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/frozen_rows.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (c) Oliver Folkerd */ +var FrozenRows=function(e){this.table=e,this.topElement=document.createElement("div"),this.rows=[],this.displayIndex=0};FrozenRows.prototype.initialize=function(){this.rows=[],this.topElement.classList.add("tabulator-frozen-rows-holder"),this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling)},FrozenRows.prototype.setDisplayIndex=function(e){this.displayIndex=e},FrozenRows.prototype.getDisplayIndex=function(){return this.displayIndex},FrozenRows.prototype.isFrozen=function(){return!!this.rows.length},FrozenRows.prototype.getRows=function(e){var o=e.slice(0);return this.rows.forEach(function(e){var t=o.indexOf(e);t>-1&&o.splice(t,1)}),o},FrozenRows.prototype.freezeRow=function(e){e.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(e.modules.frozen=!0,this.topElement.appendChild(e.getElement()),e.initialize(),e.normalizeHeight(),this.table.rowManager.adjustTableSize(),this.rows.push(e),this.table.rowManager.refreshActiveData("display"),this.styleRows())},FrozenRows.prototype.unfreezeRow=function(e){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/app/static/vendors/tabulator/js.old/modules/group_rows.js b/app/static/vendors/tabulator/js.old/modules/group_rows.js new file mode 100644 index 0000000..d5ad938 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/group_rows.js @@ -0,0 +1,1072 @@ +/* Tabulator v4.6.3 (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 () { + 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.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.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 () { + return new GroupComponent(this); +}; + +////////////////////////////////////////////////// +////////////// 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/app/static/vendors/tabulator/js.old/modules/group_rows.min.js b/app/static/vendors/tabulator/js.old/modules/group_rows.min.js new file mode 100644 index 0000000..5ae3daf --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/group_rows.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (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 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/app/static/vendors/tabulator/js.old/modules/history.js b/app/static/vendors/tabulator/js.old/modules/history.js new file mode 100644 index 0000000..879e006 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/history.js @@ -0,0 +1,141 @@ +/* Tabulator v4.6.3 (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/app/static/vendors/tabulator/js.old/modules/history.min.js b/app/static/vendors/tabulator/js.old/modules/history.min.js new file mode 100644 index 0000000..68512ed --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/history.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (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/app/static/vendors/tabulator/js.old/modules/html_table_import.js b/app/static/vendors/tabulator/js.old/modules/html_table_import.js new file mode 100644 index 0000000..c2e2eb2 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/html_table_import.js @@ -0,0 +1,191 @@ +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.6.3 (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/app/static/vendors/tabulator/js.old/modules/html_table_import.min.js b/app/static/vendors/tabulator/js.old/modules/html_table_import.min.js new file mode 100644 index 0000000..0f62235 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/html_table_import.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},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(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/app/static/vendors/tabulator/js.old/modules/keybindings.min.js b/app/static/vendors/tabulator/js.old/modules/keybindings.min.js new file mode 100644 index 0000000..606f349 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/keybindings.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},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(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/app/static/vendors/tabulator/js.old/modules/menu.js b/app/static/vendors/tabulator/js.old/modules/menu.js new file mode 100644 index 0000000..7c33edc --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/menu.js @@ -0,0 +1,161 @@ +/* Tabulator v4.6.3 (c) Oliver Folkerd */ + +var Menu = function Menu(table) { + this.table = table; //hold Tabulator object + this.menuEl = false; + this.blurEvent = this.hideMenu.bind(this); +}; + +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.preventDefault(); + + _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; + + e.preventDefault(); + + _this3.loadMenu(e, row, menu); + }); +}; + +Menu.prototype.loadMenu = function (e, component, menu) { + var _this4 = this; + + var docHeight = Math.max(document.body.offsetHeight, window.innerHeight); + + //abort if no menu set + if (!menu || !menu.length) { + return; + } + + 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) { + _this4.hideMenu(); + item.action(e, component.getComponent()); + }); + } + } + + _this4.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", _this4.blurEvent); + }, 100); + + 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.hideMenu = function () { + if (this.menuEl.parentNode) { + this.menuEl.parentNode.removeChild(this.menuEl); + } + + 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/app/static/vendors/tabulator/js.old/modules/menu.min.js b/app/static/vendors/tabulator/js.old/modules/menu.min.js new file mode 100644 index 0000000..dbb2bc1 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/menu.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (c) Oliver Folkerd */ +var Menu=function(e){this.table=e,this.menuEl=!1,this.blurEvent=this.hideMenu.bind(this)};Menu.prototype.initializeColumnHeader=function(e){var t,n=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(),n.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(),n.loadMenu(t,e,i)}),e.titleElement.insertBefore(t,e.titleElement.firstChild))},Menu.prototype.initializeCell=function(e){var t=this;e.getElement().addEventListener("contextmenu",function(n){var i="function"==typeof e.column.definition.contextMenu?e.column.definition.contextMenu(e.getComponent()):e.column.definition.contextMenu;n.preventDefault(),t.loadMenu(n,e,i)})},Menu.prototype.initializeRow=function(e){var t=this;e.getElement().addEventListener("contextmenu",function(n){var i="function"==typeof t.table.options.rowContextMenu?t.table.options.rowContextMenu(e.getComponent()):t.table.options.rowContextMenu;n.preventDefault(),t.loadMenu(n,e,i)})},Menu.prototype.loadMenu=function(e,t,n){var i=this,o=Math.max(document.body.offsetHeight,window.innerHeight);n&&n.length&&(this.hideMenu(),this.menuEl=document.createElement("div"),this.menuEl.classList.add("tabulator-menu"),n.forEach(function(e){var n=document.createElement("div"),o=e.label,u=e.disabled;e.separator?n.classList.add("tabulator-menu-separator"):(n.classList.add("tabulator-menu-item"),"function"==typeof o&&(o=o(t.getComponent())),o instanceof Node?n.appendChild(o):n.innerHTML=o,"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){i.hideMenu(),e.action(n,t.getComponent())})),i.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",i.blurEvent)},100),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>=o&&(this.menuEl.style.top="",this.menuEl.style.bottom=o-e.pageY+"px"))},Menu.prototype.hideMenu=function(){this.menuEl.parentNode&&this.menuEl.parentNode.removeChild(this.menuEl),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/app/static/vendors/tabulator/js.old/modules/moveable_columns.js b/app/static/vendors/tabulator/js.old/modules/moveable_columns.js new file mode 100644 index 0000000..081ba8e --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/moveable_columns.js @@ -0,0 +1,289 @@ +/* Tabulator v4.6.3 (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/app/static/vendors/tabulator/js.old/modules/moveable_columns.min.js b/app/static/vendors/tabulator/js.old/modules/moveable_columns.min.js new file mode 100644 index 0000000..a742cf9 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/moveable_columns.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (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"; +}; + +//establish connection with other tables +MoveRows.prototype.connectToTables = function (row) { + var self = this, + connections = this.table.modules.comms.getConnections(this.connection); + + this.table.options.movableRowsSendingStart.call(this.table, connections); + + this.table.modules.comms.send(this.connection, "moveRow", "connect", { + row: row + }); +}; + +//disconnect from other tables +MoveRows.prototype.disconnectFromTables = function () { + var self = this, + connections = this.table.modules.comms.getConnections(this.connection); + + this.table.options.movableRowsSendingStop.call(this.table, connections); + + this.table.modules.comms.send(this.connection, "moveRow", "disconnect"); +}; + +//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; + + 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/app/static/vendors/tabulator/js.old/modules/moveable_rows.min.js b/app/static/vendors/tabulator/js.old/modules/moveable_rows.min.js new file mode 100644 index 0000000..8a80e50 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/moveable_rows.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},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.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.connection=this.table.options.movableRowsConnectedTables},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,i,s,l,r,a,c=this,h=!1;t.addEventListener("touchstart",function(t){c.checkTimeout=setTimeout(function(){c.touchMove=!0,o=e,n=e.nextRow(),s=n?n.getHeight()/2:0,i=e.prevRow(),l=i?i.getHeight()/2:0,r=0,a=0,h=!1,c.startMove(t,e)},c.checkPeriod)},{passive:!0}),this.moving,this.toRow,this.toRowAfter,t.addEventListener("touchmove",function(t){var m,v;c.moving&&(t.preventDefault(),c.moveHover(t),h||(h=t.touches[0].pageY),m=t.touches[0].pageY-h,m>0?n&&m-r>s&&(v=n)!==e&&(h=t.touches[0].pageY,v.getElement().parentNode.insertBefore(c.placeholderElement,v.getElement().nextSibling),c.moveRow(v,!0)):i&&-m-a>l&&(v=i)!==e&&(h=t.touches[0].pageY,v.getElement().parentNode.insertBefore(c.placeholderElement,v.getElement()),c.moveRow(v,!1)),v&&(o=v,n=v.nextRow(),r=s,s=n?n.getHeight()/2:0,i=v.prevRow(),a=l,l=i?i.getHeight()/2:0))}),t.addEventListener("touchend",function(e){c.checkTimeout&&clearTimeout(c.checkTimeout),c.moving&&(c.endMove(e),c.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,i=this.touchMove?e.touches[0].pageX:e.pageX,s=this.touchMove?e.touches[0].pageY:e.pageY;o=t.getElement(),this.connection?(n=o.getBoundingClientRect(),this.startX=n.left-i+window.pageXOffset,this.startY=n.top-s+window.pageYOffset):this.startY=s-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.connectToTables=function(e){var t=this.table.modules.comms.getConnections(this.connection);this.table.options.movableRowsSendingStart.call(this.table,t),this.table.modules.comms.send(this.connection,"moveRow","connect",{row:e})},MoveRows.prototype.disconnectFromTables=function(){var e=this.table.modules.comms.getConnections(this.connection);this.table.options.movableRowsSendingStop.call(this.table,e),this.table.modules.comms.send(this.connection,"moveRow","disconnect")},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(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/app/static/vendors/tabulator/js.old/modules/mutator.js b/app/static/vendors/tabulator/js.old/modules/mutator.js new file mode 100644 index 0000000..b2f7a39 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/mutator.js @@ -0,0 +1,116 @@ +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.6.3 (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/app/static/vendors/tabulator/js.old/modules/mutator.min.js b/app/static/vendors/tabulator/js.old/modules/mutator.min.js new file mode 100644 index 0000000..fa6b50a --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/mutator.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},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/app/static/vendors/tabulator/js.old/modules/page.js b/app/static/vendors/tabulator/js.old/modules/page.js new file mode 100644 index 0000000..52ee487 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/page.js @@ -0,0 +1,693 @@ +/* Tabulator v4.6.3 (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; + 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); + 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 = 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; + + 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 = 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) { + 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"); + button.setAttribute("aria-label", "Show Page " + page); + button.setAttribute("title", "Show Page " + 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 = []; + 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/app/static/vendors/tabulator/js.old/modules/page.min.js b/app/static/vendors/tabulator/js.old/modules/page.min.js new file mode 100644 index 0000000..300eb4f --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/page.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (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,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(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?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;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=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){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"),a.setAttribute("aria-label","Show Page "+e),a.setAttribute("title","Show Page "+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/app/static/vendors/tabulator/js.old/modules/persistence.min.js b/app/static/vendors/tabulator/js.old/modules/persistence.min.js new file mode 100644 index 0000000..4dd8319 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/persistence.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (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/app/static/vendors/tabulator/js.old/modules/print.js b/app/static/vendors/tabulator/js.old/modules/print.js new file mode 100644 index 0000000..7588094 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/print.js @@ -0,0 +1,96 @@ +/* Tabulator v4.6.3 (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/app/static/vendors/tabulator/js.old/modules/print.min.js b/app/static/vendors/tabulator/js.old/modules/print.min.js new file mode 100644 index 0000000..fda1db2 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/print.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (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/app/static/vendors/tabulator/js.old/modules/reactive_data.js b/app/static/vendors/tabulator/js.old/modules/reactive_data.js new file mode 100644 index 0000000..e173aa9 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/reactive_data.js @@ -0,0 +1,235 @@ +/* Tabulator v4.6.3 (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/app/static/vendors/tabulator/js.old/modules/reactive_data.min.js b/app/static/vendors/tabulator/js.old/modules/reactive_data.min.js new file mode 100644 index 0000000..dd4e33b --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/reactive_data.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (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/app/static/vendors/tabulator/js.old/modules/resize_columns.js b/app/static/vendors/tabulator/js.old/modules/resize_columns.js new file mode 100644 index 0000000..69bcf04 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/resize_columns.js @@ -0,0 +1,163 @@ +/* Tabulator v4.6.3 (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/app/static/vendors/tabulator/js.old/modules/resize_columns.min.js b/app/static/vendors/tabulator/js.old/modules/resize_columns.min.js new file mode 100644 index 0000000..5927aed --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/resize_columns.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (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/app/static/vendors/tabulator/js.old/modules/resize_rows.js b/app/static/vendors/tabulator/js.old/modules/resize_rows.js new file mode 100644 index 0000000..8cb1de2 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/resize_rows.js @@ -0,0 +1,98 @@ +/* Tabulator v4.6.3 (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/app/static/vendors/tabulator/js.old/modules/resize_rows.min.js b/app/static/vendors/tabulator/js.old/modules/resize_rows.min.js new file mode 100644 index 0000000..e8304e2 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/resize_rows.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (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/app/static/vendors/tabulator/js.old/modules/resize_table.js b/app/static/vendors/tabulator/js.old/modules/resize_table.js new file mode 100644 index 0000000..a2a899e --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/resize_table.js @@ -0,0 +1,107 @@ +/* Tabulator v4.6.3 (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/app/static/vendors/tabulator/js.old/modules/resize_table.min.js b/app/static/vendors/tabulator/js.old/modules/resize_table.min.js new file mode 100644 index 0000000..8d1be93 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/resize_table.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (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/app/static/vendors/tabulator/js.old/modules/responsive_layout.js b/app/static/vendors/tabulator/js.old/modules/responsive_layout.js new file mode 100644 index 0000000..99f1ff4 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/responsive_layout.js @@ -0,0 +1,301 @@ +/* Tabulator v4.6.3 (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/app/static/vendors/tabulator/js.old/modules/responsive_layout.min.js b/app/static/vendors/tabulator/js.old/modules/responsive_layout.min.js new file mode 100644 index 0000000..427b1e9 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/responsive_layout.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (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/app/static/vendors/tabulator/js.old/modules/select_row.js b/app/static/vendors/tabulator/js.old/modules/select_row.js new file mode 100644 index 0000000..6da6884 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/select_row.js @@ -0,0 +1,417 @@ +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.6.3 (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/app/static/vendors/tabulator/js.old/modules/select_row.min.js b/app/static/vendors/tabulator/js.old/modules/select_row.min.js new file mode 100644 index 0000000..1b115da --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/select_row.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},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/app/static/vendors/tabulator/js.old/modules/sort.js b/app/static/vendors/tabulator/js.old/modules/sort.js new file mode 100644 index 0000000..bd38387 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/sort.js @@ -0,0 +1,566 @@ +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.6.3 (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 = [], + 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) { + self.table.options.dataSorted.call(self.table, self.getSort(), self.table.rowManager.getComponents("active")); + } +}; + +//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/app/static/vendors/tabulator/js.old/modules/sort.min.js b/app/static/vendors/tabulator/js.old/modules/sort.min.js new file mode 100644 index 0000000..1e9855d --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/sort.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},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=[];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&&e.table.options.dataSorted.call(e.table,e.getSort(),e.table.rowManager.getComponents("active"))},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/app/static/vendors/tabulator/js.old/modules/validate.js b/app/static/vendors/tabulator/js.old/modules/validate.js new file mode 100644 index 0000000..e4e6521 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/validate.js @@ -0,0 +1,217 @@ +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.6.3 (c) Oliver Folkerd */ + +var Validate = function Validate(table) { + this.table = table; +}; + +//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 = []; + + if (validators) { + validators.forEach(function (item) { + if (!item.func.call(self, cell, value, item.params)) { + valid.push({ + type: item.type, + parameters: item.params + }); + } + }); + } + + return valid.length ? valid : true; +}; + +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; + }, + + //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/app/static/vendors/tabulator/js.old/modules/validate.min.js b/app/static/vendors/tabulator/js.old/modules/validate.min.js new file mode 100644 index 0000000..466b853 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/modules/validate.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.6.3 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Validate=function(t){this.table=t};Validate.prototype.initializeColumn=function(t){var n,i=this,r=[];t.definition.validator&&(Array.isArray(t.definition.validator)?t.definition.validator.forEach(function(t){(n=i._extractValidator(t))&&r.push(n)}):(n=this._extractValidator(t.definition.validator))&&r.push(n),t.modules.validate=!!r.length&&r)},Validate.prototype._extractValidator=function(t){var n,i,r;switch(void 0===t?"undefined":_typeof(t)){case"string":return r=t.indexOf(":"),r>-1?(n=t.substring(0,r),i=t.substring(r+1)):n=t,this._buildValidator(n,i);case"function":return this._buildValidator(t);case"object":return this._buildValidator(t.type,t.parameters)}},Validate.prototype._buildValidator=function(t,n){var i="function"==typeof t?t:this.validators[t];return i?{type:"function"==typeof t?"function":t,func:i,params:n}:(console.warn("Validator Setup Error - No matching validator found:",t),!1)},Validate.prototype.validate=function(t,n,i){var r=this,o=[];return t&&t.forEach(function(t){t.func.call(r,n,i,t.params)||o.push({type:t.type,parameters:t.params})}),!o.length||o},Validate.prototype.validators={integer:function(t,n,i){return""===n||null===n||void 0===n||"number"==typeof(n=Number(n))&&isFinite(n)&&Math.floor(n)===n},float:function(t,n,i){return""===n||null===n||void 0===n||"number"==typeof(n=Number(n))&&isFinite(n)&&n%1!=0},numeric:function(t,n,i){return""===n||null===n||void 0===n||!isNaN(n)},string:function(t,n,i){return""===n||null===n||void 0===n||isNaN(n)},max:function(t,n,i){return""===n||null===n||void 0===n||parseFloat(n)<=i},min:function(t,n,i){return""===n||null===n||void 0===n||parseFloat(n)>=i},minLength:function(t,n,i){return""===n||null===n||void 0===n||String(n).length>=i},maxLength:function(t,n,i){return""===n||null===n||void 0===n||String(n).length<=i},in:function(t,n,i){return""===n||null===n||void 0===n||("string"==typeof i&&(i=i.split("|")),""===n||i.indexOf(n)>-1)},regex:function(t,n,i){return""===n||null===n||void 0===n||new RegExp(i).test(n)},unique:function(t,n,i){if(""===n||null===n||void 0===n)return!0;var r=!0,o=t.getData(),e=t.getColumn()._getSelf();return this.table.rowManager.rows.forEach(function(t){var i=t.getData();i!==o&&n==e.getFieldValue(i)&&(r=!1)}),r},required:function(t,n,i){return""!==n&&null!==n&&void 0!==n}},Tabulator.prototype.registerModule("validate",Validate); \ No newline at end of file diff --git a/app/static/vendors/tabulator/js.old/tabulator.js b/app/static/vendors/tabulator/js.old/tabulator.js new file mode 100644 index 0000000..b915007 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/tabulator.js @@ -0,0 +1,24238 @@ +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.6.3 (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; + } + + }); + } + + 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 () { + + 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); + }; + + 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._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"); + } + }; + + 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); + }); + } + + 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(); + } + }; + + //////////////// 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"]; + + //////////////// Event Bindings ///////////////// + + + //////////////// Object Generation ///////////////// + + Column.prototype.getComponent = function () { + + return new ColumnComponent(this); + }; + + 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.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.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.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.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); + } + }; + + ///////////////////// 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; + + //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 () { + + return new RowComponent(this); + }; + + //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.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.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.delete = function () { + + if (!this.table.rowManager.redrawBlock) { + + this.element.parentNode.removeChild(this.element); + } + + 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 () { + + return new CellComponent(this); + }; + + 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: false, //download config + + + 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 + + + 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 + + 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() {}, + + 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, + + groupTap: false, + + groupDblTap: false, + + groupTapHold: false, + + columnCalcs: true, + + //pagination callbacks + + pageLoaded: function pageLoaded() {}, + + //localization callbacks + + localized: function localized() {}, + + //validation has failed + + 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 (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) { + + if (this.modExists("filter", true)) { + + this.modules.filter.setFilter(field, type, value); + + this.rowManager.filterRefresh(); + } + }; + + //add filter to array + + Tabulator.prototype.addFilter = function (field, type, value) { + + if (this.modExists("filter", true)) { + + this.modules.filter.addFilter(field, type, value); + + 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(); + } + }; + + ///////////////////// Filtering //////////////////// + + 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(); + } + }; + + //////////// 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 _this31 = this; + + return new Promise(function (resolve, reject) { + + if (_this31.options.pagination && _this31.modExists("page")) { + + row = _this31.rowManager.findRow(row); + + if (row) { + + _this31.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(); + } + }; + + ///////////////// 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 the 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 the 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 the contain and stretch last column to fill table + + + "fitDataStretch": function fitDataStretch(columns) { + var _this32 = 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 (_this32.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", + + "first": "First", + + "first_title": "First Page", + + "last": "Last", + + "last_title": "Last Page", + + "prev": "Prev", + + "prev_title": "Prev Page", + + "next": "Next", + + "next_title": "Next Page" + + }, + + "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 _this33 = this; + + return new Promise(function (resolve, reject) { + _this33.sendRequest(inPosition).then(function (data) { + _this33.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 _this34 = 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(_this34.table, self.url, self.params) !== false) { + + self.loading = true; + + if (!silent) { + self.showLoader(); + } + + _this34.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 _this35 = 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) { + _this35.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 _this36 = this; + + var data = []; + + rows.forEach(function (row) { + data.push(row.getData()); + + if (_this36.table.options.dataTree && _this36.table.options.dataTreeChildColumnCalcs) { + if (row.modules.dataTree.open) { + var children = _this36.rowsToData(_this36.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 _this37 = 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; + + if (!_this37.blocked) { + e.preventDefault(); + + if (_this37.customSelection) { + plain = _this37.customSelection; + + if (_this37.table.options.clipboardCopyFormatter) { + plain = _this37.table.options.clipboardCopyFormatter("plain", plain); + } + } else { + html = _this37.table.modules.export.getHtml(_this37.rowRange, _this37.table.options.clipboardCopyStyled, _this37.table.options.clipboardCopyConfig, "clipboard"); + plain = html ? _this37.generatePlainContent(html) : ""; + + if (_this37.table.options.clipboardCopyFormatter) { + plain = _this37.table.options.clipboardCopyFormatter("plain", plain); + html = _this37.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); + } + } + + _this37.table.options.clipboardCopied.call(_this37.table, plain, html); + + _this37.reset(); + } + }); + } + + if (this.mode === true || this.mode === "paste") { + this.table.element.addEventListener("paste", function (e) { + _this37.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 (html) { + var output = []; + + var holder = document.createElement("div"); + holder.innerHTML = html; + + var table = holder.getElementsByTagName("table")[0]; + var rows = Array.prototype.slice.call(table.getElementsByTagName("tr")); + + rows.forEach(function (row) { + var rowData = []; + + var headers = Array.prototype.slice.call(row.getElementsByTagName("th")); + var cells = Array.prototype.slice.call(row.getElementsByTagName("td")); + + cells = cells.concat(headers); + + cells.forEach(function (cell) { + var val = cell.innerHTML; + + val = val == " " ? "" : val; + + rowData.push(val); + }); + + 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 _this38 = 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(); + _this38.collapseRow(row); + }); + } else { + config.controlEl = this.expandEl.cloneNode(true); + config.controlEl.addEventListener("click", function (e) { + e.stopPropagation(); + _this38.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 _this39 = 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 = _this39.getChildren(row); + + children.forEach(function (child) { + output.push(child); + }); + } + } + }); + + return output; + }; + + DataTree.prototype.getChildren = function (row) { + var _this40 = 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 = _this40.getChildren(child); + + subChildren.forEach(function (sub) { + output.push(sub); + }); + }); + } + + return output; + }; + + DataTree.prototype.generateChildren = function (row) { + var _this41 = this; + + var children = []; + + var childArray = row.getData()[this.field]; + + if (!Array.isArray(childArray)) { + childArray = [childArray]; + } + + childArray.forEach(function (childData) { + var childRow = new Row(childData || {}, _this41.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 = _this41.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.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 + this.fields = {}; //hold filed multi dimension arrays + this.columnsByIndex = []; //hold columns in their order in the table + this.columnsByField = {}; //hold columns with lookup by field name + this.config = {}; + this.active = false; + }; + + //trigger file download + Download.prototype.download = function (type, filename, options, active, interceptCallback) { + var self = this, + downloadFunc = false; + this.processConfig(); + this.active = active; + + 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); + } + } + + this.processColumns(); + + if (downloadFunc) { + downloadFunc.call(this, self.processDefinitions(), self.processData(active || "active"), options || {}, buildLink, this.config); + } + }; + + Download.prototype.processConfig = function () { + var config = { //download config + columnGroups: true, + rowGroups: true, + columnCalcs: true, + dataTree: true + }; + + if (this.table.options.downloadConfig) { + for (var key in this.table.options.downloadConfig) { + config[key] = this.table.options.downloadConfig[key]; + } + } + + this.config.rowGroups = config.rowGroups && this.table.options.groupBy && this.table.modExists("groupRows"); + + if (config.columnGroups && this.table.columnManager.columns.length != this.table.columnManager.columnsByIndex.length) { + this.config.columnGroups = true; + } + + if (config.columnCalcs && this.table.modExists("columnCalcs")) { + this.config.columnCalcs = true; + } + + if (config.dataTree && this.table.options.dataTree && this.table.modExists("dataTree")) { + this.config.dataTree = true; + } + }; + + Download.prototype.processColumns = function () { + var self = this; + + self.columnsByIndex = []; + self.columnsByField = {}; + + self.table.columnManager.columnsByIndex.forEach(function (column) { + + if (column.field && column.definition.download !== false && (column.visible || !column.visible && column.definition.download)) { + self.columnsByIndex.push(column); + self.columnsByField[column.field] = column; + } + }); + }; + + Download.prototype.processDefinitions = function () { + var self = this, + processedDefinitions = []; + + if (this.config.columnGroups) { + self.table.columnManager.columns.forEach(function (column) { + var colData = self.processColumnGroup(column); + + if (colData) { + processedDefinitions.push(colData); + } + }); + } else { + self.columnsByIndex.forEach(function (column) { + if (column.download !== false) { + //isolate definiton from defintion object + processedDefinitions.push(self.processDefinition(column)); + } + }); + } + + return processedDefinitions; + }; + + Download.prototype.processColumnGroup = function (column) { + var _this42 = this; + + var subGroups = column.columns, + maxDepth = 0; + var processedColumn = this.processDefinition(column); + var groupData = { + type: "group", + title: processedColumn.title, + depth: 1 + }; + + if (subGroups.length) { + groupData.subGroups = []; + groupData.width = 0; + + subGroups.forEach(function (subGroup) { + var subGroupData = _this42.processColumnGroup(subGroup); + + if (subGroupData.depth > maxDepth) { + maxDepth = subGroupData.depth; + } + + if (subGroupData) { + groupData.width += subGroupData.width; + groupData.subGroups.push(subGroupData); + } + }); + + groupData.depth += maxDepth; + + if (!groupData.width) { + return false; + } + } else { + if (column.field && column.definition.download !== false && (column.visible || !column.visible && column.definition.download)) { + groupData.width = 1; + groupData.definition = processedColumn; + } else { + return false; + } + } + + return groupData; + }; + + Download.prototype.processDefinition = function (column) { + var def = {}; + + for (var key in column.definition) { + def[key] = column.definition[key]; + } + + if (typeof column.definition.downloadTitle != "undefined") { + def.title = column.definition.downloadTitle; + } + + return def; + }; + + Download.prototype.processData = function (active) { + var _this43 = this; + + var self = this, + data = [], + groups = [], + rows = false, + calcs = {}; + + if (this.config.rowGroups) { + + if (active == "visible") { + + rows = self.table.rowManager.getRows(active); + + rows.forEach(function (row) { + if (row.type == "row") { + var group = row.getGroup(); + + if (groups.indexOf(group) === -1) { + groups.push(group); + } + } + }); + } else { + groups = this.table.modules.groupRows.getGroups(); + } + + groups.forEach(function (group) { + data.push(_this43.processGroupData(group, rows)); + }); + } else { + if (this.config.dataTree) { + active = active = "active" ? "display" : active; + } + data = self.table.rowManager.getData(active, "download"); + } + + if (this.config.columnCalcs) { + calcs = this.table.getCalcResults(); + + data = { + calcs: calcs, + data: data + }; + } + + //bulk data processing + if (typeof self.table.options.downloadDataFormatter == "function") { + data = self.table.options.downloadDataFormatter(data); + } + + return data; + }; + + Download.prototype.processGroupData = function (group, visRows) { + var _this44 = this; + + var subGroups = group.getSubGroups(); + + var groupData = { + type: "group", + key: group.key + }; + + if (subGroups.length) { + groupData.subGroups = []; + + subGroups.forEach(function (subGroup) { + groupData.subGroups.push(_this44.processGroupData(subGroup, visRows)); + }); + } else { + if (visRows) { + groupData.rows = []; + + group.rows.forEach(function (row) { + if (visRows.indexOf(row) > -1) { + groupData.rows.push(row.getData("download")); + } + }); + } else { + groupData.rows = group.getData(true, "download"); + } + } + + return groupData; + }; + + 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(); + } + } + }; + + //nested field lookup + Download.prototype.getFieldValue = function (field, data) { + var column = this.columnsByField[field]; + + if (column) { + return column.getFieldValue(data); + } + + return false; + }; + + 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(columns, data, options, setFileContents, config) { + var self = this, + titles = [], + fields = [], + delimiter = options && options.delimiter ? options.delimiter : ",", + fileContents, + output; + + //build column headers + function parseSimpleTitles() { + columns.forEach(function (column) { + titles.push('"' + String(column.title).split('"').join('""') + '"'); + fields.push(column.field); + }); + } + + function parseColumnGroup(column, level) { + if (column.subGroups) { + column.subGroups.forEach(function (subGroup) { + parseColumnGroup(subGroup, level + 1); + }); + } else { + titles.push('"' + String(column.title).split('"').join('""') + '"'); + fields.push(column.definition.field); + } + } + + if (config.columnGroups) { + console.warn("Download Warning - CSV downloader cannot process column groups"); + + columns.forEach(function (column) { + parseColumnGroup(column, 0); + }); + } else { + parseSimpleTitles(); + } + + //generate header row + fileContents = [titles.join(delimiter)]; + + function parseRows(data) { + //generate each row of the table + data.forEach(function (row) { + var rowData = []; + + fields.forEach(function (field) { + var value = self.getFieldValue(field, row); + + switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) { + case "object": + value = JSON.stringify(value); + break; + + case "undefined": + case "null": + value = ""; + break; + + default: + value = value; + } + + //escape quotation marks + rowData.push('"' + String(value).split('"').join('""') + '"'); + }); + + fileContents.push(rowData.join(delimiter)); + }); + } + + function parseGroup(group) { + if (group.subGroups) { + group.subGroups.forEach(function (subGroup) { + parseGroup(subGroup); + }); + } else { + parseRows(group.rows); + } + } + + if (config.columnCalcs) { + console.warn("Download Warning - CSV downloader cannot process column calculations"); + data = data.data; + } + + if (config.rowGroups) { + console.warn("Download Warning - CSV downloader cannot process row groups"); + + data.forEach(function (group) { + parseGroup(group); + }); + } else { + parseRows(data); + } + + output = fileContents.join("\n"); + + if (options.bom) { + output = '\uFEFF' + output; + } + + setFileContents(output, "text/csv"); + }, + + json: function json(columns, data, options, setFileContents, config) { + var fileContents; + + if (config.columnCalcs) { + console.warn("Download Warning - CSV downloader cannot process column calculations"); + data = data.data; + } + + fileContents = JSON.stringify(data, null, '\t'); + + setFileContents(fileContents, "application/json"); + }, + + pdf: function pdf(columns, data, options, setFileContents, config) { + var self = this, + fields = [], + header = [], + body = [], + calcs = {}, + headerDepth = 1, + table = "", + 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 (config.columnCalcs) { + calcs = data.calcs; + data = data.data; + } + + if (!jsPDFParams.orientation) { + jsPDFParams.orientation = options.orientation || "landscape"; + } + + if (!jsPDFParams.unit) { + jsPDFParams.unit = "pt"; + } + + //build column headers + function parseSimpleTitles() { + columns.forEach(function (column) { + if (column.field) { + header.push(column.title || ""); + fields.push(column.field); + } + }); + + header = [header]; + } + + function parseColumnGroup(column, level) { + var colSpan = column.width, + rowSpan = 1, + col = { + content: column.title || "" + }; + + if (column.subGroups) { + column.subGroups.forEach(function (subGroup) { + parseColumnGroup(subGroup, level + 1); + }); + rowSpan = 1; + } else { + fields.push(column.definition.field); + rowSpan = headerDepth - level; + } + + col.rowSpan = rowSpan; + // col.colSpan = colSpan; + + header[level].push(col); + + colSpan--; + + if (rowSpan > 1) { + for (var i = level + 1; i < headerDepth; i++) { + header[i].push(""); + } + } + + for (var i = 0; i < colSpan; i++) { + header[level].push(""); + } + } + + if (config.columnGroups) { + columns.forEach(function (column) { + if (column.depth > headerDepth) { + headerDepth = column.depth; + } + }); + + for (var i = 0; i < headerDepth; i++) { + header.push([]); + } + + columns.forEach(function (column) { + parseColumnGroup(column, 0); + }); + } else { + parseSimpleTitles(); + } + + function parseValue(value) { + switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) { + case "object": + value = JSON.stringify(value); + break; + + case "undefined": + case "null": + value = ""; + break; + + default: + value = value; + } + + return value; + } + + function parseRows(data) { + //build table rows + data.forEach(function (row) { + body.push(parseRow(row)); + }); + } + + function parseRow(row, styles) { + var rowData = []; + + fields.forEach(function (field) { + var value = self.getFieldValue(field, row); + value = parseValue(value); + + if (styles) { + rowData.push({ + content: value, + styles: styles + }); + } else { + rowData.push(value); + } + }); + + return rowData; + } + + function parseGroup(group, calcObj) { + var groupData = []; + + groupData.push({ content: parseValue(group.key), colSpan: fields.length, styles: rowGroupStyles }); + + body.push(groupData); + + if (group.subGroups) { + group.subGroups.forEach(function (subGroup) { + parseGroup(subGroup, calcObj[group.key] ? calcObj[group.key].groups || {} : {}); + }); + } else { + + if (config.columnCalcs) { + addCalcRow(calcObj, group.key, "top"); + } + + parseRows(group.rows); + + if (config.columnCalcs) { + addCalcRow(calcObj, group.key, "bottom"); + } + } + } + + function addCalcRow(calcs, selector, pos) { + var calcData = calcs[selector]; + + if (calcData) { + if (pos) { + calcData = calcData[pos]; + } + + if (Object.keys(calcData).length) { + body.push(parseRow(calcData, rowCalcStyles)); + } + } + } + + if (config.rowGroups) { + data.forEach(function (group) { + parseGroup(group, calcs); + }); + } else { + if (config.columnCalcs) { + addCalcRow(calcs, "top"); + } + + parseRows(data); + + if (config.columnCalcs) { + addCalcRow(calcs, "bottom"); + } + } + + 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(columns, data, options, setFileContents, config) { + var self = this, + sheetName = options.sheetName || "Sheet1", + workbook = XLSX.utils.book_new(), + calcs = {}, + groupRowIndexs = [], + groupColumnIndexs = [], + calcRowIndexs = [], + output; + + workbook.SheetNames = []; + workbook.Sheets = {}; + + if (config.columnCalcs) { + calcs = data.calcs; + data = data.data; + } + + function generateSheet() { + var titles = [], + fields = [], + rows = [], + worksheet; + + //convert rows to worksheet + function rowsToSheet() { + var sheet = {}; + var range = { s: { c: 0, r: 0 }, e: { c: fields.length, r: rows.length } }; + + XLSX.utils.sheet_add_aoa(sheet, rows); + + sheet['!ref'] = XLSX.utils.encode_range(range); + + var merges = generateMerges(); + + if (merges.length) { + sheet["!merges"] = merges; + } + + return sheet; + } + + function parseSimpleTitles() { + //get field lists + columns.forEach(function (column) { + titles.push(column.title); + fields.push(column.field); + }); + + rows.push(titles); + } + + function parseColumnGroup(column, level) { + + if (typeof titles[level] === "undefined") { + titles[level] = []; + } + + if (typeof groupColumnIndexs[level] === "undefined") { + groupColumnIndexs[level] = []; + } + + if (column.width > 1) { + + groupColumnIndexs[level].push({ + type: "hoz", + start: titles[level].length, + end: titles[level].length + column.width - 1 + }); + } + + titles[level].push(column.title); + + if (column.subGroups) { + column.subGroups.forEach(function (subGroup) { + parseColumnGroup(subGroup, level + 1); + }); + } else { + fields.push(column.definition.field); + padColumnTitles(fields.length - 1, level); + + groupColumnIndexs[level].push({ + type: "vert", + start: fields.length - 1 + }); + } + } + + function padColumnTitles() { + var max = 0; + + titles.forEach(function (title) { + var len = title.length; + if (len > max) { + max = len; + } + }); + + titles.forEach(function (title) { + var len = title.length; + if (len < max) { + for (var i = len; i < max; i++) { + title.push(""); + } + } + }); + } + + if (config.columnGroups) { + columns.forEach(function (column) { + parseColumnGroup(column, 0); + }); + + titles.forEach(function (title) { + rows.push(title); + }); + } else { + parseSimpleTitles(); + } + + function generateMerges() { + var output = []; + + groupRowIndexs.forEach(function (index) { + output.push({ s: { r: index, c: 0 }, e: { r: index, c: fields.length - 1 } }); + }); + + groupColumnIndexs.forEach(function (merges, level) { + merges.forEach(function (merge) { + if (merge.type === "hoz") { + output.push({ s: { r: level, c: merge.start }, e: { r: level, c: merge.end } }); + } else { + if (level != titles.length - 1) { + output.push({ s: { r: level, c: merge.start }, e: { r: titles.length - 1, c: merge.start } }); + } + } + }); + }); + + return output; + } + + //generate each row of the table + function parseRows(data) { + data.forEach(function (row) { + rows.push(parseRow(row)); + }); + } + + function parseRow(row) { + var rowData = []; + + fields.forEach(function (field) { + var value = self.getFieldValue(field, row); + rowData.push(!(value instanceof Date) && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === "object" ? JSON.stringify(value) : value); + }); + + return rowData; + } + + function addCalcRow(calcs, selector, pos) { + var calcData = calcs[selector]; + + if (calcData) { + if (pos) { + calcData = calcData[pos]; + } + + if (Object.keys(calcData).length) { + calcRowIndexs.push(rows.length); + rows.push(parseRow(calcData)); + } + } + } + + function parseGroup(group, calcObj) { + var groupData = []; + + groupData.push(group.key); + + groupRowIndexs.push(rows.length); + + rows.push(groupData); + + if (group.subGroups) { + group.subGroups.forEach(function (subGroup) { + parseGroup(subGroup, calcObj[group.key] ? calcObj[group.key].groups || {} : {}); + }); + } else { + + if (config.columnCalcs) { + addCalcRow(calcObj, group.key, "top"); + } + + parseRows(group.rows); + + if (config.columnCalcs) { + addCalcRow(calcObj, group.key, "bottom"); + } + } + } + + if (config.rowGroups) { + data.forEach(function (group) { + parseGroup(group, calcs); + }); + } else { + if (config.columnCalcs) { + addCalcRow(calcs, "top"); + } + + parseRows(data); + + if (config.columnCalcs) { + addCalcRow(calcs, "bottom"); + } + } + + worksheet = rowsToSheet(); + + 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(columns, data, options, setFileContents, config) { + if (this.table.modExists("export", true)) { + setFileContents(this.table.modules.export.getHtml(true, options.style, config), "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; + }; + + //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 () { + var cell = this.currentCell, + cellEl; + + this.invalidEdit = false; + + if (cell) { + this.currentCell = false; + + cellEl = cell.getElement(); + 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(); + 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")) { + valid = self.table.modules.validate.validate(cell.column.modules.validate, cell.getComponent(), value); + } + + if (valid === true) { + self.clearEditor(); + cell.setValue(value, true); + + if (self.table.options.dataTree && self.table.modExists("dataTree")) { + self.table.modules.dataTree.checkForRestyle(cell); + } + + 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); + } + }; + + //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"), + dataItems = [], + displayItems = [], + currentItem = {}, + 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, curentValue) { + var dataList = []; + var displayList = []; + + function processComplexListItem(item) { + var item = { + label: editorParams.listItemFormatter ? editorParams.listItemFormatter(item.value, item.label) : item.label, + value: item.value, + element: false + }; + + if (item.value === curentValue || !isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue)) { + setCurrentItem(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, + element: false + }; + + displayList.push(item); + + value.options.forEach(function (item) { + processComplexListItem(item); + }); + } else { + processComplexListItem(value); + } + } else { + + item = { + label: editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value, + value: value, + element: false + }; + + if (item.value === curentValue || !isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue)) { + setCurrentItem(item); + } + + dataList.push(item); + displayList.push(item); + } + }); + } else { + for (var key in inputValues) { + var item = { + label: editorParams.listItemFormatter ? editorParams.listItemFormatter(key, inputValues[key]) : 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); + } + + 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) { + + if (item.group) { + el = document.createElement("div"); + el.classList.add("tabulator-edit-select-list-group"); + el.tabIndex = 0; + el.innerHTML = item.label === "" ? " " : item.label; + } else { + el = document.createElement("div"); + 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 (item === currentItem) { + el.classList.add("active"); + } + } + + el.addEventListener("mousedown", function () { + blurable = false; + + setTimeout(function () { + blurable = true; + }, 10); + }); + + item.element = el; + } + + listEl.appendChild(el); + }); + } + + function setCurrentItem(item) { + + if (currentItem && currentItem.element) { + currentItem.element.classList.remove("active"); + } + + currentItem = item; + input.value = item.label === " " ? "" : item.label; + + if (item.element) { + item.element.classList.add("active"); + } + } + + function chooseItem() { + hideList(); + + if (initialValue !== currentItem.value) { + initialValue = currentItem.value; + success(currentItem.value); + } else { + cancel(); + } + } + + 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]); + } + } + 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]); + } else { + setCurrentItem(dataItems[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; + } + }); + + input.addEventListener("blur", function (e) { + if (blurable) { + 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; + + 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 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 (editorParams.values === true) { + values = getUniqueColumnValues(); + } else if (typeof editorParams.values === "string") { + values = getUniqueColumnValues(editorParams.values); + } 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 = { + title: editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value, + 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; + 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; + }, + + //start 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); + }); + + 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 Export = function Export(table) { + this.table = table; //hold Tabulator object + this.config = {}; + this.cloneTableStyle = true; + this.colVisProp = ""; + }; + + Export.prototype.genereateTable = function (config, style, range, colVisProp) { + this.cloneTableStyle = style; + this.config = config || {}; + this.colVisProp = colVisProp; + + var table = document.createElement("table"); + table.classList.add("tabulator-print-table"); + + if (this.config.columnHeaders !== false) { + table.appendChild(this.generateHeaderElements()); + } + + table.appendChild(this.generateBodyElements(this.rowLookup(range))); + + this.mapElementStyles(this.table.element, table, ["border-top", "border-left", "border-right", "border-bottom"]); + + return table; + }; + + 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; + + var groupData = { + title: column.definition.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.groupHeadersToRows = function (columns) { + + var headers = [], + headerDepth = 0; + + 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.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); + }); + + return headers; + }; + + Export.prototype.generateHeaderElements = function () { + var _this48 = this; + + var headerEl = document.createElement("thead"); + + var rows = this.groupHeadersToRows(this.generateColumnGroupHeaders()); + + rows.forEach(function (row) { + var rowEl = document.createElement("tr"); + + _this48.mapElementStyles(_this48.table.columnManager.getHeadersElement(), headerEl, ["border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]); + + row.forEach(function (column) { + var cellEl = document.createElement("th"); + var classNames = column.column.definition.cssClass ? column.column.definition.cssClass.split(" ") : []; + + cellEl.colSpan = column.width; + cellEl.rowSpan = column.height; + + cellEl.innerHTML = column.column.definition.title; + + if (_this48.cloneTableStyle) { + cellEl.style.boxSizing = "border-box"; + } + + classNames.forEach(function (className) { + cellEl.classList.add(className); + }); + + _this48.mapElementStyles(column.column.getElement(), cellEl, ["text-align", "border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]); + _this48.mapElementStyles(column.column.contentElement, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom"]); + + if (column.column.visible) { + _this48.mapElementStyles(column.column.getElement(), cellEl, ["width"]); + } else { + if (column.column.definition.width) { + cellEl.style.width = column.column.definition.width + "px"; + } + } + + if (column.column.parent) { + _this48.mapElementStyles(column.column.parent.groupElement, cellEl, ["border-top"]); + } + + rowEl.appendChild(cellEl); + }); + + headerEl.appendChild(rowEl); + }); + + return headerEl; + }; + + Export.prototype.generateBodyElements = function (rows) {}; + + Export.prototype.generateBodyElements = function (rows) { + var _this49 = this; + + var oddRow, evenRow, calcRow, firstRow, firstCell, firstGroup, lastCell, styleCells, styleRow, treeElementField, rowFormatter; + + //assign row formatter + rowFormatter = this.table.options["rowFormatter" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))]; + rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter; + + //lookup row styles + if (this.cloneTableStyle && window.getComputedStyle) { + oddRow = this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"); + evenRow = this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"); + calcRow = this.table.element.querySelector(".tabulator-row.tabulator-calcs"); + firstRow = this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"); + firstGroup = this.table.element.getElementsByClassName("tabulator-group")[0]; + + if (firstRow) { + styleCells = firstRow.getElementsByClassName("tabulator-cell"); + firstCell = styleCells[0]; + lastCell = styleCells[styleCells.length - 1]; + } + } + + var bodyEl = document.createElement("tbody"); + + var columns = []; + + 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); + } + } + + this.table.columnManager.columnsByIndex.forEach(function (column) { + if (_this49.columnVisCheck(column)) { + columns.push(column); + } + }); + + if (this.table.options.dataTree && this.config.dataTree !== false && this.table.modExists("columnCalcs")) { + treeElementField = this.table.modules.dataTree.elementField; + } + + rows = rows.filter(function (row) { + switch (row.type) { + case "group": + return _this49.config.rowGroups !== false; + break; + + case "calc": + return _this49.config.columnCalcs !== false; + break; + } + + return true; + }); + + if (rows.length > 1000) { + console.warn("It may take a long time to render an HTML table with more than 1000 rows"); + } + + rows.forEach(function (row, i) { + var rowData = row.getData(_this49.colVisProp); + + var rowEl = document.createElement("tr"); + rowEl.classList.add("tabulator-print-table-row"); + + switch (row.type) { + case "group": + var cellEl = document.createElement("td"); + cellEl.colSpan = columns.length; + cellEl.innerHTML = row.key; + + rowEl.classList.add("tabulator-print-table-group"); + + _this49.mapElementStyles(firstGroup, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]); + _this49.mapElementStyles(firstGroup, cellEl, ["padding-top", "padding-left", "padding-right", "padding-bottom"]); + rowEl.appendChild(cellEl); + break; + + case "calc": + rowEl.classList.add("tabulator-print-table-calcs"); + + case "row": + + if (_this49.table.options.dataTree && _this49.config.dataTree === false && row.modules.dataTree.parent) { + return; + } + + columns.forEach(function (column, i) { + var cellEl = document.createElement("td"); + + var value = column.getFieldValue(rowData); + + 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 (_this49.table.modExists("format") && _this49.config.formatCells !== false) { + value = _this49.table.modules.format.formatExportValue(cellWrapper, _this49.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 (firstCell) { + _this49.mapElementStyles(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 (_this49.table.options.dataTree && _this49.config.dataTree !== false) { + if (treeElementField && treeElementField == column.field || !treeElementField && i == 0) { + if (row.modules.dataTree.controlEl) { + cellEl.insertBefore(row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild); + } + if (row.modules.dataTree.branchEl) { + cellEl.insertBefore(row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild); + } + } + } + + rowEl.appendChild(cellEl); + + if (cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback) { + cellWrapper.modules.format.renderedCallback(); + } + }); + + styleRow = row.type == "calc" ? calcRow : i % 2 && evenRow ? evenRow : oddRow; + + _this49.mapElementStyles(styleRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]); + + if (rowFormatter && _this49.config.formatCells !== false) { + var rowComponent = row.getComponent(); + + rowComponent.getElement = function () { + return rowEl; + }; + + rowFormatter(rowComponent); + } + + break; + } + + bodyEl.appendChild(rowEl); + }); + + return bodyEl; + }; + + Export.prototype.columnVisCheck = function (column) { + return column.definition[this.colVisProp] !== false && (column.visible || !column.visible && column.definition[this.colVisProp]); + }; + + Export.prototype.getHtml = function (visible, style, config, colVisProp) { + var holder = document.createElement("div"); + + holder.appendChild(this.genereateTable(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || "htmlOutput")); + + return holder.innerHTML; + }; + + 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 }; + } 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 _this50 = 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 = _this50.table.columnManager.element.scrollLeft; + + if (left !== _this50.table.rowManager.element.scrollLeft) { + _this50.table.rowManager.scrollHorizontal(left); + _this50.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) { + var self = this; + + self.filterList = []; + + if (!Array.isArray(field)) { + field = [{ field: field, type: type, value: value }]; + } + + self.addFilter(field); + }; + + //add filter to array + Filter.prototype.addFilter = function (field, type, value) { + var self = this; + + if (!Array.isArray(field)) { + field = [{ field: field, type: type, value: value }]; + } + + 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)); + }; + } else { + filterFunc = function filterFunc(data) { + return self.filters[filter.type](filter.value, data[filter.field]); + }; + } + } 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 _this51 = this; + + var output = []; + + filterList.forEach(function (filter) { + var item; + + if (Array.isArray(filter)) { + output.push(_this51.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; + } + } + }, + + //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 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 _this52 = 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 (_this52.table.modules.selectRow.selectedRows.length) { + _this52.table.deselectRow(); + } else { + _this52.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 _this53 = this; + + var rows; + + if (this.active) { + clearTimeout(this.scrollEndTimer); + + //layout all rows after scroll is complete + this.scrollEndTimer = setTimeout(function () { + _this53.layout(); + }, 100); + + rows = this.table.rowManager.getVisibleRows(); + + this.calcMargins(); + + this.layoutColumnPosition(); + + this.layoutCalcRows(); + + rows.forEach(function (row) { + if (row.type === "row") { + _this53.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 _this54 = this; + + var leftParents = []; + + this.leftColumns.forEach(function (column, i) { + column.modules.frozen.margin = _this54._calcSpace(_this54.leftColumns, i) + _this54.table.columnManager.scrollLeft + "px"; + + if (i == _this54.leftColumns.length - 1) { + column.modules.frozen.edge = true; + } else { + column.modules.frozen.edge = false; + } + + if (column.parent.isGroup) { + var parentEl = _this54.getColGroupParentElement(column); + if (!leftParents.includes(parentEl)) { + _this54.layoutElement(parentEl, column); + leftParents.push(parentEl); + } + + if (column.modules.frozen.edge) { + parentEl.classList.add("tabulator-frozen-" + column.modules.frozen.position); + } + } else { + _this54.layoutElement(column.getElement(), column); + } + + if (allCells) { + column.cells.forEach(function (cell) { + _this54.layoutElement(cell.getElement(), column); + }); + } + }); + + this.rightColumns.forEach(function (column, i) { + column.modules.frozen.margin = _this54.rightPadding - _this54._calcSpace(_this54.rightColumns, i + 1) + "px"; + + if (i == _this54.rightColumns.length - 1) { + column.modules.frozen.edge = true; + } else { + column.modules.frozen.edge = false; + } + + if (column.parent.isGroup) { + _this54.layoutElement(_this54.getColGroupParentElement(column), column); + } else { + _this54.layoutElement(column.getElement(), column); + } + + if (allCells) { + column.cells.forEach(function (cell) { + _this54.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 _this55 = 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) { + _this55.layoutElement(cell.getElement(), column); + } + }); + + this.rightColumns.forEach(function (column) { + var cell = row.getCell(column); + + if (cell) { + _this55.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); + 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 () { + 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.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 _this56 = this; + + var level = this.level + 1; + if (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) { + this.groupManager.allowedValues[level].forEach(function (value) { + _this56._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.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 () { + return new GroupComponent(this); + }; + + ////////////////////////////////////////////////// + ////////////// 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 _this57 = this; + + var groupComponents = []; + + if (!group) { + group = this; + } + + group.groupList.forEach(function (child) { + if (child.groupList.length) { + groupComponents = groupComponents.concat(_this57.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 _this58 = this; + + var self = this; + + var _loop2 = function _loop2(key) { + + if (_this58.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(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); + }; + + Menu.prototype.initializeColumnHeader = function (column) { + var _this59 = 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(); + + _this59.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(); + + _this59.loadMenu(e, column, menu); + }); + + column.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild); + } + }; + + Menu.prototype.initializeCell = function (cell) { + var _this60 = 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.preventDefault(); + + _this60.loadMenu(e, cell, menu); + }); + }; + + Menu.prototype.initializeRow = function (row) { + var _this61 = this; + + row.getElement().addEventListener("contextmenu", function (e) { + var menu = typeof _this61.table.options.rowContextMenu == "function" ? _this61.table.options.rowContextMenu(row.getComponent()) : _this61.table.options.rowContextMenu; + + e.preventDefault(); + + _this61.loadMenu(e, row, menu); + }); + }; + + Menu.prototype.loadMenu = function (e, component, menu) { + var _this62 = this; + + var docHeight = Math.max(document.body.offsetHeight, window.innerHeight); + + //abort if no menu set + if (!menu || !menu.length) { + return; + } + + 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) { + _this62.hideMenu(); + item.action(e, component.getComponent()); + }); + } + } + + _this62.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", _this62.blurEvent); + }, 100); + + 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.hideMenu = function () { + if (this.menuEl.parentNode) { + this.menuEl.parentNode.removeChild(this.menuEl); + } + + 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.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.connection = this.table.options.movableRowsConnectedTables; + }; + + 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"; + }; + + //establish connection with other tables + MoveRows.prototype.connectToTables = function (row) { + var self = this, + connections = this.table.modules.comms.getConnections(this.connection); + + this.table.options.movableRowsSendingStart.call(this.table, connections); + + this.table.modules.comms.send(this.connection, "moveRow", "connect", { + row: row + }); + }; + + //disconnect from other tables + MoveRows.prototype.disconnectFromTables = function () { + var self = this, + connections = this.table.modules.comms.getConnections(this.connection); + + this.table.options.movableRowsSendingStop.call(this.table, connections); + + this.table.modules.comms.send(this.connection, "moveRow", "disconnect"); + }; + + //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; + + 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 _this63 = 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; + itemEl.innerHTML = item; + + _this63.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); + 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 = 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 _this64 = this; + + var self = this; + + return new Promise(function (resolve, reject) { + + page = parseInt(page); + + if (page > 0 && page <= _this64.max) { + _this64.page = page; + _this64.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 - " + _this64.max + ":", page); + reject(); + } + }); + }; + + Page.prototype.setPageToRow = function (row) { + var _this65 = this; + + return new Promise(function (resolve, reject) { + + var rows = _this65.table.rowManager.getDisplayRows(_this65.displayIndex - 1); + var index = rows.indexOf(row); + + if (index > -1) { + var page = Math.ceil((index + 1) / _this65.size); + + _this65.setPage(page).then(function () { + resolve(); + }).catch(function () { + reject(); + }); + } else { + console.warn("Pagination Error - Requested row is not visible"); + reject(); + } + }); + }; + + Page.prototype.setPageSize = function (size) { + 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"); + button.setAttribute("aria-label", "Show Page " + page); + button.setAttribute("title", "Show Page " + 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 _this66 = this; + + return new Promise(function (resolve, reject) { + if (_this66.page > 1) { + _this66.page--; + _this66.trigger().then(function () { + resolve(); + }).catch(function () { + reject(); + }); + + if (_this66.table.options.persistence && _this66.table.modExists("persistence", true) && _this66.table.modules.persistence.config.page) { + _this66.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 _this67 = this; + + return new Promise(function (resolve, reject) { + if (_this67.page < _this67.max) { + _this67.page++; + _this67.trigger().then(function () { + resolve(); + }).catch(function () { + reject(); + }); + + if (_this67.table.options.persistence && _this67.table.modExists("persistence", true) && _this67.table.modules.persistence.config.page) { + _this67.table.modules.persistence.save("page"); + } + } else { + if (!_this67.progressiveLoad) { + console.warn("Pagination Error - Next page would be greater than maximum page of " + _this67.max + ":", _this67.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 = []; + 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 _this68 = this; + + var left; + + return new Promise(function (resolve, reject) { + + switch (_this68.mode) { + case "local": + left = _this68.table.rowManager.scrollLeft; + + _this68.table.rowManager.refreshActiveData("page"); + _this68.table.rowManager.scrollHorizontal(left); + + _this68.table.options.pageLoaded.call(_this68.table, _this68.getPage()); + resolve(); + break; + + case "remote": + case "progressive_load": + case "progressive_scroll": + _this68.table.modules.ajax.blockActiveRequest(); + _this68._getRemotePage().then(function () { + resolve(); + }).catch(function () { + reject(); + }); + break; + + default: + console.warn("Pagination Error - no such pagination mode:", _this68.mode); + reject(); + } + }); + }; + + Page.prototype._getRemotePage = function () { + var _this69 = 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[_this69.dataSentNames.page] = self.page; + + //set page size if defined + if (_this69.size) { + pageParams[_this69.dataSentNames.size] = _this69.size; + } + + //set sort data if defined + if (_this69.table.options.ajaxSorting && _this69.table.modExists("sort")) { + var sorters = self.table.modules.sort.getSort(); + + sorters.forEach(function (item) { + delete item.column; + }); + + pageParams[_this69.dataSentNames.sorters] = sorters; + } + + //set filter data if defined + if (_this69.table.options.ajaxFiltering && _this69.table.modExists("filter")) { + var filters = self.table.modules.filter.getFilters(true, true); + pageParams[_this69.dataSentNames.filters] = filters; + } + + self.table.modules.ajax.setParams(pageParams); + + self.table.modules.ajax.sendRequest(_this69.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 _this70 = 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 (_this70.tableHeight != nodeHeight || _this70.tableWidth != nodeWidth) { + _this70.tableHeight = nodeHeight; + _this70.tableWidth = nodeWidth; + + if (table.element.parentNode) { + _this70.containerHeight = table.element.parentNode.clientHeight; + _this70.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 (_this70.containerHeight != nodeHeight || _this70.containerWidth != nodeWidth) { + _this70.containerHeight = nodeHeight; + _this70.containerWidth = nodeWidth; + _this70.tableHeight = table.element.clientHeight; + _this70.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), _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); + + 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 _this71 = this; + + var rowMatch; + + switch (typeof rows === 'undefined' ? 'undefined' : _typeof(rows)) { + case "undefined": + this.table.rowManager.rows.forEach(function (row) { + _this71._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) { + _this71._selectRow(row, true, true); + }); + } + + this._rowSelectionChanged(); + break; + + default: + if (Array.isArray(rows)) { + rows.forEach(function (row) { + _this71._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 _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._selectRow(child, true); + } + } else { + for (var _iterator3 = children, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) { + var _ref3; + + if (_isArray3) { + if (_i3 >= _iterator3.length) break; + _ref3 = _iterator3[_i3++]; + } else { + _i3 = _iterator3.next(); + if (_i3.done) break; + _ref3 = _i3.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 = [], + 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) { + self.table.options.dataSorted.call(self.table, self.getSort(), self.table.rowManager.getComponents("active")); + } + }; + + //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 _this72 = 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 = _this72._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; + }; + + //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 = []; + + if (validators) { + validators.forEach(function (item) { + if (!item.func.call(self, cell, value, item.params)) { + valid.push({ + type: item.type, + parameters: item.params + }); + } + }); + } + + return valid.length ? valid : true; + }; + + 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; + }, + + //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/app/static/vendors/tabulator/js.old/tabulator.min.js b/app/static/vendors/tabulator/js.old/tabulator.min.js new file mode 100644 index 0000000..ea2c2b2 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/tabulator.min.js @@ -0,0 +1,12 @@ +/* Tabulator v4.6.3 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!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;no?(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 n=new i(e,this),s=n.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,n),l.parentNode.insertBefore(s,l)):(this.columns.splice(a+1,0,n),l.parentNode.insertBefore(s,l.nextSibling))}else t?(this.columns.unshift(n),this.headersElement.insertBefore(n.getElement(),this.headersElement.firstChild)):(this.columns.push(n),this.headersElement.appendChild(n.getElement())),n.columnRendered();return n},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 i)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&&(u.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 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 i&&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)};var i=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._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()};i.prototype.createElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.setAttribute("role","columnheader"),e.setAttribute("aria-sort","none"),e},i.prototype.createGroupElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-col-group-cols"),e},i.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)})},i.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},i.prototype.registerColumnPosition=function(e){this.parent.registerColumnPosition(e)},i.prototype.registerColumnField=function(e){this.parent.registerColumnField(e)},i.prototype.reRegisterPosition=function(){this.isGroup?this.columns.forEach(function(e){e.reRegisterPosition()}):this.registerColumnPosition(this)},i.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"))},i.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","")},i.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()})},i.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)},i.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},i.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},i.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},i.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},i.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.element.appendChild(this.groupElement)},i.prototype._getFlatData=function(e){return e[this.field]},i.prototype._getNestedData=function(e){for(var t,o=e,i=this.fieldStructure,n=i.length,s=0;s-1&&this._nextVisibleColumn(e+1)},i.prototype._nextVisibleColumn=function(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._nextVisibleColumn(e+1)},i.prototype.prevColumn=function(){var e=this.table.columnManager.findColumnIndex(this);return e>-1&&this._prevVisibleColumn(e-1)},i.prototype._prevVisibleColumn=function(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._prevVisibleColumn(e-1)},i.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()},i.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))},i.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)}))})},i.prototype.deleteCell=function(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)}, +i.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"],i.prototype.getComponent=function(){return new o(this)};var n=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};n.prototype.createHolderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-tableHolder"),e.setAttribute("tabindex",0),e},n.prototype.createTableElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-table"),e},n.prototype.getElement=function(){return this.element},n.prototype.getTableElement=function(){return this.tableElement},n.prototype.getRowPosition=function(e,t){return t?this.activeRows.indexOf(e):this.rows.indexOf(e)},n.prototype.setColumnManager=function(e){this.columnManager=e},n.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})},n.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 r)return e;if(e instanceof s)return e._getSelf()||!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement){return t.rows.find(function(t){return t.element===e})||!1}return!1},n.prototype.getRowFromDataObject=function(e){return this.rows.find(function(t){return t.data===e})||!1},n.prototype.getRowFromPosition=function(e,t){return t?this.activeRows[e]:this.rows[e]},n.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=u.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&&u.prototype.helpers.elVisible(r)&&(a=u.prototype.helpers.elOffset(r).top-u.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")},n.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},n.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)})},n.prototype.findAddRowPos=function(e){return void 0===e&&(e=this.table.options.addRowPos),"pos"===e&&(e=!0),"bottom"===e&&(e=!1),e},n.prototype.addRowActual=function(e,t,o,i){var n,s,a=e instanceof r?e:new r(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]!==a&&(o=u[0],this._moveRowInArray(a.getGroup().rows,a,o,!l)):u[u.length-1]!==a&&(o=u[u.length-1],this._moveRowInArray(a.getGroup().rows,a,o,!l)):this._moveRowInArray(a.getGroup().rows,a,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,a)}),n>-1&&this.activeRows.splice(l?n:n+1,0,a),this.rows.splice(l?c:c+1,0,a)):l?(this.displayRowIterator(function(e){e.unshift(a)}),this.activeRows.unshift(a),this.rows.unshift(a)):(this.displayRowIterator(function(e){e.push(a)}),this.activeRows.push(a),this.rows.push(a)),this.setActiveRows(this.activeRows),this.table.options.rowAdded.call(this.table,a.getComponent()),this.table.options.dataEdited.call(this.table,this.getData()),i||this.reRenderInPosition(),a},n.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())},n.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 T&&(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))}},n.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)}},n.prototype.clearData=function(){this.setData([])},n.prototype.getRowIndex=function(e){return this.findRowIndex(e,this.rows)},n.prototype.getDisplayRowIndex=function(e){var t=this.getDisplayRows().indexOf(e);return t>-1&&t},n.prototype.nextDisplayRow=function(e,t){var o=this.getDisplayRowIndex(e),i=!1;return!1!==o&&o-1)&&o},n.prototype.getData=function(e,t){var o=[];return this.getRows(e).forEach(function(e){"row"==e.type&&o.push(e.getData(t||"data"))}),o},n.prototype.getComponents=function(e){var t=[];return this.getRows(e).forEach(function(e){t.push(e.getComponent())}),t},n.prototype.getDataCount=function(e){return this.getRows(e).length},n.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){})},n.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)},n.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)},n.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)},n.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)},n.prototype.displayRowIterator=function(e){this.displayRows.forEach(e),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length},n.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},n.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&&(d=!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=d?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()},n.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))},n.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)}},n.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)}},n.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)}},n.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)}},n.prototype._quickNormalizeRowHeight=function(e){e.forEach(function(e){e.calcHeight()}),e.forEach(function(e){e.setCellHeight()}),e.length=0},n.prototype.normalizeHeight=function(){this.activeRows.forEach(function(e){e.normalizeHeight()})},n.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()}},n.prototype.reinitialize=function(){this.rows.forEach(function(e){e.reinitialize()})},n.prototype.blockRedraw=function(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1},n.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},n.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))},n.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 s=function(e){this._row=e};s.prototype.getData=function(e){return this._row.getData(e)},s.prototype.getElement=function(){return this._row.getElement()},s.prototype.getCells=function(){var e=[];return this._row.getCells().forEach(function(t){e.push(t.getComponent())}),e},s.prototype.getCell=function(e){var t=this._row.getCell(e);return!!t&&t.getComponent()},s.prototype.getIndex=function(){return this._row.getData("data")[this._row.table.options.index]},s.prototype.getPosition=function(e){return this._row.table.rowManager.getRowPosition(this._row,e)},s.prototype.delete=function(){return this._row.delete()},s.prototype.scrollTo=function(){return this._row.table.rowManager.scrollToRow(this._row)},s.prototype.pageTo=function(){if(this._row.table.modExists("page",!0))return this._row.table.modules.page.setPageToRow(this._row)},s.prototype.move=function(e,t){this._row.moveToRow(e,t)},s.prototype.update=function(e){return this._row.updateData(e)},s.prototype.normalizeHeight=function(){this._row.normalizeHeight(!0)},s.prototype.select=function(){this._row.table.modules.selectRow.selectRows(this._row)},s.prototype.deselect=function(){this._row.table.modules.selectRow.deselectRows(this._row)},s.prototype.toggleSelect=function(){this._row.table.modules.selectRow.toggleRow(this._row)},s.prototype.isSelected=function(){return this._row.table.modules.selectRow.isRowSelected(this._row)},s.prototype._getSelf=function(){return this._row},s.prototype.freeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.freezeRow(this._row)},s.prototype.unfreeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.unfreezeRow(this._row)},s.prototype.treeCollapse=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.collapseRow(this._row)},s.prototype.treeExpand=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.expandRow(this._row)},s.prototype.treeToggle=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.toggleRow(this._row)},s.prototype.getTreeParent=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeParent(this._row)},s.prototype.getTreeChildren=function(){ +return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeChildren(this._row)},s.prototype.reformat=function(){return this._row.reinitialize()},s.prototype.getGroup=function(){return this._row.getGroup().getComponent()},s.prototype.getTable=function(){return this._row.table},s.prototype.getNextRow=function(){var e=this._row.nextRow();return e?e.getComponent():e},s.prototype.getPrevRow=function(){var e=this._row.prevRow();return e?e.getComponent():e};var r=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.setData(e),this.generateElement()};r.prototype.createElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-row"),e.setAttribute("role","row"),e},r.prototype.getElement=function(){return this.element},r.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},r.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}))},r.prototype.generateCells=function(){this.cells=this.table.columnManager.generateCells(this)},r.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}},r.prototype.reinitializeHeight=function(){this.heightInitialized=!1,null!==this.element.offsetParent&&this.normalizeHeight(!0)},r.prototype.reinitialize=function(){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),null!==this.element.offsetParent&&this.initialize(!0)},r.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},r.prototype.setCellHeight=function(){this.cells.forEach(function(e){e.setHeight()}),this.heightInitialized=!0},r.prototype.clearCellHeight=function(){this.cells.forEach(function(e){e.clearHeight()})},r.prototype.normalizeHeight=function(e){e&&this.clearCellHeight(),this.calcHeight(e),this.setCellHeight()},r.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)},r.prototype.getHeight=function(){return this.outerHeight},r.prototype.getWidth=function(){return this.element.offsetWidth},r.prototype.deleteCell=function(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)},r.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)},r.prototype.updateData=function(e){var t,o=this,i=u.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()})},r.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},r.prototype.getCell=function(e){return e=this.table.columnManager.findColumn(e),this.cells.find(function(t){return t.column===e})},r.prototype.getCellIndex=function(e){return this.cells.findIndex(function(t){return t===e})},r.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&&u.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},r.prototype.getCells=function(){return this.cells},r.prototype.nextRow=function(){return this.table.rowManager.nextDisplayRow(this,!0)||!1},r.prototype.prevRow=function(){return this.table.rowManager.prevDisplayRow(this,!0)||!1},r.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)},r.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()})},r.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.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))},r.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))},u.prototype.blockRedraw=function(){return this.rowManager.blockRedraw()},u.prototype.restoreRedraw=function(){return this.rowManager.restoreRedraw()},u.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()})},u.prototype.setData=function(e,t,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(e,t,o,!1,!0)},u.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},u.prototype.clearData=function(){this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this.rowManager.clearData()},u.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)},u.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)},u.prototype.searchRows=function(e,t,o){if(this.modExists("filter",!0))return this.modules.filter.search("rows",e,t,o)},u.prototype.searchData=function(e,t,o){if(this.modExists("filter",!0))return this.modules.filter.search("data",e,t,o)},u.prototype.getHtml=function(e,t,o){if(this.modExists("export",!0))return this.modules.export.getHtml(e,t,o)},u.prototype.print=function(e,t,o){if(this.modExists("print",!0))return this.modules.print.printFullscreen(e,t,o)},u.prototype.getAjaxUrl=function(){if(this.modExists("ajax",!0))return this.modules.ajax.getUrl()},u.prototype.replaceData=function(e,t,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(e,t,o,!0)},u.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"))})},u.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"))})},u.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"))})},u.prototype.getRow=function(e){var t=this.rowManager.findRow(e);return t?t.getComponent():(console.warn("Find Error - No matching row found:",e),!1)},u.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)},u.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)})})})},u.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())})})},u.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)})})},u.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"))})},u.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"))})},u.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)},u.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)},u.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)},u.prototype.copyToClipboard=function(e){this.modExists("clipboard",!0)&&this.modules.clipboard.copy(e)},u.prototype.setColumns=function(e){this.columnManager.setColumns(e)},u.prototype.getColumns=function(e){return this.columnManager.getComponents(e)},u.prototype.getColumn=function(e){var t=this.columnManager.findColumn(e);return t?t.getComponent():(console.warn("Find Error - No matching column found:",e),!1)},u.prototype.getColumnDefinitions=function(){return this.columnManager.getDefinitionTree()},u.prototype.getColumnLayout=function(){if(this.modExists("persistence",!0))return this.modules.persistence.parseColumns(this.columnManager.getColumns())},u.prototype.setColumnLayout=function(e){return!!this.modExists("persistence",!0)&&(this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns,e)),!0)},u.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()},u.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()},u.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()},u.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)})})},u.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())})},u.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())})},u.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)},u.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"))})},u.prototype.setLocale=function(e){this.modules.localize.setLocale(e)},u.prototype.getLocale=function(){return this.modules.localize.getLocale()},u.prototype.getLang=function(e){return this.modules.localize.getLang(e)},u.prototype.redraw=function(e){this.columnManager.redraw(e),this.rowManager.redraw(e)},u.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")},u.prototype.setSort=function(e,t){this.modExists("sort",!0)&&(this.modules.sort.setSort(e,t),this.rowManager.sorterRefresh())},u.prototype.getSorters=function(){if(this.modExists("sort",!0))return this.modules.sort.getSort()},u.prototype.clearSort=function(){this.modExists("sort",!0)&&(this.modules.sort.clear(),this.rowManager.sorterRefresh())},u.prototype.setFilter=function(e,t,o){this.modExists("filter",!0)&&(this.modules.filter.setFilter(e,t,o),this.rowManager.filterRefresh())},u.prototype.addFilter=function(e,t,o){this.modExists("filter",!0)&&(this.modules.filter.addFilter(e,t,o),this.rowManager.filterRefresh())},u.prototype.getFilters=function(e){if(this.modExists("filter",!0))return this.modules.filter.getFilters(e)},u.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)}},u.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)}},u.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)}},u.prototype.getHeaderFilters=function(){if(this.modExists("filter",!0))return this.modules.filter.getHeaderFilters()},u.prototype.removeFilter=function(e,t,o){this.modExists("filter",!0)&&(this.modules.filter.removeFilter(e,t,o),this.rowManager.filterRefresh())},u.prototype.clearFilter=function(e){this.modExists("filter",!0)&&(this.modules.filter.clearFilter(e),this.rowManager.filterRefresh())},u.prototype.clearHeaderFilter=function(){this.modExists("filter",!0)&&(this.modules.filter.clearHeaderFilter(),this.rowManager.filterRefresh())},u.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))},u.prototype.deselectRow=function(e){this.modExists("selectRow",!0)&&this.modules.selectRow.deselectRows(e)},u.prototype.toggleSelectRow=function(e){this.modExists("selectRow",!0)&&this.modules.selectRow.toggleRow(e)},u.prototype.getSelectedRows=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedRows()},u.prototype.getSelectedData=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedData()},u.prototype.setMaxPage=function(e){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setMaxPage(e)},u.prototype.setPage=function(e){return this.options.pagination&&this.modExists("page")?this.modules.page.setPage(e):new Promise(function(e,t){t()})},u.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()})},u.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(){})},u.prototype.getPageSize=function(){if(this.options.pagination&&this.modExists("page",!0))return this.modules.page.getPageSize()},u.prototype.previousPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.previousPage()},u.prototype.nextPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.nextPage()},u.prototype.getPage=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPage()},u.prototype.getPageMax=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPageMax()},u.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")},u.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")},u.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")},u.prototype.getGroups=function(e){return!!this.modExists("groupRows",!0)&&this.modules.groupRows.getGroups(!0)},u.prototype.getGroupedData=function(){if(this.modExists("groupRows",!0))return this.options.groupBy?this.modules.groupRows.getGroupedData():this.getData()},u.prototype.getCalcResults=function(){return!!this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.getResults()},u.prototype.recalc=function(){this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.recalcAll(this.rowManager.activeRows)},u.prototype.navigatePrev=function(){var e=!1;return!(!this.modExists("edit",!0)||!(e=this.modules.edit.currentCell))&&e.nav().prev()},u.prototype.navigateNext=function(){var e=!1;return!(!this.modExists("edit",!0)||!(e=this.modules.edit.currentCell))&&e.nav().next()},u.prototype.navigateLeft=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().left())},u.prototype.navigateRight=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().right())},u.prototype.navigateUp=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().up())},u.prototype.navigateDown=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().down())},u.prototype.undo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.undo()},u.prototype.redo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.redo()},u.prototype.getHistoryUndoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryUndoSize()},u.prototype.getHistoryRedoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryRedoSize()},u.prototype.download=function(e,t,o,i){this.modExists("download",!0)&&this.modules.download.download(e,t,o,i)},u.prototype.downloadToTab=function(e,t,o,i){this.modExists("download",!0)&&this.modules.download.download(e,t,o,i,!0)},u.prototype.tableComms=function(e,t,o,i){this.modules.comms.receive(e,t,o,i)},u.prototype.moduleBindings={},u.prototype.extendModule=function(e,t,o){if(u.prototype.moduleBindings[e]){var i=u.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)},u.prototype.registerModule=function(e,t){u.prototype.moduleBindings[e]=t},u.prototype.bindModules=function(){this.modules={};for(var e in u.prototype.moduleBindings)this.modules[e]=new u.prototype.moduleBindings[e](this)},u.prototype.modExists=function(e,t){return!!this.modules[e]||(t&&console.error("Tabulator Module Not Installed: "+e),!1)},u.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}},u.prototype.comms={tables:[],register:function(e){u.prototype.comms.tables.push(e)},deregister:function(e){var t=u.prototype.comms.tables.indexOf(e);t>-1&&u.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)})}},u.prototype.registerModule("layout",d);var h=function(e){this.table=e,this.locale="default",this.lang=!1,this.bindings={}};h.prototype.setHeaderFilterPlaceholder=function(e){this.langs.default.headerFilters.default=e},h.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)},h.prototype.installLang=function(e,t){this.langs[e]?this._setLangProp(this.langs[e],t):this.langs[e]=t},h.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]},h.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=u.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()},h.prototype.getLocale=function(e){return self.locale},h.prototype.getLang=function(e){return e?this.langs[e]:this.lang},h.prototype.getText=function(e,t){var e=t?e+"|"+t:e,o=e.split("|");return this._getLangElement(o,this.locale)||""},h.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},h.prototype.bind=function(e,t){ +this.bindings[e]||(this.bindings[e]=[]),this.bindings[e].push(t),t(this.getText(e),this.lang)},h.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)},h.prototype.langs={default:{groups:{item:"item",items:"items"},columns:{},ajax:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page"},headerFilters:{default:"filter column...",columns:{}}}},u.prototype.registerModule("localize",h);var p=function(e){this.table=e};p.prototype.getConnections=function(e){var t,o=this,i=[];return t=u.prototype.comms.lookupTable(e),t.forEach(function(e){o.table!==e&&i.push(e)}),i},p.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)},p.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)},u.prototype.registerModule("comms",p);var m=function(e){this.table=e,this.allowedTypes=["","data","download","clipboard","print","htmlOutput"]};m.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)},m.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},m.prototype.transformRow=function(e,t){var o=this,i="accessor"+(t.charAt(0).toUpperCase()+t.slice(1)),n=u.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},m.prototype.accessors={},u.prototype.registerModule("accessor",m);var f=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};f.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"))},f.prototype.createLoaderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-loader"),e},f.prototype.createMsgElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-loader-msg"),e.setAttribute("role","alert"),e},f.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},f.prototype.getParams=function(){return this.params||{}},f.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]},f.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]}},f.prototype.setUrl=function(e){this.url=e},f.prototype.getUrl=function(){return this.url},f.prototype.loadData=function(e,t){return this.progressiveLoad?this._loadDataProgressive():this._loadDataStandard(e,t)},f.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]}}},v.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}},v.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")},v.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))},v.prototype.setDisplayIndex=function(e){this.displayIndex=e},v.prototype.getDisplayIndex=function(){return this.displayIndex},v.prototype.getRows=function(e){var t=this,o=[];return e.forEach(function(e,i){var n,s;o.push(e),e instanceof r&&(n=e.modules.dataTree.children,n.index||!1===n.children||(s=t.getChildren(e),s.forEach(function(e){o.push(e)})))}),o},v.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},v.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 r(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},v.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))},v.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))},v.prototype.toggleRow=function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open?this.collapseRow(e):this.expandRow(e))},v.prototype.getTreeParent=function(e){return!!e.modules.dataTree.parent&&e.modules.dataTree.parent.getComponent()},v.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 r&&i.push(e)})),i},v.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 r&&o.push(e.getComponent())})),o},v.prototype.checkForRestyle=function(e){e.row.cells.indexOf(e)||e.row.reinitialize()},v.prototype.getChildField=function(){return this.field},v.prototype.redrawNeeded=function(e){return!!this.field&&void 0!==e[this.field]||!!this.elementField&&void 0!==e[this.elementField]},u.prototype.registerModule("dataTree",v);var y=function(e){this.table=e,this.fields={},this.columnsByIndex=[],this.columnsByField={},this.config={},this.active=!1};y.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;this.processConfig(),this.active=i,"function"==typeof e?a=e:r.downloaders[e]?a=r.downloaders[e]:console.warn("Download Error - No such download type found: ",e),this.processColumns(),a&&a.call(this,r.processDefinitions(),r.processData(i||"active"),o||{},s,this.config)},y.prototype.processConfig=function(){var e={columnGroups:!0,rowGroups:!0,columnCalcs:!0,dataTree:!0};if(this.table.options.downloadConfig)for(var t in this.table.options.downloadConfig)e[t]=this.table.options.downloadConfig[t];this.config.rowGroups=e.rowGroups&&this.table.options.groupBy&&this.table.modExists("groupRows"),e.columnGroups&&this.table.columnManager.columns.length!=this.table.columnManager.columnsByIndex.length&&(this.config.columnGroups=!0),e.columnCalcs&&this.table.modExists("columnCalcs")&&(this.config.columnCalcs=!0),e.dataTree&&this.table.options.dataTree&&this.table.modExists("dataTree")&&(this.config.dataTree=!0)},y.prototype.processColumns=function(){var e=this;e.columnsByIndex=[],e.columnsByField={},e.table.columnManager.columnsByIndex.forEach(function(t){t.field&&!1!==t.definition.download&&(t.visible||!t.visible&&t.definition.download)&&(e.columnsByIndex.push(t),e.columnsByField[t.field]=t)})},y.prototype.processDefinitions=function(){var e=this,t=[];return this.config.columnGroups?e.table.columnManager.columns.forEach(function(o){var i=e.processColumnGroup(o);i&&t.push(i)}):e.columnsByIndex.forEach(function(o){!1!==o.download&&t.push(e.processDefinition(o))}),t},y.prototype.processColumnGroup=function(e){var t=this,o=e.columns,i=0,n=this.processDefinition(e),s={type:"group",title:n.title,depth:1};if(o.length){if(s.subGroups=[],s.width=0,o.forEach(function(e){var o=t.processColumnGroup(e);o.depth>i&&(i=o.depth),o&&(s.width+=o.width,s.subGroups.push(o))}),s.depth+=i,!s.width)return!1}else{if(!e.field||!1===e.definition.download||!(e.visible||!e.visible&&e.definition.download))return!1;s.width=1,s.definition=n}return s},y.prototype.processDefinition=function(e){var t={};for(var o in e.definition)t[o]=e.definition[o];return void 0!==e.definition.downloadTitle&&(t.title=e.definition.downloadTitle),t},y.prototype.processData=function(e){var t=this,o=this,i=[],n=[],s=!1,r={};return this.config.rowGroups?("visible"==e?(s=o.table.rowManager.getRows(e),s.forEach(function(e){ +if("row"==e.type){var t=e.getGroup();-1===n.indexOf(t)&&n.push(t)}})):n=this.table.modules.groupRows.getGroups(),n.forEach(function(e){i.push(t.processGroupData(e,s))})):(this.config.dataTree&&(e=e="display"),i=o.table.rowManager.getData(e,"download")),this.config.columnCalcs&&(r=this.table.getCalcResults(),i={calcs:r,data:i}),"function"==typeof o.table.options.downloadDataFormatter&&(i=o.table.options.downloadDataFormatter(i)),i},y.prototype.processGroupData=function(e,t){var o=this,i=e.getSubGroups(),n={type:"group",key:e.key};return i.length?(n.subGroups=[],i.forEach(function(e){n.subGroups.push(o.processGroupData(e,t))})):t?(n.rows=[],e.rows.forEach(function(e){t.indexOf(e)>-1&&n.rows.push(e.getData("download"))})):n.rows=e.getData(!0,"download"),n},y.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())},y.prototype.getFieldValue=function(e,t){var o=this.columnsByField[e];return!!o&&o.getFieldValue(t)},y.prototype.commsReceived=function(e,t,o){switch(t){case"intercept":this.download(o.type,"",o.options,o.active,o.intercept)}},y.prototype.downloaders={csv:function(e,t,o,i,n){function s(e,t){e.subGroups?e.subGroups.forEach(function(e){s(e,t+1)}):(d.push('"'+String(e.title).split('"').join('""')+'"'),h.push(e.definition.field))}function r(e){e.forEach(function(e){var t=[];h.forEach(function(o){var i=u.getFieldValue(o,e);switch(void 0===i?"undefined":_typeof(i)){case"object":i=JSON.stringify(i);break;case"undefined":case"null":i="";break;default:i=i}t.push('"'+String(i).split('"').join('""')+'"')}),l.push(t.join(p))})}function a(e){e.subGroups?e.subGroups.forEach(function(e){a(e)}):r(e.rows)}var l,c,u=this,d=[],h=[],p=o&&o.delimiter?o.delimiter:",";n.columnGroups?(console.warn("Download Warning - CSV downloader cannot process column groups"),e.forEach(function(e){s(e,0)})):function(){e.forEach(function(e){d.push('"'+String(e.title).split('"').join('""')+'"'),h.push(e.field)})}(),l=[d.join(p)],n.columnCalcs&&(console.warn("Download Warning - CSV downloader cannot process column calculations"),t=t.data),n.rowGroups?(console.warn("Download Warning - CSV downloader cannot process row groups"),t.forEach(function(e){a(e)})):r(t),c=l.join("\n"),o.bom&&(c="\ufeff"+c),i(c,"text/csv")},json:function(e,t,o,i,n){var s;n.columnCalcs&&(console.warn("Download Warning - CSV downloader cannot process column calculations"),t=t.data),s=JSON.stringify(t,null,"\t"),i(s,"application/json")},pdf:function(e,t,o,i,n){function s(e,t){var o=e.width,i=1,n={content:e.title||""};if(e.subGroups?(e.subGroups.forEach(function(e){s(e,t+1)}),i=1):(h.push(e.definition.field),i=g-t),n.rowSpan=i,p[t].push(n),o--,i>1)for(var r=t+1;rg&&(g=e.depth)});for(var C=0;C1&&h[t].push({type:"hoz",start:f[t].length,end:f[t].length+e.width-1}),f[t].push(e.title),e.subGroups?e.subGroups.forEach(function(e){o(e,t+1)}):(g.push(e.definition.field),i(g.length),h[t].push({type:"vert",start:g.length-1}))}function i(){var e=0;f.forEach(function(t){var o=t.length;o>e&&(e=o)}),f.forEach(function(t){var o=t.length;if(oo&&(this.table.rowManager.element.scrollTop+=i.offsetTop+i.offsetHeight-o)}},w.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")&&(o=c.table.modules.validate.validate(e.column.modules.validate,e.getComponent(),t)),!0===o?(c.clearEditor(),e.setValue(t,!0),c.table.options.dataTree&&c.table.modExists("dataTree")&&c.table.modules.dataTree.checkForRestyle(e),!0):(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)},w.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:case 9:s();break;case 27:i()}}),a},select:function(e,t,o,i,n){function s(t){var o,i={},s=f.table.getData();return o=t?f.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:n.listItemFormatter?n.listItemFormatter(e.value,e.label):e.label,value:e.value,element:!1};return e.value!==o&&(isNaN(parseFloat(e.value))||isNaN(parseFloat(e.value))||parseFloat(e.value)!==parseFloat(o))||l(e),s.push(e),r.push(e),e}var s=[],r=[];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,element:!1},r.push(t),e.options.forEach(function(e){i(e)})):i(e):(t={label:n.listItemFormatter?n.listItemFormatter(e,e):e,value:e,element:!1},t.value!==o&&(isNaN(parseFloat(t.value))||isNaN(parseFloat(t.value))||parseFloat(t.value)!==parseFloat(o))||l(t),s.push(t),r.push(t))});else for(var c in t){var u={label:n.listItemFormatter?n.listItemFormatter(c,t[c]):t[c],value:c,element:!1};u.value!==o&&(isNaN(parseFloat(u.value))||isNaN(parseFloat(u.value))||parseFloat(u.value)!==parseFloat(o))||l(u),s.push(u),r.push(u)}C=s,x=r,a()}function a(){for(;E.firstChild;)E.removeChild(E.firstChild);x.forEach(function(e){var t=e.element;t||(e.group?(t=document.createElement("div"),t.classList.add("tabulator-edit-select-list-group"),t.tabIndex=0,t.innerHTML=""===e.label?" ":e.label):(t=document.createElement("div"),t.classList.add("tabulator-edit-select-list-item"),t.tabIndex=0,t.innerHTML=""===e.label?" ":e.label,t.addEventListener("click",function(){l(e),c()}),e===R&&t.classList.add("active")),t.addEventListener("mousedown",function(){M=!1,setTimeout(function(){M=!0},10)}),e.element=t),E.appendChild(t)})}function l(e){R&&R.element&&R.element.classList.remove("active"),R=e,w.value=" "===e.label?"":e.label,e.element&&e.element.classList.add("active")}function c(){p(),b!==R.value?(b=R.value,o(R.value)):i()}function d(){p(),i()}function h(){if(!E.parentNode){!0===n.values?r(s(),y):"string"==typeof n.values?r(s(n.values),y):r(n.values||[],y);var e=u.prototype.helpers.elOffset(g);E.style.minWidth=g.offsetWidth+"px",E.style.top=e.top+g.offsetHeight+"px",E.style.left=e.left+"px",E.addEventListener("mousedown",function(e){M=!1,setTimeout(function(){M=!0},10)}),document.body.appendChild(E)}}function p(){E.parentNode&&E.parentNode.removeChild(E),m()}function m(){f.table.rowManager.element.removeEventListener("scroll",d)}var f=this,g=e.getElement(),b=e.getValue(),v=n.verticalNavigation||"editor",y=void 0!==b||null===b?b:void 0!==n.defaultValue?n.defaultValue:"",w=document.createElement("input"),E=document.createElement("div"),C=[],x=[],R={},M=!0;if(this.table.rowManager.element.addEventListener("scroll",d),(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}),w.setAttribute("type","text"),w.style.padding="4px",w.style.width="100%",w.style.boxSizing="border-box",w.style.cursor="default",w.readOnly=0!=this.currentCell,n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var L in n.elementAttributes)"+"==L.charAt(0)?(L=L.slice(1),w.setAttribute(L,w.getAttribute(L)+n.elementAttributes["+"+L])):w.setAttribute(L,n.elementAttributes[L]);return w.value=void 0!==b||null===b?b:"",w.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=C.indexOf(R),("editor"==v||"hybrid"==v&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t>0&&l(C[t-1]));break;case 40:t=C.indexOf(R),("editor"==v||"hybrid"==v&&t-1||String(t.title).toLowerCase().indexOf(String(e).toLowerCase())>-1)&&r.push(t)}),d(r,t))}function a(e){var t=document.createElement("div");c(),!1!==e&&(t.classList.add("tabulator-edit-select-list-notice"),t.tabIndex=0,e instanceof Node?t.appendChild(e):t.innerHTML=e,M.appendChild(t))}function l(e){var t=[];if(Array.isArray(e))e.forEach(function(e){var o={title:n.listItemFormatter?n.listItemFormatter(e,e):e,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 c(){for(;M.firstChild;)M.removeChild(M.firstChild)}function d(e,t){e.length?h(e,t):n.emptyPlaceholder&&a(n.emptyPlaceholder)}function h(e,t){var o=!1;c(),L=e,L.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){f(e),p()}),i.addEventListener("mousedown",function(e){D=!1,setTimeout(function(){D=!0},10)}),e.element=i,t&&e.value==E&&(R.value=e.title,e.element.classList.add("active"),o=!0),e===T&&(e.element.classList.add("active"),o=!0)),M.appendChild(i)}),o||f(!1)}function p(){g(),T?E!==T.value?(E=T.value,R.value=T.title,o(T.value)):i():n.freetext?(E=R.value,o(R.value)):n.allowEmpty&&""===R.value?(E=R.value,o(R.value)):i()}function m(){if(!M.parentNode){for(;M.firstChild;)M.removeChild(M.firstChild);var e=u.prototype.helpers.elOffset(w);M.style.minWidth=w.offsetWidth+"px",M.style.top=e.top+w.offsetHeight+"px",M.style.left=e.left+"px",document.body.appendChild(M)}}function f(e,t){T&&T.element&&T.element.classList.remove("active"),T=e,e&&e.element&&e.element.classList.add("active")}function g(){M.parentNode&&M.parentNode.removeChild(M),v()}function b(){g(),i()}function v(){y.table.rowManager.element.removeEventListener("scroll",b)}var y=this,w=e.getElement(),E=e.getValue(),C=n.verticalNavigation||"editor",x=void 0!==E||null===E?E:void 0!==n.defaultValue?n.defaultValue:"",R=document.createElement("input"),M=document.createElement("div"),L=[],T=!1,D=!0;if(this.table.rowManager.element.addEventListener("scroll",b),R.setAttribute("type","search"),R.style.padding="4px",R.style.width="100%",R.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var k in n.elementAttributes)"+"==k.charAt(0)?(k=k.slice(1),R.setAttribute(k,R.getAttribute(k)+n.elementAttributes["+"+k])):R.setAttribute(k,n.elementAttributes[k]);return M.classList.add("tabulator-edit-select-list"),M.addEventListener("mousedown",function(e){D=!1,setTimeout(function(){D=!0},10)}),R.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=L.indexOf(T),("editor"==C||"hybrid"==C&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),f(t>0?L[t-1]:!1));break;case 40:t=L.indexOf(T),("editor"==C||"hybrid"==C&&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)}),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}},u.prototype.registerModule("edit",w);var E=function(e){this.table=e,this.config={},this.cloneTableStyle=!0,this.colVisProp=""};E.prototype.genereateTable=function(e,t,o,i){this.cloneTableStyle=t,this.config=e||{},this.colVisProp=i;var n=document.createElement("table");return n.classList.add("tabulator-print-table"),!1!==this.config.columnHeaders&&n.appendChild(this.generateHeaderElements()),n.appendChild(this.generateBodyElements(this.rowLookup(o))),this.mapElementStyles(this.table.element,n,["border-top","border-left","border-right","border-bottom"]),n},E.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)},E.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},E.prototype.processColumnGroup=function(e){var t=this,o=e.columns,i=0,n={title:e.definition.title,column:e,depth:1};if(o.length){if(n.subGroups=[],n.width=0,o.forEach(function(e){var o=t.processColumnGroup(e);o&&(n.width+=o.width,n.subGroups.push(o),o.depth>i&&(i=o.depth))}),n.depth+=i,!n.width)return!1}else{if(!this.columnVisCheck(e))return!1;n.width=1}return n},E.prototype.groupHeadersToRows=function(e){function t(e,n){var s=i-n;void 0===o[n]&&(o[n]=[]),e.height=e.subGroups?1:s-e.depth+1,o[n].push(e),e.subGroups&&e.subGroups.forEach(function(e){t(e,n+1)})}var o=[],i=0;return e.forEach(function(e){e.depth>i&&(i=e.depth)}),e.forEach(function(e){t(e,0)}),o},E.prototype.generateHeaderElements=function(){var e=this,t=document.createElement("thead");return this.groupHeadersToRows(this.generateColumnGroupHeaders()).forEach(function(o){var i=document.createElement("tr");e.mapElementStyles(e.table.columnManager.getHeadersElement(),t,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),o.forEach(function(t){var o=document.createElement("th"),n=t.column.definition.cssClass?t.column.definition.cssClass.split(" "):[];o.colSpan=t.width,o.rowSpan=t.height,o.innerHTML=t.column.definition.title,e.cloneTableStyle&&(o.style.boxSizing="border-box"),n.forEach(function(e){o.classList.add(e)}),e.mapElementStyles(t.column.getElement(),o,["text-align","border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),e.mapElementStyles(t.column.contentElement,o,["padding-top","padding-left","padding-right","padding-bottom"]),t.column.visible?e.mapElementStyles(t.column.getElement(),o,["width"]):t.column.definition.width&&(o.style.width=t.column.definition.width+"px"),t.column.parent&&e.mapElementStyles(t.column.parent.groupElement,o,["border-top"]),i.appendChild(o)}),t.appendChild(i)}),t},E.prototype.generateBodyElements=function(e){},E.prototype.generateBodyElements=function(e){var t,o,i,n,s,r,a,l,c,u,d=this;u=this.table.options["rowFormatter"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],u=null!==u?u:this.table.options.rowFormatter,this.cloneTableStyle&&window.getComputedStyle&&(t=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),o=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),i=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),n=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),r=this.table.element.getElementsByClassName("tabulator-group")[0],n&&(a=n.getElementsByClassName("tabulator-cell"),s=a[0],a[a.length-1]));var h=document.createElement("tbody"),p=[];return!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)),this.table.columnManager.columnsByIndex.forEach(function(e){d.columnVisCheck(e)&&p.push(e)}),this.table.options.dataTree&&!1!==this.config.dataTree&&this.table.modExists("columnCalcs")&&(c=this.table.modules.dataTree.elementField),e=e.filter(function(e){switch(e.type){case"group":return!1!==d.config.rowGroups;case"calc":return!1!==d.config.columnCalcs}return!0}),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,n){var a=e.getData(d.colVisProp),m=document.createElement("tr");switch(m.classList.add("tabulator-print-table-row"),e.type){case"group":var f=document.createElement("td");f.colSpan=p.length,f.innerHTML=e.key,m.classList.add("tabulator-print-table-group"),d.mapElementStyles(r,m,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),d.mapElementStyles(r,f,["padding-top","padding-left","padding-right","padding-bottom"]),m.appendChild(f);break;case"calc":m.classList.add("tabulator-print-table-calcs");case"row":if(d.table.options.dataTree&&!1===d.config.dataTree&&e.modules.dataTree.parent)return;if(p.forEach(function(t,o){var i=document.createElement("td"),n=t.getFieldValue(a),r={modules:{},getValue:function(){return n},getField:function(){return t.definition.field},getElement:function(){return i},getColumn:function(){return t.getComponent()},getData:function(){return a},getRow:function(){return e.getComponent()},getComponent:function(){return r},column:t};if((t.definition.cssClass?t.definition.cssClass.split(" "):[]).forEach(function(e){i.classList.add(e)}),d.table.modExists("format")&&!1!==d.config.formatCells)n=d.table.modules.format.formatExportValue(r,d.colVisProp);else switch(void 0===n?"undefined":_typeof(n)){case"object":n=JSON.stringify(n);break;case"undefined":case"null":n="";break;default:n=n}n instanceof Node?i.appendChild(n):i.innerHTML=n,s&&(d.mapElementStyles(s,i,["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size"]),t.definition.align&&(i.style.textAlign=t.definition.align)),d.table.options.dataTree&&!1!==d.config.dataTree&&(c&&c==t.field||!c&&0==o)&&(e.modules.dataTree.controlEl&&i.insertBefore(e.modules.dataTree.controlEl.cloneNode(!0),i.firstChild),e.modules.dataTree.branchEl&&i.insertBefore(e.modules.dataTree.branchEl.cloneNode(!0),i.firstChild)),m.appendChild(i),r.modules.format&&r.modules.format.renderedCallback&&r.modules.format.renderedCallback()}),l="calc"==e.type?i:n%2&&o?o:t,d.mapElementStyles(l,m,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),u&&!1!==d.config.formatCells){var g=e.getComponent();g.getElement=function(){return m},u(g)}}h.appendChild(m)}),h},E.prototype.columnVisCheck=function(e){return!1!==e.definition[this.colVisProp]&&(e.visible||!e.visible&&e.definition[this.colVisProp])},E.prototype.getHtml=function(e,t,o,i){var n=document.createElement("div");return n.appendChild(this.genereateTable(o||this.table.options.htmlOutputConfig,t,e,i||"htmlOutput")),n.innerHTML},E.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)})}}},u.prototype.registerModule("export",E);var C=function(e){this.table=e,this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1};C.prototype.initializeColumn=function(e,t){function o(t){var o,s="input"==e.modules.filter.tagType&&"text"==e.modules.filter.attrType||"textarea"==e.modules.filter.tagType?"partial":"match",r="",a="";if(void 0===e.modules.filter.prevSuccess||e.modules.filter.prevSuccess!==t){if(e.modules.filter.prevSuccess=t,e.modules.filter.emptyFunc(t))delete i.headerFilters[n];else{switch(e.modules.filter.value=t,_typeof(e.definition.headerFilterFunc)){case"string":i.filters[e.definition.headerFilterFunc]?(r=e.definition.headerFilterFunc,o=function(o){var n=e.definition.headerFilterFuncParams||{},s=e.getFieldValue(o);return n="function"==typeof n?n(t,s,o):n,i.filters[e.definition.headerFilterFunc](t,s,o,n)}):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)},r=o}if(!o)switch(s){case"partial":o=function(o){var i=e.getFieldValue(o);return void 0!==i&&null!==i&&String(i).toLowerCase().indexOf(String(t).toLowerCase())>-1},r="like";break;default:o=function(o){return e.getFieldValue(o)==t},r="="}i.headerFilters[n]={value:t,func:o,type:r}}a=JSON.stringify(i.headerFilters),i.prevHeaderFilterChangeCheck!==a&&(i.prevHeaderFilterChangeCheck=a,i.changed=!0,i.table.rowManager.filterRefresh())}return!0}var i=this,n=e.getField();e.modules.filter={success:o,attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(e)},C.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)},C.prototype.hideHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="none")})},C.prototype.showHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="")})},C.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())},C.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())},C.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()))},C.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()))},C.prototype.hasChanged=function(){var e=this.changed;return this.changed=!1,e},C.prototype.setFilter=function(e,t,o){var i=this;i.filterList=[],Array.isArray(e)||(e=[{field:e,type:t,value:o}]),i.addFilter(e)},C.prototype.addFilter=function(e,t,o){var i=this;Array.isArray(e)||(e=[{field:e,type:t,value:o}]),e.forEach(function(e){(e=i.findFilter(e))&&(i.filterList.push(e),i.changed=!0)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},C.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))}:function(t){return o.filters[e.type](e.value,t[e.field])}):console.warn("Filter Error - No such filter type found, ignoring: ",e.type),e.func=i,!!e.func&&e},C.prototype.findSubFilters=function(e){var t=this,o=[];return e.forEach(function(e){(e=t.findFilter(e))&&o.push(e)}),!!o.length&&o},C.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))},C.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},C.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},C.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")},C.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")},C.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},C.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},C.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},C.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},C.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},C.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},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)}},u.prototype.registerModule("filter",C);var x=function(e){this.table=e};x.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"))},x.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},x.prototype.cellRendered=function(e){e.modules.format&&e.modules.format.renderedCallback&&e.modules.format.renderedCallback()},x.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)},x.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)},x.prototype.sanitizeHTML=function(e){if(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};return String(e).replace(/[&<>"'`=\/]/g,function(e){return t[e]})}return e},x.prototype.emptyToSpace=function(e){return null===e||void 0===e||""===e?" ":e},x.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},x.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()?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,l,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":l=t.legendColor;break;case"function":l=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),l=t.legendColor[f]}break;default:l="#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=l,b.innerHTML=r}return o(function(){if(!(e instanceof a)){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}},u.prototype.registerModule("format",x);var R=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};R.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},R.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")},R.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},R.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)},R.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},R.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))},R.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)})})},R.prototype.getColGroupParentElement=function(e){return e.parent.isGroup?this.getColGroupParentElement(e.parent):e.getElement()},R.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)},R.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)})},R.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))},R.prototype._calcSpace=function(e,t){for(var o=0,i=0;i-1&&t.splice(o,1)}),t},M.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())},M.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")},M.prototype.styleRows=function(e){var t=this;this.rows.forEach(function(e,o){t.table.rowManager.styleRow(e,o)})},u.prototype.registerModule("frozenRows",M);var L=function(e){this._group=e,this.type="GroupComponent"};L.prototype.getKey=function(){return this._group.key},L.prototype.getField=function(){return this._group.field},L.prototype.getElement=function(){return this._group.element},L.prototype.getRows=function(){return this._group.getRows(!0)},L.prototype.getSubGroups=function(){return this._group.getSubGroups(!0)},L.prototype.getParentGroup=function(){return!!this._group.parent&&this._group.parent.getComponent()},L.prototype.getVisibility=function(){return this._group.visible},L.prototype.show=function(){this._group.show()},L.prototype.hide=function(){this._group.hide()},L.prototype.toggle=function(){this._group.toggleVisibility()},L.prototype._getSelf=function(){return this._group},L.prototype.getTable=function(){return this._group.groupManager.table};var T=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)},T.prototype.scrollHeader=function(e){this.arrowElement.style.marginLeft=e,this.groupList.forEach(function(t){t.scrollHeader(e)})},T.prototype.getRowIndex=function(e){},T.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},T.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))},T.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)))},T.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},T.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},T.prototype.getRowCount=function(){var e=0;return this.groupList.length?this.groupList.forEach(function(t){e+=t.getRowCount()}):e=this.rows.length,e},T.prototype.toggleVisibility=function(){this.visible?this.hide():this.show()},T.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)},T.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)},T.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()))},T.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},T.prototype.getSubGroups=function(e){var t=[];return this.groupList.forEach(function(o){t.push(e?o.getComponent():o)}),t},T.prototype.getRows=function(e){var t=[];return this.rows.forEach(function(o){t.push(e?o.getComponent():o)}),t},T.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)},T.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},D.prototype.setDisplayIndex=function(e){this.displayIndex=e},D.prototype.getDisplayIndex=function(){return this.displayIndex},D.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)},D.prototype.getGroups=function(e){var t=[];return this.groupList.forEach(function(o){t.push(e?o.getComponent():o)}),t},D.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},D.prototype.wipe=function(){this.groupList.forEach(function(e){e.wipe()})},D.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},D.prototype.getGroupedData=function(){return this.pullGroupListData(this.groupList)},D.prototype.getRowGroup=function(e){var t=!1;return this.groupList.forEach(function(o){var i=o.getRowGroup(e);i&&(t=i)}),t},D.prototype.countGroups=function(){return this.groupList.length},D.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)})},D.prototype.createGroup=function(e,t,o){var i,n=t+"_"+e;o=o||[],i=new T(this,!1,t,e,this.groupIDLookups[0].field,this.headerGenerator[0],o[n]),this.groups[n]=i,this.groupList.push(i)},D.prototype.assignRowToExistingGroup=function(e,t){var o=this.groupIDLookups[0].func(e.getData()),i="0_"+o;this.groups[i]&&this.groups[i].addRow(e)},D.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},D.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},D.prototype.scrollHeaders=function(e){e+="px",this.groupList.forEach(function(t){t.scrollHeader(e)})},D.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))},u.prototype.registerModule("groupRows",D);var k=function(e){this.table=e,this.history=[],this.index=-1};k.prototype.clear=function(){this.history=[],this.index=-1},k.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++},k.prototype.getHistoryUndoSize=function(){return this.index+1},k.prototype.getHistoryRedoSize=function(){return this.history.length-(this.index+1)},k.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},k.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},k.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()}},k.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()}},k.prototype._rebindRow=function(e,t){this.history.forEach(function(o){if(o.component instanceof r)o.component===e&&(o.component=t);else if(o.component instanceof l&&o.component.row===e){var i=o.component.column.getField();i&&(o.component=t.getCell(i))}})},u.prototype.registerModule("history",k);var S=function(e){this.table=e,this.fieldIndex=[],this.hasIndex=!1};S.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)},z.prototype.clearBindings=function(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)},z.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)},z.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"},z.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(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)}},u.prototype.registerModule("keybindings",z);var H=function(e){this.table=e,this.menuEl=!1,this.blurEvent=this.hideMenu.bind(this)};H.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))},H.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.preventDefault(),t.loadMenu(o,e,i)})},H.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;o.preventDefault(),t.loadMenu(o,e,i)})},H.prototype.loadMenu=function(e,t,o){var i=this,n=Math.max(document.body.offsetHeight,window.innerHeight);o&&o.length&&(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.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"))},H.prototype.hideMenu=function(){this.menuEl.parentNode&&this.menuEl.parentNode.removeChild(this.menuEl),this.blurEvent&&(document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent))},H.prototype.menus={},u.prototype.registerModule("menu",H);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)-u.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)-u.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)-u.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},A.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-u.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},A.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())},A.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)})},A.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)})},A.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)})},A.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)},A.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},A.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()))},A.prototype.moveRow=function(e,t){this.toRow=e,this.toRowAfter=t},A.prototype.moveHover=function(e){this.connection?this.moveHoverConnections.call(this,e):this.moveHoverTable.call(this,e)},A.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"},A.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"},A.prototype.connectToTables=function(e){var t=this.table.modules.comms.getConnections(this.connection);this.table.options.movableRowsSendingStart.call(this.table,t),this.table.modules.comms.send(this.connection,"moveRow","connect",{row:e})},A.prototype.disconnectFromTables=function(){var e=this.table.modules.comms.getConnections(this.connection);this.table.options.movableRowsSendingStop.call(this.table,e),this.table.modules.comms.send(this.connection,"moveRow","disconnect")},A.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)},A.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")},A.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()},A.prototype.tableRowDrop=function(e,t){var o=!1,i=!1;switch(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})},A.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)}},A.prototype.senders={delete:function(e,t,o){e.delete()}},A.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)}},u.prototype.registerModule("moveRow",A);var P=function(e){this.table=e,this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0};P.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)},P.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},P.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},P.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},P.prototype.enable=function(){this.enabled=!0},P.prototype.disable=function(){this.enabled=!1},P.prototype.mutators={},u.prototype.registerModule("mutator",P);var _=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()};_.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"))},_.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,o.innerHTML=t,e.pageSizeSelect.appendChild(o)}),this.pageSizeSelect.value=this.size}},_.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(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()},_.prototype.initializeProgressive=function(e){this.initialize(!0),this.mode="progressive_"+e,this.progressiveLoad=!0},_.prototype.setDisplayIndex=function(e){this.displayIndex=e},_.prototype.getDisplayIndex=function(){return this.displayIndex},_.prototype.setMaxRows=function(e){this.max=e?Math.ceil(e/this.size):1,this.page>this.max&&(this.page=this.max)},_.prototype.reset=function(e,t){return("local"==this.mode||e)&&(this.page=1),t&&(this.initialLoad=!0),!0},_.prototype.setMaxPage=function(e){e=parseInt(e),this.max=e||1,this.page>this.max&&(this.page=this.max,this.trigger())},_.prototype.setPage=function(e){var t=this,o=this;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())})},_.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=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()})},_.prototype.setPageSize=function(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")},_.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()},_.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"),o.setAttribute("aria-label","Show Page "+e),o.setAttribute("title","Show Page "+e),o.setAttribute("data-page",e),o.textContent=e,o.addEventListener("click",function(o){t.setPage(e)}),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())})},_.prototype.nextPage=function(){var e=this;return new Promise(function(t,o){e.pagen?i.splice(n,0,e):i.push(e))}),i},N.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}})},N.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)},N.prototype.validateSorters=function(e){return e.forEach(function(e){e.column=e.field,delete e.field}),e},N.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},N.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},N.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},N.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)}},N.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()}},u.prototype.registerModule("persistence",N);var B=function(e){this.table=e,this.element=!1,this.manualBlock=!1};B.prototype.initialize=function(){window.addEventListener("beforeprint",this.replaceTable.bind(this)),window.addEventListener("afterprint",this.cleanup.bind(this))},B.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))},B.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="")},B.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},u.prototype.registerModule("print",B);var I=function(e){this.table=e,this.data=!1,this.blocked=!1,this.origFuncs={},this.currentVersion=0};I.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)}})},I.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})},I.prototype.watchRow=function(e){var t=e.getData();this.blocked=!0;for(var o in t)this.watchKey(e,t,o);this.blocked=!1},I.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}})},I.prototype.unwatchRow=function(e){var t=e.getData();for(var o in t)Object.defineProperty(t,o,{value:t[o]})},I.prototype.block=function(){this.blocked=!0},I.prototype.unblock=function(){this.blocked=!1},u.prototype.registerModule("reactiveData",I);var O=function(e){this.table=e,this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.handle=null,this.prevHandle=null};O.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)}},O.prototype._checkResizability=function(e){return void 0!==e.definition.resizable?e.definition.resizable:this.table.options.resizableColumns},O.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)},u.prototype.registerModule("resizeColumns",O);var j=function(e){this.table=e,this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null};j.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)},j.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)},u.prototype.registerModule("resizeRows",j);var V=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};V.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))},V.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)},u.prototype.registerModule("resizeTable",V);var G=function(e){this.table=e,this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0,this.collapseHandleColumn=!1};G.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())},G.prototype.initializeColumn=function(e){var t=e.getDefinition();e.modules.responsive={order:void 0===t.responsive?1:t.responsive,visible:!1!==t.visible}},G.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"))},G.prototype.layoutRow=function(e){var t=e.getElement();e.modules.responsiveLayout&&(t.appendChild(e.modules.responsiveLayout.element),this.generateCollapsedRowContent(e))},G.prototype.updateColumnVisibility=function(e,t){e.modules.responsive&&(e.modules.responsive.visible=t,this.initialize())},G.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())},G.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())},G.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()}},G.prototype.generateCollapsedContent=function(){var e=this;this.table.rowManager.getDisplayRows().forEach(function(t){e.generateCollapsedRowContent(t)})},G.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)}},G.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},G.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:""},u.prototype.registerModule("responsiveLayout",G);var W=function(e){this.table=e,this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],this.headerCheckboxElement=null};W.prototype.clearSelectionData=function(e){this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],e||this._rowSelectionChanged()},W.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"))},W.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))},W.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)}},W.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)},W.prototype.isRowSelected=function(e){return-1!==this.selectedRows.indexOf(e)},W.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)},W.prototype.getSelectedData=function(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getData())}),e},W.prototype.getSelectedRows=function(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getComponent())}),e},W.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())},W.prototype.registerRowSelectCheckbox=function(e,t){e._row.modules.select||(e._row.modules.select={}),e._row.modules.select.checkboxEl=t},W.prototype.registerHeaderSelectCheckbox=function(e){this.headerCheckboxElement=e},W.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)}},u.prototype.registerModule("selectRow",W);var U=function(e){this.table=e,this.sortList=[],this.changed=!1};U.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)}}))},U.prototype.hasChanged=function(){var e=this.changed;return this.changed=!1,e},U.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},U.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")},U.prototype.clear=function(){this.setSort([])},U.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]},U.prototype.sort=function(e){var t=this,o=this.table.options.sortOrderReverse?t.sortList.slice().reverse():t.sortList,i=[];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&&t.table.options.dataSorted.call(t.table,t.getSort(),t.table.rowManager.getComponents("active"))},U.prototype.clearColumnHeaders=function(){this.table.columnManager.getRealColumns().forEach(function(e){e.modules.sort&&(e.modules.sort.dir="none",e.getElement().setAttribute("aria-sort","none"))})},U.prototype.setColumnHeader=function(e,t){e.modules.sort.dir=t,e.getElement().setAttribute("aria-sort",t)},U.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})},U.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)},U.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}},u.prototype.registerModule("sort",U);var Y=function(e){this.table=e};return Y.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)},Y.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)}},Y.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)},Y.prototype.validate=function(e,t,o){var i=this,n=[];return e&&e.forEach(function(e){e.func.call(i,t,o,e.params)||n.push({type:e.type,parameters:e.params})}),!n.length||n},Y.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},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}},u.prototype.registerModule("validate",Y),u}); \ No newline at end of file diff --git a/app/static/vendors/tabulator/js.old/tabulator_core.js b/app/static/vendors/tabulator/js.old/tabulator_core.js new file mode 100644 index 0000000..4a5287b --- /dev/null +++ b/app/static/vendors/tabulator/js.old/tabulator_core.js @@ -0,0 +1,8523 @@ +/* Tabulator v4.6.3 (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; + } + + }); +} + +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 () { + 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); +}; + +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._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"); + } +}; + +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); + }); + } + + 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(); + } +}; + +//////////////// 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"]; + +//////////////// Event Bindings ///////////////// + +//////////////// Object Generation ///////////////// +Column.prototype.getComponent = function () { + return new ColumnComponent(this); +}; + +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.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.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.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.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); + } +}; + +///////////////////// 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; + + //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 () { + return new RowComponent(this); +}; + +//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.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.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.delete = function () { + if (!this.table.rowManager.redrawBlock) { + this.element.parentNode.removeChild(this.element); + } + 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 () { + return new CellComponent(this); +}; +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: false, //download config + + 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 + + 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 + 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() {}, + + 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, + groupTap: false, + groupDblTap: false, + groupTapHold: false, + + columnCalcs: true, + + //pagination callbacks + pageLoaded: function pageLoaded() {}, + + //localization callbacks + localized: function localized() {}, + + //validation has failed + 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 (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) { + if (this.modExists("filter", true)) { + this.modules.filter.setFilter(field, type, value); + this.rowManager.filterRefresh(); + } +}; + +//add filter to array +Tabulator.prototype.addFilter = function (field, type, value) { + if (this.modExists("filter", true)) { + this.modules.filter.addFilter(field, type, value); + 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(); + } +}; + +///////////////////// Filtering //////////////////// +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(); + } +}; + +//////////// 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 _this31 = this; + + return new Promise(function (resolve, reject) { + if (_this31.options.pagination && _this31.modExists("page")) { + row = _this31.rowManager.findRow(row); + + if (row) { + _this31.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(); + } +}; + +///////////////// 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 the 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 the 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 the contain and stretch last column to fill table + + "fitDataStretch": function fitDataStretch(columns) { + var _this32 = 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 (_this32.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", + "first": "First", + "first_title": "First Page", + "last": "Last", + "last_title": "Last Page", + "prev": "Prev", + "prev_title": "Prev Page", + "next": "Next", + "next_title": "Next Page" + }, + "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/app/static/vendors/tabulator/js.old/tabulator_core.min.js b/app/static/vendors/tabulator/js.old/tabulator_core.min.js new file mode 100644 index 0000000..feed651 --- /dev/null +++ b/app/static/vendors/tabulator/js.old/tabulator_core.min.js @@ -0,0 +1,6 @@ +/* Tabulator v4.6.3 (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;no?(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 s={field:n,title:n},l=e[n];switch(void 0===l?"undefined":_typeof(l)){case"undefined":o="string";break;case"boolean":o="boolean";break;case"object":o=Array.isArray(l)?"array":"string";break;default:o=isNaN(l)||""===l?l.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)}},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(),s=o?this.findColumnIndex(o):o;if(o&&s>-1){var l=this.columns.indexOf(o.getTopColumn()),a=o.getElement();e?(this.columns.splice(l,0,i),a.parentNode.insertBefore(n,a)):(this.columns.splice(l+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 s,l=t.indexOf(e);l>-1&&(t.splice(l,1),s=t.indexOf(o),s>-1?i&&(s+=1):s=l,t.splice(s,0,e),n&&this.table.rowManager.rows.forEach(function(t){if(t.cells.length){var e=t.cells.splice(l,1)[0];t.cells.splice(s,0,e)}}))},ColumnManager.prototype.scrollToColumn=function(t,e,o){var i=this,n=0,s=0,l=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":l=-i.element.clientWidth/2;break;case"right":l=a.clientWidth-i.headersElement.clientWidth}if(!o&&(s=a.offsetLeft)>0&&s+a.offsetWidtht.rowManager.element.clientHeight&&(e-=t.rowManager.element.offsetWidth-t.rowManager.element.clientWidth),this.columnsByIndex.forEach(function(i){var n,s,l;i.visible&&(n=i.definition.width||0,s=void 0===i.minWidth?t.table.options.columnMinWidth:parseInt(i.minWidth),l="string"==typeof n?n.indexOf("%")>-1?e/100*parseInt(n):parseInt(n):n,o+=l>s?l:s)}),o},ColumnManager.prototype.addColumn=function(t,e,o){var i=this;return new Promise(function(n,s){var l=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()&&l.reinitializeWidth(),i._verticalAlignHeaders(),i.table.rowManager.reinitialize(),n(l)})},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 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)};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._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"))},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,s,l,a=this;if(this.definition.titleFormatter&&this.table.modExists("format"))switch(o=this.table.modules.format.getFormatter(this.definition.titleFormatter),l=function(t){a.titleFormatterRendered=t},s={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,s,n,l),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.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,s=0;s-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"],Column.prototype.getComponent=function(){return new ColumnComponent(this)};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,s=this.getDisplayRows().indexOf(t),l=t.getElement(),a=0;return new Promise(function(t,r){if(s>-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(l).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-s)>Math.abs(n.vDomBottom-s)?"bottom":"top"}if(!o&&Tabulator.prototype.helpers.elVisible(l)&&(a=Tabulator.prototype.helpers.elOffset(l).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,s=0,l=[];return new Promise(function(a,r){e=i.findAddRowPos(e),Array.isArray(t)||(t=[t]),s=t.length-1,(void 0===o&&e||void 0!==o&&!e)&&t.reverse(),t.forEach(function(t,i){var s=n.addRow(t,e,o,!0);l.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(l)})},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,s,l=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&&(s=this.getDisplayRows(),a?s.length?o=s[0]:this.activeRows.length&&(o=this.activeRows[this.activeRows.length-1],a=!1):s.length&&(o=s[s.length-1],a=!(s.length1&&(!o||o&&-1==u.indexOf(o)?a?u[0]!==l&&(o=u[0],this._moveRowInArray(l.getGroup().rows,l,o,!a)):u[u.length-1]!==l&&(o=u[u.length-1],this._moveRowInArray(l.getGroup().rows,l,o,!a)):this._moveRowInArray(l.getGroup().rows,l,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,l)}),n>-1&&this.activeRows.splice(a?n:n+1,0,l),this.rows.splice(a?r:r+1,0,l)):a?(this.displayRowIterator(function(t){t.unshift(l)}),this.activeRows.unshift(l),this.rows.unshift(l)):(this.displayRowIterator(function(t){t.push(l)}),this.activeRows.push(l),this.rows.push(l)),this.setActiveRows(this.activeRows),this.table.options.rowAdded.call(this.table,l.getComponent()),this.table.options.dataEdited.call(this.table,this.getData()),i||this.reRenderInPosition(),l},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(),s=t.getGroup();n===s?this._moveRowInArray(n.rows,t,e,o):(s&&s.removeRow(t),n.insertRow(t,e,o))}},RowManager.prototype._moveRowInArray=function(t,e,o,i){var n,s,l,a;if(e!==o&&(n=t.indexOf(e),n>-1&&(t.splice(n,1),s=t.indexOf(o),s>-1?i?t.splice(s+1,0,e):t.splice(s,0,e):t.splice(n,0,e)),t===this.getDisplayRows())){l=nn?s:n+1;for(var r=l;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 s=this.table.modules.filter.getFilters(!0,!0);i[this.table.modules.page.paginationDataSentNames.filters]=s}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,s=this.table,l=["all","filter","sort","display","freeze","group","tree","page"];if(this.redrawBlock)return void((!this.redrawBlockRestoreConfig||l.indexOf(t)=0))break;s=a}else if(e-l[a].getElement().offsetTop>=0)n=a;else{if(i=!0,!(o-l[a].getElement().offsetTop>=0))break;s=a}}else n=this.vDomTop,s=this.vDomBottom;return l.slice(n,s+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,s=this.getDisplayRows(),l=this.vDomTop;l<=this.vDomBottom;l++)if(s[l]){var a=e-s[l].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,s.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,s=i[n],l=s.getHeight()||this.vDomRowHeight;t>=l&&(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-=l,this.vDomTopPad<0&&(this.vDomTopPad=n*this.vDomRowHeight),n||(this.vDomTopPad=0),o.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=l,this.vDomTop--),t=-(this.scrollTop-this.vDomScrollPosTop),s.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*s.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=l&&(this.styleRow(s,n),o.appendChild(s.getElement()),s.initialized&&s.heightInitialized||(this.vDomBottomNewRows.push(s),s.heightInitialized||s.clearCellHeight()),s.initialize(),this.vDomBottomPad-=l,(this.vDomBottomPad<0||n==this.displayRowsCount-1)&&(this.vDomBottomPad=0),o.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=l,this.vDomBottom++),t=this.scrollTop-this.vDomScrollPosBottom,s.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*s.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.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.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.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.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(s,l){"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 s=t.getFieldValue(e);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(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()),s()})},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.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.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 s,l=n.files[0],a=new FileReader;a.readAsText(l),a.onload=function(t){try{s=JSON.parse(a.result)}catch(t){return console.warn("File Load Error - File contents is invalid JSON",t),void i(t)}e._setData(s).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 s=this;return"string"!=typeof t?t?s.rowManager.setData(t,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==t.indexOf("{")||0==t.indexOf("[")?s.rowManager.setData(JSON.parse(t),i,n):s.modExists("ajax",!0)?(e&&s.modules.ajax.setParams(e),o&&s.modules.ajax.setConfig(o),s.modules.ajax.setUrl(t),"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},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,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]);e&&(i++,e.updateData(t).then(function(){--i||n()}))}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})},Tabulator.prototype.addData=function(t,e,o){var i=this;return new Promise(function(n,s){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"),s("Update Error - No data provided"))})},Tabulator.prototype.updateOrAddData=function(t){var e=this,o=this,i=[],n=0;return new Promise(function(s,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]);n++,e?e.updateData(t).then(function(){n--,i.push(e.getComponent()),n||s(i)}):o.rowManager.addRows(t).then(function(t){n--,i.push(t[0].getComponent()),n||s(i)})}):(console.warn("Update Error - No data provided"),l("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(){++l==t.length&&a&&(s.rowManager.reRenderInPosition(),o())}var s=e,l=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,s){"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 s=o.rowManager.findRow(t);"string"==typeof e&&(e=JSON.parse(e)),s?s.updateData(e).then(function(){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(s.getComponent())}).catch(function(t){n(t)}):s=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 s=o.rowManager.findRow(t);"string"==typeof e&&(e=JSON.parse(e)),s?s.updateData(e).then(function(){i(s.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,s){var l=i.rowManager.findRow(t);l?i.rowManager.scrollToRow(l,e,o).then(function(){n()}).catch(function(t){s(t)}):(console.warn("Scroll Error - No matching row found:",t),s("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,s){var l=i.columnManager.findColumn(o);i.columnManager.addColumn(t,e,l).then(function(t){n(t.getComponent())}).catch(function(t){s(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 s=o.columnManager.findColumn(t);s?s.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,s){var l=i.columnManager.findColumn(t);l?i.columnManager.scrollToColumn(l,e,o).then(function(){n()}).catch(function(t){s(t)}):(console.warn("Scroll Error - No matching column found:",t),s("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){this.modExists("filter",!0)&&(this.modules.filter.setFilter(t,e,o),this.rowManager.filterRefresh())},Tabulator.prototype.addFilter=function(t,e,o){this.modExists("filter",!0)&&(this.modules.filter.addFilter(t,e,o),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.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.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 s=0;s0?s.setWidth(n):s.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,s){function l(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,p=0,d=0,m=[];return t.forEach(function(t,e){var o=s?a(t):l(t) +;t.column.minWidth>=o?r.push(t):(m.push(t),d+=s?t.column.definition.widthShrink||1:t.column.definition.widthGrow||1)}),r.length?(r.forEach(function(t){u+=s?t.width-t.column.minWidth:t.column.minWidth,t.width=t.column.minWidth}),c=i-u,h=d?Math.floor(c/d):c,p=c-h*d,p+=o(m,c,h,s)):(p=d?i-Math.floor(i/d)*d:i,m.forEach(function(t){t.width=s?a(t):l(t)})),p}var i=this,n=i.table.element.clientWidth,s=0,l=0,a=0,r=0,u=[],c=[],h=0,p=0,d=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),s+=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))}),l=n-s,r=Math.floor(l/a);var d=o(u,l,r,!1);u.length&&d>0&&(u[u.length-1].width+=+d),u.forEach(function(t){l-=t.width}),p=Math.abs(d)+l,p>0&&h&&(d=o(c,p,Math.floor(p/h),!0)),c.length&&(c[c.length-1].width-=d),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",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page"},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,s=this.getConnections(t);s.forEach(function(t){t.tableComms(n.table.element,e,o,i)}),!s.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/app/static/vendors/tabulator/js/modules/accessor.js b/app/static/vendors/tabulator/js/modules/accessor.js new file mode 100644 index 0000000..8ffe1bf --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/accessor.js @@ -0,0 +1,93 @@ +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/app/static/vendors/tabulator/js/modules/accessor.min.js b/app/static/vendors/tabulator/js/modules/accessor.min.js new file mode 100644 index 0000000..2633b8f --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/accessor.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},Accessor=function(o){this.table=o,this.allowedTypes=["","data","download","clipboard","print","htmlOutput"]};Accessor.prototype.initializeColumn=function(o){var e=this,s=!1,r={};this.allowedTypes.forEach(function(t){var c,a="accessor"+(t.charAt(0).toUpperCase()+t.slice(1));o.definition[a]&&(c=e.lookupAccessor(o.definition[a]))&&(s=!0,r[a]={accessor:c,params:o.definition[a+"Params"]||{}})}),s&&(o.modules.accessor=r)},Accessor.prototype.lookupAccessor=function(o){var e=!1;switch(void 0===o?"undefined":_typeof(o)){case"string":this.accessors[o]?e=this.accessors[o]:console.warn("Accessor Error - No such accessor found, ignoring: ",o);break;case"function":e=o}return e},Accessor.prototype.transformRow=function(o,e){var s=this,r="accessor"+(e.charAt(0).toUpperCase()+e.slice(1)),t=Tabulator.prototype.helpers.deepClone(o||{});return s.table.columnManager.traverse(function(o){var s,c,a,n;o.modules.accessor&&(c=o.modules.accessor[r]||o.modules.accessor.accessor||!1)&&"undefined"!=(s=o.getFieldValue(t))&&(n=o.getComponent(),a="function"==typeof c.params?c.params(s,t,e,n):c.params,o.setFieldValue(t,c.accessor(s,t,e,a,n)))}),t},Accessor.prototype.accessors={},Tabulator.prototype.registerModule("accessor",Accessor); \ No newline at end of file diff --git a/app/static/vendors/tabulator/js/modules/ajax.js b/app/static/vendors/tabulator/js/modules/ajax.js new file mode 100644 index 0000000..7d72604 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/ajax.js @@ -0,0 +1,465 @@ +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/app/static/vendors/tabulator/js/modules/ajax.min.js b/app/static/vendors/tabulator/js/modules/ajax.min.js new file mode 100644 index 0000000..a5dae29 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/ajax.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},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/app/static/vendors/tabulator/js/modules/calculation_colums.min.js b/app/static/vendors/tabulator/js/modules/calculation_colums.min.js new file mode 100644 index 0000000..33464d5 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/calculation_colums.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},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/app/static/vendors/tabulator/js/modules/download.js b/app/static/vendors/tabulator/js/modules/download.js new file mode 100644 index 0000000..9954910 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/download.js @@ -0,0 +1,433 @@ +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/app/static/vendors/tabulator/js/modules/download.min.js b/app/static/vendors/tabulator/js/modules/download.min.js new file mode 100644 index 0000000..b3b776c --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/download.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Download=function(e){this.table=e};Download.prototype.download=function(e,o,t,n,a){function r(t,n){a?!0===a?l.triggerDownload(t,n,e,o,!0):a(t):l.triggerDownload(t,n,e,o)}var l=this,s=!1;if("function"==typeof e?s=e:l.downloaders[e]?s=l.downloaders[e]:console.warn("Download Error - No such download type found: ",e),s){var i=this.generateExportList(n);s.call(this.table,i,t||{},r)}},Download.prototype.generateExportList=function(e){var o=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,e||this.table.options.downloadRowRange,"download"),t=this.table.options.groupHeaderDownload;return t&&!Array.isArray(t)&&(t=[t]),o.forEach(function(e){var o;"group"===e.type&&(o=e.columns[0],t&&t[e.indent]&&(o.value=t[e.indent](o.value,e.component._group.getRowCount(),e.component._group.getData(),e.component)))}),o},Download.prototype.triggerDownload=function(e,o,t,n,a){var r=document.createElement("a"),l=new Blob([e],{type:o}),n=n||"Tabulator."+("function"==typeof t?"txt":t);(l=this.table.options.downloadReady.call(this.table,e,l))&&(a?window.open(window.URL.createObjectURL(l)):navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(l,n):(r.setAttribute("href",window.URL.createObjectURL(l)),r.setAttribute("download",n),r.style.display="none",document.body.appendChild(r),r.click(),document.body.removeChild(r)),this.table.options.downloadComplete&&this.table.options.downloadComplete())},Download.prototype.commsReceived=function(e,o,t){switch(o){case"intercept":this.download(t.type,"",t.options,t.active,t.intercept)}},Download.prototype.downloaders={csv:function(e,o,t){var n=o&&o.delimiter?o.delimiter:",",a=[],r=[];e.forEach(function(e){var o=[];switch(e.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":e.columns.forEach(function(e,o){e&&1===e.depth&&(r[o]=void 0===e.value||"null"==typeof e.value?"":e.value)});break;case"row":e.columns.forEach(function(e){if(e){switch(_typeof(e.value)){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}o.push('"'+String(e.value).split('"').join('""')+'"')}}),a.push(o.join(n))}}),r.length&&(a=[r].concat(a)),a=a.join("\n"),o.bom&&(a="\ufeff"+a),t(a,"text/csv")},json:function(e,o,t){var n=[];e.forEach(function(e){var o={};switch(e.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":e.columns.forEach(function(e){e&&(o[e.component.getField()]=e.value)}),n.push(o)}}),n=JSON.stringify(n,null,"\t"),t(n,"application/json")},pdf:function(e,o,t){function n(e,o){var t=[];return e.columns.forEach(function(e){var n;if(e){switch(_typeof(e.value)){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}n={content:e.value,colSpan:e.width,rowSpan:e.height},o&&(n.styles=o),t.push(n)}else t.push("")}),t}var a=[],r=[],l={},s=o.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},i=o.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},c=o.jsPDF||{},u=o&&o.title?o.title:"";c.orientation||(c.orientation=o.orientation||"landscape"),c.unit||(c.unit="pt"),e.forEach(function(e){switch(e.type){case"header":a.push(n(e));break;case"group":r.push(n(e,s));break;case"calc":r.push(n(e,i));break;case"row":r.push(n(e))}});var d=new jsPDF(c);o&&o.autoTable&&(l="function"==typeof o.autoTable?o.autoTable(d)||{}:o.autoTable),u&&(l.addPageContent=function(e){d.text(u,40,30)}),l.head=a,l.body=r,d.autoTable(l),o&&o.documentProcessing&&o.documentProcessing(d),t(d.output("arraybuffer"),"application/pdf")},xlsx:function(e,o,t){function n(){var o=[],t=[],n={},a={s:{c:0,r:0},e:{c:e[0]?e[0].columns.reduce(function(e,o){return e+(o&&o.width?o.width:1)},0):0,r:e.length}};return e.forEach(function(e,n){var a=[];e.columns.forEach(function(e,o){e?(a.push(e.value instanceof Date||"object"!==_typeof(e.value)?e.value:JSON.stringify(e.value)),(e.width>1||e.height>-1)&&t.push({s:{r:n,c:o},e:{r:n+e.height-1,c:o+e.width-1}})):a.push("")}),o.push(a)}),XLSX.utils.sheet_add_aoa(n,o),n["!ref"]=XLSX.utils.encode_range(a),t.length&&(n["!merges"]=t),n}var a,r=this,l=o.sheetName||"Sheet1",s=XLSX.utils.book_new();if(s.SheetNames=[],s.Sheets={},o.sheetOnly)return void t(n());if(o.sheets)for(var i in o.sheets)!0===o.sheets[i]?(s.SheetNames.push(i),s.Sheets[i]=n()):(s.SheetNames.push(i),this.table.modules.comms.send(o.sheets[i],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:r.active,intercept:function(e){s.Sheets[i]=e}}));else s.SheetNames.push(l),s.Sheets[l]=n();o.documentProcessing&&(s=o.documentProcessing(s)),a=XLSX.write(s,{bookType:"xlsx",bookSST:!0,type:"binary"}),t(function(e){for(var o=new ArrayBuffer(e.length),t=new Uint8Array(o),n=0;n!=e.length;++n)t[n]=255&e.charCodeAt(n);return o}(a),"application/octet-stream")},html:function(e,o,t){this.modExists("export",!0)&&t(this.modules.export.genereateHTMLTable(e),"text/html")}},Tabulator.prototype.registerModule("download",Download); \ No newline at end of file diff --git a/app/static/vendors/tabulator/js/modules/edit.js b/app/static/vendors/tabulator/js/modules/edit.js new file mode 100644 index 0000000..e35dd84 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/edit.js @@ -0,0 +1,2109 @@ +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/app/static/vendors/tabulator/js/modules/edit.min.js b/app/static/vendors/tabulator/js/modules/edit.min.js new file mode 100644 index 0000000..8e256be --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/edit.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Edit=function(e){this.table=e,this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1,this.editedCells=[]};Edit.prototype.initializeColumn=function(e){var t=this,i={editor:!1,blocked:!1,check:e.definition.editable,params:e.definition.editorParams||{}};switch(_typeof(e.definition.editor)){case"string":"tick"===e.definition.editor&&(e.definition.editor="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),t.editors[e.definition.editor]?i.editor=t.editors[e.definition.editor]:console.warn("Editor Error - No such editor found: ",e.definition.editor);break;case"function":i.editor=e.definition.editor;break;case"boolean":!0===e.definition.editor&&("function"!=typeof e.definition.formatter?("tick"===e.definition.formatter&&(e.definition.formatter="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),t.editors[e.definition.formatter]?i.editor=t.editors[e.definition.formatter]:i.editor=t.editors.input):console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",e.definition.formatter))}i.editor&&(e.modules.edit=i)},Edit.prototype.getCurrentCell=function(){return!!this.currentCell&&this.currentCell.getComponent()},Edit.prototype.clearEditor=function(e){var t,i=this.currentCell;if(this.invalidEdit=!1,i){for(this.currentCell=!1,t=i.getElement(),e?i.validate():t.classList.remove("tabulator-validation-fail"),t.classList.remove("tabulator-editing");t.firstChild;)t.removeChild(t.firstChild);i.row.getElement().classList.remove("tabulator-row-editing")}},Edit.prototype.cancelEdit=function(){if(this.currentCell){var e=this.currentCell,t=this.currentCell.getComponent();this.clearEditor(!0),e.setValueActual(e.getValue()),e.cellRendered(),e.column.cellEvents.cellEditCancelled&&e.column.cellEvents.cellEditCancelled.call(this.table,t),this.table.options.cellEditCancelled.call(this.table,t)}},Edit.prototype.bindEditor=function(e){var t=this,i=e.getElement();i.setAttribute("tabindex",0),i.addEventListener("click",function(e){i.classList.contains("tabulator-editing")||i.focus({preventScroll:!0})}),i.addEventListener("mousedown",function(e){t.mouseClick=!0}),i.addEventListener("focus",function(i){t.recursionBlock||t.edit(e,i,!1)})},Edit.prototype.focusCellNoEvent=function(e,t){this.recursionBlock=!0,t&&"ie"===this.table.browser||e.getElement().focus({preventScroll:!0}),this.recursionBlock=!1},Edit.prototype.editCell=function(e,t){this.focusCellNoEvent(e),this.edit(e,!1,t)},Edit.prototype.focusScrollAdjust=function(e){if("virtual"==this.table.rowManager.getRenderMode()){var t=this.table.rowManager.element.scrollTop,i=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,n=e.row.getElement();n.offsetTop;n.offsetTopi&&(this.table.rowManager.element.scrollTop+=n.offsetTop+n.offsetHeight-i)}},Edit.prototype.edit=function(e,t,i){function n(t){if(u.currentCell===e){var i=!0;return e.column.modules.validate&&u.table.modExists("validate")&&"manual"!=u.table.options.validationMode&&(i=u.table.modules.validate.validate(e.column.modules.validate,e,t)),!0===i||"highlight"===u.table.options.validationMode?(u.clearEditor(),e.setValue(t,!0),e.modules.edit||(e.modules.edit={}),e.modules.edit.edited=!0,-1==u.editedCells.indexOf(e)&&u.editedCells.push(e),u.table.options.dataTree&&u.table.modExists("dataTree")&&u.table.modules.dataTree.checkForRestyle(e),!0===i||(m.classList.add("tabulator-validation-fail"),!1)):(u.invalidEdit=!0,m.classList.add("tabulator-validation-fail"),u.focusCellNoEvent(e,!0),c(),u.table.options.validationFailed.call(u.table,e.getComponent(),t,i),!1)}}function o(){u.currentCell===e&&(u.cancelEdit(),u.table.options.dataTree&&u.table.modExists("dataTree")&&u.table.modules.dataTree.checkForRestyle(e))}function a(e){c=e}var r,l,s,u=this,d=!0,c=function(){},m=e.getElement();if(this.currentCell)return void(this.invalidEdit||this.cancelEdit());if(e.column.modules.edit.blocked)return this.mouseClick=!1,m.blur(),!1;switch(t&&t.stopPropagation(),_typeof(e.column.modules.edit.check)){case"function":d=e.column.modules.edit.check(e.getComponent());break;case"boolean":d=e.column.modules.edit.check}if(d||i){if(u.cancelEdit(),u.currentCell=e,this.focusScrollAdjust(e),l=e.getComponent(),this.mouseClick&&(this.mouseClick=!1,e.column.cellEvents.cellClick&&e.column.cellEvents.cellClick.call(this.table,t,l)),e.column.cellEvents.cellEditing&&e.column.cellEvents.cellEditing.call(this.table,l),u.table.options.cellEditing.call(this.table,l),s="function"==typeof e.column.modules.edit.params?e.column.modules.edit.params(l):e.column.modules.edit.params,!1===(r=e.column.modules.edit.editor.call(u,l,a,n,o,s)))return m.blur(),!1;if(!(r instanceof Node))return console.warn("Edit Error - Editor should return an instance of Node, the editor returned:",r),m.blur(),!1;for(m.classList.add("tabulator-editing"),e.row.getElement().classList.add("tabulator-row-editing");m.firstChild;)m.removeChild(m.firstChild);m.appendChild(r),c();for(var f=m.children,p=0;p46){if(i>=n.length)return t.preventDefault(),t.stopPropagation(),l=!1,!1;switch(n[i]){case o:if(s.toUpperCase()==s.toLowerCase())return t.preventDefault(),t.stopPropagation(),l=!1,!1;break;case a:if(isNaN(s))return t.preventDefault(),t.stopPropagation(),l=!1,!1;break;case r:break;default:if(s!==n[i])return t.preventDefault(),t.stopPropagation(),l=!1,!1}l=!0}}),e.addEventListener("keyup",function(n){n.keyCode>46&&t.maskAutoFill&&i(e.value.length)}),e.placeholder||(e.placeholder=n),t.maskAutoFill&&i(e.value.length)},Edit.prototype.getEditedCells=function(){var e=[];return this.editedCells.forEach(function(t){e.push(t.getComponent())}),e},Edit.prototype.clearEdited=function(e){var t;e.modules.edit&&e.modules.edit.edited&&(e.modules.validate.invalid=!1,(t=this.editedCells.indexOf(e))>-1&&this.editedCells.splice(t,1))},Edit.prototype.editors={input:function(e,t,i,n,o){function a(e){(null===r||void 0===r)&&""!==l.value||l.value!==r?i(l.value)&&(r=l.value):n()}var r=e.getValue(),l=document.createElement("input");if(l.setAttribute("type",o.search?"search":"text"),l.style.padding="4px",l.style.width="100%",l.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var s in o.elementAttributes)"+"==s.charAt(0)?(s=s.slice(1),l.setAttribute(s,l.getAttribute(s)+o.elementAttributes["+"+s])):l.setAttribute(s,o.elementAttributes[s]);return l.value=void 0!==r?r:"",t(function(){l.focus({preventScroll:!0}),l.style.height="100%"}),l.addEventListener("change",a),l.addEventListener("blur",a),l.addEventListener("keydown",function(e){switch(e.keyCode){case 13:a(e);break;case 27:n()}}),o.mask&&this.table.modules.edit.maskInput(l,o),l},textarea:function(e,t,i,n,o){function a(t){(null===r||void 0===r)&&""!==u.value||u.value!==r?(i(u.value)&&(r=u.value),setTimeout(function(){e.getRow().normalizeHeight()},300)):n()}var r=e.getValue(),l=o.verticalNavigation||"hybrid",s=String(null!==r&&void 0!==r?r:""),u=(s.match(/(?:\r\n|\r|\n)/g),document.createElement("textarea")),d=0;if(u.style.display="block",u.style.padding="2px",u.style.height="100%",u.style.width="100%",u.style.boxSizing="border-box",u.style.whiteSpace="pre-wrap",u.style.resize="none",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var c in o.elementAttributes)"+"==c.charAt(0)?(c=c.slice(1),u.setAttribute(c,u.getAttribute(c)+o.elementAttributes["+"+c])):u.setAttribute(c,o.elementAttributes[c]);return u.value=s,t(function(){u.focus({preventScroll:!0}),u.style.height="100%"}),u.addEventListener("change",a),u.addEventListener("blur",a),u.addEventListener("keyup",function(){u.style.height="";var t=u.scrollHeight;u.style.height=t+"px",t!=d&&(d=t,e.getRow().normalizeHeight())}),u.addEventListener("keydown",function(e){switch(e.keyCode){case 27:n();break;case 38:("editor"==l||"hybrid"==l&&u.selectionStart)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 40:("editor"==l||"hybrid"==l&&u.selectionStart!==u.value.length)&&(e.stopImmediatePropagation(),e.stopPropagation())}}),o.mask&&this.table.modules.edit.maskInput(u,o),u},number:function(e,t,i,n,o){function a(){var e=s.value;isNaN(e)||""===e||(e=Number(e)),e!==r?i(e)&&(r=e):n()}var r=e.getValue(),l=o.verticalNavigation||"editor",s=document.createElement("input");if(s.setAttribute("type","number"),void 0!==o.max&&s.setAttribute("max",o.max),void 0!==o.min&&s.setAttribute("min",o.min),void 0!==o.step&&s.setAttribute("step",o.step),s.style.padding="4px",s.style.width="100%",s.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var u in o.elementAttributes)"+"==u.charAt(0)?(u=u.slice(1),s.setAttribute(u,s.getAttribute(u)+o.elementAttributes["+"+u])):s.setAttribute(u,o.elementAttributes[u]);s.value=r;var d=function(e){a()};return t(function(){s.removeEventListener("blur",d),s.focus({preventScroll:!0}),s.style.height="100%",s.addEventListener("blur",d)}),s.addEventListener("keydown",function(e){switch(e.keyCode){case 13:a();break;case 27:n();break;case 38:case 40:"editor"==l&&(e.stopImmediatePropagation(),e.stopPropagation())}}),o.mask&&this.table.modules.edit.maskInput(s,o),s},range:function(e,t,i,n,o){function a(){var e=l.value;isNaN(e)||""===e||(e=Number(e)),e!=r?i(e)&&(r=e):n()}var r=e.getValue(),l=document.createElement("input");if(l.setAttribute("type","range"),void 0!==o.max&&l.setAttribute("max",o.max),void 0!==o.min&&l.setAttribute("min",o.min),void 0!==o.step&&l.setAttribute("step",o.step),l.style.padding="4px",l.style.width="100%",l.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var s in o.elementAttributes)"+"==s.charAt(0)?(s=s.slice(1),l.setAttribute(s,l.getAttribute(s)+o.elementAttributes["+"+s])):l.setAttribute(s,o.elementAttributes[s]);return l.value=r,t(function(){l.focus({preventScroll:!0}),l.style.height="100%"}),l.addEventListener("blur",function(e){a()}),l.addEventListener("keydown",function(e){switch(e.keyCode){case 13:a();break;case 27:n()}}),l},select:function(e,t,i,n,o){function a(t){var i,n={},a=y.table.getData();return i=t?y.table.columnManager.getColumnByField(t):e.getColumn()._getSelf(),i?(a.forEach(function(e){var t=i.getFieldValue(e);null!==t&&void 0!==t&&""!==t&&(n[t]=!0)}),n=o.sortValuesList?"asc"==o.sortValuesList?Object.keys(n).sort():Object.keys(n).sort().reverse():Object.keys(n)):console.warn("unable to find matching column to create select lookup list:",t),n}function r(t,i){function n(e){var e={label:e.label,value:e.value,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1};return i.indexOf(e.value)>-1&&u(e),o.push(e),a.push(e),e}var o=[],a=[];if("function"==typeof t&&(t=t(e)),Array.isArray(t))t.forEach(function(e){var t;"object"===(void 0===e?"undefined":_typeof(e))?e.options?(t={label:e.label,group:!0,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1},a.push(t),e.options.forEach(function(e){n(e)})):n(e):(t={label:e,value:e,element:!1},i.indexOf(t.value)>-1&&u(t),o.push(t),a.push(t))});else for(var r in t){var s={label:t[r],value:r,element:!1};i.indexOf(s.value)>-1&&u(s),o.push(s),a.push(s)}P=o,T=a,l()}function l(){for(;w.firstChild;)w.removeChild(w.firstChild);T.forEach(function(t){var i=t.element;if(!i){if(i=document.createElement("div"),t.label=o.listItemFormatter?o.listItemFormatter(t.value,t.label,e,i,t.itemParams):t.label,t.group?(i.classList.add("tabulator-edit-select-list-group"),i.tabIndex=0,i.innerHTML=""===t.label?" ":t.label):(i.classList.add("tabulator-edit-select-list-item"),i.tabIndex=0,i.innerHTML=""===t.label?" ":t.label,i.addEventListener("click",function(){x?(c(t),L.focus()):m(t)}),I.indexOf(t)>-1&&i.classList.add("active")),t.elementAttributes&&"object"==_typeof(t.elementAttributes))for(var n in t.elementAttributes)"+"==n.charAt(0)?(n=n.slice(1),i.setAttribute(n,L.getAttribute(n)+t.elementAttributes["+"+n])):i.setAttribute(n,t.elementAttributes[n]);i.addEventListener("mousedown",function(){S=!1,setTimeout(function(){S=!0},10)}),t.element=i}w.appendChild(i)})}function s(e,t){!x&&N&&N.element&&N.element.classList.remove("active"),N&&N.element&&N.element.classList.remove("focused"),N=e,e.element&&(e.element.classList.add("focused"),t&&e.element.classList.add("active"))}function u(e){-1==I.indexOf(e)&&(I.push(e),s(e,!0)),p()}function d(e){var t=I[e];e>-1&&(I.splice(e,1),t.element&&t.element.classList.remove("active"))}function c(e){e||(e=N);var t=I.indexOf(e);t>-1?d(t):(!0!==x&&I.length>=x&&d(0),u(e)),p()}function m(e){h(),e||(e=N),e&&i(e.value)}function f(){h();var e=[];I.forEach(function(t){e.push(t.value)}),i(e)}function p(){var e=[];I.forEach(function(t){e.push(t.label)}),L.value=e.join(", ")}function v(){h(),n()}function b(){if(!w.parentNode){!0===o.values?r(a(),C):"string"==typeof o.values?r(a(o.values),C):r(o.values||[],C);var e=Tabulator.prototype.helpers.elOffset(E);w.style.minWidth=E.offsetWidth+"px",w.style.top=e.top+E.offsetHeight+"px",w.style.left=e.left+"px",w.addEventListener("mousedown",function(e){S=!1,setTimeout(function(){S=!0},10)}),document.body.appendChild(w)}}function h(){w.parentNode&&w.parentNode.removeChild(w),g()}function g(){y.table.rowManager.element.removeEventListener("scroll",v)}var y=this,E=e.getElement(),A=e.getValue(),k=o.verticalNavigation||"editor",C=void 0!==A||null===A?A:void 0!==o.defaultValue?o.defaultValue:[],L=document.createElement("input"),w=document.createElement("div"),x=o.multiselect,P=[],N={},T=[],I=[],S=!0;if(this.table.rowManager.element.addEventListener("scroll",v),(Array.isArray(o)||!Array.isArray(o)&&"object"===(void 0===o?"undefined":_typeof(o))&&!o.values)&&(console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object"),o={values:o}),L.setAttribute("type","text"),L.style.padding="4px",L.style.width="100%",L.style.boxSizing="border-box",L.style.cursor="default",L.readOnly=0!=this.currentCell,o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var O in o.elementAttributes)"+"==O.charAt(0)?(O=O.slice(1),L.setAttribute(O,L.getAttribute(O)+o.elementAttributes["+"+O])):L.setAttribute(O,o.elementAttributes[O]);return L.value=void 0!==A||null===A?A:"",L.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=P.indexOf(N),("editor"==k||"hybrid"==k&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t>0&&s(P[t-1],!x));break;case 40:t=P.indexOf(N),("editor"==k||"hybrid"==k&&t-1||String(t.title).toLowerCase().indexOf(String(e).toLowerCase())>-1)&&a.push(t)}),c(a,t))}function s(e){var t=document.createElement("div");d(),!1!==e&&(t.classList.add("tabulator-edit-select-list-notice"),t.tabIndex=0,e instanceof Node?t.appendChild(e):t.innerHTML=e,w.appendChild(t))}function u(e){var t=[];if(Array.isArray(e))e.forEach(function(e){var i={};"object"===(void 0===e?"undefined":_typeof(e))?(i.title=o.listItemFormatter?o.listItemFormatter(e.value,e.label):e.label,i.value=e.value):(i.title=o.listItemFormatter?o.listItemFormatter(e,e):e,i.value=e),t.push(i)});else for(var i in e){var n={title:o.listItemFormatter?o.listItemFormatter(i,e[i]):e[i],value:i};t.push(n)}return t}function d(){for(;w.firstChild;)w.removeChild(w.firstChild)}function c(e,t){e.length?m(e,t):o.emptyPlaceholder&&s(o.emptyPlaceholder)}function m(e,t){var i=!1;d(),x=e,x.forEach(function(e){var n=e.element;n||(n=document.createElement("div"),n.classList.add("tabulator-edit-select-list-item"),n.tabIndex=0,n.innerHTML=e.title,n.addEventListener("click",function(t){v(e),f()}),n.addEventListener("mousedown",function(e){N=!1,setTimeout(function(){N=!0},10)}),e.element=n,t&&e.value==A&&(L.value=e.title,e.element.classList.add("active"),i=!0),e===P&&(e.element.classList.add("active"),i=!0)),w.appendChild(n)}),i||v(!1)}function f(){b(),P?A!==P.value?(A=P.value,L.value=P.title,i(P.value)):n():o.freetext?(A=L.value,i(L.value)):o.allowEmpty&&""===L.value?(A=L.value,i(L.value)):n()}function p(){if(!w.parentNode){for(;w.firstChild;)w.removeChild(w.firstChild);var e=Tabulator.prototype.helpers.elOffset(E);w.style.minWidth=E.offsetWidth+"px",w.style.top=e.top+E.offsetHeight+"px",w.style.left=e.left+"px",document.body.appendChild(w)}}function v(e,t){P&&P.element&&P.element.classList.remove("active"),P=e,e&&e.element&&e.element.classList.add("active")}function b(){w.parentNode&&w.parentNode.removeChild(w),g()}function h(){b(),n()}function g(){y.table.rowManager.element.removeEventListener("scroll",h)}var y=this,E=e.getElement(),A=e.getValue(),k=o.verticalNavigation||"editor",C=void 0!==A||null===A?A:void 0!==o.defaultValue?o.defaultValue:"",L=document.createElement("input"),w=document.createElement("div"),x=[],P=!1,N=!0,T=!1;if(this.table.rowManager.element.addEventListener("scroll",h),L.setAttribute("type","search"),L.style.padding="4px",L.style.width="100%",L.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var I in o.elementAttributes)"+"==I.charAt(0)?(I=I.slice(1),L.setAttribute(I,L.getAttribute(I)+o.elementAttributes["+"+I])):L.setAttribute(I,o.elementAttributes[I]);return w.classList.add("tabulator-edit-select-list"),w.addEventListener("mousedown",function(e){N=!1,setTimeout(function(){N=!0},10)}),L.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=x.indexOf(P),("editor"==k||"hybrid"==k&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),v(t>0?x[t-1]:!1));break;case 40:t=x.indexOf(P),("editor"==k||"hybrid"==k&&t'):("ie"==l.table.browser?t.setAttribute("class","tabulator-star-inactive"):t.classList.replace("tabulator-star-active","tabulator-star-inactive"),t.innerHTML='')})}function r(e){u=e,a(e)}var l=this,s=e.getElement(),u=e.getValue(),d=s.getElementsByTagName("svg").length||5,c=s.getElementsByTagName("svg")[0]?s.getElementsByTagName("svg")[0].getAttribute("width"):14,m=[],f=document.createElement("div"),p=document.createElementNS("http://www.w3.org/2000/svg","svg");if(s.style.whiteSpace="nowrap",s.style.overflow="hidden",s.style.textOverflow="ellipsis",f.style.verticalAlign="middle",f.style.display="inline-block",f.style.padding="4px",p.setAttribute("width",c),p.setAttribute("height",c),p.setAttribute("viewBox","0 0 512 512"),p.setAttribute("xml:space","preserve"),p.style.padding="0 1px",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var v in o.elementAttributes)"+"==v.charAt(0)?(v=v.slice(1),f.setAttribute(v,f.getAttribute(v)+o.elementAttributes["+"+v])):f.setAttribute(v,o.elementAttributes[v]);for(var b=1;b<=d;b++)!function(e){var t=document.createElement("span"),n=p.cloneNode(!0);m.push(n),t.addEventListener("mouseenter",function(t){t.stopPropagation(),t.stopImmediatePropagation(),a(e)}),t.addEventListener("mousemove",function(e){e.stopPropagation(),e.stopImmediatePropagation()}),t.addEventListener("click",function(t){t.stopPropagation(),t.stopImmediatePropagation(),i(e),s.blur()}),t.appendChild(n),f.appendChild(t)}(b);return u=Math.min(parseInt(u),d),a(u),f.addEventListener("mousemove",function(e){a(0)}),f.addEventListener("click",function(e){i(0)}),s.addEventListener("blur",function(e){n()}),s.addEventListener("keydown",function(e){switch(e.keyCode){case 39:r(u+1);break;case 37:r(u-1);break;case 13:i(u);break;case 27:n()}}),f},progress:function(e,t,i,n,o){function a(){var e=c*Math.round(p.offsetWidth/(s.clientWidth/100))+d;i(e),s.setAttribute("aria-valuenow",e),s.setAttribute("aria-label",m)}var r,l,s=e.getElement(),u=void 0===o.max?s.getElementsByTagName("div")[0].getAttribute("max")||100:o.max,d=void 0===o.min?s.getElementsByTagName("div")[0].getAttribute("min")||0:o.min,c=(u-d)/100,m=e.getValue()||0,f=document.createElement("div"),p=document.createElement("div");if(f.style.position="absolute",f.style.right="0",f.style.top="0",f.style.bottom="0",f.style.width="5px",f.classList.add("tabulator-progress-handle"),p.style.display="inline-block",p.style.position="relative",p.style.height="100%",p.style.backgroundColor="#488CE9",p.style.maxWidth="100%",p.style.minWidth="0%",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var v in o.elementAttributes)"+"==v.charAt(0)?(v=v.slice(1),p.setAttribute(v,p.getAttribute(v)+o.elementAttributes["+"+v])):p.setAttribute(v,o.elementAttributes[v]);return s.style.padding="4px 4px",m=Math.min(parseFloat(m),u),m=Math.max(parseFloat(m),d),m=Math.round((m-d)/c),p.style.width=m+"%",s.setAttribute("aria-valuemin",d),s.setAttribute("aria-valuemax",u),p.appendChild(f),f.addEventListener("mousedown",function(e){r=e.screenX,l=p.offsetWidth}),f.addEventListener("mouseover",function(){f.style.cursor="ew-resize"}),s.addEventListener("mousemove",function(e){r&&(p.style.width=l+e.screenX-r+"px")}),s.addEventListener("mouseup",function(e){r&&(e.stopPropagation(),e.stopImmediatePropagation(),r=!1,l=!1,a())}),s.addEventListener("keydown",function(e){switch(e.keyCode){case 39:e.preventDefault(),p.style.width=p.clientWidth+s.clientWidth/100+"px";break;case 37:e.preventDefault(),p.style.width=p.clientWidth-s.clientWidth/100+"px";break;case 9:case 13:a();break;case 27:n()}}),s.addEventListener("blur",function(){n()}),p},tickCross:function(e,t,i,n,o){function a(e){return s?e?d?u:l.checked:l.checked&&!d?(l.checked=!1,l.indeterminate=!0,d=!0,u):(d=!1,l.checked):l.checked}var r=e.getValue(),l=document.createElement("input"),s=o.tristate,u=void 0===o.indeterminateValue?null:o.indeterminateValue,d=!1;if(l.setAttribute("type","checkbox"),l.style.marginTop="5px",l.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var c in o.elementAttributes)"+"==c.charAt(0)?(c=c.slice(1),l.setAttribute(c,l.getAttribute(c)+o.elementAttributes["+"+c])):l.setAttribute(c,o.elementAttributes[c]);return l.value=r,!s||void 0!==r&&r!==u&&""!==r||(d=!0,l.indeterminate=!0),"firefox"!=this.table.browser&&t(function(){l.focus({preventScroll:!0})}),l.checked=!0===r||"true"===r||"True"===r||1===r,l.addEventListener("change",function(e){i(a())}),l.addEventListener("blur",function(e){i(a(!0))}),l.addEventListener("keydown",function(e){13==e.keyCode&&i(a()),27==e.keyCode&&n()}),l}},Tabulator.prototype.registerModule("edit",Edit); \ No newline at end of file diff --git a/app/static/vendors/tabulator/js/modules/export.js b/app/static/vendors/tabulator/js/modules/export.js new file mode 100644 index 0000000..18d3f6c --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/export.js @@ -0,0 +1,616 @@ +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/app/static/vendors/tabulator/js/modules/export.min.js b/app/static/vendors/tabulator/js/modules/export.min.js new file mode 100644 index 0000000..d0dcccd --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/export.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ExportRow=function(t,e,o,r){this.type=t,this.columns=e,this.component=o||!1,this.indent=r||0},ExportColumn=function(t,e,o,r,n){this.value=t,this.component=e||!1,this.width=o,this.height=r,this.depth=n},Export=function(t){this.table=t,this.config={},this.cloneTableStyle=!0,this.colVisProp=""};Export.prototype.generateExportList=function(t,e,o,r){this.cloneTableStyle=e,this.config=t||{},this.colVisProp=r;var n=!1!==this.config.columnHeaders?this.headersToExportRows(this.generateColumnGroupHeaders()):[],l=this.bodyToExportRows(this.rowLookup(o));return n.concat(l)},Export.prototype.genereateTable=function(t,e,o,r){var n=this.generateExportList(t,e,o,r);return this.genereateTableElement(n)},Export.prototype.rowLookup=function(t){var e=this,o=[];if("function"==typeof t)t.call(this.table).forEach(function(t){(t=e.table.rowManager.findRow(t))&&o.push(t)});else switch(t){case!0:case"visible":o=this.table.rowManager.getVisibleRows(!0);break;case"all":o=this.table.rowManager.rows;break;case"selected":o=this.table.modules.selectRow.selectedRows;break;case"active":default:o=this.table.rowManager.getDisplayRows()}return Object.assign([],o)},Export.prototype.generateColumnGroupHeaders=function(){var t=this,e=[];return(!1!==this.config.columnGroups?this.table.columnManager.columns:this.table.columnManager.columnsByIndex).forEach(function(o){var r=t.processColumnGroup(o);r&&e.push(r)}),e},Export.prototype.processColumnGroup=function(t){var e=this,o=t.columns,r=0,n=t.definition["title"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))]||t.definition.title,l={title:n,column:t,depth:1};if(o.length){if(l.subGroups=[],l.width=0,o.forEach(function(t){var o=e.processColumnGroup(t);o&&(l.width+=o.width,l.subGroups.push(o),o.depth>r&&(r=o.depth))}),l.depth+=r,!l.width)return!1}else{if(!this.columnVisCheck(t))return!1;l.width=1}return l},Export.prototype.columnVisCheck=function(t){return!1!==t.definition[this.colVisProp]&&(t.visible||!t.visible&&t.definition[this.colVisProp])},Export.prototype.headersToExportRows=function(t){function e(t,n){var l=r-n;if(void 0===o[n]&&(o[n]=[]),t.height=t.subGroups?1:l-t.depth+1,o[n].push(t),t.height>1)for(var a=1;a1)for(var i=1;ir&&(r=t.depth)}),t.forEach(function(t){e(t,0)}),o.forEach(function(t){var e=[];t.forEach(function(t){t?e.push(new ExportColumn(t.title,t.column.getComponent(),t.width,t.height,t.depth)):e.push(null)}),n.push(new ExportRow("header",e))}),n},Export.prototype.bodyToExportRows=function(t){var e=this,o=[],r=[];return this.table.columnManager.columnsByIndex.forEach(function(t){e.columnVisCheck(t)&&o.push(t.getComponent())}),!1!==this.config.columnCalcs&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&t.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&t.push(this.table.modules.columnCalcs.botRow)),t=t.filter(function(t){switch(t.type){case"group":return!1!==e.config.rowGroups;case"calc":return!1!==e.config.columnCalcs;case"row":return!(e.table.options.dataTree&&!1===e.config.dataTree&&t.modules.dataTree.parent)}return!0}),t.forEach(function(t,n){var l=t.getData(e.colVisProp),a=[],i=0;switch(t.type){case"group":i=t.level,a.push(new ExportColumn(t.key,t.getComponent(),o.length,1));break;case"calc":case"row":o.forEach(function(t){a.push(new ExportColumn(t._column.getFieldValue(l),t,1,1))}),e.table.options.dataTree&&!1!==e.config.dataTree&&(i=t.modules.dataTree.index)}r.push(new ExportRow(t.type,a,t.getComponent(),i))}),r},Export.prototype.genereateTableElement=function(t){var e=this,o=document.createElement("table"),r=document.createElement("thead"),n=document.createElement("tbody"),l=this.lookupTableStyles(),a=this.table.options["rowFormatter"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],i={};return i.rowFormatter=null!==a?a:this.table.options.rowFormatter,this.table.options.dataTree&&!1!==this.config.dataTree&&this.table.modExists("columnCalcs")&&(i.treeElementField=this.table.modules.dataTree.elementField),i.groupHeader=this.table.options["groupHeader"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],i.groupHeader&&!Array.isArray(i.groupHeader)&&(i.groupHeader=[i.groupHeader]),o.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),r,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),t.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),t.forEach(function(t,o){switch(t.type){case"header":r.appendChild(e.genereateHeaderElement(t,i,l));break;case"group":n.appendChild(e.genereateGroupElement(t,i,l));break;case"calc":n.appendChild(e.genereateCalcElement(t,i,l));break;case"row":var a=e.genereateRowElement(t,i,l);e.mapElementStyles(o%2&&l.evenRow?l.evenRow:l.oddRow,a,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),n.appendChild(a)}}),r.innerHTML&&o.appendChild(r),o.appendChild(n),this.mapElementStyles(this.table.element,o,["border-top","border-left","border-right","border-bottom"]),o},Export.prototype.lookupTableStyles=function(){var t={};return this.cloneTableStyle&&window.getComputedStyle&&(t.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),t.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),t.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),t.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),t.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],t.firstRow&&(t.styleCells=t.firstRow.getElementsByClassName("tabulator-cell"),t.firstCell=t.styleCells[0],t.lastCell=t.styleCells[t.styleCells.length-1])),t},Export.prototype.genereateHeaderElement=function(t,e,o){var r=this,n=document.createElement("tr");return t.columns.forEach(function(t){if(t){var e=document.createElement("th"),o=t.component._column.definition.cssClass?t.component._column.definition.cssClass.split(" "):[];e.colSpan=t.width,e.rowSpan=t.height,e.innerHTML=t.value,r.cloneTableStyle&&(e.style.boxSizing="border-box"),o.forEach(function(t){e.classList.add(t)}),r.mapElementStyles(t.component.getElement(),e,["text-align","border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),r.mapElementStyles(t.component._column.contentElement,e,["padding-top","padding-left","padding-right","padding-bottom"]),t.component._column.visible?r.mapElementStyles(t.component.getElement(),e,["width"]):t.component._column.definition.width&&(e.style.width=t.component._column.definition.width+"px"),t.component._column.parent&&r.mapElementStyles(t.component._column.parent.groupElement,e,["border-top"]),n.appendChild(e)}}),n},Export.prototype.genereateGroupElement=function(t,e,o){var r=document.createElement("tr"),n=document.createElement("td"),l=t.columns[0];return r.classList.add("tabulator-print-table-row"),e.groupHeader&&e.groupHeader[t.indent]?l.value=e.groupHeader[t.indent](l.value,t.component._group.getRowCount(),t.component._group.getData(),t.component):!1===e.groupHeader?l.value=l.value:l.value=t.component._group.generator(l.value,t.component._group.getRowCount(),t.component._group.getData(),t.component),n.colSpan=l.width,n.innerHTML=l.value,r.classList.add("tabulator-print-table-group"),r.classList.add("tabulator-group-level-"+t.indent),l.component.getVisibility()&&r.classList.add("tabulator-group-visible"),this.mapElementStyles(o.firstGroup,r,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(o.firstGroup,n,["padding-top","padding-left","padding-right","padding-bottom"]),r.appendChild(n),r},Export.prototype.genereateCalcElement=function(t,e,o){var r=this.genereateRowElement(t,e,o);return r.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(o.calcRow,r,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),r},Export.prototype.genereateRowElement=function(t,e,o){var r=this,n=document.createElement("tr");return n.classList.add("tabulator-print-table-row"),t.columns.forEach(function(l){if(l){var a=document.createElement("td"),s=l.component._column,p=l.value,c={modules:{},getValue:function(){return p},getField:function(){return s.definition.field},getElement:function(){return a},getColumn:function(){return s.getComponent()},getData:function(){return rowData},getRow:function(){return t.getComponent()},getComponent:function(){return c},column:s};if((s.definition.cssClass?s.definition.cssClass.split(" "):[]).forEach(function(t){a.classList.add(t)}),r.table.modExists("format")&&!1!==r.config.formatCells)p=r.table.modules.format.formatExportValue(c,r.colVisProp);else switch(void 0===p?"undefined":_typeof(p)){case"object":p=JSON.stringify(p);break;case"undefined":case"null":p="";break;default:p=p}if(p instanceof Node?a.appendChild(p):a.innerHTML=p,o.firstCell&&(r.mapElementStyles(o.firstCell,a,["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size"]),s.definition.align&&(a.style.textAlign=s.definition.align)),r.table.options.dataTree&&!1!==r.config.dataTree&&(e.treeElementField&&e.treeElementField==s.field||!e.treeElementField&&0==i)&&(t.component._row.modules.dataTree.controlEl&&a.insertBefore(t.component._row.modules.dataTree.controlEl.cloneNode(!0),a.firstChild),t.component._row.modules.dataTree.branchEl&&a.insertBefore(t.component._row.modules.dataTree.branchEl.cloneNode(!0),a.firstChild)),n.appendChild(a),c.modules.format&&c.modules.format.renderedCallback&&c.modules.format.renderedCallback(),e.rowFormatter&&!1!==r.config.formatCells){var u=t.getComponent();u.getElement=function(){return n},e.rowFormatter(u)}}}),n},Export.prototype.genereateHTMLTable=function(t){var e=document.createElement("div");return e.appendChild(this.genereateTableElement(t)),e.innerHTML},Export.prototype.getHtml=function(t,e,o,r){var n=this.generateExportList(o||this.table.options.htmlOutputConfig,e,t,r||"htmlOutput");return this.genereateHTMLTable(n)},Export.prototype.mapElementStyles=function(t,e,o){if(this.cloneTableStyle&&t&&e){var r={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var n=window.getComputedStyle(t);o.forEach(function(t){e.style[r[t]]=n.getPropertyValue(t)})}}},Tabulator.prototype.registerModule("export",Export); \ No newline at end of file diff --git a/app/static/vendors/tabulator/js/modules/filter.js b/app/static/vendors/tabulator/js/modules/filter.js new file mode 100644 index 0000000..aaed59b --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/filter.js @@ -0,0 +1,807 @@ +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/app/static/vendors/tabulator/js/modules/filter.min.js b/app/static/vendors/tabulator/js/modules/filter.min.js new file mode 100644 index 0000000..8be2662 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/filter.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},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/app/static/vendors/tabulator/js/modules/format.js b/app/static/vendors/tabulator/js/modules/format.js new file mode 100644 index 0000000..5714027 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/format.js @@ -0,0 +1,725 @@ +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/app/static/vendors/tabulator/js/modules/format.min.js b/app/static/vendors/tabulator/js/modules/format.min.js new file mode 100644 index 0000000..0b39b61 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/format.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Format=function(e){this.table=e};Format.prototype.initializeColumn=function(e){e.modules.format=this.lookupFormatter(e,""),void 0!==e.definition.formatterPrint&&(e.modules.format.print=this.lookupFormatter(e,"Print")),void 0!==e.definition.formatterClipboard&&(e.modules.format.clipboard=this.lookupFormatter(e,"Clipboard")),void 0!==e.definition.formatterHtmlOutput&&(e.modules.format.htmlOutput=this.lookupFormatter(e,"HtmlOutput"))},Format.prototype.lookupFormatter=function(e,t){var o={params:e.definition["formatter"+t+"Params"]||{}},r=e.definition["formatter"+t];switch(void 0===r?"undefined":_typeof(r)){case"string":"tick"===r&&(r="tickCross",void 0===o.params.crossElement&&(o.params.crossElement=!1),console.warn("DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false")),this.formatters[r]?o.formatter=this.formatters[r]:(console.warn("Formatter Error - No such formatter found: ",r),o.formatter=this.formatters.plaintext);break;case"function":o.formatter=r;break;default:o.formatter=this.formatters.plaintext}return o},Format.prototype.cellRendered=function(e){e.modules.format&&e.modules.format.renderedCallback&&e.modules.format.renderedCallback()},Format.prototype.formatValue=function(e){function t(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t}var o=e.getComponent(),r="function"==typeof e.column.modules.format.params?e.column.modules.format.params(o):e.column.modules.format.params;return e.column.modules.format.formatter.call(this,o,r,t)},Format.prototype.formatExportValue=function(e,t){var o,r=e.column.modules.format[t];if(r){var a=function(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t};return o="function"==typeof r.params?r.params(component):r.params,r.formatter.call(this,e.getComponent(),o,a)}return this.formatValue(e)},Format.prototype.sanitizeHTML=function(e){if(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};return String(e).replace(/[&<>"'`=\/]/g,function(e){return t[e]})}return e},Format.prototype.emptyToSpace=function(e){return null===e||void 0===e||""===e?" ":e},Format.prototype.getFormatter=function(e){var e;switch(void 0===e?"undefined":_typeof(e)){case"string":this.formatters[e]?e=this.formatters[e]:(console.warn("Formatter Error - No such formatter found: ",e),e=this.formatters.plaintext);break;case"function":e=e;break;default:e=this.formatters.plaintext}return e},Format.prototype.formatters={plaintext:function(e,t,o){return this.emptyToSpace(this.sanitizeHTML(e.getValue()))},html:function(e,t,o){return e.getValue()},textarea:function(e,t,o){return e.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(e.getValue()))},money:function(e,t,o){var r,a,n,l,i=parseFloat(e.getValue()),s=t.decimal||".",c=t.thousand||",",u=t.symbol||"",d=!!t.symbolAfter,m=void 0!==t.precision?t.precision:2;if(isNaN(i))return this.emptyToSpace(this.sanitizeHTML(e.getValue()));for(r=!1!==m?i.toFixed(m):i,r=String(r).split("."),a=r[0],n=r.length>1?s+r[1]:"",l=/(\d+)(\d{3})/;l.test(a);)a=a.replace(l,"$1"+c+"$2");return d?a+n+u:u+a+n},link:function(e,t,o){var r,a=e.getValue(),n=t.urlPrefix||"",l=t.download,i=a,s=document.createElement("a");if(t.labelField&&(r=e.getData(),i=r[t.labelField]),t.label)switch(_typeof(t.label)){case"string":i=t.label;break;case"function":i=t.label(e)}if(i){if(t.urlField&&(r=e.getData(),a=r[t.urlField]),t.url)switch(_typeof(t.url)){case"string":a=t.url;break;case"function":a=t.url(e)}return s.setAttribute("href",n+a),t.target&&s.setAttribute("target",t.target),t.download&&(l="function"==typeof l?l(e):!0===l?"":l,s.setAttribute("download",l)),s.innerHTML=this.emptyToSpace(this.sanitizeHTML(i)),s}return" "},image:function(e,t,o){var r=document.createElement("img");switch(r.setAttribute("src",e.getValue()),_typeof(t.height)){case"number":r.style.height=t.height+"px";break;case"string":r.style.height=t.height}switch(_typeof(t.width)){case"number":r.style.width=t.width+"px";break;case"string":r.style.width=t.width}return r.addEventListener("load",function(){e.getRow().normalizeHeight()}),r},tickCross:function(e,t,o){var r=e.getValue(),a=e.getElement(),n=t.allowEmpty,l=t.allowTruthy,i=void 0!==t.tickElement?t.tickElement:'',s=void 0!==t.crossElement?t.crossElement:'';return l&&r||!0===r||"true"===r||"True"===r||1===r||"1"===r?(a.setAttribute("aria-checked",!0),i||""):!n||"null"!==r&&""!==r&&null!==r&&void 0!==r?(a.setAttribute("aria-checked",!1),s||""):(a.setAttribute("aria-checked","mixed"),"")},datetime:function(e,t,o){var r=t.inputFormat||"YYYY-MM-DD hh:mm:ss",a=t.outputFormat||"DD/MM/YYYY hh:mm:ss",n=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",l=e.getValue(),i=moment(l,r);return i.isValid()?t.timezone?i.tz(t.timezone).format(a):i.format(a):!0===n?l:"function"==typeof n?n(l):n},datetimediff:function(e,t,o){var r=t.inputFormat||"YYYY-MM-DD hh:mm:ss",a=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",n=void 0!==t.suffix&&t.suffix,l=void 0!==t.unit?t.unit:void 0,i=void 0!==t.humanize&&t.humanize,s=void 0!==t.date?t.date:moment(),c=e.getValue(),u=moment(c,r);return u.isValid()?i?moment.duration(u.diff(s)).humanize(n):u.diff(s,l)+(n?" "+n:""):!0===a?c:"function"==typeof a?a(c):a},lookup:function(e,t,o){var r=e.getValue();return void 0===t[r]?(console.warn("Missing display value for "+r),r):t[r]},star:function(e,t,o){var r=e.getValue(),a=e.getElement(),n=t&&t.stars?t.stars:5,l=document.createElement("span"),i=document.createElementNS("http://www.w3.org/2000/svg","svg");l.style.verticalAlign="middle",i.setAttribute("width","14"),i.setAttribute("height","14"),i.setAttribute("viewBox","0 0 512 512"),i.setAttribute("xml:space","preserve"),i.style.padding="0 1px",r=r&&!isNaN(r)?parseInt(r):0,r=Math.max(0,Math.min(r,n));for(var s=1;s<=n;s++){var c=i.cloneNode(!0);c.innerHTML=s<=r?'':'',l.appendChild(c)}return a.style.whiteSpace="nowrap",a.style.overflow="hidden",a.style.textOverflow="ellipsis",a.setAttribute("aria-label",r),l},traffic:function(e,t,o){var r,a,n=this.sanitizeHTML(e.getValue())||0,l=document.createElement("span"),i=t&&t.max?t.max:100,s=t&&t.min?t.min:0,c=t&&void 0!==t.color?t.color:["red","orange","green"],u="#666666";if(!isNaN(n)&&void 0!==e.getValue()){switch(l.classList.add("tabulator-traffic-light"),a=parseFloat(n)<=i?parseFloat(n):i,a=parseFloat(a)>=s?parseFloat(a):s,r=(i-s)/100,a=Math.round((a-s)/r),void 0===c?"undefined":_typeof(c)){case"string":u=c;break;case"function":u=c(n);break;case"object":if(Array.isArray(c)){var d=100/c.length,m=Math.floor(a/d);m=Math.min(m,c.length-1),m=Math.max(m,0),u=c[m];break}}return l.style.backgroundColor=u,l}},progress:function(e,t,o){var r,a,n,l,i,s=this.sanitizeHTML(e.getValue())||0,c=e.getElement(),u=t&&t.max?t.max:100,d=t&&t.min?t.min:0,m=t&&t.legendAlign?t.legendAlign:"center";switch(a=parseFloat(s)<=u?parseFloat(s):u,a=parseFloat(a)>=d?parseFloat(a):d,r=(u-d)/100,a=Math.round((a-d)/r),_typeof(t.color)){case"string":n=t.color;break;case"function":n=t.color(s);break;case"object":if(Array.isArray(t.color)){var p=100/t.color.length,f=Math.floor(a/p);f=Math.min(f,t.color.length-1),f=Math.max(f,0),n=t.color[f];break}default:n="#2DC214"}switch(_typeof(t.legend)){case"string":l=t.legend;break;case"function":l=t.legend(s);break;case"boolean":l=s;break;default:l=!1}switch(_typeof(t.legendColor)){case"string":i=t.legendColor;break;case"function":i=t.legendColor(s);break;case"object":if(Array.isArray(t.legendColor)){var p=100/t.legendColor.length,f=Math.floor(a/p);f=Math.min(f,t.legendColor.length-1),f=Math.max(f,0),i=t.legendColor[f]}break;default:i="#000"}c.style.minWidth="30px",c.style.position="relative",c.setAttribute("aria-label",a);var h=document.createElement("div");if(h.style.display="inline-block",h.style.position="relative",h.style.width=a+"%",h.style.backgroundColor=n,h.style.height="100%",h.setAttribute("data-max",u),h.setAttribute("data-min",d),l){var g=document.createElement("div");g.style.position="absolute",g.style.top="4px",g.style.left=0,g.style.textAlign=m,g.style.width="100%",g.style.color=i,g.innerHTML=l}return o(function(){if(!(e instanceof CellComponent)){var t=document.createElement("div");t.style.position="absolute",t.style.top="4px",t.style.bottom="4px",t.style.left="4px",t.style.right="4px",c.appendChild(t),c=t}c.appendChild(h),l&&c.appendChild(g)}),""},color:function(e,t,o){return e.getElement().style.backgroundColor=this.sanitizeHTML(e.getValue()),""},buttonTick:function(e,t,o){return''},buttonCross:function(e,t,o){return''},rownum:function(e,t,o){return this.table.rowManager.activeRows.indexOf(e.getRow()._getSelf())+1},handle:function(e,t,o){return e.getElement().classList.add("tabulator-row-handle"),"
      "},responsiveCollapse:function(e,t,o){function r(e){var t=n.element;n.open=e,t&&(n.open?(a.classList.add("open"),t.style.display=""):(a.classList.remove("open"),t.style.display="none"))}var a=document.createElement("div"),n=e.getRow()._row.modules.responsiveLayout;return a.classList.add("tabulator-responsive-collapse-toggle"),a.innerHTML="+-",e.getElement().classList.add("tabulator-row-handle"),a.addEventListener("click",function(e){e.stopImmediatePropagation(),r(!n.open)}),r(n.open),a},rowSelection:function(e){var t=this,o=document.createElement("input");if(o.type="checkbox",this.table.modExists("selectRow",!0))if(o.addEventListener("click",function(e){e.stopPropagation()}),"function"==typeof e.getRow){var r=e.getRow();o.addEventListener("change",function(e){r.toggleSelect()}),o.checked=r.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(r,o)}else o.addEventListener("change",function(e){t.table.modules.selectRow.selectedRows.length?t.table.deselectRow():t.table.selectRow()}),this.table.modules.selectRow.registerHeaderSelectCheckbox(o);return o}},Tabulator.prototype.registerModule("format",Format); \ No newline at end of file diff --git a/app/static/vendors/tabulator/js/modules/frozen_columns.js b/app/static/vendors/tabulator/js/modules/frozen_columns.js new file mode 100644 index 0000000..fdbc4ab --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/frozen_columns.js @@ -0,0 +1,275 @@ +/* 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/app/static/vendors/tabulator/js/modules/frozen_columns.min.js b/app/static/vendors/tabulator/js/modules/frozen_columns.min.js new file mode 100644 index 0000000..bf2bb60 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/frozen_columns.min.js @@ -0,0 +1,2 @@ +/* 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/app/static/vendors/tabulator/js/modules/frozen_rows.min.js b/app/static/vendors/tabulator/js/modules/frozen_rows.min.js new file mode 100644 index 0000000..c38e992 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/frozen_rows.min.js @@ -0,0 +1,2 @@ +/* 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/app/static/vendors/tabulator/js/modules/group_rows.js b/app/static/vendors/tabulator/js/modules/group_rows.js new file mode 100644 index 0000000..05731ec --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/group_rows.js @@ -0,0 +1,1087 @@ +/* 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/app/static/vendors/tabulator/js/modules/group_rows.min.js b/app/static/vendors/tabulator/js/modules/group_rows.min.js new file mode 100644 index 0000000..6039f2c --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/group_rows.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var GroupComponent=function(t){this._group=t,this.type="GroupComponent"};GroupComponent.prototype.getKey=function(){return this._group.key},GroupComponent.prototype.getField=function(){return this._group.field},GroupComponent.prototype.getElement=function(){return this._group.element},GroupComponent.prototype.getRows=function(){return this._group.getRows(!0)},GroupComponent.prototype.getSubGroups=function(){return this._group.getSubGroups(!0)},GroupComponent.prototype.getParentGroup=function(){return!!this._group.parent&&this._group.parent.getComponent()},GroupComponent.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._group.visible},GroupComponent.prototype.isVisible=function(){return this._group.visible},GroupComponent.prototype.show=function(){this._group.show()},GroupComponent.prototype.hide=function(){this._group.hide()},GroupComponent.prototype.toggle=function(){this._group.toggleVisibility()},GroupComponent.prototype._getSelf=function(){return this._group},GroupComponent.prototype.getTable=function(){return this._group.groupManager.table};var Group=function(t,o,e,r,i,s,n){this.groupManager=t,this.parent=o,this.key=r,this.level=e,this.field=i,this.hasSubGroups=e-1?e?this.rows.splice(i+1,0,t):this.rows.splice(i,0,t):e?this.rows.push(t):this.rows.unshift(t),t.modules.group=this,this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)},Group.prototype.scrollHeader=function(t){this.arrowElement.style.marginLeft=t,this.groupList.forEach(function(o){o.scrollHeader(t)})},Group.prototype.getRowIndex=function(t){},Group.prototype.conformRowData=function(t){return this.field?t[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(t=this.parent.conformRowData(t)),t},Group.prototype.removeRow=function(t){var o=this.rows.indexOf(t),e=t.getElement();o>-1&&this.rows.splice(o,1),this.groupManager.table.options.groupValues||this.rows.length?(e.parentNode&&e.parentNode.removeChild(e),this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)):(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0))},Group.prototype.removeGroup=function(t){var o,e=t.level+"_"+t.key;this.groups[e]&&(delete this.groups[e],o=this.groupList.indexOf(t),o>-1&&this.groupList.splice(o,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))},Group.prototype.getHeadersAndRows=function(t){var o=[];return o.push(this),this._visSet(),this.visible?this.groupList.length?this.groupList.forEach(function(e){o=o.concat(e.getHeadersAndRows(t))}):(!t&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),o.push(this.calcs.top)),o=o.concat(this.rows),!t&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),o.push(this.calcs.bottom))):this.groupList.length||"table"==this.groupManager.table.options.columnCalcs||this.groupManager.table.modExists("columnCalcs")&&(!t&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),o.push(this.calcs.top))),!t&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),o.push(this.calcs.bottom)))),o},Group.prototype.getData=function(t,o){var e=[];return this._visSet(),(!t||t&&this.visible)&&this.rows.forEach(function(t){e.push(t.getData(o||"data"))}),e},Group.prototype.getRowCount=function(){var t=0;return this.groupList.length?this.groupList.forEach(function(o){t+=o.getRowCount()}):t=this.rows.length,t},Group.prototype.toggleVisibility=function(){this.visible?this.hide():this.show()},Group.prototype.hide=function(){this.visible=!1,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination?this.groupManager.updateGroupRows(!0):(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach(function(t){t.getHeadersAndRows().forEach(function(t){t.detachElement()})}):this.rows.forEach(function(t){var o=t.getElement();o.parentNode.removeChild(o)}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()),this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!1)},Group.prototype.show=function(){var t=this;if(t.visible=!0,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination)this.groupManager.updateGroupRows(!0);else{this.element.classList.add("tabulator-group-visible");var o=t.getElement();this.groupList.length?this.groupList.forEach(function(t){t.getHeadersAndRows().forEach(function(t){var e=t.getElement();o.parentNode.insertBefore(e,o.nextSibling),t.initialize(),o=e})}):t.rows.forEach(function(t){var e=t.getElement();o.parentNode.insertBefore(e,o.nextSibling),t.initialize(),o=e}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()}this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!0)},Group.prototype._visSet=function(){var t=[];"function"==typeof this.visible&&(this.rows.forEach(function(o){t.push(o.getData())}),this.visible=this.visible(this.key,this.getRowCount(),t,this.getComponent()))},Group.prototype.getRowGroup=function(t){var o=!1;return this.groupList.length?this.groupList.forEach(function(e){var r=e.getRowGroup(t);r&&(o=r)}):this.rows.find(function(o){return o===t})&&(o=this),o},Group.prototype.getSubGroups=function(t){var o=[];return this.groupList.forEach(function(e){o.push(t?e.getComponent():e)}),o},Group.prototype.getRows=function(t){var o=[];return this.rows.forEach(function(e){o.push(t?e.getComponent():e)}),o},Group.prototype.generateGroupHeaderContents=function(){var t=[];for(this.rows.forEach(function(o){t.push(o.getData())}),this.elementContents=this.generator(this.key,this.getRowCount(),t,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);"string"==typeof this.elementContents?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)},Group.prototype.getElement=function(){this.addBindingsd=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var t=0;tr.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),t.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],t.table.modules.localize.bind("groups|item",function(o,e){t.headerGenerator[0]=function(t,r,i){return(void 0===t?"":t)+"("+r+" "+(1===r?o:e.groups.items)+")"}}),this.groupIDLookups=[],Array.isArray(o)||o)this.table.modExists("columnCalcs")&&"table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.removeCalcs();else if(this.table.modExists("columnCalcs")&&"group"!=this.table.options.columnCalcs){var i=this.table.columnManager.getRealColumns();i.forEach(function(o){o.definition.topCalc&&t.table.modules.columnCalcs.initializeTopRow(),o.definition.bottomCalc&&t.table.modules.columnCalcs.initializeBottomRow()})}Array.isArray(o)||(o=[o]),o.forEach(function(o,e){var r,i;"function"==typeof o?r=o:(i=t.table.columnManager.getColumnByField(o),r=i?function(t){return i.getFieldValue(t)}:function(t){return t[o]}),t.groupIDLookups.push({field:"function"!=typeof o&&o,func:r,values:!!t.allowedValues&&t.allowedValues[e]})}),e&&(Array.isArray(e)||(e=[e]),e.forEach(function(t){t="function"==typeof t?t:function(){return!0}}),t.startOpen=e),r&&(t.headerGenerator=Array.isArray(r)?r:[r]),this.initialized=!0},GroupRows.prototype.setDisplayIndex=function(t){this.displayIndex=t},GroupRows.prototype.getDisplayIndex=function(){return this.displayIndex},GroupRows.prototype.getRows=function(t){return this.groupIDLookups.length?(this.table.options.dataGrouping.call(this.table),this.generateGroups(t),this.table.options.dataGrouped&&this.table.options.dataGrouped.call(this.table,this.getGroups(!0)),this.updateGroupRows()):t.slice(0)},GroupRows.prototype.getGroups=function(t){var o=[];return this.groupList.forEach(function(e){o.push(t?e.getComponent():e)}),o},GroupRows.prototype.getChildGroups=function(t){var o=this,e=[];return t||(t=this),t.groupList.forEach(function(t){t.groupList.length?e=e.concat(o.getChildGroups(t)):e.push(t)}),e},GroupRows.prototype.wipe=function(){this.groupList.forEach(function(t){t.wipe()})},GroupRows.prototype.pullGroupListData=function(t){var o=this,e=[];return t.forEach(function(t){var r={};r.level=0,r.rowCount=0,r.headerContent="";var i=[];t.hasSubGroups?(i=o.pullGroupListData(t.groupList),r.level=t.level,r.rowCount=i.length-t.groupList.length,r.headerContent=t.generator(t.key,r.rowCount,t.rows,t),e.push(r),e=e.concat(i)):(r.level=t.level,r.headerContent=t.generator(t.key,t.rows.length,t.rows,t),r.rowCount=t.getRows().length,e.push(r),t.getRows().forEach(function(t){e.push(t.getData("data"))}))}),e},GroupRows.prototype.getGroupedData=function(){return this.pullGroupListData(this.groupList)},GroupRows.prototype.getRowGroup=function(t){var o=!1;return this.groupList.forEach(function(e){var r=e.getRowGroup(t);r&&(o=r)}),o},GroupRows.prototype.countGroups=function(){return this.groupList.length},GroupRows.prototype.generateGroups=function(t){var o=this,e=o.groups;o.groups={},o.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach(function(t){o.createGroup(t,0,e)}),t.forEach(function(t){o.assignRowToExistingGroup(t,e)})):t.forEach(function(t){o.assignRowToGroup(t,e)})},GroupRows.prototype.createGroup=function(t,o,e){var r,i=o+"_"+t;e=e||[],r=new Group(this,!1,o,t,this.groupIDLookups[0].field,this.headerGenerator[0],e[i]),this.groups[i]=r,this.groupList.push(r)},GroupRows.prototype.assignRowToExistingGroup=function(t,o){var e=this.groupIDLookups[0].func(t.getData()),r="0_"+e;this.groups[r]&&this.groups[r].addRow(t)},GroupRows.prototype.assignRowToGroup=function(t,o){var e=this.groupIDLookups[0].func(t.getData()),r=!this.groups["0_"+e];return r&&this.createGroup(e,0,o),this.groups["0_"+e].addRow(t),!r},GroupRows.prototype.updateGroupRows=function(t){var o=this,e=[];if(o.groupList.forEach(function(t){e=e.concat(t.getHeadersAndRows())}),t){var r=o.table.rowManager.setDisplayRows(e,this.getDisplayIndex());!0!==r&&this.setDisplayIndex(r),o.table.rowManager.refreshActiveData("group",!0,!0)}return e},GroupRows.prototype.scrollHeaders=function(t){t+="px",this.groupList.forEach(function(o){o.scrollHeader(t)})},GroupRows.prototype.removeGroup=function(t){var o,e=t.level+"_"+t.key;this.groups[e]&&(delete this.groups[e],(o=this.groupList.indexOf(t))>-1&&this.groupList.splice(o,1))},Tabulator.prototype.registerModule("groupRows",GroupRows); \ No newline at end of file diff --git a/app/static/vendors/tabulator/js/modules/history.js b/app/static/vendors/tabulator/js/modules/history.js new file mode 100644 index 0000000..1c3ae3e --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/history.js @@ -0,0 +1,141 @@ +/* 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/app/static/vendors/tabulator/js/modules/history.min.js b/app/static/vendors/tabulator/js/modules/history.min.js new file mode 100644 index 0000000..5df3187 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/history.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var History=function(t){this.table=t,this.history=[],this.index=-1};History.prototype.clear=function(){this.history=[],this.index=-1},History.prototype.action=function(t,o,e){this.history=this.history.slice(0,this.index+1),this.history.push({type:t,component:o,data:e}),this.index++},History.prototype.getHistoryUndoSize=function(){return this.index+1},History.prototype.getHistoryRedoSize=function(){return this.history.length-(this.index+1)},History.prototype.undo=function(){if(this.index>-1){var t=this.history[this.index];return this.undoers[t.type].call(this,t),this.index--,this.table.options.historyUndo.call(this.table,t.type,t.component.getComponent(),t.data),!0}return console.warn("History Undo Error - No more history to undo"),!1},History.prototype.redo=function(){if(this.history.length-1>this.index){this.index++;var t=this.history[this.index];return this.redoers[t.type].call(this,t),this.table.options.historyRedo.call(this.table,t.type,t.component.getComponent(),t.data),!0}return console.warn("History Redo Error - No more history to redo"),!1},History.prototype.undoers={cellEdit:function(t){t.component.setValueProcessData(t.data.oldValue)},rowAdd:function(t){t.component.deleteActual()},rowDelete:function(t){var o=this.table.rowManager.addRowActual(t.data.data,t.data.pos,t.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(t.component,o)},rowMove:function(t){this.table.rowManager.moveRowActual(t.component,this.table.rowManager.rows[t.data.posFrom],!t.data.after),this.table.rowManager.redraw()}},History.prototype.redoers={cellEdit:function(t){t.component.setValueProcessData(t.data.newValue)},rowAdd:function(t){var o=this.table.rowManager.addRowActual(t.data.data,t.data.pos,t.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(t.component,o)},rowDelete:function(t){t.component.deleteActual()},rowMove:function(t){this.table.rowManager.moveRowActual(t.component,this.table.rowManager.rows[t.data.posTo],t.data.after),this.table.rowManager.redraw()}},History.prototype._rebindRow=function(t,o){this.history.forEach(function(e){if(e.component instanceof Row)e.component===t&&(e.component=o);else if(e.component instanceof Cell&&e.component.row===t){var i=e.component.column.getField();i&&(e.component=o.getCell(i))}})},Tabulator.prototype.registerModule("history",History); \ No newline at end of file diff --git a/app/static/vendors/tabulator/js/modules/html_table_import.js b/app/static/vendors/tabulator/js/modules/html_table_import.js new file mode 100644 index 0000000..34fed7c --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/html_table_import.js @@ -0,0 +1,191 @@ +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/app/static/vendors/tabulator/js/modules/html_table_import.min.js b/app/static/vendors/tabulator/js/modules/html_table_import.min.js new file mode 100644 index 0000000..aef2b5c --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/html_table_import.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},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/app/static/vendors/tabulator/js/modules/keybindings.min.js b/app/static/vendors/tabulator/js/modules/keybindings.min.js new file mode 100644 index 0000000..3535b88 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/keybindings.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},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/app/static/vendors/tabulator/js/modules/menu.js b/app/static/vendors/tabulator/js/modules/menu.js new file mode 100644 index 0000000..d86575f --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/menu.js @@ -0,0 +1,200 @@ +/* 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/app/static/vendors/tabulator/js/modules/menu.min.js b/app/static/vendors/tabulator/js/modules/menu.min.js new file mode 100644 index 0000000..40b8241 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/menu.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var Menu=function(e){this.table=e,this.menuEl=!1,this.blurEvent=this.hideMenu.bind(this),this.escEvent=this.escMenu.bind(this),this.nestedMenuBlock=!1};Menu.prototype.initializeColumnHeader=function(e){var t,n=this;e.definition.headerContextMenu&&e.getElement().addEventListener("contextmenu",function(t){var o="function"==typeof e.definition.headerContextMenu?e.definition.headerContextMenu(e.getComponent()):e.definition.headerContextMenu;t.preventDefault(),n.loadMenu(t,e,o)}),e.definition.headerMenu&&(t=document.createElement("span"),t.classList.add("tabulator-header-menu-button"),t.innerHTML="⋮",t.addEventListener("click",function(t){var o="function"==typeof e.definition.headerMenu?e.definition.headerMenu(e.getComponent()):e.definition.headerMenu;t.stopPropagation(),t.preventDefault(),n.loadMenu(t,e,o)}),e.titleElement.insertBefore(t,e.titleElement.firstChild))},Menu.prototype.initializeCell=function(e){var t=this;e.getElement().addEventListener("contextmenu",function(n){var o="function"==typeof e.column.definition.contextMenu?e.column.definition.contextMenu(e.getComponent()):e.column.definition.contextMenu;n.stopImmediatePropagation(),t.loadMenu(n,e,o)})},Menu.prototype.initializeRow=function(e){var t=this;e.getElement().addEventListener("contextmenu",function(n){var o="function"==typeof t.table.options.rowContextMenu?t.table.options.rowContextMenu(e.getComponent()):t.table.options.rowContextMenu;t.loadMenu(n,e,o)})},Menu.prototype.initializeGroup=function(e){var t=this;e.getElement().addEventListener("contextmenu",function(n){var o="function"==typeof t.table.options.groupContextMenu?t.table.options.groupContextMenu(e.getComponent()):t.table.options.groupContextMenu;t.loadMenu(n,e,o)})},Menu.prototype.loadMenu=function(e,t,n){var o=this,i=Math.max(document.body.offsetHeight,window.innerHeight);if(e.preventDefault(),n&&n.length){if(this.nestedMenuBlock){if(this.isOpen())return}else this.nestedMenuBlock=setTimeout(function(){o.nestedMenuBlock=!1},100);this.hideMenu(),this.menuEl=document.createElement("div"),this.menuEl.classList.add("tabulator-menu"),n.forEach(function(e){var n=document.createElement("div"),i=e.label,u=e.disabled;e.separator?n.classList.add("tabulator-menu-separator"):(n.classList.add("tabulator-menu-item"),"function"==typeof i&&(i=i(t.getComponent())),i instanceof Node?n.appendChild(i):n.innerHTML=i,"function"==typeof u&&(u=u(t.getComponent())),u?(n.classList.add("tabulator-menu-item-disabled"),n.addEventListener("click",function(e){e.stopPropagation()})):n.addEventListener("click",function(n){o.hideMenu(),e.action(n,t.getComponent())})),o.menuEl.appendChild(n)}),this.menuEl.style.top=e.pageY+"px",this.menuEl.style.left=e.pageX+"px",document.body.addEventListener("click",this.blurEvent),this.table.rowManager.element.addEventListener("scroll",this.blurEvent),setTimeout(function(){document.body.addEventListener("contextmenu",o.blurEvent)},100),document.body.addEventListener("keydown",this.escEvent),document.body.appendChild(this.menuEl),e.pageX+this.menuEl.offsetWidth>=document.body.offsetWidth&&(this.menuEl.style.left="",this.menuEl.style.right=document.body.offsetWidth-e.pageX+"px"),e.pageY+this.menuEl.offsetHeight>=i&&(this.menuEl.style.top="",this.menuEl.style.bottom=i-e.pageY+"px")}},Menu.prototype.isOpen=function(){return!!this.menuEl.parentNode},Menu.prototype.escMenu=function(e){27==e.keyCode&&this.hideMenu()},Menu.prototype.hideMenu=function(){this.menuEl.parentNode&&this.menuEl.parentNode.removeChild(this.menuEl),this.escEvent&&document.body.removeEventListener("keydown",this.escEvent),this.blurEvent&&(document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent))},Menu.prototype.menus={},Tabulator.prototype.registerModule("menu",Menu); \ No newline at end of file diff --git a/app/static/vendors/tabulator/js/modules/moveable_columns.js b/app/static/vendors/tabulator/js/modules/moveable_columns.js new file mode 100644 index 0000000..5244016 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/moveable_columns.js @@ -0,0 +1,289 @@ +/* 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/app/static/vendors/tabulator/js/modules/moveable_columns.min.js b/app/static/vendors/tabulator/js/modules/moveable_columns.min.js new file mode 100644 index 0000000..0135a3b --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/moveable_columns.min.js @@ -0,0 +1,2 @@ +/* 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/app/static/vendors/tabulator/js/modules/moveable_rows.min.js b/app/static/vendors/tabulator/js/modules/moveable_rows.min.js new file mode 100644 index 0000000..f928535 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/moveable_rows.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},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/app/static/vendors/tabulator/js/modules/mutator.js b/app/static/vendors/tabulator/js/modules/mutator.js new file mode 100644 index 0000000..e5b5dad --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/mutator.js @@ -0,0 +1,116 @@ +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/app/static/vendors/tabulator/js/modules/mutator.min.js b/app/static/vendors/tabulator/js/modules/mutator.min.js new file mode 100644 index 0000000..00005d1 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/mutator.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},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/app/static/vendors/tabulator/js/modules/page.js b/app/static/vendors/tabulator/js/modules/page.js new file mode 100644 index 0000000..d37b814 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/page.js @@ -0,0 +1,730 @@ +/* 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/app/static/vendors/tabulator/js/modules/page.min.js b/app/static/vendors/tabulator/js/modules/page.min.js new file mode 100644 index 0000000..c2835ba --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/page.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var Page=function(e){this.table=e,this.mode="local",this.progressiveLoad=!1,this.size=0,this.page=1,this.count=5,this.max=1,this.displayIndex=0,this.initialLoad=!0,this.pageSizes=[],this.dataReceivedNames={},this.dataSentNames={},this.createElements()};Page.prototype.createElements=function(){var e;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),e=document.createElement("button"),e.classList.add("tabulator-page"),e.setAttribute("type","button"),e.setAttribute("role","button"),e.setAttribute("aria-label",""),e.setAttribute("title",""),this.firstBut=e.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=e.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=e.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=e.cloneNode(!0),this.lastBut.setAttribute("data-page","last"),this.table.options.paginationSizeSelector&&(this.pageSizeSelect=document.createElement("select"),this.pageSizeSelect.classList.add("tabulator-page-size"))},Page.prototype.generatePageSizeSelectList=function(){var e=this,t=[];if(this.pageSizeSelect){if(Array.isArray(this.table.options.paginationSizeSelector))t=this.table.options.paginationSizeSelector,this.pageSizes=t,-1==this.pageSizes.indexOf(this.size)&&t.unshift(this.size);else if(-1==this.pageSizes.indexOf(this.size)){t=[];for(var a=1;a<5;a++)t.push(this.size*a);this.pageSizes=t}else t=this.pageSizes;for(;this.pageSizeSelect.firstChild;)this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);t.forEach(function(t){var a=document.createElement("option");a.value=t,!0===t?e.table.modules.localize.bind("pagination|all",function(e){a.innerHTML=e}):a.innerHTML=t,e.pageSizeSelect.appendChild(a)}),this.pageSizeSelect.value=this.size}},Page.prototype.initialize=function(e){var t,a,i,s=this;this.dataSentNames=Object.assign({},this.paginationDataSentNames),this.dataSentNames=Object.assign(this.dataSentNames,this.table.options.paginationDataSent),this.dataReceivedNames=Object.assign({},this.paginationDataReceivedNames),this.dataReceivedNames=Object.assign(this.dataReceivedNames,this.table.options.paginationDataReceived),s.table.modules.localize.bind("pagination|first",function(e){s.firstBut.innerHTML=e}),s.table.modules.localize.bind("pagination|first_title",function(e){s.firstBut.setAttribute("aria-label",e),s.firstBut.setAttribute("title",e)}),s.table.modules.localize.bind("pagination|prev",function(e){s.prevBut.innerHTML=e}),s.table.modules.localize.bind("pagination|prev_title",function(e){s.prevBut.setAttribute("aria-label",e),s.prevBut.setAttribute("title",e)}),s.table.modules.localize.bind("pagination|next",function(e){s.nextBut.innerHTML=e}),s.table.modules.localize.bind("pagination|next_title",function(e){s.nextBut.setAttribute("aria-label",e),s.nextBut.setAttribute("title",e)}),s.table.modules.localize.bind("pagination|last",function(e){s.lastBut.innerHTML=e}),s.table.modules.localize.bind("pagination|last_title",function(e){s.lastBut.setAttribute("aria-label",e),s.lastBut.setAttribute("title",e)}),s.firstBut.addEventListener("click",function(){s.setPage(1)}),s.prevBut.addEventListener("click",function(){s.previousPage()}),s.nextBut.addEventListener("click",function(){s.nextPage().then(function(){}).catch(function(){})}),s.lastBut.addEventListener("click",function(){s.setPage(s.max)}),s.table.options.paginationElement&&(s.element=s.table.options.paginationElement),this.pageSizeSelect&&(t=document.createElement("label"),s.table.modules.localize.bind("pagination|page_size",function(e){s.pageSizeSelect.setAttribute("aria-label",e),s.pageSizeSelect.setAttribute("title",e),t.innerHTML=e}),s.element.appendChild(t),s.element.appendChild(s.pageSizeSelect),s.pageSizeSelect.addEventListener("change",function(e){s.setPageSize("true"==s.pageSizeSelect.value||s.pageSizeSelect.value),s.setPage(1).then(function(){}).catch(function(){})})),s.element.appendChild(s.firstBut),s.element.appendChild(s.prevBut),s.element.appendChild(s.pagesElement),s.element.appendChild(s.nextBut),s.element.appendChild(s.lastBut),s.table.options.paginationElement||e||s.table.footerManager.append(s.element,s),s.mode=s.table.options.pagination,s.table.options.paginationSize?s.size=s.table.options.paginationSize:(a=document.createElement("div"),a.classList.add("tabulator-row"),a.style.visibility=e,i=document.createElement("div"),i.classList.add("tabulator-cell"),i.innerHTML="Page Row Test",a.appendChild(i),s.table.rowManager.getTableElement().appendChild(a),s.size=Math.floor(s.table.rowManager.getElement().clientHeight/a.offsetHeight),s.table.rowManager.getTableElement().removeChild(a)),s.count=s.table.options.paginationButtonCount,s.generatePageSizeSelectList()},Page.prototype.initializeProgressive=function(e){this.initialize(!0),this.mode="progressive_"+e,this.progressiveLoad=!0},Page.prototype.setDisplayIndex=function(e){this.displayIndex=e},Page.prototype.getDisplayIndex=function(){return this.displayIndex},Page.prototype.setMaxRows=function(e){this.max=e?!0===this.size?1:Math.ceil(e/this.size):1,this.page>this.max&&(this.page=this.max)},Page.prototype.reset=function(e,t){return("local"==this.mode||e)&&(this.page=1),t&&(this.initialLoad=!0),!0},Page.prototype.setMaxPage=function(e){e=parseInt(e),this.max=e||1,this.page>this.max&&(this.page=this.max,this.trigger())},Page.prototype.setPage=function(e){var t=this,a=this;switch(e){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return new Promise(function(i,s){e=parseInt(e),e>0&&e<=t.max?(t.page=e,t.trigger().then(function(){i()}).catch(function(){s()}),a.table.options.persistence&&a.table.modExists("persistence",!0)&&a.table.modules.persistence.config.page&&a.table.modules.persistence.save("page")):(console.warn("Pagination Error - Requested page is out of range of 1 - "+t.max+":",e),s())})},Page.prototype.setPageToRow=function(e){var t=this;return new Promise(function(a,i){var s=t.table.rowManager.getDisplayRows(t.displayIndex-1),n=s.indexOf(e);if(n>-1){var o=!0===t.size?1:Math.ceil((n+1)/t.size);t.setPage(o).then(function(){a()}).catch(function(){i()})}else console.warn("Pagination Error - Requested row is not visible"),i()})},Page.prototype.setPageSize=function(e){!0!==e&&(e=parseInt(e)),e>0&&(this.size=e),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.page&&this.table.modules.persistence.save("page")},Page.prototype._setPageButtons=function(){for(var e=this,t=Math.floor((this.count-1)/2),a=Math.ceil((this.count-1)/2),i=this.max-this.page+t+10&&n<=e.max&&e.pagesElement.appendChild(e._generatePageButton(n));this.footerRedraw()},Page.prototype._generatePageButton=function(e){var t=this,a=document.createElement("button");return a.classList.add("tabulator-page"),e==t.page&&a.classList.add("active"),a.setAttribute("type","button"),a.setAttribute("role","button"),t.table.modules.localize.bind("pagination|page_title",function(t){a.setAttribute("aria-label",t+" "+e),a.setAttribute("title",t+" "+e)}),a.setAttribute("data-page",e),a.textContent=e,a.addEventListener("click",function(a){t.setPage(e)}),a},Page.prototype.previousPage=function(){var e=this;return new Promise(function(t,a){e.page>1?(e.page--,e.trigger().then(function(){t()}).catch(function(){a()}),e.table.options.persistence&&e.table.modExists("persistence",!0)&&e.table.modules.persistence.config.page&&e.table.modules.persistence.save("page")):(console.warn("Pagination Error - Previous page would be less than page 1:",0),a())})},Page.prototype.nextPage=function(){var e=this;return new Promise(function(t,a){e.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/app/static/vendors/tabulator/js/modules/persistence.min.js b/app/static/vendors/tabulator/js/modules/persistence.min.js new file mode 100644 index 0000000..8d87ab3 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/persistence.min.js @@ -0,0 +1,2 @@ +/* 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/app/static/vendors/tabulator/js/modules/print.js b/app/static/vendors/tabulator/js/modules/print.js new file mode 100644 index 0000000..940f1a9 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/print.js @@ -0,0 +1,96 @@ +/* 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/app/static/vendors/tabulator/js/modules/print.min.js b/app/static/vendors/tabulator/js/modules/print.min.js new file mode 100644 index 0000000..b46279c --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/print.min.js @@ -0,0 +1,2 @@ +/* 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/app/static/vendors/tabulator/js/modules/reactive_data.js b/app/static/vendors/tabulator/js/modules/reactive_data.js new file mode 100644 index 0000000..eb73971 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/reactive_data.js @@ -0,0 +1,235 @@ +/* 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/app/static/vendors/tabulator/js/modules/reactive_data.min.js b/app/static/vendors/tabulator/js/modules/reactive_data.min.js new file mode 100644 index 0000000..c5dc047 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/reactive_data.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var ReactiveData=function(e){this.table=e,this.data=!1,this.blocked=!1,this.origFuncs={},this.currentVersion=0};ReactiveData.prototype.watchData=function(e){var t,a=this;this.currentVersion++,t=this.currentVersion,a.unwatchData(),a.data=e,a.origFuncs.push=e.push,Object.defineProperty(a.data,"push",{enumerable:!1,configurable:!0,value:function(){var r=Array.from(arguments);return a.blocked||t!==a.currentVersion||r.forEach(function(e){a.table.rowManager.addRowActual(e,!1)}),a.origFuncs.push.apply(e,arguments)}}),a.origFuncs.unshift=e.unshift,Object.defineProperty(a.data,"unshift",{enumerable:!1,configurable:!0,value:function(){var r=Array.from(arguments);return a.blocked||t!==a.currentVersion||r.forEach(function(e){a.table.rowManager.addRowActual(e,!0)}),a.origFuncs.unshift.apply(e,arguments)}}),a.origFuncs.shift=e.shift,Object.defineProperty(a.data,"shift",{enumerable:!1,configurable:!0,value:function(){var r;return a.blocked||t!==a.currentVersion||a.data.length&&(r=a.table.rowManager.getRowFromDataObject(a.data[0]))&&r.deleteActual(),a.origFuncs.shift.call(e)}}),a.origFuncs.pop=e.pop,Object.defineProperty(a.data,"pop",{enumerable:!1,configurable:!0,value:function(){var r;return a.blocked||t!==a.currentVersion||a.data.length&&(r=a.table.rowManager.getRowFromDataObject(a.data[a.data.length-1]))&&r.deleteActual(),a.origFuncs.pop.call(e)}}),a.origFuncs.splice=e.splice,Object.defineProperty(a.data,"splice",{enumerable:!1,configurable:!0,value:function(){var r,o=Array.from(arguments),n=o[0]<0?e.length+o[0]:o[0],c=o[1],i=!!o[2]&&o.slice(2);if(!a.blocked&&t===a.currentVersion){if(i&&(r=!!e[n]&&a.table.rowManager.getRowFromDataObject(e[n]),r?i.forEach(function(e){a.table.rowManager.addRowActual(e,!0,r,!0)}):(i=i.slice().reverse(),i.forEach(function(e){a.table.rowManager.addRowActual(e,!0,!1,!0)}))),0!==c){var u=e.slice(n,void 0===o[1]?o[1]:n+c);u.forEach(function(e,t){var r=a.table.rowManager.getRowFromDataObject(e);r&&r.deleteActual(t!==u.length-1)})}(i||0!==c)&&a.table.rowManager.reRenderInPosition()}return a.origFuncs.splice.apply(e,arguments)}})},ReactiveData.prototype.unwatchData=function(){if(!1!==this.data)for(var e in this.origFuncs)Object.defineProperty(this.data,e,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})},ReactiveData.prototype.watchRow=function(e){var t=e.getData();this.blocked=!0;for(var a in t)this.watchKey(e,t,a);this.blocked=!1},ReactiveData.prototype.watchKey=function(e,t,a){var r=this,o=Object.getOwnPropertyDescriptor(t,a),n=t[a],c=this.currentVersion;Object.defineProperty(t,a,{set:function(t){if(n=t,!r.blocked&&c===r.currentVersion){var i={};i[a]=t,e.updateData(i)}o.set&&o.set(t)},get:function(){return o.get&&o.get(),n}})},ReactiveData.prototype.unwatchRow=function(e){var t=e.getData();for(var a in t)Object.defineProperty(t,a,{value:t[a]})},ReactiveData.prototype.block=function(){this.blocked=!0},ReactiveData.prototype.unblock=function(){this.blocked=!1},Tabulator.prototype.registerModule("reactiveData",ReactiveData); \ No newline at end of file diff --git a/app/static/vendors/tabulator/js/modules/resize_columns.js b/app/static/vendors/tabulator/js/modules/resize_columns.js new file mode 100644 index 0000000..753c02b --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/resize_columns.js @@ -0,0 +1,163 @@ +/* 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/app/static/vendors/tabulator/js/modules/resize_columns.min.js b/app/static/vendors/tabulator/js/modules/resize_columns.min.js new file mode 100644 index 0000000..7ae0e38 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/resize_columns.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var ResizeColumns=function(e){this.table=e,this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.handle=null,this.prevHandle=null};ResizeColumns.prototype.initializeColumn=function(e,t,n){var o=this,i=!1,s=this.table.options.resizableColumns;if("header"===e&&(i="textarea"==t.definition.formatter||t.definition.variableHeight,t.modules.resize={variableHeight:i}),!0===s||s==e){var a=document.createElement("div");a.className="tabulator-col-resize-handle";var l=document.createElement("div");l.className="tabulator-col-resize-handle prev",a.addEventListener("click",function(e){e.stopPropagation()});var r=function(e){var n=t.getLastColumn();n&&o._checkResizability(n)&&(o.startColumn=t,o._mouseDown(e,n,a))};a.addEventListener("mousedown",r),a.addEventListener("touchstart",r,{passive:!0}),a.addEventListener("dblclick",function(e){var n=t.getLastColumn();n&&o._checkResizability(n)&&(e.stopPropagation(),n.reinitializeWidth(!0))}),l.addEventListener("click",function(e){e.stopPropagation()});var d=function(e){var n,i,s;(n=t.getFirstColumn())&&(i=o.table.columnManager.findColumnIndex(n),(s=i>0&&o.table.columnManager.getColumnByIndex(i-1))&&o._checkResizability(s)&&(o.startColumn=t,o._mouseDown(e,s,l)))};l.addEventListener("mousedown",d),l.addEventListener("touchstart",d,{passive:!0}),l.addEventListener("dblclick",function(e){var n,i,s;(n=t.getFirstColumn())&&(i=o.table.columnManager.findColumnIndex(n),(s=i>0&&o.table.columnManager.getColumnByIndex(i-1))&&o._checkResizability(s)&&(e.stopPropagation(),s.reinitializeWidth(!0)))}),n.appendChild(a),n.appendChild(l)}},ResizeColumns.prototype._checkResizability=function(e){return void 0!==e.definition.resizable?e.definition.resizable:this.table.options.resizableColumns},ResizeColumns.prototype._mouseDown=function(e,t,n){function o(e){t.setWidth(s.startWidth+((void 0===e.screenX?e.touches[0].screenX:e.screenX)-s.startX)),!s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights()}function i(e){s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!1),s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights(),document.body.removeEventListener("mouseup",i),document.body.removeEventListener("mousemove",o),n.removeEventListener("touchmove",o),n.removeEventListener("touchend",i),s.table.element.classList.remove("tabulator-block-select"),s.table.options.persistence&&s.table.modExists("persistence",!0)&&s.table.modules.persistence.config.columns&&s.table.modules.persistence.save("columns"),s.table.options.columnResized.call(s.table,t.getComponent())}var s=this;s.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!0),s.startX=void 0===e.screenX?e.touches[0].screenX:e.screenX,s.startWidth=t.getWidth(),document.body.addEventListener("mousemove",o),document.body.addEventListener("mouseup",i),n.addEventListener("touchmove",o,{passive:!0}),n.addEventListener("touchend",i)},Tabulator.prototype.registerModule("resizeColumns",ResizeColumns); \ No newline at end of file diff --git a/app/static/vendors/tabulator/js/modules/resize_rows.js b/app/static/vendors/tabulator/js/modules/resize_rows.js new file mode 100644 index 0000000..8d39fcd --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/resize_rows.js @@ -0,0 +1,98 @@ +/* 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/app/static/vendors/tabulator/js/modules/resize_rows.min.js b/app/static/vendors/tabulator/js/modules/resize_rows.min.js new file mode 100644 index 0000000..fb0db00 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/resize_rows.min.js @@ -0,0 +1,2 @@ +/* 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/app/static/vendors/tabulator/js/modules/resize_table.js b/app/static/vendors/tabulator/js/modules/resize_table.js new file mode 100644 index 0000000..1286641 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/resize_table.js @@ -0,0 +1,107 @@ +/* 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/app/static/vendors/tabulator/js/modules/resize_table.min.js b/app/static/vendors/tabulator/js/modules/resize_table.min.js new file mode 100644 index 0000000..e992d75 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/resize_table.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var ResizeTable=function(e){this.table=e,this.binding=!1,this.observer=!1,this.containerObserver=!1,this.tableHeight=0,this.tableWidth=0,this.containerHeight=0,this.containerWidth=0,this.autoResize=!1};ResizeTable.prototype.initialize=function(e){var t,i=this,n=this.table;this.tableHeight=n.element.clientHeight,this.tableWidth=n.element.clientWidth,n.element.parentNode&&(this.containerHeight=n.element.parentNode.clientHeight,this.containerWidth=n.element.parentNode.clientWidth),"undefined"!=typeof ResizeObserver&&"virtual"===n.rowManager.getRenderMode()?(this.autoResize=!0,this.observer=new ResizeObserver(function(e){if(!n.browserMobile||n.browserMobile&&!n.modules.edit.currentCell){var t=Math.floor(e[0].contentRect.height),r=Math.floor(e[0].contentRect.width);i.tableHeight==t&&i.tableWidth==r||(i.tableHeight=t,i.tableWidth=r,n.element.parentNode&&(i.containerHeight=n.element.parentNode.clientHeight,i.containerWidth=n.element.parentNode.clientWidth),n.redraw())}}),this.observer.observe(n.element),t=window.getComputedStyle(n.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(t.getPropertyValue("max-height")||t.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver(function(e){if(!n.browserMobile||n.browserMobile&&!n.modules.edit.currentCell){var t=Math.floor(e[0].contentRect.height),r=Math.floor(e[0].contentRect.width);i.containerHeight==t&&i.containerWidth==r||(i.containerHeight=t,i.containerWidth=r,i.tableHeight=n.element.clientHeight,i.tableWidth=n.element.clientWidth,n.redraw()),n.redraw()}}),this.containerObserver.observe(this.table.element.parentNode))):(this.binding=function(){(!n.browserMobile||n.browserMobile&&!n.modules.edit.currentCell)&&n.redraw()},window.addEventListener("resize",this.binding))},ResizeTable.prototype.clearBindings=function(e){this.binding&&window.removeEventListener("resize",this.binding),this.observer&&this.observer.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)},Tabulator.prototype.registerModule("resizeTable",ResizeTable); \ No newline at end of file diff --git a/app/static/vendors/tabulator/js/modules/responsive_layout.js b/app/static/vendors/tabulator/js/modules/responsive_layout.js new file mode 100644 index 0000000..329f2a6 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/responsive_layout.js @@ -0,0 +1,301 @@ +/* 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/app/static/vendors/tabulator/js/modules/responsive_layout.min.js b/app/static/vendors/tabulator/js/modules/responsive_layout.min.js new file mode 100644 index 0000000..4ef6538 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/responsive_layout.min.js @@ -0,0 +1,2 @@ +/* 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/app/static/vendors/tabulator/js/modules/select_row.js b/app/static/vendors/tabulator/js/modules/select_row.js new file mode 100644 index 0000000..2869429 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/select_row.js @@ -0,0 +1,417 @@ +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/app/static/vendors/tabulator/js/modules/select_row.min.js b/app/static/vendors/tabulator/js/modules/select_row.min.js new file mode 100644 index 0000000..488d7e6 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/select_row.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},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/app/static/vendors/tabulator/js/modules/sort.js b/app/static/vendors/tabulator/js/modules/sort.js new file mode 100644 index 0000000..2422968 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/sort.js @@ -0,0 +1,571 @@ +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/app/static/vendors/tabulator/js/modules/sort.min.js b/app/static/vendors/tabulator/js/modules/sort.min.js new file mode 100644 index 0000000..d0b4cb0 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/sort.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Sort=function(t){this.table=t,this.sortList=[],this.changed=!1};Sort.prototype.initializeColumn=function(t,e){var r,o,n=this,i=!1;switch(_typeof(t.definition.sorter)){case"string":n.sorters[t.definition.sorter]?i=n.sorters[t.definition.sorter]:console.warn("Sort Error - No such sorter found: ",t.definition.sorter);break;case"function":i=t.definition.sorter}t.modules.sort={sorter:i,dir:"none",params:t.definition.sorterParams||{},startingDir:t.definition.headerSortStartingDir||"asc",tristate:void 0!==t.definition.headerSortTristate?t.definition.headerSortTristate:this.table.options.headerSortTristate},(void 0===t.definition.headerSort?!1!==this.table.options.headerSort:!1!==t.definition.headerSort)&&(r=t.getElement(),r.classList.add("tabulator-sortable"),o=document.createElement("div"),o.classList.add("tabulator-arrow"),e.appendChild(o),r.addEventListener("click",function(e){var r="",o=[],i=!1;if(t.modules.sort){if(t.modules.sort.tristate)r="none"==t.modules.sort.dir?t.modules.sort.startingDir:t.modules.sort.dir==t.modules.sort.startingDir?"asc"==t.modules.sort.dir?"desc":"asc":"none";else switch(t.modules.sort.dir){case"asc":r="desc";break;case"desc":r="asc";break;default:r=t.modules.sort.startingDir}n.table.options.columnHeaderSortMulti&&(e.shiftKey||e.ctrlKey)?(o=n.getSort(),i=o.findIndex(function(e){return e.field===t.getField()}),i>-1?(o[i].dir=r,i!=o.length-1&&(i=o.splice(i,1)[0],"none"!=r&&o.push(i))):"none"!=r&&o.push({column:t,dir:r}),n.setSort(o)):"none"==r?n.clear():n.setSort(t,r),n.table.rowManager.sorterRefresh(!n.sortList.length)}}))},Sort.prototype.hasChanged=function(){var t=this.changed;return this.changed=!1,t},Sort.prototype.getSort=function(){var t=this,e=[];return t.sortList.forEach(function(t){t.column&&e.push({column:t.column.getComponent(),field:t.column.getField(),dir:t.dir})}),e},Sort.prototype.setSort=function(t,e){var r=this,o=[];Array.isArray(t)||(t=[{column:t,dir:e}]),t.forEach(function(t){var e;e=r.table.columnManager.findColumn(t.column),e?(t.column=e,o.push(t),r.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",t.column)}),r.sortList=o,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.sort&&this.table.modules.persistence.save("sort")},Sort.prototype.clear=function(){this.setSort([])},Sort.prototype.findSorter=function(t){var e,r=this.table.rowManager.activeRows[0],o="string";if(r&&(r=r.getData(),t.getField()))switch(e=t.getFieldValue(r),void 0===e?"undefined":_typeof(e)){case"undefined":o="string";break;case"boolean":o="boolean";break;default:isNaN(e)||""===e?e.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(o="alphanum"):o="number"}return this.sorters[o]},Sort.prototype.sort=function(t){var e=this,r=this.table.options.sortOrderReverse?e.sortList.slice().reverse():e.sortList,o=[],n=[];e.table.options.dataSorting&&e.table.options.dataSorting.call(e.table,e.getSort()),e.clearColumnHeaders(),e.table.options.ajaxSorting?r.forEach(function(t,r){e.setColumnHeader(t.column,t.dir)}):(r.forEach(function(t,r){var n=t.column.modules.sort;t.column&&n&&(n.sorter||(n.sorter=e.findSorter(t.column)),t.params="function"==typeof n.params?n.params(t.column.getComponent(),t.dir):n.params,o.push(t)),e.setColumnHeader(t.column,t.dir)}),o.length&&e._sortItems(t,o)),e.table.options.dataSorted&&(t.forEach(function(t){n.push(t.getComponent())}),e.table.options.dataSorted.call(e.table,e.getSort(),n))},Sort.prototype.clearColumnHeaders=function(){this.table.columnManager.getRealColumns().forEach(function(t){t.modules.sort&&(t.modules.sort.dir="none",t.getElement().setAttribute("aria-sort","none"))})},Sort.prototype.setColumnHeader=function(t,e){t.modules.sort.dir=e,t.getElement().setAttribute("aria-sort",e)},Sort.prototype._sortItems=function(t,e){var r=this,o=e.length-1;t.sort(function(t,n){for(var i,s=o;s>=0;s--){var a=e[s];if(0!==(i=r._sortRow(t,n,a.column,a.dir,a.params)))break}return i})},Sort.prototype._sortRow=function(t,e,r,o,n){var i,s,a="asc"==o?t:e,l="asc"==o?e:t;return t=r.getFieldValue(a.getData()),e=r.getFieldValue(l.getData()),t=void 0!==t?t:"",e=void 0!==e?e:"",i=a.getComponent(),s=l.getComponent(),r.modules.sort.sorter.call(this,t,e,i,s,r.getComponent(),o,n)},Sort.prototype.sorters={number:function(t,e,r,o,n,i,s){var a=s.alignEmptyValues,l=s.decimalSeparator||".",u=s.thousandSeparator||",",c=0;if(t=parseFloat(String(t).split(u).join("").split(l).join(".")),e=parseFloat(String(e).split(u).join("").split(l).join(".")),isNaN(t))c=isNaN(e)?0:-1;else{if(!isNaN(e))return t-e;c=1}return("top"===a&&"desc"===i||"bottom"===a&&"asc"===i)&&(c*=-1),c},string:function(t,e,r,o,n,i,s){var a,l=s.alignEmptyValues,u=0;if(t){if(e){switch(_typeof(s.locale)){case"boolean":s.locale&&(a=this.table.modules.localize.getLocale());break;case"string":a=s.locale}return String(t).toLowerCase().localeCompare(String(e).toLowerCase(),a)}u=1}else u=e?-1:0;return("top"===l&&"desc"===i||"bottom"===l&&"asc"===i)&&(u*=-1),u},date:function(t,e,r,o,n,i,s){return s.format||(s.format="DD/MM/YYYY"),this.sorters.datetime.call(this,t,e,r,o,n,i,s)},time:function(t,e,r,o,n,i,s){return s.format||(s.format="HH:mm"),this.sorters.datetime.call(this,t,e,r,o,n,i,s)},datetime:function(t,e,r,o,n,i,s){var a=s.format||"DD/MM/YYYY HH:mm:ss",l=s.alignEmptyValues,u=0;if("undefined"!=typeof moment){if(t=moment(t,a),e=moment(e,a),t.isValid()){if(e.isValid())return t-e;u=1}else u=e.isValid()?-1:0;return("top"===l&&"desc"===i||"bottom"===l&&"asc"===i)&&(u*=-1),u}console.error("Sort Error - 'datetime' sorter is dependant on moment.js")},boolean:function(t,e,r,o,n,i,s){return(!0===t||"true"===t||"True"===t||1===t?1:0)-(!0===e||"true"===e||"True"===e||1===e?1:0)},array:function(t,e,r,o,n,i,s){function a(t){switch(c){case"length":return t.length;case"sum":return t.reduce(function(t,e){return t+e});case"max":return Math.max.apply(null,t);case"min":return Math.min.apply(null,t);case"avg":return t.reduce(function(t,e){return t+e})/t.length}}var l=0,u=0,c=s.type||"length",d=s.alignEmptyValues,m=0;if(Array.isArray(t)){if(Array.isArray(e))return l=t?a(t):0,u=e?a(e):0,l-u;d=1}else d=Array.isArray(e)?-1:0;return("top"===d&&"desc"===i||"bottom"===d&&"asc"===i)&&(m*=-1),m},exists:function(t,e,r,o,n,i,s){return(void 0===t?0:1)-(void 0===e?0:1)},alphanum:function(t,e,r,o,n,i,s){var a,l,u,c,d,m=0,f=/(\d+)|(\D+)/g,p=/\d/,h=s.alignEmptyValues,g=0;if(t||0===t){if(e||0===e){if(isFinite(t)&&isFinite(e))return t-e;if(a=String(t).toLowerCase(),l=String(e).toLowerCase(),a===l)return 0;if(!p.test(a)||!p.test(l))return a>l?1:-1;for(a=a.match(f),l=l.match(f),d=a.length>l.length?l.length:a.length;mc?1:-1;return a.length>l.length}g=1}else g=e||0===e?-1:0;return("top"===h&&"desc"===i||"bottom"===h&&"asc"===i)&&(g*=-1),g}},Tabulator.prototype.registerModule("sort",Sort); \ No newline at end of file diff --git a/app/static/vendors/tabulator/js/modules/validate.js b/app/static/vendors/tabulator/js/modules/validate.js new file mode 100644 index 0000000..b5f6182 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/validate.js @@ -0,0 +1,286 @@ +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/app/static/vendors/tabulator/js/modules/validate.min.js b/app/static/vendors/tabulator/js/modules/validate.min.js new file mode 100644 index 0000000..fc189c0 --- /dev/null +++ b/app/static/vendors/tabulator/js/modules/validate.min.js @@ -0,0 +1,2 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},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/app/static/vendors/tabulator/js/tabulator.js b/app/static/vendors/tabulator/js/tabulator.js new file mode 100644 index 0000000..256e565 --- /dev/null +++ b/app/static/vendors/tabulator/js/tabulator.js @@ -0,0 +1,24907 @@ +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/app/static/vendors/tabulator/js/tabulator.min.js b/app/static/vendors/tabulator/js/tabulator.min.js new file mode 100644 index 0000000..74f4780 --- /dev/null +++ b/app/static/vendors/tabulator/js/tabulator.min.js @@ -0,0 +1,12 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(e,t){"object"===("undefined"==typeof exports?"undefined":_typeof(exports))&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Tabulator=t()}(this,function(){"use strict";Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function(e){if(null==this)throw new TypeError('"this" is null or not defined');var t=Object(this),o=t.length>>>0;if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n>>0;if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n>>0;if(0===i)return!1;for(var n=0|t,s=Math.max(n>=0?n:i-Math.abs(n),0);so?(t=e-o,this.element.style.marginLeft=-t+"px"):this.element.style.marginLeft=0,this.scrollLeft=e,this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.scrollHorizontal()},t.prototype.generateColumnsFromRowData=function(e){var t,o,i=[];if(e&&e.length){t=e[0];for(var n in t){var s={field:n,title:n},r=t[n];switch(void 0===r?"undefined":_typeof(r)){case"undefined":o="string";break;case"boolean":o="boolean";break;case"object":o=Array.isArray(r)?"array":"string";break;default:o=isNaN(r)||""===r?r.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?"alphanum":"string":"number"}s.sorter=o,i.push(s)}this.table.options.columns=i,this.setColumns(this.table.options.columns)}},t.prototype.setColumns=function(e,t){for(var o=this;o.headersElement.firstChild;)o.headersElement.removeChild(o.headersElement.firstChild);o.columns=[],o.columnsByIndex=[],o.columnsByField={},o.table.modExists("frozenColumns")&&o.table.modules.frozenColumns.reset(),e.forEach(function(e,t){o._addColumn(e)}),o._reIndexColumns(),o.table.options.responsiveLayout&&o.table.modExists("responsiveLayout",!0)&&o.table.modules.responsiveLayout.initialize(),o.redraw(!0)},t.prototype._addColumn=function(e,t,o){var i=new n(e,this),s=i.getElement(),r=o?this.findColumnIndex(o):o;if(o&&r>-1){var a=this.columns.indexOf(o.getTopColumn()),l=o.getElement();t?(this.columns.splice(a,0,i),l.parentNode.insertBefore(s,l)):(this.columns.splice(a+1,0,i),l.parentNode.insertBefore(s,l.nextSibling))}else t?(this.columns.unshift(i),this.headersElement.insertBefore(i.getElement(),this.headersElement.firstChild)):(this.columns.push(i),this.headersElement.appendChild(i.getElement())),i.columnRendered();return i},t.prototype.registerColumnField=function(e){e.definition.field&&(this.columnsByField[e.definition.field]=e)},t.prototype.registerColumnPosition=function(e){this.columnsByIndex.push(e)},t.prototype._reIndexColumns=function(){this.columnsByIndex=[],this.columns.forEach(function(e){e.reRegisterPosition()})},t.prototype._verticalAlignHeaders=function(){var e=this,t=0;e.columns.forEach(function(e){var o;e.clearVerticalAlign(),(o=e.getHeight())>t&&(t=o)}),e.columns.forEach(function(o){o.verticalAlign(e.table.options.columnHeaderVertAlign,t)}),e.rowManager.adjustTableSize()},t.prototype.findColumn=function(e){var t=this;if("object"!=(void 0===e?"undefined":_typeof(e)))return this.columnsByField[e]||!1;if(e instanceof n)return e;if(e instanceof o)return e._getSelf()||!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement){return t.columns.find(function(t){return t.element===e})||!1}return!1},t.prototype.getColumnByField=function(e){return this.columnsByField[e]},t.prototype.getColumnsByFieldRoot=function(e){var t=this,o=[];return Object.keys(this.columnsByField).forEach(function(i){i.split(".")[0]===e&&o.push(t.columnsByField[i])}),o},t.prototype.getColumnByIndex=function(e){return this.columnsByIndex[e]},t.prototype.getFirstVisibileColumn=function(e){var e=this.columnsByIndex.findIndex(function(e){return e.visible});return e>-1&&this.columnsByIndex[e]},t.prototype.getColumns=function(){return this.columns},t.prototype.findColumnIndex=function(e){return this.columnsByIndex.findIndex(function(t){return e===t})},t.prototype.getRealColumns=function(){return this.columnsByIndex},t.prototype.traverse=function(e){this.columnsByIndex.forEach(function(t,o){e(t,o)})},t.prototype.getDefinitions=function(e){var t=this,o=[];return t.columnsByIndex.forEach(function(t){(!e||e&&t.visible)&&o.push(t.getDefinition())}),o},t.prototype.getDefinitionTree=function(){var e=this,t=[];return e.columns.forEach(function(e){t.push(e.getDefinition(!0))}),t},t.prototype.getComponents=function(e){var t=this,o=[];return(e?t.columns:t.columnsByIndex).forEach(function(e){o.push(e.getComponent())}),o},t.prototype.getWidth=function(){var e=0;return this.columnsByIndex.forEach(function(t){t.visible&&(e+=t.getWidth())}),e},t.prototype.moveColumn=function(e,t,o){this.moveColumnActual(e,t,o),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),t.element.parentNode.insertBefore(e.element,t.element),o&&t.element.parentNode.insertBefore(t.element,e.element),this._verticalAlignHeaders(),this.table.rowManager.reinitialize()},t.prototype.moveColumnActual=function(e,t,o){e.parent.isGroup?this._moveColumnInArray(e.parent.columns,e,t,o):this._moveColumnInArray(this.columns,e,t,o),this._moveColumnInArray(this.columnsByIndex,e,t,o,!0),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.options.columnMoved&&this.table.options.columnMoved.call(this.table,e.getComponent(),this.table.columnManager.getComponents()),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns")},t.prototype._moveColumnInArray=function(e,t,o,i,n){var s,r=e.indexOf(t);r>-1&&(e.splice(r,1),s=e.indexOf(o),s>-1?i&&(s+=1):s=r,e.splice(s,0,t),n&&this.table.rowManager.rows.forEach(function(e){if(e.cells.length){var t=e.cells.splice(r,1)[0];e.cells.splice(s,0,t)}}))},t.prototype.scrollToColumn=function(e,t,o){var i=this,n=0,s=0,r=0,a=e.getElement();return new Promise(function(l,c){if(void 0===t&&(t=i.table.options.scrollToColumnPosition),void 0===o&&(o=i.table.options.scrollToColumnIfVisible),e.visible){switch(t){case"middle":case"center":r=-i.element.clientWidth/2;break;case"right":r=a.clientWidth-i.headersElement.clientWidth}if(!o&&(s=a.offsetLeft)>0&&s+a.offsetWidthe.rowManager.element.clientHeight&&(t-=e.rowManager.element.offsetWidth-e.rowManager.element.clientWidth),this.columnsByIndex.forEach(function(i){var n,s,r;i.visible&&(n=i.definition.width||0,s=void 0===i.minWidth?e.table.options.columnMinWidth:parseInt(i.minWidth),r="string"==typeof n?n.indexOf("%")>-1?t/100*parseInt(n):parseInt(n):n,o+=r>s?r:s)}),o},t.prototype.addColumn=function(e,t,o){var i=this;return new Promise(function(n,s){var r=i._addColumn(e,t,o);i._reIndexColumns(),i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout",!0)&&i.table.modules.responsiveLayout.initialize(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.redraw(),"fitColumns"!=i.table.modules.layout.getMode()&&r.reinitializeWidth(),i._verticalAlignHeaders(),i.table.rowManager.reinitialize(),n(r)})},t.prototype.deregisterColumn=function(e){var t,o=e.getField();o&&delete this.columnsByField[o],t=this.columnsByIndex.indexOf(e),t>-1&&this.columnsByIndex.splice(t,1),t=this.columns.indexOf(e),t>-1&&this.columns.splice(t,1),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.redraw()},t.prototype.redraw=function(e){e&&(d.prototype.helpers.elVisible(this.element)&&this._verticalAlignHeaders(),this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),["fitColumns","fitDataStretch"].indexOf(this.table.modules.layout.getMode())>-1?this.table.modules.layout.layout():e?this.table.modules.layout.layout():this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),e&&(this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.redraw()),this.table.footerManager.redraw()};var o=function(e){this._column=e,this.type="ColumnComponent"};o.prototype.getElement=function(){return this._column.getElement()},o.prototype.getDefinition=function(){return this._column.getDefinition()},o.prototype.getField=function(){return this._column.getField()},o.prototype.getCells=function(){var e=[];return this._column.cells.forEach(function(t){e.push(t.getComponent())}),e},o.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._column.visible},o.prototype.isVisible=function(){return this._column.visible},o.prototype.show=function(){this._column.isGroup?this._column.columns.forEach(function(e){e.show()}):this._column.show()},o.prototype.hide=function(){this._column.isGroup?this._column.columns.forEach(function(e){e.hide()}):this._column.hide()},o.prototype.toggle=function(){this._column.visible?this.hide():this.show()},o.prototype.delete=function(){return this._column.delete()},o.prototype.getSubColumns=function(){var e=[];return this._column.columns.length&&this._column.columns.forEach(function(t){e.push(t.getComponent())}),e},o.prototype.getParentColumn=function(){return this._column.parent instanceof n&&this._column.parent.getComponent()},o.prototype._getSelf=function(){return this._column},o.prototype.scrollTo=function(){return this._column.table.columnManager.scrollToColumn(this._column)},o.prototype.getTable=function(){return this._column.table},o.prototype.headerFilterFocus=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterFocus(this._column)},o.prototype.reloadHeaderFilter=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.reloadHeaderFilter(this._column)},o.prototype.getHeaderFilterValue=function(){if(this._column.table.modExists("filter",!0))return this._column.table.modules.filter.getHeaderFilterValue(this._column)},o.prototype.setHeaderFilterValue=function(e){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterValue(this._column,e)},o.prototype.move=function(e,t){var o=this._column.table.columnManager.findColumn(e);o?this._column.table.columnManager.moveColumn(this._column,o,t):console.warn("Move Error - No matching column found:",o)},o.prototype.getNextColumn=function(){var e=this._column.nextColumn();return!!e&&e.getComponent()},o.prototype.getPrevColumn=function(){var e=this._column.prevColumn();return!!e&&e.getComponent()},o.prototype.updateDefinition=function(e){return this._column.updateDefinition(e)},o.prototype.getWidth=function(){return this._column.getWidth()},o.prototype.setWidth=function(e){return!0===e?this._column.reinitializeWidth(!0):this._column.setWidth(e)},o.prototype.validate=function(){return this._column.validate()};var n=function e(t,o){var i=this;this.table=o.table,this.definition=t,this.parent=o,this.type="column",this.columns=[],this.cells=[],this.element=this.createElement(),this.contentElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.isGroup=!1,this.tooltip=!1,this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleFormatterRendered=!1,this.setField(this.definition.field),this.table.options.invalidOptionWarnings&&this.checkDefinition(),this.modules={},this.cellEvents={cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1},this.width=null,this.widthStyled="",this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this._mapDepricatedFunctionality(),t.columns?(this.isGroup=!0,t.columns.forEach(function(t,o){var n=new e(t,i);i.attachColumn(n)}),i.checkColumnVisibility()):o.registerColumnField(this),t.rowHandle&&!1!==this.table.options.movableRows&&this.table.modExists("moveRow")&&this.table.modules.moveRow.setHandle(!0),this._buildHeader(),this.bindModuleColumns()};n.prototype.createElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.setAttribute("role","columnheader"),e.setAttribute("aria-sort","none"),e},n.prototype.createGroupElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-col-group-cols"),e},n.prototype.checkDefinition=function(){var e=this;Object.keys(this.definition).forEach(function(t){-1===e.defaultOptionList.indexOf(t)&&console.warn("Invalid column definition option in '"+(e.field||e.definition.title)+"' column:",t)})},n.prototype.setField=function(e){this.field=e,this.fieldStructure=e?this.table.options.nestedFieldSeparator?e.split(this.table.options.nestedFieldSeparator):[e]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData},n.prototype.registerColumnPosition=function(e){this.parent.registerColumnPosition(e)},n.prototype.registerColumnField=function(e){this.parent.registerColumnField(e)},n.prototype.reRegisterPosition=function(){this.isGroup?this.columns.forEach(function(e){e.reRegisterPosition()}):this.registerColumnPosition(this)},n.prototype._mapDepricatedFunctionality=function(){void 0!==this.definition.hideInHtml&&(this.definition.htmlOutput=!this.definition.hideInHtml,console.warn("hideInHtml column definition property is deprecated, you should now use htmlOutput")),void 0!==this.definition.align&&(this.definition.hozAlign=this.definition.align,console.warn("align column definition property is deprecated, you should now use hozAlign")),void 0!==this.definition.downloadTitle&&(this.definition.titleDownload=this.definition.downloadTitle,console.warn("downloadTitle definition property is deprecated, you should now use titleDownload"))},n.prototype.setTooltip=function(){var e=this,t=e.definition,o=t.headerTooltip||!1===t.tooltip?t.headerTooltip:e.table.options.tooltipsHeader;o?!0===o?t.field?e.table.modules.localize.bind("columns|"+t.field,function(o){e.element.setAttribute("title",o||t.title)}):e.element.setAttribute("title",t.title):("function"==typeof o&&!1===(o=o(e.getComponent()))&&(o=""),e.element.setAttribute("title",o)):e.element.setAttribute("title","")},n.prototype._buildHeader=function(){for(var e=this,t=e.definition;e.element.firstChild;)e.element.removeChild(e.element.firstChild);t.headerVertical&&(e.element.classList.add("tabulator-col-vertical"),"flip"===t.headerVertical&&e.element.classList.add("tabulator-col-vertical-flip")),e.contentElement=e._bindEvents(),e.contentElement=e._buildColumnHeaderContent(),e.element.appendChild(e.contentElement),e.isGroup?e._buildGroupHeader():e._buildColumnHeader(),e.setTooltip(),e.table.options.resizableColumns&&e.table.modExists("resizeColumns")&&e.table.modules.resizeColumns.initializeColumn("header",e,e.element),t.headerFilter&&e.table.modExists("filter")&&e.table.modExists("edit")&&(void 0!==t.headerFilterPlaceholder&&t.field&&e.table.modules.localize.setHeaderFilterColumnPlaceholder(t.field,t.headerFilterPlaceholder),e.table.modules.filter.initializeColumn(e)),e.table.modExists("frozenColumns")&&e.table.modules.frozenColumns.initializeColumn(e),e.table.options.movableColumns&&!e.isGroup&&e.table.modExists("moveColumn")&&e.table.modules.moveColumn.initializeColumn(e),(t.topCalc||t.bottomCalc)&&e.table.modExists("columnCalcs")&&e.table.modules.columnCalcs.initializeColumn(e),e.table.modExists("persistence")&&e.table.modules.persistence.config.columns&&e.table.modules.persistence.initializeColumn(e),e.element.addEventListener("mouseenter",function(t){e.setTooltip()})},n.prototype._bindEvents=function(){var e,t,o,i=this,n=i.definition;"function"==typeof n.headerClick&&i.element.addEventListener("click",function(e){n.headerClick(e,i.getComponent())}),"function"==typeof n.headerDblClick&&i.element.addEventListener("dblclick",function(e){n.headerDblClick(e,i.getComponent())}),"function"==typeof n.headerContext&&i.element.addEventListener("contextmenu",function(e){n.headerContext(e,i.getComponent())}),"function"==typeof n.headerTap&&(o=!1,i.element.addEventListener("touchstart",function(e){o=!0},{passive:!0}),i.element.addEventListener("touchend",function(e){o&&n.headerTap(e,i.getComponent()),o=!1})),"function"==typeof n.headerDblTap&&(e=null,i.element.addEventListener("touchend",function(t){e?(clearTimeout(e),e=null,n.headerDblTap(t,i.getComponent())):e=setTimeout(function(){clearTimeout(e),e=null},300)})),"function"==typeof n.headerTapHold&&(t=null,i.element.addEventListener("touchstart",function(e){clearTimeout(t),t=setTimeout(function(){clearTimeout(t),t=null,o=!1,n.headerTapHold(e,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(e){clearTimeout(t),t=null})),"function"==typeof n.cellClick&&(i.cellEvents.cellClick=n.cellClick),"function"==typeof n.cellDblClick&&(i.cellEvents.cellDblClick=n.cellDblClick),"function"==typeof n.cellContext&&(i.cellEvents.cellContext=n.cellContext),"function"==typeof n.cellMouseEnter&&(i.cellEvents.cellMouseEnter=n.cellMouseEnter),"function"==typeof n.cellMouseLeave&&(i.cellEvents.cellMouseLeave=n.cellMouseLeave),"function"==typeof n.cellMouseOver&&(i.cellEvents.cellMouseOver=n.cellMouseOver),"function"==typeof n.cellMouseOut&&(i.cellEvents.cellMouseOut=n.cellMouseOut),"function"==typeof n.cellMouseMove&&(i.cellEvents.cellMouseMove=n.cellMouseMove),"function"==typeof n.cellTap&&(i.cellEvents.cellTap=n.cellTap),"function"==typeof n.cellDblTap&&(i.cellEvents.cellDblTap=n.cellDblTap),"function"==typeof n.cellTapHold&&(i.cellEvents.cellTapHold=n.cellTapHold),"function"==typeof n.cellEdited&&(i.cellEvents.cellEdited=n.cellEdited),"function"==typeof n.cellEditing&&(i.cellEvents.cellEditing=n.cellEditing),"function"==typeof n.cellEditCancelled&&(i.cellEvents.cellEditCancelled=n.cellEditCancelled)},n.prototype._buildColumnHeader=function(){var e=this,t=e.definition,o=e.table;if(o.modExists("sort")&&o.modules.sort.initializeColumn(e,e.contentElement),(t.headerContextMenu||t.headerMenu)&&o.modExists("menu")&&o.modules.menu.initializeColumnHeader(e),o.modExists("format")&&o.modules.format.initializeColumn(e),void 0!==t.editor&&o.modExists("edit")&&o.modules.edit.initializeColumn(e),void 0!==t.validator&&o.modExists("validate")&&o.modules.validate.initializeColumn(e),o.modExists("mutator")&&o.modules.mutator.initializeColumn(e),o.modExists("accessor")&&o.modules.accessor.initializeColumn(e),_typeof(o.options.responsiveLayout)&&o.modExists("responsiveLayout")&&o.modules.responsiveLayout.initializeColumn(e),void 0!==t.visible&&(t.visible?e.show(!0):e.hide(!0)),t.cssClass){t.cssClass.split(" ").forEach(function(t){e.element.classList.add(t)})}t.field&&this.element.setAttribute("tabulator-field",t.field),e.setMinWidth(void 0===t.minWidth?e.table.options.columnMinWidth:parseInt(t.minWidth)),e.reinitializeWidth(),e.tooltip=e.definition.tooltip||!1===e.definition.tooltip?e.definition.tooltip:e.table.options.tooltips,e.hozAlign=void 0===e.definition.hozAlign?e.table.options.cellHozAlign:e.definition.hozAlign,e.vertAlign=void 0===e.definition.vertAlign?e.table.options.cellVertAlign:e.definition.vertAlign},n.prototype._buildColumnHeaderContent=function(){var e=(this.definition,this.table,document.createElement("div"));return e.classList.add("tabulator-col-content"),this.titleElement=this._buildColumnHeaderTitle(),e.appendChild(this.titleElement),e},n.prototype._buildColumnHeaderTitle=function(){var e=this,t=e.definition,o=e.table,i=document.createElement("div");if(i.classList.add("tabulator-col-title"),t.editableTitle){var n=document.createElement("input");n.classList.add("tabulator-title-editor"),n.addEventListener("click",function(e){e.stopPropagation(),n.focus()}),n.addEventListener("change",function(){t.title=n.value,o.options.columnTitleChanged.call(e.table,e.getComponent())}),i.appendChild(n),t.field?o.modules.localize.bind("columns|"+t.field,function(e){n.value=e||t.title||" "}):n.value=t.title||" "}else t.field?o.modules.localize.bind("columns|"+t.field,function(o){e._formatColumnHeaderTitle(i,o||t.title||" ")}):e._formatColumnHeaderTitle(i,t.title||" ");return i},n.prototype._formatColumnHeaderTitle=function(e,t){var o,i,n,s,r,a=this;if(this.definition.titleFormatter&&this.table.modExists("format"))switch(o=this.table.modules.format.getFormatter(this.definition.titleFormatter),r=function(e){a.titleFormatterRendered=e},s={getValue:function(){return t},getElement:function(){return e}},n=this.definition.titleFormatterParams||{},n="function"==typeof n?n():n,i=o.call(this.table.modules.format,s,n,r),void 0===i?"undefined":_typeof(i)){case"object":i instanceof Node?e.appendChild(i):(e.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",i));break;case"undefined":case"null":e.innerHTML="";break;default:e.innerHTML=i}else e.innerHTML=t},n.prototype._buildGroupHeader=function(){var e=this;if(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass){this.definition.cssClass.split(" ").forEach(function(t){e.element.classList.add(t)})}(this.definition.headerContextMenu||this.definition.headerMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeColumnHeader(this),this.element.appendChild(this.groupElement)},n.prototype._getFlatData=function(e){return e[this.field]},n.prototype._getNestedData=function(e){for(var t,o=e,i=this.fieldStructure,n=i.length,s=0;s-1&&this._nextVisibleColumn(e+1)},n.prototype._nextVisibleColumn=function(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._nextVisibleColumn(e+1)},n.prototype.prevColumn=function(){var e=this.table.columnManager.findColumnIndex(this);return e>-1&&this._prevVisibleColumn(e-1)},n.prototype._prevVisibleColumn=function(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._prevVisibleColumn(e-1)},n.prototype.reinitializeWidth=function(e){this.widthFixed=!1, +void 0===this.definition.width||e||this.setWidth(this.definition.width),this.table.modExists("filter")&&this.table.modules.filter.hideHeaderFilterElements(),this.fitToData(),this.table.modExists("filter")&&this.table.modules.filter.showHeaderFilterElements()},n.prototype.fitToData=function(){var e=this;this.widthFixed||(this.element.style.width="",e.cells.forEach(function(e){e.clearWidth()}));var t=this.element.offsetWidth;e.width&&this.widthFixed||(e.cells.forEach(function(e){var o=e.getWidth();o>t&&(t=o)}),t&&e.setWidthActual(t+1))},n.prototype.updateDefinition=function(e){var t=this;return new Promise(function(o,i){var n;t.isGroup?(console.warn("Column Update Error - The updateDefintion function is only available on columns, not column groups"),i("Column Update Error - The updateDefintion function is only available on columns, not column groups")):(n=Object.assign({},t.getDefinition()),n=Object.assign(n,e),t.table.columnManager.addColumn(n,!1,t).then(function(e){n.field==t.field&&(t.field=!1),t.delete().then(function(){o(e.getComponent())}).catch(function(e){i(e)})}).catch(function(e){i(e)}))})},n.prototype.deleteCell=function(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)},n.prototype.defaultOptionList=["title","field","columns","visible","align","hozAlign","vertAlign","width","minWidth","widthGrow","widthShrink","resizable","frozen","responsive","tooltip","cssClass","rowHandle","hideInHtml","print","htmlOutput","sorter","sorterParams","formatter","formatterParams","variableHeight","editable","editor","editorParams","validator","mutator","mutatorParams","mutatorData","mutatorDataParams","mutatorEdit","mutatorEditParams","mutatorClipboard","mutatorClipboardParams","accessor","accessorParams","accessorData","accessorDataParams","accessorDownload","accessorDownloadParams","accessorClipboard","accessorClipboardParams","accessorPrint","accessorPrintParams","accessorHtmlOutput","accessorHtmlOutputParams","clipboard","download","downloadTitle","topCalc","topCalcParams","topCalcFormatter","topCalcFormatterParams","bottomCalc","bottomCalcParams","bottomCalcFormatter","bottomCalcFormatterParams","cellClick","cellDblClick","cellContext","cellTap","cellDblTap","cellTapHold","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellEditing","cellEdited","cellEditCancelled","headerSort","headerSortStartingDir","headerSortTristate","headerClick","headerDblClick","headerContext","headerTap","headerDblTap","headerTapHold","headerTooltip","headerVertical","editableTitle","titleFormatter","titleFormatterParams","headerFilter","headerFilterPlaceholder","headerFilterParams","headerFilterEmptyCheck","headerFilterFunc","headerFilterFuncParams","headerFilterLiveFilter","print","headerContextMenu","headerMenu","contextMenu","formatterPrint","formatterPrintParams","formatterClipboard","formatterClipboardParams","formatterHtmlOutput","formatterHtmlOutputParams","titlePrint","titleClipboard","titleHtmlOutput","titleDownload"],n.prototype.getComponent=function(){return this.component||(this.component=new o(this)),this.component};var s=function(e){this.table=e,this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.heightFixer=this.createTableElement(),this.columnManager=null,this.height=0,this.firstRender=!1,this.renderMode="virtual",this.fixedHeight=!1,this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[],this.rowNumColumn=!1,this.redrawBlock=!1,this.redrawBlockRestoreConfig=!1,this.redrawBlockRederInPosition=!1};s.prototype.createHolderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-tableHolder"),e.setAttribute("tabindex",0),e},s.prototype.createTableElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-table"),e},s.prototype.getElement=function(){return this.element},s.prototype.getTableElement=function(){return this.tableElement},s.prototype.getRowPosition=function(e,t){return t?this.activeRows.indexOf(e):this.rows.indexOf(e)},s.prototype.setColumnManager=function(e){this.columnManager=e},s.prototype.initialize=function(){var e=this;e.setRenderMode(),e.element.appendChild(e.tableElement),e.firstRender=!0,e.element.addEventListener("scroll",function(){var t=e.element.scrollLeft;e.scrollLeft!=t&&(e.columnManager.scrollHorizontal(t),e.table.options.groupBy&&e.table.modules.groupRows.scrollHeaders(t),e.table.modExists("columnCalcs")&&e.table.modules.columnCalcs.scrollHorizontal(t),e.table.options.scrollHorizontal(t)),e.scrollLeft=t}),"virtual"===this.renderMode&&e.element.addEventListener("scroll",function(){var t=e.element.scrollTop,o=e.scrollTop>t;e.scrollTop!=t?(e.scrollTop=t,e.scrollVertical(o),"scroll"==e.table.options.ajaxProgressiveLoad&&e.table.modules.ajax.nextPage(e.element.scrollHeight-e.element.clientHeight-t),e.table.options.scrollVertical(t)):e.scrollTop=t})},s.prototype.findRow=function(e){var t=this;if("object"!=(void 0===e?"undefined":_typeof(e))){if(void 0===e||null===e)return!1;return t.rows.find(function(o){return o.data[t.table.options.index]==e})||!1}if(e instanceof a)return e;if(e instanceof r)return e._getSelf()||!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement){return t.rows.find(function(t){return t.element===e})||!1}return!1},s.prototype.getRowFromDataObject=function(e){return this.rows.find(function(t){return t.data===e})||!1},s.prototype.getRowFromPosition=function(e,t){return t?this.activeRows[e]:this.rows[e]},s.prototype.scrollToRow=function(e,t,o){var i,n=this,s=this.getDisplayRows().indexOf(e),r=e.getElement(),a=0;return new Promise(function(e,l){if(s>-1){if(void 0===t&&(t=n.table.options.scrollToRowPosition),void 0===o&&(o=n.table.options.scrollToRowIfVisible),"nearest"===t)switch(n.renderMode){case"classic":i=d.prototype.helpers.elOffset(r).top,t=Math.abs(n.element.scrollTop-i)>Math.abs(n.element.scrollTop+n.element.clientHeight-i)?"bottom":"top";break;case"virtual":t=Math.abs(n.vDomTop-s)>Math.abs(n.vDomBottom-s)?"bottom":"top"}if(!o&&d.prototype.helpers.elVisible(r)&&(a=d.prototype.helpers.elOffset(r).top-d.prototype.helpers.elOffset(n.element).top)>0&&a-1&&this.activeRows.splice(i,1),o>-1&&this.rows.splice(o,1),this.setActiveRows(this.activeRows),this.displayRowIterator(function(t){var o=t.indexOf(e);o>-1&&t.splice(o,1)}),t||this.reRenderInPosition(),this.regenerateRowNumbers(),this.table.options.rowDeleted.call(this.table,e.getComponent()),this.table.options.dataEdited.call(this.table,this.getData()),this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.updateGroupRows(!0):this.table.options.pagination&&this.table.modExists("page")?this.refreshActiveData(!1,!1,!0):this.table.options.pagination&&this.table.modExists("page")&&this.refreshActiveData("page")},s.prototype.addRow=function(e,t,o,i){var n=this.addRowActual(e,t,o,i);return this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowAdd",n,{data:e,pos:t,index:o}),n},s.prototype.addRows=function(e,t,o){var i=this,n=this,s=0,r=[];return new Promise(function(a,l){t=i.findAddRowPos(t),Array.isArray(e)||(e=[e]),s=e.length-1,(void 0===o&&t||void 0!==o&&!t)&&e.reverse(),e.forEach(function(e,i){var s=n.addRow(e,t,o,!0);r.push(s)}),i.table.options.groupBy&&i.table.modExists("groupRows")?i.table.modules.groupRows.updateGroupRows(!0):i.table.options.pagination&&i.table.modExists("page")?i.refreshActiveData(!1,!1,!0):i.reRenderInPosition(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.regenerateRowNumbers(),a(r)})},s.prototype.findAddRowPos=function(e){return void 0===e&&(e=this.table.options.addRowPos),"pos"===e&&(e=!0),"bottom"===e&&(e=!1),e},s.prototype.addRowActual=function(e,t,o,i){var n,s,r=e instanceof a?e:new a(e||{},this),l=this.findAddRowPos(t),c=-1;if(!o&&this.table.options.pagination&&"page"==this.table.options.paginationAddRow&&(s=this.getDisplayRows(),l?s.length?o=s[0]:this.activeRows.length&&(o=this.activeRows[this.activeRows.length-1],l=!1):s.length&&(o=s[s.length-1],l=!(s.length1&&(!o||o&&-1==u.indexOf(o)?l?u[0]!==r&&(o=u[0],this._moveRowInArray(r.getGroup().rows,r,o,!l)):u[u.length-1]!==r&&(o=u[u.length-1],this._moveRowInArray(r.getGroup().rows,r,o,!l)):this._moveRowInArray(r.getGroup().rows,r,o,!l))}return o&&(c=this.rows.indexOf(o)),o&&c>-1?(n=this.activeRows.indexOf(o),this.displayRowIterator(function(e){var t=e.indexOf(o);t>-1&&e.splice(l?t:t+1,0,r)}),n>-1&&this.activeRows.splice(l?n:n+1,0,r),this.rows.splice(l?c:c+1,0,r)):l?(this.displayRowIterator(function(e){e.unshift(r)}),this.activeRows.unshift(r),this.rows.unshift(r)):(this.displayRowIterator(function(e){e.push(r)}),this.activeRows.push(r),this.rows.push(r)),this.setActiveRows(this.activeRows),this.table.options.rowAdded.call(this.table,r.getComponent()),this.table.options.dataEdited.call(this.table,this.getData()),i||this.reRenderInPosition(),r},s.prototype.moveRow=function(e,t,o){this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowMove",e,{posFrom:this.getRowPosition(e),posTo:this.getRowPosition(t),to:t,after:o}),this.moveRowActual(e,t,o),this.regenerateRowNumbers(),this.table.options.rowMoved.call(this.table,e.getComponent())},s.prototype.moveRowActual=function(e,t,o){var i=this;if(this._moveRowInArray(this.rows,e,t,o),this._moveRowInArray(this.activeRows,e,t,o),this.displayRowIterator(function(n){i._moveRowInArray(n,e,t,o)}),this.table.options.groupBy&&this.table.modExists("groupRows")){!o&&t instanceof S&&(t=this.table.rowManager.prevDisplayRow(e)||t);var n=t.getGroup(),s=e.getGroup();n===s?this._moveRowInArray(n.rows,e,t,o):(s&&s.removeRow(e),n.insertRow(e,t,o))}},s.prototype._moveRowInArray=function(e,t,o,i){var n,s,r,a;if(t!==o&&(n=e.indexOf(t),n>-1&&(e.splice(n,1),s=e.indexOf(o),s>-1?i?e.splice(s+1,0,t):e.splice(s,0,t):e.splice(n,0,t)),e===this.getDisplayRows())){r=nn?s:n+1;for(var l=r;l<=a;l++)e[l]&&this.styleRow(e[l],l)}},s.prototype.clearData=function(){this.setData([])},s.prototype.getRowIndex=function(e){return this.findRowIndex(e,this.rows)},s.prototype.getDisplayRowIndex=function(e){var t=this.getDisplayRows().indexOf(e);return t>-1&&t},s.prototype.nextDisplayRow=function(e,t){var o=this.getDisplayRowIndex(e),i=!1;return!1!==o&&o-1)&&o},s.prototype.getData=function(e,t){var o=[];return this.getRows(e).forEach(function(e){"row"==e.type&&o.push(e.getData(t||"data"))}),o},s.prototype.getComponents=function(e){var t=[];return this.getRows(e).forEach(function(e){t.push(e.getComponent())}),t},s.prototype.getDataCount=function(e){return this.getRows(e).length},s.prototype._genRemoteRequest=function(){var e=this,t=this.table,o=t.options,i={};if(t.modExists("page")){if(o.ajaxSorting){var n=this.table.modules.sort.getSort();n.forEach(function(e){delete e.column}),i[this.table.modules.page.paginationDataSentNames.sorters]=n}if(o.ajaxFiltering){var s=this.table.modules.filter.getFilters(!0,!0);i[this.table.modules.page.paginationDataSentNames.filters]=s}this.table.modules.ajax.setParams(i,!0)}t.modules.ajax.sendRequest().then(function(t){e._setDataActual(t,!0)}).catch(function(e){})},s.prototype.filterRefresh=function(){var e=this.table,t=e.options,o=this.scrollLeft;t.ajaxFiltering?"remote"==t.pagination&&e.modExists("page")?(e.modules.page.reset(!0),e.modules.page.setPage(1).then(function(){}).catch(function(){})):t.ajaxProgressiveLoad?e.modules.ajax.loadData().then(function(){}).catch(function(){}):this._genRemoteRequest():this.refreshActiveData("filter"),this.scrollHorizontal(o)},s.prototype.sorterRefresh=function(e){var t=this.table,o=this.table.options,i=this.scrollLeft;o.ajaxSorting?("remote"==o.pagination||o.progressiveLoad)&&t.modExists("page")?(t.modules.page.reset(!0),t.modules.page.setPage(1).then(function(){}).catch(function(){})):o.ajaxProgressiveLoad?t.modules.ajax.loadData().then(function(){}).catch(function(){}):this._genRemoteRequest():this.refreshActiveData(e?"filter":"sort"),this.scrollHorizontal(i)},s.prototype.scrollHorizontal=function(e){this.scrollLeft=e,this.element.scrollLeft=e,this.table.options.groupBy&&this.table.modules.groupRows.scrollHeaders(e),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.scrollHorizontal(e)},s.prototype.refreshActiveData=function(e,t,o){var i,n=this,s=this.table,r=["all","filter","sort","display","freeze","group","tree","page"];if(this.redrawBlock)return void((!this.redrawBlockRestoreConfig||r.indexOf(e)=0))break;s=a}else if(t-r[a].getElement().offsetTop>=0)n=a;else{if(i=!0,!(o-r[a].getElement().offsetTop>=0))break;s=a}}else n=this.vDomTop,s=this.vDomBottom;return r.slice(n,s+1)},s.prototype.displayRowIterator=function(e){this.displayRows.forEach(e),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length},s.prototype.getRows=function(e){var t;switch(e){case"active":t=this.activeRows;break;case"display":t=this.table.rowManager.getDisplayRows();break;case"visible":t=this.getVisibleRows(!0);break;default:t=this.rows}return t},s.prototype.reRenderInPosition=function(e){if("virtual"==this.getRenderMode())if(this.redrawBlock)e?e():this.redrawBlockRederInPosition=!0;else{for(var t=this.element.scrollTop,o=!1,i=!1,n=this.scrollLeft,s=this.getDisplayRows(),r=this.vDomTop;r<=this.vDomBottom;r++)if(s[r]){var a=t-s[r].getElement().offsetTop;if(!(!1===i||Math.abs(a)this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*g),"group"!==f.type&&(u=!1),i.vDomBottom++,c++}e?(i.vDomTopPad=t?i.vDomRowHeight*this.vDomTop+o:i.scrollTop-l,i.vDomBottomPad=i.vDomBottom==i.displayRowsCount-1?0:Math.max(i.vDomScrollHeight-i.vDomTopPad-a-l,0)):(this.vDomTopPad=0,i.vDomRowHeight=Math.floor((a+l)/c),i.vDomBottomPad=i.vDomRowHeight*(i.displayRowsCount-i.vDomBottom-1),i.vDomScrollHeight=l+a+i.vDomBottomPad-i.height),n.style.paddingTop=i.vDomTopPad+"px",n.style.paddingBottom=i.vDomBottomPad+"px",t&&(this.scrollTop=i.vDomTopPad+l+o-(this.element.scrollWidth>this.element.clientWidth?this.element.offsetHeight-this.element.clientHeight:0)),this.scrollTop=Math.min(this.scrollTop,this.element.scrollHeight-this.height),this.element.scrollWidth>this.element.offsetWidth&&t&&(this.scrollTop+=this.element.offsetHeight-this.element.clientHeight),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,s.scrollTop=this.scrollTop,n.style.minWidth=u?i.table.columnManager.getWidth()+"px":"",i.table.options.groupBy&&"fitDataFill"!=i.table.modules.layout.getMode()&&i.displayRowsCount==i.table.modules.groupRows.countGroups()&&(i.tableElement.style.minWidth=i.table.columnManager.getWidth())}else this.renderEmptyScroll();this.fixedHeight||this.adjustTableSize()},s.prototype.scrollVertical=function(e){var t=this.scrollTop-this.vDomScrollPosTop,o=this.scrollTop-this.vDomScrollPosBottom,i=2*this.vDomWindowBuffer;if(-t>i||o>i){var n=this.scrollLeft;this._virtualRenderFill(Math.floor(this.element.scrollTop/this.element.scrollHeight*this.displayRowsCount)),this.scrollHorizontal(n)}else e?(t<0&&this._addTopRow(-t),o<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(-o):this.vDomScrollPosBottom=this.scrollTop)):(t>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(t):this.vDomScrollPosTop=this.scrollTop),o>=0&&this._addBottomRow(o))},s.prototype._addTopRow=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomTop){var n=this.vDomTop-1,s=i[n],r=s.getHeight()||this.vDomRowHeight;e>=r&&(this.styleRow(s,n),o.insertBefore(s.getElement(),o.firstChild),s.initialized&&s.heightInitialized||(this.vDomTopNewRows.push(s),s.heightInitialized||s.clearCellHeight()),s.initialize(),this.vDomTopPad-=r,this.vDomTopPad<0&&(this.vDomTopPad=n*this.vDomRowHeight),n||(this.vDomTopPad=0),o.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=r,this.vDomTop--),e=-(this.scrollTop-this.vDomScrollPosTop),s.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*s.getHeight()),t=(i[this.vDomTop-1].getHeight()||this.vDomRowHeight)?this._addTopRow(e,t+1):this._quickNormalizeRowHeight(this.vDomTopNewRows)}},s.prototype._removeTopRow=function(e){var t=this.tableElement,o=this.getDisplayRows()[this.vDomTop],i=o.getHeight()||this.vDomRowHeight;if(e>=i){var n=o.getElement();n.parentNode.removeChild(n),this.vDomTopPad+=i,t.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?i:i+this.vDomWindowBuffer,this.vDomTop++,e=this.scrollTop-this.vDomScrollPosTop,this._removeTopRow(e)}},s.prototype._addBottomRow=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomBottom=r&&(this.styleRow(s,n),o.appendChild(s.getElement()),s.initialized&&s.heightInitialized||(this.vDomBottomNewRows.push(s),s.heightInitialized||s.clearCellHeight()),s.initialize(),this.vDomBottomPad-=r,(this.vDomBottomPad<0||n==this.displayRowsCount-1)&&(this.vDomBottomPad=0),o.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=r,this.vDomBottom++),e=this.scrollTop-this.vDomScrollPosBottom,s.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*s.getHeight()),t=(i[this.vDomBottom+1].getHeight()||this.vDomRowHeight)?this._addBottomRow(e,t+1):this._quickNormalizeRowHeight(this.vDomBottomNewRows)}},s.prototype._removeBottomRow=function(e){var t=this.tableElement,o=this.getDisplayRows()[this.vDomBottom],i=o.getHeight()||this.vDomRowHeight;if(e>=i){var n=o.getElement();n.parentNode&&n.parentNode.removeChild(n),this.vDomBottomPad+=i,this.vDomBottomPad<0&&(this.vDomBottomPad=0),t.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=i,this.vDomBottom--,e=-(this.scrollTop-this.vDomScrollPosBottom),this._removeBottomRow(e)}},s.prototype._quickNormalizeRowHeight=function(e){e.forEach(function(e){e.calcHeight()}),e.forEach(function(e){e.setCellHeight()}),e.length=0},s.prototype.normalizeHeight=function(){this.activeRows.forEach(function(e){e.normalizeHeight()})},s.prototype.adjustTableSize=function(){var e,t=this.element.clientHeight;if("virtual"===this.renderMode){var o=this.columnManager.getElement().offsetHeight+(this.table.footerManager&&!this.table.footerManager.external?this.table.footerManager.getElement().offsetHeight:0);this.fixedHeight?(this.element.style.minHeight="calc(100% - "+o+"px)",this.element.style.height="calc(100% - "+o+"px)",this.element.style.maxHeight="calc(100% - "+o+"px)"):(this.element.style.height="",this.element.style.height=this.table.element.clientHeight-o+"px",this.element.scrollTop=this.scrollTop),this.height=this.element.clientHeight,this.vDomWindowBuffer=this.table.options.virtualDomBuffer||this.height,this.fixedHeight||t==this.element.clientHeight||((e=this.table.modExists("resizeTable"))&&!this.table.modules.resizeTable.autoResize||!e)&&this.redraw()}},s.prototype.reinitialize=function(){this.rows.forEach(function(e){e.reinitialize()})},s.prototype.blockRedraw=function(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1},s.prototype.restoreRedraw=function(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.stage,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),this.redrawBlockRestoreConfig=!1):this.redrawBlockRederInPosition&&this.reRenderInPosition(),this.redrawBlockRederInPosition=!1},s.prototype.redraw=function(e){var t=this.scrollLeft;this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,e?this.renderTable():("classic"==this.renderMode?this.table.options.groupBy?this.refreshActiveData("group",!1,!1):this._simpleRender():(this.reRenderInPosition(),this.scrollHorizontal(t)),this.displayRowsCount||this.table.options.placeholder&&this.getElement().appendChild(this.table.options.placeholder))},s.prototype.resetScroll=function(){if(this.element.scrollLeft=0,this.element.scrollTop=0,"ie"===this.table.browser){var e=document.createEvent("Event");e.initEvent("scroll",!1,!0),this.element.dispatchEvent(e)}else this.element.dispatchEvent(new Event("scroll"))};var r=function(e){this._row=e};r.prototype.getData=function(e){return this._row.getData(e)},r.prototype.getElement=function(){return this._row.getElement()},r.prototype.getCells=function(){var e=[];return this._row.getCells().forEach(function(t){e.push(t.getComponent())}),e},r.prototype.getCell=function(e){var t=this._row.getCell(e);return!!t&&t.getComponent()},r.prototype.getIndex=function(){return this._row.getData("data")[this._row.table.options.index]},r.prototype.getPosition=function(e){return this._row.table.rowManager.getRowPosition(this._row,e)},r.prototype.delete=function(){return this._row.delete()},r.prototype.scrollTo=function(){return this._row.table.rowManager.scrollToRow(this._row)},r.prototype.pageTo=function(){if(this._row.table.modExists("page",!0))return this._row.table.modules.page.setPageToRow(this._row)},r.prototype.move=function(e,t){this._row.moveToRow(e,t)},r.prototype.update=function(e){return this._row.updateData(e)}, +r.prototype.normalizeHeight=function(){this._row.normalizeHeight(!0)},r.prototype.select=function(){this._row.table.modules.selectRow.selectRows(this._row)},r.prototype.deselect=function(){this._row.table.modules.selectRow.deselectRows(this._row)},r.prototype.toggleSelect=function(){this._row.table.modules.selectRow.toggleRow(this._row)},r.prototype.isSelected=function(){return this._row.table.modules.selectRow.isRowSelected(this._row)},r.prototype._getSelf=function(){return this._row},r.prototype.validate=function(){return this._row.validate()},r.prototype.freeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.freezeRow(this._row)},r.prototype.unfreeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.unfreezeRow(this._row)},r.prototype.isFrozen=function(){if(this._row.table.modExists("frozenRows",!0)){return this._row.table.modules.frozenRows.rows.indexOf(this._row)>-1}return!1},r.prototype.treeCollapse=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.collapseRow(this._row)},r.prototype.treeExpand=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.expandRow(this._row)},r.prototype.treeToggle=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.toggleRow(this._row)},r.prototype.getTreeParent=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeParent(this._row)},r.prototype.getTreeChildren=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeChildren(this._row)},r.prototype.addTreeChild=function(e,t,o){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.addTreeChildRow(this._row,e,t,o)},r.prototype.reformat=function(){return this._row.reinitialize()},r.prototype.getGroup=function(){return this._row.getGroup().getComponent()},r.prototype.getTable=function(){return this._row.table},r.prototype.getNextRow=function(){var e=this._row.nextRow();return e?e.getComponent():e},r.prototype.getPrevRow=function(){var e=this._row.prevRow();return e?e.getComponent():e};var a=function(e,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"row";this.table=t.table,this.parent=t,this.data={},this.type=o,this.element=this.createElement(),this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.component=null,this.setData(e),this.generateElement()};a.prototype.createElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-row"),e.setAttribute("role","row"),e},a.prototype.getElement=function(){return this.element},a.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},a.prototype.generateElement=function(){var e,t,o,i=this;!1!==i.table.options.selectable&&i.table.modExists("selectRow")&&i.table.modules.selectRow.initializeRow(this),!1!==i.table.options.movableRows&&i.table.modExists("moveRow")&&i.table.modules.moveRow.initializeRow(this),!1!==i.table.options.dataTree&&i.table.modExists("dataTree")&&i.table.modules.dataTree.initializeRow(this),"collapse"===i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout")&&i.table.modules.responsiveLayout.initializeRow(this),i.table.options.rowContextMenu&&this.table.modExists("menu")&&i.table.modules.menu.initializeRow(this),i.table.options.rowClick&&i.element.addEventListener("click",function(e){i.table.options.rowClick(e,i.getComponent())}),i.table.options.rowDblClick&&i.element.addEventListener("dblclick",function(e){i.table.options.rowDblClick(e,i.getComponent())}),i.table.options.rowContext&&i.element.addEventListener("contextmenu",function(e){i.table.options.rowContext(e,i.getComponent())}),i.table.options.rowMouseEnter&&i.element.addEventListener("mouseenter",function(e){i.table.options.rowMouseEnter(e,i.getComponent())}),i.table.options.rowMouseLeave&&i.element.addEventListener("mouseleave",function(e){i.table.options.rowMouseLeave(e,i.getComponent())}),i.table.options.rowMouseOver&&i.element.addEventListener("mouseover",function(e){i.table.options.rowMouseOver(e,i.getComponent())}),i.table.options.rowMouseOut&&i.element.addEventListener("mouseout",function(e){i.table.options.rowMouseOut(e,i.getComponent())}),i.table.options.rowMouseMove&&i.element.addEventListener("mousemove",function(e){i.table.options.rowMouseMove(e,i.getComponent())}),i.table.options.rowTap&&(o=!1,i.element.addEventListener("touchstart",function(e){o=!0},{passive:!0}),i.element.addEventListener("touchend",function(e){o&&i.table.options.rowTap(e,i.getComponent()),o=!1})),i.table.options.rowDblTap&&(e=null,i.element.addEventListener("touchend",function(t){e?(clearTimeout(e),e=null,i.table.options.rowDblTap(t,i.getComponent())):e=setTimeout(function(){clearTimeout(e),e=null},300)})),i.table.options.rowTapHold&&(t=null,i.element.addEventListener("touchstart",function(e){clearTimeout(t),t=setTimeout(function(){clearTimeout(t),t=null,o=!1,i.table.options.rowTapHold(e,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(e){clearTimeout(t),t=null}))},a.prototype.generateCells=function(){this.cells=this.table.columnManager.generateCells(this)},a.prototype.initialize=function(e){var t=this;if(!t.initialized||e){for(t.deleteCells();t.element.firstChild;)t.element.removeChild(t.element.firstChild);this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutRow(this),this.generateCells(),t.cells.forEach(function(e){t.element.appendChild(e.getElement()),e.cellRendered()}),e&&t.normalizeHeight(),t.table.options.dataTree&&t.table.modExists("dataTree")&&t.table.modules.dataTree.layoutRow(this),"collapse"===t.table.options.responsiveLayout&&t.table.modExists("responsiveLayout")&&t.table.modules.responsiveLayout.layoutRow(this),t.table.options.rowFormatter&&t.table.options.rowFormatter(t.getComponent()),t.table.options.resizableRows&&t.table.modExists("resizeRows")&&t.table.modules.resizeRows.initializeRow(t),t.initialized=!0}},a.prototype.reinitializeHeight=function(){this.heightInitialized=!1,null!==this.element.offsetParent&&this.normalizeHeight(!0)},a.prototype.reinitialize=function(){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),null!==this.element.offsetParent&&this.initialize(!0)},a.prototype.calcHeight=function(e){var t=0,o=this.table.options.resizableRows?this.element.clientHeight:0;this.cells.forEach(function(e){var o=e.getHeight();o>t&&(t=o)}),this.height=e?Math.max(t,o):this.manualHeight?this.height:Math.max(t,o),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight},a.prototype.setCellHeight=function(){this.cells.forEach(function(e){e.setHeight()}),this.heightInitialized=!0},a.prototype.clearCellHeight=function(){this.cells.forEach(function(e){e.clearHeight()})},a.prototype.normalizeHeight=function(e){e&&this.clearCellHeight(),this.calcHeight(e),this.setCellHeight()},a.prototype.setHeight=function(e,t){(this.height!=e||t)&&(this.manualHeight=!0,this.height=e,this.heightStyled=e?e+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight)},a.prototype.getHeight=function(){return this.outerHeight},a.prototype.getWidth=function(){return this.element.offsetWidth},a.prototype.deleteCell=function(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)},a.prototype.setData=function(e){this.table.modExists("mutator")&&(e=this.table.modules.mutator.transformRow(e,"data")),this.data=e,this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchRow(this)},a.prototype.updateData=function(e){var t,o=this,i=d.prototype.helpers.elVisible(this.element),n={};return new Promise(function(s,r){"string"==typeof e&&(e=JSON.parse(e)),o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.block(),o.table.modExists("mutator")?(n=Object.assign(n,o.data),n=Object.assign(n,e),t=o.table.modules.mutator.transformRow(n,"data",e)):t=e;for(var a in t)o.data[a]=t[a];o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.unblock();for(var a in e){o.table.columnManager.getColumnsByFieldRoot(a).forEach(function(e){var n=o.getCell(e.getField());if(n){var s=e.getFieldValue(t);n.getValue()!=s&&(n.setValueProcessData(s),i&&n.cellRendered())}})}i?(o.normalizeHeight(!0),o.table.options.rowFormatter&&o.table.options.rowFormatter(o.getComponent())):(o.initialized=!1,o.height=0,o.heightStyled=""),!1!==o.table.options.dataTree&&o.table.modExists("dataTree")&&o.table.modules.dataTree.redrawNeeded(e)&&(o.table.modules.dataTree.initializeRow(o),o.table.modules.dataTree.layoutRow(o),o.table.rowManager.refreshActiveData("tree",!1,!0)),o.table.options.rowUpdated.call(o.table,o.getComponent()),s()})},a.prototype.getData=function(e){var t=this;return e?t.table.modExists("accessor")?t.table.modules.accessor.transformRow(t.data,e):void 0:this.data},a.prototype.getCell=function(e){return e=this.table.columnManager.findColumn(e),this.cells.find(function(t){return t.column===e})},a.prototype.getCellIndex=function(e){return this.cells.findIndex(function(t){return t===e})},a.prototype.findNextEditableCell=function(e){var t=!1;if(e0)for(var o=e-1;o>=0;o--){var i=this.cells[o],n=!0;if(i.column.modules.edit&&d.prototype.helpers.elVisible(i.getElement())&&("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n)){t=i;break}}return t},a.prototype.getCells=function(){return this.cells},a.prototype.nextRow=function(){return this.table.rowManager.nextDisplayRow(this,!0)||!1},a.prototype.prevRow=function(){return this.table.rowManager.prevDisplayRow(this,!0)||!1},a.prototype.moveToRow=function(e,t){var o=this.table.rowManager.findRow(e);o?(this.table.rowManager.moveRowActual(this,o,!t),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",e)},a.prototype.validate=function(){var e=[];return this.cells.forEach(function(t){t.validate()||e.push(t.getComponent())}),!e.length||e},a.prototype.delete=function(){var e=this;return new Promise(function(t,o){var i,n;e.table.options.history&&e.table.modExists("history")&&(e.table.options.groupBy&&e.table.modExists("groupRows")?(n=e.getGroup().rows,(i=n.indexOf(e))&&(i=n[i-1])):(i=e.table.rowManager.getRowIndex(e))&&(i=e.table.rowManager.rows[i-1]),e.table.modules.history.action("rowDelete",e,{data:e.getData(),pos:!i,index:i})),e.deleteActual(),t()})},a.prototype.deleteActual=function(e){this.table.rowManager.getRowIndex(this);this.table.modExists("selectRow")&&this.table.modules.selectRow._deselectRow(this,!0),this.table.modExists("edit")&&this.table.modules.edit.currentCell.row===this&&this.table.modules.edit.cancelEdit(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0),this.modules.group&&this.modules.group.removeRow(this),this.table.rowManager.deleteRow(this,e),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.rowDelete(this),this.table.modExists("columnCalcs")&&(this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.columnCalcs.recalcRowGroup(this):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows))},a.prototype.deleteCells=function(){for(var e=this.cells.length,t=0;t-1?(this.browser="ie",this.browserSlow=!0):e.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):e.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0,4))},d.prototype.blockRedraw=function(){return this.rowManager.blockRedraw()},d.prototype.restoreRedraw=function(){return this.rowManager.restoreRedraw()},d.prototype.setDataFromLocalFile=function(e){var t=this;return new Promise(function(o,i){var n=document.createElement("input");n.type="file",n.accept=e||".json,application/json",n.addEventListener("change",function(e){var s,r=n.files[0],a=new FileReader;a.readAsText(r),a.onload=function(e){try{s=JSON.parse(a.result)}catch(e){return console.warn("File Load Error - File contents is invalid JSON",e),void i(e)}t._setData(s).then(function(e){o(e)}).catch(function(e){o(e)})},a.onerror=function(e){console.warn("File Load Error - Unable to read file"),i()}}),n.click()})},d.prototype.setData=function(e,t,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(e,t,o,!1,!0)},d.prototype._setData=function(e,t,o,i,n){var s=this;return"string"!=typeof e?e?s.rowManager.setData(e,i,n):s.modExists("ajax")&&(s.modules.ajax.getUrl||s.options.ajaxURLGenerator)?"remote"==s.options.pagination&&s.modExists("page",!0)?(s.modules.page.reset(!0,!0),s.modules.page.setPage(1)):s.modules.ajax.loadData(i,n):s.rowManager.setData([],i,n):0==e.indexOf("{")||0==e.indexOf("[")?s.rowManager.setData(JSON.parse(e),i,n):s.modExists("ajax",!0)?(t&&s.modules.ajax.setParams(t),o&&s.modules.ajax.setConfig(o),s.modules.ajax.setUrl(e),"remote"==s.options.pagination&&s.modExists("page",!0)?(s.modules.page.reset(!0,!0),s.modules.page.setPage(1)):s.modules.ajax.loadData(i,n)):void 0},d.prototype.clearData=function(){this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this.rowManager.clearData()},d.prototype.getData=function(e){return!0===e&&(console.warn("passing a boolean to the getData function is deprecated, you should now pass the string 'active'"),e="active"),this.rowManager.getData(e)},d.prototype.getDataCount=function(e){return!0===e&&(console.warn("passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'"),e="active"),this.rowManager.getDataCount(e)},d.prototype.searchRows=function(e,t,o){if(this.modExists("filter",!0))return this.modules.filter.search("rows",e,t,o)},d.prototype.searchData=function(e,t,o){if(this.modExists("filter",!0))return this.modules.filter.search("data",e,t,o)},d.prototype.getHtml=function(e,t,o){if(this.modExists("export",!0))return this.modules.export.getHtml(e,t,o)},d.prototype.print=function(e,t,o){if(this.modExists("print",!0))return this.modules.print.printFullscreen(e,t,o)},d.prototype.getAjaxUrl=function(){if(this.modExists("ajax",!0))return this.modules.ajax.getUrl()},d.prototype.replaceData=function(e,t,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(e,t,o,!0)},d.prototype.updateData=function(e){var t=this,o=this,i=0;return new Promise(function(n,s){t.modExists("ajax")&&t.modules.ajax.blockActiveRequest(),"string"==typeof e&&(e=JSON.parse(e)),e?e.forEach(function(e){var t=o.rowManager.findRow(e[o.options.index]);t&&(i++,t.updateData(e).then(function(){--i||n()}))}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})},d.prototype.addData=function(e,t,o){var i=this;return new Promise(function(n,s){i.modExists("ajax")&&i.modules.ajax.blockActiveRequest(),"string"==typeof e&&(e=JSON.parse(e)),e?i.rowManager.addRows(e,t,o).then(function(e){var t=[];e.forEach(function(e){t.push(e.getComponent())}),n(t)}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})},d.prototype.updateOrAddData=function(e){var t=this,o=this,i=[],n=0;return new Promise(function(s,r){t.modExists("ajax")&&t.modules.ajax.blockActiveRequest(),"string"==typeof e&&(e=JSON.parse(e)),e?e.forEach(function(e){var t=o.rowManager.findRow(e[o.options.index]);n++,t?t.updateData(e).then(function(){n--,i.push(t.getComponent()),n||s(i)}):o.rowManager.addRows(e).then(function(e){n--,i.push(e[0].getComponent()),n||s(i)})}):(console.warn("Update Error - No data provided"),r("Update Error - No data provided"))})},d.prototype.getRow=function(e){var t=this.rowManager.findRow(e);return t?t.getComponent():(console.warn("Find Error - No matching row found:",e),!1)},d.prototype.getRowFromPosition=function(e,t){var o=this.rowManager.getRowFromPosition(e,t);return o?o.getComponent():(console.warn("Find Error - No matching row found:",e),!1)},d.prototype.deleteRow=function(e){var t=this;return new Promise(function(o,i){function n(){++r==e.length&&a&&(s.rowManager.reRenderInPosition(),o())}var s=t,r=0,a=0,l=[];Array.isArray(e)||(e=[e]),e.forEach(function(e){var o=t.rowManager.findRow(e,!0);o?l.push(o):(console.warn("Delete Error - No matching row found:",e),i("Delete Error - No matching row found"),n())}),l.sort(function(e,o){return t.rowManager.rows.indexOf(e)>t.rowManager.rows.indexOf(o)?1:-1}),l.forEach(function(e){e.delete().then(function(){a++,n()}).catch(function(e){n(),i(e)})})})},d.prototype.addRow=function(e,t,o){var i=this;return new Promise(function(n,s){"string"==typeof e&&(e=JSON.parse(e)),i.rowManager.addRows(e,t,o).then(function(e){i.modExists("columnCalcs")&&i.modules.columnCalcs.recalc(i.rowManager.activeRows),n(e[0].getComponent())})})},d.prototype.updateOrAddRow=function(e,t){var o=this;return new Promise(function(i,n){var s=o.rowManager.findRow(e);"string"==typeof t&&(t=JSON.parse(t)),s?s.updateData(t).then(function(){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(s.getComponent())}).catch(function(e){n(e)}):s=o.rowManager.addRows(t).then(function(e){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(e[0].getComponent())}).catch(function(e){n(e)})})},d.prototype.updateRow=function(e,t){var o=this;return new Promise(function(i,n){var s=o.rowManager.findRow(e);"string"==typeof t&&(t=JSON.parse(t)),s?s.updateData(t).then(function(){i(s.getComponent())}).catch(function(e){n(e)}):(console.warn("Update Error - No matching row found:",e),n("Update Error - No matching row found"))})},d.prototype.scrollToRow=function(e,t,o){var i=this;return new Promise(function(n,s){var r=i.rowManager.findRow(e);r?i.rowManager.scrollToRow(r,t,o).then(function(){n()}).catch(function(e){s(e)}):(console.warn("Scroll Error - No matching row found:",e),s("Scroll Error - No matching row found"))})},d.prototype.moveRow=function(e,t,o){var i=this.rowManager.findRow(e);i?i.moveToRow(t,o):console.warn("Move Error - No matching row found:",e)},d.prototype.getRows=function(e){return!0===e&&(console.warn("passing a boolean to the getRows function is deprecated, you should now pass the string 'active'"),e="active"),this.rowManager.getComponents(e)},d.prototype.getRowPosition=function(e,t){var o=this.rowManager.findRow(e);return o?this.rowManager.getRowPosition(o,t):(console.warn("Position Error - No matching row found:",e),!1)},d.prototype.copyToClipboard=function(e){this.modExists("clipboard",!0)&&this.modules.clipboard.copy(e)},d.prototype.setColumns=function(e){this.columnManager.setColumns(e)},d.prototype.getColumns=function(e){return this.columnManager.getComponents(e)},d.prototype.getColumn=function(e){var t=this.columnManager.findColumn(e);return t?t.getComponent():(console.warn("Find Error - No matching column found:",e),!1)},d.prototype.getColumnDefinitions=function(){return this.columnManager.getDefinitionTree()},d.prototype.getColumnLayout=function(){if(this.modExists("persistence",!0))return this.modules.persistence.parseColumns(this.columnManager.getColumns())},d.prototype.setColumnLayout=function(e){return!!this.modExists("persistence",!0)&&(this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns,e)),!0)},d.prototype.showColumn=function(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Show Error - No matching column found:",e),!1;t.show(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},d.prototype.hideColumn=function(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Hide Error - No matching column found:",e),!1;t.hide(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},d.prototype.toggleColumn=function(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Visibility Toggle Error - No matching column found:",e),!1;t.visible?t.hide():t.show()},d.prototype.addColumn=function(e,t,o){var i=this;return new Promise(function(n,s){var r=i.columnManager.findColumn(o);i.columnManager.addColumn(e,t,r).then(function(e){n(e.getComponent())}).catch(function(e){s(e)})})},d.prototype.deleteColumn=function(e){var t=this;return new Promise(function(o,i){var n=t.columnManager.findColumn(e);n?n.delete().then(function(){o()}).catch(function(e){i(e)}):(console.warn("Column Delete Error - No matching column found:",e),i())})},d.prototype.updateColumnDefinition=function(e,t){var o=this;return new Promise(function(i,n){var s=o.columnManager.findColumn(e);s?s.updateDefinition(t).then(function(e){i(e)}).catch(function(e){n(e)}):(console.warn("Column Update Error - No matching column found:",e),n())})},d.prototype.moveColumn=function(e,t,o){var i=this.columnManager.findColumn(e),n=this.columnManager.findColumn(t);i?n?this.columnManager.moveColumn(i,n,o):console.warn("Move Error - No matching column found:",n):console.warn("Move Error - No matching column found:",e)},d.prototype.scrollToColumn=function(e,t,o){var i=this;return new Promise(function(n,s){var r=i.columnManager.findColumn(e);r?i.columnManager.scrollToColumn(r,t,o).then(function(){n()}).catch(function(e){s(e)}):(console.warn("Scroll Error - No matching column found:",e),s("Scroll Error - No matching column found"))})},d.prototype.setLocale=function(e){this.modules.localize.setLocale(e)},d.prototype.getLocale=function(){return this.modules.localize.getLocale()},d.prototype.getLang=function(e){return this.modules.localize.getLang(e)},d.prototype.redraw=function(e){this.columnManager.redraw(e),this.rowManager.redraw(e)},d.prototype.setHeight=function(e){"classic"!==this.rowManager.renderMode?(this.options.height=isNaN(e)?e:e+"px",this.element.style.height=this.options.height,this.rowManager.setRenderMode(),this.rowManager.redraw()):console.warn("setHeight function is not available in classic render mode")},d.prototype.setSort=function(e,t){this.modExists("sort",!0)&&(this.modules.sort.setSort(e,t),this.rowManager.sorterRefresh())},d.prototype.getSorters=function(){if(this.modExists("sort",!0))return this.modules.sort.getSort()},d.prototype.clearSort=function(){this.modExists("sort",!0)&&(this.modules.sort.clear(),this.rowManager.sorterRefresh())},d.prototype.setFilter=function(e,t,o,i){this.modExists("filter",!0)&&(this.modules.filter.setFilter(e,t,o,i),this.rowManager.filterRefresh())},d.prototype.addFilter=function(e,t,o,i){this.modExists("filter",!0)&&(this.modules.filter.addFilter(e,t,o,i),this.rowManager.filterRefresh())},d.prototype.getFilters=function(e){if(this.modExists("filter",!0))return this.modules.filter.getFilters(e)},d.prototype.setHeaderFilterFocus=function(e){if(this.modExists("filter",!0)){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Filter Focus Error - No matching column found:",e),!1;this.modules.filter.setHeaderFilterFocus(t)}},d.prototype.getHeaderFilterValue=function(e){if(this.modExists("filter",!0)){var t=this.columnManager.findColumn(e);if(t)return this.modules.filter.getHeaderFilterValue(t);console.warn("Column Filter Error - No matching column found:",e)}},d.prototype.setHeaderFilterValue=function(e,t){if(this.modExists("filter",!0)){var o=this.columnManager.findColumn(e);if(!o)return console.warn("Column Filter Error - No matching column found:",e),!1;this.modules.filter.setHeaderFilterValue(o,t)}},d.prototype.getHeaderFilters=function(){if(this.modExists("filter",!0))return this.modules.filter.getHeaderFilters()},d.prototype.removeFilter=function(e,t,o){this.modExists("filter",!0)&&(this.modules.filter.removeFilter(e,t,o),this.rowManager.filterRefresh())},d.prototype.clearFilter=function(e){this.modExists("filter",!0)&&(this.modules.filter.clearFilter(e),this.rowManager.filterRefresh())},d.prototype.clearHeaderFilter=function(){this.modExists("filter",!0)&&(this.modules.filter.clearHeaderFilter(),this.rowManager.filterRefresh())},d.prototype.selectRow=function(e){this.modExists("selectRow",!0)&&(!0===e&&(console.warn("passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'"),e="active"),this.modules.selectRow.selectRows(e))},d.prototype.deselectRow=function(e){this.modExists("selectRow",!0)&&this.modules.selectRow.deselectRows(e)},d.prototype.toggleSelectRow=function(e){this.modExists("selectRow",!0)&&this.modules.selectRow.toggleRow(e)},d.prototype.getSelectedRows=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedRows()},d.prototype.getSelectedData=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedData()},d.prototype.getInvalidCells=function(){if(this.modExists("validate",!0))return this.modules.validate.getInvalidCells()},d.prototype.clearCellValidation=function(e){var t=this;this.modExists("validate",!0)&&(e||(e=this.modules.validate.getInvalidCells()),Array.isArray(e)||(e=[e]),e.forEach(function(e){t.modules.validate.clearValidation(e._getSelf())}))},d.prototype.validate=function(e){var t=[];return this.rowManager.rows.forEach(function(e){var o=e.validate();!0!==o&&(t=t.concat(o))}),!t.length||t},d.prototype.setMaxPage=function(e){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setMaxPage(e)},d.prototype.setPage=function(e){return this.options.pagination&&this.modExists("page")?this.modules.page.setPage(e):new Promise(function(e,t){t()})},d.prototype.setPageToRow=function(e){var t=this;return new Promise(function(o,i){t.options.pagination&&t.modExists("page")?(e=t.rowManager.findRow(e),e?t.modules.page.setPageToRow(e).then(function(){o()}).catch(function(){i()}):i()):i()})},d.prototype.setPageSize=function(e){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setPageSize(e),this.modules.page.setPage(1).then(function(){}).catch(function(){})},d.prototype.getPageSize=function(){if(this.options.pagination&&this.modExists("page",!0))return this.modules.page.getPageSize()},d.prototype.previousPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.previousPage()},d.prototype.nextPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.nextPage()},d.prototype.getPage=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPage()},d.prototype.getPageMax=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPageMax()},d.prototype.setGroupBy=function(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupBy=e,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")},d.prototype.setGroupStartOpen=function(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupStartOpen=e,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},d.prototype.setGroupHeader=function(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupHeader=e,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},d.prototype.getGroups=function(e){return!!this.modExists("groupRows",!0)&&this.modules.groupRows.getGroups(!0)},d.prototype.getGroupedData=function(){if(this.modExists("groupRows",!0))return this.options.groupBy?this.modules.groupRows.getGroupedData():this.getData()},d.prototype.getEditedCells=function(){if(this.modExists("edit",!0))return this.modules.edit.getEditedCells()},d.prototype.clearCellEdited=function(e){var t=this;this.modExists("edit",!0)&&(e||(e=this.modules.edit.getEditedCells()),Array.isArray(e)||(e=[e]),e.forEach(function(e){t.modules.edit.clearEdited(e._getSelf())}))},d.prototype.getCalcResults=function(){return!!this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.getResults()},d.prototype.recalc=function(){this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.recalcAll(this.rowManager.activeRows)},d.prototype.navigatePrev=function(){var e=!1;return!(!this.modExists("edit",!0)||!(e=this.modules.edit.currentCell))&&e.nav().prev()},d.prototype.navigateNext=function(){var e=!1;return!(!this.modExists("edit",!0)||!(e=this.modules.edit.currentCell))&&e.nav().next()},d.prototype.navigateLeft=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().left())},d.prototype.navigateRight=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().right())},d.prototype.navigateUp=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().up())},d.prototype.navigateDown=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().down())},d.prototype.undo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.undo()},d.prototype.redo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.redo()},d.prototype.getHistoryUndoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryUndoSize()},d.prototype.getHistoryRedoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryRedoSize()},d.prototype.download=function(e,t,o,i){this.modExists("download",!0)&&this.modules.download.download(e,t,o,i)},d.prototype.downloadToTab=function(e,t,o,i){this.modExists("download",!0)&&this.modules.download.download(e,t,o,i,!0)},d.prototype.tableComms=function(e,t,o,i){this.modules.comms.receive(e,t,o,i)},d.prototype.moduleBindings={},d.prototype.extendModule=function(e,t,o){if(d.prototype.moduleBindings[e]){var i=d.prototype.moduleBindings[e].prototype[t];if(i)if("object"==(void 0===o?"undefined":_typeof(o)))for(var n in o)i[n]=o[n];else console.warn("Module Error - Invalid value type, it must be an object");else console.warn("Module Error - property does not exist:",t)}else console.warn("Module Error - module does not exist:",e)},d.prototype.registerModule=function(e,t){d.prototype.moduleBindings[e]=t},d.prototype.bindModules=function(){this.modules={};for(var e in d.prototype.moduleBindings)this.modules[e]=new d.prototype.moduleBindings[e](this)},d.prototype.modExists=function(e,t){return!!this.modules[e]||(t&&console.error("Tabulator Module Not Installed: "+e),!1)},d.prototype.helpers={elVisible:function(e){return!(e.offsetWidth<=0&&e.offsetHeight<=0)},elOffset:function(e){var t=e.getBoundingClientRect();return{top:t.top+window.pageYOffset-document.documentElement.clientTop,left:t.left+window.pageXOffset-document.documentElement.clientLeft}},deepClone:function(e){var t=Array.isArray(e)?[]:{};for(var o in e)null!=e[o]&&"object"===_typeof(e[o])?e[o]instanceof Date?t[o]=new Date(e[o]):t[o]=this.deepClone(e[o]):t[o]=e[o];return t}},d.prototype.comms={tables:[],register:function(e){d.prototype.comms.tables.push(e)},deregister:function(e){var t=d.prototype.comms.tables.indexOf(e);t>-1&&d.prototype.comms.tables.splice(t,1)},lookupTable:function(e,t){var o,i,n=[];if("string"==typeof e){if(o=document.querySelectorAll(e),o.length)for(var s=0;s0?s.setWidth(n):s.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitColumns:function(e){function t(e){return"string"==typeof e?e.indexOf("%")>-1?n/100*parseInt(e):parseInt(e):e}function o(e,i,n,s){function r(e){return n*(e.column.definition.widthGrow||1)}function a(e){return t(e.width)-n*(e.column.definition.widthShrink||0)}var l=[],c=0,u=0,d=0,h=0,p=0,m=[];return e.forEach(function(e,t){var o=s?a(e):r(e);e.column.minWidth>=o?l.push(e):(m.push(e),p+=s?e.column.definition.widthShrink||1:e.column.definition.widthGrow||1)}),l.length?(l.forEach(function(e){c+=s?e.width-e.column.minWidth:e.column.minWidth,e.width=e.column.minWidth}),u=i-c,d=p?Math.floor(u/p):u,h=u-d*p,h+=o(m,u,d,s)):(h=p?i-Math.floor(i/p)*p:i,m.forEach(function(e){e.width=s?a(e):r(e)})),h}var i=this,n=i.table.element.clientWidth,s=0,r=0,a=0,l=0,c=[],u=[],d=0,h=0,p=0;this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(n-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),e.forEach(function(e){var o,i,n;e.visible&&(o=e.definition.width,i=parseInt(e.minWidth),o?(n=t(o),s+=n>i?n:i,e.definition.widthShrink&&(u.push({column:e,width:n>i?n:i}),d+=e.definition.widthShrink)):(c.push({column:e,width:0}),a+=e.definition.widthGrow||1))}),r=n-s,l=Math.floor(r/a);var p=o(c,r,l,!1);c.length&&p>0&&(c[c.length-1].width+=+p),c.forEach(function(e){r-=e.width}),h=Math.abs(p)+r,h>0&&d&&(p=o(u,h,Math.floor(h/d),!0)),u.length&&(u[u.length-1].width-=p),c.forEach(function(e){e.column.setWidth(e.width)}),u.forEach(function(e){e.column.setWidth(e.width)})}},d.prototype.registerModule("layout",h);var p=function(e){this.table=e,this.locale="default",this.lang=!1,this.bindings={}};p.prototype.setHeaderFilterPlaceholder=function(e){this.langs.default.headerFilters.default=e},p.prototype.setHeaderFilterColumnPlaceholder=function(e,t){this.langs.default.headerFilters.columns[e]=t,this.lang&&!this.lang.headerFilters.columns[e]&&(this.lang.headerFilters.columns[e]=t)},p.prototype.installLang=function(e,t){this.langs[e]?this._setLangProp(this.langs[e],t):this.langs[e]=t},p.prototype._setLangProp=function(e,t){for(var o in t)e[o]&&"object"==_typeof(e[o])?this._setLangProp(e[o],t[o]):e[o]=t[o]},p.prototype.setLocale=function(e){function t(e,o){for(var i in e)"object"==_typeof(e[i])?(o[i]||(o[i]={}),t(e[i],o[i])):o[i]=e[i]}var o=this;if(e=e||"default",!0===e&&navigator.language&&(e=navigator.language.toLowerCase()),e&&!o.langs[e]){var i=e.split("-")[0];o.langs[i]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",e,i),e=i):(console.warn("Localization Error - Matching locale not found, using default: ",e),e="default")}o.locale=e,o.lang=d.prototype.helpers.deepClone(o.langs.default||{}),"default"!=e&&t(o.langs[e],o.lang),o.table.options.localized.call(o.table,o.locale,o.lang),o._executeBindings()},p.prototype.getLocale=function(e){return self.locale},p.prototype.getLang=function(e){return e?this.langs[e]:this.lang},p.prototype.getText=function(e,t){var e=t?e+"|"+t:e,o=e.split("|");return this._getLangElement(o,this.locale)||""},p.prototype._getLangElement=function(e,t){var o=this,i=o.lang;return e.forEach(function(e){var t;i&&(t=i[e],i=void 0!==t&&t)}),i},p.prototype.bind=function(e,t){this.bindings[e]||(this.bindings[e]=[]),this.bindings[e].push(t),t(this.getText(e),this.lang)},p.prototype._executeBindings=function(){var e=this;for(var t in e.bindings)!function(t){e.bindings[t].forEach(function(o){o(e.getText(t),e.lang)})}(t)},p.prototype.langs={default:{groups:{item:"item",items:"items"},columns:{},ajax:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All"},headerFilters:{default:"filter column...",columns:{}}}},d.prototype.registerModule("localize",p);var m=function(e){this.table=e};m.prototype.getConnections=function(e){var t,o=this,i=[];return t=d.prototype.comms.lookupTable(e),t.forEach(function(e){o.table!==e&&i.push(e)}),i},m.prototype.send=function(e,t,o,i){var n=this,s=this.getConnections(e);s.forEach(function(e){e.tableComms(n.table.element,t,o,i)}),!s.length&&e&&console.warn("Table Connection Error - No tables matching selector found",e)},m.prototype.receive=function(e,t,o,i){if(this.table.modExists(t))return this.table.modules[t].commsReceived(e,o,i);console.warn("Inter-table Comms Error - no such module:",t)},d.prototype.registerModule("comms",m);var f=function(e){this.table=e,this.allowedTypes=["","data","download","clipboard","print","htmlOutput"]};f.prototype.initializeColumn=function(e){var t=this,o=!1,i={};this.allowedTypes.forEach(function(n){var s,r="accessor"+(n.charAt(0).toUpperCase()+n.slice(1));e.definition[r]&&(s=t.lookupAccessor(e.definition[r]))&&(o=!0,i[r]={accessor:s,params:e.definition[r+"Params"]||{}})}),o&&(e.modules.accessor=i)},f.prototype.lookupAccessor=function(e){var t=!1;switch(void 0===e?"undefined":_typeof(e)){case"string":this.accessors[e]?t=this.accessors[e]:console.warn("Accessor Error - No such accessor found, ignoring: ",e);break;case"function":t=e}return t},f.prototype.transformRow=function(e,t){var o=this,i="accessor"+(t.charAt(0).toUpperCase()+t.slice(1)),n=d.prototype.helpers.deepClone(e||{});return o.table.columnManager.traverse(function(e){var o,s,r,a;e.modules.accessor&&(s=e.modules.accessor[i]||e.modules.accessor.accessor||!1)&&"undefined"!=(o=e.getFieldValue(n))&&(a=e.getComponent(),r="function"==typeof s.params?s.params(o,n,t,a):s.params,e.setFieldValue(n,s.accessor(o,n,t,r,a)))}),n},f.prototype.accessors={},d.prototype.registerModule("accessor",f);var g=function(e){this.table=e,this.config=!1,this.url="",this.urlGenerator=!1,this.params=!1,this.loaderElement=this.createLoaderElement(),this.msgElement=this.createMsgElement(),this.loadingElement=!1,this.errorElement=!1,this.loaderPromise=!1,this.progressiveLoad=!1,this.loading=!1,this.requestOrder=0};g.prototype.initialize=function(){var e;this.loaderElement.appendChild(this.msgElement),this.table.options.ajaxLoaderLoading&&("string"==typeof this.table.options.ajaxLoaderLoading?(e=document.createElement("template"),e.innerHTML=this.table.options.ajaxLoaderLoading.trim(),this.loadingElement=e.content.firstChild):this.loadingElement=this.table.options.ajaxLoaderLoading),this.loaderPromise=this.table.options.ajaxRequestFunc||this.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||this.defaultURLGenerator,this.table.options.ajaxLoaderError&&("string"==typeof this.table.options.ajaxLoaderError?(e=document.createElement("template"),e.innerHTML=this.table.options.ajaxLoaderError.trim(),this.errorElement=e.content.firstChild):this.errorElement=this.table.options.ajaxLoaderError),this.table.options.ajaxParams&&this.setParams(this.table.options.ajaxParams),this.table.options.ajaxConfig&&this.setConfig(this.table.options.ajaxConfig),this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.table.options.ajaxProgressiveLoad&&(this.table.options.pagination?(this.progressiveLoad=!1,console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time")):this.table.modExists("page")?(this.progressiveLoad=this.table.options.ajaxProgressiveLoad,this.table.modules.page.initializeProgressive(this.progressiveLoad)):console.error("Pagination plugin is required for progressive ajax loading"))},g.prototype.createLoaderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-loader"),e},g.prototype.createMsgElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-loader-msg"),e.setAttribute("role","alert"),e},g.prototype.setParams=function(e,t){if(t){this.params=this.params||{};for(var o in e)this.params[o]=e[o]}else this.params=e},g.prototype.getParams=function(){return this.params||{}},g.prototype.setConfig=function(e){if(this._loadDefaultConfig(),"string"==typeof e)this.config.method=e;else for(var t in e)this.config[t]=e[t]},g.prototype._loadDefaultConfig=function(e){var t=this;if(!t.config||e){t.config={};for(var o in t.defaultConfig)t.config[o]=t.defaultConfig[o]}},g.prototype.setUrl=function(e){this.url=e},g.prototype.getUrl=function(){return this.url},g.prototype.loadData=function(e,t){return this.progressiveLoad?this._loadDataProgressive():this._loadDataStandard(e,t)},g.prototype.nextPage=function(e){var t;this.loading||(t=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.getElement().clientHeight,ei||null===i)&&(i=e)}),null!==i?!1!==n?i.toFixed(n):i:""},min:function(e,t,o){var i=null,n=void 0!==o.precision&&o.precision;return e.forEach(function(e){((e=Number(e))"),o.dataTreeExpandElement?"string"==typeof o.dataTreeExpandElement?(e=document.createElement("div"),e.innerHTML=o.dataTreeExpandElement,this.expandEl=e.firstChild):this.expandEl=o.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="
      "),_typeof(o.dataTreeStartExpanded)){case"boolean":this.startOpen=function(e,t){return o.dataTreeStartExpanded};break;case"function":this.startOpen=o.dataTreeStartExpanded;break;default:this.startOpen=function(e,t){return o.dataTreeStartExpanded[t]}}},y.prototype.initializeRow=function(e){var t=e.getData()[this.field],o=Array.isArray(t),i=o||!o&&"object"===(void 0===t?"undefined":_typeof(t))&&null!==t;!i&&e.modules.dataTree&&e.modules.dataTree.branchEl&&e.modules.dataTree.branchEl.parentNode.removeChild(e.modules.dataTree.branchEl),!i&&e.modules.dataTree&&e.modules.dataTree.controlEl&&e.modules.dataTree.controlEl.parentNode.removeChild(e.modules.dataTree.controlEl),e.modules.dataTree={index:e.modules.dataTree?e.modules.dataTree.index:0,open:!!i&&(e.modules.dataTree?e.modules.dataTree.open:this.startOpen(e.getComponent(),0)),controlEl:!(!e.modules.dataTree||!i)&&e.modules.dataTree.controlEl,branchEl:!(!e.modules.dataTree||!i)&&e.modules.dataTree.branchEl,parent:!!e.modules.dataTree&&e.modules.dataTree.parent,children:i}},y.prototype.layoutRow=function(e){var t=this.elementField?e.getCell(this.elementField):e.getCells()[0],o=t.getElement(),i=e.modules.dataTree;i.branchEl&&(i.branchEl.parentNode&&i.branchEl.parentNode.removeChild(i.branchEl),i.branchEl=!1),i.controlEl&&(i.controlEl.parentNode&&i.controlEl.parentNode.removeChild(i.controlEl),i.controlEl=!1),this.generateControlElement(e,o),e.element.classList.add("tabulator-tree-level-"+i.index),i.index&&(this.branchEl?(i.branchEl=this.branchEl.cloneNode(!0),o.insertBefore(i.branchEl,o.firstChild),i.branchEl.style.marginLeft=(i.branchEl.offsetWidth+i.branchEl.style.marginRight)*(i.index-1)+i.index*this.indent+"px"):o.style.paddingLeft=parseInt(window.getComputedStyle(o,null).getPropertyValue("padding-left"))+i.index*this.indent+"px")},y.prototype.generateControlElement=function(e,t){var o=this,i=e.modules.dataTree,t=t||e.getCells()[0].getElement(),n=i.controlEl;!1!==i.children&&(i.open?(i.controlEl=this.collapseEl.cloneNode(!0),i.controlEl.addEventListener("click",function(t){t.stopPropagation(),o.collapseRow(e)})):(i.controlEl=this.expandEl.cloneNode(!0),i.controlEl.addEventListener("click",function(t){t.stopPropagation(),o.expandRow(e)})),i.controlEl.addEventListener("mousedown",function(e){e.stopPropagation()}),n&&n.parentNode===t?n.parentNode.replaceChild(i.controlEl,n):t.insertBefore(i.controlEl,t.firstChild))},y.prototype.setDisplayIndex=function(e){this.displayIndex=e},y.prototype.getDisplayIndex=function(){return this.displayIndex},y.prototype.getRows=function(e){var t=this,o=[];return e.forEach(function(e,i){var n,s;o.push(e),e instanceof a&&(n=e.modules.dataTree.children,n.index||!1===n.children||(s=t.getChildren(e),s.forEach(function(e){o.push(e)})))}),o},y.prototype.getChildren=function(e){var t=this,o=e.modules.dataTree,i=[],n=[];return!1!==o.children&&o.open&&(Array.isArray(o.children)||(o.children=this.generateChildren(e)),i=this.table.modExists("filter")?this.table.modules.filter.filter(o.children):o.children,this.table.modExists("sort")&&this.table.modules.sort.sort(i),i.forEach(function(e){n.push(e),t.getChildren(e).forEach(function(e){n.push(e)})})),n}, +y.prototype.generateChildren=function(e){var t=this,o=[],i=e.getData()[this.field];return Array.isArray(i)||(i=[i]),i.forEach(function(i){var n=new a(i||{},t.table.rowManager);n.modules.dataTree.index=e.modules.dataTree.index+1,n.modules.dataTree.parent=e,n.modules.dataTree.children&&(n.modules.dataTree.open=t.startOpen(n.getComponent(),n.modules.dataTree.index)),o.push(n)}),o},y.prototype.expandRow=function(e,t){var o=e.modules.dataTree;!1!==o.children&&(o.open=!0,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowExpanded(e.getComponent(),e.modules.dataTree.index))},y.prototype.collapseRow=function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open=!1,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowCollapsed(e.getComponent(),e.modules.dataTree.index))},y.prototype.toggleRow=function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open?this.collapseRow(e):this.expandRow(e))},y.prototype.getTreeParent=function(e){return!!e.modules.dataTree.parent&&e.modules.dataTree.parent.getComponent()},y.prototype.getFilteredTreeChildren=function(e){var t,o=e.modules.dataTree,i=[];return o.children&&(Array.isArray(o.children)||(o.children=this.generateChildren(e)),t=this.table.modExists("filter")?this.table.modules.filter.filter(o.children):o.children,t.forEach(function(e){e instanceof a&&i.push(e)})),i},y.prototype.rowDelete=function(e){var t,o=e.modules.dataTree.parent;o&&(t=this.findChildIndex(e,o),!1!==t&&o.data[this.field].splice(t,1),o.data[this.field].length||delete o.data[this.field],this.initializeRow(o),this.layoutRow(o)),this.table.rowManager.refreshActiveData("tree",!1,!0)},y.prototype.addTreeChildRow=function(e,t,o,i){var n=!1;"string"==typeof t&&(t=JSON.parse(t)),Array.isArray(e.data[this.field])||(e.data[this.field]=[],e.modules.dataTree.open=this.startOpen(e.getComponent(),e.modules.dataTree.index)),void 0!==i&&!1!==(n=this.findChildIndex(i,e))&&e.data[this.field].splice(o?n:n+1,0,t),!1===n&&(o?e.data[this.field].unshift(t):e.data[this.field].push(t)),this.initializeRow(e),this.layoutRow(e),this.table.rowManager.refreshActiveData("tree",!1,!0)},y.prototype.findChildIndex=function(e,t){var o=this,i=!1;return"object"==(void 0===e?"undefined":_typeof(e))?e instanceof a?i=e.data:e instanceof r?i=e._getSelf().data:"undefined"!=typeof HTMLElement&&e instanceof HTMLElement&&t.modules.dataTree&&(i=t.modules.dataTree.children.find(function(t){return t instanceof a&&t.element===e}))&&(i=i.data):i=void 0!==e&&null!==e&&t.data[this.field].find(function(t){return t.data[o.table.options.index]==e}),i&&(Array.isArray(t.data[this.field])&&(i=t.data[this.field].indexOf(i)),-1==i&&(i=!1)),i},y.prototype.getTreeChildren=function(e){var t=e.modules.dataTree,o=[];return t.children&&(Array.isArray(t.children)||(t.children=this.generateChildren(e)),t.children.forEach(function(e){e instanceof a&&o.push(e.getComponent())})),o},y.prototype.checkForRestyle=function(e){e.row.cells.indexOf(e)||e.row.reinitialize()},y.prototype.getChildField=function(){return this.field},y.prototype.redrawNeeded=function(e){return!!this.field&&void 0!==e[this.field]||!!this.elementField&&void 0!==e[this.elementField]},d.prototype.registerModule("dataTree",y);var w=function(e){this.table=e};w.prototype.download=function(e,t,o,i,n){function s(o,i){n?!0===n?r.triggerDownload(o,i,e,t,!0):n(o):r.triggerDownload(o,i,e,t)}var r=this,a=!1;if("function"==typeof e?a=e:r.downloaders[e]?a=r.downloaders[e]:console.warn("Download Error - No such download type found: ",e),a){var l=this.generateExportList(i);a.call(this.table,l,o||{},s)}},w.prototype.generateExportList=function(e){var t=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,e||this.table.options.downloadRowRange,"download"),o=this.table.options.groupHeaderDownload;return o&&!Array.isArray(o)&&(o=[o]),t.forEach(function(e){var t;"group"===e.type&&(t=e.columns[0],o&&o[e.indent]&&(t.value=o[e.indent](t.value,e.component._group.getRowCount(),e.component._group.getData(),e.component)))}),t},w.prototype.triggerDownload=function(e,t,o,i,n){var s=document.createElement("a"),r=new Blob([e],{type:t}),i=i||"Tabulator."+("function"==typeof o?"txt":o);(r=this.table.options.downloadReady.call(this.table,e,r))&&(n?window.open(window.URL.createObjectURL(r)):navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(r,i):(s.setAttribute("href",window.URL.createObjectURL(r)),s.setAttribute("download",i),s.style.display="none",document.body.appendChild(s),s.click(),document.body.removeChild(s)),this.table.options.downloadComplete&&this.table.options.downloadComplete())},w.prototype.commsReceived=function(e,t,o){switch(t){case"intercept":this.download(o.type,"",o.options,o.active,o.intercept)}},w.prototype.downloaders={csv:function(e,t,o){var i=t&&t.delimiter?t.delimiter:",",n=[],s=[];e.forEach(function(e){var t=[];switch(e.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":e.columns.forEach(function(e,t){e&&1===e.depth&&(s[t]=void 0===e.value||"null"==typeof e.value?"":e.value)});break;case"row":e.columns.forEach(function(e){if(e){switch(_typeof(e.value)){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}t.push('"'+String(e.value).split('"').join('""')+'"')}}),n.push(t.join(i))}}),s.length&&(n=[s].concat(n)),n=n.join("\n"),t.bom&&(n="\ufeff"+n),o(n,"text/csv")},json:function(e,t,o){var i=[];e.forEach(function(e){var t={};switch(e.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":e.columns.forEach(function(e){e&&(t[e.component.getField()]=e.value)}),i.push(t)}}),i=JSON.stringify(i,null,"\t"),o(i,"application/json")},pdf:function(e,t,o){function i(e,t){var o=[];return e.columns.forEach(function(e){var i;if(e){switch(_typeof(e.value)){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}i={content:e.value,colSpan:e.width,rowSpan:e.height},t&&(i.styles=t),o.push(i)}else o.push("")}),o}var n=[],s=[],r={},a=t.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},l=t.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},c=t.jsPDF||{},u=t&&t.title?t.title:"";c.orientation||(c.orientation=t.orientation||"landscape"),c.unit||(c.unit="pt"),e.forEach(function(e){switch(e.type){case"header":n.push(i(e));break;case"group":s.push(i(e,a));break;case"calc":s.push(i(e,l));break;case"row":s.push(i(e))}});var d=new jsPDF(c);t&&t.autoTable&&(r="function"==typeof t.autoTable?t.autoTable(d)||{}:t.autoTable),u&&(r.addPageContent=function(e){d.text(u,40,30)}),r.head=n,r.body=s,d.autoTable(r),t&&t.documentProcessing&&t.documentProcessing(d),o(d.output("arraybuffer"),"application/pdf")},xlsx:function(e,t,o){function i(){var t=[],o=[],i={},n={s:{c:0,r:0},e:{c:e[0]?e[0].columns.reduce(function(e,t){return e+(t&&t.width?t.width:1)},0):0,r:e.length}};return e.forEach(function(e,i){var n=[];e.columns.forEach(function(e,t){e?(n.push(e.value instanceof Date||"object"!==_typeof(e.value)?e.value:JSON.stringify(e.value)),(e.width>1||e.height>-1)&&o.push({s:{r:i,c:t},e:{r:i+e.height-1,c:t+e.width-1}})):n.push("")}),t.push(n)}),XLSX.utils.sheet_add_aoa(i,t),i["!ref"]=XLSX.utils.encode_range(n),o.length&&(i["!merges"]=o),i}var n,s=this,r=t.sheetName||"Sheet1",a=XLSX.utils.book_new();if(a.SheetNames=[],a.Sheets={},t.sheetOnly)return void o(i());if(t.sheets)for(var l in t.sheets)!0===t.sheets[l]?(a.SheetNames.push(l),a.Sheets[l]=i()):(a.SheetNames.push(l),this.table.modules.comms.send(t.sheets[l],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:s.active,intercept:function(e){a.Sheets[l]=e}}));else a.SheetNames.push(r),a.Sheets[r]=i();t.documentProcessing&&(a=t.documentProcessing(a)),n=XLSX.write(a,{bookType:"xlsx",bookSST:!0,type:"binary"}),o(function(e){for(var t=new ArrayBuffer(e.length),o=new Uint8Array(t),i=0;i!=e.length;++i)o[i]=255&e.charCodeAt(i);return t}(n),"application/octet-stream")},html:function(e,t,o){this.modExists("export",!0)&&o(this.modules.export.genereateHTMLTable(e),"text/html")}},d.prototype.registerModule("download",w);var E=function(e){this.table=e,this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1,this.editedCells=[]};E.prototype.initializeColumn=function(e){var t=this,o={editor:!1,blocked:!1,check:e.definition.editable,params:e.definition.editorParams||{}};switch(_typeof(e.definition.editor)){case"string":"tick"===e.definition.editor&&(e.definition.editor="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),t.editors[e.definition.editor]?o.editor=t.editors[e.definition.editor]:console.warn("Editor Error - No such editor found: ",e.definition.editor);break;case"function":o.editor=e.definition.editor;break;case"boolean":!0===e.definition.editor&&("function"!=typeof e.definition.formatter?("tick"===e.definition.formatter&&(e.definition.formatter="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),t.editors[e.definition.formatter]?o.editor=t.editors[e.definition.formatter]:o.editor=t.editors.input):console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",e.definition.formatter))}o.editor&&(e.modules.edit=o)},E.prototype.getCurrentCell=function(){return!!this.currentCell&&this.currentCell.getComponent()},E.prototype.clearEditor=function(e){var t,o=this.currentCell;if(this.invalidEdit=!1,o){for(this.currentCell=!1,t=o.getElement(),e?o.validate():t.classList.remove("tabulator-validation-fail"),t.classList.remove("tabulator-editing");t.firstChild;)t.removeChild(t.firstChild);o.row.getElement().classList.remove("tabulator-row-editing")}},E.prototype.cancelEdit=function(){if(this.currentCell){var e=this.currentCell,t=this.currentCell.getComponent();this.clearEditor(!0),e.setValueActual(e.getValue()),e.cellRendered(),e.column.cellEvents.cellEditCancelled&&e.column.cellEvents.cellEditCancelled.call(this.table,t),this.table.options.cellEditCancelled.call(this.table,t)}},E.prototype.bindEditor=function(e){var t=this,o=e.getElement();o.setAttribute("tabindex",0),o.addEventListener("click",function(e){o.classList.contains("tabulator-editing")||o.focus({preventScroll:!0})}),o.addEventListener("mousedown",function(e){t.mouseClick=!0}),o.addEventListener("focus",function(o){t.recursionBlock||t.edit(e,o,!1)})},E.prototype.focusCellNoEvent=function(e,t){this.recursionBlock=!0,t&&"ie"===this.table.browser||e.getElement().focus({preventScroll:!0}),this.recursionBlock=!1},E.prototype.editCell=function(e,t){this.focusCellNoEvent(e),this.edit(e,!1,t)},E.prototype.focusScrollAdjust=function(e){if("virtual"==this.table.rowManager.getRenderMode()){var t=this.table.rowManager.element.scrollTop,o=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,i=e.row.getElement();i.offsetTop;i.offsetTopo&&(this.table.rowManager.element.scrollTop+=i.offsetTop+i.offsetHeight-o)}},E.prototype.edit=function(e,t,o){function i(t){if(c.currentCell===e){var o=!0;return e.column.modules.validate&&c.table.modExists("validate")&&"manual"!=c.table.options.validationMode&&(o=c.table.modules.validate.validate(e.column.modules.validate,e,t)),!0===o||"highlight"===c.table.options.validationMode?(c.clearEditor(),e.setValue(t,!0),e.modules.edit||(e.modules.edit={}),e.modules.edit.edited=!0,-1==c.editedCells.indexOf(e)&&c.editedCells.push(e),c.table.options.dataTree&&c.table.modExists("dataTree")&&c.table.modules.dataTree.checkForRestyle(e),!0===o||(h.classList.add("tabulator-validation-fail"),!1)):(c.invalidEdit=!0,h.classList.add("tabulator-validation-fail"),c.focusCellNoEvent(e,!0),d(),c.table.options.validationFailed.call(c.table,e.getComponent(),t,o),!1)}}function n(){c.currentCell===e&&(c.cancelEdit(),c.table.options.dataTree&&c.table.modExists("dataTree")&&c.table.modules.dataTree.checkForRestyle(e))}function s(e){d=e}var r,a,l,c=this,u=!0,d=function(){},h=e.getElement();if(this.currentCell)return void(this.invalidEdit||this.cancelEdit());if(e.column.modules.edit.blocked)return this.mouseClick=!1,h.blur(),!1;switch(t&&t.stopPropagation(),_typeof(e.column.modules.edit.check)){case"function":u=e.column.modules.edit.check(e.getComponent());break;case"boolean":u=e.column.modules.edit.check}if(u||o){if(c.cancelEdit(),c.currentCell=e,this.focusScrollAdjust(e),a=e.getComponent(),this.mouseClick&&(this.mouseClick=!1,e.column.cellEvents.cellClick&&e.column.cellEvents.cellClick.call(this.table,t,a)),e.column.cellEvents.cellEditing&&e.column.cellEvents.cellEditing.call(this.table,a),c.table.options.cellEditing.call(this.table,a),l="function"==typeof e.column.modules.edit.params?e.column.modules.edit.params(a):e.column.modules.edit.params,!1===(r=e.column.modules.edit.editor.call(c,a,s,i,n,l)))return h.blur(),!1;if(!(r instanceof Node))return console.warn("Edit Error - Editor should return an instance of Node, the editor returned:",r),h.blur(),!1;for(h.classList.add("tabulator-editing"),e.row.getElement().classList.add("tabulator-row-editing");h.firstChild;)h.removeChild(h.firstChild);h.appendChild(r),d();for(var p=h.children,m=0;m46){if(o>=i.length)return t.preventDefault(),t.stopPropagation(),a=!1,!1;switch(i[o]){case n:if(l.toUpperCase()==l.toLowerCase())return t.preventDefault(),t.stopPropagation(),a=!1,!1;break;case s:if(isNaN(l))return t.preventDefault(),t.stopPropagation(),a=!1,!1;break;case r:break;default:if(l!==i[o])return t.preventDefault(),t.stopPropagation(),a=!1,!1}a=!0}}),e.addEventListener("keyup",function(i){i.keyCode>46&&t.maskAutoFill&&o(e.value.length)}),e.placeholder||(e.placeholder=i),t.maskAutoFill&&o(e.value.length)},E.prototype.getEditedCells=function(){var e=[];return this.editedCells.forEach(function(t){e.push(t.getComponent())}),e},E.prototype.clearEdited=function(e){var t;e.modules.edit&&e.modules.edit.edited&&(e.modules.validate.invalid=!1,(t=this.editedCells.indexOf(e))>-1&&this.editedCells.splice(t,1))},E.prototype.editors={input:function(e,t,o,i,n){function s(e){(null===r||void 0===r)&&""!==a.value||a.value!==r?o(a.value)&&(r=a.value):i()}var r=e.getValue(),a=document.createElement("input");if(a.setAttribute("type",n.search?"search":"text"),a.style.padding="4px",a.style.width="100%",a.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var l in n.elementAttributes)"+"==l.charAt(0)?(l=l.slice(1),a.setAttribute(l,a.getAttribute(l)+n.elementAttributes["+"+l])):a.setAttribute(l,n.elementAttributes[l]);return a.value=void 0!==r?r:"",t(function(){a.focus({preventScroll:!0}),a.style.height="100%"}),a.addEventListener("change",s),a.addEventListener("blur",s),a.addEventListener("keydown",function(e){switch(e.keyCode){case 13:s(e);break;case 27:i()}}),n.mask&&this.table.modules.edit.maskInput(a,n),a},textarea:function(e,t,o,i,n){function s(t){(null===r||void 0===r)&&""!==c.value||c.value!==r?(o(c.value)&&(r=c.value),setTimeout(function(){e.getRow().normalizeHeight()},300)):i()}var r=e.getValue(),a=n.verticalNavigation||"hybrid",l=String(null!==r&&void 0!==r?r:""),c=(l.match(/(?:\r\n|\r|\n)/g),document.createElement("textarea")),u=0;if(c.style.display="block",c.style.padding="2px",c.style.height="100%",c.style.width="100%",c.style.boxSizing="border-box",c.style.whiteSpace="pre-wrap",c.style.resize="none",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var d in n.elementAttributes)"+"==d.charAt(0)?(d=d.slice(1),c.setAttribute(d,c.getAttribute(d)+n.elementAttributes["+"+d])):c.setAttribute(d,n.elementAttributes[d]);return c.value=l,t(function(){c.focus({preventScroll:!0}),c.style.height="100%"}),c.addEventListener("change",s),c.addEventListener("blur",s),c.addEventListener("keyup",function(){c.style.height="";var t=c.scrollHeight;c.style.height=t+"px",t!=u&&(u=t,e.getRow().normalizeHeight())}),c.addEventListener("keydown",function(e){switch(e.keyCode){case 27:i();break;case 38:("editor"==a||"hybrid"==a&&c.selectionStart)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 40:("editor"==a||"hybrid"==a&&c.selectionStart!==c.value.length)&&(e.stopImmediatePropagation(),e.stopPropagation())}}),n.mask&&this.table.modules.edit.maskInput(c,n),c},number:function(e,t,o,i,n){function s(){var e=l.value;isNaN(e)||""===e||(e=Number(e)),e!==r?o(e)&&(r=e):i()}var r=e.getValue(),a=n.verticalNavigation||"editor",l=document.createElement("input");if(l.setAttribute("type","number"),void 0!==n.max&&l.setAttribute("max",n.max),void 0!==n.min&&l.setAttribute("min",n.min),void 0!==n.step&&l.setAttribute("step",n.step),l.style.padding="4px",l.style.width="100%",l.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var c in n.elementAttributes)"+"==c.charAt(0)?(c=c.slice(1),l.setAttribute(c,l.getAttribute(c)+n.elementAttributes["+"+c])):l.setAttribute(c,n.elementAttributes[c]);l.value=r;var u=function(e){s()};return t(function(){l.removeEventListener("blur",u),l.focus({preventScroll:!0}),l.style.height="100%",l.addEventListener("blur",u)}),l.addEventListener("keydown",function(e){switch(e.keyCode){case 13:s();break;case 27:i();break;case 38:case 40:"editor"==a&&(e.stopImmediatePropagation(),e.stopPropagation())}}),n.mask&&this.table.modules.edit.maskInput(l,n),l},range:function(e,t,o,i,n){function s(){var e=a.value;isNaN(e)||""===e||(e=Number(e)),e!=r?o(e)&&(r=e):i()}var r=e.getValue(),a=document.createElement("input");if(a.setAttribute("type","range"),void 0!==n.max&&a.setAttribute("max",n.max),void 0!==n.min&&a.setAttribute("min",n.min),void 0!==n.step&&a.setAttribute("step",n.step),a.style.padding="4px",a.style.width="100%",a.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var l in n.elementAttributes)"+"==l.charAt(0)?(l=l.slice(1),a.setAttribute(l,a.getAttribute(l)+n.elementAttributes["+"+l])):a.setAttribute(l,n.elementAttributes[l]);return a.value=r,t(function(){a.focus({preventScroll:!0}),a.style.height="100%"}),a.addEventListener("blur",function(e){s()}),a.addEventListener("keydown",function(e){switch(e.keyCode){case 13:s();break;case 27:i()}}),a},select:function(e,t,o,i,n){function s(t){var o,i={},s=w.table.getData();return o=t?w.table.columnManager.getColumnByField(t):e.getColumn()._getSelf(),o?(s.forEach(function(e){var t=o.getFieldValue(e);null!==t&&void 0!==t&&""!==t&&(i[t]=!0)}),i=n.sortValuesList?"asc"==n.sortValuesList?Object.keys(i).sort():Object.keys(i).sort().reverse():Object.keys(i)):console.warn("unable to find matching column to create select lookup list:",t),i}function r(t,o){function i(e){var e={label:e.label,value:e.value,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1};return o.indexOf(e.value)>-1&&c(e),n.push(e),s.push(e),e}var n=[],s=[];if("function"==typeof t&&(t=t(e)),Array.isArray(t))t.forEach(function(e){var t;"object"===(void 0===e?"undefined":_typeof(e))?e.options?(t={label:e.label,group:!0,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1},s.push(t),e.options.forEach(function(e){i(e)})):i(e):(t={label:e,value:e,element:!1},o.indexOf(t.value)>-1&&c(t),n.push(t),s.push(t))});else for(var r in t){var l={label:t[r],value:r,element:!1};o.indexOf(l.value)>-1&&c(l),n.push(l),s.push(l)}D=n,S=s,a()}function a(){for(;L.firstChild;)L.removeChild(L.firstChild);S.forEach(function(t){var o=t.element;if(!o){if(o=document.createElement("div"),t.label=n.listItemFormatter?n.listItemFormatter(t.value,t.label,e,o,t.itemParams):t.label,t.group?(o.classList.add("tabulator-edit-select-list-group"),o.tabIndex=0,o.innerHTML=""===t.label?" ":t.label):(o.classList.add("tabulator-edit-select-list-item"),o.tabIndex=0,o.innerHTML=""===t.label?" ":t.label,o.addEventListener("click",function(){T?(h(t),M.focus()):p(t)}),H.indexOf(t)>-1&&o.classList.add("active")),t.elementAttributes&&"object"==_typeof(t.elementAttributes))for(var i in t.elementAttributes)"+"==i.charAt(0)?(i=i.slice(1),o.setAttribute(i,M.getAttribute(i)+t.elementAttributes["+"+i])):o.setAttribute(i,t.elementAttributes[i]);o.addEventListener("mousedown",function(){z=!1,setTimeout(function(){z=!0},10)}),t.element=o}L.appendChild(o)})}function l(e,t){!T&&k&&k.element&&k.element.classList.remove("active"),k&&k.element&&k.element.classList.remove("focused"),k=e,e.element&&(e.element.classList.add("focused"),t&&e.element.classList.add("active"))}function c(e){-1==H.indexOf(e)&&(H.push(e),l(e,!0)),f()}function u(e){var t=H[e];e>-1&&(H.splice(e,1),t.element&&t.element.classList.remove("active"))}function h(e){e||(e=k);var t=H.indexOf(e);t>-1?u(t):(!0!==T&&H.length>=T&&u(0),c(e)),f()}function p(e){v(),e||(e=k),e&&o(e.value)}function m(){v();var e=[];H.forEach(function(t){e.push(t.value)}),o(e)}function f(){var e=[];H.forEach(function(t){e.push(t.label)}),M.value=e.join(", ")}function g(){v(),i()}function b(){if(!L.parentNode){!0===n.values?r(s(),R):"string"==typeof n.values?r(s(n.values),R):r(n.values||[],R);var e=d.prototype.helpers.elOffset(E);L.style.minWidth=E.offsetWidth+"px",L.style.top=e.top+E.offsetHeight+"px",L.style.left=e.left+"px",L.addEventListener("mousedown",function(e){z=!1,setTimeout(function(){z=!0},10)}),document.body.appendChild(L)}}function v(){L.parentNode&&L.parentNode.removeChild(L),y()}function y(){w.table.rowManager.element.removeEventListener("scroll",g)}var w=this,E=e.getElement(),C=e.getValue(),x=n.verticalNavigation||"editor",R=void 0!==C||null===C?C:void 0!==n.defaultValue?n.defaultValue:[],M=document.createElement("input"),L=document.createElement("div"),T=n.multiselect,D=[],k={},S=[],H=[],z=!0;if(this.table.rowManager.element.addEventListener("scroll",g),(Array.isArray(n)||!Array.isArray(n)&&"object"===(void 0===n?"undefined":_typeof(n))&&!n.values)&&(console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object"),n={values:n}),M.setAttribute("type","text"),M.style.padding="4px",M.style.width="100%",M.style.boxSizing="border-box",M.style.cursor="default",M.readOnly=0!=this.currentCell,n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var A in n.elementAttributes)"+"==A.charAt(0)?(A=A.slice(1),M.setAttribute(A,M.getAttribute(A)+n.elementAttributes["+"+A])):M.setAttribute(A,n.elementAttributes[A]);return M.value=void 0!==C||null===C?C:"",M.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=D.indexOf(k),("editor"==x||"hybrid"==x&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t>0&&l(D[t-1],!T));break;case 40:t=D.indexOf(k),("editor"==x||"hybrid"==x&&t-1||String(t.title).toLowerCase().indexOf(String(e).toLowerCase())>-1)&&s.push(t)}),h(s,t))}function l(e){var t=document.createElement("div");u(),!1!==e&&(t.classList.add("tabulator-edit-select-list-notice"),t.tabIndex=0,e instanceof Node?t.appendChild(e):t.innerHTML=e,L.appendChild(t))}function c(e){var t=[];if(Array.isArray(e))e.forEach(function(e){var o={};"object"===(void 0===e?"undefined":_typeof(e))?(o.title=n.listItemFormatter?n.listItemFormatter(e.value,e.label):e.label,o.value=e.value):(o.title=n.listItemFormatter?n.listItemFormatter(e,e):e,o.value=e),t.push(o)});else for(var o in e){var i={title:n.listItemFormatter?n.listItemFormatter(o,e[o]):e[o],value:o};t.push(i)}return t}function u(){for(;L.firstChild;)L.removeChild(L.firstChild)}function h(e,t){e.length?p(e,t):n.emptyPlaceholder&&l(n.emptyPlaceholder)}function p(e,t){var o=!1;u(),T=e,T.forEach(function(e){var i=e.element;i||(i=document.createElement("div"),i.classList.add("tabulator-edit-select-list-item"),i.tabIndex=0,i.innerHTML=e.title,i.addEventListener("click",function(t){g(e),m()}),i.addEventListener("mousedown",function(e){k=!1,setTimeout(function(){k=!0},10)}),e.element=i,t&&e.value==C&&(M.value=e.title,e.element.classList.add("active"),o=!0),e===D&&(e.element.classList.add("active"),o=!0)),L.appendChild(i)}),o||g(!1)}function m(){b(),D?C!==D.value?(C=D.value,M.value=D.title,o(D.value)):i():n.freetext?(C=M.value,o(M.value)):n.allowEmpty&&""===M.value?(C=M.value,o(M.value)):i()}function f(){if(!L.parentNode){for(;L.firstChild;)L.removeChild(L.firstChild);var e=d.prototype.helpers.elOffset(E);L.style.minWidth=E.offsetWidth+"px",L.style.top=e.top+E.offsetHeight+"px",L.style.left=e.left+"px",document.body.appendChild(L)}}function g(e,t){D&&D.element&&D.element.classList.remove("active"),D=e,e&&e.element&&e.element.classList.add("active")}function b(){L.parentNode&&L.parentNode.removeChild(L),y()}function v(){b(),i()}function y(){w.table.rowManager.element.removeEventListener("scroll",v)}var w=this,E=e.getElement(),C=e.getValue(),x=n.verticalNavigation||"editor",R=void 0!==C||null===C?C:void 0!==n.defaultValue?n.defaultValue:"",M=document.createElement("input"),L=document.createElement("div"),T=[],D=!1,k=!0,S=!1;if(this.table.rowManager.element.addEventListener("scroll",v),M.setAttribute("type","search"),M.style.padding="4px",M.style.width="100%",M.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var H in n.elementAttributes)"+"==H.charAt(0)?(H=H.slice(1),M.setAttribute(H,M.getAttribute(H)+n.elementAttributes["+"+H])):M.setAttribute(H,n.elementAttributes[H]);return L.classList.add("tabulator-edit-select-list"),L.addEventListener("mousedown",function(e){k=!1,setTimeout(function(){k=!0},10)}),M.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=T.indexOf(D),("editor"==x||"hybrid"==x&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),g(t>0?T[t-1]:!1));break;case 40:t=T.indexOf(D),("editor"==x||"hybrid"==x&&t'):("ie"==a.table.browser?t.setAttribute("class","tabulator-star-inactive"):t.classList.replace("tabulator-star-active","tabulator-star-inactive"),t.innerHTML='')})}function r(e){c=e,s(e)}var a=this,l=e.getElement(),c=e.getValue(),u=l.getElementsByTagName("svg").length||5,d=l.getElementsByTagName("svg")[0]?l.getElementsByTagName("svg")[0].getAttribute("width"):14,h=[],p=document.createElement("div"),m=document.createElementNS("http://www.w3.org/2000/svg","svg");if(l.style.whiteSpace="nowrap",l.style.overflow="hidden",l.style.textOverflow="ellipsis",p.style.verticalAlign="middle",p.style.display="inline-block",p.style.padding="4px",m.setAttribute("width",d),m.setAttribute("height",d),m.setAttribute("viewBox","0 0 512 512"),m.setAttribute("xml:space","preserve"),m.style.padding="0 1px",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var f in n.elementAttributes)"+"==f.charAt(0)?(f=f.slice(1),p.setAttribute(f,p.getAttribute(f)+n.elementAttributes["+"+f])):p.setAttribute(f,n.elementAttributes[f]);for(var g=1;g<=u;g++)!function(e){var t=document.createElement("span"),i=m.cloneNode(!0);h.push(i),t.addEventListener("mouseenter",function(t){t.stopPropagation(),t.stopImmediatePropagation(),s(e)}),t.addEventListener("mousemove",function(e){e.stopPropagation(),e.stopImmediatePropagation()}),t.addEventListener("click",function(t){t.stopPropagation(),t.stopImmediatePropagation(),o(e),l.blur()}),t.appendChild(i),p.appendChild(t)}(g);return c=Math.min(parseInt(c),u),s(c),p.addEventListener("mousemove",function(e){s(0)}),p.addEventListener("click",function(e){o(0)}),l.addEventListener("blur",function(e){i()}),l.addEventListener("keydown",function(e){switch(e.keyCode){case 39:r(c+1);break;case 37:r(c-1);break;case 13:o(c);break;case 27:i()}}),p},progress:function(e,t,o,i,n){function s(){var e=d*Math.round(m.offsetWidth/(l.clientWidth/100))+u;o(e),l.setAttribute("aria-valuenow",e),l.setAttribute("aria-label",h)}var r,a,l=e.getElement(),c=void 0===n.max?l.getElementsByTagName("div")[0].getAttribute("max")||100:n.max,u=void 0===n.min?l.getElementsByTagName("div")[0].getAttribute("min")||0:n.min,d=(c-u)/100,h=e.getValue()||0,p=document.createElement("div"),m=document.createElement("div");if(p.style.position="absolute",p.style.right="0",p.style.top="0",p.style.bottom="0",p.style.width="5px",p.classList.add("tabulator-progress-handle"),m.style.display="inline-block", +m.style.position="relative",m.style.height="100%",m.style.backgroundColor="#488CE9",m.style.maxWidth="100%",m.style.minWidth="0%",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var f in n.elementAttributes)"+"==f.charAt(0)?(f=f.slice(1),m.setAttribute(f,m.getAttribute(f)+n.elementAttributes["+"+f])):m.setAttribute(f,n.elementAttributes[f]);return l.style.padding="4px 4px",h=Math.min(parseFloat(h),c),h=Math.max(parseFloat(h),u),h=Math.round((h-u)/d),m.style.width=h+"%",l.setAttribute("aria-valuemin",u),l.setAttribute("aria-valuemax",c),m.appendChild(p),p.addEventListener("mousedown",function(e){r=e.screenX,a=m.offsetWidth}),p.addEventListener("mouseover",function(){p.style.cursor="ew-resize"}),l.addEventListener("mousemove",function(e){r&&(m.style.width=a+e.screenX-r+"px")}),l.addEventListener("mouseup",function(e){r&&(e.stopPropagation(),e.stopImmediatePropagation(),r=!1,a=!1,s())}),l.addEventListener("keydown",function(e){switch(e.keyCode){case 39:e.preventDefault(),m.style.width=m.clientWidth+l.clientWidth/100+"px";break;case 37:e.preventDefault(),m.style.width=m.clientWidth-l.clientWidth/100+"px";break;case 9:case 13:s();break;case 27:i()}}),l.addEventListener("blur",function(){i()}),m},tickCross:function(e,t,o,i,n){function s(e){return l?e?u?c:a.checked:a.checked&&!u?(a.checked=!1,a.indeterminate=!0,u=!0,c):(u=!1,a.checked):a.checked}var r=e.getValue(),a=document.createElement("input"),l=n.tristate,c=void 0===n.indeterminateValue?null:n.indeterminateValue,u=!1;if(a.setAttribute("type","checkbox"),a.style.marginTop="5px",a.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var d in n.elementAttributes)"+"==d.charAt(0)?(d=d.slice(1),a.setAttribute(d,a.getAttribute(d)+n.elementAttributes["+"+d])):a.setAttribute(d,n.elementAttributes[d]);return a.value=r,!l||void 0!==r&&r!==c&&""!==r||(u=!0,a.indeterminate=!0),"firefox"!=this.table.browser&&t(function(){a.focus({preventScroll:!0})}),a.checked=!0===r||"true"===r||"True"===r||1===r,a.addEventListener("change",function(e){o(s())}),a.addEventListener("blur",function(e){o(s(!0))}),a.addEventListener("keydown",function(e){13==e.keyCode&&o(s()),27==e.keyCode&&i()}),a}},d.prototype.registerModule("edit",E);var C=function(e,t,o,i){this.type=e,this.columns=t,this.component=o||!1,this.indent=i||0},x=function(e,t,o,i,n){this.value=e,this.component=t||!1,this.width=o,this.height=i,this.depth=n},R=function(e){this.table=e,this.config={},this.cloneTableStyle=!0,this.colVisProp=""};R.prototype.generateExportList=function(e,t,o,i){this.cloneTableStyle=t,this.config=e||{},this.colVisProp=i;var n=!1!==this.config.columnHeaders?this.headersToExportRows(this.generateColumnGroupHeaders()):[],s=this.bodyToExportRows(this.rowLookup(o));return n.concat(s)},R.prototype.genereateTable=function(e,t,o,i){var n=this.generateExportList(e,t,o,i);return this.genereateTableElement(n)},R.prototype.rowLookup=function(e){var t=this,o=[];if("function"==typeof e)e.call(this.table).forEach(function(e){(e=t.table.rowManager.findRow(e))&&o.push(e)});else switch(e){case!0:case"visible":o=this.table.rowManager.getVisibleRows(!0);break;case"all":o=this.table.rowManager.rows;break;case"selected":o=this.table.modules.selectRow.selectedRows;break;case"active":default:o=this.table.rowManager.getDisplayRows()}return Object.assign([],o)},R.prototype.generateColumnGroupHeaders=function(){var e=this,t=[];return(!1!==this.config.columnGroups?this.table.columnManager.columns:this.table.columnManager.columnsByIndex).forEach(function(o){var i=e.processColumnGroup(o);i&&t.push(i)}),t},R.prototype.processColumnGroup=function(e){var t=this,o=e.columns,i=0,n=e.definition["title"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))]||e.definition.title,s={title:n,column:e,depth:1};if(o.length){if(s.subGroups=[],s.width=0,o.forEach(function(e){var o=t.processColumnGroup(e);o&&(s.width+=o.width,s.subGroups.push(o),o.depth>i&&(i=o.depth))}),s.depth+=i,!s.width)return!1}else{if(!this.columnVisCheck(e))return!1;s.width=1}return s},R.prototype.columnVisCheck=function(e){return!1!==e.definition[this.colVisProp]&&(e.visible||!e.visible&&e.definition[this.colVisProp])},R.prototype.headersToExportRows=function(e){function t(e,n){var s=i-n;if(void 0===o[n]&&(o[n]=[]),e.height=e.subGroups?1:s-e.depth+1,o[n].push(e),e.height>1)for(var r=1;r1)for(var a=1;ai&&(i=e.depth)}),e.forEach(function(e){t(e,0)}),o.forEach(function(e){var t=[];e.forEach(function(e){e?t.push(new x(e.title,e.column.getComponent(),e.width,e.height,e.depth)):t.push(null)}),n.push(new C("header",t))}),n},R.prototype.bodyToExportRows=function(e){var t=this,o=[],i=[];return this.table.columnManager.columnsByIndex.forEach(function(e){t.columnVisCheck(e)&&o.push(e.getComponent())}),!1!==this.config.columnCalcs&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&e.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&e.push(this.table.modules.columnCalcs.botRow)),e=e.filter(function(e){switch(e.type){case"group":return!1!==t.config.rowGroups;case"calc":return!1!==t.config.columnCalcs;case"row":return!(t.table.options.dataTree&&!1===t.config.dataTree&&e.modules.dataTree.parent)}return!0}),e.forEach(function(e,n){var s=e.getData(t.colVisProp),r=[],a=0;switch(e.type){case"group":a=e.level,r.push(new x(e.key,e.getComponent(),o.length,1));break;case"calc":case"row":o.forEach(function(e){r.push(new x(e._column.getFieldValue(s),e,1,1))}),t.table.options.dataTree&&!1!==t.config.dataTree&&(a=e.modules.dataTree.index)}i.push(new C(e.type,r,e.getComponent(),a))}),i},R.prototype.genereateTableElement=function(e){var t=this,o=document.createElement("table"),i=document.createElement("thead"),n=document.createElement("tbody"),s=this.lookupTableStyles(),r=this.table.options["rowFormatter"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],a={};return a.rowFormatter=null!==r?r:this.table.options.rowFormatter,this.table.options.dataTree&&!1!==this.config.dataTree&&this.table.modExists("columnCalcs")&&(a.treeElementField=this.table.modules.dataTree.elementField),a.groupHeader=this.table.options["groupHeader"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],a.groupHeader&&!Array.isArray(a.groupHeader)&&(a.groupHeader=[a.groupHeader]),o.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),i,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),e.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),e.forEach(function(e,o){switch(e.type){case"header":i.appendChild(t.genereateHeaderElement(e,a,s));break;case"group":n.appendChild(t.genereateGroupElement(e,a,s));break;case"calc":n.appendChild(t.genereateCalcElement(e,a,s));break;case"row":var r=t.genereateRowElement(e,a,s);t.mapElementStyles(o%2&&s.evenRow?s.evenRow:s.oddRow,r,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),n.appendChild(r)}}),i.innerHTML&&o.appendChild(i),o.appendChild(n),this.mapElementStyles(this.table.element,o,["border-top","border-left","border-right","border-bottom"]),o},R.prototype.lookupTableStyles=function(){var e={};return this.cloneTableStyle&&window.getComputedStyle&&(e.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),e.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),e.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),e.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),e.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],e.firstRow&&(e.styleCells=e.firstRow.getElementsByClassName("tabulator-cell"),e.firstCell=e.styleCells[0],e.lastCell=e.styleCells[e.styleCells.length-1])),e},R.prototype.genereateHeaderElement=function(e,t,o){var i=this,n=document.createElement("tr");return e.columns.forEach(function(e){if(e){var t=document.createElement("th"),o=e.component._column.definition.cssClass?e.component._column.definition.cssClass.split(" "):[];t.colSpan=e.width,t.rowSpan=e.height,t.innerHTML=e.value,i.cloneTableStyle&&(t.style.boxSizing="border-box"),o.forEach(function(e){t.classList.add(e)}),i.mapElementStyles(e.component.getElement(),t,["text-align","border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),i.mapElementStyles(e.component._column.contentElement,t,["padding-top","padding-left","padding-right","padding-bottom"]),e.component._column.visible?i.mapElementStyles(e.component.getElement(),t,["width"]):e.component._column.definition.width&&(t.style.width=e.component._column.definition.width+"px"),e.component._column.parent&&i.mapElementStyles(e.component._column.parent.groupElement,t,["border-top"]),n.appendChild(t)}}),n},R.prototype.genereateGroupElement=function(e,t,o){var i=document.createElement("tr"),n=document.createElement("td"),s=e.columns[0];return i.classList.add("tabulator-print-table-row"),t.groupHeader&&t.groupHeader[e.indent]?s.value=t.groupHeader[e.indent](s.value,e.component._group.getRowCount(),e.component._group.getData(),e.component):!1===t.groupHeader?s.value=s.value:s.value=e.component._group.generator(s.value,e.component._group.getRowCount(),e.component._group.getData(),e.component),n.colSpan=s.width,n.innerHTML=s.value,i.classList.add("tabulator-print-table-group"),i.classList.add("tabulator-group-level-"+e.indent),s.component.getVisibility()&&i.classList.add("tabulator-group-visible"),this.mapElementStyles(o.firstGroup,i,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(o.firstGroup,n,["padding-top","padding-left","padding-right","padding-bottom"]),i.appendChild(n),i},R.prototype.genereateCalcElement=function(e,t,o){var i=this.genereateRowElement(e,t,o);return i.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(o.calcRow,i,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),i},R.prototype.genereateRowElement=function(e,t,o){var n=this,s=document.createElement("tr");return s.classList.add("tabulator-print-table-row"),e.columns.forEach(function(r){if(r){var a=document.createElement("td"),l=r.component._column,c=r.value,u={modules:{},getValue:function(){return c},getField:function(){return l.definition.field},getElement:function(){return a},getColumn:function(){return l.getComponent()},getData:function(){return rowData},getRow:function(){return e.getComponent()},getComponent:function(){return u},column:l};if((l.definition.cssClass?l.definition.cssClass.split(" "):[]).forEach(function(e){a.classList.add(e)}),n.table.modExists("format")&&!1!==n.config.formatCells)c=n.table.modules.format.formatExportValue(u,n.colVisProp);else switch(void 0===c?"undefined":_typeof(c)){case"object":c=JSON.stringify(c);break;case"undefined":case"null":c="";break;default:c=c}if(c instanceof Node?a.appendChild(c):a.innerHTML=c,o.firstCell&&(n.mapElementStyles(o.firstCell,a,["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size"]),l.definition.align&&(a.style.textAlign=l.definition.align)),n.table.options.dataTree&&!1!==n.config.dataTree&&(t.treeElementField&&t.treeElementField==l.field||!t.treeElementField&&0==i)&&(e.component._row.modules.dataTree.controlEl&&a.insertBefore(e.component._row.modules.dataTree.controlEl.cloneNode(!0),a.firstChild),e.component._row.modules.dataTree.branchEl&&a.insertBefore(e.component._row.modules.dataTree.branchEl.cloneNode(!0),a.firstChild)),s.appendChild(a),u.modules.format&&u.modules.format.renderedCallback&&u.modules.format.renderedCallback(),t.rowFormatter&&!1!==n.config.formatCells){var d=e.getComponent();d.getElement=function(){return s},t.rowFormatter(d)}}}),s},R.prototype.genereateHTMLTable=function(e){var t=document.createElement("div");return t.appendChild(this.genereateTableElement(e)),t.innerHTML},R.prototype.getHtml=function(e,t,o,i){var n=this.generateExportList(o||this.table.options.htmlOutputConfig,t,e,i||"htmlOutput");return this.genereateHTMLTable(n)},R.prototype.mapElementStyles=function(e,t,o){if(this.cloneTableStyle&&e&&t){var i={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var n=window.getComputedStyle(e);o.forEach(function(e){t.style[i[e]]=n.getPropertyValue(e)})}}},d.prototype.registerModule("export",R);var M=function(e){this.table=e,this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1};M.prototype.initializeColumn=function(e,t){function o(t){var o,r="input"==e.modules.filter.tagType&&"text"==e.modules.filter.attrType||"textarea"==e.modules.filter.tagType?"partial":"match",a="",l="";if(void 0===e.modules.filter.prevSuccess||e.modules.filter.prevSuccess!==t){if(e.modules.filter.prevSuccess=t,e.modules.filter.emptyFunc(t))delete n.headerFilters[s];else{switch(e.modules.filter.value=t,_typeof(e.definition.headerFilterFunc)){case"string":n.filters[e.definition.headerFilterFunc]?(a=e.definition.headerFilterFunc,o=function(o){var i=e.definition.headerFilterFuncParams||{},s=e.getFieldValue(o);return i="function"==typeof i?i(t,s,o):i,n.filters[e.definition.headerFilterFunc](t,s,o,i)}):console.warn("Header Filter Error - Matching filter function not found: ",e.definition.headerFilterFunc);break;case"function":o=function(o){var i=e.definition.headerFilterFuncParams||{},n=e.getFieldValue(o);return i="function"==typeof i?i(t,n,o):i,e.definition.headerFilterFunc(t,n,o,i)},a=o}if(!o)switch(r){case"partial":o=function(o){var i=e.getFieldValue(o);return void 0!==i&&null!==i&&String(i).toLowerCase().indexOf(String(t).toLowerCase())>-1},a="like";break;default:o=function(o){return e.getFieldValue(o)==t},a="="}n.headerFilters[s]={value:t,func:o,type:a,params:i||{}}}l=JSON.stringify(n.headerFilters),n.prevHeaderFilterChangeCheck!==l&&(n.prevHeaderFilterChangeCheck=l,n.changed=!0,n.table.rowManager.filterRefresh())}return!0}var i,n=this,s=e.getField();e.modules.filter={success:o,attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(e)},M.prototype.generateHeaderFilterElement=function(e,t,o){function i(){}var n,s,r,a,l,c,u,d=this,h=this,p=e.modules.filter.success,m=e.getField();if(e.modules.filter.headerElement&&e.modules.filter.headerElement.parentNode&&e.contentElement.removeChild(e.modules.filter.headerElement.parentNode),m){switch(e.modules.filter.emptyFunc=e.definition.headerFilterEmptyCheck||function(e){return!e&&"0"!==e},n=document.createElement("div"),n.classList.add("tabulator-header-filter"),_typeof(e.definition.headerFilter)){case"string":h.table.modules.edit.editors[e.definition.headerFilter]?(s=h.table.modules.edit.editors[e.definition.headerFilter],"tick"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",e.definition.editor);break;case"function":s=e.definition.headerFilter;break;case"boolean":e.modules.edit&&e.modules.edit.editor?s=e.modules.edit.editor:e.definition.formatter&&h.table.modules.edit.editors[e.definition.formatter]?(s=h.table.modules.edit.editors[e.definition.formatter],"tick"!==e.definition.formatter&&"tickCross"!==e.definition.formatter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):s=h.table.modules.edit.editors.input}if(s){if(a={getValue:function(){return void 0!==t?t:""},getField:function(){return e.definition.field},getElement:function(){return n},getColumn:function(){return e.getComponent()},getRow:function(){return{normalizeHeight:function(){}}}},u=e.definition.headerFilterParams||{},u="function"==typeof u?u.call(h.table):u,!(r=s.call(this.table.modules.edit,a,function(){},p,i,u)))return void console.warn("Filter Error - Cannot add filter to "+m+" column, editor returned a value of false");if(!(r instanceof Node))return void console.warn("Filter Error - Cannot add filter to "+m+" column, editor should return an instance of Node, the editor returned:",r);m?h.table.modules.localize.bind("headerFilters|columns|"+e.definition.field,function(e){r.setAttribute("placeholder",void 0!==e&&e?e:h.table.modules.localize.getText("headerFilters|default"))}):h.table.modules.localize.bind("headerFilters|default",function(e){r.setAttribute("placeholder",void 0!==h.column.definition.headerFilterPlaceholder&&h.column.definition.headerFilterPlaceholder?h.column.definition.headerFilterPlaceholder:e)}),r.addEventListener("click",function(e){e.stopPropagation(),r.focus()}),r.addEventListener("focus",function(e){var t=d.table.columnManager.element.scrollLeft;t!==d.table.rowManager.element.scrollLeft&&(d.table.rowManager.scrollHorizontal(t),d.table.columnManager.scrollHorizontal(t))}),l=!1,c=function(e){l&&clearTimeout(l),l=setTimeout(function(){p(r.value)},h.table.options.headerFilterLiveFilterDelay)},e.modules.filter.headerElement=r,e.modules.filter.attrType=r.hasAttribute("type")?r.getAttribute("type").toLowerCase():"",e.modules.filter.tagType=r.tagName.toLowerCase(),!1!==e.definition.headerFilterLiveFilter&&("autocomplete"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter&&("autocomplete"!==e.definition.editor&&"tickCross"!==e.definition.editor||!0!==e.definition.headerFilter)&&(r.addEventListener("keyup",c),r.addEventListener("search",c),"number"==e.modules.filter.attrType&&r.addEventListener("change",function(e){p(r.value)}),"text"==e.modules.filter.attrType&&"ie"!==this.table.browser&&r.setAttribute("type","search")),"input"!=e.modules.filter.tagType&&"select"!=e.modules.filter.tagType&&"textarea"!=e.modules.filter.tagType||r.addEventListener("mousedown",function(e){e.stopPropagation()})),n.appendChild(r),e.contentElement.appendChild(n),o||h.headerFilterColumns.push(e)}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",e.definition.title)},M.prototype.hideHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="none")})},M.prototype.showHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="")})},M.prototype.setHeaderFilterFocus=function(e){e.modules.filter&&e.modules.filter.headerElement?e.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",e.getField())},M.prototype.getHeaderFilterValue=function(e){if(e.modules.filter&&e.modules.filter.headerElement)return e.modules.filter.headerElement.value;console.warn("Column Filter Error - No header filter set on column:",e.getField())},M.prototype.setHeaderFilterValue=function(e,t){e&&(e.modules.filter&&e.modules.filter.headerElement?(this.generateHeaderFilterElement(e,t,!0),e.modules.filter.success(t)):console.warn("Column Filter Error - No header filter set on column:",e.getField()))},M.prototype.reloadHeaderFilter=function(e){e&&(e.modules.filter&&e.modules.filter.headerElement?this.generateHeaderFilterElement(e,e.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",e.getField()))},M.prototype.hasChanged=function(){var e=this.changed;return this.changed=!1,e},M.prototype.setFilter=function(e,t,o,i){var n=this;n.filterList=[],Array.isArray(e)||(e=[{field:e,type:t,value:o,params:i}]),n.addFilter(e)},M.prototype.addFilter=function(e,t,o,i){var n=this;Array.isArray(e)||(e=[{field:e,type:t,value:o,params:i}]),e.forEach(function(e){(e=n.findFilter(e))&&(n.filterList.push(e),n.changed=!0)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},M.prototype.findFilter=function(e){var t,o=this;if(Array.isArray(e))return this.findSubFilters(e);var i=!1;return"function"==typeof e.field?i=function(t){return e.field(t,e.type||{})}:o.filters[e.type]?(t=o.table.columnManager.getColumnByField(e.field),i=t?function(i){return o.filters[e.type](e.value,t.getFieldValue(i),i,e.params||{})}:function(t){return o.filters[e.type](e.value,t[e.field],t,e.params||{})}):console.warn("Filter Error - No such filter type found, ignoring: ",e.type),e.func=i,!!e.func&&e},M.prototype.findSubFilters=function(e){var t=this,o=[];return e.forEach(function(e){(e=t.findFilter(e))&&o.push(e)}),!!o.length&&o},M.prototype.getFilters=function(e,t){var o=[];return e&&(o=this.getHeaderFilters()),t&&o.forEach(function(e){"function"==typeof e.type&&(e.type="function")}),o=o.concat(this.filtersToArray(this.filterList,t))},M.prototype.filtersToArray=function(e,t){var o=this,i=[];return e.forEach(function(e){var n;Array.isArray(e)?i.push(o.filtersToArray(e,t)):(n={field:e.field,type:e.type,value:e.value},t&&"function"==typeof n.type&&(n.type="function"),i.push(n))}),i},M.prototype.getHeaderFilters=function(){var e=[];for(var t in this.headerFilters)e.push({field:t,type:this.headerFilters[t].type,value:this.headerFilters[t].value});return e},M.prototype.removeFilter=function(e,t,o){var i=this;Array.isArray(e)||(e=[{field:e,type:t,value:o}]),e.forEach(function(e){var t=-1;t="object"==_typeof(e.field)?i.filterList.findIndex(function(t){return e===t}):i.filterList.findIndex(function(t){return e.field===t.field&&e.type===t.type&&e.value===t.value}),t>-1?(i.filterList.splice(t,1),i.changed=!0):console.warn("Filter Error - No matching filter type found, ignoring: ",e.type)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},M.prototype.clearFilter=function(e){this.filterList=[],e&&this.clearHeaderFilter(),this.changed=!0,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},M.prototype.clearHeaderFilter=function(){var e=this;this.headerFilters={},e.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach(function(t){t.modules.filter.value=null,t.modules.filter.prevSuccess=void 0,e.reloadHeaderFilter(t)}),this.changed=!0},M.prototype.search=function(e,t,o,i){var n=this,s=[],r=[];return Array.isArray(t)||(t=[{field:t,type:o,value:i}]),t.forEach(function(e){(e=n.findFilter(e))&&r.push(e)}),this.table.rowManager.rows.forEach(function(t){var o=!0;r.forEach(function(e){n.filterRecurse(e,t.getData())||(o=!1)}),o&&s.push("data"===e?t.getData("data"):t.getComponent())}),s},M.prototype.filter=function(e,t){var o=this,i=[],n=[];return o.table.options.dataFiltering&&o.table.options.dataFiltering.call(o.table,o.getFilters()),o.table.options.ajaxFiltering||!o.filterList.length&&!Object.keys(o.headerFilters).length?i=e.slice(0):e.forEach(function(e){o.filterRow(e)&&i.push(e)}),o.table.options.dataFiltered&&(i.forEach(function(e){n.push(e.getComponent())}),o.table.options.dataFiltered.call(o.table,o.getFilters(),n)),i},M.prototype.filterRow=function(e,t){var o=this,i=!0,n=e.getData();o.filterList.forEach(function(e){o.filterRecurse(e,n)||(i=!1)});for(var s in o.headerFilters)o.headerFilters[s].func(n)||(i=!1);return i},M.prototype.filterRecurse=function(e,t){var o=this,i=!1;return Array.isArray(e)?e.forEach(function(e){o.filterRecurse(e,t)&&(i=!0)}):i=e.func(t),i},M.prototype.filters={"=":function(e,t,o,i){return t==e},"<":function(e,t,o,i){return t":function(e,t,o,i){return t>e},">=":function(e,t,o,i){return t>=e},"!=":function(e,t,o,i){return t!=e},regex:function(e,t,o,i){return"string"==typeof e&&(e=new RegExp(e)),e.test(t)},like:function(e,t,o,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().indexOf(e.toLowerCase())>-1},keywords:function(e,t,o,i){var n=e.toLowerCase().split(void 0===i.separator?" ":i.separator),s=String(null===t||void 0===t?"":t).toLowerCase(),r=[];return n.forEach(function(e){s.includes(e)&&r.push(!0)}),i.matchAll?r.length===n.length:!!r.length},starts:function(e,t,o,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().startsWith(e.toLowerCase())},ends:function(e,t,o,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().endsWith(e.toLowerCase())},in:function(e,t,o,i){return Array.isArray(e)?e.indexOf(t)>-1:(console.warn("Filter Error - filter value is not an array:",e),!1)}},d.prototype.registerModule("filter",M);var L=function(e){this.table=e};L.prototype.initializeColumn=function(e){e.modules.format=this.lookupFormatter(e,""),void 0!==e.definition.formatterPrint&&(e.modules.format.print=this.lookupFormatter(e,"Print")),void 0!==e.definition.formatterClipboard&&(e.modules.format.clipboard=this.lookupFormatter(e,"Clipboard")),void 0!==e.definition.formatterHtmlOutput&&(e.modules.format.htmlOutput=this.lookupFormatter(e,"HtmlOutput"))},L.prototype.lookupFormatter=function(e,t){var o={params:e.definition["formatter"+t+"Params"]||{}},i=e.definition["formatter"+t];switch(void 0===i?"undefined":_typeof(i)){case"string":"tick"===i&&(i="tickCross",void 0===o.params.crossElement&&(o.params.crossElement=!1),console.warn("DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false")),this.formatters[i]?o.formatter=this.formatters[i]:(console.warn("Formatter Error - No such formatter found: ",i),o.formatter=this.formatters.plaintext);break;case"function":o.formatter=i;break;default:o.formatter=this.formatters.plaintext}return o},L.prototype.cellRendered=function(e){e.modules.format&&e.modules.format.renderedCallback&&e.modules.format.renderedCallback()},L.prototype.formatValue=function(e){function t(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t}var o=e.getComponent(),i="function"==typeof e.column.modules.format.params?e.column.modules.format.params(o):e.column.modules.format.params;return e.column.modules.format.formatter.call(this,o,i,t)},L.prototype.formatExportValue=function(e,t){var o,i=e.column.modules.format[t];if(i){var n=function(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t};return o="function"==typeof i.params?i.params(component):i.params,i.formatter.call(this,e.getComponent(),o,n)}return this.formatValue(e)},L.prototype.sanitizeHTML=function(e){if(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};return String(e).replace(/[&<>"'`=\/]/g,function(e){return t[e]})}return e},L.prototype.emptyToSpace=function(e){return null===e||void 0===e||""===e?" ":e},L.prototype.getFormatter=function(e){var e;switch(void 0===e?"undefined":_typeof(e)){case"string":this.formatters[e]?e=this.formatters[e]:(console.warn("Formatter Error - No such formatter found: ",e),e=this.formatters.plaintext);break;case"function":e=e;break;default:e=this.formatters.plaintext}return e},L.prototype.formatters={plaintext:function(e,t,o){return this.emptyToSpace(this.sanitizeHTML(e.getValue()))},html:function(e,t,o){return e.getValue()},textarea:function(e,t,o){return e.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(e.getValue()))},money:function(e,t,o){var i,n,s,r,a=parseFloat(e.getValue()),l=t.decimal||".",c=t.thousand||",",u=t.symbol||"",d=!!t.symbolAfter,h=void 0!==t.precision?t.precision:2;if(isNaN(a))return this.emptyToSpace(this.sanitizeHTML(e.getValue()));for(i=!1!==h?a.toFixed(h):a,i=String(i).split("."),n=i[0],s=i.length>1?l+i[1]:"",r=/(\d+)(\d{3})/;r.test(n);)n=n.replace(r,"$1"+c+"$2");return d?n+s+u:u+n+s},link:function(e,t,o){var i,n=e.getValue(),s=t.urlPrefix||"",r=t.download,a=n,l=document.createElement("a");if(t.labelField&&(i=e.getData(),a=i[t.labelField]),t.label)switch(_typeof(t.label)){case"string":a=t.label;break;case"function":a=t.label(e)}if(a){if(t.urlField&&(i=e.getData(),n=i[t.urlField]),t.url)switch(_typeof(t.url)){case"string":n=t.url;break;case"function":n=t.url(e)}return l.setAttribute("href",s+n),t.target&&l.setAttribute("target",t.target),t.download&&(r="function"==typeof r?r(e):!0===r?"":r,l.setAttribute("download",r)),l.innerHTML=this.emptyToSpace(this.sanitizeHTML(a)),l}return" "},image:function(e,t,o){var i=document.createElement("img");switch(i.setAttribute("src",e.getValue()),_typeof(t.height)){case"number":i.style.height=t.height+"px";break;case"string":i.style.height=t.height}switch(_typeof(t.width)){case"number":i.style.width=t.width+"px";break;case"string":i.style.width=t.width}return i.addEventListener("load",function(){e.getRow().normalizeHeight()}),i},tickCross:function(e,t,o){var i=e.getValue(),n=e.getElement(),s=t.allowEmpty,r=t.allowTruthy,a=void 0!==t.tickElement?t.tickElement:'',l=void 0!==t.crossElement?t.crossElement:'';return r&&i||!0===i||"true"===i||"True"===i||1===i||"1"===i?(n.setAttribute("aria-checked",!0),a||""):!s||"null"!==i&&""!==i&&null!==i&&void 0!==i?(n.setAttribute("aria-checked",!1),l||""):(n.setAttribute("aria-checked","mixed"),"")},datetime:function(e,t,o){var i=t.inputFormat||"YYYY-MM-DD hh:mm:ss",n=t.outputFormat||"DD/MM/YYYY hh:mm:ss",s=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",r=e.getValue(),a=moment(r,i);return a.isValid()?t.timezone?a.tz(t.timezone).format(n):a.format(n):!0===s?r:"function"==typeof s?s(r):s},datetimediff:function(e,t,o){ +var i=t.inputFormat||"YYYY-MM-DD hh:mm:ss",n=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",s=void 0!==t.suffix&&t.suffix,r=void 0!==t.unit?t.unit:void 0,a=void 0!==t.humanize&&t.humanize,l=void 0!==t.date?t.date:moment(),c=e.getValue(),u=moment(c,i);return u.isValid()?a?moment.duration(u.diff(l)).humanize(s):u.diff(l,r)+(s?" "+s:""):!0===n?c:"function"==typeof n?n(c):n},lookup:function(e,t,o){var i=e.getValue();return void 0===t[i]?(console.warn("Missing display value for "+i),i):t[i]},star:function(e,t,o){var i=e.getValue(),n=e.getElement(),s=t&&t.stars?t.stars:5,r=document.createElement("span"),a=document.createElementNS("http://www.w3.org/2000/svg","svg");r.style.verticalAlign="middle",a.setAttribute("width","14"),a.setAttribute("height","14"),a.setAttribute("viewBox","0 0 512 512"),a.setAttribute("xml:space","preserve"),a.style.padding="0 1px",i=i&&!isNaN(i)?parseInt(i):0,i=Math.max(0,Math.min(i,s));for(var l=1;l<=s;l++){var c=a.cloneNode(!0);c.innerHTML=l<=i?'':'',r.appendChild(c)}return n.style.whiteSpace="nowrap",n.style.overflow="hidden",n.style.textOverflow="ellipsis",n.setAttribute("aria-label",i),r},traffic:function(e,t,o){var i,n,s=this.sanitizeHTML(e.getValue())||0,r=document.createElement("span"),a=t&&t.max?t.max:100,l=t&&t.min?t.min:0,c=t&&void 0!==t.color?t.color:["red","orange","green"],u="#666666";if(!isNaN(s)&&void 0!==e.getValue()){switch(r.classList.add("tabulator-traffic-light"),n=parseFloat(s)<=a?parseFloat(s):a,n=parseFloat(n)>=l?parseFloat(n):l,i=(a-l)/100,n=Math.round((n-l)/i),void 0===c?"undefined":_typeof(c)){case"string":u=c;break;case"function":u=c(s);break;case"object":if(Array.isArray(c)){var d=100/c.length,h=Math.floor(n/d);h=Math.min(h,c.length-1),h=Math.max(h,0),u=c[h];break}}return r.style.backgroundColor=u,r}},progress:function(e,t,o){var i,n,s,r,a,c=this.sanitizeHTML(e.getValue())||0,u=e.getElement(),d=t&&t.max?t.max:100,h=t&&t.min?t.min:0,p=t&&t.legendAlign?t.legendAlign:"center";switch(n=parseFloat(c)<=d?parseFloat(c):d,n=parseFloat(n)>=h?parseFloat(n):h,i=(d-h)/100,n=Math.round((n-h)/i),_typeof(t.color)){case"string":s=t.color;break;case"function":s=t.color(c);break;case"object":if(Array.isArray(t.color)){var m=100/t.color.length,f=Math.floor(n/m);f=Math.min(f,t.color.length-1),f=Math.max(f,0),s=t.color[f];break}default:s="#2DC214"}switch(_typeof(t.legend)){case"string":r=t.legend;break;case"function":r=t.legend(c);break;case"boolean":r=c;break;default:r=!1}switch(_typeof(t.legendColor)){case"string":a=t.legendColor;break;case"function":a=t.legendColor(c);break;case"object":if(Array.isArray(t.legendColor)){var m=100/t.legendColor.length,f=Math.floor(n/m);f=Math.min(f,t.legendColor.length-1),f=Math.max(f,0),a=t.legendColor[f]}break;default:a="#000"}u.style.minWidth="30px",u.style.position="relative",u.setAttribute("aria-label",n);var g=document.createElement("div");if(g.style.display="inline-block",g.style.position="relative",g.style.width=n+"%",g.style.backgroundColor=s,g.style.height="100%",g.setAttribute("data-max",d),g.setAttribute("data-min",h),r){var b=document.createElement("div");b.style.position="absolute",b.style.top="4px",b.style.left=0,b.style.textAlign=p,b.style.width="100%",b.style.color=a,b.innerHTML=r}return o(function(){if(!(e instanceof l)){var t=document.createElement("div");t.style.position="absolute",t.style.top="4px",t.style.bottom="4px",t.style.left="4px",t.style.right="4px",u.appendChild(t),u=t}u.appendChild(g),r&&u.appendChild(b)}),""},color:function(e,t,o){return e.getElement().style.backgroundColor=this.sanitizeHTML(e.getValue()),""},buttonTick:function(e,t,o){return''},buttonCross:function(e,t,o){return''},rownum:function(e,t,o){return this.table.rowManager.activeRows.indexOf(e.getRow()._getSelf())+1},handle:function(e,t,o){return e.getElement().classList.add("tabulator-row-handle"),"
      "},responsiveCollapse:function(e,t,o){function i(e){var t=s.element;s.open=e,t&&(s.open?(n.classList.add("open"),t.style.display=""):(n.classList.remove("open"),t.style.display="none"))}var n=document.createElement("div"),s=e.getRow()._row.modules.responsiveLayout;return n.classList.add("tabulator-responsive-collapse-toggle"),n.innerHTML="+-",e.getElement().classList.add("tabulator-row-handle"),n.addEventListener("click",function(e){e.stopImmediatePropagation(),i(!s.open)}),i(s.open),n},rowSelection:function(e){var t=this,o=document.createElement("input");if(o.type="checkbox",this.table.modExists("selectRow",!0))if(o.addEventListener("click",function(e){e.stopPropagation()}),"function"==typeof e.getRow){var i=e.getRow();o.addEventListener("change",function(e){i.toggleSelect()}),o.checked=i.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(i,o)}else o.addEventListener("change",function(e){t.table.modules.selectRow.selectedRows.length?t.table.deselectRow():t.table.selectRow()}),this.table.modules.selectRow.registerHeaderSelectCheckbox(o);return o}},d.prototype.registerModule("format",L);var T=function(e){this.table=e,this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightPadding=0,this.initializationMode="left",this.active=!1,this.scrollEndTimer=!1};T.prototype.reset=function(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightMargin=0,this.active=!1,this.table.columnManager.headersElement.style.marginLeft=0,this.table.columnManager.element.style.paddingRight=0},T.prototype.initializeColumn=function(e){var t={margin:0,edge:!1};e.isGroup||(this.frozenCheck(e)?(t.position=this.initializationMode,"left"==this.initializationMode?this.leftColumns.push(e):this.rightColumns.unshift(e),this.active=!0,e.modules.frozen=t):this.initializationMode="right")},T.prototype.frozenCheck=function(e){return e.parent.isGroup&&e.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),e.parent.isGroup?this.frozenCheck(e.parent):e.definition.frozen},T.prototype.scrollHorizontal=function(){var e,t=this;this.active&&(clearTimeout(this.scrollEndTimer),this.scrollEndTimer=setTimeout(function(){t.layout()},100),e=this.table.rowManager.getVisibleRows(),this.calcMargins(),this.layoutColumnPosition(),this.layoutCalcRows(),e.forEach(function(e){"row"===e.type&&t.layoutRow(e)}),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},T.prototype.calcMargins=function(){this.leftMargin=this._calcSpace(this.leftColumns,this.leftColumns.length)+"px",this.table.columnManager.headersElement.style.marginLeft=this.leftMargin,this.rightMargin=this._calcSpace(this.rightColumns,this.rightColumns.length)+"px",this.table.columnManager.element.style.paddingRight=this.rightMargin,this.rightPadding=this.table.rowManager.element.clientWidth+this.table.columnManager.scrollLeft},T.prototype.layoutCalcRows=function(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow))},T.prototype.layoutColumnPosition=function(e){var t=this,o=[];this.leftColumns.forEach(function(i,n){if(i.modules.frozen.margin=t._calcSpace(t.leftColumns,n)+t.table.columnManager.scrollLeft+"px",n==t.leftColumns.length-1?i.modules.frozen.edge=!0:i.modules.frozen.edge=!1,i.parent.isGroup){var s=t.getColGroupParentElement(i);o.includes(s)||(t.layoutElement(s,i),o.push(s)),i.modules.frozen.edge&&s.classList.add("tabulator-frozen-"+i.modules.frozen.position)}else t.layoutElement(i.getElement(),i);e&&i.cells.forEach(function(e){t.layoutElement(e.getElement(),i)})}),this.rightColumns.forEach(function(o,i){o.modules.frozen.margin=t.rightPadding-t._calcSpace(t.rightColumns,i+1)+"px",i==t.rightColumns.length-1?o.modules.frozen.edge=!0:o.modules.frozen.edge=!1,o.parent.isGroup?t.layoutElement(t.getColGroupParentElement(o),o):t.layoutElement(o.getElement(),o),e&&o.cells.forEach(function(e){t.layoutElement(e.getElement(),o)})})},T.prototype.getColGroupParentElement=function(e){return e.parent.isGroup?this.getColGroupParentElement(e.parent):e.getElement()},T.prototype.layout=function(){var e=this;e.active&&(this.calcMargins(),e.table.rowManager.getDisplayRows().forEach(function(t){"row"===t.type&&e.layoutRow(t)}),this.layoutCalcRows(),this.layoutColumnPosition(!0),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},T.prototype.layoutRow=function(e){var t=this;e.getElement().style.paddingLeft=this.leftMargin,this.leftColumns.forEach(function(o){var i=e.getCell(o);i&&t.layoutElement(i.getElement(),o)}),this.rightColumns.forEach(function(o){var i=e.getCell(o);i&&t.layoutElement(i.getElement(),o)})},T.prototype.layoutElement=function(e,t){t.modules.frozen&&(e.style.position="absolute",e.style.left=t.modules.frozen.margin,e.classList.add("tabulator-frozen"),t.modules.frozen.edge&&e.classList.add("tabulator-frozen-"+t.modules.frozen.position))},T.prototype._calcSpace=function(e,t){for(var o=0,i=0;i-1&&t.splice(o,1)}),t},D.prototype.freezeRow=function(e){e.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(e.modules.frozen=!0,this.topElement.appendChild(e.getElement()),e.initialize(),e.normalizeHeight(),this.table.rowManager.adjustTableSize(),this.rows.push(e),this.table.rowManager.refreshActiveData("display"),this.styleRows())},D.prototype.unfreezeRow=function(e){var t=this.rows.indexOf(e);if(e.modules.frozen){e.modules.frozen=!1;var o=e.getElement();o.parentNode.removeChild(o),this.table.rowManager.adjustTableSize(),this.rows.splice(t,1),this.table.rowManager.refreshActiveData("display"),this.rows.length&&this.styleRows()}else console.warn("Freeze Error - Row is already unfrozen")},D.prototype.styleRows=function(e){var t=this;this.rows.forEach(function(e,o){t.table.rowManager.styleRow(e,o)})},d.prototype.registerModule("frozenRows",D);var k=function(e){this._group=e,this.type="GroupComponent"};k.prototype.getKey=function(){return this._group.key},k.prototype.getField=function(){return this._group.field},k.prototype.getElement=function(){return this._group.element},k.prototype.getRows=function(){return this._group.getRows(!0)},k.prototype.getSubGroups=function(){return this._group.getSubGroups(!0)},k.prototype.getParentGroup=function(){return!!this._group.parent&&this._group.parent.getComponent()},k.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._group.visible},k.prototype.isVisible=function(){return this._group.visible},k.prototype.show=function(){this._group.show()},k.prototype.hide=function(){this._group.hide()},k.prototype.toggle=function(){this._group.toggleVisibility()},k.prototype._getSelf=function(){return this._group},k.prototype.getTable=function(){return this._group.groupManager.table};var S=function(e,t,o,i,n,s,r){this.groupManager=e,this.parent=t,this.key=i,this.level=o,this.field=n,this.hasSubGroups=o-1?o?this.rows.splice(n+1,0,e):this.rows.splice(n,0,e):o?this.rows.push(e):this.rows.unshift(e),e.modules.group=this,this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)},S.prototype.scrollHeader=function(e){this.arrowElement.style.marginLeft=e,this.groupList.forEach(function(t){t.scrollHeader(e)})},S.prototype.getRowIndex=function(e){},S.prototype.conformRowData=function(e){return this.field?e[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(e=this.parent.conformRowData(e)),e},S.prototype.removeRow=function(e){var t=this.rows.indexOf(e),o=e.getElement();t>-1&&this.rows.splice(t,1),this.groupManager.table.options.groupValues||this.rows.length?(o.parentNode&&o.parentNode.removeChild(o),this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)):(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0))},S.prototype.removeGroup=function(e){var t,o=e.level+"_"+e.key;this.groups[o]&&(delete this.groups[o],t=this.groupList.indexOf(e),t>-1&&this.groupList.splice(t,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))},S.prototype.getHeadersAndRows=function(e){var t=[];return t.push(this),this._visSet(),this.visible?this.groupList.length?this.groupList.forEach(function(o){t=t.concat(o.getHeadersAndRows(e))}):(!e&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),t.push(this.calcs.top)),t=t.concat(this.rows),!e&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),t.push(this.calcs.bottom))):this.groupList.length||"table"==this.groupManager.table.options.columnCalcs||this.groupManager.table.modExists("columnCalcs")&&(!e&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),t.push(this.calcs.top))),!e&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),t.push(this.calcs.bottom)))),t},S.prototype.getData=function(e,t){var o=[];return this._visSet(),(!e||e&&this.visible)&&this.rows.forEach(function(e){o.push(e.getData(t||"data"))}),o},S.prototype.getRowCount=function(){var e=0;return this.groupList.length?this.groupList.forEach(function(t){e+=t.getRowCount()}):e=this.rows.length,e},S.prototype.toggleVisibility=function(){this.visible?this.hide():this.show()},S.prototype.hide=function(){this.visible=!1,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination?this.groupManager.updateGroupRows(!0):(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach(function(e){e.getHeadersAndRows().forEach(function(e){e.detachElement()})}):this.rows.forEach(function(e){var t=e.getElement();t.parentNode.removeChild(t)}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()),this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!1)},S.prototype.show=function(){var e=this;if(e.visible=!0,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination)this.groupManager.updateGroupRows(!0);else{this.element.classList.add("tabulator-group-visible");var t=e.getElement();this.groupList.length?this.groupList.forEach(function(e){e.getHeadersAndRows().forEach(function(e){var o=e.getElement();t.parentNode.insertBefore(o,t.nextSibling),e.initialize(),t=o})}):e.rows.forEach(function(e){var o=e.getElement();t.parentNode.insertBefore(o,t.nextSibling),e.initialize(),t=o}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()}this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!0)},S.prototype._visSet=function(){var e=[];"function"==typeof this.visible&&(this.rows.forEach(function(t){e.push(t.getData())}),this.visible=this.visible(this.key,this.getRowCount(),e,this.getComponent()))},S.prototype.getRowGroup=function(e){var t=!1;return this.groupList.length?this.groupList.forEach(function(o){var i=o.getRowGroup(e);i&&(t=i)}):this.rows.find(function(t){return t===e})&&(t=this),t},S.prototype.getSubGroups=function(e){var t=[];return this.groupList.forEach(function(o){t.push(e?o.getComponent():o)}),t},S.prototype.getRows=function(e){var t=[];return this.rows.forEach(function(o){t.push(e?o.getComponent():o)}),t},S.prototype.generateGroupHeaderContents=function(){var e=[];for(this.rows.forEach(function(t){e.push(t.getData())}),this.elementContents=this.generator(this.key,this.getRowCount(),e,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);"string"==typeof this.elementContents?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)},S.prototype.getElement=function(){this.addBindingsd=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var e=0;ei.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),e.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],e.table.modules.localize.bind("groups|item",function(t,o){e.headerGenerator[0]=function(e,i,n){return(void 0===e?"":e)+"("+i+" "+(1===i?t:o.groups.items)+")"}}),this.groupIDLookups=[],Array.isArray(t)||t)this.table.modExists("columnCalcs")&&"table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.removeCalcs();else if(this.table.modExists("columnCalcs")&&"group"!=this.table.options.columnCalcs){var n=this.table.columnManager.getRealColumns();n.forEach(function(t){t.definition.topCalc&&e.table.modules.columnCalcs.initializeTopRow(),t.definition.bottomCalc&&e.table.modules.columnCalcs.initializeBottomRow()})}Array.isArray(t)||(t=[t]),t.forEach(function(t,o){var i,n;"function"==typeof t?i=t:(n=e.table.columnManager.getColumnByField(t),i=n?function(e){return n.getFieldValue(e)}:function(e){return e[t]}),e.groupIDLookups.push({field:"function"!=typeof t&&t,func:i,values:!!e.allowedValues&&e.allowedValues[o]})}),o&&(Array.isArray(o)||(o=[o]),o.forEach(function(e){e="function"==typeof e?e:function(){return!0}}),e.startOpen=o),i&&(e.headerGenerator=Array.isArray(i)?i:[i]),this.initialized=!0},H.prototype.setDisplayIndex=function(e){this.displayIndex=e},H.prototype.getDisplayIndex=function(){return this.displayIndex},H.prototype.getRows=function(e){return this.groupIDLookups.length?(this.table.options.dataGrouping.call(this.table),this.generateGroups(e),this.table.options.dataGrouped&&this.table.options.dataGrouped.call(this.table,this.getGroups(!0)),this.updateGroupRows()):e.slice(0)},H.prototype.getGroups=function(e){var t=[];return this.groupList.forEach(function(o){t.push(e?o.getComponent():o)}),t},H.prototype.getChildGroups=function(e){var t=this,o=[];return e||(e=this),e.groupList.forEach(function(e){e.groupList.length?o=o.concat(t.getChildGroups(e)):o.push(e)}),o},H.prototype.wipe=function(){this.groupList.forEach(function(e){e.wipe()})},H.prototype.pullGroupListData=function(e){var t=this,o=[];return e.forEach(function(e){var i={};i.level=0,i.rowCount=0,i.headerContent="";var n=[];e.hasSubGroups?(n=t.pullGroupListData(e.groupList),i.level=e.level,i.rowCount=n.length-e.groupList.length,i.headerContent=e.generator(e.key,i.rowCount,e.rows,e),o.push(i),o=o.concat(n)):(i.level=e.level,i.headerContent=e.generator(e.key,e.rows.length,e.rows,e),i.rowCount=e.getRows().length,o.push(i),e.getRows().forEach(function(e){o.push(e.getData("data"))}))}),o},H.prototype.getGroupedData=function(){return this.pullGroupListData(this.groupList)},H.prototype.getRowGroup=function(e){var t=!1;return this.groupList.forEach(function(o){var i=o.getRowGroup(e);i&&(t=i)}),t},H.prototype.countGroups=function(){return this.groupList.length},H.prototype.generateGroups=function(e){var t=this,o=t.groups;t.groups={},t.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach(function(e){t.createGroup(e,0,o)}),e.forEach(function(e){t.assignRowToExistingGroup(e,o)})):e.forEach(function(e){t.assignRowToGroup(e,o)})},H.prototype.createGroup=function(e,t,o){var i,n=t+"_"+e;o=o||[],i=new S(this,!1,t,e,this.groupIDLookups[0].field,this.headerGenerator[0],o[n]),this.groups[n]=i,this.groupList.push(i)},H.prototype.assignRowToExistingGroup=function(e,t){var o=this.groupIDLookups[0].func(e.getData()),i="0_"+o;this.groups[i]&&this.groups[i].addRow(e)},H.prototype.assignRowToGroup=function(e,t){var o=this.groupIDLookups[0].func(e.getData()),i=!this.groups["0_"+o];return i&&this.createGroup(o,0,t),this.groups["0_"+o].addRow(e),!i},H.prototype.updateGroupRows=function(e){var t=this,o=[];if(t.groupList.forEach(function(e){o=o.concat(e.getHeadersAndRows())}),e){var i=t.table.rowManager.setDisplayRows(o,this.getDisplayIndex());!0!==i&&this.setDisplayIndex(i),t.table.rowManager.refreshActiveData("group",!0,!0)}return o},H.prototype.scrollHeaders=function(e){e+="px",this.groupList.forEach(function(t){t.scrollHeader(e)})},H.prototype.removeGroup=function(e){var t,o=e.level+"_"+e.key;this.groups[o]&&(delete this.groups[o],(t=this.groupList.indexOf(e))>-1&&this.groupList.splice(t,1))},d.prototype.registerModule("groupRows",H);var z=function(e){this.table=e,this.history=[],this.index=-1};z.prototype.clear=function(){this.history=[],this.index=-1},z.prototype.action=function(e,t,o){this.history=this.history.slice(0,this.index+1),this.history.push({type:e,component:t,data:o}),this.index++},z.prototype.getHistoryUndoSize=function(){return this.index+1},z.prototype.getHistoryRedoSize=function(){return this.history.length-(this.index+1)},z.prototype.undo=function(){if(this.index>-1){var e=this.history[this.index];return this.undoers[e.type].call(this,e),this.index--,this.table.options.historyUndo.call(this.table,e.type,e.component.getComponent(),e.data),!0}return console.warn("History Undo Error - No more history to undo"),!1},z.prototype.redo=function(){if(this.history.length-1>this.index){this.index++;var e=this.history[this.index];return this.redoers[e.type].call(this,e),this.table.options.historyRedo.call(this.table,e.type,e.component.getComponent(),e.data),!0}return console.warn("History Redo Error - No more history to redo"),!1},z.prototype.undoers={cellEdit:function(e){e.component.setValueProcessData(e.data.oldValue)},rowAdd:function(e){e.component.deleteActual()},rowDelete:function(e){var t=this.table.rowManager.addRowActual(e.data.data,e.data.pos,e.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(e.component,t)},rowMove:function(e){ +this.table.rowManager.moveRowActual(e.component,this.table.rowManager.rows[e.data.posFrom],!e.data.after),this.table.rowManager.redraw()}},z.prototype.redoers={cellEdit:function(e){e.component.setValueProcessData(e.data.newValue)},rowAdd:function(e){var t=this.table.rowManager.addRowActual(e.data.data,e.data.pos,e.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(e.component,t)},rowDelete:function(e){e.component.deleteActual()},rowMove:function(e){this.table.rowManager.moveRowActual(e.component,this.table.rowManager.rows[e.data.posTo],e.data.after),this.table.rowManager.redraw()}},z.prototype._rebindRow=function(e,t){this.history.forEach(function(o){if(o.component instanceof a)o.component===e&&(o.component=t);else if(o.component instanceof c&&o.component.row===e){var i=o.component.column.getField();i&&(o.component=t.getCell(i))}})},d.prototype.registerModule("history",z);var A=function(e){this.table=e,this.fieldIndex=[],this.hasIndex=!1};A.prototype.parseTable=function(){var e=this,t=e.table.element,o=e.table.options,i=(o.columns,t.getElementsByTagName("th")),n=t.getElementsByTagName("tbody")[0],s=[];e.hasIndex=!1,e.table.options.htmlImporting.call(this.table),n=n?n.getElementsByTagName("tr"):[],e._extractOptions(t,o),i.length?e._extractHeaders(i,n):e._generateBlankHeaders(i,n);for(var r=0;r-1&&e.pressedKeys.splice(i,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)},_.prototype.clearBindings=function(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)},_.prototype.checkBinding=function(e,t){var o=this,i=!0;return e.ctrlKey==t.ctrl&&e.shiftKey==t.shift&&e.metaKey==t.meta&&(t.keys.forEach(function(e){-1==o.pressedKeys.indexOf(e)&&(i=!1)}),i&&t.action.call(o,e),!0)},_.prototype.bindings={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35,undo:"ctrl + 90",redo:"ctrl + 89",copyToClipboard:"ctrl + 67"},_.prototype.actions={keyBlock:function(e){e.stopPropagation(),e.preventDefault()},scrollPageUp:function(e){var t=this.table.rowManager,o=t.scrollTop-t.height;t.element.scrollHeight;e.preventDefault(),t.displayRowsCount&&(o>=0?t.element.scrollTop=o:t.scrollToRow(t.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function(e){var t=this.table.rowManager,o=t.scrollTop+t.height,i=t.element.scrollHeight;e.preventDefault(),t.displayRowsCount&&(o<=i?t.element.scrollTop=o:t.scrollToRow(t.getDisplayRows()[t.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function(e){var t=this.table.rowManager;e.preventDefault(),t.displayRowsCount&&t.scrollToRow(t.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function(e){var t=this.table.rowManager;e.preventDefault(),t.displayRowsCount&&t.scrollToRow(t.getDisplayRows()[t.displayRowsCount-1]),this.table.element.focus()},navPrev:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().prev())},navNext:function(e){var t,o=!1,i=this.table.options.tabEndNewRow;this.table.modExists("edit")&&(o=this.table.modules.edit.currentCell)&&(e.preventDefault(),t=o.nav(),t.next()||i&&(o.getElement().firstChild.blur(),i=!0===i?this.table.addRow({}):"function"==typeof i?this.table.addRow(i(o.row.getComponent())):this.table.addRow(Object.assign({},i)),i.then(function(){setTimeout(function(){t.next()})})))},navLeft:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().left())},navRight:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().right())},navUp:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().up())},navDown:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().down())},undo:function(e){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(e.preventDefault(),this.table.modules.history.undo()))},redo:function(e){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(e.preventDefault(),this.table.modules.history.redo()))},copyToClipboard:function(e){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(!1,!0)}},d.prototype.registerModule("keybindings",_);var P=function(e){this.table=e,this.menuEl=!1,this.blurEvent=this.hideMenu.bind(this),this.escEvent=this.escMenu.bind(this),this.nestedMenuBlock=!1};P.prototype.initializeColumnHeader=function(e){var t,o=this;e.definition.headerContextMenu&&e.getElement().addEventListener("contextmenu",function(t){var i="function"==typeof e.definition.headerContextMenu?e.definition.headerContextMenu(e.getComponent()):e.definition.headerContextMenu;t.preventDefault(),o.loadMenu(t,e,i)}),e.definition.headerMenu&&(t=document.createElement("span"),t.classList.add("tabulator-header-menu-button"),t.innerHTML="⋮",t.addEventListener("click",function(t){var i="function"==typeof e.definition.headerMenu?e.definition.headerMenu(e.getComponent()):e.definition.headerMenu;t.stopPropagation(),t.preventDefault(),o.loadMenu(t,e,i)}),e.titleElement.insertBefore(t,e.titleElement.firstChild))},P.prototype.initializeCell=function(e){var t=this;e.getElement().addEventListener("contextmenu",function(o){var i="function"==typeof e.column.definition.contextMenu?e.column.definition.contextMenu(e.getComponent()):e.column.definition.contextMenu;o.stopImmediatePropagation(),t.loadMenu(o,e,i)})},P.prototype.initializeRow=function(e){var t=this;e.getElement().addEventListener("contextmenu",function(o){var i="function"==typeof t.table.options.rowContextMenu?t.table.options.rowContextMenu(e.getComponent()):t.table.options.rowContextMenu;t.loadMenu(o,e,i)})},P.prototype.initializeGroup=function(e){var t=this;e.getElement().addEventListener("contextmenu",function(o){var i="function"==typeof t.table.options.groupContextMenu?t.table.options.groupContextMenu(e.getComponent()):t.table.options.groupContextMenu;t.loadMenu(o,e,i)})},P.prototype.loadMenu=function(e,t,o){var i=this,n=Math.max(document.body.offsetHeight,window.innerHeight);if(e.preventDefault(),o&&o.length){if(this.nestedMenuBlock){if(this.isOpen())return}else this.nestedMenuBlock=setTimeout(function(){i.nestedMenuBlock=!1},100);this.hideMenu(),this.menuEl=document.createElement("div"),this.menuEl.classList.add("tabulator-menu"),o.forEach(function(e){var o=document.createElement("div"),n=e.label,s=e.disabled;e.separator?o.classList.add("tabulator-menu-separator"):(o.classList.add("tabulator-menu-item"),"function"==typeof n&&(n=n(t.getComponent())),n instanceof Node?o.appendChild(n):o.innerHTML=n,"function"==typeof s&&(s=s(t.getComponent())),s?(o.classList.add("tabulator-menu-item-disabled"),o.addEventListener("click",function(e){e.stopPropagation()})):o.addEventListener("click",function(o){i.hideMenu(),e.action(o,t.getComponent())})),i.menuEl.appendChild(o)}),this.menuEl.style.top=e.pageY+"px",this.menuEl.style.left=e.pageX+"px",document.body.addEventListener("click",this.blurEvent),this.table.rowManager.element.addEventListener("scroll",this.blurEvent),setTimeout(function(){document.body.addEventListener("contextmenu",i.blurEvent)},100),document.body.addEventListener("keydown",this.escEvent),document.body.appendChild(this.menuEl),e.pageX+this.menuEl.offsetWidth>=document.body.offsetWidth&&(this.menuEl.style.left="",this.menuEl.style.right=document.body.offsetWidth-e.pageX+"px"),e.pageY+this.menuEl.offsetHeight>=n&&(this.menuEl.style.top="",this.menuEl.style.bottom=n-e.pageY+"px")}},P.prototype.isOpen=function(){return!!this.menuEl.parentNode},P.prototype.escMenu=function(e){27==e.keyCode&&this.hideMenu()},P.prototype.hideMenu=function(){this.menuEl.parentNode&&this.menuEl.parentNode.removeChild(this.menuEl),this.escEvent&&document.body.removeEventListener("keydown",this.escEvent),this.blurEvent&&(document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent))},P.prototype.menus={},d.prototype.registerModule("menu",P);var F=function(e){this.table=e,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.touchMove=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this)};F.prototype.createPlaceholderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.classList.add("tabulator-col-placeholder"),e},F.prototype.initializeColumn=function(e){var t,o=this,i={};e.modules.frozen||(t=e.getElement(),i.mousemove=function(i){e.parent===o.moving.parent&&((o.touchMove?i.touches[0].pageX:i.pageX)-d.prototype.helpers.elOffset(t).left+o.table.columnManager.element.scrollLeft>e.getWidth()/2?o.toCol===e&&o.toColAfter||(t.parentNode.insertBefore(o.placeholderElement,t.nextSibling),o.moveColumn(e,!0)):(o.toCol!==e||o.toColAfter)&&(t.parentNode.insertBefore(o.placeholderElement,t),o.moveColumn(e,!1)))}.bind(o),t.addEventListener("mousedown",function(t){o.touchMove=!1,1===t.which&&(o.checkTimeout=setTimeout(function(){o.startMove(t,e)},o.checkPeriod))}),t.addEventListener("mouseup",function(e){1===e.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)}),o.bindTouchEvents(e)),e.modules.moveColumn=i},F.prototype.bindTouchEvents=function(e){var t,o,i,n,s,r,a,l=this,c=e.getElement(),u=!1;c.addEventListener("touchstart",function(c){l.checkTimeout=setTimeout(function(){l.touchMove=!0,t=e,o=e.nextColumn(),n=o?o.getWidth()/2:0,i=e.prevColumn(),s=i?i.getWidth()/2:0,r=0,a=0,u=!1,l.startMove(c,e)},l.checkPeriod)},{passive:!0}),c.addEventListener("touchmove",function(c){var d,h;l.moving&&(l.moveHover(c),u||(u=c.touches[0].pageX),d=c.touches[0].pageX-u,d>0?o&&d-r>n&&(h=o)!==e&&(u=c.touches[0].pageX,h.getElement().parentNode.insertBefore(l.placeholderElement,h.getElement().nextSibling),l.moveColumn(h,!0)):i&&-d-a>s&&(h=i)!==e&&(u=c.touches[0].pageX,h.getElement().parentNode.insertBefore(l.placeholderElement,h.getElement()),l.moveColumn(h,!1)),h&&(t=h,o=h.nextColumn(),r=n,n=o?o.getWidth()/2:0,i=h.prevColumn(),a=s,s=i?i.getWidth()/2:0))},{passive:!0}),c.addEventListener("touchend",function(e){l.checkTimeout&&clearTimeout(l.checkTimeout),l.moving&&l.endMove(e)})},F.prototype.startMove=function(e,t){var o=t.getElement();this.moving=t,this.startX=(this.touchMove?e.touches[0].pageX:e.pageX)-d.prototype.helpers.elOffset(o).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.table.columnManager.getElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom="0",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(e)},F.prototype._bindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveColumn.mousemove)})},F.prototype._unbindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveColumn.mousemove)})},F.prototype.moveColumn=function(e,t){var o=this.moving.getCells();this.toCol=e,this.toColAfter=t,t?e.getCells().forEach(function(e,t){var i=e.getElement();i.parentNode.insertBefore(o[t].getElement(),i.nextSibling)}):e.getCells().forEach(function(e,t){var i=e.getElement();i.parentNode.insertBefore(o[t].getElement(),i)})},F.prototype.endMove=function(e){(1===e.which||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))},F.prototype.moveHover=function(e){var t,o=this,i=o.table.columnManager.getElement(),n=i.scrollLeft,s=(o.touchMove?e.touches[0].pageX:e.pageX)-d.prototype.helpers.elOffset(i).left+n;o.hoverElement.style.left=s-o.startX+"px",s-ne.getHeight()/2){if(t.toRow!==e||!t.toRowAfter){var i=e.getElement();i.parentNode.insertBefore(t.placeholderElement,i.nextSibling),t.moveRow(e,!0)}}else if(t.toRow!==e||t.toRowAfter){var i=e.getElement();i.previousSibling&&(i.parentNode.insertBefore(t.placeholderElement,i),t.moveRow(e,!1))}}.bind(t),e.modules.moveRow=o},N.prototype.initializeRow=function(e){var t,o=this,i={};i.mouseup=function(t){o.tableRowDrop(t,e)}.bind(o),i.mousemove=function(t){if(t.pageY-d.prototype.helpers.elOffset(e.element).top+o.table.rowManager.element.scrollTop>e.getHeight()/2){if(o.toRow!==e||!o.toRowAfter){var i=e.getElement();i.parentNode.insertBefore(o.placeholderElement,i.nextSibling),o.moveRow(e,!0)}}else if(o.toRow!==e||o.toRowAfter){var i=e.getElement();i.parentNode.insertBefore(o.placeholderElement,i),o.moveRow(e,!1)}}.bind(o),this.hasHandle||(t=e.getElement(),t.addEventListener("mousedown",function(t){1===t.which&&(o.checkTimeout=setTimeout(function(){o.startMove(t,e)},o.checkPeriod))}),t.addEventListener("mouseup",function(e){1===e.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)}),this.bindTouchEvents(e,e.getElement())),e.modules.moveRow=i},N.prototype.initializeCell=function(e){var t=this,o=e.getElement();o.addEventListener("mousedown",function(o){1===o.which&&(t.checkTimeout=setTimeout(function(){t.startMove(o,e.row)},t.checkPeriod))}),o.addEventListener("mouseup",function(e){1===e.which&&t.checkTimeout&&clearTimeout(t.checkTimeout)}),this.bindTouchEvents(e.row,e.getElement())},N.prototype.bindTouchEvents=function(e,t){var o,i,n,s,r,a,l,c=this,u=!1;t.addEventListener("touchstart",function(t){c.checkTimeout=setTimeout(function(){c.touchMove=!0,o=e,i=e.nextRow(),s=i?i.getHeight()/2:0,n=e.prevRow(),r=n?n.getHeight()/2:0,a=0,l=0,u=!1,c.startMove(t,e)},c.checkPeriod)},{passive:!0}),this.moving,this.toRow,this.toRowAfter,t.addEventListener("touchmove",function(t){var d,h;c.moving&&(t.preventDefault(),c.moveHover(t),u||(u=t.touches[0].pageY),d=t.touches[0].pageY-u,d>0?i&&d-a>s&&(h=i)!==e&&(u=t.touches[0].pageY,h.getElement().parentNode.insertBefore(c.placeholderElement,h.getElement().nextSibling),c.moveRow(h,!0)):n&&-d-l>r&&(h=n)!==e&&(u=t.touches[0].pageY,h.getElement().parentNode.insertBefore(c.placeholderElement,h.getElement()),c.moveRow(h,!1)),h&&(o=h,i=h.nextRow(),a=s,s=i?i.getHeight()/2:0,n=h.prevRow(),l=r,r=n?n.getHeight()/2:0))}),t.addEventListener("touchend",function(e){c.checkTimeout&&clearTimeout(c.checkTimeout),c.moving&&(c.endMove(e),c.touchMove=!1)})},N.prototype._bindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(e){"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().addEventListener("mousemove",e.modules.moveRow.mousemove)})},N.prototype._unbindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(e){"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().removeEventListener("mousemove",e.modules.moveRow.mousemove)})},N.prototype.startMove=function(e,t){var o=t.getElement();this.setStartPosition(e,t),this.moving=t,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(t)):(o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o)),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.moveHover(e)},N.prototype.setStartPosition=function(e,t){var o,i,n=this.touchMove?e.touches[0].pageX:e.pageX,s=this.touchMove?e.touches[0].pageY:e.pageY;o=t.getElement(),this.connection?(i=o.getBoundingClientRect(),this.startX=i.left-n+window.pageXOffset,this.startY=i.top-s+window.pageYOffset):this.startY=s-o.getBoundingClientRect().top},N.prototype.endMove=function(e){e&&1!==e.which&&!this.touchMove||(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow&&this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))},N.prototype.moveRow=function(e,t){this.toRow=e,this.toRowAfter=t},N.prototype.moveHover=function(e){this.connection?this.moveHoverConnections.call(this,e):this.moveHoverTable.call(this,e)},N.prototype.moveHoverTable=function(e){var t=this.table.rowManager.getElement(),o=t.scrollTop,i=(this.touchMove?e.touches[0].pageY:e.pageY)-t.getBoundingClientRect().top+o;this.hoverElement.style.top=i-this.startY+"px"},N.prototype.moveHoverConnections=function(e){this.hoverElement.style.left=this.startX+(this.touchMove?e.touches[0].pageX:e.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?e.touches[0].pageY:e.pageY)+"px"},N.prototype.elementRowDrop=function(e,t,o){this.table.options.movableRowsElementDrop&&this.table.options.movableRowsElementDrop(e,t,!!o&&o.getComponent())},N.prototype.connectToTables=function(e){var t,o=this;this.connectionSelectorsTables&&(t=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStart.call(this.table,t),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","connect",{row:e})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach(function(e){"string"==typeof e?o.connectionElements=o.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(e))):o.connectionElements.push(e)}),this.connectionElements.forEach(function(e){var t=function(t){o.elementRowDrop(t,e,o.moving)};e.addEventListener("mouseup",t),e.tabulatorElementDropEvent=t,e.classList.add("tabulator-movingrow-receiving")}))},N.prototype.disconnectFromTables=function(){var e;this.connectionSelectorsTables&&(e=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStop.call(this.table,e),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach(function(e){e.classList.remove("tabulator-movingrow-receiving"),e.removeEventListener("mouseup",e.tabulatorElementDropEvent),delete e.tabulatorElementDropEvent})},N.prototype.connect=function(e,t){var o=this;return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=e,this.connectedRow=t,this.table.element.classList.add("tabulator-movingrow-receiving"),o.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().addEventListener("mouseup",e.modules.moveRow.mouseup)}),o.tableRowDropEvent=o.tableRowDrop.bind(o),o.table.element.addEventListener("mouseup",o.tableRowDropEvent),this.table.options.movableRowsReceivingStart.call(this.table,t,e),!0)},N.prototype.disconnect=function(e){var t=this;e===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),t.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().removeEventListener("mouseup",e.modules.moveRow.mouseup)}),t.table.element.removeEventListener("mouseup",t.tableRowDropEvent),this.table.options.movableRowsReceivingStop.call(this.table,e)):console.warn("Move Row Error - trying to disconnect from non connected table")},N.prototype.dropComplete=function(e,t,o){var i=!1;if(o){switch(_typeof(this.table.options.movableRowsSender)){case"string":i=this.senders[this.table.options.movableRowsSender];break;case"function":i=this.table.options.movableRowsSender}i?i.call(this,this.moving.getComponent(),t?t.getComponent():void 0,e):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.table.options.movableRowsSent.call(this.table,this.moving.getComponent(),t?t.getComponent():void 0,e)}else this.table.options.movableRowsSentFailed.call(this.table,this.moving.getComponent(),t?t.getComponent():void 0,e);this.endMove()},N.prototype.tableRowDrop=function(e,t){var o=!1,i=!1;switch(console.trace("drop"),e.stopImmediatePropagation(),_typeof(this.table.options.movableRowsReceiver)){case"string":o=this.receivers[this.table.options.movableRowsReceiver];break;case"function":o=this.table.options.movableRowsReceiver}o?i=o.call(this,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),i?this.table.options.movableRowsReceived.call(this.table,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):this.table.options.movableRowsReceivedFailed.call(this.table,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable),this.table.modules.comms.send(this.connectedTable,"moveRow","dropcomplete",{row:t,success:i})},N.prototype.receivers={insert:function(e,t,o){return this.table.addRow(e.getData(),void 0,t),!0},add:function(e,t,o){return this.table.addRow(e.getData()),!0},update:function(e,t,o){return!!t&&(t.update(e.getData()),!0)},replace:function(e,t,o){return!!t&&(this.table.addRow(e.getData(),void 0,t),t.delete(),!0)}},N.prototype.senders={delete:function(e,t,o){e.delete()}},N.prototype.commsReceived=function(e,t,o){switch(t){case"connect":return this.connect(e,o.row);case"disconnect":return this.disconnect(e);case"dropcomplete":return this.dropComplete(e,o.row,o.success)}},d.prototype.registerModule("moveRow",N);var B=function(e){this.table=e,this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0};B.prototype.initializeColumn=function(e){var t=this,o=!1,i={};this.allowedTypes.forEach(function(n){var s,r="mutator"+(n.charAt(0).toUpperCase()+n.slice(1));e.definition[r]&&(s=t.lookupMutator(e.definition[r]))&&(o=!0,i[r]={mutator:s,params:e.definition[r+"Params"]||{}})}),o&&(e.modules.mutate=i)},B.prototype.lookupMutator=function(e){var t=!1;switch(void 0===e?"undefined":_typeof(e)){case"string":this.mutators[e]?t=this.mutators[e]:console.warn("Mutator Error - No such mutator found, ignoring: ",e);break;case"function":t=e}return t},B.prototype.transformRow=function(e,t,o){var i,n=this,s="mutator"+(t.charAt(0).toUpperCase()+t.slice(1));return this.enabled&&n.table.columnManager.traverse(function(n){var r,a,l;n.modules.mutate&&(r=n.modules.mutate[s]||n.modules.mutate.mutator||!1)&&(i=n.getFieldValue(void 0!==o?o:e),"data"!=t&&void 0===i||(l=n.getComponent(),a="function"==typeof r.params?r.params(i,e,t,l):r.params,n.setFieldValue(e,r.mutator(i,e,t,a,l))))}),e},B.prototype.transformCell=function(e,t){var o=e.column.modules.mutate.mutatorEdit||e.column.modules.mutate.mutator||!1,i={};return o?(i=Object.assign(i,e.row.getData()),e.column.setFieldValue(i,t),o.mutator(t,i,"edit",o.params,e.getComponent())):t},B.prototype.enable=function(){this.enabled=!0},B.prototype.disable=function(){this.enabled=!1},B.prototype.mutators={},d.prototype.registerModule("mutator",B);var O=function(e){this.table=e,this.mode="local",this.progressiveLoad=!1,this.size=0,this.page=1,this.count=5,this.max=1,this.displayIndex=0,this.initialLoad=!0,this.pageSizes=[],this.dataReceivedNames={},this.dataSentNames={},this.createElements()};O.prototype.createElements=function(){var e;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),e=document.createElement("button"),e.classList.add("tabulator-page"),e.setAttribute("type","button"),e.setAttribute("role","button"),e.setAttribute("aria-label",""),e.setAttribute("title",""),this.firstBut=e.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=e.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=e.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=e.cloneNode(!0),this.lastBut.setAttribute("data-page","last"),this.table.options.paginationSizeSelector&&(this.pageSizeSelect=document.createElement("select"),this.pageSizeSelect.classList.add("tabulator-page-size"))},O.prototype.generatePageSizeSelectList=function(){var e=this,t=[];if(this.pageSizeSelect){if(Array.isArray(this.table.options.paginationSizeSelector))t=this.table.options.paginationSizeSelector,this.pageSizes=t,-1==this.pageSizes.indexOf(this.size)&&t.unshift(this.size);else if(-1==this.pageSizes.indexOf(this.size)){t=[];for(var o=1;o<5;o++)t.push(this.size*o);this.pageSizes=t}else t=this.pageSizes +;for(;this.pageSizeSelect.firstChild;)this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);t.forEach(function(t){var o=document.createElement("option");o.value=t,!0===t?e.table.modules.localize.bind("pagination|all",function(e){o.innerHTML=e}):o.innerHTML=t,e.pageSizeSelect.appendChild(o)}),this.pageSizeSelect.value=this.size}},O.prototype.initialize=function(e){var t,o,i,n=this;this.dataSentNames=Object.assign({},this.paginationDataSentNames),this.dataSentNames=Object.assign(this.dataSentNames,this.table.options.paginationDataSent),this.dataReceivedNames=Object.assign({},this.paginationDataReceivedNames),this.dataReceivedNames=Object.assign(this.dataReceivedNames,this.table.options.paginationDataReceived),n.table.modules.localize.bind("pagination|first",function(e){n.firstBut.innerHTML=e}),n.table.modules.localize.bind("pagination|first_title",function(e){n.firstBut.setAttribute("aria-label",e),n.firstBut.setAttribute("title",e)}),n.table.modules.localize.bind("pagination|prev",function(e){n.prevBut.innerHTML=e}),n.table.modules.localize.bind("pagination|prev_title",function(e){n.prevBut.setAttribute("aria-label",e),n.prevBut.setAttribute("title",e)}),n.table.modules.localize.bind("pagination|next",function(e){n.nextBut.innerHTML=e}),n.table.modules.localize.bind("pagination|next_title",function(e){n.nextBut.setAttribute("aria-label",e),n.nextBut.setAttribute("title",e)}),n.table.modules.localize.bind("pagination|last",function(e){n.lastBut.innerHTML=e}),n.table.modules.localize.bind("pagination|last_title",function(e){n.lastBut.setAttribute("aria-label",e),n.lastBut.setAttribute("title",e)}),n.firstBut.addEventListener("click",function(){n.setPage(1)}),n.prevBut.addEventListener("click",function(){n.previousPage()}),n.nextBut.addEventListener("click",function(){n.nextPage().then(function(){}).catch(function(){})}),n.lastBut.addEventListener("click",function(){n.setPage(n.max)}),n.table.options.paginationElement&&(n.element=n.table.options.paginationElement),this.pageSizeSelect&&(t=document.createElement("label"),n.table.modules.localize.bind("pagination|page_size",function(e){n.pageSizeSelect.setAttribute("aria-label",e),n.pageSizeSelect.setAttribute("title",e),t.innerHTML=e}),n.element.appendChild(t),n.element.appendChild(n.pageSizeSelect),n.pageSizeSelect.addEventListener("change",function(e){n.setPageSize("true"==n.pageSizeSelect.value||n.pageSizeSelect.value),n.setPage(1).then(function(){}).catch(function(){})})),n.element.appendChild(n.firstBut),n.element.appendChild(n.prevBut),n.element.appendChild(n.pagesElement),n.element.appendChild(n.nextBut),n.element.appendChild(n.lastBut),n.table.options.paginationElement||e||n.table.footerManager.append(n.element,n),n.mode=n.table.options.pagination,n.table.options.paginationSize?n.size=n.table.options.paginationSize:(o=document.createElement("div"),o.classList.add("tabulator-row"),o.style.visibility=e,i=document.createElement("div"),i.classList.add("tabulator-cell"),i.innerHTML="Page Row Test",o.appendChild(i),n.table.rowManager.getTableElement().appendChild(o),n.size=Math.floor(n.table.rowManager.getElement().clientHeight/o.offsetHeight),n.table.rowManager.getTableElement().removeChild(o)),n.count=n.table.options.paginationButtonCount,n.generatePageSizeSelectList()},O.prototype.initializeProgressive=function(e){this.initialize(!0),this.mode="progressive_"+e,this.progressiveLoad=!0},O.prototype.setDisplayIndex=function(e){this.displayIndex=e},O.prototype.getDisplayIndex=function(){return this.displayIndex},O.prototype.setMaxRows=function(e){this.max=e?!0===this.size?1:Math.ceil(e/this.size):1,this.page>this.max&&(this.page=this.max)},O.prototype.reset=function(e,t){return("local"==this.mode||e)&&(this.page=1),t&&(this.initialLoad=!0),!0},O.prototype.setMaxPage=function(e){e=parseInt(e),this.max=e||1,this.page>this.max&&(this.page=this.max,this.trigger())},O.prototype.setPage=function(e){var t=this,o=this;switch(e){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return new Promise(function(i,n){e=parseInt(e),e>0&&e<=t.max?(t.page=e,t.trigger().then(function(){i()}).catch(function(){n()}),o.table.options.persistence&&o.table.modExists("persistence",!0)&&o.table.modules.persistence.config.page&&o.table.modules.persistence.save("page")):(console.warn("Pagination Error - Requested page is out of range of 1 - "+t.max+":",e),n())})},O.prototype.setPageToRow=function(e){var t=this;return new Promise(function(o,i){var n=t.table.rowManager.getDisplayRows(t.displayIndex-1),s=n.indexOf(e);if(s>-1){var r=!0===t.size?1:Math.ceil((s+1)/t.size);t.setPage(r).then(function(){o()}).catch(function(){i()})}else console.warn("Pagination Error - Requested row is not visible"),i()})},O.prototype.setPageSize=function(e){!0!==e&&(e=parseInt(e)),e>0&&(this.size=e),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.page&&this.table.modules.persistence.save("page")},O.prototype._setPageButtons=function(){for(var e=this,t=Math.floor((this.count-1)/2),o=Math.ceil((this.count-1)/2),i=this.max-this.page+t+10&&s<=e.max&&e.pagesElement.appendChild(e._generatePageButton(s));this.footerRedraw()},O.prototype._generatePageButton=function(e){var t=this,o=document.createElement("button");return o.classList.add("tabulator-page"),e==t.page&&o.classList.add("active"),o.setAttribute("type","button"),o.setAttribute("role","button"),t.table.modules.localize.bind("pagination|page_title",function(t){o.setAttribute("aria-label",t+" "+e),o.setAttribute("title",t+" "+e)}),o.setAttribute("data-page",e),o.textContent=e,o.addEventListener("click",function(o){t.setPage(e)}),o},O.prototype.previousPage=function(){var e=this;return new Promise(function(t,o){e.page>1?(e.page--,e.trigger().then(function(){t()}).catch(function(){o()}),e.table.options.persistence&&e.table.modExists("persistence",!0)&&e.table.modules.persistence.config.page&&e.table.modules.persistence.save("page")):(console.warn("Pagination Error - Previous page would be less than page 1:",0),o())})},O.prototype.nextPage=function(){var e=this;return new Promise(function(t,o){e.pagen?i.splice(n,0,e):i.push(e))}),i},I.prototype._findColumn=function(e,t){var o=t.columns?"group":t.field?"field":"object";return e.find(function(e){switch(o){case"group":return e.title===t.title&&e.columns.length===t.columns.length;case"field":return e.field===t.field;case"object":return e===t}})},I.prototype.save=function(e){var t={};switch(e){case"columns":t=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":t=this.table.modules.filter.getFilters();break;case"sort":t=this.validateSorters(this.table.modules.sort.getSort());break;case"group":t=this.getGroupConfig();break;case"page":t=this.getPageConfig()}this.writeFunc&&this.writeFunc(this.id,e,t)},I.prototype.validateSorters=function(e){return e.forEach(function(e){e.column=e.field,delete e.field}),e},I.prototype.getGroupConfig=function(){return this.config.group&&((!0===this.config.group||this.config.group.groupBy)&&(data.groupBy=this.table.options.groupBy),(!0===this.config.group||this.config.group.groupStartOpen)&&(data.groupStartOpen=this.table.options.groupStartOpen),(!0===this.config.group||this.config.group.groupHeader)&&(data.groupHeader=this.table.options.groupHeader)),data},I.prototype.getPageConfig=function(){var e={};return this.config.page&&((!0===this.config.page||this.config.page.size)&&(e.paginationSize=this.table.modules.page.getPageSize()),(!0===this.config.page||this.config.page.page)&&(e.paginationInitialPage=this.table.modules.page.getPage())),e},I.prototype.parseColumns=function(e){var t=this,o=[];return e.forEach(function(e){var i,n={},s=e.getDefinition();e.isGroup?(n.title=s.title,n.columns=t.parseColumns(e.getColumns())):(n.field=e.getField(),!0===t.config.columns||void 0==t.config.columns?(i=Object.keys(s),i.push("width")):i=t.config.columns,i.forEach(function(t){switch(t){case"width":n.width=e.getWidth();break;case"visible":n.visible=e.visible;break;default:n[t]=s[t]}})),o.push(n)}),o},I.prototype.readers={local:function(e,t){var o=localStorage.getItem(e+"-"+t);return!!o&&JSON.parse(o)},cookie:function(e,t){var o,i,n=document.cookie,s=e+"-"+t,r=n.indexOf(s+"=");return r>-1&&(n=n.substr(r),o=n.indexOf(";"),o>-1&&(n=n.substr(0,o)),i=n.replace(s+"=","")),!!i&&JSON.parse(i)}},I.prototype.writers={local:function(e,t,o){localStorage.setItem(e+"-"+t,JSON.stringify(o))},cookie:function(e,t,o){var i=new Date;i.setDate(i.getDate()+1e4),document.cookie=e+"-"+t+"="+JSON.stringify(o)+"; expires="+i.toUTCString()}},d.prototype.registerModule("persistence",I);var j=function(e){this.table=e,this.element=!1,this.manualBlock=!1};j.prototype.initialize=function(){window.addEventListener("beforeprint",this.replaceTable.bind(this)),window.addEventListener("afterprint",this.cleanup.bind(this))},j.prototype.replaceTable=function(){this.manualBlock||(this.element=document.createElement("div"),this.element.classList.add("tabulator-print-table"),this.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig,this.table.options.printStyled,this.table.options.printRowRange,"print")),this.table.element.style.display="none",this.table.element.parentNode.insertBefore(this.element,this.table.element))},j.prototype.cleanup=function(){document.body.classList.remove("tabulator-print-fullscreen-hide"),this.element&&this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.table.element.style.display="")},j.prototype.printFullscreen=function(e,t,o){var i,n,s=window.scrollX,r=window.scrollY,a=document.createElement("div"),l=document.createElement("div"),c=this.table.modules.export.genereateTable(void 0!==o?o:this.table.options.printConfig,void 0!==t?t:this.table.options.printStyled,e,"print");this.manualBlock=!0,this.element=document.createElement("div"),this.element.classList.add("tabulator-print-fullscreen"),this.table.options.printHeader&&(a.classList.add("tabulator-print-header"),i="function"==typeof this.table.options.printHeader?this.table.options.printHeader.call(this.table):this.table.options.printHeader,"string"==typeof i?a.innerHTML=i:a.appendChild(i),this.element.appendChild(a)),this.element.appendChild(c),this.table.options.printFooter&&(l.classList.add("tabulator-print-footer"),n="function"==typeof this.table.options.printFooter?this.table.options.printFooter.call(this.table):this.table.options.printFooter,"string"==typeof n?l.innerHTML=n:l.appendChild(n),this.element.appendChild(l)),document.body.classList.add("tabulator-print-fullscreen-hide"),document.body.appendChild(this.element),this.table.options.printFormatter&&this.table.options.printFormatter(this.element,c),window.print(),this.cleanup(),window.scrollTo(s,r),this.manualBlock=!1},d.prototype.registerModule("print",j);var V=function(e){this.table=e,this.data=!1,this.blocked=!1,this.origFuncs={},this.currentVersion=0};V.prototype.watchData=function(e){var t,o=this;this.currentVersion++,t=this.currentVersion,o.unwatchData(),o.data=e,o.origFuncs.push=e.push,Object.defineProperty(o.data,"push",{enumerable:!1,configurable:!0,value:function(){var i=Array.from(arguments);return o.blocked||t!==o.currentVersion||i.forEach(function(e){o.table.rowManager.addRowActual(e,!1)}),o.origFuncs.push.apply(e,arguments)}}),o.origFuncs.unshift=e.unshift,Object.defineProperty(o.data,"unshift",{enumerable:!1,configurable:!0,value:function(){var i=Array.from(arguments);return o.blocked||t!==o.currentVersion||i.forEach(function(e){o.table.rowManager.addRowActual(e,!0)}),o.origFuncs.unshift.apply(e,arguments)}}),o.origFuncs.shift=e.shift,Object.defineProperty(o.data,"shift",{enumerable:!1,configurable:!0,value:function(){var i;return o.blocked||t!==o.currentVersion||o.data.length&&(i=o.table.rowManager.getRowFromDataObject(o.data[0]))&&i.deleteActual(),o.origFuncs.shift.call(e)}}),o.origFuncs.pop=e.pop,Object.defineProperty(o.data,"pop",{enumerable:!1,configurable:!0,value:function(){var i;return o.blocked||t!==o.currentVersion||o.data.length&&(i=o.table.rowManager.getRowFromDataObject(o.data[o.data.length-1]))&&i.deleteActual(),o.origFuncs.pop.call(e)}}),o.origFuncs.splice=e.splice,Object.defineProperty(o.data,"splice",{enumerable:!1,configurable:!0,value:function(){var i,n=Array.from(arguments),s=n[0]<0?e.length+n[0]:n[0],r=n[1],a=!!n[2]&&n.slice(2);if(!o.blocked&&t===o.currentVersion){if(a&&(i=!!e[s]&&o.table.rowManager.getRowFromDataObject(e[s]),i?a.forEach(function(e){o.table.rowManager.addRowActual(e,!0,i,!0)}):(a=a.slice().reverse(),a.forEach(function(e){o.table.rowManager.addRowActual(e,!0,!1,!0)}))),0!==r){var l=e.slice(s,void 0===n[1]?n[1]:s+r);l.forEach(function(e,t){var i=o.table.rowManager.getRowFromDataObject(e);i&&i.deleteActual(t!==l.length-1)})}(a||0!==r)&&o.table.rowManager.reRenderInPosition()}return o.origFuncs.splice.apply(e,arguments)}})},V.prototype.unwatchData=function(){if(!1!==this.data)for(var e in this.origFuncs)Object.defineProperty(this.data,e,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})},V.prototype.watchRow=function(e){var t=e.getData();this.blocked=!0;for(var o in t)this.watchKey(e,t,o);this.blocked=!1},V.prototype.watchKey=function(e,t,o){var i=this,n=Object.getOwnPropertyDescriptor(t,o),s=t[o],r=this.currentVersion;Object.defineProperty(t,o,{set:function(t){if(s=t,!i.blocked&&r===i.currentVersion){var a={};a[o]=t,e.updateData(a)}n.set&&n.set(t)},get:function(){return n.get&&n.get(),s}})},V.prototype.unwatchRow=function(e){var t=e.getData();for(var o in t)Object.defineProperty(t,o,{value:t[o]})},V.prototype.block=function(){this.blocked=!0},V.prototype.unblock=function(){this.blocked=!1},d.prototype.registerModule("reactiveData",V);var W=function(e){this.table=e,this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.handle=null,this.prevHandle=null};W.prototype.initializeColumn=function(e,t,o){var i=this,n=!1,s=this.table.options.resizableColumns;if("header"===e&&(n="textarea"==t.definition.formatter||t.definition.variableHeight,t.modules.resize={variableHeight:n}),!0===s||s==e){var r=document.createElement("div");r.className="tabulator-col-resize-handle";var a=document.createElement("div");a.className="tabulator-col-resize-handle prev",r.addEventListener("click",function(e){e.stopPropagation()});var l=function(e){var o=t.getLastColumn();o&&i._checkResizability(o)&&(i.startColumn=t,i._mouseDown(e,o,r))};r.addEventListener("mousedown",l),r.addEventListener("touchstart",l,{passive:!0}),r.addEventListener("dblclick",function(e){var o=t.getLastColumn();o&&i._checkResizability(o)&&(e.stopPropagation(),o.reinitializeWidth(!0))}),a.addEventListener("click",function(e){e.stopPropagation()});var c=function(e){var o,n,s;(o=t.getFirstColumn())&&(n=i.table.columnManager.findColumnIndex(o),(s=n>0&&i.table.columnManager.getColumnByIndex(n-1))&&i._checkResizability(s)&&(i.startColumn=t,i._mouseDown(e,s,a)))};a.addEventListener("mousedown",c),a.addEventListener("touchstart",c,{passive:!0}),a.addEventListener("dblclick",function(e){var o,n,s;(o=t.getFirstColumn())&&(n=i.table.columnManager.findColumnIndex(o),(s=n>0&&i.table.columnManager.getColumnByIndex(n-1))&&i._checkResizability(s)&&(e.stopPropagation(),s.reinitializeWidth(!0)))}),o.appendChild(r),o.appendChild(a)}},W.prototype._checkResizability=function(e){return void 0!==e.definition.resizable?e.definition.resizable:this.table.options.resizableColumns},W.prototype._mouseDown=function(e,t,o){function i(e){t.setWidth(s.startWidth+((void 0===e.screenX?e.touches[0].screenX:e.screenX)-s.startX)),!s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights()}function n(e){s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!1),s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights(),document.body.removeEventListener("mouseup",n),document.body.removeEventListener("mousemove",i),o.removeEventListener("touchmove",i),o.removeEventListener("touchend",n),s.table.element.classList.remove("tabulator-block-select"),s.table.options.persistence&&s.table.modExists("persistence",!0)&&s.table.modules.persistence.config.columns&&s.table.modules.persistence.save("columns"),s.table.options.columnResized.call(s.table,t.getComponent())}var s=this;s.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!0),s.startX=void 0===e.screenX?e.touches[0].screenX:e.screenX,s.startWidth=t.getWidth(),document.body.addEventListener("mousemove",i),document.body.addEventListener("mouseup",n),o.addEventListener("touchmove",i,{passive:!0}),o.addEventListener("touchend",n)},d.prototype.registerModule("resizeColumns",W);var G=function(e){this.table=e,this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null};G.prototype.initializeRow=function(e){var t=this,o=e.getElement(),i=document.createElement("div");i.className="tabulator-row-resize-handle";var n=document.createElement("div");n.className="tabulator-row-resize-handle prev",i.addEventListener("click",function(e){e.stopPropagation()});var s=function(o){t.startRow=e,t._mouseDown(o,e,i)};i.addEventListener("mousedown",s),i.addEventListener("touchstart",s,{passive:!0}),n.addEventListener("click",function(e){e.stopPropagation()});var r=function(o){var i=t.table.rowManager.prevDisplayRow(e);i&&(t.startRow=i,t._mouseDown(o,i,n))};n.addEventListener("mousedown",r),n.addEventListener("touchstart",r,{passive:!0}),o.appendChild(i),o.appendChild(n)},G.prototype._mouseDown=function(e,t,o){function i(e){t.setHeight(s.startHeight+((void 0===e.screenY?e.touches[0].screenY:e.screenY)-s.startY))}function n(e){document.body.removeEventListener("mouseup",i),document.body.removeEventListener("mousemove",i),o.removeEventListener("touchmove",i),o.removeEventListener("touchend",n),s.table.element.classList.remove("tabulator-block-select"),s.table.options.rowResized.call(this.table,t.getComponent())}var s=this;s.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),s.startY=void 0===e.screenY?e.touches[0].screenY:e.screenY,s.startHeight=t.getHeight(),document.body.addEventListener("mousemove",i),document.body.addEventListener("mouseup",n),o.addEventListener("touchmove",i,{passive:!0}),o.addEventListener("touchend",n)},d.prototype.registerModule("resizeRows",G);var U=function(e){this.table=e,this.binding=!1,this.observer=!1,this.containerObserver=!1,this.tableHeight=0,this.tableWidth=0,this.containerHeight=0,this.containerWidth=0,this.autoResize=!1};U.prototype.initialize=function(e){var t,o=this,i=this.table;this.tableHeight=i.element.clientHeight,this.tableWidth=i.element.clientWidth,i.element.parentNode&&(this.containerHeight=i.element.parentNode.clientHeight,this.containerWidth=i.element.parentNode.clientWidth),"undefined"!=typeof ResizeObserver&&"virtual"===i.rowManager.getRenderMode()?(this.autoResize=!0,this.observer=new ResizeObserver(function(e){if(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell){var t=Math.floor(e[0].contentRect.height),n=Math.floor(e[0].contentRect.width);o.tableHeight==t&&o.tableWidth==n||(o.tableHeight=t,o.tableWidth=n,i.element.parentNode&&(o.containerHeight=i.element.parentNode.clientHeight,o.containerWidth=i.element.parentNode.clientWidth),i.redraw())}}),this.observer.observe(i.element),t=window.getComputedStyle(i.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(t.getPropertyValue("max-height")||t.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver(function(e){if(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell){var t=Math.floor(e[0].contentRect.height),n=Math.floor(e[0].contentRect.width);o.containerHeight==t&&o.containerWidth==n||(o.containerHeight=t,o.containerWidth=n,o.tableHeight=i.element.clientHeight,o.tableWidth=i.element.clientWidth,i.redraw()),i.redraw()}}),this.containerObserver.observe(this.table.element.parentNode))):(this.binding=function(){(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell)&&i.redraw()},window.addEventListener("resize",this.binding))},U.prototype.clearBindings=function(e){this.binding&&window.removeEventListener("resize",this.binding),this.observer&&this.observer.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)},d.prototype.registerModule("resizeTable",U);var Y=function(e){this.table=e,this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0,this.collapseHandleColumn=!1};Y.prototype.initialize=function(){var e=this,t=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.table.columnManager.columnsByIndex.forEach(function(o,i){o.modules.responsive&&o.modules.responsive.order&&o.modules.responsive.visible&&(o.modules.responsive.index=i,t.push(o),o.visible||"collapse"!==e.mode||e.hiddenColumns.push(o))}),t=t.reverse(),t=t.sort(function(e,t){return t.modules.responsive.order-e.modules.responsive.order||t.modules.responsive.index-e.modules.responsive.index}),this.columns=t,"collapse"===this.mode&&this.generateCollapsedContent();for(var o=this.table.columnManager.columnsByIndex,i=Array.isArray(o),n=0,o=i?o:o[Symbol.iterator]();;){var s;if(i){if(n>=o.length)break;s=o[n++]}else{if(n=o.next(),n.done)break;s=n.value}var r=s;if("responsiveCollapse"==r.definition.formatter){this.collapseHandleColumn=r;break}}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())},Y.prototype.initializeColumn=function(e){var t=e.getDefinition();e.modules.responsive={order:void 0===t.responsive?1:t.responsive,visible:!1!==t.visible}},Y.prototype.initializeRow=function(e){var t;"calc"!==e.type&&(t=document.createElement("div"),t.classList.add("tabulator-responsive-collapse"),e.modules.responsiveLayout={element:t,open:this.collapseStartOpen},this.collapseStartOpen||(t.style.display="none"))},Y.prototype.layoutRow=function(e){var t=e.getElement();e.modules.responsiveLayout&&(t.appendChild(e.modules.responsiveLayout.element),this.generateCollapsedRowContent(e))},Y.prototype.updateColumnVisibility=function(e,t){e.modules.responsive&&(e.modules.responsive.visible=t,this.initialize())},Y.prototype.hideColumn=function(e){var t=this.hiddenColumns.length;e.hide(!1,!0),"collapse"===this.mode&&(this.hiddenColumns.unshift(e),this.generateCollapsedContent(),this.collapseHandleColumn&&!t&&this.collapseHandleColumn.show())},Y.prototype.showColumn=function(e){var t;e.show(!1,!0),e.setWidth(e.getWidth()),"collapse"===this.mode&&(t=this.hiddenColumns.indexOf(e),t>-1&&this.hiddenColumns.splice(t,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())},Y.prototype.update=function(){for(var e=this,t=!0;t;){var o="fitColumns"==e.table.modules.layout.getMode()?e.table.columnManager.getFlexBaseWidth():e.table.columnManager.getWidth(),i=(e.table.options.headerVisible?e.table.columnManager.element.clientWidth:e.table.element.clientWidth)-o;if(i<0){var n=e.columns[e.index];n?(e.hideColumn(n),e.index++):t=!1}else{var s=e.columns[e.index-1] +;s&&i>0&&i>=s.getWidth()?(e.showColumn(s),e.index--):t=!1}e.table.rowManager.activeRowsCount||e.table.rowManager.renderEmptyScroll()}},Y.prototype.generateCollapsedContent=function(){var e=this;this.table.rowManager.getDisplayRows().forEach(function(t){e.generateCollapsedRowContent(t)})},Y.prototype.generateCollapsedRowContent=function(e){var t,o;if(e.modules.responsiveLayout){for(t=e.modules.responsiveLayout.element;t.firstChild;)t.removeChild(t.firstChild);o=this.collapseFormatter(this.generateCollapsedRowData(e)),o&&t.appendChild(o)}},Y.prototype.generateCollapsedRowData=function(e){var t,o=this,i=e.getData(),n=[];return this.hiddenColumns.forEach(function(s){var r=s.getFieldValue(i);s.definition.title&&s.field&&(s.modules.format&&o.table.options.responsiveLayoutCollapseUseFormatters?(t={value:!1,data:{},getValue:function(){return r},getData:function(){return i},getElement:function(){return document.createElement("div")},getRow:function(){return e.getComponent()},getColumn:function(){return s.getComponent()}},n.push({title:s.definition.title,value:s.modules.format.formatter.call(o.table.modules.format,t,s.modules.format.params)})):n.push({title:s.definition.title,value:r}))}),n},Y.prototype.formatCollapsedData=function(e){var t=document.createElement("table"),o="";return e.forEach(function(e){var t=document.createElement("div");e.value instanceof Node&&(t.appendChild(e.value),e.value=t.innerHTML),o+=""+e.title+""+e.value+""}),t.innerHTML=o,Object.keys(e).length?t:""},d.prototype.registerModule("responsiveLayout",Y);var q=function(e){this.table=e,this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],this.headerCheckboxElement=null};q.prototype.clearSelectionData=function(e){this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],e||this._rowSelectionChanged()},q.prototype.initializeRow=function(e){var t=this,o=e.getElement(),i=function e(){setTimeout(function(){t.selecting=!1},50),document.body.removeEventListener("mouseup",e)};e.modules.select={selected:!1},t.table.options.selectableCheck.call(this.table,e.getComponent())?(o.classList.add("tabulator-selectable"),o.classList.remove("tabulator-unselectable"),t.table.options.selectable&&"highlight"!=t.table.options.selectable&&("click"===t.table.options.selectableRangeMode?o.addEventListener("click",function(o){if(o.shiftKey){t.table._clearSelection(),t.lastClickedRow=t.lastClickedRow||e;var i=t.table.rowManager.getDisplayRowIndex(t.lastClickedRow),n=t.table.rowManager.getDisplayRowIndex(e),s=i<=n?i:n,r=i>=n?i:n,a=t.table.rowManager.getDisplayRows().slice(0),l=a.splice(s,r-s+1);o.ctrlKey||o.metaKey?(l.forEach(function(o){o!==t.lastClickedRow&&(!0===t.table.options.selectable||t.isRowSelected(e)?t.toggleRow(o):t.selectedRows.lengtht.table.options.selectable&&(l=l.slice(0,t.table.options.selectable)),t.selectRows(l)),t.table._clearSelection()}else o.ctrlKey||o.metaKey?(t.toggleRow(e),t.lastClickedRow=e):(t.deselectRows(void 0,!0),t.selectRows(e),t.lastClickedRow=e)}):(o.addEventListener("click",function(o){t.table.modExists("edit")&&t.table.modules.edit.getCurrentCell()||t.table._clearSelection(),t.selecting||t.toggleRow(e)}),o.addEventListener("mousedown",function(o){if(o.shiftKey)return t.table._clearSelection(),t.selecting=!0,t.selectPrev=[],document.body.addEventListener("mouseup",i),document.body.addEventListener("keyup",i),t.toggleRow(e),!1}),o.addEventListener("mouseenter",function(o){t.selecting&&(t.table._clearSelection(),t.toggleRow(e),t.selectPrev[1]==e&&t.toggleRow(t.selectPrev[0]))}),o.addEventListener("mouseout",function(o){t.selecting&&(t.table._clearSelection(),t.selectPrev.unshift(e))})))):(o.classList.add("tabulator-unselectable"),o.classList.remove("tabulator-selectable"))},q.prototype.toggleRow=function(e){this.table.options.selectableCheck.call(this.table,e.getComponent())&&(e.modules.select&&e.modules.select.selected?this._deselectRow(e):this._selectRow(e))},q.prototype.selectRows=function(e){var t,o=this;switch(void 0===e?"undefined":_typeof(e)){case"undefined":this.table.rowManager.rows.forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged();break;case"string":t=this.table.rowManager.findRow(e),t?this._selectRow(t,!0,!0):this.table.rowManager.getRows(e).forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged();break;default:Array.isArray(e)?(e.forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged()):this._selectRow(e,!1,!0)}},q.prototype._selectRow=function(e,t,o){if(!isNaN(this.table.options.selectable)&&!0!==this.table.options.selectable&&!o&&this.selectedRows.length>=this.table.options.selectable){if(!this.table.options.selectableRollingSelection)return!1;this._deselectRow(this.selectedRows[0])}var i=this.table.rowManager.findRow(e);i?-1==this.selectedRows.indexOf(i)&&(i.modules.select||(i.modules.select={}),i.modules.select.selected=!0,i.modules.select.checkboxEl&&(i.modules.select.checkboxEl.checked=!0),i.getElement().classList.add("tabulator-selected"),this.selectedRows.push(i),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(i,!0),t||this.table.options.rowSelected.call(this.table,i.getComponent()),this._rowSelectionChanged(t)):t||console.warn("Selection Error - No such row found, ignoring selection:"+e)},q.prototype.isRowSelected=function(e){return-1!==this.selectedRows.indexOf(e)},q.prototype.deselectRows=function(e,t){var o,i=this;if(void 0===e){o=i.selectedRows.length;for(var n=0;n-1&&(n.modules.select||(n.modules.select={}),n.modules.select.selected=!1,n.modules.select.checkboxEl&&(n.modules.select.checkboxEl.checked=!1),n.getElement().classList.remove("tabulator-selected"),i.selectedRows.splice(o,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(n,!1),t||i.table.options.rowDeselected.call(this.table,n.getComponent()),i._rowSelectionChanged(t)):t||console.warn("Deselection Error - No such row found, ignoring selection:"+e)},q.prototype.getSelectedData=function(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getData())}),e},q.prototype.getSelectedRows=function(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getComponent())}),e},q.prototype._rowSelectionChanged=function(e){this.headerCheckboxElement&&(0===this.selectedRows.length?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),e||this.table.options.rowSelectionChanged.call(this.table,this.getSelectedData(),this.getSelectedRows())},q.prototype.registerRowSelectCheckbox=function(e,t){e._row.modules.select||(e._row.modules.select={}),e._row.modules.select.checkboxEl=t},q.prototype.registerHeaderSelectCheckbox=function(e){this.headerCheckboxElement=e},q.prototype.childRowSelection=function(e,t){var o=this.table.modules.dataTree.getChildren(e);if(t)for(var i=o,n=Array.isArray(i),s=0,i=n?i:i[Symbol.iterator]();;){var r;if(n){if(s>=i.length)break;r=i[s++]}else{if(s=i.next(),s.done)break;r=s.value}var a=r;this._selectRow(a,!0)}else for(var l=o,c=Array.isArray(l),u=0,l=c?l:l[Symbol.iterator]();;){var d;if(c){if(u>=l.length)break;d=l[u++]}else{if(u=l.next(),u.done)break;d=u.value}var h=d;this._deselectRow(h,!0)}},d.prototype.registerModule("selectRow",q);var X=function(e){this.table=e,this.sortList=[],this.changed=!1};X.prototype.initializeColumn=function(e,t){var o,i,n=this,s=!1;switch(_typeof(e.definition.sorter)){case"string":n.sorters[e.definition.sorter]?s=n.sorters[e.definition.sorter]:console.warn("Sort Error - No such sorter found: ",e.definition.sorter);break;case"function":s=e.definition.sorter}e.modules.sort={sorter:s,dir:"none",params:e.definition.sorterParams||{},startingDir:e.definition.headerSortStartingDir||"asc",tristate:void 0!==e.definition.headerSortTristate?e.definition.headerSortTristate:this.table.options.headerSortTristate},(void 0===e.definition.headerSort?!1!==this.table.options.headerSort:!1!==e.definition.headerSort)&&(o=e.getElement(),o.classList.add("tabulator-sortable"),i=document.createElement("div"),i.classList.add("tabulator-arrow"),t.appendChild(i),o.addEventListener("click",function(t){var o="",i=[],s=!1;if(e.modules.sort){if(e.modules.sort.tristate)o="none"==e.modules.sort.dir?e.modules.sort.startingDir:e.modules.sort.dir==e.modules.sort.startingDir?"asc"==e.modules.sort.dir?"desc":"asc":"none";else switch(e.modules.sort.dir){case"asc":o="desc";break;case"desc":o="asc";break;default:o=e.modules.sort.startingDir}n.table.options.columnHeaderSortMulti&&(t.shiftKey||t.ctrlKey)?(i=n.getSort(),s=i.findIndex(function(t){return t.field===e.getField()}),s>-1?(i[s].dir=o,s!=i.length-1&&(s=i.splice(s,1)[0],"none"!=o&&i.push(s))):"none"!=o&&i.push({column:e,dir:o}),n.setSort(i)):"none"==o?n.clear():n.setSort(e,o),n.table.rowManager.sorterRefresh(!n.sortList.length)}}))},X.prototype.hasChanged=function(){var e=this.changed;return this.changed=!1,e},X.prototype.getSort=function(){var e=this,t=[];return e.sortList.forEach(function(e){e.column&&t.push({column:e.column.getComponent(),field:e.column.getField(),dir:e.dir})}),t},X.prototype.setSort=function(e,t){var o=this,i=[];Array.isArray(e)||(e=[{column:e,dir:t}]),e.forEach(function(e){var t;t=o.table.columnManager.findColumn(e.column),t?(e.column=t,i.push(e),o.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",e.column)}),o.sortList=i,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.sort&&this.table.modules.persistence.save("sort")},X.prototype.clear=function(){this.setSort([])},X.prototype.findSorter=function(e){var t,o=this.table.rowManager.activeRows[0],i="string";if(o&&(o=o.getData(),e.getField()))switch(t=e.getFieldValue(o),void 0===t?"undefined":_typeof(t)){case"undefined":i="string";break;case"boolean":i="boolean";break;default:isNaN(t)||""===t?t.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(i="alphanum"):i="number"}return this.sorters[i]},X.prototype.sort=function(e){var t=this,o=this.table.options.sortOrderReverse?t.sortList.slice().reverse():t.sortList,i=[],n=[];t.table.options.dataSorting&&t.table.options.dataSorting.call(t.table,t.getSort()),t.clearColumnHeaders(),t.table.options.ajaxSorting?o.forEach(function(e,o){t.setColumnHeader(e.column,e.dir)}):(o.forEach(function(e,o){var n=e.column.modules.sort;e.column&&n&&(n.sorter||(n.sorter=t.findSorter(e.column)),e.params="function"==typeof n.params?n.params(e.column.getComponent(),e.dir):n.params,i.push(e)),t.setColumnHeader(e.column,e.dir)}),i.length&&t._sortItems(e,i)),t.table.options.dataSorted&&(e.forEach(function(e){n.push(e.getComponent())}),t.table.options.dataSorted.call(t.table,t.getSort(),n))},X.prototype.clearColumnHeaders=function(){this.table.columnManager.getRealColumns().forEach(function(e){e.modules.sort&&(e.modules.sort.dir="none",e.getElement().setAttribute("aria-sort","none"))})},X.prototype.setColumnHeader=function(e,t){e.modules.sort.dir=t,e.getElement().setAttribute("aria-sort",t)},X.prototype._sortItems=function(e,t){var o=this,i=t.length-1;e.sort(function(e,n){for(var s,r=i;r>=0;r--){var a=t[r];if(0!==(s=o._sortRow(e,n,a.column,a.dir,a.params)))break}return s})},X.prototype._sortRow=function(e,t,o,i,n){var s,r,a="asc"==i?e:t,l="asc"==i?t:e;return e=o.getFieldValue(a.getData()),t=o.getFieldValue(l.getData()),e=void 0!==e?e:"",t=void 0!==t?t:"",s=a.getComponent(),r=l.getComponent(),o.modules.sort.sorter.call(this,e,t,s,r,o.getComponent(),i,n)},X.prototype.sorters={number:function(e,t,o,i,n,s,r){var a=r.alignEmptyValues,l=r.decimalSeparator||".",c=r.thousandSeparator||",",u=0;if(e=parseFloat(String(e).split(c).join("").split(l).join(".")),t=parseFloat(String(t).split(c).join("").split(l).join(".")),isNaN(e))u=isNaN(t)?0:-1;else{if(!isNaN(t))return e-t;u=1}return("top"===a&&"desc"===s||"bottom"===a&&"asc"===s)&&(u*=-1),u},string:function(e,t,o,i,n,s,r){var a,l=r.alignEmptyValues,c=0;if(e){if(t){switch(_typeof(r.locale)){case"boolean":r.locale&&(a=this.table.modules.localize.getLocale());break;case"string":a=r.locale}return String(e).toLowerCase().localeCompare(String(t).toLowerCase(),a)}c=1}else c=t?-1:0;return("top"===l&&"desc"===s||"bottom"===l&&"asc"===s)&&(c*=-1),c},date:function(e,t,o,i,n,s,r){return r.format||(r.format="DD/MM/YYYY"),this.sorters.datetime.call(this,e,t,o,i,n,s,r)},time:function(e,t,o,i,n,s,r){return r.format||(r.format="HH:mm"),this.sorters.datetime.call(this,e,t,o,i,n,s,r)},datetime:function(e,t,o,i,n,s,r){var a=r.format||"DD/MM/YYYY HH:mm:ss",l=r.alignEmptyValues,c=0;if("undefined"!=typeof moment){if(e=moment(e,a),t=moment(t,a),e.isValid()){if(t.isValid())return e-t;c=1}else c=t.isValid()?-1:0;return("top"===l&&"desc"===s||"bottom"===l&&"asc"===s)&&(c*=-1),c}console.error("Sort Error - 'datetime' sorter is dependant on moment.js")},boolean:function(e,t,o,i,n,s,r){return(!0===e||"true"===e||"True"===e||1===e?1:0)-(!0===t||"true"===t||"True"===t||1===t?1:0)},array:function(e,t,o,i,n,s,r){function a(e){switch(u){case"length":return e.length;case"sum":return e.reduce(function(e,t){return e+t});case"max":return Math.max.apply(null,e);case"min":return Math.min.apply(null,e);case"avg":return e.reduce(function(e,t){return e+t})/e.length}}var l=0,c=0,u=r.type||"length",d=r.alignEmptyValues,h=0;if(Array.isArray(e)){if(Array.isArray(t))return l=e?a(e):0,c=t?a(t):0,l-c;d=1}else d=Array.isArray(t)?-1:0;return("top"===d&&"desc"===s||"bottom"===d&&"asc"===s)&&(h*=-1),h},exists:function(e,t,o,i,n,s,r){return(void 0===e?0:1)-(void 0===t?0:1)},alphanum:function(e,t,o,i,n,s,r){var a,l,c,u,d,h=0,p=/(\d+)|(\D+)/g,m=/\d/,f=r.alignEmptyValues,g=0;if(e||0===e){if(t||0===t){if(isFinite(e)&&isFinite(t))return e-t;if(a=String(e).toLowerCase(),l=String(t).toLowerCase(),a===l)return 0;if(!m.test(a)||!m.test(l))return a>l?1:-1;for(a=a.match(p),l=l.match(p),d=a.length>l.length?l.length:a.length;hu?1:-1;return a.length>l.length}g=1}else g=t||0===t?-1:0;return("top"===f&&"desc"===s||"bottom"===f&&"asc"===s)&&(g*=-1),g}},d.prototype.registerModule("sort",X);var K=function(e){this.table=e,this.invalidCells=[]};return K.prototype.initializeColumn=function(e){var t,o=this,i=[];e.definition.validator&&(Array.isArray(e.definition.validator)?e.definition.validator.forEach(function(e){(t=o._extractValidator(e))&&i.push(t)}):(t=this._extractValidator(e.definition.validator))&&i.push(t),e.modules.validate=!!i.length&&i)},K.prototype._extractValidator=function(e){var t,o,i;switch(void 0===e?"undefined":_typeof(e)){case"string":return i=e.indexOf(":"),i>-1?(t=e.substring(0,i),o=e.substring(i+1)):t=e,this._buildValidator(t,o);case"function":return this._buildValidator(e);case"object":return this._buildValidator(e.type,e.parameters)}},K.prototype._buildValidator=function(e,t){var o="function"==typeof e?e:this.validators[e];return o?{type:"function"==typeof e?"function":e,func:o,params:t}:(console.warn("Validator Setup Error - No matching validator found:",e),!1)},K.prototype.validate=function(e,t,o){var i=this,n=[],s=this.invalidCells.indexOf(t);return e&&e.forEach(function(e){e.func.call(i,t.getComponent(),o,e.params)||n.push({type:e.type,parameters:e.params})}),n=!n.length||n,t.modules.validate||(t.modules.validate={}),!0===n?(t.modules.validate.invalid=!1,t.getElement().classList.remove("tabulator-validation-fail"),s>-1&&this.invalidCells.splice(s,1)):(t.modules.validate.invalid=!0,"manual"!==this.table.options.validationMode&&t.getElement().classList.add("tabulator-validation-fail"),-1==s&&this.invalidCells.push(t)),n},K.prototype.getInvalidCells=function(){var e=[];return this.invalidCells.forEach(function(t){e.push(t.getComponent())}),e},K.prototype.clearValidation=function(e){var t;e.modules.validate&&e.modules.validate.invalid&&(e.element.classList.remove("tabulator-validation-fail"),e.modules.validate.invalid=!1,(t=this.invalidCells.indexOf(e))>-1&&this.invalidCells.splice(t,1))},K.prototype.validators={integer:function(e,t,o){return""===t||null===t||void 0===t||"number"==typeof(t=Number(t))&&isFinite(t)&&Math.floor(t)===t},float:function(e,t,o){return""===t||null===t||void 0===t||"number"==typeof(t=Number(t))&&isFinite(t)&&t%1!=0},numeric:function(e,t,o){return""===t||null===t||void 0===t||!isNaN(t)},string:function(e,t,o){return""===t||null===t||void 0===t||isNaN(t)},max:function(e,t,o){return""===t||null===t||void 0===t||parseFloat(t)<=o},min:function(e,t,o){return""===t||null===t||void 0===t||parseFloat(t)>=o},starts:function(e,t,o){return""===t||null===t||void 0===t||String(t).toLowerCase().startsWith(String(o).toLowerCase())},ends:function(e,t,o){return""===t||null===t||void 0===t||String(t).toLowerCase().endsWith(String(o).toLowerCase())},minLength:function(e,t,o){return""===t||null===t||void 0===t||String(t).length>=o},maxLength:function(e,t,o){return""===t||null===t||void 0===t||String(t).length<=o},in:function(e,t,o){return""===t||null===t||void 0===t||("string"==typeof o&&(o=o.split("|")),""===t||o.indexOf(t)>-1)},regex:function(e,t,o){return""===t||null===t||void 0===t||new RegExp(o).test(t)},unique:function(e,t,o){if(""===t||null===t||void 0===t)return!0;var i=!0,n=e.getData(),s=e.getColumn()._getSelf();return this.table.rowManager.rows.forEach(function(e){var o=e.getData();o!==n&&t==s.getFieldValue(o)&&(i=!1)}),i},required:function(e,t,o){return""!==t&&null!==t&&void 0!==t}},d.prototype.registerModule("validate",K),d}); \ No newline at end of file diff --git a/app/static/vendors/tabulator/js/tabulator_core.js b/app/static/vendors/tabulator/js/tabulator_core.js new file mode 100644 index 0000000..1c4797a --- /dev/null +++ b/app/static/vendors/tabulator/js/tabulator_core.js @@ -0,0 +1,8906 @@ +/* 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/app/static/vendors/tabulator/js/tabulator_core.min.js b/app/static/vendors/tabulator/js/tabulator_core.min.js new file mode 100644 index 0000000..92522ab --- /dev/null +++ b/app/static/vendors/tabulator/js/tabulator_core.min.js @@ -0,0 +1,6 @@ +/* Tabulator v4.7.0 (c) Oliver Folkerd */ +"use strict";var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function(t){if(null==this)throw new TypeError('"this" is null or not defined');var e=Object(this),o=e.length>>>0;if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n>>0;if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n>>0;if(0===i)return!1;for(var n=0|e,l=Math.max(n>=0?n:i-Math.abs(n),0);lo?(e=t-o,this.element.style.marginLeft=-e+"px"):this.element.style.marginLeft=0,this.scrollLeft=t,this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.scrollHorizontal()},ColumnManager.prototype.generateColumnsFromRowData=function(t){var e,o,i=[];if(t&&t.length){e=t[0];for(var n in e){var l={field:n,title:n},s=e[n];switch(void 0===s?"undefined":_typeof(s)){case"undefined":o="string";break;case"boolean":o="boolean";break;case"object":o=Array.isArray(s)?"array":"string";break;default:o=isNaN(s)||""===s?s.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?"alphanum":"string":"number"}l.sorter=o,i.push(l)}this.table.options.columns=i,this.setColumns(this.table.options.columns)}},ColumnManager.prototype.setColumns=function(t,e){for(var o=this;o.headersElement.firstChild;)o.headersElement.removeChild(o.headersElement.firstChild);o.columns=[],o.columnsByIndex=[],o.columnsByField={},o.table.modExists("frozenColumns")&&o.table.modules.frozenColumns.reset(),t.forEach(function(t,e){o._addColumn(t)}),o._reIndexColumns(),o.table.options.responsiveLayout&&o.table.modExists("responsiveLayout",!0)&&o.table.modules.responsiveLayout.initialize(),o.redraw(!0)},ColumnManager.prototype._addColumn=function(t,e,o){var i=new Column(t,this),n=i.getElement(),l=o?this.findColumnIndex(o):o;if(o&&l>-1){var s=this.columns.indexOf(o.getTopColumn()),a=o.getElement();e?(this.columns.splice(s,0,i),a.parentNode.insertBefore(n,a)):(this.columns.splice(s+1,0,i),a.parentNode.insertBefore(n,a.nextSibling))}else e?(this.columns.unshift(i),this.headersElement.insertBefore(i.getElement(),this.headersElement.firstChild)):(this.columns.push(i),this.headersElement.appendChild(i.getElement())),i.columnRendered();return i},ColumnManager.prototype.registerColumnField=function(t){t.definition.field&&(this.columnsByField[t.definition.field]=t)},ColumnManager.prototype.registerColumnPosition=function(t){this.columnsByIndex.push(t)},ColumnManager.prototype._reIndexColumns=function(){this.columnsByIndex=[],this.columns.forEach(function(t){t.reRegisterPosition()})},ColumnManager.prototype._verticalAlignHeaders=function(){var t=this,e=0;t.columns.forEach(function(t){var o;t.clearVerticalAlign(),(o=t.getHeight())>e&&(e=o)}),t.columns.forEach(function(o){o.verticalAlign(t.table.options.columnHeaderVertAlign,e)}),t.rowManager.adjustTableSize()},ColumnManager.prototype.findColumn=function(t){var e=this;if("object"!=(void 0===t?"undefined":_typeof(t)))return this.columnsByField[t]||!1;if(t instanceof Column)return t;if(t instanceof ColumnComponent)return t._getSelf()||!1;if("undefined"!=typeof HTMLElement&&t instanceof HTMLElement){return e.columns.find(function(e){return e.element===t})||!1}return!1},ColumnManager.prototype.getColumnByField=function(t){return this.columnsByField[t]},ColumnManager.prototype.getColumnsByFieldRoot=function(t){var e=this,o=[];return Object.keys(this.columnsByField).forEach(function(i){i.split(".")[0]===t&&o.push(e.columnsByField[i])}),o},ColumnManager.prototype.getColumnByIndex=function(t){return this.columnsByIndex[t]},ColumnManager.prototype.getFirstVisibileColumn=function(t){var t=this.columnsByIndex.findIndex(function(t){return t.visible});return t>-1&&this.columnsByIndex[t]},ColumnManager.prototype.getColumns=function(){return this.columns},ColumnManager.prototype.findColumnIndex=function(t){return this.columnsByIndex.findIndex(function(e){return t===e})},ColumnManager.prototype.getRealColumns=function(){return this.columnsByIndex},ColumnManager.prototype.traverse=function(t){this.columnsByIndex.forEach(function(e,o){t(e,o)})},ColumnManager.prototype.getDefinitions=function(t){var e=this,o=[];return e.columnsByIndex.forEach(function(e){(!t||t&&e.visible)&&o.push(e.getDefinition())}),o},ColumnManager.prototype.getDefinitionTree=function(){var t=this,e=[];return t.columns.forEach(function(t){e.push(t.getDefinition(!0))}),e},ColumnManager.prototype.getComponents=function(t){var e=this,o=[];return(t?e.columns:e.columnsByIndex).forEach(function(t){o.push(t.getComponent())}),o},ColumnManager.prototype.getWidth=function(){var t=0;return this.columnsByIndex.forEach(function(e){e.visible&&(t+=e.getWidth())}),t},ColumnManager.prototype.moveColumn=function(t,e,o){this.moveColumnActual(t,e,o),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),e.element.parentNode.insertBefore(t.element,e.element),o&&e.element.parentNode.insertBefore(e.element,t.element),this._verticalAlignHeaders(),this.table.rowManager.reinitialize()},ColumnManager.prototype.moveColumnActual=function(t,e,o){t.parent.isGroup?this._moveColumnInArray(t.parent.columns,t,e,o):this._moveColumnInArray(this.columns,t,e,o),this._moveColumnInArray(this.columnsByIndex,t,e,o,!0),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.options.columnMoved&&this.table.options.columnMoved.call(this.table,t.getComponent(),this.table.columnManager.getComponents()),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns")},ColumnManager.prototype._moveColumnInArray=function(t,e,o,i,n){var l,s=t.indexOf(e);s>-1&&(t.splice(s,1),l=t.indexOf(o),l>-1?i&&(l+=1):l=s,t.splice(l,0,e),n&&this.table.rowManager.rows.forEach(function(t){if(t.cells.length){var e=t.cells.splice(s,1)[0];t.cells.splice(l,0,e)}}))},ColumnManager.prototype.scrollToColumn=function(t,e,o){var i=this,n=0,l=0,s=0,a=t.getElement();return new Promise(function(r,u){if(void 0===e&&(e=i.table.options.scrollToColumnPosition),void 0===o&&(o=i.table.options.scrollToColumnIfVisible),t.visible){switch(e){case"middle":case"center":s=-i.element.clientWidth/2;break;case"right":s=a.clientWidth-i.headersElement.clientWidth}if(!o&&(l=a.offsetLeft)>0&&l+a.offsetWidtht.rowManager.element.clientHeight&&(e-=t.rowManager.element.offsetWidth-t.rowManager.element.clientWidth),this.columnsByIndex.forEach(function(i){var n,l,s;i.visible&&(n=i.definition.width||0,l=void 0===i.minWidth?t.table.options.columnMinWidth:parseInt(i.minWidth),s="string"==typeof n?n.indexOf("%")>-1?e/100*parseInt(n):parseInt(n):n,o+=s>l?s:l)}),o},ColumnManager.prototype.addColumn=function(t,e,o){var i=this;return new Promise(function(n,l){var s=i._addColumn(t,e,o);i._reIndexColumns(),i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout",!0)&&i.table.modules.responsiveLayout.initialize(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.redraw(),"fitColumns"!=i.table.modules.layout.getMode()&&s.reinitializeWidth(),i._verticalAlignHeaders(),i.table.rowManager.reinitialize(),n(s)})},ColumnManager.prototype.deregisterColumn=function(t){var e,o=t.getField();o&&delete this.columnsByField[o],e=this.columnsByIndex.indexOf(t),e>-1&&this.columnsByIndex.splice(e,1),e=this.columns.indexOf(t),e>-1&&this.columns.splice(e,1),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.redraw()},ColumnManager.prototype.redraw=function(t){t&&(Tabulator.prototype.helpers.elVisible(this.element)&&this._verticalAlignHeaders(),this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),["fitColumns","fitDataStretch"].indexOf(this.table.modules.layout.getMode())>-1?this.table.modules.layout.layout():t?this.table.modules.layout.layout():this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),t&&(this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.redraw()),this.table.footerManager.redraw()};var ColumnComponent=function(t){this._column=t,this.type="ColumnComponent"};ColumnComponent.prototype.getElement=function(){return this._column.getElement()},ColumnComponent.prototype.getDefinition=function(){return this._column.getDefinition()},ColumnComponent.prototype.getField=function(){return this._column.getField()},ColumnComponent.prototype.getCells=function(){var t=[];return this._column.cells.forEach(function(e){t.push(e.getComponent())}),t},ColumnComponent.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._column.visible},ColumnComponent.prototype.isVisible=function(){return this._column.visible},ColumnComponent.prototype.show=function(){this._column.isGroup?this._column.columns.forEach(function(t){t.show()}):this._column.show()},ColumnComponent.prototype.hide=function(){this._column.isGroup?this._column.columns.forEach(function(t){t.hide()}):this._column.hide()},ColumnComponent.prototype.toggle=function(){this._column.visible?this.hide():this.show()},ColumnComponent.prototype.delete=function(){return this._column.delete()},ColumnComponent.prototype.getSubColumns=function(){var t=[];return this._column.columns.length&&this._column.columns.forEach(function(e){t.push(e.getComponent())}),t},ColumnComponent.prototype.getParentColumn=function(){return this._column.parent instanceof Column&&this._column.parent.getComponent()},ColumnComponent.prototype._getSelf=function(){return this._column},ColumnComponent.prototype.scrollTo=function(){return this._column.table.columnManager.scrollToColumn(this._column)},ColumnComponent.prototype.getTable=function(){return this._column.table},ColumnComponent.prototype.headerFilterFocus=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterFocus(this._column)},ColumnComponent.prototype.reloadHeaderFilter=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.reloadHeaderFilter(this._column)},ColumnComponent.prototype.getHeaderFilterValue=function(){if(this._column.table.modExists("filter",!0))return this._column.table.modules.filter.getHeaderFilterValue(this._column)},ColumnComponent.prototype.setHeaderFilterValue=function(t){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterValue(this._column,t)},ColumnComponent.prototype.move=function(t,e){var o=this._column.table.columnManager.findColumn(t);o?this._column.table.columnManager.moveColumn(this._column,o,e):console.warn("Move Error - No matching column found:",o)},ColumnComponent.prototype.getNextColumn=function(){var t=this._column.nextColumn();return!!t&&t.getComponent()},ColumnComponent.prototype.getPrevColumn=function(){var t=this._column.prevColumn();return!!t&&t.getComponent()},ColumnComponent.prototype.updateDefinition=function(t){return this._column.updateDefinition(t)},ColumnComponent.prototype.getWidth=function(){return this._column.getWidth()},ColumnComponent.prototype.setWidth=function(t){return!0===t?this._column.reinitializeWidth(!0):this._column.setWidth(t)},ColumnComponent.prototype.validate=function(){return this._column.validate()};var Column=function t(e,o){var i=this;this.table=o.table,this.definition=e,this.parent=o,this.type="column",this.columns=[],this.cells=[],this.element=this.createElement(),this.contentElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.isGroup=!1,this.tooltip=!1,this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleFormatterRendered=!1,this.setField(this.definition.field),this.table.options.invalidOptionWarnings&&this.checkDefinition(),this.modules={},this.cellEvents={cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1},this.width=null,this.widthStyled="",this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this._mapDepricatedFunctionality(),e.columns?(this.isGroup=!0,e.columns.forEach(function(e,o){var n=new t(e,i);i.attachColumn(n)}),i.checkColumnVisibility()):o.registerColumnField(this),e.rowHandle&&!1!==this.table.options.movableRows&&this.table.modExists("moveRow")&&this.table.modules.moveRow.setHandle(!0),this._buildHeader(),this.bindModuleColumns()};Column.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-col"),t.setAttribute("role","columnheader"),t.setAttribute("aria-sort","none"),t},Column.prototype.createGroupElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-col-group-cols"),t},Column.prototype.checkDefinition=function(){var t=this;Object.keys(this.definition).forEach(function(e){-1===t.defaultOptionList.indexOf(e)&&console.warn("Invalid column definition option in '"+(t.field||t.definition.title)+"' column:",e)})},Column.prototype.setField=function(t){this.field=t,this.fieldStructure=t?this.table.options.nestedFieldSeparator?t.split(this.table.options.nestedFieldSeparator):[t]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData},Column.prototype.registerColumnPosition=function(t){this.parent.registerColumnPosition(t)},Column.prototype.registerColumnField=function(t){this.parent.registerColumnField(t)},Column.prototype.reRegisterPosition=function(){this.isGroup?this.columns.forEach(function(t){t.reRegisterPosition()}):this.registerColumnPosition(this)},Column.prototype._mapDepricatedFunctionality=function(){void 0!==this.definition.hideInHtml&&(this.definition.htmlOutput=!this.definition.hideInHtml,console.warn("hideInHtml column definition property is deprecated, you should now use htmlOutput")),void 0!==this.definition.align&&(this.definition.hozAlign=this.definition.align,console.warn("align column definition property is deprecated, you should now use hozAlign")),void 0!==this.definition.downloadTitle&&(this.definition.titleDownload=this.definition.downloadTitle,console.warn("downloadTitle definition property is deprecated, you should now use titleDownload"))},Column.prototype.setTooltip=function(){var t=this,e=t.definition,o=e.headerTooltip||!1===e.tooltip?e.headerTooltip:t.table.options.tooltipsHeader;o?!0===o?e.field?t.table.modules.localize.bind("columns|"+e.field,function(o){t.element.setAttribute("title",o||e.title)}):t.element.setAttribute("title",e.title):("function"==typeof o&&!1===(o=o(t.getComponent()))&&(o=""),t.element.setAttribute("title",o)):t.element.setAttribute("title","")},Column.prototype._buildHeader=function(){for(var t=this,e=t.definition;t.element.firstChild;)t.element.removeChild(t.element.firstChild);e.headerVertical&&(t.element.classList.add("tabulator-col-vertical"),"flip"===e.headerVertical&&t.element.classList.add("tabulator-col-vertical-flip")),t.contentElement=t._bindEvents(),t.contentElement=t._buildColumnHeaderContent(),t.element.appendChild(t.contentElement),t.isGroup?t._buildGroupHeader():t._buildColumnHeader(),t.setTooltip(),t.table.options.resizableColumns&&t.table.modExists("resizeColumns")&&t.table.modules.resizeColumns.initializeColumn("header",t,t.element),e.headerFilter&&t.table.modExists("filter")&&t.table.modExists("edit")&&(void 0!==e.headerFilterPlaceholder&&e.field&&t.table.modules.localize.setHeaderFilterColumnPlaceholder(e.field,e.headerFilterPlaceholder),t.table.modules.filter.initializeColumn(t)),t.table.modExists("frozenColumns")&&t.table.modules.frozenColumns.initializeColumn(t),t.table.options.movableColumns&&!t.isGroup&&t.table.modExists("moveColumn")&&t.table.modules.moveColumn.initializeColumn(t),(e.topCalc||e.bottomCalc)&&t.table.modExists("columnCalcs")&&t.table.modules.columnCalcs.initializeColumn(t),t.table.modExists("persistence")&&t.table.modules.persistence.config.columns&&t.table.modules.persistence.initializeColumn(t),t.element.addEventListener("mouseenter",function(e){t.setTooltip()})},Column.prototype._bindEvents=function(){var t,e,o,i=this,n=i.definition;"function"==typeof n.headerClick&&i.element.addEventListener("click",function(t){n.headerClick(t,i.getComponent())}),"function"==typeof n.headerDblClick&&i.element.addEventListener("dblclick",function(t){n.headerDblClick(t,i.getComponent())}),"function"==typeof n.headerContext&&i.element.addEventListener("contextmenu",function(t){n.headerContext(t,i.getComponent())}),"function"==typeof n.headerTap&&(o=!1,i.element.addEventListener("touchstart",function(t){o=!0},{passive:!0}),i.element.addEventListener("touchend",function(t){o&&n.headerTap(t,i.getComponent()),o=!1})),"function"==typeof n.headerDblTap&&(t=null,i.element.addEventListener("touchend",function(e){t?(clearTimeout(t),t=null,n.headerDblTap(e,i.getComponent())):t=setTimeout(function(){clearTimeout(t),t=null},300)})),"function"==typeof n.headerTapHold&&(e=null,i.element.addEventListener("touchstart",function(t){clearTimeout(e),e=setTimeout(function(){clearTimeout(e),e=null,o=!1,n.headerTapHold(t,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(t){clearTimeout(e),e=null})),"function"==typeof n.cellClick&&(i.cellEvents.cellClick=n.cellClick),"function"==typeof n.cellDblClick&&(i.cellEvents.cellDblClick=n.cellDblClick),"function"==typeof n.cellContext&&(i.cellEvents.cellContext=n.cellContext),"function"==typeof n.cellMouseEnter&&(i.cellEvents.cellMouseEnter=n.cellMouseEnter),"function"==typeof n.cellMouseLeave&&(i.cellEvents.cellMouseLeave=n.cellMouseLeave),"function"==typeof n.cellMouseOver&&(i.cellEvents.cellMouseOver=n.cellMouseOver),"function"==typeof n.cellMouseOut&&(i.cellEvents.cellMouseOut=n.cellMouseOut),"function"==typeof n.cellMouseMove&&(i.cellEvents.cellMouseMove=n.cellMouseMove),"function"==typeof n.cellTap&&(i.cellEvents.cellTap=n.cellTap),"function"==typeof n.cellDblTap&&(i.cellEvents.cellDblTap=n.cellDblTap),"function"==typeof n.cellTapHold&&(i.cellEvents.cellTapHold=n.cellTapHold),"function"==typeof n.cellEdited&&(i.cellEvents.cellEdited=n.cellEdited),"function"==typeof n.cellEditing&&(i.cellEvents.cellEditing=n.cellEditing),"function"==typeof n.cellEditCancelled&&(i.cellEvents.cellEditCancelled=n.cellEditCancelled)},Column.prototype._buildColumnHeader=function(){var t=this,e=t.definition,o=t.table;if(o.modExists("sort")&&o.modules.sort.initializeColumn(t,t.contentElement),(e.headerContextMenu||e.headerMenu)&&o.modExists("menu")&&o.modules.menu.initializeColumnHeader(t),o.modExists("format")&&o.modules.format.initializeColumn(t),void 0!==e.editor&&o.modExists("edit")&&o.modules.edit.initializeColumn(t),void 0!==e.validator&&o.modExists("validate")&&o.modules.validate.initializeColumn(t),o.modExists("mutator")&&o.modules.mutator.initializeColumn(t),o.modExists("accessor")&&o.modules.accessor.initializeColumn(t),_typeof(o.options.responsiveLayout)&&o.modExists("responsiveLayout")&&o.modules.responsiveLayout.initializeColumn(t),void 0!==e.visible&&(e.visible?t.show(!0):t.hide(!0)),e.cssClass){e.cssClass.split(" ").forEach(function(e){t.element.classList.add(e)})}e.field&&this.element.setAttribute("tabulator-field",e.field),t.setMinWidth(void 0===e.minWidth?t.table.options.columnMinWidth:parseInt(e.minWidth)),t.reinitializeWidth(),t.tooltip=t.definition.tooltip||!1===t.definition.tooltip?t.definition.tooltip:t.table.options.tooltips,t.hozAlign=void 0===t.definition.hozAlign?t.table.options.cellHozAlign:t.definition.hozAlign,t.vertAlign=void 0===t.definition.vertAlign?t.table.options.cellVertAlign:t.definition.vertAlign},Column.prototype._buildColumnHeaderContent=function(){var t=(this.definition,this.table,document.createElement("div"));return t.classList.add("tabulator-col-content"),this.titleElement=this._buildColumnHeaderTitle(),t.appendChild(this.titleElement),t},Column.prototype._buildColumnHeaderTitle=function(){var t=this,e=t.definition,o=t.table,i=document.createElement("div");if(i.classList.add("tabulator-col-title"),e.editableTitle){var n=document.createElement("input");n.classList.add("tabulator-title-editor"),n.addEventListener("click",function(t){t.stopPropagation(),n.focus()}),n.addEventListener("change",function(){e.title=n.value,o.options.columnTitleChanged.call(t.table,t.getComponent())}),i.appendChild(n),e.field?o.modules.localize.bind("columns|"+e.field,function(t){n.value=t||e.title||" "}):n.value=e.title||" "}else e.field?o.modules.localize.bind("columns|"+e.field,function(o){t._formatColumnHeaderTitle(i,o||e.title||" ")}):t._formatColumnHeaderTitle(i,e.title||" ");return i},Column.prototype._formatColumnHeaderTitle=function(t,e){var o,i,n,l,s,a=this;if(this.definition.titleFormatter&&this.table.modExists("format"))switch(o=this.table.modules.format.getFormatter(this.definition.titleFormatter),s=function(t){a.titleFormatterRendered=t},l={getValue:function(){return e},getElement:function(){return t}},n=this.definition.titleFormatterParams||{},n="function"==typeof n?n():n,i=o.call(this.table.modules.format,l,n,s),void 0===i?"undefined":_typeof(i)){case"object":i instanceof Node?t.appendChild(i):(t.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",i));break;case"undefined":case"null":t.innerHTML="";break;default:t.innerHTML=i}else t.innerHTML=e},Column.prototype._buildGroupHeader=function(){var t=this;if(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass){this.definition.cssClass.split(" ").forEach(function(e){t.element.classList.add(e)})}(this.definition.headerContextMenu||this.definition.headerMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeColumnHeader(this),this.element.appendChild(this.groupElement)},Column.prototype._getFlatData=function(t){return t[this.field]},Column.prototype._getNestedData=function(t){for(var e,o=t,i=this.fieldStructure,n=i.length,l=0;l-1&&this._nextVisibleColumn(t+1)},Column.prototype._nextVisibleColumn=function(t){var e=this.table.columnManager.getColumnByIndex(t);return!e||e.visible?e:this._nextVisibleColumn(t+1)},Column.prototype.prevColumn=function(){var t=this.table.columnManager.findColumnIndex(this);return t>-1&&this._prevVisibleColumn(t-1)},Column.prototype._prevVisibleColumn=function(t){var e=this.table.columnManager.getColumnByIndex(t);return!e||e.visible?e:this._prevVisibleColumn(t-1)},Column.prototype.reinitializeWidth=function(t){this.widthFixed=!1,void 0===this.definition.width||t||this.setWidth(this.definition.width),this.table.modExists("filter")&&this.table.modules.filter.hideHeaderFilterElements(),this.fitToData(),this.table.modExists("filter")&&this.table.modules.filter.showHeaderFilterElements()},Column.prototype.fitToData=function(){var t=this;this.widthFixed||(this.element.style.width="",t.cells.forEach(function(t){t.clearWidth()}));var e=this.element.offsetWidth;t.width&&this.widthFixed||(t.cells.forEach(function(t){var o=t.getWidth();o>e&&(e=o)}),e&&t.setWidthActual(e+1))},Column.prototype.updateDefinition=function(t){var e=this;return new Promise(function(o,i){var n;e.isGroup?(console.warn("Column Update Error - The updateDefintion function is only available on columns, not column groups"),i("Column Update Error - The updateDefintion function is only available on columns, not column groups")):(n=Object.assign({},e.getDefinition()),n=Object.assign(n,t),e.table.columnManager.addColumn(n,!1,e).then(function(t){n.field==e.field&&(e.field=!1),e.delete().then(function(){o(t.getComponent())}).catch(function(t){i(t)})}).catch(function(t){i(t)}))})},Column.prototype.deleteCell=function(t){var e=this.cells.indexOf(t);e>-1&&this.cells.splice(e,1)},Column.prototype.defaultOptionList=["title","field","columns","visible","align","hozAlign","vertAlign","width","minWidth","widthGrow","widthShrink","resizable","frozen","responsive","tooltip","cssClass","rowHandle","hideInHtml","print","htmlOutput","sorter","sorterParams","formatter","formatterParams","variableHeight","editable","editor","editorParams","validator","mutator","mutatorParams","mutatorData","mutatorDataParams","mutatorEdit","mutatorEditParams","mutatorClipboard","mutatorClipboardParams","accessor","accessorParams","accessorData","accessorDataParams","accessorDownload","accessorDownloadParams","accessorClipboard","accessorClipboardParams","accessorPrint","accessorPrintParams","accessorHtmlOutput","accessorHtmlOutputParams","clipboard","download","downloadTitle","topCalc","topCalcParams","topCalcFormatter","topCalcFormatterParams","bottomCalc","bottomCalcParams","bottomCalcFormatter","bottomCalcFormatterParams","cellClick","cellDblClick","cellContext","cellTap","cellDblTap","cellTapHold","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellEditing","cellEdited","cellEditCancelled","headerSort","headerSortStartingDir","headerSortTristate","headerClick","headerDblClick","headerContext","headerTap","headerDblTap","headerTapHold","headerTooltip","headerVertical","editableTitle","titleFormatter","titleFormatterParams","headerFilter","headerFilterPlaceholder","headerFilterParams","headerFilterEmptyCheck","headerFilterFunc","headerFilterFuncParams","headerFilterLiveFilter","print","headerContextMenu","headerMenu","contextMenu","formatterPrint","formatterPrintParams","formatterClipboard","formatterClipboardParams","formatterHtmlOutput","formatterHtmlOutputParams","titlePrint","titleClipboard","titleHtmlOutput","titleDownload"],Column.prototype.getComponent=function(){return this.component||(this.component=new ColumnComponent(this)),this.component};var RowManager=function(t){this.table=t,this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.heightFixer=this.createTableElement(),this.columnManager=null,this.height=0,this.firstRender=!1,this.renderMode="virtual",this.fixedHeight=!1,this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[],this.rowNumColumn=!1,this.redrawBlock=!1,this.redrawBlockRestoreConfig=!1,this.redrawBlockRederInPosition=!1};RowManager.prototype.createHolderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-tableHolder"),t.setAttribute("tabindex",0),t},RowManager.prototype.createTableElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-table"),t},RowManager.prototype.getElement=function(){return this.element},RowManager.prototype.getTableElement=function(){return this.tableElement},RowManager.prototype.getRowPosition=function(t,e){return e?this.activeRows.indexOf(t):this.rows.indexOf(t)},RowManager.prototype.setColumnManager=function(t){this.columnManager=t},RowManager.prototype.initialize=function(){var t=this;t.setRenderMode(),t.element.appendChild(t.tableElement),t.firstRender=!0,t.element.addEventListener("scroll",function(){var e=t.element.scrollLeft;t.scrollLeft!=e&&(t.columnManager.scrollHorizontal(e),t.table.options.groupBy&&t.table.modules.groupRows.scrollHeaders(e),t.table.modExists("columnCalcs")&&t.table.modules.columnCalcs.scrollHorizontal(e),t.table.options.scrollHorizontal(e)),t.scrollLeft=e}),"virtual"===this.renderMode&&t.element.addEventListener("scroll",function(){var e=t.element.scrollTop,o=t.scrollTop>e;t.scrollTop!=e?(t.scrollTop=e,t.scrollVertical(o),"scroll"==t.table.options.ajaxProgressiveLoad&&t.table.modules.ajax.nextPage(t.element.scrollHeight-t.element.clientHeight-e),t.table.options.scrollVertical(e)):t.scrollTop=e})},RowManager.prototype.findRow=function(t){var e=this;if("object"!=(void 0===t?"undefined":_typeof(t))){if(void 0===t||null===t)return!1;return e.rows.find(function(o){return o.data[e.table.options.index]==t})||!1}if(t instanceof Row)return t;if(t instanceof RowComponent)return t._getSelf()||!1;if("undefined"!=typeof HTMLElement&&t instanceof HTMLElement){return e.rows.find(function(e){return e.element===t})||!1}return!1},RowManager.prototype.getRowFromDataObject=function(t){return this.rows.find(function(e){return e.data===t})||!1},RowManager.prototype.getRowFromPosition=function(t,e){return e?this.activeRows[t]:this.rows[t]},RowManager.prototype.scrollToRow=function(t,e,o){var i,n=this,l=this.getDisplayRows().indexOf(t),s=t.getElement(),a=0;return new Promise(function(t,r){if(l>-1){if(void 0===e&&(e=n.table.options.scrollToRowPosition),void 0===o&&(o=n.table.options.scrollToRowIfVisible),"nearest"===e)switch(n.renderMode){case"classic":i=Tabulator.prototype.helpers.elOffset(s).top,e=Math.abs(n.element.scrollTop-i)>Math.abs(n.element.scrollTop+n.element.clientHeight-i)?"bottom":"top";break;case"virtual":e=Math.abs(n.vDomTop-l)>Math.abs(n.vDomBottom-l)?"bottom":"top"}if(!o&&Tabulator.prototype.helpers.elVisible(s)&&(a=Tabulator.prototype.helpers.elOffset(s).top-Tabulator.prototype.helpers.elOffset(n.element).top)>0&&a-1&&this.activeRows.splice(i,1),o>-1&&this.rows.splice(o,1),this.setActiveRows(this.activeRows),this.displayRowIterator(function(e){var o=e.indexOf(t);o>-1&&e.splice(o,1)}),e||this.reRenderInPosition(),this.regenerateRowNumbers(),this.table.options.rowDeleted.call(this.table,t.getComponent()),this.table.options.dataEdited.call(this.table,this.getData()),this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.updateGroupRows(!0):this.table.options.pagination&&this.table.modExists("page")?this.refreshActiveData(!1,!1,!0):this.table.options.pagination&&this.table.modExists("page")&&this.refreshActiveData("page")},RowManager.prototype.addRow=function(t,e,o,i){var n=this.addRowActual(t,e,o,i);return this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowAdd",n,{data:t,pos:e,index:o}),n},RowManager.prototype.addRows=function(t,e,o){var i=this,n=this,l=0,s=[];return new Promise(function(a,r){e=i.findAddRowPos(e),Array.isArray(t)||(t=[t]),l=t.length-1,(void 0===o&&e||void 0!==o&&!e)&&t.reverse(),t.forEach(function(t,i){var l=n.addRow(t,e,o,!0);s.push(l)}),i.table.options.groupBy&&i.table.modExists("groupRows")?i.table.modules.groupRows.updateGroupRows(!0):i.table.options.pagination&&i.table.modExists("page")?i.refreshActiveData(!1,!1,!0):i.reRenderInPosition(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.regenerateRowNumbers(),a(s)})},RowManager.prototype.findAddRowPos=function(t){return void 0===t&&(t=this.table.options.addRowPos),"pos"===t&&(t=!0),"bottom"===t&&(t=!1),t},RowManager.prototype.addRowActual=function(t,e,o,i){var n,l,s=t instanceof Row?t:new Row(t||{},this),a=this.findAddRowPos(e),r=-1;if(!o&&this.table.options.pagination&&"page"==this.table.options.paginationAddRow&&(l=this.getDisplayRows(),a?l.length?o=l[0]:this.activeRows.length&&(o=this.activeRows[this.activeRows.length-1],a=!1):l.length&&(o=l[l.length-1],a=!(l.length1&&(!o||o&&-1==u.indexOf(o)?a?u[0]!==s&&(o=u[0],this._moveRowInArray(s.getGroup().rows,s,o,!a)):u[u.length-1]!==s&&(o=u[u.length-1],this._moveRowInArray(s.getGroup().rows,s,o,!a)):this._moveRowInArray(s.getGroup().rows,s,o,!a))}return o&&(r=this.rows.indexOf(o)),o&&r>-1?(n=this.activeRows.indexOf(o),this.displayRowIterator(function(t){var e=t.indexOf(o);e>-1&&t.splice(a?e:e+1,0,s)}),n>-1&&this.activeRows.splice(a?n:n+1,0,s),this.rows.splice(a?r:r+1,0,s)):a?(this.displayRowIterator(function(t){t.unshift(s)}),this.activeRows.unshift(s),this.rows.unshift(s)):(this.displayRowIterator(function(t){t.push(s)}),this.activeRows.push(s),this.rows.push(s)),this.setActiveRows(this.activeRows),this.table.options.rowAdded.call(this.table,s.getComponent()),this.table.options.dataEdited.call(this.table,this.getData()),i||this.reRenderInPosition(),s},RowManager.prototype.moveRow=function(t,e,o){this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowMove",t,{posFrom:this.getRowPosition(t),posTo:this.getRowPosition(e),to:e,after:o}),this.moveRowActual(t,e,o),this.regenerateRowNumbers(),this.table.options.rowMoved.call(this.table,t.getComponent())},RowManager.prototype.moveRowActual=function(t,e,o){var i=this;if(this._moveRowInArray(this.rows,t,e,o),this._moveRowInArray(this.activeRows,t,e,o),this.displayRowIterator(function(n){i._moveRowInArray(n,t,e,o)}),this.table.options.groupBy&&this.table.modExists("groupRows")){!o&&e instanceof Group&&(e=this.table.rowManager.prevDisplayRow(t)||e);var n=e.getGroup(),l=t.getGroup();n===l?this._moveRowInArray(n.rows,t,e,o):(l&&l.removeRow(t),n.insertRow(t,e,o))}},RowManager.prototype._moveRowInArray=function(t,e,o,i){var n,l,s,a;if(e!==o&&(n=t.indexOf(e),n>-1&&(t.splice(n,1),l=t.indexOf(o),l>-1?i?t.splice(l+1,0,e):t.splice(l,0,e):t.splice(n,0,e)),t===this.getDisplayRows())){s=nn?l:n+1;for(var r=s;r<=a;r++)t[r]&&this.styleRow(t[r],r)}},RowManager.prototype.clearData=function(){this.setData([])},RowManager.prototype.getRowIndex=function(t){return this.findRowIndex(t,this.rows)},RowManager.prototype.getDisplayRowIndex=function(t){var e=this.getDisplayRows().indexOf(t);return e>-1&&e},RowManager.prototype.nextDisplayRow=function(t,e){var o=this.getDisplayRowIndex(t),i=!1;return!1!==o&&o-1)&&o},RowManager.prototype.getData=function(t,e){var o=[];return this.getRows(t).forEach(function(t){"row"==t.type&&o.push(t.getData(e||"data"))}),o},RowManager.prototype.getComponents=function(t){var e=[];return this.getRows(t).forEach(function(t){e.push(t.getComponent())}),e},RowManager.prototype.getDataCount=function(t){return this.getRows(t).length},RowManager.prototype._genRemoteRequest=function(){var t=this,e=this.table,o=e.options,i={};if(e.modExists("page")){if(o.ajaxSorting){var n=this.table.modules.sort.getSort();n.forEach(function(t){delete t.column}),i[this.table.modules.page.paginationDataSentNames.sorters]=n}if(o.ajaxFiltering){var l=this.table.modules.filter.getFilters(!0,!0);i[this.table.modules.page.paginationDataSentNames.filters]=l}this.table.modules.ajax.setParams(i,!0)}e.modules.ajax.sendRequest().then(function(e){t._setDataActual(e,!0)}).catch(function(t){})},RowManager.prototype.filterRefresh=function(){var t=this.table,e=t.options,o=this.scrollLeft;e.ajaxFiltering?"remote"==e.pagination&&t.modExists("page")?(t.modules.page.reset(!0),t.modules.page.setPage(1).then(function(){}).catch(function(){})):e.ajaxProgressiveLoad?t.modules.ajax.loadData().then(function(){}).catch(function(){}):this._genRemoteRequest():this.refreshActiveData("filter"),this.scrollHorizontal(o)},RowManager.prototype.sorterRefresh=function(t){var e=this.table,o=this.table.options,i=this.scrollLeft;o.ajaxSorting?("remote"==o.pagination||o.progressiveLoad)&&e.modExists("page")?(e.modules.page.reset(!0),e.modules.page.setPage(1).then(function(){}).catch(function(){})):o.ajaxProgressiveLoad?e.modules.ajax.loadData().then(function(){}).catch(function(){}):this._genRemoteRequest():this.refreshActiveData(t?"filter":"sort"),this.scrollHorizontal(i)},RowManager.prototype.scrollHorizontal=function(t){this.scrollLeft=t,this.element.scrollLeft=t,this.table.options.groupBy&&this.table.modules.groupRows.scrollHeaders(t),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.scrollHorizontal(t)},RowManager.prototype.refreshActiveData=function(t,e,o){var i,n=this,l=this.table,s=["all","filter","sort","display","freeze","group","tree","page"];if(this.redrawBlock)return void((!this.redrawBlockRestoreConfig||s.indexOf(t)=0))break;l=a}else if(e-s[a].getElement().offsetTop>=0)n=a;else{if(i=!0,!(o-s[a].getElement().offsetTop>=0))break;l=a}}else n=this.vDomTop,l=this.vDomBottom;return s.slice(n,l+1)},RowManager.prototype.displayRowIterator=function(t){this.displayRows.forEach(t),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length},RowManager.prototype.getRows=function(t){var e;switch(t){case"active":e=this.activeRows;break;case"display":e=this.table.rowManager.getDisplayRows();break;case"visible":e=this.getVisibleRows(!0);break;default:e=this.rows}return e},RowManager.prototype.reRenderInPosition=function(t){if("virtual"==this.getRenderMode())if(this.redrawBlock)t?t():this.redrawBlockRederInPosition=!0;else{for(var e=this.element.scrollTop,o=!1,i=!1,n=this.scrollLeft,l=this.getDisplayRows(),s=this.vDomTop;s<=this.vDomBottom;s++)if(l[s]){var a=e-l[s].getElement().offsetTop;if(!(!1===i||Math.abs(a)this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*f),"group"!==m.type&&(c=!1),i.vDomBottom++,u++}t?(i.vDomTopPad=e?i.vDomRowHeight*this.vDomTop+o:i.scrollTop-r,i.vDomBottomPad=i.vDomBottom==i.displayRowsCount-1?0:Math.max(i.vDomScrollHeight-i.vDomTopPad-a-r,0)):(this.vDomTopPad=0,i.vDomRowHeight=Math.floor((a+r)/u),i.vDomBottomPad=i.vDomRowHeight*(i.displayRowsCount-i.vDomBottom-1),i.vDomScrollHeight=r+a+i.vDomBottomPad-i.height),n.style.paddingTop=i.vDomTopPad+"px",n.style.paddingBottom=i.vDomBottomPad+"px",e&&(this.scrollTop=i.vDomTopPad+r+o-(this.element.scrollWidth>this.element.clientWidth?this.element.offsetHeight-this.element.clientHeight:0)),this.scrollTop=Math.min(this.scrollTop,this.element.scrollHeight-this.height),this.element.scrollWidth>this.element.offsetWidth&&e&&(this.scrollTop+=this.element.offsetHeight-this.element.clientHeight),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,l.scrollTop=this.scrollTop,n.style.minWidth=c?i.table.columnManager.getWidth()+"px":"",i.table.options.groupBy&&"fitDataFill"!=i.table.modules.layout.getMode()&&i.displayRowsCount==i.table.modules.groupRows.countGroups()&&(i.tableElement.style.minWidth=i.table.columnManager.getWidth())}else this.renderEmptyScroll();this.fixedHeight||this.adjustTableSize()},RowManager.prototype.scrollVertical=function(t){var e=this.scrollTop-this.vDomScrollPosTop,o=this.scrollTop-this.vDomScrollPosBottom,i=2*this.vDomWindowBuffer;if(-e>i||o>i){var n=this.scrollLeft;this._virtualRenderFill(Math.floor(this.element.scrollTop/this.element.scrollHeight*this.displayRowsCount)),this.scrollHorizontal(n)}else t?(e<0&&this._addTopRow(-e),o<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(-o):this.vDomScrollPosBottom=this.scrollTop)):(e>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(e):this.vDomScrollPosTop=this.scrollTop),o>=0&&this._addBottomRow(o))},RowManager.prototype._addTopRow=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomTop){var n=this.vDomTop-1,l=i[n],s=l.getHeight()||this.vDomRowHeight;t>=s&&(this.styleRow(l,n),o.insertBefore(l.getElement(),o.firstChild),l.initialized&&l.heightInitialized||(this.vDomTopNewRows.push(l),l.heightInitialized||l.clearCellHeight()),l.initialize(),this.vDomTopPad-=s,this.vDomTopPad<0&&(this.vDomTopPad=n*this.vDomRowHeight),n||(this.vDomTopPad=0),o.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=s,this.vDomTop--),t=-(this.scrollTop-this.vDomScrollPosTop),l.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*l.getHeight()),e=(i[this.vDomTop-1].getHeight()||this.vDomRowHeight)?this._addTopRow(t,e+1):this._quickNormalizeRowHeight(this.vDomTopNewRows)}},RowManager.prototype._removeTopRow=function(t){var e=this.tableElement,o=this.getDisplayRows()[this.vDomTop],i=o.getHeight()||this.vDomRowHeight;if(t>=i){var n=o.getElement();n.parentNode.removeChild(n),this.vDomTopPad+=i,e.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?i:i+this.vDomWindowBuffer,this.vDomTop++,t=this.scrollTop-this.vDomScrollPosTop,this._removeTopRow(t)}},RowManager.prototype._addBottomRow=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomBottom=s&&(this.styleRow(l,n),o.appendChild(l.getElement()),l.initialized&&l.heightInitialized||(this.vDomBottomNewRows.push(l),l.heightInitialized||l.clearCellHeight()),l.initialize(),this.vDomBottomPad-=s,(this.vDomBottomPad<0||n==this.displayRowsCount-1)&&(this.vDomBottomPad=0),o.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=s,this.vDomBottom++),t=this.scrollTop-this.vDomScrollPosBottom,l.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*l.getHeight()),e=(i[this.vDomBottom+1].getHeight()||this.vDomRowHeight)?this._addBottomRow(t,e+1):this._quickNormalizeRowHeight(this.vDomBottomNewRows)}},RowManager.prototype._removeBottomRow=function(t){var e=this.tableElement,o=this.getDisplayRows()[this.vDomBottom],i=o.getHeight()||this.vDomRowHeight;if(t>=i){var n=o.getElement();n.parentNode&&n.parentNode.removeChild(n),this.vDomBottomPad+=i,this.vDomBottomPad<0&&(this.vDomBottomPad=0),e.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=i,this.vDomBottom--,t=-(this.scrollTop-this.vDomScrollPosBottom),this._removeBottomRow(t)}},RowManager.prototype._quickNormalizeRowHeight=function(t){t.forEach(function(t){t.calcHeight()}),t.forEach(function(t){t.setCellHeight()}),t.length=0},RowManager.prototype.normalizeHeight=function(){this.activeRows.forEach(function(t){t.normalizeHeight()})},RowManager.prototype.adjustTableSize=function(){var t,e=this.element.clientHeight;if("virtual"===this.renderMode){var o=this.columnManager.getElement().offsetHeight+(this.table.footerManager&&!this.table.footerManager.external?this.table.footerManager.getElement().offsetHeight:0);this.fixedHeight?(this.element.style.minHeight="calc(100% - "+o+"px)",this.element.style.height="calc(100% - "+o+"px)",this.element.style.maxHeight="calc(100% - "+o+"px)"):(this.element.style.height="",this.element.style.height=this.table.element.clientHeight-o+"px",this.element.scrollTop=this.scrollTop),this.height=this.element.clientHeight,this.vDomWindowBuffer=this.table.options.virtualDomBuffer||this.height,this.fixedHeight||e==this.element.clientHeight||((t=this.table.modExists("resizeTable"))&&!this.table.modules.resizeTable.autoResize||!t)&&this.redraw()}},RowManager.prototype.reinitialize=function(){this.rows.forEach(function(t){t.reinitialize()})},RowManager.prototype.blockRedraw=function(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1},RowManager.prototype.restoreRedraw=function(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.stage,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),this.redrawBlockRestoreConfig=!1):this.redrawBlockRederInPosition&&this.reRenderInPosition(),this.redrawBlockRederInPosition=!1}, +RowManager.prototype.redraw=function(t){var e=this.scrollLeft;this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,t?this.renderTable():("classic"==this.renderMode?this.table.options.groupBy?this.refreshActiveData("group",!1,!1):this._simpleRender():(this.reRenderInPosition(),this.scrollHorizontal(e)),this.displayRowsCount||this.table.options.placeholder&&this.getElement().appendChild(this.table.options.placeholder))},RowManager.prototype.resetScroll=function(){if(this.element.scrollLeft=0,this.element.scrollTop=0,"ie"===this.table.browser){var t=document.createEvent("Event");t.initEvent("scroll",!1,!0),this.element.dispatchEvent(t)}else this.element.dispatchEvent(new Event("scroll"))};var RowComponent=function(t){this._row=t};RowComponent.prototype.getData=function(t){return this._row.getData(t)},RowComponent.prototype.getElement=function(){return this._row.getElement()},RowComponent.prototype.getCells=function(){var t=[];return this._row.getCells().forEach(function(e){t.push(e.getComponent())}),t},RowComponent.prototype.getCell=function(t){var e=this._row.getCell(t);return!!e&&e.getComponent()},RowComponent.prototype.getIndex=function(){return this._row.getData("data")[this._row.table.options.index]},RowComponent.prototype.getPosition=function(t){return this._row.table.rowManager.getRowPosition(this._row,t)},RowComponent.prototype.delete=function(){return this._row.delete()},RowComponent.prototype.scrollTo=function(){return this._row.table.rowManager.scrollToRow(this._row)},RowComponent.prototype.pageTo=function(){if(this._row.table.modExists("page",!0))return this._row.table.modules.page.setPageToRow(this._row)},RowComponent.prototype.move=function(t,e){this._row.moveToRow(t,e)},RowComponent.prototype.update=function(t){return this._row.updateData(t)},RowComponent.prototype.normalizeHeight=function(){this._row.normalizeHeight(!0)},RowComponent.prototype.select=function(){this._row.table.modules.selectRow.selectRows(this._row)},RowComponent.prototype.deselect=function(){this._row.table.modules.selectRow.deselectRows(this._row)},RowComponent.prototype.toggleSelect=function(){this._row.table.modules.selectRow.toggleRow(this._row)},RowComponent.prototype.isSelected=function(){return this._row.table.modules.selectRow.isRowSelected(this._row)},RowComponent.prototype._getSelf=function(){return this._row},RowComponent.prototype.validate=function(){return this._row.validate()},RowComponent.prototype.freeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.freezeRow(this._row)},RowComponent.prototype.unfreeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.unfreezeRow(this._row)},RowComponent.prototype.isFrozen=function(){if(this._row.table.modExists("frozenRows",!0)){return this._row.table.modules.frozenRows.rows.indexOf(this._row)>-1}return!1},RowComponent.prototype.treeCollapse=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.collapseRow(this._row)},RowComponent.prototype.treeExpand=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.expandRow(this._row)},RowComponent.prototype.treeToggle=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.toggleRow(this._row)},RowComponent.prototype.getTreeParent=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeParent(this._row)},RowComponent.prototype.getTreeChildren=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeChildren(this._row)},RowComponent.prototype.addTreeChild=function(t,e,o){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.addTreeChildRow(this._row,t,e,o)},RowComponent.prototype.reformat=function(){return this._row.reinitialize()},RowComponent.prototype.getGroup=function(){return this._row.getGroup().getComponent()},RowComponent.prototype.getTable=function(){return this._row.table},RowComponent.prototype.getNextRow=function(){var t=this._row.nextRow();return t?t.getComponent():t},RowComponent.prototype.getPrevRow=function(){var t=this._row.prevRow();return t?t.getComponent():t};var Row=function(t,e){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"row";this.table=e.table,this.parent=e,this.data={},this.type=o,this.element=this.createElement(),this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.component=null,this.setData(t),this.generateElement()};Row.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-row"),t.setAttribute("role","row"),t},Row.prototype.getElement=function(){return this.element},Row.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},Row.prototype.generateElement=function(){var t,e,o,i=this;!1!==i.table.options.selectable&&i.table.modExists("selectRow")&&i.table.modules.selectRow.initializeRow(this),!1!==i.table.options.movableRows&&i.table.modExists("moveRow")&&i.table.modules.moveRow.initializeRow(this),!1!==i.table.options.dataTree&&i.table.modExists("dataTree")&&i.table.modules.dataTree.initializeRow(this),"collapse"===i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout")&&i.table.modules.responsiveLayout.initializeRow(this),i.table.options.rowContextMenu&&this.table.modExists("menu")&&i.table.modules.menu.initializeRow(this),i.table.options.rowClick&&i.element.addEventListener("click",function(t){i.table.options.rowClick(t,i.getComponent())}),i.table.options.rowDblClick&&i.element.addEventListener("dblclick",function(t){i.table.options.rowDblClick(t,i.getComponent())}),i.table.options.rowContext&&i.element.addEventListener("contextmenu",function(t){i.table.options.rowContext(t,i.getComponent())}),i.table.options.rowMouseEnter&&i.element.addEventListener("mouseenter",function(t){i.table.options.rowMouseEnter(t,i.getComponent())}),i.table.options.rowMouseLeave&&i.element.addEventListener("mouseleave",function(t){i.table.options.rowMouseLeave(t,i.getComponent())}),i.table.options.rowMouseOver&&i.element.addEventListener("mouseover",function(t){i.table.options.rowMouseOver(t,i.getComponent())}),i.table.options.rowMouseOut&&i.element.addEventListener("mouseout",function(t){i.table.options.rowMouseOut(t,i.getComponent())}),i.table.options.rowMouseMove&&i.element.addEventListener("mousemove",function(t){i.table.options.rowMouseMove(t,i.getComponent())}),i.table.options.rowTap&&(o=!1,i.element.addEventListener("touchstart",function(t){o=!0},{passive:!0}),i.element.addEventListener("touchend",function(t){o&&i.table.options.rowTap(t,i.getComponent()),o=!1})),i.table.options.rowDblTap&&(t=null,i.element.addEventListener("touchend",function(e){t?(clearTimeout(t),t=null,i.table.options.rowDblTap(e,i.getComponent())):t=setTimeout(function(){clearTimeout(t),t=null},300)})),i.table.options.rowTapHold&&(e=null,i.element.addEventListener("touchstart",function(t){clearTimeout(e),e=setTimeout(function(){clearTimeout(e),e=null,o=!1,i.table.options.rowTapHold(t,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(t){clearTimeout(e),e=null}))},Row.prototype.generateCells=function(){this.cells=this.table.columnManager.generateCells(this)},Row.prototype.initialize=function(t){var e=this;if(!e.initialized||t){for(e.deleteCells();e.element.firstChild;)e.element.removeChild(e.element.firstChild);this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutRow(this),this.generateCells(),e.cells.forEach(function(t){e.element.appendChild(t.getElement()),t.cellRendered()}),t&&e.normalizeHeight(),e.table.options.dataTree&&e.table.modExists("dataTree")&&e.table.modules.dataTree.layoutRow(this),"collapse"===e.table.options.responsiveLayout&&e.table.modExists("responsiveLayout")&&e.table.modules.responsiveLayout.layoutRow(this),e.table.options.rowFormatter&&e.table.options.rowFormatter(e.getComponent()),e.table.options.resizableRows&&e.table.modExists("resizeRows")&&e.table.modules.resizeRows.initializeRow(e),e.initialized=!0}},Row.prototype.reinitializeHeight=function(){this.heightInitialized=!1,null!==this.element.offsetParent&&this.normalizeHeight(!0)},Row.prototype.reinitialize=function(){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),null!==this.element.offsetParent&&this.initialize(!0)},Row.prototype.calcHeight=function(t){var e=0,o=this.table.options.resizableRows?this.element.clientHeight:0;this.cells.forEach(function(t){var o=t.getHeight();o>e&&(e=o)}),this.height=t?Math.max(e,o):this.manualHeight?this.height:Math.max(e,o),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight},Row.prototype.setCellHeight=function(){this.cells.forEach(function(t){t.setHeight()}),this.heightInitialized=!0},Row.prototype.clearCellHeight=function(){this.cells.forEach(function(t){t.clearHeight()})},Row.prototype.normalizeHeight=function(t){t&&this.clearCellHeight(),this.calcHeight(t),this.setCellHeight()},Row.prototype.setHeight=function(t,e){(this.height!=t||e)&&(this.manualHeight=!0,this.height=t,this.heightStyled=t?t+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight)},Row.prototype.getHeight=function(){return this.outerHeight},Row.prototype.getWidth=function(){return this.element.offsetWidth},Row.prototype.deleteCell=function(t){var e=this.cells.indexOf(t);e>-1&&this.cells.splice(e,1)},Row.prototype.setData=function(t){this.table.modExists("mutator")&&(t=this.table.modules.mutator.transformRow(t,"data")),this.data=t,this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchRow(this)},Row.prototype.updateData=function(t){var e,o=this,i=Tabulator.prototype.helpers.elVisible(this.element),n={};return new Promise(function(l,s){"string"==typeof t&&(t=JSON.parse(t)),o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.block(),o.table.modExists("mutator")?(n=Object.assign(n,o.data),n=Object.assign(n,t),e=o.table.modules.mutator.transformRow(n,"data",t)):e=t;for(var a in e)o.data[a]=e[a];o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.unblock();for(var a in t){o.table.columnManager.getColumnsByFieldRoot(a).forEach(function(t){var n=o.getCell(t.getField());if(n){var l=t.getFieldValue(e);n.getValue()!=l&&(n.setValueProcessData(l),i&&n.cellRendered())}})}i?(o.normalizeHeight(!0),o.table.options.rowFormatter&&o.table.options.rowFormatter(o.getComponent())):(o.initialized=!1,o.height=0,o.heightStyled=""),!1!==o.table.options.dataTree&&o.table.modExists("dataTree")&&o.table.modules.dataTree.redrawNeeded(t)&&(o.table.modules.dataTree.initializeRow(o),o.table.modules.dataTree.layoutRow(o),o.table.rowManager.refreshActiveData("tree",!1,!0)),o.table.options.rowUpdated.call(o.table,o.getComponent()),l()})},Row.prototype.getData=function(t){var e=this;return t?e.table.modExists("accessor")?e.table.modules.accessor.transformRow(e.data,t):void 0:this.data},Row.prototype.getCell=function(t){return t=this.table.columnManager.findColumn(t),this.cells.find(function(e){return e.column===t})},Row.prototype.getCellIndex=function(t){return this.cells.findIndex(function(e){return e===t})},Row.prototype.findNextEditableCell=function(t){var e=!1;if(t0)for(var o=t-1;o>=0;o--){var i=this.cells[o],n=!0;if(i.column.modules.edit&&Tabulator.prototype.helpers.elVisible(i.getElement())&&("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n)){e=i;break}}return e},Row.prototype.getCells=function(){return this.cells},Row.prototype.nextRow=function(){return this.table.rowManager.nextDisplayRow(this,!0)||!1},Row.prototype.prevRow=function(){return this.table.rowManager.prevDisplayRow(this,!0)||!1},Row.prototype.moveToRow=function(t,e){var o=this.table.rowManager.findRow(t);o?(this.table.rowManager.moveRowActual(this,o,!e),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",t)},Row.prototype.validate=function(){var t=[];return this.cells.forEach(function(e){e.validate()||t.push(e.getComponent())}),!t.length||t},Row.prototype.delete=function(){var t=this;return new Promise(function(e,o){var i,n;t.table.options.history&&t.table.modExists("history")&&(t.table.options.groupBy&&t.table.modExists("groupRows")?(n=t.getGroup().rows,(i=n.indexOf(t))&&(i=n[i-1])):(i=t.table.rowManager.getRowIndex(t))&&(i=t.table.rowManager.rows[i-1]),t.table.modules.history.action("rowDelete",t,{data:t.getData(),pos:!i,index:i})),t.deleteActual(),e()})},Row.prototype.deleteActual=function(t){this.table.rowManager.getRowIndex(this);this.table.modExists("selectRow")&&this.table.modules.selectRow._deselectRow(this,!0),this.table.modExists("edit")&&this.table.modules.edit.currentCell.row===this&&this.table.modules.edit.cancelEdit(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0),this.modules.group&&this.modules.group.removeRow(this),this.table.rowManager.deleteRow(this,t),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.rowDelete(this),this.table.modExists("columnCalcs")&&(this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.columnCalcs.recalcRowGroup(this):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows))},Row.prototype.deleteCells=function(){for(var t=this.cells.length,e=0;e-1?(this.browser="ie",this.browserSlow=!0):t.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):t.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4))},Tabulator.prototype.blockRedraw=function(){return this.rowManager.blockRedraw()},Tabulator.prototype.restoreRedraw=function(){return this.rowManager.restoreRedraw()},Tabulator.prototype.setDataFromLocalFile=function(t){var e=this;return new Promise(function(o,i){var n=document.createElement("input");n.type="file",n.accept=t||".json,application/json",n.addEventListener("change",function(t){var l,s=n.files[0],a=new FileReader;a.readAsText(s),a.onload=function(t){try{l=JSON.parse(a.result)}catch(t){return console.warn("File Load Error - File contents is invalid JSON",t),void i(t)}e._setData(l).then(function(t){o(t)}).catch(function(t){o(t)})},a.onerror=function(t){console.warn("File Load Error - Unable to read file"),i()}}),n.click()})},Tabulator.prototype.setData=function(t,e,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(t,e,o,!1,!0)},Tabulator.prototype._setData=function(t,e,o,i,n){var l=this;return"string"!=typeof t?t?l.rowManager.setData(t,i,n):l.modExists("ajax")&&(l.modules.ajax.getUrl||l.options.ajaxURLGenerator)?"remote"==l.options.pagination&&l.modExists("page",!0)?(l.modules.page.reset(!0,!0),l.modules.page.setPage(1)):l.modules.ajax.loadData(i,n):l.rowManager.setData([],i,n):0==t.indexOf("{")||0==t.indexOf("[")?l.rowManager.setData(JSON.parse(t),i,n):l.modExists("ajax",!0)?(e&&l.modules.ajax.setParams(e),o&&l.modules.ajax.setConfig(o),l.modules.ajax.setUrl(t),"remote"==l.options.pagination&&l.modExists("page",!0)?(l.modules.page.reset(!0,!0),l.modules.page.setPage(1)):l.modules.ajax.loadData(i,n)):void 0},Tabulator.prototype.clearData=function(){this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this.rowManager.clearData()},Tabulator.prototype.getData=function(t){return!0===t&&(console.warn("passing a boolean to the getData function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getData(t)},Tabulator.prototype.getDataCount=function(t){return!0===t&&(console.warn("passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getDataCount(t)},Tabulator.prototype.searchRows=function(t,e,o){if(this.modExists("filter",!0))return this.modules.filter.search("rows",t,e,o)},Tabulator.prototype.searchData=function(t,e,o){if(this.modExists("filter",!0))return this.modules.filter.search("data",t,e,o)},Tabulator.prototype.getHtml=function(t,e,o){if(this.modExists("export",!0))return this.modules.export.getHtml(t,e,o)},Tabulator.prototype.print=function(t,e,o){if(this.modExists("print",!0))return this.modules.print.printFullscreen(t,e,o)},Tabulator.prototype.getAjaxUrl=function(){if(this.modExists("ajax",!0))return this.modules.ajax.getUrl()},Tabulator.prototype.replaceData=function(t,e,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(t,e,o,!0)},Tabulator.prototype.updateData=function(t){var e=this,o=this,i=0;return new Promise(function(n,l){e.modExists("ajax")&&e.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?t.forEach(function(t){var e=o.rowManager.findRow(t[o.options.index]);e&&(i++,e.updateData(t).then(function(){--i||n()}))}):(console.warn("Update Error - No data provided"),l("Update Error - No data provided"))})},Tabulator.prototype.addData=function(t,e,o){var i=this;return new Promise(function(n,l){i.modExists("ajax")&&i.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?i.rowManager.addRows(t,e,o).then(function(t){var e=[];t.forEach(function(t){e.push(t.getComponent())}),n(e)}):(console.warn("Update Error - No data provided"),l("Update Error - No data provided"))})},Tabulator.prototype.updateOrAddData=function(t){var e=this,o=this,i=[],n=0;return new Promise(function(l,s){e.modExists("ajax")&&e.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?t.forEach(function(t){var e=o.rowManager.findRow(t[o.options.index]);n++,e?e.updateData(t).then(function(){n--,i.push(e.getComponent()),n||l(i)}):o.rowManager.addRows(t).then(function(t){n--,i.push(t[0].getComponent()),n||l(i)})}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})},Tabulator.prototype.getRow=function(t){var e=this.rowManager.findRow(t);return e?e.getComponent():(console.warn("Find Error - No matching row found:",t),!1)},Tabulator.prototype.getRowFromPosition=function(t,e){var o=this.rowManager.getRowFromPosition(t,e);return o?o.getComponent():(console.warn("Find Error - No matching row found:",t),!1)},Tabulator.prototype.deleteRow=function(t){var e=this;return new Promise(function(o,i){function n(){++s==t.length&&a&&(l.rowManager.reRenderInPosition(),o())}var l=e,s=0,a=0,r=[];Array.isArray(t)||(t=[t]),t.forEach(function(t){var o=e.rowManager.findRow(t,!0);o?r.push(o):(console.warn("Delete Error - No matching row found:",t),i("Delete Error - No matching row found"),n())}),r.sort(function(t,o){return e.rowManager.rows.indexOf(t)>e.rowManager.rows.indexOf(o)?1:-1}),r.forEach(function(t){t.delete().then(function(){a++,n()}).catch(function(t){n(),i(t)})})})},Tabulator.prototype.addRow=function(t,e,o){var i=this;return new Promise(function(n,l){"string"==typeof t&&(t=JSON.parse(t)),i.rowManager.addRows(t,e,o).then(function(t){i.modExists("columnCalcs")&&i.modules.columnCalcs.recalc(i.rowManager.activeRows),n(t[0].getComponent())})})},Tabulator.prototype.updateOrAddRow=function(t,e){var o=this;return new Promise(function(i,n){var l=o.rowManager.findRow(t);"string"==typeof e&&(e=JSON.parse(e)),l?l.updateData(e).then(function(){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(l.getComponent())}).catch(function(t){n(t)}):l=o.rowManager.addRows(e).then(function(t){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(t[0].getComponent())}).catch(function(t){n(t)})})},Tabulator.prototype.updateRow=function(t,e){var o=this;return new Promise(function(i,n){var l=o.rowManager.findRow(t);"string"==typeof e&&(e=JSON.parse(e)),l?l.updateData(e).then(function(){i(l.getComponent())}).catch(function(t){n(t)}):(console.warn("Update Error - No matching row found:",t),n("Update Error - No matching row found"))})},Tabulator.prototype.scrollToRow=function(t,e,o){var i=this;return new Promise(function(n,l){var s=i.rowManager.findRow(t);s?i.rowManager.scrollToRow(s,e,o).then(function(){n()}).catch(function(t){l(t)}):(console.warn("Scroll Error - No matching row found:",t),l("Scroll Error - No matching row found"))})},Tabulator.prototype.moveRow=function(t,e,o){var i=this.rowManager.findRow(t);i?i.moveToRow(e,o):console.warn("Move Error - No matching row found:",t)},Tabulator.prototype.getRows=function(t){return!0===t&&(console.warn("passing a boolean to the getRows function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getComponents(t)},Tabulator.prototype.getRowPosition=function(t,e){var o=this.rowManager.findRow(t);return o?this.rowManager.getRowPosition(o,e):(console.warn("Position Error - No matching row found:",t),!1)},Tabulator.prototype.copyToClipboard=function(t){this.modExists("clipboard",!0)&&this.modules.clipboard.copy(t)},Tabulator.prototype.setColumns=function(t){this.columnManager.setColumns(t)},Tabulator.prototype.getColumns=function(t){return this.columnManager.getComponents(t)},Tabulator.prototype.getColumn=function(t){var e=this.columnManager.findColumn(t);return e?e.getComponent():(console.warn("Find Error - No matching column found:",t),!1)},Tabulator.prototype.getColumnDefinitions=function(){return this.columnManager.getDefinitionTree()},Tabulator.prototype.getColumnLayout=function(){if(this.modExists("persistence",!0))return this.modules.persistence.parseColumns(this.columnManager.getColumns())},Tabulator.prototype.setColumnLayout=function(t){return!!this.modExists("persistence",!0)&&(this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns,t)),!0)},Tabulator.prototype.showColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Show Error - No matching column found:",t),!1;e.show(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},Tabulator.prototype.hideColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Hide Error - No matching column found:",t),!1;e.hide(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},Tabulator.prototype.toggleColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Visibility Toggle Error - No matching column found:",t),!1;e.visible?e.hide():e.show()},Tabulator.prototype.addColumn=function(t,e,o){var i=this;return new Promise(function(n,l){var s=i.columnManager.findColumn(o);i.columnManager.addColumn(t,e,s).then(function(t){n(t.getComponent())}).catch(function(t){l(t)})})},Tabulator.prototype.deleteColumn=function(t){var e=this;return new Promise(function(o,i){var n=e.columnManager.findColumn(t);n?n.delete().then(function(){o()}).catch(function(t){i(t)}):(console.warn("Column Delete Error - No matching column found:",t),i())})},Tabulator.prototype.updateColumnDefinition=function(t,e){var o=this;return new Promise(function(i,n){var l=o.columnManager.findColumn(t);l?l.updateDefinition(e).then(function(t){i(t)}).catch(function(t){n(t)}):(console.warn("Column Update Error - No matching column found:",t),n())})},Tabulator.prototype.moveColumn=function(t,e,o){var i=this.columnManager.findColumn(t),n=this.columnManager.findColumn(e);i?n?this.columnManager.moveColumn(i,n,o):console.warn("Move Error - No matching column found:",n):console.warn("Move Error - No matching column found:",t)},Tabulator.prototype.scrollToColumn=function(t,e,o){var i=this;return new Promise(function(n,l){var s=i.columnManager.findColumn(t);s?i.columnManager.scrollToColumn(s,e,o).then(function(){n()}).catch(function(t){l(t)}):(console.warn("Scroll Error - No matching column found:",t),l("Scroll Error - No matching column found"))})},Tabulator.prototype.setLocale=function(t){this.modules.localize.setLocale(t)},Tabulator.prototype.getLocale=function(){return this.modules.localize.getLocale()},Tabulator.prototype.getLang=function(t){return this.modules.localize.getLang(t)},Tabulator.prototype.redraw=function(t){this.columnManager.redraw(t),this.rowManager.redraw(t)},Tabulator.prototype.setHeight=function(t){"classic"!==this.rowManager.renderMode?(this.options.height=isNaN(t)?t:t+"px",this.element.style.height=this.options.height,this.rowManager.setRenderMode(),this.rowManager.redraw()):console.warn("setHeight function is not available in classic render mode")},Tabulator.prototype.setSort=function(t,e){this.modExists("sort",!0)&&(this.modules.sort.setSort(t,e),this.rowManager.sorterRefresh())},Tabulator.prototype.getSorters=function(){if(this.modExists("sort",!0))return this.modules.sort.getSort()},Tabulator.prototype.clearSort=function(){this.modExists("sort",!0)&&(this.modules.sort.clear(),this.rowManager.sorterRefresh())},Tabulator.prototype.setFilter=function(t,e,o,i){this.modExists("filter",!0)&&(this.modules.filter.setFilter(t,e,o,i),this.rowManager.filterRefresh())},Tabulator.prototype.addFilter=function(t,e,o,i){this.modExists("filter",!0)&&(this.modules.filter.addFilter(t,e,o,i),this.rowManager.filterRefresh())},Tabulator.prototype.getFilters=function(t){if(this.modExists("filter",!0))return this.modules.filter.getFilters(t)},Tabulator.prototype.setHeaderFilterFocus=function(t){if(this.modExists("filter",!0)){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Filter Focus Error - No matching column found:",t),!1;this.modules.filter.setHeaderFilterFocus(e)}},Tabulator.prototype.getHeaderFilterValue=function(t){if(this.modExists("filter",!0)){var e=this.columnManager.findColumn(t);if(e)return this.modules.filter.getHeaderFilterValue(e);console.warn("Column Filter Error - No matching column found:",t)}},Tabulator.prototype.setHeaderFilterValue=function(t,e){if(this.modExists("filter",!0)){var o=this.columnManager.findColumn(t);if(!o)return console.warn("Column Filter Error - No matching column found:",t),!1;this.modules.filter.setHeaderFilterValue(o,e)}},Tabulator.prototype.getHeaderFilters=function(){if(this.modExists("filter",!0))return this.modules.filter.getHeaderFilters()},Tabulator.prototype.removeFilter=function(t,e,o){this.modExists("filter",!0)&&(this.modules.filter.removeFilter(t,e,o),this.rowManager.filterRefresh())},Tabulator.prototype.clearFilter=function(t){this.modExists("filter",!0)&&(this.modules.filter.clearFilter(t),this.rowManager.filterRefresh())},Tabulator.prototype.clearHeaderFilter=function(){this.modExists("filter",!0)&&(this.modules.filter.clearHeaderFilter(),this.rowManager.filterRefresh())},Tabulator.prototype.selectRow=function(t){this.modExists("selectRow",!0)&&(!0===t&&(console.warn("passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'"),t="active"),this.modules.selectRow.selectRows(t))},Tabulator.prototype.deselectRow=function(t){this.modExists("selectRow",!0)&&this.modules.selectRow.deselectRows(t)},Tabulator.prototype.toggleSelectRow=function(t){this.modExists("selectRow",!0)&&this.modules.selectRow.toggleRow(t)},Tabulator.prototype.getSelectedRows=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedRows()},Tabulator.prototype.getSelectedData=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedData()},Tabulator.prototype.getInvalidCells=function(){if(this.modExists("validate",!0))return this.modules.validate.getInvalidCells()},Tabulator.prototype.clearCellValidation=function(t){var e=this;this.modExists("validate",!0)&&(t||(t=this.modules.validate.getInvalidCells()),Array.isArray(t)||(t=[t]),t.forEach(function(t){e.modules.validate.clearValidation(t._getSelf())}))},Tabulator.prototype.validate=function(t){var e=[];return this.rowManager.rows.forEach(function(t){var o=t.validate();!0!==o&&(e=e.concat(o))}),!e.length||e},Tabulator.prototype.setMaxPage=function(t){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setMaxPage(t)},Tabulator.prototype.setPage=function(t){return this.options.pagination&&this.modExists("page")?this.modules.page.setPage(t):new Promise(function(t,e){e()})},Tabulator.prototype.setPageToRow=function(t){var e=this;return new Promise(function(o,i){e.options.pagination&&e.modExists("page")?(t=e.rowManager.findRow(t),t?e.modules.page.setPageToRow(t).then(function(){o()}).catch(function(){i()}):i()):i()})},Tabulator.prototype.setPageSize=function(t){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setPageSize(t),this.modules.page.setPage(1).then(function(){}).catch(function(){})},Tabulator.prototype.getPageSize=function(){if(this.options.pagination&&this.modExists("page",!0))return this.modules.page.getPageSize()},Tabulator.prototype.previousPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.previousPage()},Tabulator.prototype.nextPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.nextPage()},Tabulator.prototype.getPage=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPage()},Tabulator.prototype.getPageMax=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPageMax()},Tabulator.prototype.setGroupBy=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupBy=t,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")},Tabulator.prototype.setGroupStartOpen=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupStartOpen=t,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},Tabulator.prototype.setGroupHeader=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupHeader=t,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},Tabulator.prototype.getGroups=function(t){return!!this.modExists("groupRows",!0)&&this.modules.groupRows.getGroups(!0)},Tabulator.prototype.getGroupedData=function(){if(this.modExists("groupRows",!0))return this.options.groupBy?this.modules.groupRows.getGroupedData():this.getData()},Tabulator.prototype.getEditedCells=function(){if(this.modExists("edit",!0))return this.modules.edit.getEditedCells()},Tabulator.prototype.clearCellEdited=function(t){var e=this;this.modExists("edit",!0)&&(t||(t=this.modules.edit.getEditedCells()),Array.isArray(t)||(t=[t]),t.forEach(function(t){e.modules.edit.clearEdited(t._getSelf())}))},Tabulator.prototype.getCalcResults=function(){return!!this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.getResults()},Tabulator.prototype.recalc=function(){this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.recalcAll(this.rowManager.activeRows)},Tabulator.prototype.navigatePrev=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&t.nav().prev()},Tabulator.prototype.navigateNext=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&t.nav().next()},Tabulator.prototype.navigateLeft=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().left())},Tabulator.prototype.navigateRight=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().right())},Tabulator.prototype.navigateUp=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().up())},Tabulator.prototype.navigateDown=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().down())},Tabulator.prototype.undo=function(){ +return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.undo()},Tabulator.prototype.redo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.redo()},Tabulator.prototype.getHistoryUndoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryUndoSize()},Tabulator.prototype.getHistoryRedoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryRedoSize()},Tabulator.prototype.download=function(t,e,o,i){this.modExists("download",!0)&&this.modules.download.download(t,e,o,i)},Tabulator.prototype.downloadToTab=function(t,e,o,i){this.modExists("download",!0)&&this.modules.download.download(t,e,o,i,!0)},Tabulator.prototype.tableComms=function(t,e,o,i){this.modules.comms.receive(t,e,o,i)},Tabulator.prototype.moduleBindings={},Tabulator.prototype.extendModule=function(t,e,o){if(Tabulator.prototype.moduleBindings[t]){var i=Tabulator.prototype.moduleBindings[t].prototype[e];if(i)if("object"==(void 0===o?"undefined":_typeof(o)))for(var n in o)i[n]=o[n];else console.warn("Module Error - Invalid value type, it must be an object");else console.warn("Module Error - property does not exist:",e)}else console.warn("Module Error - module does not exist:",t)},Tabulator.prototype.registerModule=function(t,e){Tabulator.prototype.moduleBindings[t]=e},Tabulator.prototype.bindModules=function(){this.modules={};for(var t in Tabulator.prototype.moduleBindings)this.modules[t]=new Tabulator.prototype.moduleBindings[t](this)},Tabulator.prototype.modExists=function(t,e){return!!this.modules[t]||(e&&console.error("Tabulator Module Not Installed: "+t),!1)},Tabulator.prototype.helpers={elVisible:function(t){return!(t.offsetWidth<=0&&t.offsetHeight<=0)},elOffset:function(t){var e=t.getBoundingClientRect();return{top:e.top+window.pageYOffset-document.documentElement.clientTop,left:e.left+window.pageXOffset-document.documentElement.clientLeft}},deepClone:function(t){var e=Array.isArray(t)?[]:{};for(var o in t)null!=t[o]&&"object"===_typeof(t[o])?t[o]instanceof Date?e[o]=new Date(t[o]):e[o]=this.deepClone(t[o]):e[o]=t[o];return e}},Tabulator.prototype.comms={tables:[],register:function(t){Tabulator.prototype.comms.tables.push(t)},deregister:function(t){var e=Tabulator.prototype.comms.tables.indexOf(t);e>-1&&Tabulator.prototype.comms.tables.splice(e,1)},lookupTable:function(t,e){var o,i,n=[];if("string"==typeof t){if(o=document.querySelectorAll(t),o.length)for(var l=0;l0?l.setWidth(n):l.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitColumns:function(t){function e(t){return"string"==typeof t?t.indexOf("%")>-1?n/100*parseInt(t):parseInt(t):t}function o(t,i,n,l){function s(t){return n*(t.column.definition.widthGrow||1)}function a(t){return e(t.width)-n*(t.column.definition.widthShrink||0)}var r=[],u=0,c=0,h=0,d=0,p=0,m=[];return t.forEach(function(t,e){var o=l?a(t):s(t);t.column.minWidth>=o?r.push(t):(m.push(t),p+=l?t.column.definition.widthShrink||1:t.column.definition.widthGrow||1)}),r.length?(r.forEach(function(t){u+=l?t.width-t.column.minWidth:t.column.minWidth,t.width=t.column.minWidth}),c=i-u,h=p?Math.floor(c/p):c,d=c-h*p,d+=o(m,c,h,l)):(d=p?i-Math.floor(i/p)*p:i,m.forEach(function(t){t.width=l?a(t):s(t)})),d}var i=this,n=i.table.element.clientWidth,l=0,s=0,a=0,r=0,u=[],c=[],h=0,d=0,p=0;this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(n-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),t.forEach(function(t){var o,i,n;t.visible&&(o=t.definition.width,i=parseInt(t.minWidth),o?(n=e(o),l+=n>i?n:i,t.definition.widthShrink&&(c.push({column:t,width:n>i?n:i}),h+=t.definition.widthShrink)):(u.push({column:t,width:0}),a+=t.definition.widthGrow||1))}),s=n-l,r=Math.floor(s/a);var p=o(u,s,r,!1);u.length&&p>0&&(u[u.length-1].width+=+p),u.forEach(function(t){s-=t.width}),d=Math.abs(p)+s,d>0&&h&&(p=o(c,d,Math.floor(d/h),!0)),c.length&&(c[c.length-1].width-=p),u.forEach(function(t){t.column.setWidth(t.width)}),c.forEach(function(t){t.column.setWidth(t.width)})}},Tabulator.prototype.registerModule("layout",Layout);var Localize=function(t){this.table=t,this.locale="default",this.lang=!1,this.bindings={}};Localize.prototype.setHeaderFilterPlaceholder=function(t){this.langs.default.headerFilters.default=t},Localize.prototype.setHeaderFilterColumnPlaceholder=function(t,e){this.langs.default.headerFilters.columns[t]=e,this.lang&&!this.lang.headerFilters.columns[t]&&(this.lang.headerFilters.columns[t]=e)},Localize.prototype.installLang=function(t,e){this.langs[t]?this._setLangProp(this.langs[t],e):this.langs[t]=e},Localize.prototype._setLangProp=function(t,e){for(var o in e)t[o]&&"object"==_typeof(t[o])?this._setLangProp(t[o],e[o]):t[o]=e[o]},Localize.prototype.setLocale=function(t){function e(t,o){for(var i in t)"object"==_typeof(t[i])?(o[i]||(o[i]={}),e(t[i],o[i])):o[i]=t[i]}var o=this;if(t=t||"default",!0===t&&navigator.language&&(t=navigator.language.toLowerCase()),t&&!o.langs[t]){var i=t.split("-")[0];o.langs[i]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",t,i),t=i):(console.warn("Localization Error - Matching locale not found, using default: ",t),t="default")}o.locale=t,o.lang=Tabulator.prototype.helpers.deepClone(o.langs.default||{}),"default"!=t&&e(o.langs[t],o.lang),o.table.options.localized.call(o.table,o.locale,o.lang),o._executeBindings()},Localize.prototype.getLocale=function(t){return self.locale},Localize.prototype.getLang=function(t){return t?this.langs[t]:this.lang},Localize.prototype.getText=function(t,e){var t=e?t+"|"+e:t,o=t.split("|");return this._getLangElement(o,this.locale)||""},Localize.prototype._getLangElement=function(t,e){var o=this,i=o.lang;return t.forEach(function(t){var e;i&&(e=i[t],i=void 0!==e&&e)}),i},Localize.prototype.bind=function(t,e){this.bindings[t]||(this.bindings[t]=[]),this.bindings[t].push(e),e(this.getText(t),this.lang)},Localize.prototype._executeBindings=function(){var t=this;for(var e in t.bindings)!function(e){t.bindings[e].forEach(function(o){o(t.getText(e),t.lang)})}(e)},Localize.prototype.langs={default:{groups:{item:"item",items:"items"},columns:{},ajax:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All"},headerFilters:{default:"filter column...",columns:{}}}},Tabulator.prototype.registerModule("localize",Localize);var Comms=function(t){this.table=t};Comms.prototype.getConnections=function(t){var e,o=this,i=[];return e=Tabulator.prototype.comms.lookupTable(t),e.forEach(function(t){o.table!==t&&i.push(t)}),i},Comms.prototype.send=function(t,e,o,i){var n=this,l=this.getConnections(t);l.forEach(function(t){t.tableComms(n.table.element,e,o,i)}),!l.length&&t&&console.warn("Table Connection Error - No tables matching selector found",t)},Comms.prototype.receive=function(t,e,o,i){if(this.table.modExists(e))return this.table.modules[e].commsReceived(t,o,i);console.warn("Inter-table Comms Error - no such module:",e)},Tabulator.prototype.registerModule("comms",Comms); \ No newline at end of file diff --git a/app/static/vendors/tinymce/changelog.txt b/app/static/vendors/tinymce/changelog.txt new file mode 100644 index 0000000..6aa1bb4 --- /dev/null +++ b/app/static/vendors/tinymce/changelog.txt @@ -0,0 +1,1467 @@ +Version 5.1.3 (2019-12-04) + Fixed sticky toolbar not undocking when fullscreen mode is activated #TINY-4390 + Fixed the "Current Window" target not applying when updating links using the link dialog #TINY-4063 + Fixed disabled menu items not highlighting when focused #TINY-4339 + Fixed touch events passing through dialog collection items to the content underneath on Android devices #TINY-4431 + Fixed keyboard navigation of the Help dialog's Keyboard Navigation tab #TINY-4391 + Fixed search and replace dialog disappearing when finding offscreen matches on iOS devices #TINY-4350 + Fixed performance issues where sticky toolbar was jumping while scrolling on slower browsers #TINY-4475 +Version 5.1.2 (2019-11-19) + Fixed desktop touch devices using `mobile` configuration overrides #TINY-4345 + Fixed unable to disable the new scrolling toolbar feature #TINY-4345 + Fixed touch events passing through any pop-up items to the content underneath on Android devices #TINY-4367 + Fixed the table selector handles throwing JavaScript exceptions for non-table selections #TINY-4338 + Fixed `cut` operations not removing selected content on Android devices when the `paste` plugin is enabled #TINY-4362 + Fixed inline toolbar not constrained to the window width by default #TINY-4314 + Fixed context toolbar split button chevrons pointing right when they should be pointing down #TINY-4257 + Fixed unable to access the dialog footer in tabbed dialogs on small screens #TINY-4360 + Fixed mobile table selectors were hard to select with touch by increasing the size #TINY-4366 + Fixed mobile table selectors moving when moving outside the editor #TINY-4366 + Fixed inline toolbars collapsing when using sliding toolbars #TINY-4389 + Fixed block textpatterns not treating NBSPs as spaces #TINY-4378 + Fixed backspace not merging blocks when the last element in the preceding block was a `contenteditable="false"` element #TINY-4235 + Fixed toolbar buttons that only contain text labels overlapping on mobile devices #TINY-4395 + Fixed quickbars quickimage picker not working on mobile #TINY-4377 + Fixed fullscreen not resizing in an iOS WKWebView component #TINY-4413 +Version 5.1.1 (2019-10-28) + Fixed font formats containing spaces being wrapped in `"` entities instead of single quotes #TINY-4275 + Fixed alert and confirm dialogs losing focus when clicked #TINY-4248 + Fixed clicking outside a modal dialog focusing on the document body #TINY-4249 + Fixed the context toolbar not hiding when scrolled out of view #TINY-4265 +Version 5.1.0 (2019-10-17) + Added touch selector handles for table selections on touch devices #TINY-4097 + Added border width field to Table Cell dialog #TINY-4028 + Added touch event listener to media plugin to make embeds playable #TINY-4093 + Added oxide styling options to notifications and tweaked the default variables #TINY-4153 + Added additional padding to split button chevrons on touch devices, to make them easier to interact with #TINY-4223 + Added new platform detection functions to `Env` and deprecated older detection properties #TINY-4184 + Added `inputMode` config field to specify inputmode attribute of `input` dialog components #TINY-4062 + Added new `inputMode` property to relevant plugins/dialogs #TINY-4102 + Added new `toolbar_sticky` setting to allow the iframe menubar/toolbar to stick to the top of the window when scrolling #TINY-3982 + Changed default setting for `toolbar_drawer` to `floating` #TINY-3634 + Changed mobile phones to use the `silver` theme by default #TINY-3634 + Changed some editor settings to default to `false` on touch devices: + - `menubar`(phones only) #TINY-4077 + - `table_grid` #TINY-4075 + - `resize` #TINY-4157 + - `object_resizing` #TINY-4157 + Changed toolbars and context toolbars to sidescroll on mobile #TINY-3894 #TINY-4107 + Changed context menus to render as horizontal menus on touch devices #TINY-4107 + Changed the editor to use the `VisualViewport` API of the browser where possible #TINY-4078 + Changed visualblocks toolbar button icon and renamed `paragraph` icon to `visualchars` #TINY-4074 + Changed Oxide default for `@toolbar-button-chevron-color` to follow toolbar button icon color #TINY-4153 + Changed the `urlinput` dialog component to use the `url` type attribute #TINY-4102 + Fixed Safari desktop visual viewport fires resize on fullscreen breaking the restore function #TINY-3976 + Fixed scroll issues on mobile devices #TINY-3976 + Fixed context toolbar unable to refresh position on iOS12 #TINY-4107 + Fixed ctrl+left click not opening links on readonly mode and the preview dialog #TINY-4138 + Fixed Slider UI component not firing `onChange` event on touch devices #TINY-4092 + Fixed notifications overlapping instead of stacking #TINY-3478 + Fixed inline dialogs positioning incorrectly when the page is scrolled #TINY-4018 + Fixed inline dialogs and menus not repositioning when resizing #TINY-3227 + Fixed inline toolbar incorrectly stretching to the full width when a width value was provided #TINY-4066 + Fixed menu chevrons color to follow the menu text color #TINY-4153 + Fixed table menu selection grid from staying black when using dark skins, now follows border color #TINY-4153 + Fixed Oxide using the wrong text color variable for menubar button focused state #TINY-4146 + Fixed the autoresize plugin not keeping the selection in view when resizing #TINY-4094 + Fixed textpattern plugin throwing exceptions when using `forced_root_block: false` #TINY-4172 + Fixed missing CSS fill styles for toolbar button icon active state #TINY-4147 + Fixed an issue where the editor selection could end up inside a short ended element (such as `br`) #TINY-3999 + Fixed browser selection being lost in inline mode when opening split dropdowns #TINY-4197 + Fixed backspace throwing an exception when using `forced_root_block: false` #TINY-4099 + Fixed floating toolbar drawer expanding outside the bounds of the editor #TINY-3941 + Fixed the autocompleter not activating immediately after a `br` or `contenteditable=false` element #TINY-4194 + Fixed an issue where the autocompleter would incorrectly close on IE 11 in certain edge cases #TINY-4205 +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/app/static/vendors/tinymce/js/tinymce/jquery.tinymce.min.js b/app/static/vendors/tinymce/js/tinymce/jquery.tinymce.min.js new file mode 100644 index 0000000..5a6ef56 --- /dev/null +++ b/app/static/vendors/tinymce/js/tinymce/jquery.tinymce.min.js @@ -0,0 +1,91 @@ +/** + * 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/app/static/vendors/tinymce/js/tinymce/langs/de.js b/app/static/vendors/tinymce/js/tinymce/langs/de.js new file mode 100644 index 0000000..f7a5b00 --- /dev/null +++ b/app/static/vendors/tinymce/js/tinymce/langs/de.js @@ -0,0 +1,389 @@ +tinymce.addI18n('de',{ +"Redo": "Wiederholen", +"Undo": "R\u00fcckg\u00e4ngig machen", +"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": "Zentrieren", +"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 Tastenkombinationen Strg+X\/C\/V.", +"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": "Kopfzeile 1", +"Heading 2": "Kopfzeile 2", +"Heading 3": "Kopfzeile 3", +"Heading 4": "Kopfzeile 4", +"Heading 5": "Kopfzeile 5", +"Heading 6": "Kopfzeile 6", +"Preformatted": "Vorformatiert", +"Div": "Div", +"Pre": "Pre", +"Code": "Code", +"Paragraph": "Absatz", +"Blockquote": "Blockquote", +"Inline": "Zeichenformate", +"Blocks": "Bl\u00f6cke", +"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!", +"Fonts": "Schriftarten", +"Font Sizes": "Schriftgr\u00f6\u00dfe", +"Class": "Klasse", +"Browse for an image": "Bild...", +"OR": "ODER", +"Drop an image here": "Bild hier ablegen", +"Upload": "Hochladen", +"Block": "Blocksatz", +"Align": "Ausrichten", +"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 characters...": "Sonderzeichen...", +"Source code": "Quelltext", +"Insert\/Edit code sample": "Codebeispiel einf\u00fcgen\/bearbeiten", +"Language": "Sprache", +"Code sample...": "Codebeispiel...", +"Color Picker": "Farbwahl", +"R": "R", +"G": "G", +"B": "B", +"Left to right": "Von links nach rechts", +"Right to left": "Von rechts nach links", +"Emoticons...": "Emoticons...", +"Metadata and Document Properties": "Dokument-Eigenschaften und -Metadaten", +"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": "Praktische Tastenkombinationen", +"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\/Edit Link": "Link einf\u00fcgen\/bearbeiten", +"Insert\/edit link": "Link einf\u00fcgen\/bearbeiten", +"Text to display": "Anzuzeigender Text", +"Url": "URL", +"Open link in...": "Link \u00f6ffnen in...", +"Current window": "Aktuelles Fenster", +"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", +"Alternative source URL": "URL der alternativen Quelle", +"Media poster (Image URL)": "Medienposter (Bild-URL)", +"Paste your embed code below:": "F\u00fcgen Sie Ihren Einbettungscode hier ein:", +"Embed": "Einbetten", +"Media...": "Medien...", +"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", +"Previous": "Vorherige", +"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", +"Find whole words only": "Nur ganze W\u00f6rter suchen", +"Spell check": "Rechschreibpr\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", +"Show caption": "Beschriftung anzeigen", +"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", +"Remove color": "Farbauswahl aufheben", +"Table of Contents": "Inhaltsverzeichnis", +"Show blocks": "Bl\u00f6cke anzeigen", +"Show invisible characters": "Unsichtbare Zeichen anzeigen", +"Word count": "Anzahl der W\u00f6rter", +"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", +"Image title": "Bildtitel", +"Border width": "Rahmenbreite", +"Border style": "Rahmenstil", +"Error": "Fehler", +"Warn": "Warnung", +"Valid": "G\u00fcltig", +"To open the popup, press Shift+Enter": "Dr\u00fccken Sie Umschalt+Eingabe, um das Popup-Fenster zu \u00f6ffnen.", +"Rich Text Area. Press ALT-0 for help.": "Rich-Text-Bereich. Dr\u00fccken Sie Alt+0 f\u00fcr Hilfe.", +"System Font": "Betriebssystemschriftart", +"Failed to upload image: {0}": "Bild konnte nicht hochgeladen werden: {0}", +"Failed to load plugin: {0} from url {1}": "Plugin konnte nicht geladen werden: {0} von URL {1}", +"Failed to load plugin url: {0}": "Plugin-URL konnte nicht geladen werden: {0}", +"Failed to initialize plugin: {0}": "Plugin konnte nicht initialisiert werden: {0}", +"example": "Beispiel", +"Search": "Suchen", +"All": "Alles", +"Currency": "W\u00e4hrung", +"Text": "Text", +"Quotations": "Anf\u00fchrungszeichen", +"Mathematical": "Mathematisch", +"Extended Latin": "Erweitertes Latein", +"Symbols": "Symbole", +"Arrows": "Pfeile", +"User Defined": "Benutzerdefiniert", +"dollar sign": "Dollarzeichen", +"currency sign": "W\u00e4hrungssymbol", +"euro-currency sign": "Eurozeichen", +"colon sign": "Doppelpunkt", +"cruzeiro sign": "Cruzeirozeichen", +"french franc sign": "Franczeichen", +"lira sign": "Lirezeichen", +"mill sign": "Millzeichen", +"naira sign": "Nairazeichen", +"peseta sign": "Pesetazeichen", +"rupee sign": "Rupiezeichen", +"won sign": "Wonzeichen", +"new sheqel sign": "Schekelzeichen", +"dong sign": "Dongzeichen", +"kip sign": "Kipzeichen", +"tugrik sign": "Tugrikzeichen", +"drachma sign": "Drachmezeichen", +"german penny symbol": "Pfennigzeichen", +"peso sign": "Pesozeichen", +"guarani sign": "Guaranizeichen", +"austral sign": "Australzeichen", +"hryvnia sign": "Hrywnjazeichen", +"cedi sign": "Cedizeichen", +"livre tournois sign": "Livrezeichen", +"spesmilo sign": "Spesmilozeichen", +"tenge sign": "Tengezeichen", +"indian rupee sign": "Indisches Rupiezeichen", +"turkish lira sign": "T\u00fcrkisches Lirazeichen", +"nordic mark sign": "Zeichen nordische Mark", +"manat sign": "Manatzeichen", +"ruble sign": "Rubelzeichen", +"yen character": "Yenzeichen", +"yuan character": "Yuanzeichen", +"yuan character, in hong kong and taiwan": "Yuanzeichen in Hongkong und Taiwan", +"yen\/yuan character variant one": "Yen-\/Yuanzeichen Variante 1", +"Loading emoticons...": "Emoticons werden geladen...", +"Could not load emoticons": "Emoticons konnten nicht geladen werden", +"People": "Menschen", +"Animals and Nature": "Tiere und Natur", +"Food and Drink": "Essen und Trinken", +"Activity": "Aktivit\u00e4t", +"Travel and Places": "Reisen und Orte", +"Objects": "Objekte", +"Flags": "Flaggen", +"Characters": "Zeichen", +"Characters (no spaces)": "Zeichen (ohne Leerzeichen)", +"Error: Form submit field collision.": "Fehler: Kollision der Formularbest\u00e4tigungsfelder.", +"Error: No form element found.": "Fehler: Kein Formularelement gefunden.", +"Update": "Aktualisieren", +"Color swatch": "Farbpalette", +"Turquoise": "T\u00fcrkis", +"Green": "Gr\u00fcn", +"Blue": "Blau", +"Purple": "Violett", +"Navy Blue": "Marineblau", +"Dark Turquoise": "Dunkelt\u00fcrkis", +"Dark Green": "Dunkelgr\u00fcn", +"Medium Blue": "Mittleres Blau", +"Medium Purple": "Mittelviolett", +"Midnight Blue": "Mitternachtsblau", +"Yellow": "Gelb", +"Orange": "Orange", +"Red": "Rot", +"Light Gray": "Hellgrau", +"Gray": "Grau", +"Dark Yellow": "Dunkelgelb", +"Dark Orange": "Dunkelorange", +"Dark Red": "Dunkelrot", +"Medium Gray": "Mittelgrau", +"Dark Gray": "Dunkelgrau", +"Black": "Schwarz", +"White": "Wei\u00df", +"Switch to or from fullscreen mode": "Vollbildmodus umschalten", +"Open help dialog": "Hilfe-Dialog \u00f6ffnen", +"history": "Historie", +"styles": "Stile", +"formatting": "Formatierung", +"alignment": "Ausrichtung", +"indentation": "Einr\u00fcckungen", +"permanent pen": "Textmarker", +"comments": "Anmerkungen", +"Anchor": "Textmarke", +"Special character": "Sonderzeichen", +"Code sample": "Codebeispiel", +"Color": "Farbe", +"Emoticons": "Emoticons", +"Document properties": "Dokumenteigenschaften", +"Image": "Bild", +"Insert link": "Link einf\u00fcgen", +"Target": "Ziel", +"Link": "Link", +"Poster": "Poster", +"Media": "Medium", +"Print": "Drucken", +"Prev": "Zur\u00fcck", +"Find and replace": "Suchen und ersetzen", +"Whole words": "Nur ganze W\u00f6rter", +"Spellcheck": "Rechtschreibpr\u00fcfung", +"Caption": "Beschriftung", +"Insert template": "Vorlage einf\u00fcgen " +}); \ No newline at end of file diff --git a/app/static/vendors/tinymce/js/tinymce/langs/fr_FR.js b/app/static/vendors/tinymce/js/tinymce/langs/fr_FR.js new file mode 100644 index 0000000..2d074f8 --- /dev/null +++ b/app/static/vendors/tinymce/js/tinymce/langs/fr_FR.js @@ -0,0 +1,389 @@ +tinymce.addI18n('fr_FR',{ +"Redo": "R\u00e9tablir", +"Undo": "Annuler", +"Cut": "Couper", +"Copy": "Copier", +"Paste": "Coller", +"Select all": "S\u00e9lectionner tout", +"New document": "Nouveau document", +"Ok": "OK", +"Cancel": "Annuler", +"Visual aids": "Aides visuelles", +"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": "Liste \u00e0 puces", +"Numbered list": "Liste num\u00e9rot\u00e9e", +"Decrease indent": "R\u00e9duire 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 l\u2019acc\u00e8s direct au presse-papiers. Merci d'utiliser les raccourcis clavier Ctrl+X\/C\/V.", +"Headers": "En-t\u00eates", +"Header 1": "En-t\u00eate 1", +"Header 2": "En-t\u00eate 2", +"Header 3": "En-t\u00eate 3", +"Header 4": "En-t\u00eate 4", +"Header 5": "En-t\u00eate 5", +"Header 6": "En-t\u00eate 6", +"Headings": "Titres", +"Heading 1": "Titre\u00a01", +"Heading 2": "Titre\u00a02", +"Heading 3": "Titre\u00a03", +"Heading 4": "Titre\u00a04", +"Heading 5": "Titre\u00a05", +"Heading 6": "Titre\u00a06", +"Preformatted": "Pr\u00e9format\u00e9", +"Div": "Div", +"Pre": "Pre", +"Code": "Code", +"Paragraph": "Paragraphe", +"Blockquote": "Blockquote", +"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.", +"Fonts": "Polices", +"Font Sizes": "Tailles de police", +"Class": "Classe", +"Browse for an image": "Rechercher une image", +"OR": "OU", +"Drop an image here": "D\u00e9poser une image ici", +"Upload": "T\u00e9l\u00e9charger", +"Block": "Bloc", +"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 characters...": "Caract\u00e8res sp\u00e9ciaux...", +"Source code": "Code source", +"Insert\/Edit code sample": "Ins\u00e9rer \/ modifier une exemple de code", +"Language": "Langue", +"Code sample...": "Exemple de code...", +"Color Picker": "S\u00e9lecteur de couleurs", +"R": "R", +"G": "V", +"B": "B", +"Left to right": "Gauche \u00e0 droite", +"Right to left": "Droite \u00e0 gauche", +"Emoticons...": "\u00c9motic\u00f4nes...", +"Metadata and Document Properties": "M\u00e9tadonn\u00e9es et propri\u00e9t\u00e9s 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": "Raccourcis utiles", +"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\/Edit Link": "Ins\u00e9rer\/Modifier lien", +"Insert\/edit link": "Ins\u00e9rer\/modifier un lien", +"Text to display": "Texte \u00e0 afficher", +"Url": "Url", +"Open link in...": "Ouvrir le lien dans...", +"Current window": "Fen\u00eatre active", +"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", +"Alternative source URL": "URL de la source alternative", +"Media poster (Image URL)": "Affiche de m\u00e9dia (URL de l'image)", +"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", +"Previous": "Pr\u00e9c\u00e9dente", +"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", +"Find whole words only": "Mot entier", +"Spell check": "V\u00e9rification de l'orthographe", +"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", +"Show caption": "Afficher le sous-titrage", +"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...": "Ins\u00e9rer un mod\u00e8le...", +"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", +"Remove color": "Supprimer la couleur", +"Table of Contents": "Table des mati\u00e8res", +"Show blocks": "Afficher les blocs", +"Show invisible characters": "Afficher les caract\u00e8res invisibles", +"Word count": "Nombre de mots", +"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.", +"Image title": "Titre d'image", +"Border width": "\u00c9paisseur de la bordure", +"Border style": "Style de la bordure", +"Error": "Erreur", +"Warn": "Avertir", +"Valid": "Valide", +"To open the popup, press Shift+Enter": "Pour ouvrir la popup, appuyez sur Maj+Entr\u00e9e", +"Rich Text Area. Press ALT-0 for help.": "Zone de texte riche. Appuyez sur ALT-0 pour l'aide.", +"System Font": "Police syst\u00e8me", +"Failed to upload image: {0}": "\u00c9chec d'envoi de l'image\u00a0: {0}", +"Failed to load plugin: {0} from url {1}": "\u00c9chec de chargement du plug-in\u00a0: {0} \u00e0 partir de l\u2019URL {1} ", +"Failed to load plugin url: {0}": "\u00c9chec de chargement de l'URL du plug-in\u00a0: {0}", +"Failed to initialize plugin: {0}": "\u00c9chec d'initialisation du plug-in\u00a0: {0}", +"example": "exemple", +"Search": "Rechercher", +"All": "Tout", +"Currency": "Devise", +"Text": "Texte", +"Quotations": "Citations", +"Mathematical": "Op\u00e9rateurs math\u00e9matiques", +"Extended Latin": "Latin \u00e9tendu", +"Symbols": "Symboles", +"Arrows": "Fl\u00e8ches", +"User Defined": "D\u00e9fini par l'utilisateur", +"dollar sign": "Symbole dollar", +"currency sign": "Symbole devise", +"euro-currency sign": "Symbole euro", +"colon sign": "Symbole col\u00f3n", +"cruzeiro sign": "Symbole cruzeiro", +"french franc sign": "Symbole franc fran\u00e7ais", +"lira sign": "Symbole lire", +"mill sign": "Symbole milli\u00e8me", +"naira sign": "Symbole naira", +"peseta sign": "Symbole peseta", +"rupee sign": "Symbole roupie", +"won sign": "Symbole won", +"new sheqel sign": "Symbole nouveau ch\u00e9kel", +"dong sign": "Symbole dong", +"kip sign": "Symbole kip", +"tugrik sign": "Symbole tougrik", +"drachma sign": "Symbole drachme", +"german penny symbol": "Symbole pfennig", +"peso sign": "Symbole peso", +"guarani sign": "Symbole guarani", +"austral sign": "Symbole austral", +"hryvnia sign": "Symbole hryvnia", +"cedi sign": "Symbole cedi", +"livre tournois sign": "Symbole livre tournois", +"spesmilo sign": "Symbole spesmilo", +"tenge sign": "Symbole tenge", +"indian rupee sign": "Symbole roupie indienne", +"turkish lira sign": "Symbole lire turque", +"nordic mark sign": "Symbole du mark nordique", +"manat sign": "Symbole manat", +"ruble sign": "Symbole rouble", +"yen character": "Sinogramme Yen", +"yuan character": "Sinogramme Yuan", +"yuan character, in hong kong and taiwan": "Sinogramme Yuan, Hong Kong et Taiwan", +"yen\/yuan character variant one": "Sinogramme Yen\/Yuan, premi\u00e8re variante", +"Loading emoticons...": "Chargement des \u00e9motic\u00f4nes en cours...", +"Could not load emoticons": "\u00c9chec de chargement des \u00e9motic\u00f4nes", +"People": "Personnes", +"Animals and Nature": "Animaux & nature", +"Food and Drink": "Nourriture & boissons", +"Activity": "Activit\u00e9", +"Travel and Places": "Voyages & lieux", +"Objects": "Objets", +"Flags": "Drapeaux", +"Characters": "Caract\u00e8res", +"Characters (no spaces)": "Caract\u00e8res (espaces non compris)", +"Error: Form submit field collision.": "Erreur : conflit de champs lors de la soumission du formulaire", +"Error: No form element found.": "Erreur : aucun \u00e9l\u00e9ment de formulaire trouv\u00e9.", +"Update": "Mettre \u00e0 jour", +"Color swatch": "\u00c9chantillon de couleurs", +"Turquoise": "Turquoise", +"Green": "Vert", +"Blue": "Bleu", +"Purple": "Violet", +"Navy Blue": "Bleu marine", +"Dark Turquoise": "Turquoise fonc\u00e9", +"Dark Green": "Vert fonc\u00e9", +"Medium Blue": "Bleu moyen", +"Medium Purple": "Violet moyen", +"Midnight Blue": "Bleu de minuit", +"Yellow": "Jaune", +"Orange": "Orange", +"Red": "Rouge", +"Light Gray": "Gris clair", +"Gray": "Gris", +"Dark Yellow": "Jaune fonc\u00e9", +"Dark Orange": "Orange fonc\u00e9", +"Dark Red": "Rouge fonc\u00e9", +"Medium Gray": "Gris moyen", +"Dark Gray": "Gris fonc\u00e9", +"Black": "Noir", +"White": "Blanc", +"Switch to or from fullscreen mode": "Passer en ou quitter le mode plein \u00e9cran", +"Open help dialog": "Ouvrir la bo\u00eete de dialogue d'aide", +"history": "historique", +"styles": "styles", +"formatting": "mise en forme", +"alignment": "alignement", +"indentation": "retrait", +"permanent pen": "feutre ind\u00e9l\u00e9bile", +"comments": "commentaires", +"Anchor": "Ancre", +"Special character": "Caract\u00e8res sp\u00e9ciaux", +"Code sample": "Extrait de code", +"Color": "Couleur", +"Emoticons": "Emotic\u00f4nes", +"Document properties": "Propri\u00e9t\u00e9 du document", +"Image": "Image", +"Insert link": "Ins\u00e9rer un lien", +"Target": "Cible", +"Link": "Lien", +"Poster": "Publier", +"Media": "M\u00e9dia", +"Print": "Imprimer", +"Prev": "Pr\u00e9c ", +"Find and replace": "Trouver et remplacer", +"Whole words": "Mots entiers", +"Spellcheck": "V\u00e9rification orthographique", +"Caption": "Titre", +"Insert template": "Ajouter un th\u00e8me" +}); \ No newline at end of file diff --git a/app/static/vendors/tinymce/js/tinymce/langs/readme.md b/app/static/vendors/tinymce/js/tinymce/langs/readme.md new file mode 100644 index 0000000..a52bf03 --- /dev/null +++ b/app/static/vendors/tinymce/js/tinymce/langs/readme.md @@ -0,0 +1,3 @@ +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/app/static/vendors/tinymce/js/tinymce/license.txt b/app/static/vendors/tinymce/js/tinymce/license.txt new file mode 100644 index 0000000..b17fc90 --- /dev/null +++ b/app/static/vendors/tinymce/js/tinymce/license.txt @@ -0,0 +1,504 @@ + 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/app/static/vendors/tinymce/js/tinymce/plugins/advlist/plugin.min.js b/app/static/vendors/tinymce/js/tinymce/plugins/advlist/plugin.min.js new file mode 100644 index 0000000..9880702 --- /dev/null +++ b/app/static/vendors/tinymce/js/tinymce/plugins/advlist/plugin.min.js @@ -0,0 +1,9 @@ +/** + * 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.1.3 (2019-12-04) + */ +!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=z(e);if(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/app/static/vendors/tinymce/js/tinymce/plugins/charmap/plugin.min.js b/app/static/vendors/tinymce/js/tinymce/plugins/charmap/plugin.min.js new file mode 100644 index 0000000..9adbda5 --- /dev/null +++ b/app/static/vendors/tinymce/js/tinymce/plugins/charmap/plugin.min.js @@ -0,0 +1,9 @@ +/** + * 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.1.3 (2019-12-04) + */ +!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/app/static/vendors/tinymce/js/tinymce/plugins/colorpicker/plugin.min.js b/app/static/vendors/tinymce/js/tinymce/plugins/colorpicker/plugin.min.js new file mode 100644 index 0000000..e11153c --- /dev/null +++ b/app/static/vendors/tinymce/js/tinymce/plugins/colorpicker/plugin.min.js @@ -0,0 +1,9 @@ +/** + * 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.1.3 (2019-12-04) + */ +!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/app/static/vendors/tinymce/js/tinymce/plugins/contextmenu/plugin.min.js b/app/static/vendors/tinymce/js/tinymce/plugins/contextmenu/plugin.min.js new file mode 100644 index 0000000..5443e5c --- /dev/null +++ b/app/static/vendors/tinymce/js/tinymce/plugins/contextmenu/plugin.min.js @@ -0,0 +1,9 @@ +/** + * 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.1.3 (2019-12-04) + */ +!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/app/static/vendors/tinymce/js/tinymce/plugins/directionality/plugin.min.js b/app/static/vendors/tinymce/js/tinymce/plugins/directionality/plugin.min.js new file mode 100644 index 0000000..513de87 --- /dev/null +++ b/app/static/vendors/tinymce/js/tinymce/plugins/directionality/plugin.min.js @@ -0,0 +1,9 @@ +/** + * 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.1.3 (2019-12-04) + */ +!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/app/static/vendors/tinymce/js/tinymce/plugins/fullpage/plugin.min.js b/app/static/vendors/tinymce/js/tinymce/plugins/fullpage/plugin.min.js new file mode 100644 index 0000000..8e1f79f --- /dev/null +++ b/app/static/vendors/tinymce/js/tinymce/plugins/fullpage/plugin.min.js @@ -0,0 +1,9 @@ +/** + * 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.1.3 (2019-12-04) + */ +!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/app/static/vendors/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js b/app/static/vendors/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js new file mode 100644 index 0000000..5189d40 --- /dev/null +++ b/app/static/vendors/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js @@ -0,0 +1,9 @@ +/** + * 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.1.3 (2019-12-04) + */ +!function(l){"use strict";function e(){}function m(e){return function(){return e}}function n(){return s}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()}}},c=m(!1),u=m(!0),s=(r={fold:function(e,n){return e()},is:c,isSome:c,isNone:u,getOr:d,getOrThunk:a,getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:m(null),getOrUndefined:m(undefined),or:d,orThunk:a,map:n,each:e,bind:n,exists:c,forall:u,filter:n,equals:f,equals_:f,toArray:function(){return[]},toString:m("none()")},Object.freeze&&Object.freeze(r),r);function f(e){return e.isNone()}function a(e){return e()}function d(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 v(e,n){for(var r=e.length,t=new Array(r),o=0;o${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,a=e.length;o"+r(t,e)+""}),o=n.length,a=n.join("");return"

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

        "+a+"
      "}(n)+"
      "),(t=y(["Accessibility Checker","Advanced Code Editor","Advanced Tables","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"
    1. "+U.translate(e)+"
    2. "}).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",presets:"document",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=a({}),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/app/static/vendors/tinymce/js/tinymce/plugins/hr/plugin.min.js b/app/static/vendors/tinymce/js/tinymce/plugins/hr/plugin.min.js new file mode 100644 index 0000000..ff41b30 --- /dev/null +++ b/app/static/vendors/tinymce/js/tinymce/plugins/hr/plugin.min.js @@ -0,0 +1,9 @@ +/** + * 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.1.3 (2019-12-04) + */ +!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/app/static/vendors/tinymce/js/tinymce/plugins/image/plugin.min.js b/app/static/vendors/tinymce/js/tinymce/plugins/image/plugin.min.js new file mode 100644 index 0000000..66c9274 --- /dev/null +++ b/app/static/vendors/tinymce/js/tinymce/plugins/image/plugin.min.js @@ -0,0 +1,9 @@ +/** + * 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.1.3 (2019-12-04) + */ +!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]+>[^<]+<\/a>$/.test(n)||-1===n.indexOf("href=")))},fn=R,ln=function(n,t){return function(n){return n.replace(/\uFEFF/g,"")}(t?t.innerText||t.textContent:n.getContent({format:"text"}))},sn=L,dn=F,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()):E(["anchor","link"],t.name)?e(n(),t):("text"===t.name&&o.set(n().text),J.none())}}},gn={},vn={exports:gn};V=undefined,W=gn,H=vn,$=undefined,function(n){"object"==typeof W&&void 0!==H?H.exports=n():"function"==typeof V&&V.amd?V([],n):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).EphoxContactWrapper=n()}(function(){return function l(i,u,c){function a(t,n){if(!u[t]){if(!i[t]){var e="function"==typeof $&&$;if(!n&&e)return e(t,!0);if(f)return f(t,!0);var r=new Error("Cannot find module '"+t+"'");throw r.code="MODULE_NOT_FOUND",r}var o=u[t]={exports:{}};i[t][0].call(o.exports,function(n){return a(i[t][1][n]||n)},o,o.exports,l,i,u,c)}return u[t].exports}for(var f="function"==typeof $&&$,n=0;ne.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(Jn.getSelectedListItems(e),bn.fromDom);return A(N(n,t(re)),N(function(e){var n=Xe.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=Ge(!1);return g(e,function(e){return{sourceList:e,entries:tt(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 y(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&&Mn(t.previousSibling)?{container:t.previousSibling,offset:t.previousSibling.data.length}:t.nextSibling&&Mn(t.nextSibling)?{container:t.nextSibling,offset:0}:{container:e,offset:n}}function ve(e,n){var t=g(Jn.getSelectedListRoots(e),bn.fromDom),r=g(Jn.getSelectedDlItems(e),bn.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(ut(e.selection.getRng())),e.nodeChanged(),o=!0}return o}function he(e){return ve(e,"Indent")}function Ne(e){return ve(e,"Outdent")}function ye(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){Pn.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"]),Pn.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&&qn(o.nextSibling)&&(o=o.nextSibling);o.parentNode!==r;){if(Vn(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=Jn.getClosestListRootElm(r,r.selection.getStart(!0)),s=r.dom;"false"!==s.getContentEditable(r.selection.getNode())&&("DL"===(o=o.toUpperCase())&&(u="DT"),e=ct(n),Pn.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 Pn.each(a,function(e){if(Vn(t,e))return i.push(e),void(o=null);if(u.isBlock(e)||qn(e))return qn(e)&&u.remove(e),void(o=null);var n=e.nextSibling;st.isBookmarkNode(e)&&(Vn(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)&&Un(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){Pn.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),dt(r.dom,n)}),r.selection.setRng(ft(e)))}function De(e,n,t){return function(e,n){return e&&n&&Un(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 Ee(n,e,t,r,o){if(e.nodeName!==r||lt(o)){var i=ct(n.selection.getRng(!0));Pn.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(ft(i))}else ye(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),Xn(e,r)&>.remove(r)):gt.setStyle(r,"listStyleType","none")),Un(r)&&(t=r.previousSibling)&&"LI"===t.nodeName&&t.appendChild(n)}function ke(e,n,t,r){var o=n.startContainer,i=n.startOffset;if(Mn(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/app/tmpl/block/dlgpassword.tt b/app/tmpl/block/dlgpassword.tt new file mode 100644 index 0000000..53e80e9 --- /dev/null +++ b/app/tmpl/block/dlgpassword.tt @@ -0,0 +1,77 @@ + + \ No newline at end of file diff --git a/app/tmpl/block/dlguploadfile.tt b/app/tmpl/block/dlguploadfile.tt new file mode 100644 index 0000000..836c66e --- /dev/null +++ b/app/tmpl/block/dlguploadfile.tt @@ -0,0 +1,93 @@ + + \ No newline at end of file diff --git a/app/tmpl/block/dlgusername.tt b/app/tmpl/block/dlgusername.tt new file mode 100644 index 0000000..5159cf0 --- /dev/null +++ b/app/tmpl/block/dlgusername.tt @@ -0,0 +1,90 @@ + + + \ No newline at end of file diff --git a/app/tmpl/block/head.tt b/app/tmpl/block/head.tt new file mode 100644 index 0000000..24cdfa0 --- /dev/null +++ b/app/tmpl/block/head.tt @@ -0,0 +1,30 @@ + + + + + [% sitename %] - [% pagename %] + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/tmpl/block/snackbar.tt b/app/tmpl/block/snackbar.tt new file mode 100644 index 0000000..464a162 --- /dev/null +++ b/app/tmpl/block/snackbar.tt @@ -0,0 +1 @@ +
      \ No newline at end of file diff --git a/app/tmpl/block/toolbars.tt b/app/tmpl/block/toolbars.tt new file mode 100644 index 0000000..78ca487 --- /dev/null +++ b/app/tmpl/block/toolbars.tt @@ -0,0 +1,9 @@ +[% MACRO tabletoolbar(ident) BLOCK -%] + +
      + + + + +
      +[% END -%] \ No newline at end of file diff --git a/app/tmpl/file.tt b/app/tmpl/file.tt new file mode 100644 index 0000000..afb2fc5 --- /dev/null +++ b/app/tmpl/file.tt @@ -0,0 +1,3 @@ +[% USE DBI %] +[% USE dksdb = DBI(dsn, dbuser, dbpassword) %] +[% INCLUDE $page %] diff --git a/app/tmpl/index.tt b/app/tmpl/index.tt new file mode 100644 index 0000000..a4efa99 --- /dev/null +++ b/app/tmpl/index.tt @@ -0,0 +1,57 @@ +[% USE dksdb = DBI(dsn, dbuser, dbpassword) %] +[% #appaccess = dksdb.prepare("select ap.icon,ap.app,ap.name,ug.usergroup from useringroups uig join apps ap on (uig.id_group=ap.id_usergroup) join usergroups ug on (uig.id_group=ug.id) where uig.id_user=? group by ap.id,ug.id order by ap.sort;")%] +[% USE date %] +[% vstamp=date.format(date.now, '%d%m%Y%H%M%S') %] + + + + + + [% sitename %] - [% pagename %] + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + [% INCLUDE $page %] +
      + [% INCLUDE block/snackbar.tt %] + + + + + + + + + + + + + + + diff --git a/app/tmpl/lang/fr.tt b/app/tmpl/lang/fr.tt new file mode 100644 index 0000000..616ea59 --- /dev/null +++ b/app/tmpl/lang/fr.tt @@ -0,0 +1,8 @@ +[% lbl = { + loginheading => "LEDF Site Login", + login => "Login", + password => "Mot de passe", + sendlogin => "Connecter", + linkpwdforgotten => "mot de passe oublié?" +} +%] \ No newline at end of file diff --git a/app/tmpl/login.tt b/app/tmpl/login.tt new file mode 100644 index 0000000..2c232e8 --- /dev/null +++ b/app/tmpl/login.tt @@ -0,0 +1,76 @@ +[% PROCESS "lang/${lang}.tt" %] + + + + + + [% sitename %] - [% pagename %] + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      +
      + logo +
      +
      +
      + [% IF pagename == 'register' && registration_enabled == '1' %] + [% INCLUDE module/login/register.tt %] + [% ELSIF pagename == 'forgotpassword' %] + [% INCLUDE module/login/forgotpassword.tt %] + [% ELSIF pagename == 'message' %] + [% INCLUDE module/login/message.tt %] + [% ELSIF pagename == 'validationcode' %] + [% INCLUDE module/login/validationcode.tt %] + [% ELSE %] + [% INCLUDE module/login/login.tt %] + [% END %] +
      + +
      + + + \ No newline at end of file diff --git a/app/tmpl/macro/fields.tt b/app/tmpl/macro/fields.tt new file mode 100644 index 0000000..94ba04b --- /dev/null +++ b/app/tmpl/macro/fields.tt @@ -0,0 +1,118 @@ +[% MACRO fieldhidden(column,table,ident,value) BLOCK -%] + +[% END -%] +[% MACRO fieldeditbox(column,table,title,size,state,value,plhold) BLOCK -%] +
      + + 0 %][% state %][% END %]/> + +
      +[% END -%] +[% MACRO fieldfile(column,table,title,size,state,value) BLOCK -%] +
      + + 0 %][% state %][% END %]/> + +
      +[% END -%] +[% MACRO fieldpasswordbox(column,table,title,size,state,value) BLOCK -%] +
      + + 0 %][% state %][% END %]/> + +
      +[% END -%] +[% MACRO fieldtagbox(column,table,title,size,state,value) BLOCK -%] +
      + + 0 %][% state %][% END %]/> + +
      +[% END -%] +[% MACRO fieldcheckbox(column,table,title,size,state,value) BLOCK -%] +
      +
      + 0 %][% state %][% END %]> + +
      +[% END -%] + +[% MACRO fieldemailbox(column,table,title,size,state,value) BLOCK -%] +
      + + 0 %][% state %][% END %]/> +
      +[% END -%] + +[% MACRO fieldselectbox(column,table,title,size,state,value) BLOCK -%] + [% IF state.length > 0 %] + [% fieldeditbox(column,table,title,size,state,value) %] + [% ELSE %] +
      + + + +
      + [% END %] +[% END -%] +[% MACRO fieldmultiselectbox(column,table,title,size,state,value) BLOCK -%] + [% IF state.length > 0 %] + [% fieldeditbox(column,table,title,size,state,value) %] + [% ELSE %] +
      + + + +
      + [% END %] +[% END -%] +[% MACRO fielddatebox(column,table,title,size,state,value) BLOCK -%] +
      + + 0 %][% state %][% END %]]/> + +
      +[% END -%] +[% MACRO fieldtextarea(column,table,title,size,state,height,value) BLOCK -%] +
      + + +
      +[% END -%] +[% MACRO fieldrichtextarea(column,table,title,size,state,height,value) BLOCK -%] +
      + + +
      +[% END -%] + +[% MACRO formsavebutton(formname,btnname,clbk) BLOCK -%] +
      + +
      +[% END -%] +[% MACRO formsavetextfilebutton(formname,btnname) BLOCK -%] +
      + +
      +[% END -%] +[% MACRO formdlgsavebutton(formname,btnname,clbk) BLOCK -%] + +[% END -%] +[% MACRO formsavefilebutton(formname,btnname,container) BLOCK -%] +[% IF container.length > 0 %] +
      + [% END %] + +[% IF container.length > 0 %] +
      +[% END %] +[% END -%] + + diff --git a/app/tmpl/module/championship/divisions.js b/app/tmpl/module/championship/divisions.js new file mode 100644 index 0000000..ebf3380 --- /dev/null +++ b/app/tmpl/module/championship/divisions.js @@ -0,0 +1,35 @@ +function initpage(){ + tbl = new Tabulator("#tbl_divisions", { + height: "95vh", + layout:"fitColumns", + addRowPos:"top", + selectable:1, + columns:[ + {title:"Divisioun", field:"division"}, + {title:"Ranking", field:"ranking"}, + ], +}); + gettbldata(); +} + +function gettbldata(){ + req.reqdata("POST","db.cgi",{"get":"divisions"},loadtbldata); +} + +function loadtbldata(data){ + if (data && data.sqldata){ + tbl.setData(data.sqldata); + } +} + +function add(){ + +} + +function edit(){ + +} + +function remove(){ + +} \ No newline at end of file diff --git a/app/tmpl/module/championship/divisions.tt b/app/tmpl/module/championship/divisions.tt new file mode 100644 index 0000000..3bf4b84 --- /dev/null +++ b/app/tmpl/module/championship/divisions.tt @@ -0,0 +1,26 @@ +[% PROCESS macro/fields.tt %] +[% INCLUDE "module/$module/toolbar.tt" %] +
      +
      + \ No newline at end of file diff --git a/app/tmpl/module/championship/games.js b/app/tmpl/module/championship/games.js new file mode 100644 index 0000000..3ac8c66 --- /dev/null +++ b/app/tmpl/module/championship/games.js @@ -0,0 +1,211 @@ +var sel_id_teamhome = null; +var sel_id_teamguest = null; + +function initpage(){ + flatpickr(".datefield",{altInput: true, + altFormat: "d.m.Y", + dateFormat: "Y-m-d", + "locale": "fr", + }); + tbl = new Tabulator("#tbl_csgames", { + height: "95vh", + layout:"fitColumns", + addRowPos:"top", + selectable:1, + columns:[ + {title:"Saison", field:"season",headerFilter:"input"}, + {title:"Division", field:"division",headerFilter:"input"}, + {title:"Spilldag", field:"playday",headerFilter:"input"}, + {title:"Datum", field:"dspplaydate",headerFilter:"input"}, + {title:"Team Home", field:"teamhome",headerFilter:"input"}, + {title:"Team Guest", field:"teamguest",headerFilter:"input"}, + {title:"Sets Team Home", field:"sets_teamhome"}, + {title:"Sets Team Guest", field:"sets_teamguest"}, + {title:"Validéiert",field:"validated"} + ], +}); + gettbldata(); + getdivisions(); + getseasons(); + getteamsbyseasondivision(); +} + +function gettbldata(){ + req.reqdata("POST","db.cgi",{"get":"games"},loadtbldata); +} + +function loadtbldata(data){ + if (data && data.sqldata){ + tbl.setData(data.sqldata); + } +} + +function add(){ + document.getElementById("id").value = ""; + document.getElementById('dlgcsgames').style.display='block'; + return false; +} + +function edit(){ + var udata = tbl.getSelectedData(); + var uid = udata[0].id; + //console.log(uid); + req.reqdata("POST","db.cgi",{"get":"games","filter":"id=" + uid},fillformgames); + document.getElementById('dlgcsgames').style.display='block'; + return false; +} + +function fillformgames(data){ + console.log("fillformgames"); + console.log(data); + if (data && data.sqldata){ + var frm = document.querySelectorAll('.data_csgames'); + for (var f in frm){ + //console.log(frm[f].classList); + if (data.sqldata[0][frm[f].id]){ + if ((frm[f].tagName == 'INPUT') || (frm[f].tagName == 'SELECT') || frm[f].tagName == 'TEXTAREA'){ + if (frm[f].classList.contains("datefield")){ + frm[f]._flatpickr.setDate(data.sqldata[0][frm[f].id]); + } else if (frm[f].classList.contains("richeditarea")){ + //console.log(frm[f].id + " is richeditarea"); + tinymce.get(frm[f].id).setContent(data.sqldata[0][frm[f].id]); + } else { + frm[f].value=data.sqldata[0][frm[f].id]; + } + + } + } + } + } + return false; +} + +function remove(){ + var udata = tbl.getSelectedData(); + var uid = udata[0].id; + if (confirm("Dass du secher dass du déi ausgewielten Rei läschen wëlls?")){ + req.reqdata("POST","db.cgi",{"del":"1","ident_csgames_id":udata[0].id},gettbldata); + } + return false; +} + + +function getdivisions(){ + req.reqdata("POST","db.cgi",{"get":"divisions"},filldivisions); + return false; +} +function filldivisions(data){ + var divlist = []; + var dividlist = {"":""}; + if (data && data.sqldata){ + for (var i in data.sqldata){ + divlist.push({value:data.sqldata[i].id,label:data.sqldata[i].division}); + dividlist[data.sqldata[i].id] = data.sqldata[i].division; + } + } + if (document.getElementById('id_division').tagName == "SELECT"){ + sel_id_division = new Choices('#id_division',{ + searchEnabled: false, + itemSelectText: 'auswielen...', + choices : divlist, + shouldSort: false, + shouldSortItems: false + }); + sel_id_division.setChoiceByValue(document.getElementById("id_division").dataset.selected); + + } else { + document.getElementById('id_division').value = dividlist[document.getElementById('id_division').value]; + } + document.getElementById("id_division").addEventListener("change",function(){ + getteamsbyseasondivision(); + }); + return false; +} +function getseasons(){ + req.reqdata("POST","db.cgi",{"get":"seasons"},fillseasons); + return false; +} +function fillseasons(data){ + + var seasonlist = []; + var seasonidlist = {"":""}; + if (data && data.sqldata){ + for (var i in data.sqldata){ + seasonlist.push({value:data.sqldata[i].id,label:data.sqldata[i].season}); + seasonidlist[data.sqldata[i].id] = data.sqldata[i].season; + } + } + if (document.getElementById('id_season').tagName == "SELECT"){ + sel_id_season = new Choices('#id_season',{ + searchEnabled: false, + itemSelectText: 'auswielen...', + choices : seasonlist, + shouldSort: false, + shouldSortItems: false + }); + sel_id_season.setChoiceByValue(document.getElementById("id_season").dataset.selected); + + } else { + document.getElementById('id_season').value = seasonidlist[document.getElementById('id_season').value]; + } + + document.getElementById("id_season").addEventListener("change",function(){ + getteamsbyseasondivision(); + }); + return false; +} + +function closedlg(){ + gettbldata(); + document.getElementById('dlgcsgames').style.display='none'; +} + +function getteamsbyseasondivision(){ + var id_season = document.getElementById('id_season').value; + var id_division = document.getElementById('id_division').value; + req.reqdata("POST","db.cgi",{"get":"seasonranking","filter":" id_season="+id_season+" and id_division="+id_division},fillteams); + return false; +} + +function fillteams(data){ + var teamlist = []; + var teamidlist = {"":""}; + //console.log(data); + if (data && data.sqldata){ + for (var i in data.sqldata){ + teamlist.push({value:data.sqldata[i].id_team,label:data.sqldata[i].team}); + teamidlist[data.sqldata[i].id] = data.sqldata[i].teams; + } + } + if (sel_id_teamhome){ + sel_id_teamhome.destroy(); + } + if (sel_id_teamguest){ + sel_id_teamguest.destroy(); + } + if (document.getElementById('id_teamhome').tagName == "SELECT"){ + sel_id_teamhome = new Choices('#id_teamhome',{ + searchEnabled: false, + itemSelectText: 'auswielen...', + choices : teamlist + }); + sel_id_teamhome.setChoiceByValue(document.getElementById("id_teamhome").dataset.selected); + + } else { + document.getElementById('id_teamhome').value = teamidlist[document.getElementById('id_teamhome').value]; + } + if (document.getElementById('id_teamguest').tagName == "SELECT"){ + sel_id_teamguest = new Choices('#id_teamguest',{ + searchEnabled: false, + itemSelectText: 'auswielen...', + choices : teamlist + }); + sel_id_teamguest.setChoiceByValue(document.getElementById("id_teamguest").dataset.selected); + + } else { + document.getElementById('id_teamguest').value = teamidlist[document.getElementById('id_teamguest').value]; + } + return false; +} + + diff --git a/app/tmpl/module/championship/games.tt b/app/tmpl/module/championship/games.tt new file mode 100644 index 0000000..913b1ff --- /dev/null +++ b/app/tmpl/module/championship/games.tt @@ -0,0 +1,33 @@ +[% PROCESS macro/fields.tt %] +[% INCLUDE "module/$module/toolbar.tt" %] +
      +
      + diff --git a/app/tmpl/module/championship/highscores.js b/app/tmpl/module/championship/highscores.js new file mode 100644 index 0000000..1fb1a26 --- /dev/null +++ b/app/tmpl/module/championship/highscores.js @@ -0,0 +1,227 @@ +var tbl = null; +var tag_highcheck = null; +var tag_highscore = null; +var tag_fastfinish = null; +var sel_id_game = null; +var sel_playday = null; +var sel_id_member = null; +var pdayidlist = []; +var gameidlist = {}; +var clubidbymember = {}; +function initpage(){ + tag_highscore = new Choices('#highscore',{ + removeItems: true, + removeItemButton: true, + searchEnabled: false, + addItems: true, + addItemText: (value) => { + return `Dreck 'Enter' "${value}" baizesetzen`; + }, + }); + tag_fastfinish = new Choices('#fastfinish',{ + removeItems: true, + removeItemButton: true, + searchEnabled: false, + addItems: true, + addItemText: (value) => { + return `Dreck 'Enter' "${value}" baizesetzen`; + }, + }); + tag_highcheck = new Choices('#highcheck',{ + removeItems: true, + removeItemButton: true, + searchEnabled: false, + addItems: true, + addItemText: (value) => { + return `Dreck 'Enter' "${value}" baizesetzen`; + }, + }); + sel_playday = new Choices('#playday',{ + searchEnabled: false, + itemSelectText: 'auswielen...', + choices : [], + shouldSort: false, + shouldSortItems: false + }); + sel_id_game = new Choices('#id_game',{ + searchEnabled: false, + itemSelectText: 'auswielen...', + choices : [], + shouldSort: false, + shouldSortItems: false + }); + sel_id_member = new Choices('#id_member',{ + searchEnabled: false, + itemSelectText: 'auswielen...', + choices : [], + shouldSort: false, + shouldSortItems: false + }); + tbl = new Tabulator("#tbl_cshighscores", { + headerFilterPlaceholder:"filter...", + height: "95vh", + layout:"fitDataFill", + selectable:1, + responsiveLayout:"collapse", + columns:[ + {title:"Spilldag", field:"playday",headerFilter:"number", headerFilterFunc:"=",sorter:"number", width: 50}, + {title:"Match", field:"game",headerFilter:"input",width: 200}, + {title:"Spiller", field:"player",headerFilter:"input",width: 200}, + {title:"Club", field:"club",headerFilter:"input",width: 150}, + {title:"High Score", field:"highscorelist"}, + {title:"Fast Finish", field:"fastfinishlist"}, + {title:"High Check", field:"highchecklist"}, + ], +}); + gettbldata(); + getplaydays(); +} + +function gettbldata(){ + req.reqdata("POST","db.cgi",{"get":"highscores","filter":"season='[% season %]'"},loadtbldata); +} + +function loadtbldata(data){ + if (data && data.sqldata){ + tbl.setData(data.sqldata); + } +} + +function highscoresaved(){ + gettbldata(); + document.getElementById('dlgcshighscores').style.display='none'; +} + +function add(){ + tag_highscore.clearStore(); + tag_fastfinish.clearStore(); + tag_highcheck.clearStore(); + sel_id_member.clearStore(); + document.getElementById("id").value = ""; + document.getElementById("id_member").dataset.selected = ""; + getmembersbyteam(); + document.getElementById('dlgcshighscores').style.display='block'; +} + +function edit(){ + var udata = tbl.getSelectedData(); + if (udata.length == 0){ return; } + var uid = udata[0].id; + //console.log(udata[0]); + sel_playday.setChoiceByValue(udata[0].playday); + document.getElementById("id").value=udata[0].id; + document.getElementById("id_game").dataset.selected = udata[0].id_game; + //document.getElementById("id_club").value = udata[0].id_club; + getgamesbyplayday(); + document.getElementById("id_member").dataset.selected = udata[0].id_member; + getmembersbyteam(); + tag_fastfinish.clearStore(); + tag_highcheck.clearStore(); + tag_highscore.clearStore(); + if ((udata[0].highscore != null) && (udata[0].highscore != '[""]')){ + tag_highscore.setValue(JSON.parse(udata[0].highscore)); + } + if ((udata[0].fastfinish != null) && (udata[0].fastfinish != '[""]')){ + tag_fastfinish.setValue(JSON.parse(udata[0].fastfinish)); + } + if ((udata[0].highcheck != null) && (udata[0].highcheck != '[""]')){ + tag_highcheck.setValue(JSON.parse(udata[0].highcheck)); + } + document.getElementById("id_club").value = udata[0].id_club; + document.getElementById('dlgcshighscores').style.display='block'; +} + +function remove(){ + var udata = tbl.getSelectedData(); + var uid = udata[0].id; + if (confirm("Bass du secher dass déi ausgewielten Scores läschen wells?")){ + req.reqdata("POST","db.cgi",{"del":"1","ident_cshighscores_id":udata[0].id},gettbldata); + } +} + +function getplaydays(){ + req.reqdata("POST","db.cgi",{"get":"playdays","filter":"season='[% season%]'"},fillplaydays); + return false; +} +function fillplaydays(data){ + var pdaylist = []; + pdayidlist = {"":""}; + if (data && data.sqldata){ + for (var i in data.sqldata){ + pdaylist.push({value:data.sqldata[i].playday,label:data.sqldata[i].playday}); + pdayidlist[data.sqldata[i].playday] = data.sqldata[i].d; + } + } + sel_playday.setChoices(pdaylist, 'value', 'label', true); + document.getElementById("playday").addEventListener("change",function(){ + getgamesbyplayday(); + }); + return false; +} + +function getgamesbyplayday(){ + var playday = document.getElementById('playday').value; + req.reqdata("POST","db.cgi",{"get":"gameslist","filter":"season='[% season%]' and playday=" + playday},fillgameslist); +} + +function fillgameslist(data){ + var gamelist = []; + gameidlist = {}; + sel_id_game.clearStore(); + sel_id_member.clearStore(); + document.getElementById("id_club").value = ""; + if (data && data.sqldata){ + for (var i in data.sqldata){ + gamelist.push({value:data.sqldata[i].id,label:data.sqldata[i].game}); + gameidlist[data.sqldata[i].id] = data.sqldata[i]; + } + } + sel_id_game.setChoices(gamelist, 'value', 'label', true); + + document.getElementById("id_game").addEventListener("change",function(){ + getmembersbyteam(); + }); + if (document.getElementById("id_game").dataset.selected){ + sel_id_game.setChoiceByValue(document.getElementById("id_game").dataset.selected); + } + return false; +} + +function getmembersbyteam(){ + var idgame = document.getElementById("id_game").value; + //console.log(gameidlist[idgame]); + if (idgame){ + req.reqdata("POST","db.cgi",{"get":"memberlist","filter":"id_club in (" + gameidlist[idgame].id_clubhome + "," + gameidlist[idgame].id_clubguest + ") and status='aktiv' "},fillmemberslist); + } +} + +function fillmemberslist(data){ + var memberslist = []; + clubidbymember = {}; + sel_id_member.clearStore(); + document.getElementById("id_club").value = ""; + + if (data && data.sqldata){ + for (var i in data.sqldata){ + + memberslist.push({value:data.sqldata[i].id,label:'(' + data.sqldata[i].club + ') ' + data.sqldata[i].surname + ' ' + data.sqldata[i].prename + ''}); + clubidbymember[data.sqldata[i].id] = data.sqldata[i].id_club; + } + } + sel_id_member.setChoices(memberslist, 'value', 'label', true); + + document.getElementById("id_member").addEventListener("change",function(){ + setclubid(); + }); + if (document.getElementById("id_member").dataset.selected){ + sel_id_member.setChoiceByValue(document.getElementById("id_member").dataset.selected); + } + return false; +} + +function setclubid(){ + var idm = document.getElementById("id_member").value; + document.getElementById("id_club").value=clubidbymember[idm]; +} + + diff --git a/app/tmpl/module/championship/highscores.tt b/app/tmpl/module/championship/highscores.tt new file mode 100644 index 0000000..5cc1fc1 --- /dev/null +++ b/app/tmpl/module/championship/highscores.tt @@ -0,0 +1,40 @@ +[% PROCESS macro/fields.tt %] +
      +
      + + +
      + + + +
      + +
      +
      +
      +
      + \ No newline at end of file diff --git a/app/tmpl/module/championship/index.js b/app/tmpl/module/championship/index.js new file mode 100644 index 0000000..d5e647b --- /dev/null +++ b/app/tmpl/module/championship/index.js @@ -0,0 +1,240 @@ +var tbl = null; +var afterformsaved = {}; +/*[% sid = session.id %] +[% IF (session.usergroups.search('championship') != 1) %] +[% qclub = dksdb.query("select id_club from vw_memberlist where id_user=$sid;") %] +[% club = qclub.get_all() %] +[% END %] */ + +var idclub="[% club.0.id_club %]"; +function initpage(){ + tbl = new Tabulator("#tbl_csgames", { + headerFilterPlaceholder:"filter...", + height: "95vh", + layout:"fitDataFill", + selectable:1, + responsiveLayout:"collapse", + columns:[ + {title:"Spilldag", field:"playday",headerFilter:"number", headerFilterFunc:"=",sorter:"number", width: 50}, + {title:"Datum", field:"dspplaydate",headerFilter:"input", width: 120}, + {title:"Doheem", field:"teamhome",headerFilter:"input"}, + {title:"Auswärts", field:"teamguest",headerFilter:"input"}, + {title:"Sets Doheem", field:"sets_teamhome",width: 50}, + {title:"Sets Auswärts", field:"sets_teamguest",width: 50}, + {title:"Validéiert", field:"validated", width: 50,align:"center", formatter:"tickCross", sorter:"boolean"}, + {title:"Resultat Doheem", field:"result_teamhome",width: 100}, + {title:"SpillBou Doheem", field:"file_teamhome",formatter:"html",width: 150}, + {title:"Resultat Auswärts", field:"result_teamguest",width: 100}, + {title:"SpillBou Auswärts", field:"file_teamguest",formatter:"html",width: 150}, + ], +}); + gettbldata(); +} + +function gettbldata(){ + /*[% IF club %]*/ + req.reqdata("POST","db.cgi",{"get":"games","filter":"season='[% season %]' and (id_clubhome=[% club.0.id_club %] or id_clubguest=[% club.0.id_club %])"},loadtbldata); + /*[% ELSE %]*/ + req.reqdata("POST","db.cgi",{"get":"games","filter":"season='[% season %]'"},loadtbldata); + /*[% END %]*/ +} + +function loadtbldata(data){ + if (data && data.sqldata){ + tbl.setData(data.sqldata); + } +} + +function closedlg(){ + gettbldata(); + document.getElementById('dlgcsgames').style.display='none'; +} + +function edit(){ + var udata = tbl.getSelectedData(); + var uid = udata[0].id; + if (udata.length == 0){ return; } + document.getElementById("div_teamguest").style.display = 'block'; + document.getElementById("div_teamhome").style.display = 'block'; + document.getElementById("season").value=udata[0].season; + document.getElementById("division").value=udata[0].division; + document.getElementById("playday").value=udata[0].playday; + document.getElementById("dspplaydate").value=udata[0].dspplaydate; + document.getElementById("teamhome").value=udata[0].teamhome; + document.getElementById("teamguest").value=udata[0].teamguest; + document.getElementById("id_clubhome").value=udata[0].id_clubhome; + document.getElementById("id_clubguest").value=udata[0].id_clubguest; + document.getElementById("uploadclub").value=idclub; + document.getElementById("id").value=udata[0].id; + document.getElementById("upload_teamhome").value=""; + document.getElementById("upload_teamguest").value=""; + document.getElementById("result_teamhome").value=""; + document.getElementById("result_teamguest").value=""; + //if (idclub == ''){ + document.getElementById("sets_teamhome").value=udata[0].sets_teamhome; + document.getElementById("sets_teamguest").value=udata[0].sets_teamguest; + //} + + if (udata[0].validated=="1"){ + + if (idclub == ''){ document.getElementById("validated").checked = true;} + if (idclub != ''){ + document.getElementById("div_fld").style.display= 'block'; + document.getElementById("btnsavegame").style.display='none'; + } + + } else { + document.getElementById("btnsavegame").style.display='inline'; + if (idclub == ''){ document.getElementById("validated").checked = false;} + if (idclub != ''){ document.getElementById("div_fld").style.display= 'none'; } + } + + if (idclub != ''){ + if (idclub != '' && idclub== udata[0].id_clubhome && udata[0].id_clubhome!=udata[0].id_clubguest){ + + document.getElementById("div_teamguest").style.display = 'none'; + } + if (idclub != '' && idclub== udata[0].id_clubguest && udata[0].id_clubhome!=udata[0].id_clubguest){ + + document.getElementById("div_teamhome").style.display = 'none'; + } + if (udata[0].validated == 1){ + document.getElementById("div_teamguest").style.display = 'none'; + document.getElementById("div_teamhome").style.display = 'none'; + + } + } else { + document.getElementById("div_teamguest").style.display = 'block'; + document.getElementById("div_teamhome").style.display = 'block'; + } + + document.getElementById('dlgcsgames').style.display='block'; + return false; +} + +function savegame(){ + + var th = false; + var tg = false; + var rt =/\d+-\d+/; + if (idclub != '' && idclub == document.getElementById('id_clubhome').value){ + var rth = document.getElementById('result_teamhome').value; + var fth = document.getElementById('upload_teamhome').value; + rth = rth.replace(' ','','g'); + //console.log("home do match " + rth.match(rt)); + if (rth != '' && fth != '' && (rth.match(rt))){ + th = true; + + } + } + if (idclub != '' && idclub == document.getElementById('id_clubguest').value){ + var rtg = document.getElementById('result_teamguest').value; + var ftg = document.getElementById('upload_teamguest').value; + rtg = rtg.replace(' ','','g'); + //console.log("guest do match " + rtg.match(rt)); + if (rtg != '' && ftg != '' && (rtg.match(rt))){ + tg = true; + // console.log("guest does not match!"); + + } + } + //console.log("TG" + tg + 'TH' + th); + if (idclub == '' || th || tg){ + getformdata('csgames'); + } + + return false; +} + + +function filesaved(data){ + var sb = document.getElementById("snackbar"); + sb.className="show green"; + sb.innerHTML = 'den Spillstand gouf gespaichert!'; + setTimeout(function(){ sb.className = sb.className.replace("show green", ""); }, 3000); + return false; +} +function getformdata(frmid){ + var frm = document.getElementById("frm_" + frmid); + // console.log(frm); + var frmdata = new FormData(); + // flds ={"text":{},"files":{}}; + for (var i = 0; i < frm.elements.length; i++) { + var field = frm.elements[i]; + + if (field.tagName == "INPUT"){ + //console.log(field.id + " => " + field.type); + if ( field.type == "file"){ + if (field.files[0]){ + frmdata.append(field.id,field.files[0]); + } + } else if (field.type == "checkbox"){ + if (field.checked == true){ + frmdata.append(field.id,1); + } else {frmdata.append(field.id,'');} + } + else { + if (field.value){ + frmdata.append(field.id,field.value); + } + + //flds['text'][field.id] = field.value; + } + } + // console.log(field); + } + for (var pair of frmdata.entries()) { + console.log(pair[0]+ ', ' + pair[1]); + } + req.multipartform("upload.cgi",frmdata,multipartformsaved); +} + +function multipartformsaved(data){ + //console.log(data); + var sb = document.getElementById("snackbar"); + sb.className="show green"; + sb.innerHTML = 'Den Fichier gouf gespaichert!'; + setTimeout(function(){ sb.className = sb.className.replace("show green", ""); }, 3000); + + document.getElementById('dlgcsgames').style.display = 'none'; + if (afterformsaved.action){ + afterformsaved.action(data); + } + gettbldata(); + return false; +} + +function show_gameupload(gfile){ + var ts = Math.round((new Date()).getTime() / 1000); + window.open("../data/championship/[% season%]/" + gfile + '?v='+ ts); +} + +/*[% IF (session.usergroups.search('championship') == 1) %]*/ + +function loadhighscores(){ + var udata = tbl.getSelectedData(); + //console.log(udata); + if (udata.length > 0){ + var uid = udata[0].id; + app.loadpage('[% module %]/highscores.html?id_game=' + udata[0].id,'Highscores'); + } else { + app.loadpage('[% module %]/highscores.html','Highscores'); + } +} + +function cleansets(){ + req.reqdata("POST","db.cgi",{"fn":"cleangamesets","params":document.getElementById("id").value},aftercleansets); +} + +function aftercleansets(data){ + console.log(data); + var sb = document.getElementById("snackbar"); + sb.className="show green"; + sb.innerHTML = 'Den Fichier gouf gespaichert!'; + setTimeout(function(){ sb.className = sb.className.replace("show green", ""); }, 3000); + + document.getElementById('dlgcsgames').style.display = 'none'; + gettbldata(); + return false; +} +/*[% END %]*/ \ No newline at end of file diff --git a/app/tmpl/module/championship/index.tt b/app/tmpl/module/championship/index.tt new file mode 100644 index 0000000..8dcdaac --- /dev/null +++ b/app/tmpl/module/championship/index.tt @@ -0,0 +1,66 @@ +[% PROCESS macro/fields.tt %] +[% inputdisabled = 'readonly' %] +[% IF (session.usergroups.search('championship') == 1) %] +[% inputdisabled = '' %] +[% END %] +
      +
      Championnat
      + + [% IF (session.usergroups.search('championship') == 1) %] + + + [% END %] +
      +
      + diff --git a/app/tmpl/module/championship/ranking.js b/app/tmpl/module/championship/ranking.js new file mode 100644 index 0000000..c9b395b --- /dev/null +++ b/app/tmpl/module/championship/ranking.js @@ -0,0 +1,188 @@ +var tbl = null; +var sel_id_team = null; +var sel_id_division = null; +var sel_id_season = null; +function initpage(){ + tbl = new Tabulator("#tbl_csseasonranking", { + height: "95vh", + layout:"fitColumns", + addRowPos:"top", + selectable:1, + columns:[ + {title:"Saison", field:"season",headerFilter:"input"}, + {title:"Division", field:"division",headerFilter:"input"}, + {title:"Team", field:"team",headerFilter:"input"}, + {title:"gespillt", field:"played"}, + {title:"Sets gewonnen", field:"setswon"}, + {title:"Sets verluer", field:"setslost"}, + {title:"Punkten", field:"points"} + ], +}); + gettbldata(); + getteams(); + getdivisions(); + getseasons(); +} + + + +function gettbldata(){ + req.reqdata("POST","db.cgi",{"get":"seasonranking"},loadtbldata); +} + +function loadtbldata(data){ + if (data && data.sqldata){ + tbl.setData(data.sqldata); + } +} + +function add(){ + var frm = document.querySelectorAll('.data_csseasonranking'); + for (var f in frm){ + if ((frm[f].tagName == 'INPUT') || (frm[f].tagName == 'SELECT')){ + if (frm[f].classList.contains("datefield")){ + frm[f]._flatpickr.setDate(""); + } else { + frm[f].value=""; + // if (frm[f].id == 'teams'){ + // locations_teams.clearStore(); + // } + } + + } + } + document.getElementById('dlgcsseasonranking').style.display='block'; + return false; +} + +function edit(){ + var udata = tbl.getSelectedData(); + var uid = udata[0].id; + //console.log(uid); + req.reqdata("POST","db.cgi",{"get":"seasonranking","filter":"id=" + uid},fillformseasonranking); + document.getElementById('dlgcsseasonranking').style.display='block'; + return false; +} + +function fillformseasonranking(data){ + //console.log(data); + if (data && data.sqldata){ + var frm = document.querySelectorAll('.data_csseasonranking'); + for (var f in frm){ + //console.log(frm[f].classList); + if (data.sqldata[0][frm[f].id]){ + if ((frm[f].tagName == 'INPUT') || (frm[f].tagName == 'SELECT') || frm[f].tagName == 'TEXTAREA'){ + if (frm[f].classList.contains("datefield")){ + frm[f]._flatpickr.setDate(data.sqldata[0][frm[f].id]); + } else if (frm[f].classList.contains("richeditarea")){ + //console.log(frm[f].id + " is richeditarea"); + tinymce.get(frm[f].id).setContent(data.sqldata[0][frm[f].id]); + } else { + frm[f].value=data.sqldata[0][frm[f].id]; + } + + } + } + } + } + return false; +} + +function remove(){ + var udata = tbl.getSelectedData(); + var uid = udata[0].id; + if (confirm("Dass du secher dass du déi ausgewielten Rei läschen wëlls?")){ + req.reqdata("POST","db.cgi",{"del":"1","ident_csseasonranking_id":udata[0].id},gettbldata); + } + return false; +} + +function getteams(){ + req.reqdata("POST","db.cgi",{"get":"teams"},fillteams); + return false; +} + +function fillteams(data){ + var teamlist = []; + var teamidlist = {"":""}; + if (data && data.sqldata){ + for (var i in data.sqldata){ + teamlist.push({value:data.sqldata[i].id,label:data.sqldata[i].team}); + teamidlist[data.sqldata[i].id] = data.sqldata[i].teams; + } + } + if (document.getElementById('id_team').tagName == "SELECT"){ + sel_id_team = new Choices('#id_team',{ + searchEnabled: false, + itemSelectText: 'auswielen...', + choices : teamlist + }); + sel_id_team.setChoiceByValue(document.getElementById("id_team").dataset.selected); + + } else { + document.getElementById('id_team').value = teamidlist[document.getElementById('id_team').value]; + } + return false; +} +function getdivisions(){ + req.reqdata("POST","db.cgi",{"get":"divisions"},filldivisions); + return false; +} +function filldivisions(data){ + var divlist = []; + var dividlist = {"":""}; + if (data && data.sqldata){ + for (var i in data.sqldata){ + divlist.push({value:data.sqldata[i].id,label:data.sqldata[i].division}); + dividlist[data.sqldata[i].id] = data.sqldata[i].division; + } + } + if (document.getElementById('id_division').tagName == "SELECT"){ + sel_id_division = new Choices('#id_division',{ + searchEnabled: false, + itemSelectText: 'auswielen...', + choices : divlist, + shouldSort: false, + shouldSortItems: false + }); + sel_id_division.setChoiceByValue(document.getElementById("id_division").dataset.selected); + + } else { + document.getElementById('id_division').value = dividlist[document.getElementById('id_division').value]; + } + return false; +} +function getseasons(){ + req.reqdata("POST","db.cgi",{"get":"seasons"},fillseasons); + return false; +} +function fillseasons(data){ + + var seasonlist = []; + var seasonidlist = {"":""}; + if (data && data.sqldata){ + for (var i in data.sqldata){ + seasonlist.push({value:data.sqldata[i].id,label:data.sqldata[i].season}); + seasonidlist[data.sqldata[i].id] = data.sqldata[i].season; + } + } + if (document.getElementById('id_season').tagName == "SELECT"){ + sel_id_season = new Choices('#id_season',{ + searchEnabled: false, + itemSelectText: 'auswielen...', + choices : seasonlist, + shouldSort: false, + shouldSortItems: false + }); + sel_id_season.setChoiceByValue(document.getElementById("id_season").dataset.selected); + + } else { + document.getElementById('id_season').value = seasonidlist[document.getElementById('id_season').value]; + } + return false; +} + +function closedlg(){ + gettbldata(); + document.getElementById('dlgcsseasonranking').style.display='none'; +} \ No newline at end of file diff --git a/app/tmpl/module/championship/ranking.tt b/app/tmpl/module/championship/ranking.tt new file mode 100644 index 0000000..ee3e931 --- /dev/null +++ b/app/tmpl/module/championship/ranking.tt @@ -0,0 +1,27 @@ +[% PROCESS macro/fields.tt %] +[% INCLUDE "module/$module/toolbar.tt" %] +
      +
      + diff --git a/app/tmpl/module/championship/seasons.js b/app/tmpl/module/championship/seasons.js new file mode 100644 index 0000000..8bf2ebf --- /dev/null +++ b/app/tmpl/module/championship/seasons.js @@ -0,0 +1,34 @@ +function initpage(){ + tbl = new Tabulator("#tbl_seasons", { + height: "95vh", + layout:"fitColumns", + addRowPos:"top", + selectable:1, + columns:[ + {title:"Saison", field:"season"}, + ], +}); + gettbldata(); +} + +function gettbldata(){ + req.reqdata("POST","db.cgi",{"get":"seasons"},loadtbldata); +} + +function loadtbldata(data){ + if (data && data.sqldata){ + tbl.setData(data.sqldata); + } +} + +function add(){ + +} + +function edit(){ + +} + +function remove(){ + +} \ No newline at end of file diff --git a/app/tmpl/module/championship/seasons.tt b/app/tmpl/module/championship/seasons.tt new file mode 100644 index 0000000..254ff02 --- /dev/null +++ b/app/tmpl/module/championship/seasons.tt @@ -0,0 +1,25 @@ +[% PROCESS macro/fields.tt %] +[% INCLUDE "module/$module/toolbar.tt" %] +
      +
      + \ No newline at end of file diff --git a/app/tmpl/module/championship/teams.js b/app/tmpl/module/championship/teams.js new file mode 100644 index 0000000..68fe756 --- /dev/null +++ b/app/tmpl/module/championship/teams.js @@ -0,0 +1,35 @@ +function initpage(){ + tbl = new Tabulator("#tbl_teams", { + height: "95vh", + layout:"fitColumns", + addRowPos:"top", + selectable:1, + columns:[ + {title:"Equipe", field:"team"}, + {title:"Club", field:"club"}, + ], +}); + gettbldata(); +} + +function gettbldata(){ + req.reqdata("POST","db.cgi",{"get":"teams"},loadtbldata); +} + +function loadtbldata(data){ + if (data && data.sqldata){ + tbl.setData(data.sqldata); + } +} + +function add(){ + +} + +function edit(){ + +} + +function remove(){ + +} \ No newline at end of file diff --git a/app/tmpl/module/championship/teams.tt b/app/tmpl/module/championship/teams.tt new file mode 100644 index 0000000..93265cc --- /dev/null +++ b/app/tmpl/module/championship/teams.tt @@ -0,0 +1,26 @@ +[% PROCESS macro/fields.tt %] +[% INCLUDE "module/$module/toolbar.tt" %] +
      +
      + \ No newline at end of file diff --git a/app/tmpl/module/championship/toolbar.tt b/app/tmpl/module/championship/toolbar.tt new file mode 100644 index 0000000..4a7fa24 --- /dev/null +++ b/app/tmpl/module/championship/toolbar.tt @@ -0,0 +1,27 @@ +
      + +
      + + + + + + + + + + + + +
      +
      + + + diff --git a/app/tmpl/module/clubs/club.js b/app/tmpl/module/clubs/club.js new file mode 100644 index 0000000..c1b548c --- /dev/null +++ b/app/tmpl/module/clubs/club.js @@ -0,0 +1,201 @@ + + + + + +function initpage() { + club.inittable(); + club.initform(); +} +let club = { + tbl:null, + current_club: "[% session.id_club %]" + choices: {"id_president":null,"id_secretary":null,"id_tresorier":null,"location_teams":null,"club_emails":null}, + inittable: function() { + club.tbl = new Tabulator("#tbl_locations", { + selectable:1, + //selectablePersistence:false, // disable rolling selection + //responsiveLayout:"collapse", + //autoResize:true, + addRowPos:"top", + layout:"fitDataStretch", + //resizableRows:true, + columns:[ + {title:"Numm", field:"location"}, + {title:"Address", field:"fulladdress",formatter:"html"}, + {title:"Equipen", field:"teamlist"}, + ], + }); + club.gettbldata(); + }, + initform: function(){ + club.choices["location_teams"] = new SlimSelect({ + select: "#teams", + //[% IF session.usergroups.search('fld') != 1 %] + disabled : true, + //[% END %] + showSearch: false + }); + club.choices["club_emails"] = new SlimSelect({ + select: "#teams", + //[% IF session.usergroups.search('fld') != 1 %] + disabled : true, + //[% END %] + showSearch: false + }); + club.getclubdata(); + }, + gettbldata: function(){ + req.reqdata("POST","db.cgi",{"get":"locationlist","filter":"id_club=" + club.current_club +""},club.loadtbldata); + }, + loadtbldata: function(data){ + if (data && data.sqldata){ + tbl.setData(data.sqldata); + } + }, + getclubdata: function(){ + req.reqdata("POST","db.cgi",{"get":"clublist","filter":"id=" + clubid +""},club.fillformclub); + }, + fillformclub: function(data){ + if (data && data.sqldata){ + form.fillformbydataclass2("clubs"); + var frm = document.querySelectorAll('.data_clubs'); + } + }, + newlocation: function(){ + var frm = document.querySelectorAll('.data_locations'); + for (var f in frm){ + if ((frm[f].tagName == 'INPUT') || (frm[f].tagName == 'SELECT')){ + if (frm[f].classList.contains("datefield")){ + frm[f]._flatpickr.setDate(""); + } else { + frm[f].value=""; + if (frm[f].id == 'teams'){ + locations_teams.clearStore(); + } + } + + } + } + document.getElementById("dlglocation").style.display = 'block'; + return false; + }, + editlocation: function(){ + var selectedData = tbl.getSelectedData(); + //console.log(selectedData); + if (selectedData && selectedData.length > 0){ + req.reqdata("POST","db.cgi",{"get":"locationlist","filter":"id=" + selectedData[0].id +""},showeditlocation); + } else { + showsnackbar("orange","Keen Spilluert ausgewielt!"); + } + + return false; + }, + showeditlocation: function(data){ + if (data && data.sqldata){ + var frm = document.querySelectorAll('.data_locations'); + for (var f in frm){ + //console.log(frm[f].id); + if (data.sqldata[0][frm[f].id]){ + //console.log(frm[f].tagName + " " + frm[f].type + " " + frm[f].id); + if ((frm[f].tagName == 'INPUT') || (frm[f].tagName == 'SELECT')){ + if (frm[f].classList.contains("datefield")){ + frm[f]._flatpickr.setDate(data.sqldata[0][frm[f].id]); + //frm[f].flatpickr.setDate(data.sqldata[0][frm[f].id]) + }else { + frm[f].value=data.sqldata[0][frm[f].id]; + if (frm[f].tagName == 'SELECT'){ + frm[f].dataset.selected = data.sqldata[0][frm[f].id]; + } + if (frm[f].id == 'teams'){ + //console.log("is tagedit!"); + locations_teams.clearStore(); + locations_teams.setValue(JSON.parse(data.sqldata[0][frm[f].id])); + + } + } + + } + } + + } + } + document.getElementById("dlglocation").style.display = 'block'; + }, + getclubmembers: function(){ + req.reqdata("POST","db.cgi",{"get":"memberlist","filter":"id_club=" + clubid +" and status='aktiv'"},fillclubmembers); + }, + fillclubmembers: function(data){ + var xlist = [{"value":"","label":""}]; + var idlist = {"":""}; + if (data && data.sqldata){ + for (var i in data.sqldata){ + xlist.push({value:data.sqldata[i].id,label:data.sqldata[i].surname + ' ' + data.sqldata[i].prename}); + idlist[data.sqldata[i].id] = data.sqldata[i].surname + ' ' + data.sqldata[i].prename + } + } + console.log(xlist); + if (document.getElementById('id_president').tagName == "SELECT"){ + sel_id_president = new Choices('#id_president',{ + searchEnabled: false, + itemSelectText: 'auswielen...', + choices : xlist + }); + sel_id_president.setChoiceByValue(document.getElementById("id_president").dataset.selected); + + } else { + document.getElementById('id_president').value = idlist[document.getElementById('id_president').value]; + } + if (document.getElementById('id_secretaire').tagName == "SELECT"){ + sel_id_secretaire = new Choices('#id_secretaire',{ + searchEnabled: false, + itemSelectText: 'auswielen...', + choices: xlist + }); + sel_id_secretaire.setChoiceByValue(document.getElementById("id_secretaire").dataset.selected); + }else { + document.getElementById('id_secretaire').value = idlist[document.getElementById('id_secretaire').value]; + + } + if (document.getElementById('id_tresorier').tagName == "SELECT"){ + sel_id_tresorier = new Choices('#id_tresorier',{ + searchEnabled: false, + itemSelectText: 'auswielen...', + choices: xlist + }); + sel_id_tresorier.setChoiceByValue(document.getElementById("id_tresorier").dataset.selected); + }else { + document.getElementById('id_tresorier').value = idlist[document.getElementById('id_tresorier').value]; + } +}, + +deletelocation: function(){ + var selectedData = tbl.getSelectedData(); + console.log(selectedData); + if (selectedData && selectedData.length > 0){ + if (confirm("desen Spilluert wierklech läschen?")){ + req.reqdata("POST","db.cgi",{"del":"1","ident_locations_id":selectedData[0].id},afterlocationupdate); + + } + + } else { + showsnackbar("orange","Keen Spilluert ausgewielt!"); + } + + return false; +}, + +savelocation: function(){ + saveform('locations',afterlocationupdate); + document.getElementById('dlglocation').style.display='none'; + return false; +}, + + +afterlocationupdate: function(data){ + gettbldata(); +}, + + + +} \ No newline at end of file diff --git a/app/tmpl/module/clubs/club.tt b/app/tmpl/module/clubs/club.tt new file mode 100644 index 0000000..63d5caa --- /dev/null +++ b/app/tmpl/module/clubs/club.tt @@ -0,0 +1,109 @@ +
      +
      + zerëck +
      Club
      +
      +
      + +[% PROCESS macro/fields.tt %] +[% #INCLUDE "module/$module/toolbar.tt" %] + + +[% puserdef = dksdb.prepare("select ml.id_user from vw_licenselist ll join members ml on (ll.id_member=ml.id) where ll.id_club=? and ml.id_user=? and ll.yearin is not null and ll.yearout is null;") %] +[% FOREACH ruserdef = puserdef.execute(2,session.id) %] +[% IF ruserdef.id_user == session.id %] + [% udef = ruserdef.id_user %] +[% END %] +[% END %] + +[% inputdisabled = 'readonly' %] +[% IF ((session.usergroups.search('club') == 1 && udef == session.id) || (session.usergroups.search('fld') == 1)) %] +[% inputdisabled = '' %] +[% END %] +
      +
      +
      +
      + [% fieldhidden('id','clubs','ident') %] +
      +
      + [% fieldeditbox('club','clubs','Numm vum Club','',inputdisabled) %] +
      +
      +

      Spilluerter

      +
      + [% IF inputdisabled == '' %] + + + + [% END %] +
      +
      +
      +
      +
      +
      +

      Responsabel Memberen

      + [% fieldselectbox('id_president','clubs','President','third',inputdisabled) %] + [% fieldselectbox('id_secretaire','clubs','Sektretär','third',inputdisabled) %] + [% fieldselectbox('id_tresorier','clubs','Trésorier','third',inputdisabled) %] +
      +
      +

      Courrier E-mail-Addressen

      + [% fieldtagbox('emails','clubs','E-Mail-Addressen fir den Courrier','',inputdisabled) %] +

      Courrier Facturations-Address

      + [% fieldeditbox('surname','clubs','Numm','half',inputdisabled) %] + [% fieldeditbox('prename','clubs','Virnumm','half',inputdisabled) %] + [% fieldeditbox('address','clubs','Address','',inputdisabled) %] + [% fieldeditbox('zip','clubs','CP','quarter',inputdisabled) %] + [% fieldeditbox('city','clubs','Uerschaft','half',inputdisabled) %] + [% fieldeditbox('country','clubs','Land','quarter',inputdisabled) %] +
      + [% IF inputdisabled == '' %] +
      + +
      + [% END %] +
      +
      +
      +
      + +
      +
      + +
      + + + + \ No newline at end of file diff --git a/app/tmpl/module/clubs/clubmembers.js b/app/tmpl/module/clubs/clubmembers.js new file mode 100644 index 0000000..4824d5c --- /dev/null +++ b/app/tmpl/module/clubs/clubmembers.js @@ -0,0 +1,53 @@ +function initpage(){ + clubmembers.inittable(); +} + +let clubmembers ={ + tbl: null, + current_club: "[% session.id_club %]", + inittable: function(){ + clubmembers.tbl = new Tabulator("#tbl_clubmembers", { + height: "calc(100vh - 56px)", + selectable:1, + //selectablePersistence:false, // disable rolling selection + //responsiveLayout:"collapse", + //autoResize:true, + //addRowPos:"top", + layout:"fitDataStretch", + resizableRows:true, + columnHeaderSortMulti:false, + rowClick:function(e, row){ + //var data = row.getData(); + //console.log(data); + //idmember=data.id; + //console.log(idmember); + //loadmemberdata(idmember); + //e - the click event object + //row - row component + }, + columns:[ + // {title:"Club", field:"club", sorter:"string",formatter:"html",headerFilter:"input"}, + {title:"Numm", field:"surname", sorter:"string"}, + {title:"Virnumm", field:"prename", sorter:"string"}, + {title:"Lizenz", field:"license", sorter:"string"}, + {title:"E-Mail", field:"username", sorter:"string"}, + + // {title:"Status", field:"status", sorter:"string",headerFilter:"input"}, + ], + //autoColumns:true, + }); + clubmembers.gettbldata(); + }, + gettbldata: function(){ + req.reqdata("POST","db.cgi",{"get":"memberlist","filter":"id_club="+ clubmembers.current_club +" and status='aktiv' "},clubmembers.loadtbldata); + }, + loadtbldata: function(data){ + if (data && data.sqldata){ + clubmembers.tbl.setData(data.sqldata); + } + }, + + initform: function(){ + + } +} \ No newline at end of file diff --git a/app/tmpl/module/clubs/clubmembers.tt b/app/tmpl/module/clubs/clubmembers.tt new file mode 100644 index 0000000..137e74f --- /dev/null +++ b/app/tmpl/module/clubs/clubmembers.tt @@ -0,0 +1,8 @@ +
      +
      + zerëck +
      Club-Memberen
      +
      +
      +
      + \ No newline at end of file diff --git a/app/tmpl/module/clubs/clubs.js b/app/tmpl/module/clubs/clubs.js new file mode 100644 index 0000000..12e871f --- /dev/null +++ b/app/tmpl/module/clubs/clubs.js @@ -0,0 +1,3 @@ +function initpage(){ + +} \ No newline at end of file diff --git a/app/tmpl/module/clubs/clubs.tt b/app/tmpl/module/clubs/clubs.tt new file mode 100644 index 0000000..0650167 --- /dev/null +++ b/app/tmpl/module/clubs/clubs.tt @@ -0,0 +1,8 @@ +
      +
      + zerëck +
      Clubs
      +
      +
      +
      + \ No newline at end of file diff --git a/app/tmpl/module/clubs/cupreg.js b/app/tmpl/module/clubs/cupreg.js new file mode 100644 index 0000000..a8aa1cb --- /dev/null +++ b/app/tmpl/module/clubs/cupreg.js @@ -0,0 +1,6 @@ +function initpage(){ + +} +let cupreg = { + +} \ No newline at end of file diff --git a/app/tmpl/module/clubs/cupreg.tt b/app/tmpl/module/clubs/cupreg.tt new file mode 100644 index 0000000..36540ef --- /dev/null +++ b/app/tmpl/module/clubs/cupreg.tt @@ -0,0 +1,7 @@ +
      +
      + zerëck +
      Club-Umeldung Coupe (Saison YYYY-YYYY)
      +
      +
      + \ No newline at end of file diff --git a/app/tmpl/module/clubs/fldmembers.js b/app/tmpl/module/clubs/fldmembers.js new file mode 100644 index 0000000..6f97161 --- /dev/null +++ b/app/tmpl/module/clubs/fldmembers.js @@ -0,0 +1,52 @@ +function initpage(){ + clubmembers.inittable(); +} + +let clubmembers ={ + tbl: null, + //current_club: "[% session.id_club %]", + inittable: function(){ + clubmembers.tbl = new Tabulator("#tbl_fldmembers", { + height: "calc(100vh - 56px)", + selectable:1, + //selectablePersistence:false, // disable rolling selection + //responsiveLayout:"collapse", + //autoResize:true, + //addRowPos:"top", + layout:"fitDataStretch", + resizableRows:true, + columnHeaderSortMulti:false, + rowClick:function(e, row){ + //var data = row.getData(); + //console.log(data); + //idmember=data.id; + //console.log(idmember); + //loadmemberdata(idmember); + //e - the click event object + //row - row component + }, + columns:[ + {title:"Club", field:"club", sorter:"string",formatter:"html",headerFilter:"input"}, + {title:"Numm", field:"surname", sorter:"string",headerFilter:"input"}, + {title:"Virnumm", field:"prename", sorter:"string",headerFilter:"input"}, + {title:"Lizenz", field:"license", sorter:"string",headerFilter:"input"}, + {title:"E-Mail", field:"username", sorter:"string"}, + {title:"Status", field:"status", sorter:"string",headerFilter:"input"}, + ], + //autoColumns:true, + }); + clubmembers.gettbldata(); + }, + gettbldata: function(){ + req.reqdata("POST","db.cgi",{"get":"memberlist"},clubmembers.loadtbldata); + }, + loadtbldata: function(data){ + if (data && data.sqldata){ + clubmembers.tbl.setData(data.sqldata); + } + }, + + initform: function(){ + + } +} \ No newline at end of file diff --git a/app/tmpl/module/clubs/fldmembers.tt b/app/tmpl/module/clubs/fldmembers.tt new file mode 100644 index 0000000..f581aa0 --- /dev/null +++ b/app/tmpl/module/clubs/fldmembers.tt @@ -0,0 +1,8 @@ +
      +
      + zerëck +
      Club-Memberen
      +
      +
      +
      + \ No newline at end of file diff --git a/app/tmpl/module/clubs/seasonclubreg.js b/app/tmpl/module/clubs/seasonclubreg.js new file mode 100644 index 0000000..078b8f5 --- /dev/null +++ b/app/tmpl/module/clubs/seasonclubreg.js @@ -0,0 +1,7 @@ +function initpage(){ + +} + +let clubreg = { + +} \ No newline at end of file diff --git a/app/tmpl/module/clubs/seasonclubreg.tt b/app/tmpl/module/clubs/seasonclubreg.tt new file mode 100644 index 0000000..ffa342e --- /dev/null +++ b/app/tmpl/module/clubs/seasonclubreg.tt @@ -0,0 +1,7 @@ +
      +
      + zerëck +
      Club-Umeldung Saison YYYY-YYYY
      +
      +
      + \ No newline at end of file diff --git a/app/tmpl/module/documents.tt b/app/tmpl/module/documents.tt new file mode 100644 index 0000000..2c84b0e --- /dev/null +++ b/app/tmpl/module/documents.tt @@ -0,0 +1,57 @@ +[% PROCESS macro/fields.tt %] +[% USE date %] +[% vstamp=date.format(date.now, '%d%m%Y%H') %] +
      +
      + zerëck +
      Dokumenter
      + [% IF session.usergroups.search('fld') == 1 %] + + [% END %] +
      +
      +
      +
        + [% FOREACH doc=dksdb.query("select * from vw_documentlist order by filename;") %] +
      • + [% IF session.usergroups.search('fld') == 1 %] + + + [% END %] + + +
        + [% doc.filename %]
        + [% doc.description %] +
        +
      • + [% END %] +
      +
      + +[% INCLUDE block/dlguploadfile.tt %] + + \ No newline at end of file diff --git a/app/tmpl/module/documents/documents.js b/app/tmpl/module/documents/documents.js new file mode 100644 index 0000000..4f28825 --- /dev/null +++ b/app/tmpl/module/documents/documents.js @@ -0,0 +1,98 @@ +function initpage(){ + documents.init(); +} + +let documents = { + tbl: null, + init: function(){ + + tinymce.init({ + selector: '.richeditarea', + branding: false, + menubar:false, + statusbar: false, + forced_root_block : '', + plugins: 'searchreplace autolink directionality visualblocks visualchars advlist lists textcolor colorpicker textpattern', + toolbar: 'bold italic underline strikethrough forecolor | link | alignleft aligncenter alignright alignjustify | numlist bullist outdent indent | removeformat', + image_advtab: true + // //console.log(editor.getContent()); + }); + documents.tbl = new Tabulator("#tbl_documents", { + height: "calc(100vh - 125px)", + selectable:1, + selectablePersistence:false, // disable rolling selection + // responsiveLayout:"collapse", + autoResize:true, + layout:"fitDataFill", + resizableRows:true, + columnHeaderSortMulti:false, + columns:[ + {title:"Thumb", field:"thumbnail",headerSort: false, formatter:"image", formatterParams:{height: 64}}, + {title:"Fichier", field:"filename", headerSort: false, formatter:"link"}, + {title:"Beschreiwung", field:"description",headerSort: false, formatter: "html"} + ] + }); + //documents.gettbldata(); + }, + // gettbldata: function (){ + // req.reqdata("POST","db.cgi",{"get":"documentlist","filter":"folder='documents' "},documents.loadtbldata); + // }, + // loadtbldata:function (data){ + // //console.logconsole.log(data) + // if (data && data.sqldata){ + // documents.tbl.setData(data.sqldata); + // } + // }, + afterformsaved : function (){ + app.loadpage('module/[% module %]/index.html'); + return false; + }, + remove: function(id){ + if (confirm("Bass du secher dass du dëst Document läschen wëlls?")){ + req.reqdata("POST","db.cgi",{"del":"1","ident_documents_id":id},documents.closeeditdialog); + } + return false; + }, + edit: function(id){ + req.reqdata("POST","db.cgi",{"get":"documents","filter":"id='"+ id + "'"},documents.openedit); + return false; + }, + add: function(){ + opendlgfileupload('documents','download_document',''); + return false; + }, + openedit: function(data){ + //console.log(data); + if (data && data.sqldata){ + var frm = document.querySelectorAll('.data_documents'); + for (var f in frm){ + //console.log(frm[f].classList); + if (data.sqldata[0][frm[f].id]){ + if ((frm[f].tagName == 'INPUT') || (frm[f].tagName == 'SELECT') || frm[f].tagName == 'TEXTAREA'){ + if (frm[f].classList.contains("datefield")){ + frm[f]._flatpickr.setDate(data.sqldata[0][frm[f].id]); + } else if (frm[f].classList.contains("richeditarea")){ + //console.log(frm[f].id + " is richeditarea"); + tinymce.get(frm[f].id).setContent(data.sqldata[0][frm[f].id]); + } else { + frm[f].value=data.sqldata[0][frm[f].id]; + } + + } + } + } + document.getElementById('dlgeditdocument').style.display='block'; + } + return false; +}, +closeeditdialog: function(){ + document.getElementById('dlgeditdocument').style.display='none'; + app.loadpage('module/[% module %]/index.html'); +}, +thumbformatter: function(cell, formatterParams, onRendered){ + if (cell.getValue()){ + return ''; + } + return ''; +} +} \ No newline at end of file diff --git a/app/tmpl/module/documents/index.js b/app/tmpl/module/documents/index.js new file mode 100644 index 0000000..0895172 --- /dev/null +++ b/app/tmpl/module/documents/index.js @@ -0,0 +1,60 @@ +function initpage(){ + tinymce.init({ + selector: '.richeditarea', + branding: false, + menubar:false, + statusbar: false, + forced_root_block : '', + plugins: 'searchreplace autolink directionality visualblocks visualchars advlist lists textcolor colorpicker textpattern', + toolbar: 'bold italic underline strikethrough forecolor | link | alignleft aligncenter alignright alignjustify | numlist bullist outdent indent | removeformat', + image_advtab: true + // //console.log(editor.getContent()); + }); +} + +afterformsaved = function (){ + parent.admin.loadpage('module/[% module %]/index.html'); + return false; +} + +function deletedocument(id){ + if (confirm("Bass du secher dass du dëst Document läschen wëlls?")){ + req.reqdata("POST","db.cgi",{"del":"1","ident_documents_id":id},closeeditdialog); + } + return false; +} + +function editdocument(id){ + req.reqdata("POST","db.cgi",{"get":"documents","filter":"id="+ id},openedit); + return false; +} + +function openedit(data){ + //console.log(data); + if (data && data.sqldata){ + var frm = document.querySelectorAll('.data_documents'); + for (var f in frm){ + //console.log(frm[f].classList); + if (data.sqldata[0][frm[f].id]){ + if ((frm[f].tagName == 'INPUT') || (frm[f].tagName == 'SELECT') || frm[f].tagName == 'TEXTAREA'){ + if (frm[f].classList.contains("datefield")){ + frm[f]._flatpickr.setDate(data.sqldata[0][frm[f].id]); + } else if (frm[f].classList.contains("richeditarea")){ + //console.log(frm[f].id + " is richeditarea"); + tinymce.get(frm[f].id).setContent(data.sqldata[0][frm[f].id]); + } else { + frm[f].value=data.sqldata[0][frm[f].id]; + } + + } + } + } + document.getElementById('dlgeditdocument').style.display='block'; + } + return false; +} + +function closeeditdialog(){ + document.getElementById('dlgeditdocument').style.display='none'; + parent.admin.loadpage('module/[% module %]/index.html'); +} \ No newline at end of file diff --git a/app/tmpl/module/events.tt b/app/tmpl/module/events.tt new file mode 100644 index 0000000..d362f2c --- /dev/null +++ b/app/tmpl/module/events.tt @@ -0,0 +1,55 @@ +[% PROCESS macro/fields.tt %] +
      +
      + zerëck +
      Event-Kalenner
      + + + + + + +
      +
      +
      + + + + + + \ No newline at end of file diff --git a/app/tmpl/module/events/events.js b/app/tmpl/module/events/events.js new file mode 100644 index 0000000..6e61572 --- /dev/null +++ b/app/tmpl/module/events/events.js @@ -0,0 +1,229 @@ + +let tbl = null; +let sel_id_eventgroup = null; + +function initpage(){ + + events.inittable(); + events.initform(); +} + +let events = { + tbl: null, + choices:{"id_eventgroup":{},"id_season":{}}, + initform: function(){ + flatpickr(".datefield",{altInput: true, + altFormat: "d.m.Y", + dateFormat: "Y-m-d", + "locale": "fr", + }); + tinymce.init({ + selector: '.richeditarea', + plugins: 'paste importcss searchreplace autolink directionality code visualblocks visualchars link charmap advlist lists textpattern noneditable charmap emoticons', + + menubar: false, + statusbar: false, + toolbar: 'undo redo | bold italic underline strikethrough | fontsizeselect | alignleft aligncenter alignright alignjustify | numlist bullist | forecolor removeformat | charmap emoticons | link', + toolbar_sticky: true, + height: 150, + language: 'de', + content_css: [ + '[% abspath %][% staticpath %]css/theme.css' + ], + forced_root_block : '', + branding: false, + importcss_append: true, + contextmenu: "link", + }); + // sel_id_eventgroup = new Choices('#id_eventgroup',{ + // searchEnabled: false, + // itemSelectText: 'auswielen...', + // removeItemButton: true, + // choices :[] + // }); + events.getseasons(); + events.getcategories(); + }, + inittable: function(){ + + events.tbl = new Tabulator("#tbl_calendar", { + headerFilterPlaceholder:"filter...", + height: "calc(100vh - 125px)", + selectable:1, + selectablePersistence:false, // disable rolling selection + // responsiveLayout:"collapse", + autoResize:true, + layout:"fitColumns", + resizableRows:true, + columnHeaderSortMulti:false, + columns:[ + {title:"Saison", field:"season", sorter:"string",headerFilter:"input", width: 110}, + {title:"Kategorie", field:"groupname", sorter:"string",headerFilter:"input",width: 130}, + {title:"vun", field:"dspstartdate", sorter:"string",headerFilter:"input", width: 115}, + {title:"bis", field:"dspenddate", sorter:"string",headerFilter:"input", width: 115}, + {title:"Titel", field:"title", sorter:"string",headerFilter:"input"}, + {title:"Beschreiwung", field:"description",formatter:"html", sorter:"string",headerFilter:"input"}, + ], + initialHeaderFilter:[ + {field:"season", value:"[% season %]"} //set the initial value of the header filter to "red" + ] + + //autoColumns:true, + }); + + events.gettbldata(); + }, + gettbldata: function (){ + req.reqdata("POST","db.cgi",{"get":"eventlist"},events.loadtbldata); + }, + loadtbldata:function (data){ + //console.logconsole.log(data) + if (data && data.sqldata){ + events.tbl.setData(data.sqldata); + } + }, + closeeditdialog: function(){ + gettbldata(); + document.getElementById('dlgevents').style.display='none'; + gettbldata(); + }, + add:function (){ + let frm = document.querySelectorAll('.data_events'); + for (let f in frm){ + if ((frm[f].tagName == 'INPUT') || (frm[f].tagName == 'SELECT') || (frm[f].tagName == 'TEXTAREA')){ + if (frm[f].classList.contains("datefield")){ + if (frm[f]._flatpickr){ + frm[f]._flatpickr.clear(); + } + } else if (frm[f].classList.contains("richeditarea")){ + //console.log(frm[f].id + " is richeditarea"); + tinymce.get(frm[f].id).setContent(""); + }else { + frm[f].value=""; + + } + + } + } + + + document.getElementById("dlgevents").style.display = 'block'; + + }, + edit: function (){ + let udata = events.tbl.getSelectedData(); + let uid = udata[0].id; + //console.log(uid); + req.reqdata("POST","db.cgi",{"get":"eventlist","filter":"id=" + uid},events.fillformevents); + + }, + + fillformevents:function (data){ + //console.log(data); + if (data && data.sqldata){ + let frm = document.querySelectorAll('.data_events'); + for (let f in frm){ + //console.log(frm[f].classList); + if (data.sqldata[0][frm[f].id]){ + if ((frm[f].tagName == 'INPUT') || (frm[f].tagName == 'SELECT') || frm[f].tagName == 'TEXTAREA'){ + if (frm[f].classList.contains("datefield")){ + frm[f]._flatpickr.setDate(data.sqldata[0][frm[f].id]); + } else if (frm[f].classList.contains("richeditarea")){ + // console.log(frm[f].id + " is richeditarea"); + tinymce.get(frm[f].id).setContent(data.sqldata[0][frm[f].id]); + } else if (frm[f].id == 'id_eventgroup'){ + sel_id_eventgroup.setChoiceByValue(data.sqldata[0][frm[f].id]); + } + else { + frm[f].value=data.sqldata[0][frm[f].id]; + } + + } + } + } + document.getElementById("dlgevents").style.display = 'block'; + + + } + }, + + + remove: function (){ + let udata = events.tbl.getSelectedData(); + let uid = udata[0].id; + //console.log(tbl.getSelectedData()); + if (confirm("Bass du secher dass déi ausgewielten Event läschen wells?")){ + req.reqdata("POST","db.cgi",{"del":"1","ident_event_id":udata[0].id},events.gettbldata); + } + }, + getseasons:function (){ + req.reqdata("POST","db.cgi",{"get":"seasons"},events.fillseasons); + return false; + }, + + fillseasons: function (data){ + + let seasonlist = []; + let seasonidlist = {"":""}; + if (data && data.sqldata){ + for (let i in data.sqldata){ + seasonlist.push({value:data.sqldata[i].season,label:data.sqldata[i].season}); + seasonidlist[data.sqldata[i].id] = data.sqldata[i].season; + } + } + if (document.getElementById('season').tagName == "SELECT"){ + sel_id_season = new Choices('#season',{ + searchEnabled: false, + itemSelectText: 'auswielen...', + choices : seasonlist, + shouldSort: false, + shouldSortItems: false + }); + sel_id_season.setChoiceByValue(document.getElementById("season").dataset.selected); + + } else { + document.getElementById('season').value = seasonidlist[document.getElementById('season').value]; + } + return false; + }, + + getcategories: function (){ + req.reqdata("POST","db.cgi",{"get":"eventgroups"},events.fillcategories); + return false; + }, + + fillcategories:function (data){ + + let catlist = []; + if (data && data.sqldata){ + for (let i in data.sqldata){ + catlist.push({value:data.sqldata[i].id,label:data.sqldata[i].groupname}); + } + } + sel_id_eventgroup.setChoices(catlist, 'value', 'label', true); + + return false; + } +} + +// let seasons = { +// tbl: null, +// init: function(){ + +// }, +// gettbldata: function (){ +// req.reqdata("POST","db.cgi",{"get":"seasons"},seasons.loadtbldata); +// }, +// loadtbldata:function (data){ +// //console.logconsole.log(data) +// if (data && data.sqldata){ +// events.tbl.setData(data.sqldata); +// } +// }, + +// } + + + + + diff --git a/app/tmpl/module/events/vacancies.js b/app/tmpl/module/events/vacancies.js new file mode 100644 index 0000000..148225e --- /dev/null +++ b/app/tmpl/module/events/vacancies.js @@ -0,0 +1,204 @@ + + +let vacanies = { + +} +// var tbl = null; +// var sel_id_eventgroup = null; +// function initpage(){ +// flatpickr(".datefield",{altInput: true, +// altFormat: "d.m.Y", +// dateFormat: "Y-m-d", +// "locale": "fr", +// }); +// sel_id_eventgroup = new Choices('#id_eventgroup',{ +// searchEnabled: false, +// itemSelectText: 'auswielen...', +// removeItemButton: true, +// choices :[] +// }); + +// tinymce.init({ +// selector: '.richeditarea', +// plugins: 'paste importcss searchreplace autolink autoresize directionality code visualblocks visualchars link charmap advlist lists textpattern noneditable charmap emoticons', + +// menubar: false, +// statusbar: false, +// toolbar: 'undo redo | bold italic underline strikethrough | fontsizeselect | alignleft aligncenter alignright alignjustify | numlist bullist | forecolor removeformat | charmap emoticons | link', +// toolbar_sticky: true, +// min_height: 350, +// language: 'de', +// content_css: [ +// '[% abspath %]css/w3pro.css' +// ], +// forced_root_block : '', +// branding: false, +// importcss_append: true, +// contextmenu: "link", +// }); + +// tbl = new Tabulator("#tbl_calendar", { +// headerFilterPlaceholder:"filter...", +// height: "93vh", +// selectable:1, +// selectablePersistence:false, // disable rolling selection +// responsiveLayout:"collapse", +// autoResize:true, +// layout:"fitColumns", +// resizableRows:true, +// columnHeaderSortMulti:false, +// columns:[ +// {title:"Saison", field:"season", sorter:"string",headerFilter:"input", width: 110}, +// {title:"Kategorie", field:"groupname", sorter:"string",headerFilter:"input",width: 130}, +// {title:"vun", field:"dspstartdate", sorter:"string",headerFilter:"input", width: 115}, +// {title:"bis", field:"dspenddate", sorter:"string",headerFilter:"input", width: 115}, +// {title:"Titel", field:"title", sorter:"string",headerFilter:"input"}, +// {title:"Beschreiwung", field:"description",formatter:"html", sorter:"string",headerFilter:"input"}, +// ], +// initialHeaderFilter:[ +// {field:"season", value:"[% season %]"} //set the initial value of the header filter to "red" +// ] + +// //autoColumns:true, +// }); +// getseasons(); +// getcategories(); +// gettbldata(); +// } + +// function gettbldata(){ +// req.reqdata("POST","db.cgi",{"get":"eventlist"},loadtbldata); +// } + +// function loadtbldata(data){ +// //console.logconsole.log(data) +// if (data && data.sqldata){ +// tbl.setData(data.sqldata); +// } +// } + +// function closeeditdialog(){ +// gettbldata(); +// document.getElementById('dlgevents').style.display='none'; +// gettbldata(); +// } + +// function add(){ +// var frm = document.querySelectorAll('.data_events'); +// for (var f in frm){ +// if ((frm[f].tagName == 'INPUT') || (frm[f].tagName == 'SELECT') || (frm[f].tagName == 'TEXTAREA')){ +// if (frm[f].classList.contains("datefield")){ +// if (frm[f]._flatpickr){ +// frm[f]._flatpickr.clear(); +// } +// } else if (frm[f].classList.contains("richeditarea")){ +// //console.log(frm[f].id + " is richeditarea"); +// tinymce.get(frm[f].id).setContent(""); +// }else { +// frm[f].value=""; + +// } + +// } +// } + + +// document.getElementById("dlgevents").style.display = 'block'; + +// } + +// function edit(){ +// var udata = tbl.getSelectedData(); +// var uid = udata[0].id; +// //console.log(uid); +// req.reqdata("POST","db.cgi",{"get":"eventlist","filter":"id=" + uid},fillformevents); + +// } + +// function fillformevents(data){ +// //console.log(data); +// if (data && data.sqldata){ +// var frm = document.querySelectorAll('.data_events'); +// for (var f in frm){ +// //console.log(frm[f].classList); +// if (data.sqldata[0][frm[f].id]){ +// if ((frm[f].tagName == 'INPUT') || (frm[f].tagName == 'SELECT') || frm[f].tagName == 'TEXTAREA'){ +// if (frm[f].classList.contains("datefield")){ +// frm[f]._flatpickr.setDate(data.sqldata[0][frm[f].id]); +// } else if (frm[f].classList.contains("richeditarea")){ +// // console.log(frm[f].id + " is richeditarea"); +// tinymce.get(frm[f].id).setContent(data.sqldata[0][frm[f].id]); +// } else if (frm[f].id == 'id_eventgroup'){ +// sel_id_eventgroup.setChoiceByValue(data.sqldata[0][frm[f].id]); +// } +// else { +// frm[f].value=data.sqldata[0][frm[f].id]; +// } + +// } +// } +// } +// document.getElementById("dlgevents").style.display = 'block'; + + +// } +// } + + +// function remove(){ +// var udata = tbl.getSelectedData(); +// var uid = udata[0].id; +// //console.log(tbl.getSelectedData()); +// if (confirm("Bass du secher dass déi ausgewielten Event läschen wells?")){ +// req.reqdata("POST","db.cgi",{"del":"1","ident_event_id":udata[0].id},gettbldata); +// } +// } + +// function getseasons(){ +// req.reqdata("POST","db.cgi",{"get":"seasons"},fillseasons); +// return false; +// } + +// function fillseasons(data){ + +// var seasonlist = []; +// var seasonidlist = {"":""}; +// if (data && data.sqldata){ +// for (var i in data.sqldata){ +// seasonlist.push({value:data.sqldata[i].season,label:data.sqldata[i].season}); +// seasonidlist[data.sqldata[i].id] = data.sqldata[i].season; +// } +// } +// if (document.getElementById('season').tagName == "SELECT"){ +// sel_id_season = new Choices('#season',{ +// searchEnabled: false, +// itemSelectText: 'auswielen...', +// choices : seasonlist, +// shouldSort: false, +// shouldSortItems: false +// }); +// sel_id_season.setChoiceByValue(document.getElementById("season").dataset.selected); + +// } else { +// document.getElementById('season').value = seasonidlist[document.getElementById('season').value]; +// } +// return false; +// } + +// function getcategories(){ +// req.reqdata("POST","db.cgi",{"get":"eventgroups"},fillcategories); +// return false; +// } + +// function fillcategories(data){ + +// var catlist = []; +// if (data && data.sqldata){ +// for (var i in data.sqldata){ +// catlist.push({value:data.sqldata[i].id,label:data.sqldata[i].groupname}); +// } +// } +// sel_id_eventgroup.setChoices(catlist, 'value', 'label', true); + +// return false; +// } \ No newline at end of file diff --git a/app/tmpl/module/forms.tt b/app/tmpl/module/forms.tt new file mode 100644 index 0000000..9706767 --- /dev/null +++ b/app/tmpl/module/forms.tt @@ -0,0 +1,14 @@ +[% PROCESS macro/fields.tt %] +
      +
      + + + + + + +
      +
      +
      +
      +
      \ No newline at end of file diff --git a/app/tmpl/module/forms/forms.js b/app/tmpl/module/forms/forms.js new file mode 100644 index 0000000..f27f864 --- /dev/null +++ b/app/tmpl/module/forms/forms.js @@ -0,0 +1,50 @@ +var tbl = null; +function initpage(){ + tbl = new Tabulator("#tbl_transfer", { + height: "100vh", + selectable:1, + selectablePersistence:false, // disable rolling selection + responsiveLayout:"collapse", + autoResize:true, + addRowPos:"top", + layout:"fitColumns", + resizableRows:true, + columnHeaderSortMulti:false, + columns:[ + {title:"Club", field:"newclub",headerFilter:"input"}, + {title:"Numm", field:"surname",headerFilter:"input"}, + {title:"Virnumm", field:"prename",headerFilter:"input"}, + {title:"Type Demande", field:"documenttype",headerFilter:"input"}, + {title:"Datum", field:"statusdate", sorter:"date"}, + {title:"Status", field:"status", sorter:"string",formatter:"html"} + ] +}); +gettbldata(); +} + +function gettbldata(){ + req.reqdata("POST","db.cgi",{"get":"transferlist"},loadtbldata); +} + +function loadtbldata(data){ + if (data && data.sqldata){ + tbl.setData(data.sqldata); + } +} + + + +function edit(){ + var udata = tbl.getSelectedData(); + //var uid = udata[0].id; + console.log(udata); + app.loadpage('module/[% module %]/transfer.html?doctype=' + udata[0].documenttype + "&id=" + udata[0].id); +} + +function remove(){ + var udata = tbl.getSelectedData(); + var uid = udata[0].id; + if (confirm("Bass du secher dass den ausgewielten Transfer läschen wells?")){ + req.reqdata("POST","db.cgi",{"del":"1","ident_transfer_id":udata[0].id},gettbldata); + } +} \ No newline at end of file diff --git a/app/tmpl/module/index.tt b/app/tmpl/module/index.tt new file mode 100644 index 0000000..888f16e --- /dev/null +++ b/app/tmpl/module/index.tt @@ -0,0 +1,60 @@ + +
      +
      +
      + +
      Lëtzebuerger Electronique Darts Federation
      + Logout +
      +
      +
      +
      +
      +
      +
      +
      + Site +
      + +
      + +
      +
      +

      Administration

      +
      + +
      + +
      +
      +

      Access

      +
      +
      + Users +
      +
      + + +
      + \ No newline at end of file diff --git a/app/tmpl/module/index/index.js b/app/tmpl/module/index/index.js new file mode 100644 index 0000000..12e871f --- /dev/null +++ b/app/tmpl/module/index/index.js @@ -0,0 +1,3 @@ +function initpage(){ + +} \ No newline at end of file diff --git a/app/tmpl/module/licenses/index.js b/app/tmpl/module/licenses/index.js new file mode 100644 index 0000000..12e871f --- /dev/null +++ b/app/tmpl/module/licenses/index.js @@ -0,0 +1,3 @@ +function initpage(){ + +} \ No newline at end of file diff --git a/app/tmpl/module/licenses/index.tt b/app/tmpl/module/licenses/index.tt new file mode 100644 index 0000000..9c731f6 --- /dev/null +++ b/app/tmpl/module/licenses/index.tt @@ -0,0 +1,33 @@ + +
      +
      + zerëck +
      Lizenzen
      +
      +
      + +
      +
      +
        +[% FOREACH clubs=dksdb.query("select cl.id,cl.club,replace(cl.club,'''','\\''') as clublink,cl.link,cl.logo,count(distinct(lic.id)) as licenses,count(distinct(cst.id)) as teams +from vw_clublist cl +left join vw_licenselist lic on (cl.id=lic.id_club) +left join vw_locationlist loc on (cl.id = loc.id_club) +left join (select ct.* from csteams ct join csseasonranking csr on (csr.id_team=ct.id and csr.id_season=2)) cst on (cl.id=cst.id_club) +where lic.status='aktiv' and (cl.status is null or cl.status='individual') +group by cl.id,cl.club,cl.link,cl.logo order by cl.club;"); %] + +
      • + Logo [% clubs.club %] +
        + [% clubs.club %] + Lizenzen: [% clubs.licenses %] Équipen: [% clubs.teams %] +
        +
      • + +[% END %] +
      +
      +
      + + diff --git a/app/tmpl/module/licenses/licenserequests.js b/app/tmpl/module/licenses/licenserequests.js new file mode 100644 index 0000000..e69de29 diff --git a/app/tmpl/module/licenses/licenserequests.tt b/app/tmpl/module/licenses/licenserequests.tt new file mode 100644 index 0000000..ffb2b1d --- /dev/null +++ b/app/tmpl/module/licenses/licenserequests.tt @@ -0,0 +1,7 @@ +
      +
      + zerëck +
      Lizenz-Ufroën
      +
      +
      + \ No newline at end of file diff --git a/app/tmpl/module/licenses/licenses.js b/app/tmpl/module/licenses/licenses.js new file mode 100644 index 0000000..12e871f --- /dev/null +++ b/app/tmpl/module/licenses/licenses.js @@ -0,0 +1,3 @@ +function initpage(){ + +} \ No newline at end of file diff --git a/app/tmpl/module/licenses/licenses.tt b/app/tmpl/module/licenses/licenses.tt new file mode 100644 index 0000000..1004fd2 --- /dev/null +++ b/app/tmpl/module/licenses/licenses.tt @@ -0,0 +1,45 @@ +
      +
      + +[% qclubs = dksdb.prepare("select ml.id,ml.link,ml.prename,ml.surname,ml.status,ll.license,ml.nationality,to_char(ml.birthday,'DD.MM.YYYY') as dspbirthday,ml.profile_photo,extract(epoch from ml.modified) as modified from vw_licenselist ll join members ml on (ll.id_member=ml.id) where ll.id_club=? and ll.yearin is not null and ll.yearout is null +order by ml.surname,prename;") %] +[% FOREACH cl = qclubs.execute(params.id) %] + +
      +

      [% cl.prename %] [% cl.surname %]

      +
      +
      + + [% IF cl.status == "suspended" %][% END %] + + + + +
      License suspendue
      Lizenz: [% cl.license %]
      Nationalitéit: [% cl.nationality %]
      Geburtsdatum: [% cl.dspbirthday %]
      +
      +
      + + [% licenses = dksdb.prepare("select lic.*,cl.club,cl.status as clubstatus from licenses lic left join clubs cl on (lic.id_club=cl.id) where id_member=? order by lic.yearin desc,lic.yearout desc;") %] + [% FOREACH lic = dksdb.execute(cl.id) %] + + + + + + [% END %] + +
      [% lic.club %][% lic.yearin %] [% IF lic.yearout %] - [% lic.yearout %][% END %]
      +
      +
      +
      + +[% END %] +
      +
      + + + diff --git a/app/tmpl/module/licenses/members.js b/app/tmpl/module/licenses/members.js new file mode 100644 index 0000000..d3ce2ad --- /dev/null +++ b/app/tmpl/module/licenses/members.js @@ -0,0 +1,119 @@ +var tbl = null; +var tbllic = null; +var idmember=null; +var iduser="[% session.id %]"; +function initpage(){ + + flatpickr(".datefield",{altInput: true, + altFormat: "d.m.Y", + dateFormat: "Y-m-d", + "locale": "fr", + }); + tbl = new Tabulator("#tbl_members", { + height: "100vh", + selectable:1, + selectablePersistence:false, // disable rolling selection + responsiveLayout:"collapse", + autoResize:true, + addRowPos:"top", + layout:"fitColumns", + resizableRows:true, + columnHeaderSortMulti:false, + rowClick:function(e, row){ + var data = row.getData(); + //console.log(data); + idmember=data.id; + //console.log(idmember); + loadmemberdata(idmember); + //e - the click event object + //row - row component + }, + columns:[ + // {title:"Club", field:"club", sorter:"string",formatter:"html",headerFilter:"input"}, + {title:"Numm", field:"surname", sorter:"string",headerFilter:"input"}, + {title:"Virnumm", field:"prename", sorter:"string",headerFilter:"input"}, + // {title:"Status", field:"status", sorter:"string",headerFilter:"input"}, + ], + initialHeaderFilter:[ + {field:"status", value:"active"} //set the initial value of the header filter to "red" + ] + + //autoColumns:true, +}); +tbllic = new Tabulator("#tbl_license", { + selectable:1, + selectablePersistence:false, // disable rolling selection + responsiveLayout:"collapse", + autoResize:true, + addRowPos:"top", + layout:"fitColumns", + resizableRows:true, + // rowClick:function(e, row){ + // var data = row.getData(); + // console.log(data); + // idmember=row.id; + // loadmemberdata(row.id); + // //e - the click event object + // //row - row component + // }, + columns:[ + {title:"Lizenz", field:"license", sorter:"number"}, + {title:"vun", field:"yearin", sorter:"number"}, + {title:"bis", field:"yearout", sorter:"number"}, + {title:"Club", field:"club", sorter:"string",formatter:"html"} + ], + //autoColumns:true, +}); + gettbldata(); +} + +function gettbldata(){ + req.reqdata("POST","db.cgi",{"get":"memberlist","filter":"id_club in (select id_club from vw_memberlist where id="+ iduser +") "},loadtbldata); +} + +function loadtbldata(data){ + if (data && data.sqldata){ + tbl.setData(data.sqldata); + } +} + +function loadmemberdata(id){ + //console.log(id); + req.reqdata("POST","db.cgi",{"get":"memberdata","filter":"id="+id},fillformmember); + req.reqdata("POST","db.cgi",{"get":"licenselist","filter":"id_member="+id},filllicensetable); + req.reqdata("POST","db.cgi",{"get":"userstatus","filter":"id="+id},filluserstaus); +} + +function fillformmember(data){ + //console.log(data); + if (data && data.sqldata){ + var frm = document.querySelectorAll('.data_members'); + for (var f in frm){ + //console.log(frm[f].id); + if (data.sqldata[0][frm[f].id]){ + //console.log(frm[f].tagName + " " + frm[f].type + " " + frm[f].id); + if ((frm[f].tagName == 'INPUT') || (frm[f].tagName == 'SELECT')){ + if (frm[f].classList.contains("datefield")){ + frm[f]._flatpickr.setDate(data.sqldata[0][frm[f].id]); + //frm[f].flatpickr.setDate(data.sqldata[0][frm[f].id]) + } else { + frm[f].value=data.sqldata[0][frm[f].id]; + } + + } + } + } + } +} + +function filllicensetable(data){ + //console.log("License DATA"); + //console.log(data.sqldata); + if (data && data.sqldata){ + tbllic.setData(data.sqldata); + } +} + +function filluserstaus(data){ + +} diff --git a/app/tmpl/module/licenses/members.tt b/app/tmpl/module/licenses/members.tt new file mode 100644 index 0000000..eb4939f --- /dev/null +++ b/app/tmpl/module/licenses/members.tt @@ -0,0 +1,74 @@ + +[% PROCESS macro/fields.tt %] +
      +
      + zerëck +
      Club-Memberen
      +
      +
      +
      + +
      +
      +
      +
      +
      + [% #tabletoolbar('member') %] +
      +
      +

      Perséinlech Donnéen

      +
      + [% fieldeditbox('surname','members','Numm','half','') %] + [% fieldeditbox('prename','members','Virnumm','half','') %] + [% fieldeditbox('address','members','Address','','') %] + [% fieldeditbox('zip','members','CP','quarter','') %] + [% fieldeditbox('city','members','Uerschaft','threequarter','') %] + [% fieldeditbox('country','members','Land','third','') %] + [% fieldeditbox('email','members','E-Mail','third','','') %] + [% fieldeditbox('phone','members','Telefon','third','') %] + [% fieldeditbox('nationality','members','Nationalitéit','third','') %] + [% fielddatebox('birthday','members','Gebuertsdatum','third','') %] + [% fielddatebox('entrydate','members','Datum 1st Lizenz','third','') %] +
      +
      +
      +

      Photo

      +
      +
      +
      +

      Validéiert Photo

      + +
      + +
      +

      Nei Photo

      + + + +
      +
      +
      +
      +
      +

      Benotzer-Kont

      +
      +
      Status
      + + + +
      +
      +
      +

      Lizenz

      +
      +
      +
      +
      +
      +
      + + \ No newline at end of file diff --git a/app/tmpl/module/licenses/newlicense.js b/app/tmpl/module/licenses/newlicense.js new file mode 100644 index 0000000..b5a1f75 --- /dev/null +++ b/app/tmpl/module/licenses/newlicense.js @@ -0,0 +1,58 @@ +function initpage(){ + newlicense.initform(); +} + +let newlicense = { + current_panel: "basedata", + selects:{"id_club":null,"country":null}, + initform: function(){ + newlicense.selects["id_club"] = new SlimSelect({ + select: "#id_club", + //[% IF session.usergroups.search('fld') != 1 %] + disabled : true, + //[% END %] + showSearch: false + }); + newlicense.selects["country"] = new SlimSelect({ + select: "#country", + showSearch: false + }); + flatpickr("#birthday",{altInput: true, + altFormat: "d.m.Y", + dateFormat: "Y-m-d", + "locale": "fr", + weekNumbers: false + }); + newlicense.getclubs(); + newlicense.fillcountries(); + }, + // viewpanel(pnlname){ + // if (newlicense.current_panel == 'basedata'){ + + // } + // if (newlicense.current_panel == 'photo'){ + + // } + // if (newlicense.current_panel == 'signature'){ + + // } + // newlicense.current_panel = pnlname; + // app.viewpanel(pnlname); + // return false; + // }, + save: function(){ + + }, + + fillcountries: function(){ + let countries = [{"value":"LUX","text":"Lëtzebuerg"},{"value":"DEU","text":"Daitschland"},{"value":"FRA","text":"Frankraich"},{"value":"BEL","text":"Belge"},{"value":"NED","text":"Holland"}]; + form.fillselectlist(newlicense.selects["country"],countries,"value","text"); + }, + getclubs: function(){ + req.reqdata("POST","db.cgi",{"get":"clublist","filter":" status is null;"},newlicense.fillclubs); + }, + fillclubs: function(data){ + console.log(data); + form.fillselectlist(newlicense.selects["id_club"],data.sqldata,"id","club",[% session.id_club %]); + } +} \ No newline at end of file diff --git a/app/tmpl/module/licenses/newlicense.tt b/app/tmpl/module/licenses/newlicense.tt new file mode 100644 index 0000000..59bfe76 --- /dev/null +++ b/app/tmpl/module/licenses/newlicense.tt @@ -0,0 +1,45 @@ +[% PROCESS macro/fields.tt %] +
      +
      + zerëck +
      Nei Lizenz
      +
      +
      +
      + + [% fieldselectbox('id_club','transfer','Club','','') %] +
      +
      Perséinlech Donnéeen vum Demandeur
      +
      +
      + [% fieldhidden('id','transfer','ident','') %] + [% fieldhidden('documenttype','transfer','','newlicense') %] + [% fieldeditbox('surname','transfer','Numm','half','') %] + [% fieldeditbox('prename','transfer','Virnumm','half','') %] + [% fieldeditbox('address','transfer','Address','','') %] + [% fieldeditbox('zip','transfer','CP','quarter','') %] + [% fieldeditbox('city','transfer','Uerschaft','half','') %] + [% fieldselectbox('country','transfer','Land','quarter','') %] + [% fieldeditbox('phone','transfer','Telefon','half','') %] + [% fieldeditbox('email','transfer','E-Mail','half','') %] + [% fieldeditbox('nationality','transfer','Nationalitéit','half','') %] + [% fielddatebox('birthday','transfer','Gebuertsdatum','half','') %] + +
      + + +
      +
      Photo
      +
      +
      +
      Ennerschrëften
      +
      +
      + + + +
      + + +
      + \ No newline at end of file diff --git a/app/tmpl/module/licenses/toolbar.tt b/app/tmpl/module/licenses/toolbar.tt new file mode 100644 index 0000000..210c39d --- /dev/null +++ b/app/tmpl/module/licenses/toolbar.tt @@ -0,0 +1,17 @@ +[% udef = 0 %] + +[% puserdef = dksdb.prepare("select ml.id_user from vw_licenselist ll join members ml on (ll.id_member=ml.id) where ll.id_club=? and ml.id_user=? and ll.yearin is not null and ll.yearout is null;") %] +[% FOREACH ruserdef = puserdef.execute(params.id,session.id) %] +[% IF ruserdef.id_user == session.id %] + [% udef = ruserdef.id_user %] +[% END %] +[% END %] +
      + + +[% IF (session.othergroups.search('club') == 1 && udef == session.id) %] + + + +[% END %] +
      diff --git a/app/tmpl/module/licenses/transfer.js b/app/tmpl/module/licenses/transfer.js new file mode 100644 index 0000000..14f1e77 --- /dev/null +++ b/app/tmpl/module/licenses/transfer.js @@ -0,0 +1,116 @@ + +var editor_id="[% session.id %]"; + + +var sel_newclub; +function initpage(){ + console.log("Init Transfer"); + flatpickr(".datefield",{altInput: true, + altFormat: "d.m.Y", + dateFormat: "Y-m-d", + "locale": "fr", + }); + // sel_newclub = new Choices('#id_newclub',{ + // searchEnabled: false, + // itemSelectText: 'auswielen...', + // choices : [] + // }); + if (document.getElementById("id_newclub")){ + var nclid = document.getElementById("id_newclub"); + if (nclid.tagName == "SELECT"){ + getclublist(); + } + } + if (document.getElementById("id").value != ""){ + gettransferdata(document.getElementById("id").value); + } + + +} + +function getclublist(){ + console.log("load clublist 1"); + //req.reqdata("POST","db.cgi","locationlist","filter":"id_club=" + clubid +""},loadtbldata); + req.reqdata("POST","db.cgi",{"get":"clublist","filter":"status is null or status='individual'"},loadclublist); +} +function loadclublist(data){ + document.getElementById("id_newclub").innerHTML =''; + console.log("load clublist"); + var xlist = []; + var strlist = ""; + if (data && data.sqldata){ + for (var i in data.sqldata){ + strlist += ''; + //xlist.push({value:data.sqldata[i].id,label:data.sqldata[i].club }); + } + } + document.getElementById("id_newclub").innerHTML = strlist; + //sel_newclub.setChoices(xlist, 'value', 'label', true); +} + +function gettransferdata(tid){ + req.reqdata("POST","db.cgi",{"get":"transferdata","filter":"id='"+ tid +"'"},filltransferform); +} + +function filltransferform(data){ + console.log(data); + if (data && data.sqldata){ + var frm = document.querySelectorAll('.data_transfer'); + for (var f in frm){ + console.log(frm[f].id); + if (data.sqldata[0][frm[f].id]){ + if ((frm[f].tagName == 'INPUT') || (frm[f].tagName == 'SELECT') || frm[f].tagName == 'TEXTAREA'){ + if (frm[f].classList.contains("datefield")){ + frm[f]._flatpickr.setDate(data.sqldata[0][frm[f].id]); + } + else if (frm[f].id == "id_newclub"){ + if (sel_newclub){ + console.log("set choice") + sel_newclub.setChoiceByValue(data.sqldata[0][frm[f].id]); + }else { + console.log("set select value"); + frm[f].value=data.sqldata[0][frm[f].id]; + } + + + } + else if (frm[f].classList.contains("richeditarea")){ + + tinymce.get(frm[f].id).setContent(data.sqldata[0][frm[f].id]); + } else { + frm[f].value=data.sqldata[0][frm[f].id]; + } + + } + } + } + //document.getElementById("title").addEventListener("change", onchangetitle); + } +} + +function saveuserdata(){ + var flds = []; + flds = getformcontent('requesterclub',flds); + flds = getformcontent('userdata',flds); + flds["fn"] = "saveform"; + console.log(flds); + req.reqdata("POST","index.cgi",flds,afteruserdatasaved); + +} + +function afteruserdatasaved(data){ + console.log(data); + if (data && data.id){ + document.getElementById("id").value=data.id; + } + formsaved({}); +} +function getmemberslist(){ + req.reqdata("db.cgi","memberslist","",loadmemberslist); +} + +function aftertransfersaved(data){ + console.log("transfer saved"); + console.log(data); +} + diff --git a/app/tmpl/module/licenses/transfer.tt b/app/tmpl/module/licenses/transfer.tt new file mode 100644 index 0000000..481c01a --- /dev/null +++ b/app/tmpl/module/licenses/transfer.tt @@ -0,0 +1,211 @@ +[% PROCESS macro/fields.tt %] +
      +
      + zerëck +
      Transfer
      +
      +
      +
      + +
      +
      +
      + [% fieldselectbox('id_newclub','transfer','Fir den Club','third','') %] + [% IF dtk == 'newlicense' %] + [% #fieldfile('transferfile','transfer','Formulaire Nei Lizenz (PDF)','third','','') %] + [% #fieldfile('transferphoto','transfer','Foto','third','','') %] + [% END %] +
      +
      + [% IF dtk == 'newlicense' %] +
      +
      +

      Perséinlech Donnéen vum Demandeur

      +
      + +
      +
      + [% fieldhidden('id','transfer','ident',tid) %] + [% fieldhidden('documenttype','transfer','',dtk) %] + [% fieldeditbox('surname','transfer','Numm','half','') %] + [% fieldeditbox('prename','transfer','Virnumm','half','') %] + [% fieldeditbox('address','transfer','Address','','') %] + [% fieldeditbox('zip','transfer','CP','quarter','') %] + [% fieldeditbox('city','transfer','Uerschaft','half','') %] + [% fieldeditbox('country','transfer','Land','quarter','') %] +
      +
      + [% fieldeditbox('phone','transfer','Telefon','half','') %] + [% fieldeditbox('email','transfer','E-Mail','half','') %] + [% fieldeditbox('nationality','transfer','Nationalitéit','half','') %] + [% fielddatebox('birthday','transfer','Gebuertsdatum','half','') %] +
      + + +
      + +
      +
      + +
      +

      Accord neien Club

      +
      + [% fieldhidden('newclub_id_president','transfer') %] + [% fieldeditbox('newclub_presidentname','onlydisplay','President','quarter','readonly') %] + [% fielddatebox('newclub_sigdate_president','transfer','Datum','quarter','') %] + [% fieldpasswordbox('newclub_president_sig','transfer','Passwuert','quarter','') %] +
      + +
      +
      + +
      + [% fieldhidden('newclub_id_tresorier','transfer') %] + [% fieldeditbox('newclub_tresoriername','onlydisplay','Trésorier','quarter','readonly') %] + [% fielddatebox('newclub_sigdate_trresorier','transfer','Datum','quarter','') %] + [% fieldpasswordbox('newclub_tresorier_sig','transfer','Passwuert','quarter','') %] +
      + +
      +
      + +
      + [% END %] + + + [% IF dtk == 'transfer' || dtk == 'transferfree' || dtk == 'transferwinter' %] +
      +
      + + [% fieldselectbox('id_member','transfer','Auswiel Member','half','') %] + [% fieldeditbox('license','transfer','Lizenz','quarter','readonly') %] +
      + [% fieldrichtextarea('note','member','Remarque (aktuellen Club)','','readonly','100px','') %] +
      +
      +
      +
      +

      Accord neien Club

      +
      + [% fieldhidden('newclub_id_president','transfer') %] + [% fieldeditbox('newclub_presidentname','onlydisplay','President','quarter','readonly') %] + [% fielddatebox('newclub_sigdate_president','transfer','Datum','quarter','') %] + [% fieldpasswordbox('newclub_president_sig','transfer','Passwuert','quarter','') %] +
      + +
      +
      + +
      + [% fieldhidden('newclub_id_tresorier','transfer') %] + [% fieldeditbox('newclub_tresoriername','onlydisplay','Trésorier','quarter','readonly') %] + [% fielddatebox('newclub_sigdate_trresorier','transfer','Datum','quarter','') %] + [% fieldpasswordbox('newclub_tresorier_sig','transfer','Passwuert','quarter','') %] +
      + +
      +
      + +
      + [% IF dtk == 'transfer' || dtk == 'transferwinter' %] +
      +

      Accord/Signatur aalen Club

      +
      + [% fieldhidden('oldclub_id_president','transfer') %] + [% fieldeditbox('oldclub_presidentname','onlydisplay','President','quarter','readonly') %] + [% fielddatebox('oldclub_sigdate_president','transfer','Datum','quarter','') %] + [% fieldpasswordbox('oldclub_president_sig','transfer','Passwuert','quarter','') %] +
      + +
      +
      + +
      + [% fieldhidden('oldclub_id_tresorier','transfer') %] + [% fieldeditbox('oldclub_tresoriername','onlydisplay','Trésorier','quarter','readonly') %] + [% fielddatebox('oldclub_sigdate_trresorier','transfer','Datum','quarter','') %] + [% fieldpasswordbox('oldclub_tresorier_sig','transfer','Passwuert','quarter','') %] +
      + +
      +
      + +
      + [% END %] + [% END %] + + [% #END %] + [% #IF dtk == 'transfer' || dtk == 'freetransfer' || dtk == 'wintertransfer' %] + + [% #END %] + [% fldro = 'readonly' %] + [% IF session.usergroups.search('fld') == 1 %] + [% fldro = '' %] + [% END %] +

      Accord/Signatur FLD

      +
      +
      +
      + [% fieldeditbox('license','transfer','Nei Lizenz-Nummer','quarter',fldro) %] +
      +
      + + [% fielddatebox('fld_sigdate','transfer','Datum','quarter',fldro) %] + + [% fieldselectbox('fld_id_member','transfer','FLD-Member','quarter','readonly') %] + [% fieldpasswordbox('fld_member_sig','transfer',"Passwuert",'quarter',fldro) %] +
      + +
      +
      + [% fieldcheckbox('refused_fld','transfer','Refus','',fldro) %] + [% fieldtextarea('fld_note','transfer','Note (obligatoresch beim Refus)','','','100px',fldro) %] +
      +
      +
      + [% IF fldro == '' %] +
      + +
      + [% END %] +
      + + + + + \ No newline at end of file diff --git a/app/tmpl/module/login/forgotpassword.tt b/app/tmpl/module/login/forgotpassword.tt new file mode 100644 index 0000000..b0c50e1 --- /dev/null +++ b/app/tmpl/module/login/forgotpassword.tt @@ -0,0 +1,20 @@ +
      +

      Passwuert vergiess?

      +
      Een Neit Passwuert ufroën
      +
      +
      +
      + + + + +
      + +
      + +
      + + +
      \ No newline at end of file diff --git a/app/tmpl/module/login/login.tt b/app/tmpl/module/login/login.tt new file mode 100644 index 0000000..84b38c7 --- /dev/null +++ b/app/tmpl/module/login/login.tt @@ -0,0 +1,26 @@ + +
      +

      [% lbl.loginheading %]

      + +
      +
      +
      + + +
      +
      + + +
      +
      + +
      + + [% IF registration_enabled == '1' %] +
      + Du hues dain Kont nach net aktivéiert?
      Kont aktivéieren +
      + [% END %] +
      \ No newline at end of file diff --git a/app/tmpl/module/login/message.tt b/app/tmpl/module/login/message.tt new file mode 100644 index 0000000..e904c90 --- /dev/null +++ b/app/tmpl/module/login/message.tt @@ -0,0 +1,12 @@ +
      [% message %]
      + + [% IF registration_enabled == '1' %] + + [% END %] + \ No newline at end of file diff --git a/app/tmpl/module/login/register.tt b/app/tmpl/module/login/register.tt new file mode 100644 index 0000000..03416b7 --- /dev/null +++ b/app/tmpl/module/login/register.tt @@ -0,0 +1,50 @@ +
      +

      Du hues dain Kont nach nët aktivéiert?

      +
      Wanns du bei der FLD eng Lizenz hues, kruten déi Responsabel vun dengem Club Donnéen gescheckt, déi's du brauchs fir dain Kont ze aktivéieren!
      +
      +
      +
      + + + +
      + +
      + + + +
      +
      + + + +
      +
      + + +
      +
      + +
      +
      + du hues dain Kont schon aktivéiert? Zrëck zum Login +
      +
      + + \ No newline at end of file diff --git a/app/tmpl/module/login/validationcode.tt b/app/tmpl/module/login/validationcode.tt new file mode 100644 index 0000000..5513f24 --- /dev/null +++ b/app/tmpl/module/login/validationcode.tt @@ -0,0 +1,23 @@ + +
      +

      E-Mail Validatioun

      +
      Mir hun dir eng E-Mail matt engem Code gescheckt, fir deng E-Mail-Address ze bestätegen!
      +
      +
      [% message %]
      +
      +
      + + + + +
      + +
      + +
      +
      + + + \ No newline at end of file diff --git a/app/tmpl/module/medialibrary/dlgeditdocument.tt b/app/tmpl/module/medialibrary/dlgeditdocument.tt new file mode 100644 index 0000000..214468c --- /dev/null +++ b/app/tmpl/module/medialibrary/dlgeditdocument.tt @@ -0,0 +1,21 @@ + \ No newline at end of file diff --git a/app/tmpl/module/medialibrary/index.js b/app/tmpl/module/medialibrary/index.js new file mode 100644 index 0000000..3648ad2 --- /dev/null +++ b/app/tmpl/module/medialibrary/index.js @@ -0,0 +1,108 @@ +var tbl = null; +var cfolder = 'media'; +function initpage(){ + tbl = new Tabulator("#tbl_media", { + headerFilterPlaceholder:"filter...", + height: "93vh", + selectable:1, + selectablePersistence:false, // disable rolling selection + responsiveLayout:"collapse", + autoResize:true, + layout:"fitColumns", + resizableRows:true, + columnHeaderSortMulti:false, + rowDblClick:function(e, row){ + var r = row.getData(); + if (r.type == 'dir'){ + cfolder= r.path; + gettbldata(cfolder); + } + }, + columns:[ + {title:'', field:"thumb",headerSort:false, titleFormatter:"html",width: 50,formatter:"html"}, + {title:"Name", field:"name", sorter:"string",headerFilter:"input"}, + {title:"Gréisst", field:"hrsize",headerSort:false,align:"right", sorter:"number",width: 110}, + {title:"Typ", field:"mimetype", sorter:"string",headerFilter:"input", width: 115}, + {title:"Dimensioun", field:"dimension", sorter:"number", width: 100}, + ], + + //autoColumns:true, +}); +gettbldata(cfolder); + // tinymce.init({ + // selector: '.richeditarea', + // branding: false, + // menubar:false, + // statusbar: false, + // plugins: 'searchreplace autolink directionality visualblocks visualchars advlist lists textcolor colorpicker textpattern', + // toolbar: 'bold italic underline strikethrough forecolor | link | alignleft aligncenter alignright alignjustify | numlist bullist outdent indent | removeformat', + // image_advtab: true + // // //console.log(editor.getContent()); + // }); +} + +function gettbldata(folder){ + req.reqdata("POST","file.cgi",{"fn":"list","folder":folder},loadtbldata); +} + +function loadtbldata(data){ + if (data){ + tbl.setData(data); + } +} + +function folderup(){ + console.log("folderup"); + var p = cfolder.lastIndexOf('/'); + if (p > 0){ + cfolder = cfolder.substring(0,cfolder.lastIndexOf('/')); + console.log("Folder up: " + cfolder); + gettbldata(cfolder); + } +} +// afterformsaved = function (){ +// app.loadpage('module/[% module %]/index.html'); +// return false; +// } + +// function deletedocument(id){ +// if (confirm("Bass du secher dass du dëst Document läschen wëlls?")){ +// req.reqdata("POST","db.cgi",{"del":"1","ident_documents_id":id},closeeditdialog); +// } +// return false; +// } + +// function editdocument(id){ +// req.reqdata("POST","db.cgi",{"get":"documents","filter":"id="+ id},openedit); +// return false; +// } + +// function openedit(data){ +// //console.log(data); +// if (data && data.sqldata){ +// var frm = document.querySelectorAll('.data_documents'); +// for (var f in frm){ +// //console.log(frm[f].classList); +// if (data.sqldata[0][frm[f].id]){ +// if ((frm[f].tagName == 'INPUT') || (frm[f].tagName == 'SELECT') || frm[f].tagName == 'TEXTAREA'){ +// if (frm[f].classList.contains("datefield")){ +// frm[f]._flatpickr.setDate(data.sqldata[0][frm[f].id]); +// } else if (frm[f].classList.contains("richeditarea")){ +// //console.log(frm[f].id + " is richeditarea"); +// tinymce.get(frm[f].id).setContent(data.sqldata[0][frm[f].id]); +// } else { +// frm[f].value=data.sqldata[0][frm[f].id]; +// } + +// } +// } +// } +// document.getElementById('dlgeditdocument').style.display='block'; +// } +// return false; +// } + +// function closeeditdialog(){ +// document.getElementById('dlgeditdocument').style.display='none'; +// app.loadpage('module/[% module %]/index.html'); +// } \ No newline at end of file diff --git a/app/tmpl/module/medialibrary/index.tt b/app/tmpl/module/medialibrary/index.tt new file mode 100644 index 0000000..990a310 --- /dev/null +++ b/app/tmpl/module/medialibrary/index.tt @@ -0,0 +1,15 @@ +[% PROCESS macro/fields.tt %] + +
      +
      + + + + + + +
      +
      +
      +[% INCLUDE block/dlguploadfile.tt %] +[% INCLUDE "module/$module/dlgeditdocument.tt" %] \ No newline at end of file diff --git a/app/tmpl/module/members/club.tt b/app/tmpl/module/members/club.tt new file mode 100644 index 0000000..e69de29 diff --git a/app/tmpl/module/members/clubmembers.tt b/app/tmpl/module/members/clubmembers.tt new file mode 100644 index 0000000..e69de29 diff --git a/app/tmpl/module/members/index.js b/app/tmpl/module/members/index.js new file mode 100644 index 0000000..20d6453 --- /dev/null +++ b/app/tmpl/module/members/index.js @@ -0,0 +1,143 @@ +var tbl = null; +var tbllic = null; +var idmember=null; +function initpage(){ + + flatpickr(".datefield",{altInput: true, + altFormat: "d.m.Y", + dateFormat: "Y-m-d", + "locale": "fr", + }); + tbl = new Tabulator("#tbl_members", { + height: "100vh", + selectable:1, + selectablePersistence:false, // disable rolling selection + responsiveLayout:"collapse", + autoResize:true, + addRowPos:"top", + layout:"fitColumns", + resizableRows:true, + columnHeaderSortMulti:false, + rowDblClick:function(e, row){ + var data = row.getData(); + //console.log(data); + idmember=data.id; + //console.log(idmember); + loadmemberdata(idmember); + + //e - the click event object + //row - row component + }, + columns:[ + {title:"Club", field:"club", sorter:"string",formatter:"html",headerFilter:"input"}, + {title:"Numm", field:"surname", sorter:"string",headerFilter:"input"}, + {title:"Virnumm", field:"prename", sorter:"string",headerFilter:"input"}, + {title:"Status Lizenz", field:"status", sorter:"string",headerFilter:"input"}, + ], + initialHeaderFilter:[ + {field:"status", value:"aktiv"} //set the initial value of the header filter to "red" + ] + + //autoColumns:true, +}); +tbllic = new Tabulator("#tbl_license", { + selectable:1, + selectablePersistence:false, // disable rolling selection + responsiveLayout:"collapse", + autoResize:true, + addRowPos:"top", + layout:"fitColumns", + resizableRows:true, + // rowClick:function(e, row){ + // var data = row.getData(); + // console.log(data); + // idmember=row.id; + // loadmemberdata(row.id); + // //e - the click event object + // //row - row component + // }, + columns:[ + {title:"Lizenz", field:"license", sorter:"number"}, + {title:"vun", field:"yearin", sorter:"number"}, + {title:"bis", field:"yearout", sorter:"number"}, + {title:"Club", field:"club", sorter:"string",formatter:"html"} + ], + //autoColumns:true, +}); + gettbldata(); +} + +function gettbldata(){ + req.reqdata("POST","db.cgi",{"get":"memberlist"},loadtbldata); +} + +function loadtbldata(data){ + if (data && data.sqldata){ + tbl.setData(data.sqldata); + } +} + +function loadmemberdata(id){ + //console.log(id); + document.getElementById("member_toolbar").style.display = 'block'; + document.getElementById("pnlmemberlist").style.display = 'none'; + document.getElementById("pnlmemberdata").style.display = 'block'; + req.reqdata("POST","db.cgi",{"get":"memberdata","filter":"id="+id},fillformmember); + req.reqdata("POST","db.cgi",{"get":"licenselist","filter":"id_member="+id},filllicensetable); + req.reqdata("POST","db.cgi",{"get":"userstatus","filter":"id="+id},filluserstaus); +} + +function fillformmember(data){ + //console.log(data); + if (data && data.sqldata){ + for (var i in data.sqldata[0]){ + if (document.getElementById("members_" + i)){ + document.getElementById("members_" + i).value + } + } + var frm = document.querySelectorAll('.data_members'); + for (var f in frm){ + //console.log(frm[f].id); + if (data.sqldata[0][frm[f].id]){ + //console.log(frm[f].tagName + " " + frm[f].type + " " + frm[f].id); + if ((frm[f].tagName == 'INPUT') || (frm[f].tagName == 'SELECT')){ + if (frm[f].classList.contains("datefield")){ + frm[f]._flatpickr.setDate(data.sqldata[0][frm[f].id]); + //frm[f].flatpickr.setDate(data.sqldata[0][frm[f].id]) + } else { + frm[f].value=data.sqldata[0][frm[f].id]; + } + + } + } + + // if frm[f].id + // if (data.sqldata[0][]) + // frm[f].value= + } + if (document.getElementById("profile_photo").value != ""){ + document.getElementById('img_profile_photo').src='../../data/members/' + document.getElementById("profile_photo").value; + } + // console.log(frm); + } +} + +function filllicensetable(data){ + //console.log("License DATA"); + //console.log(data.sqldata); + if (data && data.sqldata){ + tbllic.setData(data.sqldata); + } +} + +function filluserstaus(data){ + +} + +function loadlist(){ + document.getElementById("member_toolbar").style.display = 'none'; + document.getElementById("pnlmemberdata").style.display = 'none'; + document.getElementById("pnlmemberlist").style.display = 'block'; + +} + diff --git a/app/tmpl/module/members/index.tt b/app/tmpl/module/members/index.tt new file mode 100644 index 0000000..9a505fb --- /dev/null +++ b/app/tmpl/module/members/index.tt @@ -0,0 +1,102 @@ + +[% PROCESS macro/fields.tt %] +
      + +
      +
      +
      + +
      + + +
      +
      +

      Perséinlech Donnéen

      +
      +
      + + [% fieldhidden('id','members','ident') %] + [% fieldeditbox('surname','members','Numm','half','') %] + [% fieldeditbox('prename','members','Virnumm','half','') %] + [% fieldeditbox('address','members','Address','','') %] + [% fieldeditbox('zip','members','CP','quarter','') %] + [% fieldeditbox('city','members','Uerschaft','half','') %] + [% fieldeditbox('country','members','Land','quarter','') %] +
      +
      + [% fieldeditbox('phone','members','Telefon','third','') %] + [% fieldeditbox('nationality','members','Nationalitéit','third','') %] + [% fielddatebox('birthday','members','Gebuertsdatum','third','') %] +
      +
      + +
      +
      +
      +
      +
      +
      +

      Benotzer-Kont

      + +
      + [% fieldhidden('users','id','ident') %] + [% fieldemailbox('username','users','E-Mail (Login)','','','','') %] +
      +
      +

      Accès Status: aktiv

      +
      +
      + + +
      +
      + + +
      +
      +
      + + + + +
      +
      +
      +
      +
      +

      Photo

      +
      +
      + [% fieldhidden('profile_photo','members') %] + [% fieldhidden('members','link','ident') %] +
      +

      Aktuell (validéiert) Photo

      + +
      + +
      +

      Nei Photo

      + + + + + + +
      +
      +
      +
      + [% INCLUDE block/dlgcropper.tt %] +
      +

      Lizenz

      +
      +
      +
      +
      + +
      + +
      diff --git a/app/tmpl/module/newsletter/index.js b/app/tmpl/module/newsletter/index.js new file mode 100644 index 0000000..9e4eaf0 --- /dev/null +++ b/app/tmpl/module/newsletter/index.js @@ -0,0 +1,90 @@ +var tbl = null; +function initpage(){ + // flatpickr(".datefield",{altInput: true, + // altFormat: "d.m.Y", + // dateFormat: "Y-m-d", + // "locale": "fr", + // }); + tinymce.init({ + selector: '.richeditarea', + branding: false, + menubar:false, + statusbar: false, + plugins: 'searchreplace autolink directionality visualblocks visualchars advlist lists textcolor colorpicker textpattern', + toolbar: 'bold italic underline strikethrough forecolor backcolor | link | alignleft aligncenter alignright alignjustify | numlist bullist outdent indent | removeformat', + image_advtab: true, + forced_root_block : '', + // init_instance_callback: function (editor) { + // editor.on('blur', function (e) { + // //console.log('Editor was blurred!'); + // //console.log(e.target.id); + // $("#" + e.target.id).html(editor.getContent()); + // //console.log(editor.getContent()); + // // if (savefield){ + // // savefield(e.target.id); + // // } + // }); + // } + }); + tbl = new Tabulator("#tbl_mailings", { + height: "100vh", + selectable:1, + selectablePersistence:false, // disable rolling selection + responsiveLayout:"collapse", + autoResize:true, + addRowPos:"top", + layout:"fitColumns", + resizableRows:true, + columnHeaderSortMulti:false, + columns:[ + {title:"Sujet", field:"title"}, + {title:"Datum verscheckt", field:"dspsendate"}, + {title:"Sender", field:"sender"}, + {title:"Empfänger", field:"receipients"} + ], + //autoColumns:true, +}); + gettbldata(); +} + +function gettbldata(){ + req.reqdata("POST","db.cgi",{"get":"mailinglist"},loadtbldata); +} + +function loadtbldata(data){ + if (data && data.sqldata){ + tbl.setData(data.sqldata); + } +} + +function viewtable(){ + document.getElementById("mailingform").style.display = 'none'; + document.getElementById("mailingtable").style.display = 'block'; +} + +function add(){ + document.getElementById("mailingtable").style.display = 'none'; + document.getElementById("mailingform").style.display = 'block'; + + //app.loadpage('module/[% module %]/form_webnews.html','Neien Member'); +} + +function edit(){ + var udata = tbl.getSelectedData(); + var uid = udata[0].id; + document.getElementById("mailingtable").style.display = 'none'; + document.getElementById("mialingform").style.display = 'block'; + //app.loadpage('module/[% module %]/form_webnews.html?id='+uid,'News éditeieren'); + //console.log(tbl.getSelectedData()); +} + +function duplicate(){ + //console.log(tbl.getSelectedData()); +} + +function remove(){ + var udata = tbl.getSelectedData(); + var uid = udata[0].id; + //console.log(tbl.getSelectedData()); +} + \ No newline at end of file diff --git a/app/tmpl/module/newsletter/index.tt b/app/tmpl/module/newsletter/index.tt new file mode 100644 index 0000000..94f3bc8 --- /dev/null +++ b/app/tmpl/module/newsletter/index.tt @@ -0,0 +1,34 @@ +[% INCLUDE "module/$module/tbltoolbar.tt" %] +[% PROCESS macro/fields.tt %] +
      + + + + + + + + + + + + + +
      SujetVerscheckt denSenderEmpfänger
      +
      + \ No newline at end of file diff --git a/app/tmpl/module/newsletter/tbltoolbar.tt b/app/tmpl/module/newsletter/tbltoolbar.tt new file mode 100644 index 0000000..25ee70b --- /dev/null +++ b/app/tmpl/module/newsletter/tbltoolbar.tt @@ -0,0 +1,11 @@ +
      + +
      + + + + + + +
      +
      \ No newline at end of file diff --git a/app/tmpl/module/profile.tt b/app/tmpl/module/profile.tt new file mode 100644 index 0000000..31d15ab --- /dev/null +++ b/app/tmpl/module/profile.tt @@ -0,0 +1,79 @@ + +[% PROCESS macro/fields.tt %] +
      +
      Profil
      +
      +
      +
      +
      +

      Benotzer-Kont

      +
      +
      + [% #fieldhidden('users','id','ident') %] + [% fieldeditbox('username','users','E-Mail (Login)','','readonly','') %] +
      + +
      +
      +
      + + +
      +
      +
      +
      + +
      +
      +

      Perséinlech Donnéen

      +
      +
      + + [% fieldhidden('id','members','ident') %] + [% fieldeditbox('surname','members','Numm','half','readonly') %] + [% fieldeditbox('prename','members','Virnumm','half','readonly') %] + [% fieldeditbox('address','members','Address','','readonly') %] + [% fieldeditbox('zip','members','CP','quarter','readonly') %] + [% fieldeditbox('city','members','Uerschaft','half','readonly') %] + [% fieldeditbox('country','members','Land','quarter','readonly') %] +
      +
      + [% fieldeditbox('phone','members','Telefon','third','readonly') %] + [% fieldeditbox('nationality','members','Nationalitéit','third','readonly') %] + [% fielddatebox('birthday','members','Gebuertsdatum','third','readonly') %] +
      + +
      +
      +
      +
      +

      Photo

      +
      +
      + [% fieldhidden('profile_photo','members') %] + [% fieldhidden('members','link','ident') %] +
      +

      Aktuell Photo

      + +
      + +
      +

      Nei Photo

      +
      Fir d'Photo auszetauschen, scheckt w.e.g. är nei Photo via E-Mail un
      webmaster@fld.
      lu

      Vergiesst w.e.g. Net Lizenz-Nummer an Numm vum Spiller matt unzegin
      + +
      +
      +
      +
      +
      + [% #INCLUDE block/dlgcropper.tt %] + [% INCLUDE block/dlgpassword.tt %] + [% INCLUDE block/dlgusername.tt %] + + + diff --git a/app/tmpl/module/profile/profile.js b/app/tmpl/module/profile/profile.js new file mode 100644 index 0000000..3ec4bb0 --- /dev/null +++ b/app/tmpl/module/profile/profile.js @@ -0,0 +1,64 @@ +var iduser="[% session.id %]"; + +function initpage(){ + flatpickr(".datefield",{altInput: true, + altFormat: "d.m.Y", + dateFormat: "Y-m-d", + "locale": "fr", + }); + loadmemberdata(iduser); + loadaccountdata(iduser); +} + +function loadaccountdata(id){ + req.reqdata("POST","db.cgi",{"get":"userdata","filter":"id="+id},fillformaccount); +} +function loadmemberdata(id){ + req.reqdata("POST","db.cgi",{"get":"memberdata","filter":"id_user="+id},fillformmember); +} +function fillformaccount(data){ + if (data && data.sqldata){ + var frm = document.querySelectorAll('.data_users'); + for (var f in frm){ + if (data.sqldata[0][frm[f].id]){ + if ((frm[f].tagName == 'INPUT') || (frm[f].tagName == 'SELECT')){ + if (frm[f].classList.contains("datefield")){ + frm[f]._flatpickr.setDate(data.sqldata[0][frm[f].id]); + } else { + frm[f].value=data.sqldata[0][frm[f].id]; + } + } + } + } + } +} + + +function fillformmember(data){ + // console.log(data); + if (data && data.sqldata){ + var frm = document.querySelectorAll('.data_members'); + for (var f in frm){ + // console.log(frm[f].tagName); + // console.log(frm[f].id); + if (data.sqldata[0][frm[f].id]){ + //console.log(frm[f].tagName + " " + frm[f].type + " " + frm[f].id); + if ((frm[f].tagName == 'INPUT') || (frm[f].tagName == 'SELECT')){ + if (frm[f].classList.contains("datefield")){ + frm[f]._flatpickr.setDate(data.sqldata[0][frm[f].id]); + } else { + frm[f].value=data.sqldata[0][frm[f].id]; + } + + } + } + + } + if (document.getElementById("profile_photo").value != ""){ + document.getElementById("img_profile_photo").src = '../../data/members/' + document.getElementById("profile_photo").value+ "?upd="+ data.sqldata[0].modified; + } + // console.log(frm); + } +} + + diff --git a/app/tmpl/module/ranking/index.js b/app/tmpl/module/ranking/index.js new file mode 100644 index 0000000..b1922e1 --- /dev/null +++ b/app/tmpl/module/ranking/index.js @@ -0,0 +1,128 @@ +var tbl = null; + +function initpage(){ + // flatpickr(".datefield",{altInput: true, + // altFormat: "d.m.Y", + // dateFormat: "Y-m-d", + // "locale": "fr", + // }); + + tbl = new Tabulator("#tbl_rankings", { + height: "95vh", + selectable:1, + selectablePersistence:false, // disable rolling selection + responsiveLayout:"collapse", + autoResize:true, + addRowPos:"top", + layout:"fitColumns", + resizableRows:true, + columnHeaderSortMulti:false, + columns:[ + {title:"Positioun", field:"seasonrank", sorter:"number"}, + {title:"surname", field:"Numm", sorter:"string",editor:"input",headerFilter:"input"}, + {title:"prename", field:"virnumm", storter:"html",editor:"input",headerFilter:"input"}, + {title:"saison", field:"season", storter:"html",editor:"input",headerFilter:"input"}, + {title:"1 Ranglëscht", field:"rl1", sorter:"number",editor:"input",width: 100}, + {title:"2 Ranglëscht", field:"rl2", sorter:"number",editor:"input",width: 100}, + {title:"3 Ranglëscht", field:"rl3", sorter:"number",editor:"input",width: 100}, + {title:"4 Ranglëscht", field:"rl4", sorter:"number",editor:"input",width: 100}, + {title:"5 Ranglëscht", field:"rl5", sorter:"number",editor:"input",width: 100}, + {title:"6 Ranglëscht", field:"rl6", sorter:"number",editor:"input",width: 100}, + {title:"7 Ranglëscht", field:"rl7", sorter:"number",editor:"input",width: 100}, + {title:"Total", field:"total", sorter:"number",width: 100} + ], + //autoColumns:true, +}); + gettbldata(); +} + +// function getrankingscategories(){ +// req.reqdata("POST","db.cgi",{"get":"memberlist","filter":"id_club=" + clubid +" and status='aktiv'"},fillclubmembers); +// } + + + +function gettbldata(){ + req.reqdata("POST","db.cgi",{"get":"rankings"},loadtbldata); +} + +function loadtbldata(data){ + if (data && data.sqldata){ + tbl.setData(data.sqldata); + } +} + +function viewtable(){ + document.getElementById("rankingsform").style.display = 'none'; + document.getElementById("rankingstable").style.display = 'block'; +} + +function add(){ + + // var frm = document.querySelectorAll('.data_rankings'); + // for (var f in frm){ + // if ((frm[f].tagName == 'INPUT') || (frm[f].tagName == 'SELECT')){ + // if (frm[f].classList.contains("datefield")){ + // frm[f]._flatpickr.setDate(""); + // } else { + // frm[f].value=""; + // // if (frm[f].id == 'teams'){ + // // locations_teams.clearStore(); + // // } + // } + + // } + // } + // document.getElementById("rankingstable").style.display = 'none'; + // document.getElementById("rankingsform").style.display = 'block'; + // displayeditbuttons('block'); +} + +function edit(){ + var udata = tbl.getSelectedData(); + var uid = udata[0].id; + console.log(uid); + req.reqdata("POST","db.cgi",{"get":"rankingslist","filter":"id=" + uid},fillformrankings); + document.getElementById("rankingstable").style.display = 'none'; + document.getElementById("rankingsform").style.display = 'block'; + displayeditbuttons('block'); + //app.loadpage('module/[% module %]/form_webrankings.html?id='+uid,'rankings éditeieren'); + //console.log(tbl.getSelectedData()); +} + +function fillformrankings(data){ + console.log(data); + if (data && data.sqldata){ + var frm = document.querySelectorAll('.data_rankings'); + for (var f in frm){ + console.log(frm[f].classList); + if (data.sqldata[0][frm[f].id]){ + if ((frm[f].tagName == 'INPUT') || (frm[f].tagName == 'SELECT') || frm[f].tagName == 'TEXTAREA'){ + if (frm[f].classList.contains("datefield")){ + frm[f]._flatpickr.setDate(data.sqldata[0][frm[f].id]); + } else if (frm[f].classList.contains("richeditarea")){ + console.log(frm[f].id + " is richeditarea"); + tinymce.get(frm[f].id).setContent(data.sqldata[0][frm[f].id]); + } else { + frm[f].value=data.sqldata[0][frm[f].id]; + } + + } + } + } + } +} + +function duplicate(){ + console.log(tbl.getSelectedData()); +} + +function remove(){ + var udata = tbl.getSelectedData(); + var uid = udata[0].id; + console.log(tbl.getSelectedData()); + if (confirm("Bass du secher dass déi ausgewielten rankings läschen wells?")){ + req.reqdata("POST","db.cgi",{"del":"1","ident_rankings_id":udata[0].id},gettbldata); + } +} + \ No newline at end of file diff --git a/app/tmpl/module/ranking/index.tt b/app/tmpl/module/ranking/index.tt new file mode 100644 index 0000000..a5bd541 --- /dev/null +++ b/app/tmpl/module/ranking/index.tt @@ -0,0 +1,8 @@ + + [% INCLUDE "module/$module/tbltoolbar.tt" %] +
      + + +
      +
      + diff --git a/app/tmpl/module/ranking/tbltoolbar.tt b/app/tmpl/module/ranking/tbltoolbar.tt new file mode 100644 index 0000000..6ee331f --- /dev/null +++ b/app/tmpl/module/ranking/tbltoolbar.tt @@ -0,0 +1,21 @@ +
      + +
      + + + + + + +
      +
      + \ No newline at end of file diff --git a/app/tmpl/module/users.tt b/app/tmpl/module/users.tt new file mode 100644 index 0000000..409a997 --- /dev/null +++ b/app/tmpl/module/users.tt @@ -0,0 +1,82 @@ +[% PROCESS macro/fields.tt %] +
      +
      +
      Memberen
      + + + + [% IF (session.usergroups.search('fld') == 1) %] + + + + [% END %] +
      +
      +
      +[% FOREACH cl=dksdb.query("select * from vw_clublist;") %] +
      +
      +
      +

      [% cl.club %]

      +
      +
      + +
      Lizenzen: [% cl.licenses %]
      + +
      + +
      +
      +[% END %] +
      +
      +
      +[% IF (session.usergroups.search('fld') == 1) %] + + +[% END %] diff --git a/app/tmpl/module/users/users.js b/app/tmpl/module/users/users.js new file mode 100644 index 0000000..54676d2 --- /dev/null +++ b/app/tmpl/module/users/users.js @@ -0,0 +1,260 @@ + +/* [% sid = session.id %] +[% IF (session.usergroups.search('fld') != 1) %] +[% qclub = dksdb.query("select id_club from vw_userlist where id=$sid;") %] +[% club = qclub.get_all() %] +[% END %] */ +var tbl= null; +var sid = "[% session.id %]"; +var sel_usergroups = null; + +//var idclub="[% club.0.id_club %]"; +function initpage(){ + /* [% IF (session.usergroups.search('fld') == 1) %] */ + sel_usergroups = new Choices('#usergroup_ids',{ + searchEnabled: false, + itemSelectText: 'auswielen...', + removeItemButton: true, + choices : [] + }); + tbl = new Tabulator("#tbl_users", { + height: "calc(100vh - 170px)", + headerFilterPlaceholder:"filter...", + layout:"fitDataFill", + selectable:1, + initialSort:[ + {column:"club", dir:"asc"} //then sort by this second + ], + groupBy:["club"], + groupStartOpen:[false], + groupHeader:[function(value, count, data){ return value;}], + + //responsiveLayout:"collapse", + columns:[ + {title:"Club", field:"club",headerFilter:"input",download:true,visible: false}, + {title:"Numm", field:"surname",headerFilter:"input",download:true}, + {title:"Virnumm", field:"prename",headerFilter:"input",download:true}, + {title:"Lizenz",field:"license",download:true, headerSort: false}, + {title:"Accès",field:"group_ids",download:true,headerFilter:"input", headerSort: false}, + {title:"E-mail",field:"username",download:true, headerSort: false}, + {title:"Reg.Code", field:"regcode",download:true, headerSort: false}, + {title:"Blockéiert", field:"blocked", headerSort: false,formatter:"tickCross", formatterParams:{ + allowEmpty:true, + allowTruthy:true, + crossElement:"", + }}, + ], +}); + + getusergroups(); + /* [% ELSE %] */ + tbl = new Tabulator("#tbl_users", { + headerFilterPlaceholder:"filter...", + height: "calc(100vh - 200px);", + layout:"fitDataFill", + selectable:1, + responsiveLayout:"collapse", + columns:[ + {title:"Club", field:"club"}, + {title:"Numm", field:"surname",headerFilter:"input",download:true}, + {title:"Virnumm", field:"prename",headerFilter:"input",download:true}, + {title:"Lizenz",field:"license",download:true}, + {title:"Accès",field:"group_ids",download:true}, + {title:"E-mail",field:"username",download:true}, + {title:"Reg.Code", field:"regcode",download:true}, + ], +}); + /* [% END %] */ + gettbldata(); +} + +function gettbldata(){ + // [% IF (session.usergroups.search('fld') == 1) %] + req.reqdata("POST","db.cgi",{"get":"userlist","filter":"status='aktiv'"},loadtbldata); + // [% ELSE %] + req.reqdata("POST","db.cgi",{"get":"userlist","filter":"status='aktiv' and id_club=[% club.0.id_club %]"},loadtbldata); + // [% END %] +} + +function loadtbldata(data){ + if (data && data.sqldata){ + tbl.setData(data.sqldata); + } +} + +// function xlsxexport(){ +// tbl.download("xlsx", "fld.lu_Benotzer.xlsx", {sheetName:"Memberen"}); +// } + +// function pdfexport(){ +// tbl.download("pdf", "fld.lu_Benotzer.pdf", { +// orientation:"landscape", + +// jsPDF:{ +// unit:"mm", +// }, +// autoTable(doc){ +// doc.text("Benotzer Site fld.lu", 10, 10); +// // styles: { +// // fillColor: [100, 255, 255] +// // }, +// // columnStyles: { +// // id: {fillColor: 255} +// // }, +// return { +// margin: {top: 20}, +// } + +// }, +// documentProcessing:function(doc){ +// //carry out an action on the doc object +// } +// }); +// } + +// [% IF (session.usergroups.search('fld') == 1) %] + function setusergroups(){ + var udata = tbl.getSelectedData(); + if (udata[0]){ + var uid = udata[0].id; + req.reqdata("POST","db.cgi",{"get":"userdata","filter":"id=" + uid},fillusergroupform); + } + } + function fillusergroupform(data){ + + if (data && data.sqldata){ + var frm = document.querySelectorAll('.data_users,.data_display,.data_useringroups'); + for (var f in frm){ + + if (data.sqldata[0][frm[f].id]){ + if ((frm[f].tagName == 'INPUT') || (frm[f].tagName == 'SELECT')) { + if (frm[f].id == "usergroup_ids"){ + + var argrp = data.sqldata[0][frm[f].id].split(","); + //console.log(argrp); + sel_usergroups.setChoiceByValue(argrp); + } else { + frm[f].value=data.sqldata[0][frm[f].id]; + } + } + } + } + document.getElementById('dlgusergroups').style.display='block'; + } + + } + + function getusergroups(){ + req.reqdata("POST","db.cgi",{"get":"usergroups"},fillusergroups); + return false; + } + function fillusergroups(data){ + var pug = []; + if (data && data.sqldata){ + for (var i in data.sqldata){ + pug.push({value:data.sqldata[i].id,label:data.sqldata[i].groupname}); + } + } + sel_usergroups.setChoices(pug, 'value', 'label', true); + + return false; + } + + function saveusergroupsform(){ + var flds = getformcontent("usergroups",{}); + //console.log(flds); + + req.reqdata("POST","db.cgi",{"fn":"setgroupaccess","params": flds.ident_users_id + ",'{" + flds.useringroups_usergroup_ids.join(',') +"}'"},ugsaved); + return false; + } + + function ugsaved(data){ + //console.log(data); + gettbldata(); + document.getElementById('dlgusergroups').style.display='none'; + formsaved(null); + } + + function setlogin(){ + var udata = tbl.getSelectedData(); + document.getElementById("nunmsg").innerHTML = '' + if (udata[0]){ + var uid = udata[0].id; + req.reqdata("POST","db.cgi",{"get":"userdata","filter":"id=" + uid},fillloginform); + } + } + function fillloginform(data){ + document.getElementById("blocked").checked = false; + document.getElementById("username").value = ""; + if (data && data.sqldata){ + var frm = document.querySelectorAll('.data_users,.data_display,.data_useringroups'); + for (var f in frm){ + + if (data.sqldata[0][frm[f].id]){ + if ((frm[f].tagName == 'INPUT') || (frm[f].tagName == 'SELECT')) { + + if (frm[f].type == "checkbox"){ + document.getElementById("blocked").checked = true; + } else { + frm[f].value=data.sqldata[0][frm[f].id]; + } + } + } + } + document.getElementById('dlglogin').style.display='block'; + } + } + + function setusername(){ + var flds = getformcontent("users",{}); + //console.log(flds); + flds["set"] = 1; + req.reqdata("POST","db.cgi",flds,loginsaved); + return false; + } + + function loginsaved(data){ + //console.log(data); + gettbldata(); + document.getElementById('dlglogin').style.display='none'; + formsaved(null); + } + function ugsaved(data){ + //console.log(data); + gettbldata(); + document.getElementById('dlgusergroups').style.display='none'; + formsaved(null); + } + + function sendnewpassword(){ + var flds = getformcontent("login",{}); + //console.log(flds); + return false; + } + + function checkemail(){ + var newusername = document.getElementById("username").value; + //console.log("username: " + newusername); + if (validateEmail(newusername)){ + req.reqdata("POST","db.cgi",{"get":"userdata","filter":"username='"+ newusername+ "' and id != " + document.getElementById("id").value},checkmailreturn); + }else { + document.getElementById("nunmsg").innerHTML= '
      w.e.g. eng richteg email agin!
      '; + } + return false; + } + + function checkmailreturn(data){ + console.log(data); + if (data && data.sqldata.length > 0){ + document.getElementById("nunmsg").innerHTML= '
      Et existéiert schon een aaneren Kont matt deser E-mail!
      '; + } else { + setusername(); + } + return false; + } + + function validateEmail(email) { + var 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()); + } +// [% END %] \ No newline at end of file diff --git a/app/tmpl/module/webnews.tt b/app/tmpl/module/webnews.tt new file mode 100644 index 0000000..de2be95 --- /dev/null +++ b/app/tmpl/module/webnews.tt @@ -0,0 +1,36 @@ +[% PROCESS macro/fields.tt %] +
      +
      + zerëck +
      Websait News
      + [% IF (session.usergroups.search('fld') == 1) %] + + + + [% END %] +
      +
      +
      + +[% INCLUDE block/dlguploadfile.tt %] + \ No newline at end of file diff --git a/app/tmpl/module/webnews/webnews.js b/app/tmpl/module/webnews/webnews.js new file mode 100644 index 0000000..ec3705b --- /dev/null +++ b/app/tmpl/module/webnews/webnews.js @@ -0,0 +1,224 @@ +var tbl = null; +var sel_category=null; +function initpage(){ + webnews.inittable(); + webnews.initform(); +} +let webnews = { + tbl: null, + choices: {"categories":null}, + inittable: function(){ + webnews.tbl = new Tabulator("#tbl_news", { + height: "calc(100vh - 65px)", + selectable:1, + // selectablePersistence:false, + // responsiveLayout:"collapse", + autoResize:true, + addRowPos:"top", + layout:"fitDataFill", + resizableRows:true, + columnHeaderSortMulti:false, + columns:[ + + {title:"Titel", field:"title", formatter:"html",responsive:0, width: 400}, + {title:"Datum vun", field:"dsppublishdate",headerSort:"datetime",width: 100}, + {title:"Datum bis", field:"dspunpublishdate",headerSort:"datetime",width: 100}, + {title:"Kategorie", field:"categorylist", headerSort:false,width: 140}, + ], + }); + webnews.gettbldata(); + }, + initform: function(){ + flatpickr(".datefield",{altInput: true, + altFormat: "d.m.Y", + dateFormat: "Y-m-d", + allowInput: true, + "locale": "fr", + }); + tinymce.init({ + selector: '.richeditarea', + plugins: 'preview paste importcss searchreplace autolink directionality code visualblocks visualchars fullscreen image link media template table charmap hr nonbreaking anchor advlist lists wordcount imagetools textpattern noneditable charmap emoticons autoresize ', + imagetools_cors_hosts: ['picsum.photos'], + menubar: 'file edit view insert format tools table', + toolbar: 'undo redo | bold italic underline strikethrough | fontsizeselect | alignleft aligncenter alignright alignjustify | outdent indent | numlist bullist | forecolor removeformat | charmap emoticons | fullscreen preview | insertfile image media link anchor', + toolbar_sticky: true, + language: 'de', + // content_css: [ + // '[% abspath %]/backoffice/css/w3pro.css' + // ], + forced_root_block : '', + min_height: 350, + branding: false, + importcss_append: true, + image_advtab: true, + image_title: true, + automatic_uploads: true, + file_picker_types: 'image', + file_picker_callback: function (cb, value, meta) { + var input = document.createElement('input'); + input.setAttribute('type', 'file'); + input.setAttribute('accept', 'image/*'); + input.onchange = function () { + var file = this.files[0]; + + var reader = new FileReader(); + reader.onload = function () { + var id = 'blobid' + (new Date()).getTime(); + var blobCache = tinymce.activeEditor.editorUpload.blobCache; + var base64 = reader.result.split(',')[1]; + var blobInfo = blobCache.create(id, file, base64); + blobCache.add(blobInfo); + cb(blobInfo.blobUri(), { title: file.name }); + }; + reader.readAsDataURL(file); + }; + + input.click(); + + }, + image_caption: true, + noneditable_noneditable_class: "mceNonEditable", + contextmenu: "link image imagetools table", + }); + webnews.choices["categories"] = new SlimSelect({ + select: "#categories", + showSearch: false, + data: [{ value: 'News', text: 'News' }, + { value: 'Frontpage', text: 'Frontpage' }] + }); + // webnews.choices["categories"] = sel_category = new Choices('#categories',{ + // searchEnabled: false, + // itemSelectText: 'auswielen...', + // removeItemButton: true, + // choices : [{ value: 'News', label: 'News' }, + // { value: 'Frontpage', label: 'Frontpage' }] + // }); + }, + gettbldata: function (){ + req.reqdata("POST","db.cgi",{"get":"newslist"},webnews.loadtbldata); + }, + loadtbldata: function (data){ + if (data && data.sqldata){ + webnews.tbl.setData(data.sqldata); + } + }, + // getnewscategories: function(){ + // req.reqdata("POST","db.cgi",{"get":"memberlist","filter":"id_club=" + clubid +" and status='aktiv'"},fillclubmembers); + // }, + viewtable: function(){ + gettbldata(); + document.getElementById("newsform").style.display = 'none'; + document.getElementById("newstable").style.display = 'block'; + displayeditbuttons('block'); + }, + + add: function(){ + var frm = document.querySelectorAll('.data_news'); + for (var f in frm){ + if ((frm[f].tagName == 'INPUT') || (frm[f].tagName == 'SELECT') || (frm[f].tagName == 'TEXTAREA')){ + if (frm[f].classList.contains("datefield")){ + if (frm[f]._flatpickr){ + frm[f]._flatpickr.clear(); + } + } else if (frm[f].id == "categories"){ + //sel_category.clearStore(); + + sel_category.setChoiceByValue(['News','Frontpage']); + }else if (frm[f].classList.contains("richeditarea")){ + tinymce.get(frm[f].id).setContent(""); + }else { + frm[f].value=""; + } + + } + } + document.getElementById("title").addEventListener("change", onchangetitle); + document.getElementById("newstable").style.display = 'none'; + document.getElementById("newsform").style.display = 'block'; + //displayeditbuttons('none'); + }, + + edit: function(){ + var udata = webnews.tbl.getSelectedData(); + if (udata[0]){ + req.reqdata("POST","db.cgi",{"get":"newslist","filter":"id=" + udata[0].id},webnews.fillformnews); + app.viewpanel("newsform"); + } + }, + + fillformnews: function(data){ + //console.log(data); + if (data && data.sqldata){ + var frm = document.querySelectorAll('.data_news'); + for (var f in frm){ + //console.log(frm[f].classList); + if (data.sqldata[0][frm[f].id]){ + if ((frm[f].tagName == 'INPUT') || (frm[f].tagName == 'SELECT') || frm[f].tagName == 'TEXTAREA'){ + if (frm[f].classList.contains("datefield")){ + frm[f]._flatpickr.setDate(data.sqldata[0][frm[f].id]); + } else if (frm[f].id == "categories"){ + //sel_category.setChoiceByValue(JSON.parse(data.sqldata[0][frm[f].id])); + } else if (frm[f].classList.contains("richeditarea")){ + + tinymce.get(frm[f].id).setContent(data.sqldata[0][frm[f].id]); + } else { + frm[f].value=data.sqldata[0][frm[f].id]; + } + + } + } + } + document.getElementById("title").addEventListener("change", webnews.onchangetitle); + } + }, + + onchangetitle: function(){ + var link = document.getElementById("link"); + link.value = unaccent(document.getElementById("title").value); + }, + + remove: function(){ + var udata = tbl.getSelectedData(); + if (udata[0]){ + if (confirm("Bass du secher dass déi ausgewielten News läschen wells?")){ + req.reqdata("POST","db.cgi",{"del":"1","ident_news_id":udata[0].id},webnews.gettbldata); + } + } + }, + unaccent: function(text){ + text = text.toLowerCase(); + text = text.replace(/[á|à|â|ã|ä|å|ā|ă|ą]/g,"a"); + text = text.replace(/[è|é|ê|ë|ē|ĕ|ė|ę|ě]/g,"e"); + text = text.replace(/[ì|í|î|ï|ì|ĩ|ī|ĭ]/g,"i"); + text = text.replace(/[ò|ó|ô|õ|ö|ō|ŏ|ő]/g,"o"); + text = text.replace(/[ù|ú|û|ü|ũ|ū|ŭ|ů]/g,"u"); + text = text.replace(/ß/g,"ss"); + text = text.replace(/ç/g,"c"); + text = text.replace(/œ/g,"oe"); + text = text.replace(/[\W]+/g,"-"); + return text; + } +} + + + + +// var afterformsaved = { +// action: function(data){ +// //console.log(data); +// if (data.result.p.relpath){ +// document.getElementById('image').value=data.result.p.relpath; +// if (document.getElementById("image").value != ''){ +// document.getElementById("slider_img").src='../../../' + document.getElementById("image").value; +// } +// } + +// } +// } + + + + + + + diff --git a/app/tmpl/module/websites.tt b/app/tmpl/module/websites.tt new file mode 100644 index 0000000..b1aebdb --- /dev/null +++ b/app/tmpl/module/websites.tt @@ -0,0 +1,55 @@ +[% PROCESS macro/fields.tt %] +
      + +
      + + + + + + +
      +
      + + +
      +
      +
      + + \ No newline at end of file diff --git a/app/tmpl/module/websites/websites.js b/app/tmpl/module/websites/websites.js new file mode 100644 index 0000000..416e0d8 --- /dev/null +++ b/app/tmpl/module/websites/websites.js @@ -0,0 +1,122 @@ +var tbl = null; +var sel_category=null; +function initpage(){ + + tbl = new Tabulator("#tbl_websites", { + height: "95vh", + selectable:1, + selectablePersistence:false, // disable rolling selection + responsiveLayout:"collapse", + autoResize:true, + addRowPos:"top", + layout:"fitColumns", + resizableRows:true, + columnHeaderSortMulti:false, + columns:[ + {title:"Titel", field:"title", formatter:"html"}, + {title:"Menu", field:"dspmenu", formatter:"html",width: 250}, + {title:"Positioun", field:"menuorder", formatter:"html",width: 50}, + {title:"Frontpage", field:"is_frontpage",formatter:"tickCross", width:50}, + {title:"Aktiv", field:"active",formatter:"boolean",formatter:"tickCross", width:50} + ], + //autoColumns:true, +}); + gettbldata(); +} + +function gettbldata(){ + req.reqdata("POST","db.cgi",{"get":"websiteslist"},loadtbldata); +} + +function loadtbldata(data){ + if (data && data.sqldata){ + tbl.setData(data.sqldata); + } +} + +function viewtable(){ + document.getElementById("websitesform").style.display = 'none'; + document.getElementById("websitestable").style.display = 'block'; + displayeditbuttons('block'); +} + +// function add(){ +// var frm = document.querySelectorAll('.data_websites'); +// for (var f in frm){ +// if ((frm[f].tagName == 'INPUT') || (frm[f].tagName == 'SELECT')){ +// if (frm[f].classList.contains("datefield")){ +// frm[f]._flatpickr.setDate(""); +// } else { +// frm[f].value=""; +// // if (frm[f].id == 'teams'){ +// // locations_teams.clearStore(); +// // } +// } + +// } +// } +// document.getElementById("websitestable").style.display = 'none'; +// document.getElementById("websitesform").style.display = 'block'; +// displayeditbuttons('none'); +// } + +function edit(){ + var udata = tbl.getSelectedData(); + var uid = udata[0].id; + console.log(uid); + req.reqdata("POST","db.cgi",{"get":"websiteslist","filter":"id=" + uid},fillformwebsites); + document.getElementById("websitestable").style.display = 'none'; + document.getElementById("websitesform").style.display = 'block'; + displayeditbuttons('none'); + //app.loadpage('module/[% module %]/form_webwebsites.html?id='+uid,'websites éditeieren'); + //console.log(tbl.getSelectedData()); +} + +function fillformwebsites(data){ + console.log(data); + if (data && data.sqldata){ + var frm = document.querySelectorAll('.data_websites.data_websites'); + for (var f in frm){ + console.log(frm[f].classList); + if (data.sqldata[0][frm[f].id]){ + if ((frm[f].tagName == 'INPUT') || (frm[f].tagName == 'SELECT') || frm[f].tagName == 'TEXTAREA'){ + if (frm[f].classList.contains("datefield")){ + frm[f]._flatpickr.setDate(data.sqldata[0][frm[f].id]); + } else if (frm[f].classList.contains("richeditarea")){ + console.log(frm[f].id + " is richeditarea"); + tinymce.get(frm[f].id).setContent(data.sqldata[0][frm[f].id]); + } else if (frm[f].tagName == 'TEXTAREA'){ + frm[f].innerHTML = data.sqldata[0][frm[f].id]; + } else if (frm[f].type == 'checkbox'){ + if (data.sqldata[0][frm[f].id] == '1'){ + frm[f].checked = true; + } else { + frm[f].checked = false; + } + } + else { + frm[f].value=data.sqldata[0][frm[f].id]; + } + + } + } + } + } +} + + +// function remove(){ +// var udata = tbl.getSelectedData(); +// var uid = udata[0].id; +// console.log(tbl.getSelectedData()); +// } + +// function viewcode(){ +// var udata = tbl.getSelectedData(); +// var uid = udata[0].id; +// console.log(uid); +// document.getElementById("websitestable").style.display = 'none'; +// document.getElementById("websitesfile").style.display = 'block'; +// displayeditbuttons('none'); +// } + diff --git a/app/upload.cgi b/app/upload.cgi new file mode 100644 index 0000000..c9d67e1 --- /dev/null +++ b/app/upload.cgi @@ -0,0 +1,250 @@ +#!/usr/local/bin/perl + +use strict; +use FindBin qw/$Bin $RealBin/; +use lib ($RealBin.'/lib/perl5'); +use lib ($RealBin.'/lib'); +use lib ($RealBin.'/backoffice/lib/perl5'); +use lib ($RealBin.'/backoffice/lib'); +use CGI; +use CGI::Cookie; +#use CGI::Carp qw/fatalsToBrowser/; +use File::Basename; +use File::Path qw/make_path/; +use JSON::PP; +use Image::Size; +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(); +if ($cgi->request_method() eq "POST"){ + 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}); +print $cgi->header(-type=>"application/json", -charset => "utf-8"); +if ($sess == undef){ + $html->{error} = "No Authorisation"; + print JSON::PP::encode_json($html); + exit(0); +} +my $utime = time(); +my $db = dksdb->new(); + +if (exists($p->{file}) && exists($p->{filetype})){ + + my $basepath = dirname(dirname($ENV{SCRIPT_FILENAME})); + my $filepath = ""; + my $suffix = substr($p->{file},rindex($p->{file},'.')+1); + if ($p->{filetype} eq "download_document"){ + $filepath = 'data/documents/'.$p->{file}; + } + if ($p->{filetype} eq "news_image"){ + if ($suffix eq 'jpg' || $suffix eq 'png'){ + $filepath = '../media/news/'.$p->{file}; + $p->{relpath} = 'media/news/'.$p->{file}; + } + } + if ($p->{filetype} eq "rankinglist_result"){ + if ($suffix eq 'xlsx'){ + $filepath = 'data/rankinglist/'.$p->{file}; + } + } + #mogrify -thumbnail x300 -background white *.png + #ls -1 members_sized/*.png | awk -F\/ '{print "composite -gravity southeast wm_fld.png members_sized/"$(NF)" members/"$(NF)}' | sh + # if ($p->{upload_filetype} eq "new_profile_photo"){ + # my $sql = "select link from members where id=".$p->{id_member}.";"; + # my $ml = $db->dbquerysorted($sql); + # $filepath = 'data/members/'.$ml->{0}->{link}.'/'.$ml->{0}->{link}.'_new.'.$suffix; + # } elsif ($p->{upload_filetype} eq "profile_photo"){ + # my $sql = "select link from members where id=".$p->{id_member}.";"; + # my $ml = $db->dbquerysorted($sql); + # $filepath = 'data/members/'.$ml->{0}->{link}.'/'.$ml->{0}->{link}.'_new.'.$suffix; + # } elsif ($p->{upload_filetype} eq "spillbou"){ + # $filepath = 'data/championnat/'.$p->{season}.'_'.$p->{playday}.'_'.$p->{team}.'.'.$suffix; + # } elsif ($p->{upload_filetype} eq "member_document"){ + # my $sql = "select link from members where id=".$p->{id_member}.";"; + # my $ml = $db->dbquerysorted($sql); + # $filepath = 'data/members/'.$ml->{0}->{link}.'/'.$p->{upload_file}.'_'.$utime.$suffix; + # } elsif ($p->{upload_filetype} eq "clublogo_new"){ + # my $sql = "select link from clubs where id=".$p->{id_club}.";"; + # my $cl = $db->dbquerysorted($sql); + # $filepath = 'data/clubs/'.$cl->{0}->{link}.'/'.$cl->{0}->{link}.'_new.'.$suffix; + # } elsif ($p->{upload_filetype} eq "clublogo"){ + # my $sql = "select link from clubs where id=".$p->{id_club}.";"; + # my $cl = $db->dbquerysorted($sql); + # $filepath = 'data/clubs/'.$cl->{0}->{link}.'/'.$cl->{0}->{link}.'.'.$suffix; + # }elsif ($p->{upload_filetype} eq "website_image"){ + # $basepath = $ENV{"DOCUMENT_ROOT"}; + # $filepath = 'images/'.$p->{folder}.'/'.$p->{upload_file}; + if ($filepath ne ""){ + $p->{path} = $basepath.'/'.$filepath; + $p->{suffix} = $suffix; + my $fh = $cgi->upload('file'); + open(NF,">".$basepath.'/'.$filepath); + binmode NF; + while (<$fh>) { + print NF; + } + close(NF); + if ($p->{filetype} eq "download_document"){ + if ($suffix eq 'png' || $suffix eq 'jpg' || $suffix eq 'pdf'){ + system('convert -thumbnail x128 -background white -alpha remove "'.$basepath.'/'.$filepath.'" "'.$basepath.'/thumb/'.$filepath.'.thumb.png"'); + } + + if ($p->{row_id} eq ""){ + my $dx = $db->dbquerysorted("select id from documents where filename='".basename($filepath)."' and folder='documents'"); + if (keys(%{$dx}) == 0){ + my $sql = "INSERT INTO documents (filename,folder,filetype) VALUES ('".basename($filepath)."','documents','".$suffix."');"; + $db->dbexec($sql); + } + } + } + if ($p->{filetype} eq "news_image"){ + my ($pwidth,$pheight) =imgsize($p->{path}); + my $width=0; + my $height =0; + my $density = 72; + if ($pwidth>700){ + $width = 700; + } elsif ($height > 380) { + $height = 380; + } + if ($height == 0){ + $height = ($pheight/$pwidth) * $width; + } + elsif ($width == 0) { + $width = ($pwidth/$pheight) * $height; + } + if ($height > 380){ + $height = 380; + $width = ($width/$height) * $height; + } + system("mogrify -resize ".$width."x".$height." -density ".$density." ".$p->{path}); + } + if ($p->{filetype} eq "rankinglist_result"){ + + } + + # if ($p->{upload_filetype} eq "new_profile_photo"){ + # #convert! + # $db->dbexec("update members set new_profile_photo='".$filepath."' where id=".$p->{id_member}.";"); + # $html->{result}->{new_profile_photo}= $filepath; + # } elsif ($p->{upload_filetype} eq "profile_photo"){ + # #convert! + # $db->dbexec("update members set profile_photo='".$filepath."' where id=".$p->{id_member}.";"); + # $html->{result}->{new_profile_photo}= $filepath; + # } elsif ($p->{upload_filetype} eq "spillbou"){ + # $db->dbexec("update csresult set upload_team".$p->{team}."='".$filepath."' where id=;"); + # } elsif ($p->{upload_filetype} eq "member_document"){ + + # } elsif ($p->{upload_filetype} eq "clublogo_new"){ + + # } elsif ($p->{upload_filetype} eq "clublogo"){ + + # } elsif ($p->{upload_filetype} eq "website_image"){ + + # } els + } +} +if (exists($p->{gameresult})){ + my $basepath = dirname(dirname($ENV{SCRIPT_FILENAME})); + my $csdir = "data/championship/"; + my $gmid = $p->{id}; + my $cdata = $db->dbquerybykey("id","select * from vw_games where id=".$gmid); + if (exists($p->{upload_teamhome}) && $p->{upload_teamhome} ne ""){ + my $suffix = substr($p->{upload_teamhome},rindex($p->{upload_teamhome},'.')+1); + my $fh = $cgi->upload('upload_teamhome'); + my $filepath = $basepath.'/'.$csdir.'/'.$cdata->{$gmid}->{season}.'/'.$cdata->{$gmid}->{playday}.'_'.$cdata->{$gmid}->{link_teamhome}.'.'.$suffix; + open(NF,">".$filepath); + binmode NF; + while (<$fh>) { + print NF; + } + close(NF); + if (($sess->{usergroups} !~ /championship/ ) && ($p->{result_teamhome})){ + $db->dbexec("UPDATE csgames set upload_teamhome='".basename($filepath)."',result_teamhome='".$p->{result_teamhome}."' WHERE id=".$gmid); + } elsif ($sess->{usergroups} =~ /championship/ ){ + $db->dbexec("UPDATE csgames set upload_teamhome='".basename($filepath)."' WHERE id=".$gmid); + } + } + if (exists($p->{upload_teamguest}) && $p->{upload_teamguest} ne ""){ + my $suffix = substr($p->{upload_teamguest},rindex($p->{upload_teamguest},'.')+1); + my $fh = $cgi->upload('upload_teamguest'); + my $filepath = $basepath.'/'.$csdir.'/'.$cdata->{$gmid}->{season}.'/'.$cdata->{$gmid}->{playday}.'_'.$cdata->{$gmid}->{link_teamguest}.'.'.$suffix; + open(NF,">".$filepath); + binmode NF; + while (<$fh>) { + print NF; + } + close(NF); + if (($sess->{usergroups} !~ /championship/ ) && ($p->{result_teamguest})){ + $db->dbexec("UPDATE csgames set upload_teamguest='".basename($filepath)."',result_teamguest='".$p->{result_teamguest}."' WHERE id=".$gmid); + } elsif ($sess->{usergroups} =~ /championship/ ){ + $db->dbexec("UPDATE csgames set upload_teamguest='".basename($filepath)."' WHERE id=".$gmid); + } + } + if ($sess->{usergroups} =~ /championship/ ){ + my @upd = (); + if (exists($p->{validated})){ + if ($p->{validated} eq "1"){push(@upd,"validated=true");} else {push(@upd,"validated=null");} + } + if (exists($p->{result_teamhome})){ + push(@upd,"result_teamhome='".$p->{result_teamhome}."'"); + } + if (exists($p->{result_teamguest})){ + push(@upd,"result_teamguest='".$p->{result_teamguest}."'"); + } + if (exists($p->{sets_teamhome})){ + push(@upd,"sets_teamhome='".$p->{sets_teamhome}."'"); + } + if (exists($p->{sets_teamguest})){ + push(@upd,"sets_teamguest='".$p->{sets_teamguest}."'"); + } + $db->dbexec("UPDATE csgames set ".join(",",@upd)." where id=".$gmid); + } + $cdata = $db->dbquerybykey("id","select * from vw_games where id=".$gmid); + if (($sess->{usergroups} !~ /championship/ ) && ($cdata->{$gmid}->{result_teamhome} eq $cdata->{$gmid}->{result_teamguest}) && ($cdata->{$gmid}->{validated} ne "1")){ + + # my $pth = "null"; + # my $ptg = "null"; + my @x = (); + if (($p->{sets_teamhome} ne "") && ($p->{sets_teamguest} ne "")){ + push(@x,$p->{sets_teamhome}); + push(@x,$p->{sets_teamguest}); + } else { + @x= split("-",$cdata->{$gmid}->{result_teamhome}); + } + + $db->dbexec("update csgames set sets_teamhome=".$x[0].", sets_teamguest=".$x[1]." WHERE id=".$gmid.";"); + } + + $cdata = $db->dbquerybykey("id","select * from vw_games where id=".$gmid); + if (($cdata->{$gmid}->{sets_teamhome} eq "") || ($cdata->{$gmid}->{sets_teamguest} eq "")){ + $db->dbexec("update csgames set sets_teamhome=null, sets_teamguest=null,points_teamhome=null,points_teamguest=null,validated=null WHERE id=".$gmid.";"); + }else { + my $pth = "null"; + my $ptg = "null"; + if (int($cdata->{$gmid}->{sets_teamhome}) > int($cdata->{$gmid}->{sets_teamguest})){$pth = 3;$ptg=0;} else {$pth = 0;$ptg=3;} + if (int($cdata->{$gmid}->{sets_teamhome}) == int($cdata->{$gmid}->{sets_teamguest})){$pth = 1; $ptg = 1;} + $db->dbexec("update csgames set points_teamhome=".$pth.",points_teamguest=".$ptg." WHERE id=".$gmid.";"); + } + $db->dbexec("select * from setcsranking('".$cdata->{$gmid}->{id_season}."','".$cdata->{$gmid}->{id_division}."');"); +} +my $js = JSON::PP->new(); +$js->allow_blessed(1); +# open(NF,">upload.txt"); +# print NF $js->utf8->encode($p); +# print NF $js->utf8->encode($sess); +# close(NF); +$html->{result}->{p} = $p; +print $js->utf8->encode($p); \ No newline at end of file diff --git a/test.pl b/test.pl new file mode 100644 index 0000000..65072f6 --- /dev/null +++ b/test.pl @@ -0,0 +1,29 @@ +#!C:\Strawberry\perl\bin\perl.exe + +use strict; +use warnings; + +use Crypt::CBC; +use MIME::Base64; +use Digest::MD5 qw(md5_hex md5); + +my $plainText = "testtest"; +my $id = "aabb"; + +my $iv = substr(md5_hex($id), 0, 16); +print $iv."\n"; +my $cipher = Crypt::CBC->new( + -key => substr(md5($id),0,16), + -iv => $iv, + -cipher => 'Cipher::AES', + -literal_key => 1, + -header => "none", + -padding => "standard", + -keysize => 16 + ); + + +my $encrypted = $cipher->encrypt($plainText); +my $base64 = encode_base64($encrypted); +print "Enc:".$encrypted."\n"; +print("Ciphertext(b64):$base64\n"); diff --git a/website/.htaccess b/website/.htaccess new file mode 100644 index 0000000..d15b083 --- /dev/null +++ b/website/.htaccess @@ -0,0 +1,7 @@ +#SetEnv PERL5LIB "/usr/home/dksalu/public_html/perl5" +RewriteEngine on +DirectoryIndex index.php index.html +AddHandler cgi-script .cgi +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d +RewriteRule "^(.*)$" "index.php" [NC,L,QSA] diff --git a/website/css/fonts/ledf.svg b/website/css/fonts/ledf.svg new file mode 100644 index 0000000..30121bb --- /dev/null +++ b/website/css/fonts/ledf.svg @@ -0,0 +1,15 @@ + + + +Generated by IcoMoon + + + + + + + + + + + \ No newline at end of file diff --git a/website/css/fonts/ledf.ttf b/website/css/fonts/ledf.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ac8e4b1879a5cf658a939fe46303c0f4031ff104 GIT binary patch literal 1616 zcmaJ>O>7%Q6#iz%cK%AtCjP-mRO|#NxnL4Iv6Hl*rBaJ3S`npEiYleVNo=Q*V_S|Z zIYNkIq0j?8B7qPm!>LHU*=xSp-4w&2Z~fl;-ru~L zx3h)-Fa#44b8lUFB^?|I+@a??^5*tlzSdg*>>eN{Xg5mv{TlW2v_GWoFO?69pWfR1 zo%Tn7X6_d9JFz=kLxArE#`*^!?f(mrO7ty*=z!F`efb1Dugzu->%?ESIE41C~f@fR{;K;`w2 z;I{uu2GF`It*!+_k{MK6JE6D(R5!&FjJaAmSrhQ#ZTd$z4GE3DcR?Yy19Hnw>c9EV_HiPd8Kl8=Mmf=O zyvT(UlYy`viewV$?4rIfE&RHW34dQSH<}m_dQu*>t=XleS!qyq9@vjX@Hg$q{<>5u z{oJ`NJ{Ljzu{4%uJEqFgDD7*H#1s2hG2PBqD)!%EOibECkJwrRrz+J{$1%gslYPUY zFAxqzPm5?|elGW#$YmE7W>R8iT24+cE@U(5NH`SGaPG{?)mSW@Zl*~TvDnp>Gv`)o zwNFr)`0%jl7T9nSn52&Fp4~(r@3lHVMAEM({Ym{fo>C-rzcP6;%RUmD z!VsGsQ=kjmQc{{-s8?;89kMC0R_xp=YU3N7_czuywC09d{uIFT@nPagm#8!4DV{fj z9D8QMQ#p@&vF!0DiA8v7F+rZv6S_?331OI~<@`FX>Xpi+S*C4pW0uk8h&4h|7miZJ z4r!J_YI7KELsPpn)E(yqcK3_XMEL1rNV9D|WmpCuo>AR3vi|OSKfDt>`vgPIVDZcH z?FWo_x@+;4Sv33k&Rt@S^G&h0B1*MVFAca6*QLsoO}0F(u;D}p5yEL)$0v9wriJ0G zG=L>Ff6_@u$MD23zViABXIZzm#^01_T-orlP>mK&=+lzWQK>w>A9>fC7a$%>4G78v1alKIAzfrBk=Tmc7 zr>l;A+&~o-#JO+^bG^yEc&$*nSR<2~^bdz!EbRaQ literal 0 HcmV?d00001 diff --git a/website/css/fonts/ledf.woff b/website/css/fonts/ledf.woff new file mode 100644 index 0000000000000000000000000000000000000000..ba036961220165c6f3642a5b035ef4a0c28b8b37 GIT binary patch literal 1692 zcmaJ?L2MgE6#cW~wd173*(6@$Br0}-om?=9o!CiQ&{C;E6|EYjQi>|2WRuuVCC82& zS2%)5D^93~f_g*BAqT_(B*cLeQp*Ysl~Cw`9zh@k7sIJYl{naI-pp>o!l8fj|GfX^ z&;K)jXPvjNE-euwNbr#QU8UVAx9#CpK43ylm0?``gwyWqCrH-xrUKY36# z_XPJ7d=V>jpj_E6f%~0Ev4nnnXZ_dhqPayBfKpy){N6_2Hb`)X@Lv=f`i6hEz0+ud zvro7YY_L+>6miH$!$R2~inU`lQ8(~6{Df4U7OUn?kw|?WwKs&GAN>B&Zfy^H4ZeFC z$ALKijD1Kd_V$r-4F3anWPehQh2i^!4fs8Q4Wib4Zg*`mI24TRDMld)X=N3lG0X`( z1}mb*C_ryw9Hap-3b;h;V(azR<<_;<{cfk*#T;_{k7M26^sn^?`d9jw`Ws#*8R#>N z7*;|L*VE96ExY5;u@%h;$mI7jU@bcrdCB>$zk$Kc~&6nW{0KR70`C zP%_N46hCU)Q}gpv+<@&obe^!tFUpbgMY&x5p>vmg$|BAaZp=@0ED@!^IyWA(r_RqT z-Og95&R=YVjXQmhQCcB%m5Z*9(j+R6hx%D47#)tCWifqby6`G1Jf6)qvk;hg{QBa#3(LE^%TR8+Zu8*a_%+D!!9mkq;E)VJkT|w` zc8fyzHpKafrBp4YrnKj9N|w@8;o@YrbHvt}!PYw#qb@nNu-xjBc-5BGfm)naN}W3; zWpu6c{@Ti#(p(ei&k*5!co29}B__K(f%E35fSS4JM8Q)(<~}|J%%T%>N$7-@)Ob=$ zGQ+ZL`PXp=zZH~XTaJN^*+v^JRsbPgl7m<*MX?P?8_j4NirA$g?l>;6yI&egMo%Au zTW#x9$u{udjN-0AwRhh8_N~bIr_?7KOFu5$eTW%v?Ao|xHryV(b62oNep9F|1Xg77 zOW2)pDX~oWP}>^?HsowCekab-O**7UEX@p=DNOUC|B#c4((z0`eeTs`GOb%%!CSiM z@f`e19u5HC@UV*8a>m0!@CzR9r4cHjZ!8c7(}NioE7VVyJ .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%;overflow:hidden}.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} +.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{} */ +.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:#c6c6c6!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; +} + + + + +::-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-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; + +} +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-weight: bold; +} + +button.Button_ImgPlacer +{ + + background-color: rgba(0%,0%,0%,0); + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + + + font-weight: bold; + font-size: 10pt; + color: #fff; +} +button.Button_ImgPlacer .inner_border +{ + padding-top: 0pt; + padding-right: 0pt; + padding-bottom: 0pt; + padding-left: 0pt; +} + + +div.PageHeadTitle +{ + font-size: 18pt; + color: #fff; +} + +div.ListView_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: rgba(20.3922%,20.3922%,20.3922%,1); + +} +button.toolbarbtn:pressed +{ + + background-color: rgba(20.3922%,20.3922%,20.3922%,1); + +} +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-decoration: none!important; + font-size: 13pt!important; +} +a.toolbarbtn:hover +{ + + background-color: rgba(20.3922%,20.3922%,20.3922%,1); + +} +a.toolbarbtn:pressed +{ + + background-color: rgba(20.3922%,20.3922%,20.3922%,1); + +} +butaton.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); +} + + +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; + +} +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); */ + background-color: #003268; + /* */ +} + +div.FooterLabel +{ + color: #fff; +} + +button.Buttom_BodyNav:hover +{ + + background-color: rgb(141, 141, 141); + + /* color: #fff; */ +} + + +/* div.portalpanel { + display: -webkit-box; + width: 100%; +} */ + +/* .portal{ + width: 100%; + table-layout: fixed; + border-collapse: collapse; +} + +.portal tbody{ +display:block; +width: 100%; +overflow-y: scroll; + +} + +.portal thead tr,.portal tfoot tr { + display: block; + width: 100%; + +} + +.portal thead,.portal tfoot { +background: #384462; +color:#fff; +} + +.portal th, .portal td { +padding: 5px; +text-align: left; +width: 100%; + border: 1px solid #c6c6c6; + +} + +.portal tbody tr:nth-child(even) { + background-color: rgb(247, 247, 247); +} + +.portal tbody tr:hover{ + background-color: #959fb9; +} + +.portal_selected { + background-color: #acacac!important; +} */ + + + + +::-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: 0; + border-bottom: 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 +{ + outline: 1px solid #3a6fc3; + /* 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: 0; + border-bottom: 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: 3px; +} +/* 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: #757575; + 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:green; + } + + 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:#fff; + 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; +} */ + + +input:hover:enabled , select:hover:enabled { + outline: 1px solid #607d8b; + outline-offset: -1px; + /* Opera/IE 8+ */ +} +input:focus:enabled, select:focus:enabled { + outline: 1px solid #607d8b; + outline-offset: -1px; + /* Opera/IE 8+ */ +} + +input[type="time"]::-webkit-calendar-picker-indicator { + display: none; +} + +.border-bottom { + border-bottom: 2px solid #00bcd4; +} \ No newline at end of file diff --git a/website/img/bg.png b/website/img/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..7f32c97c84f30fc8e91cbe64425bce68e734bdc6 GIT binary patch literal 764223 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 z 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 literal 0 HcmV?d00001 diff --git a/website/img/favicon/android-icon-36x36.png b/website/img/favicon/android-icon-36x36.png new file mode 100644 index 0000000000000000000000000000000000000000..747aa8414e12cc681a64c37d28b76c7c08a0e73f GIT binary patch literal 2623 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 Js_^{v{{X--zIOls literal 0 HcmV?d00001 diff --git a/website/img/favicon/android-icon-96x96.png b/website/img/favicon/android-icon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..f1005975806e9333b6f9c85794761e9cd626a020 GIT binary patch literal 7515 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 PX8xJKnTG!_qbh{o literal 0 HcmV?d00001 diff --git a/website/img/favicon/apple-icon-120x120.png b/website/img/favicon/apple-icon-120x120.png new file mode 100644 index 0000000000000000000000000000000000000000..3877b6befb9e76a0a593f505032a55f7235e39f3 GIT binary patch literal 9497 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 literal 0 HcmV?d00001 diff --git a/website/img/favicon/apple-icon-144x144.png b/website/img/favicon/apple-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..86c76eb2beebd2ab89abddae793f5cbef9d7f1e9 GIT binary patch literal 11944 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 literal 0 HcmV?d00001 diff --git a/website/img/favicon/apple-icon-180x180.png b/website/img/favicon/apple-icon-180x180.png new file mode 100644 index 0000000000000000000000000000000000000000..dbb3bba0f86e37d40b27002395e4fe21d06f3410 GIT binary patch literal 16115 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 literal 0 HcmV?d00001 diff --git a/website/img/favicon/apple-icon-57x57.png b/website/img/favicon/apple-icon-57x57.png new file mode 100644 index 0000000000000000000000000000000000000000..951ada55e253b3a43eaa4b10f6df930258a3e142 GIT binary patch literal 4083 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 Js_^{v{{X--zIOls literal 0 HcmV?d00001 diff --git a/website/img/favicon/apple-icon-76x76.png b/website/img/favicon/apple-icon-76x76.png new file mode 100644 index 0000000000000000000000000000000000000000..b9b0895081c71ae6fe341057d11cb76e461813f6 GIT binary patch literal 5624 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 literal 0 HcmV?d00001 diff --git a/website/img/favicon/apple-icon-precomposed.png b/website/img/favicon/apple-icon-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..f64a9a7749d1e91ff7e8a9aa62a2ab4e9f76cede GIT binary patch literal 16073 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

        fj)zomW6C)E|%OsrO7eX#Zn8BH(<{ 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

          fj)zomW6C)E|%OsrO7eX#Zn8BH(<{ zbkqT}kLrc=?vWA@IHCaM^z5>NBo2)(O}6LIA)Ir0+3>*I%XhM^-8c=iI~S>*r8-jB z4ehq&v~eWMrpSHv_GU;2e*mR@XD77RE!{$xi%#Zy7}pi?Ppt8_S3}(Y)6Nm$rrFqn zpxz%o(5AM=+n)Tj{MnSp-zj1QZAH47Sr7g>e##86G&Aw5m#l3TVy;OQNL;uCZI+g+ zuIscL*W&$i4mb^(C|L-;K z1g`V=^otx60W2mK{39io<^n>(m$ba1K62J<58f?c!w;91vUxW*g`PsCWT@lzmlv;C zfG%U}f|^CL&TfORk~;p7j0AE(8>LOd;_dCt($cPyhM7kQGylQpkg**5IeI(CTXy*3 zS6(XZ-bJxYG%+)*xus^BWdL~2REe!}CtTU)$>qPw{7wPT9rr! z5u40hFp^Miq9aq`DY%jGc;l{xh{cew5I=;$Cj0hwN9utssI9(}0mysJ*##+kkCw5V z7LkDA{T6j3JT48k!z65Apy+8Cku^B=mv2#opADwE_RTm+T6$J4QBDv~BBTIWZv`Cz zK`A**1hyZKrm3ZM|NZ$D^0qJ4TPx>TdQ5&6Sm~gJdZ!e(vTP=v?3X44ym}8S39cwG z?rYo+4JP@@BBFbTV`=?XuUA=BMvL1f^Y9nzK-UK>#Ya?Tm(3&&;oQMzpV- z{B|eKgF2k%%%gBcrZ5?Hd0G2maIzq_!AipzjIB%R+pH>OAbapj-{SmdZkZ->&2miy zm0eFd#wdFkbWF!cjnlA;$Q(ub5bc{RU!Rogc5jdpmJJ8VU|E&<)oRpyyN{H)XU3;A zgQwo1Dz*Ar;ZVv{T-3}joiwsFFt1Wf5PKMen47d@CSfx_+7M5D!e-D6kS%l-%@gEmAmBDlc5e_X z{VnOMy&p3Tz02Wc`RC;~)cHrYED>~kj?wFWH!jq&ZK5zfNp2)$8`h>$2wltvMe{`% zM4QW^4oM6*tD6k%lb^x)D>t1* zm0#{;JyVc!=Ls*U53_JEI`~AlEcjESJhehXny3TaR5at;R5}8kR6(T*ag3UY@e)}w zNOT0$2aT&Qwr(X&SsFMTxrj12;m(?bC13fc5xx*UYr`SY5rt{RQe|Q69LR{c^NT#bpsD^jQ5AL#kmm}hLI>CnFJT(M^3uuuiLBsnr-=#4%#Du{sHiM^z$ zpV8g2S_aGv8qh?N#&}f|DaE82`xS$s2BWSze4t$Z@(5#_HPt1z!HX(rZ_asoVPSzz zRCINDf8`B7QN~S&YmYr{7}I3Zq((1=bD{yeG%YxNVUhE#L>RU|c$OHcR%pZpkrN3_ zO~mxt>*NK0N*jhfI`FOOkc_Xiq=ih>T$+%>#OQIh=()9~s%muE2B=p+wH!9GG#Bh> zrv2+jv2wK38j8bdpTdSPE90Qq2pUt&US!1YV!~0i{0j~yCjZdi^Ytyl!oqdVrN$PX zkZcmt$l|7^_2O?wQMjh2yceQV#PTKHu^^0!Y^H3t4w>-Rx%K53k2L zu@>U;;QI(5P?=mAJuUa~+ToWkIQ25&v}q*4$w{;z_DF4I8<|y_REuaCEN4d%VUd7L zelMSzI_Eqwi!_KHj{pw(V{pn>dD)`W&cL!5&1|kqqM-&NEPQlCobfpP1_QBA4#!f* z%PYEt-zQtz?R{cYfOtyj0lg!E$Gz?upPmP zti3%h%~$v3MNEqpK$c0A6Vda@h8v=Vb1Q|BN=9;;2WTL8gvnQ%g^LeK&d$gG&CK*J zD4;l-Z=YCi(g%aSd_m40{0bT5BL#tBU=U)jMYxhI&QtM+kLU;JRhN)}(;(%o?|C1% zg%cSwa6JlR%=N}EkjjD?zM}!yhIK9uQmRp4GOL8SMM2(yuQlVHBqNa|`rJy~4z6hb z_~GdH#D-@3Iq_Xy^n5YMol5YtN+0DCNn#X30v8kd-6hz3lcB_zt}V#;v->?)$uZAH zcX3sT6U3|izO1=KgRhQ4m7J7R28Pn4tGB%e&c~Per4?WGhRBHevkcnUFjg9h88O@= zb2vRA=5W%SsJ}O1GW3aq_3o%QwvPdIopSxT(>^A|{rYO!Hk&k$ z6B!JM zmZx)l9t)wgoo^K{u{xjT%j8o^KYzw$H9uPo-QN^P{~rHnEsUov2j-qc3HOiRL&L&$ zCzqn1I-c{5CP9#w#iAmW`!LFt-RV#fGAI4}<)1vZ_(N67+Xob_Dpgqrhfi&jt%|Jd zz*xO+G)clFmaHryFJTG;Lqi-~+;Ab!eQIIh<>g94 ziiBz8vy~2PZ1Km7H6bCP{pv(r~-Nv6+45Ezp+ZFz%=Yv?H;g2m-T=*^RCGF&XemeW9K7fu^9^3JbS!9 z!bH#ixiST}_mL0;iZ+KO{Qbez&D49btn()>$Z{(Mii9Ek?EDHbR$)L>0tD9RgpWIg zd&;BdBDH;+`j&4)O8T7DTwBG@%X>{H6wk&uy%|DLYgdIRk8v7v!|BDp9oE3^j@b*yDT69c7*d@dV5p2}s@c49@Fw#KtLWtw35%lHD((~Y+E?Zae?#~xvK`esn zjoa=M_nBnZrN2r4cp|}_@j%e`D>M;G-FQO2{&ZovOOzjzLlqSY;|Pz47;q;iki{WQ zLYkSGiMYJHoqh|F z_`kVO8X+1S&5?Z{+hqbJPy=Xwc!b9Lh+^?_z3SWdX*q9cOalW038pvcn%CFY#g&yK z_07$f^?iMP|4K_s3z5`qo&VKG4I@yejVY+APCXqR9i?PtWTb9xnu%Ub@F=L{2mAXD z53uc=?j+foE{Ds*Z zJUr0fP(l*wUj3S%FYW7l`?+9BpkLAKnCb zd3z7o@k-$jGo@?Vg6^)0UPS5fGc~_M;Ad;y_0DI$@v>bKHZ4m!RkQU+hlg;Wug(5f zHccm!m;tr5wKMbc{3hQTU(*s15q%vVmSisYRsTDu#yIbfwXz7*sS1EoW3(6uM^sQ$ z>^$o0A25?pR75oiJmvHA_ctHUWcx6_w{!dZ_*lx{Unu0|-v%8uHJoeY3mV1{Of$Z# zOIQc6=c3Td1XDZT)8#!49i6t;&Q22U9E{m2HPhUjoSZMtEA1tRhlgrH$s#Dqb%zLq zI3Q1V97TLtH*(*1QQU9eQkt8a-)%-v`xNFB2Z&&wn8E0mX%1Z(N&c#kf%*t%~7-y%*HiHo0p zjl-+79?#SlA?d(OXh7I#=o1?M?B?x_Sb;w%8`H?8!G#fVcXxM5IyKOt!HDm7w-v)B zC>T36rRoC*n2B<9>!B~fR@T-fEiHIDIyyA+$>cdyR8*m8c;5tu zOCiK8O_nU39fNaU%V+GUv&KubnJFM&(9$(o^_oDy>LR9~h|*?89RCbxM%MAcu`yH- zl!78D%On7`O0@tO+|CW4@1{hu?y@#EHsT;wy^A93qi@sG$e`B@42B|0x?gEqBqE_o zC^$?N)%Eqmo12@bT^xeRWTC1klE%gq(J?V>sjS_j!^4OsCMN2&b8a3Uq%Xcs-+9^D zu~yohhkE?4eypq{(8(vu=<4de{2Uz}wSIYi`ZhJycif9jE(inWiAG3>M8xL=9(dks zd%A0alYjyLF@qnMnW1g7!J-Wikz;nk~G3h&;Lg$6wwRV{Y=o+I{CAit!t zJkT5ebkI~vO;3+pFb$IohzfG@_mjA?2ZighI&qf3ia>NJvtx5Uym zZ!fRnj*bOf#av!>rPS=~*qh%AWtEjkot>RV{{Hvj<>lq+Q&UrFK|w*!#JISc%|Z7b zf^qx6#j(H8jj4 zhkJ&EgmePTSmfi!j}{)Do)L|W96i0gTfnLSAcqkj4FL&>mWF1)!oDRIBqt}Qpr(c` z&`v_n%6ig{q24cq{*@C009SH$!VR!P8|m$OAV(&vemKw;8Zbk0z!Jft5XL_|IJi}` zwtmBqq4b71!=dbb?H)5Tb2_kK0Y6Y(QzNOPlff+}_LSDx|NH<;NO+e8tgxP*p3Q>; z-NUo9kh=k7D&F+W%ul!H8ymj6-*8s_4+;nsvt$wArh@CSB%Y(E$H(DWSqpye+*;Ui zHXg|<@F^)Ni_=RxI*3$NRn-~svwF`r_ld_v02p&x{en}g+c;wS{D&y$?~*MiX;OSc zLqoHp5s>zZi9zOfT7-T1B6zaeiC3joL?44q_5PKg3=jeVervP`S5^$gy^nuQSdJ$1 z`TP67xqEmxvn1Xp1|dSyw$4OV$*2aNR5BEJ;3W^_w^5m)pbHT$V_WPfxCX z4!^9pC7Cmlu`4+!w6U?V={PvB-(|5!jaf-~dh&>hif-=j+r;gv+Ogm820z~)G`np{ z0TyVK`C>_+;o!h*#Z6)}U6`~pno`!%;`u1R&dMsIs){vLAW~J=*x0XyFMA=H^6S^H zCEU2Lv2m|KX=A+kA3ih%o0*vn%#_I&@bK`Yrlm#PZiG_B#l?L&C=6^0xN!g`I@xw} zZquLg^z;;1bFjR;6+cIA{s=Bn(L`Wgv3YE#BBe?s+}*h-gReD2uYXAU-S1^l)We;_ zHPPA(l3rSwm6>GC%%~|tA1}vE&d<-~Lqgu7p`&y0@ zLiBq4xB%XQ#f5RjBQD-AfBgHmWmi|%s)K{Whm4GkyOv0HM$HXD{=#6unh zlPSgG?Pn{)to3`I{;sIkXz%2RiHc$*$?+6!t*@`^wK)*jOy=$}K6d2%o}6YeKG@m{ z%V5#9*!!LVptxa&i>!+ad%DsaZRU*ORe!d>vbNKO!vIJXFZ_N3kUpmR`ub+zNJ$64 zWOr}x-pk92nvoHOqvrxr81isb+r^!&Odne+c%~xUzG5#bNklX{LilYY1Qg>K=`4jJ zX=zEv@4B7{43!zsWZCb9#!!cyk)$Gn?SE|TIJZx?8}dFr{GUI6mT5Csd)&)1-G4fi z7hkS&S?(!x?HKHHx6`8M!h&9rU;;Jg-xw$zreZuGGXEp%9CQgrzn)Q-wy{mF|cdeW@`Y19oGDrZ2Z`kQD z_o=O>rbeffk(P}Ov!bFRnSBBQz(@q(-;0|YSwBC&Hz2@q>YekUh0 zk4U?^yHm<5EBgcj|2p-xwGp`X-P3;`AE%(rHiJt2SYD1-6Mw=NF2Dk4Rj@(@OUW&`0a6`FC$$yk7gk=L~g=OnC2w$=wQ zmlPlWtKkq<9zF=fYS@l3p2flO_xAP$cqnwh*Zjv?%s7eboO2@#BcYJ`_X&f8Qi+L) zumk_fs;U^hGLIHO(Epdq7k6H6yzbWN=m>~A$K&~JUo{_q_F`p z+3Du%i#&bB$ix(;S~c_vTNEanKnTF6u#6cPu+dfnHo@eGqN1X?lcpmsII(46kpSM^ zJTO#1y`1ms^uTFjk$|J#$+0aQ7)c^)cHfcvkL`a@s_^?W#?T!6@9$-e5b}l?QJFlo zpdc}T0`Hp#*b(4YkA4e#+ke0RwyEQ%LQfajXA*92vHzaV^QV>G~o04sE4@YnqBxd7@1_?7=$ zU*Xe?JXNm?cMhvCmn9JpR>BZ{zS}XJZ!qqDLqj9^A4kbD4Iv4=8=^AfT`x?MW*wKR z(U!uOmACUo=OnCr>ic&V(a|9=RV026c+46h3JMCs)4=5@5M|&A7hp(O)pN(#m8u0@ z48p>>$6mrgfJ0$qW$j_BhmBbcZf;TorUE$A`hs25$wep1QTP97F%SvFP-5~DF5u+m zw$Lzi3ZXDd?DRaaIA8CjbDXd9Utd|t!@$IJcCxeE1Q;G0pqqvk7H%sK&QWO&0jC56 zdH`xMGSnjYr8jXnKMVt` z{*6Q1GRbHP)#&rnKR_hy8=`du9{*wj^xO7<_{;s5>;`YFoCq?@x{qU1QzK!okUta@ zh?!j61c(g|4g%EM`R~n5TeY#z8^APtV>Oq{7Ji48&DcE$Tx?1f0VH{|d6cr76=Pd~ zgk{2#wzG9bTT?T9)xk8C zIE8g0;P%arepV2!m5ZekJ6f--tX!UTpO^ObQUD|-HYMfd^x@|B#&UnCIIx8YK@v7# z2DeNRv$;f6=mv09P(;LX?Bkn>jPMSYhYtEa~rF(l+Vth9il8aeEp%?C9DPFDXrA!;wf~(CW8k$i>B_Mw&G8 zz~?xxxAN8f!~g`4jMvX#aCt=qqUqTZVwq&9dn#gb%p4`c9N*lX-6+H1;i-g`(bsRs z|IUIgcT&XtRjX#_p6*7)+nMC0yU!qOhV6BZZf;H8C4K9*2YsOfETTxhYu(_w!J*|! z6$8H^=-US;afe#N5+9$TiOAiP;qkNO%YzQnivH)D#(L-VjwVMitN!QmO(&nf`@2h? z?Y0E@S5HOakC;`C*V%2``p`HJNP(>j6*Trxq$p{vh#Ua{asTxsMI4ISoxFwBXLhFV zKC00@_&{gC61Kj#VZWl#i{2Hc@j4Lyq~6)ZNhc@_XViN$F;OmukH9;pEhWMkTU|5T zqLbqZW=25G zio0v^&=Ej@=QmYQ5fc(*@Oe-}h>$EH6K<-k?5b5#9e`DJ(W2*(GmHwrm5;u;9iaC`nY#H6A(hZQLhN`V5=j- zp?$risjC1A3ILLx2V!JS4t*~Ui%-Oxn*$LS9v-T1+kL0iYDqs?PReN&kI9(t53?M@ zppUk}>hP@x&nGCzriH|&1@-OQxAYp&zXmInzlR$T0oN3V$FLidOcBa;@aqUUx7%Rm z#|-kk5IOY;!2%d#S<;S=!i<=Z8ljYW^Cvp0Iki?7d~9->-GS2(1~JPM$p{BiFq{`(r=uACn2yH^(ntmJ@Z~DQ5bVO zQxp=FCIUhW6DX@~#>dUUtu1^OS0G>>wOIC+;GDO>1@h*!8OtgQ%MFN4*5ibcQBh+0 zT88JZzxQquQDWu9VB2imi&g(}*`P$$g0nEoRIxe@~Cpm1L9$oY7T zY-IyGKRlAwGV<1L_8(){UaTfPC{&?$m%UZopLG`m+J{7V2}@{ZUA|l-gu~V|J+hOe zfv6CH{=Y3e+@#`fuLB*1>(RiRs~U03SDl;X>D1PpSwq9X0Up&@1(UES$D;7s4Gi@F&o$L( z>wzX#3H>{@IAmAKs6!~+nij*Y31G*;acoEqt5di77_K;#Tz3N*|{M$J}xy|G3Qbm}<=^&-J06E+v7z^OXxq_q{cu1_H?9 z2Z_3lPDJ4p|7v3G6ynAW4zYYR%>_MiYp$!YbWLn{>*?ana>Su)V^rCrDOLr(byQWV z=l<(_Yxrl`8aDKU>B-Zh-yPi%1Sge<3bBghd>ABhUAcyP)o*-b%(+=t_@`J~Q3gN3w>XShat$^K zMX9hKcg6e=l{?QGKKN^=XgonthQdCe1D=N=YIW?C`&><9lLqB+j~y?KGQQz~*6L(6 ze&k9&HVI?k>9#K5wBp78ChH)6>Ss(u0baNh|nORejY5PMmwqT9EZF!ma@yj36 z1f&>Xp!T_R3x7+|YDqEouTE|$JsV<-8~cs}8AJqP5>knW=l-&WI)vFlsV0}T;I^xM z`q0%ib^EL+s-`k73AIL~#-2az3W6!|k_C%a`>53@u>xFZmDhh_$`U*&pv8ZK2uY_7 zXc*ySWCC@KIsI;1m7l)HD{Z)~tlx#OIhg=kID4M|z6`94OH<%bcD)tpusiSk{4m

          !r>00bovaH8hqgkBL%V2cM`-;K+sSWUBVoFiH1Z&C3PxhI@`ok;&ju||Y0 zS%Weo3XxKQ>8nkQ;N+c)8DaA?z#6g2&FAa%%fEd2W_!LarkatVLlqi)Xy@VW&0zGj zjl&a4VWF8hFw21-xtOxiDJG5bL&G$(%d={L3$m+e6B%Xa>-nrZSc#ziAuEQ+Ch|<;;gapRY%R6BOg;Dr{cO6FU5}rsIlWCpAoe1#?IO-HID)hHK_DmB+$a zc>N{GLQ6|uB`FDaQbN4i3`rW%4mrU6_=hC<(;o_q+m7}0+p35>d3;&?0@@+SUjU4LB?96T(=oCd32($u*xSA^DjojT4WiAR zdnIpqvSkO4O)_%q7|%Xy^EgnOQuw`R8cPuWO)Lr}2T?_Et<1U@0Oem-h#1PPj0h?)F9`39mqdvL?o*6K|xDyp{k zlKBIqBM(UQ9vUbKL>PQf;%oq-6BZld#6ahcKbzl(CV99xW;$|OaBU`LoB6L-<<>7j&!JnUco zZHtpLAdY@F=g*^wr4>wmMZm1VoMUELJ0 zp!AsQ)&BO@>5e2$lH=v)Fa6RNuf0o9*2_htWtnU~^~rXN0N;CSyz!P=A_i24PJ@vC z({mlXb^9q_^hJ=D_wnmdqUio%Rbwfw048?@X*#!AEP_ec07{ZES|i-vOb8XF`4lfu z=8Ew+Az6A>C#F2dTtP9%_=rk)FXHW_x@>wDuHxn8hwtS;I4L+1Dv2*!)I80NF-u8a zpto#jxX&+YkuA-{=Rv+Qlo$1*q(l-wD}At${vy?rKwhZS{?0FD5IJSa{F3Jq7n z<`ETE#WEheEebA(U>1x*!zipPNQ`^PV zbV#K4Z)n5PAqed{7t8Gx-RA0(L_vYmI~0WCQj{lkqWlbuk2|*b!RIA`3vZ^4fBpG6 zzafbaHh~VH(4vG!nT>~|NTGZ}_dsT>h+$$xNDYr~%_m}HM4WF3q-Nl~4wCcKn#NXA z8nHli6GV3&-Q6KhyuX6O%~-)njQR2w>j$I$_m#*ws^J#bCBVUyjxvsm6;N!!NgRx5^=m-pW~Q{U0)A&A&ZM>Cg$ad7ZN<)`E0 zi>WggZ!K3a_w7M3tq4Sm)`kYofdR&uF(Y8+#kaL6??4=Q>u~7R1#BydmaG40zCq*j z26ng@$6h)fne9yUY5GP zuH80n7mbc*eSxmZPEII#qB<)YE$jzQVS)Ge2KYAb%Z#?rOvS}fASs3G?1yc}W>3;I z8A@$HDryF@NK3~5mh)MZ-6dMJY(`sGTl>-HbQzPOw+9lEQ>5G4Q`x1xu4@{R|A{p5 zI?LR9*C2r(6bb58kyY5Z6mj)YWo`8PU0Q&M9&Ui$ z87EHm_D4ZCbGlboEXloiWPE!yA4~rnRz}bJAH4e>XI>4aMo^kZ>FkDRRmuGTGMqq0 zVKoh*YEcjs?w8nAUA^EcGr%-z=W`+m>K;L)(oLD_Pi@DGhF%>EiC zAV#(+FS&Hij>1j@Km0~LWql@NcxtbV?mpC8t7{`KEC1qZWMrfx^=Gw9U_D@`-6yoc zWxT(C=hAioH9}h2KSk_L*~D{PX!_&FE8p9O!y-r zBi?sauXI@@{>0R8K7=$;AhNJ*v+hIR14IpbN->l6bgEsPzNTyI=y|K$Z1D86=W1lm z;s2Vch?>4W%I-Y_E9Z40d1Rd5By1{m`YzeZw$AOAa34^UPEo~F){@qET3&8;1&01R zjFxXN5I5x$_66*#BDr?Ys-Oqfz|p$w#Uy*1E#P~0UKtZL@Ba{`C-RP749^9_jg7s5 zdFOYy*fPy&(_h=^)ytG}Vw;hT^^$d=0~8PJkf@SAN!HHumw_P;eCi2-NC}!;%pbpq z%9?4(_}VHq5nnO7BFVr~zin-kqEVe6L8Dx}+V)C1h0&*&DR1jc>=P4X?`ipkU25Hb z{WxKKY#%6h0DOOix09!$&q;HOw77yu=GBilEn89fMA{%}8|wSyr0m=vkAl;#YD9L@J-%0|L4@D$+YgB6{xk^8|zLn%dHi zHqn%i2{$zvEAA}L*{`wMWcT-XLw~Ao;4jb3>@BT`fzslTSu!F7u3}Lz_jDUg+AJTg zk2p@&d%F*gs)|PbdzIC>FCyj~kp_t?X_5|KB%gY|2FgH^}|h zf~TvEm#?{pHAvCf+}2vf+}7UGk(!@ffL)MHh?<*|iE`&q z%KT58!oqge_O^CjARazmMNQ?OKpCR{RnPxlM%UiT%kIA-8P8OvKoOGvRYb+!+1ktB z%^LJSz2b0lu@(RPUiJT~M@1Vb1>)ip;^PwF7U1P)gO3ygMX>)@JzDkw)*wzPsr1sf zC%`3%|8+@6QxRli?_>=;K8KgH8;6a#kG-XXHAkb@LuRb?8a%) +#ffffff \ No newline at end of file diff --git a/website/img/favicon/favicon-16x16.png b/website/img/favicon/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..02814481d9eecd30a40a267f80f36cc8ab3bab35 GIT binary patch literal 1498 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 YW@v-^+mv7>gB1XKYbUEZ3;*PQ0|NZ{!~g&Q literal 0 HcmV?d00001 diff --git a/website/img/favicon/favicon-96x96.png b/website/img/favicon/favicon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..f1005975806e9333b6f9c85794761e9cd626a020 GIT binary patch literal 7515 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 F{|oH@tY82D literal 0 HcmV?d00001 diff --git a/website/img/favicon/ms-icon-310x310.png b/website/img/favicon/ms-icon-310x310.png new file mode 100644 index 0000000000000000000000000000000000000000..36933858574646c922f927e3ca426af8487e1e81 GIT binary patch literal 37381 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%0DqTy@@UP=uo%@$MT#LsmWwJ%;Im|a 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 literal 0 HcmV?d00001 diff --git a/website/img/logo.png b/website/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..605f9897ebafe6c0317fc040639e6bef75f85d95 GIT binary patch literal 25811 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 literal 0 HcmV?d00001 diff --git a/website/img/news.png b/website/img/news.png new file mode 100644 index 0000000000000000000000000000000000000000..d769cc753ad6d1b6577d6a3645fc234c814de3f0 GIT binary patch literal 55153 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 literal 0 HcmV?d00001 diff --git a/website/img/person.jpg b/website/img/person.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5388cb84eaf83c848bb4159cc300b08d0595d160 GIT binary patch literal 7091 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 +foreach my $pp (@params){ + $p->{$pp} = $cgi->param($pp); +} + +$vars->{filepath} = substr($cgi->url({-absolute=>1}),length($vars->{basepath})+1); +$vars->{baseurl} = $cgi->url({-base=>1}).$vars->{basepath}; +$vars->{url} = $cgi->url({-full=>1}); +$vars->{encodedurl} = uri_encode($vars->{url},{encode_reserved => 1}); + +if ($vars->{filepath} ne ""){ + $vars->{page} = $vars->{filepath}; + $vars->{page} =~ s/html$/tt/; + +} +$vars->{abspath} = ""; +$vars->{pagelink} = basename($vars->{page}); +$vars->{pagelink} =~ s/\.tt$//; + + +#} +#$p->{dirname} = dirname($0); +#if (!exists($p)) +#$p->{baseurl} = $cgi->url({-base=>1}); +#$p->{pathinfo} = +#$p->{basepath} = ; + +# if (!exists($p->{sid})) +# { +# $p->{sid} = $cgi->cookie('juridig'); +# } +# my $se = session->new(); +# my $sesdata = $se->getsession($p->{sid}); +# if (!exists($sesdata->{usersession})){ +# $p->{page} = "login"; +# } +print $cgi->header(-type=>'text/html', -charset=>"utf-8"); +my $template = Template->new({INCLUDE_PATH => [$sitecfg->{tmplpath}]}); +my @lv = split(/\//,$vars->{filepath}); +my $absnum = scalar(@lv)-1; +$vars->{abspath} = ""; +for (my $i=0;$i<$absnum;$i++){ + $vars->{abspath} .= "../"; +} +$vars->{params} = $p; +$vars->{pageshort} = $vars->{page}; +$vars->{page} = 'page/'.$vars->{page}; + +$vars->{pagename} = basename($vars->{page}); + +# $vars->{dbconn} = 'DBI:SQLite:dbname=fld.sqlite'; +$vars->{pagename} =~ s/\.tt$//; +#print Dumper($vars); +if (! -e $sitecfg->{tmplpath}.'/'.$vars->{page}){ + mkdir(dirname(dirname($0).'/tmpl/'.$vars->{page})); + open(NP,">".dirname($0).'/tmpl/'.$vars->{page}); + print NP $vars->{page}; + close(NP); +} +#print Dumper($vars); +my $skl = "index.tt";#dirname($vars->{page}); +if (-e $sitecfg->{tmplpath}.'/'.basename($vars->{page})){ + $skl = basename($vars->{page}); +} +# print Dumper($template); +$template->process($skl,$vars) || die "Template process failed: ", $template->error(), "\n"; + + diff --git a/website/index.php b/website/index.php new file mode 100644 index 0000000..0feadc8 --- /dev/null +++ b/website/index.php @@ -0,0 +1,61 @@ + $value) { + if ($value["sql"]){ + if ($value["sqltype"] == "query"){ + $vars["data"][$key] = $db->query($value["sql"]); + } elseif ($value["sqltype"] == "queryarray"){ + $vars["data"][$key] = $db->queryarray($value["sql"]); + } + } + } + } catch(JsonException $je){ + fwrite(STDERR, "JSON ERROR: ".$je->getMessage()."\n"); + } + + } + $vars["page"] = 'pages/'.$vars["page"]; + $m = new Mustache_Engine(array( + 'loader' => new Mustache_Loader_FilesystemLoader($cfg["templatepath"]), + 'partials_loader' => new Mustache_Loader_FilesystemLoader($cfg["templatepath"].'/blocks'), + 'escape' => function($value) { + return $value; + }, + 'entity_flags' => ENT_HTML5 + + )); + + $vars["pagedata"] = $m->render($vars["page"],$vars); + + $mainsite = $m->render('index.html',$vars); + echo $mainsite; + // echo "

          ".print_r($vars).print_r($_SERVER["REQUEST_URI"])."
          "; +?> \ No newline at end of file diff --git a/website/js/site.js b/website/js/site.js new file mode 100644 index 0000000..952426e --- /dev/null +++ b/website/js/site.js @@ -0,0 +1,8 @@ +function togglemenu(){ + var mnu = document.getElementById("mobilemenu"); + if (mnu.style.display == 'none'){ + mnu.style.display = 'block'; + } else { + mnu.style.display = 'none'; + } +} \ No newline at end of file diff --git a/website/lib/composer.json b/website/lib/composer.json new file mode 100644 index 0000000..d40c2ef --- /dev/null +++ b/website/lib/composer.json @@ -0,0 +1,5 @@ +{ + "require":{ + "mustache/mustache":"2.13.0" + } +} \ No newline at end of file diff --git a/website/lib/composer.lock b/website/lib/composer.lock new file mode 100644 index 0000000..0b1a613 --- /dev/null +++ b/website/lib/composer.lock @@ -0,0 +1,65 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "92525a9a1d7680bb4e3111b321d46087", + "packages": [ + { + "name": "mustache/mustache", + "version": "v2.13.0", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/mustache.php.git", + "reference": "e95c5a008c23d3151d59ea72484d4f72049ab7f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/mustache.php/zipball/e95c5a008c23d3151d59ea72484d4f72049ab7f4", + "reference": "e95c5a008c23d3151d59ea72484d4f72049ab7f4", + "shasum": "" + }, + "require": { + "php": ">=5.2.4" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~1.11", + "phpunit/phpunit": "~3.7|~4.0|~5.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Mustache": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "A Mustache implementation in PHP.", + "homepage": "https://github.com/bobthecow/mustache.php", + "keywords": [ + "mustache", + "templating" + ], + "time": "2019-11-23T21:40:31+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "1.1.0" +} diff --git a/website/lib/config.php b/website/lib/config.php new file mode 100644 index 0000000..c02f016 --- /dev/null +++ b/website/lib/config.php @@ -0,0 +1,13 @@ + "/ledf_lu/", + "templatepath" => "tmpl/", + "db"=> array( + "type" => "pgsql", + "host" => "sql12.your-server.de", + "dbname" => "ledflu_db", + "user" => "ledflu_user", + "password" => "znWA9s3cgjEsRsWZ", + ), + ); +?> \ No newline at end of file diff --git a/website/lib/database.php b/website/lib/database.php new file mode 100644 index 0000000..fd635a1 --- /dev/null +++ b/website/lib/database.php @@ -0,0 +1,68 @@ +dbconf = $pdbconf; + try { + //'mysql:host=;dbname=', $user, password + //'sqlite:/opt/databases/mydb.sq3 + //pgsql:host=localhost;port=5432;dbname=testdb;user=bruce;password=mypass + $this->conn = new PDO($this->dbconf["type"].':host='.$this->dbconf["host"].';port=5432;dbname='.$this->dbconf["dbname"],$this->dbconf["user"],$this->dbconf["password"]); + } catch(PDOException $e){ + fwrite(STDERR, "Connectio Error: ".$e->getMessage()."\n"); + } + } + + protected function securetext($text){ + return str_replace("'","''",$text); + } + protected function value($text){ + if (($text == "") || ($text == null)){ + return 'null'; + } + return "'".$text."'"; + } + + protected function query($sql){ + try { + if ($this->conn){ + return $this->conn->query($sql); + } + } catch(PDOException $e){ + fwrite(STDERR, "QUERY ERROR: ".$sql."\n"); + } + return null; + } + + protected function queryarray($sql){ + $result = null; + try { + if ($this->conn){ + $sth = $this->link->prepare($sql); + $sth->execute(); + $result = $sth->fetchAll(PDO::FETCH_ASSOC); + return $result; + } + } catch (PDOException $e){ + fwrite(STDERR, "QUERYARRAY ERROR: ".$sql."\n"); + } + return $result; + } + + protected function exec($sql){ + try { + if ($this->conn){ + return $this->exec($sql); + } + } catch (PDOException $e){ + fwrite(STDERR, "EXEC ERROR: ".$sql."\n"); + } + return -1; + } + + protected function __destruct(){ + $this->conn = null; + } +} +?> \ No newline at end of file diff --git a/website/lib/dksconfig.pm b/website/lib/dksconfig.pm new file mode 100644 index 0000000..fb2ceb7 --- /dev/null +++ b/website/lib/dksconfig.pm @@ -0,0 +1,43 @@ +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=websites_db;host=localhost', + dbschema => 'ledf', + dbuser => 'websites_user', + dbpassword => 'websites_pwd', + page => 'index.tt', + pagename => 'index', + basepath => substr(dirname($0),length($ENV{"DOCUMENT_ROOT"})), + # datapath => substr((exists($ENV{"SCRIPT_FILENAME"})?dirname($ENV{"SCRIPT_FILENAME"}):dirname($0)),length($ENV{"DOCUMENT_ROOT"})).'/data/', + # apidatapath => substr((exists($ENV{"SCRIPT_FILENAME"})?dirname(dirname($ENV{"SCRIPT_FILENAME"})):dirname(dirname($0))),length($ENV{"DOCUMENT_ROOT"})).'/data/', + docroot => $ENV{"DOCUMENT_ROOT"}, + # registration_enabled => '0', + # default_group => 'users', + tmplpath => dirname($0).'/tmpl' + # sitename => 'Accès - Client', + # 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/tmpl/commingsoon.tt b/website/tmpl/commingsoon.tt new file mode 100644 index 0000000..7f15250 --- /dev/null +++ b/website/tmpl/commingsoon.tt @@ -0,0 +1,76 @@ + + + + + + LEDF - Letzebuerger Elecronique Darts Federation + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
          +
          L.E.D.F.
          Lëtzebuerger Electronique Darts Federation
          +
          +
          +
          +
          +
          L.E.D.F.
          Lëtzebuerger Electronique Darts Federation
          + +
          + +
          +
          + + + + + + diff --git a/website/tmpl/index.html.mustache b/website/tmpl/index.html.mustache new file mode 100644 index 0000000..9df4f49 --- /dev/null +++ b/website/tmpl/index.html.mustache @@ -0,0 +1,104 @@ + + + + + + LEDF - Letzebuerger Elecronique Darts Federation + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
          +
          L.E.D.F.
          Lëtzebuerger Electronique Darts Federation
          + Home + Nouveautés + Calendrier + Clubs + Championnat + Liste de Rang + Coupe +
          +
          +
          +
          +
          L.E.D.F.
          Lëtzebuerger Electronique Darts Federation
          + +
          + +
          +
          +
          + {{pagedata}} +
          +
          +
          +
          Lëtzebuerger Electronique Darts Federation ASBL
          + 6, rue des Alliés
          +L-4412 Belvaux
          +
          + + +
          +
          + Powered by DKS s.à r.l. +
          +
          + + + + + + diff --git a/website/tmpl/lists/labels.tt b/website/tmpl/lists/labels.tt new file mode 100644 index 0000000..b07b2b7 --- /dev/null +++ b/website/tmpl/lists/labels.tt @@ -0,0 +1,3 @@ +[% FOREACH ilbl= dksdb.query("select id,${lang} as lbl from labels;") %] +[% lbl.${ilbl.item('id')} = ilbl.item('lbl') %] +[% END %] \ No newline at end of file diff --git a/website/tmpl/pages/calendrier.html.json b/website/tmpl/pages/calendrier.html.json new file mode 100644 index 0000000..3e1694b --- /dev/null +++ b/website/tmpl/pages/calendrier.html.json @@ -0,0 +1,4 @@ +{ + "dayscol1":{"sqltype":"queryarray","sql":"SELECT id, to_char(daydate,'DD.MM.YYYY') as daydate, calendar, calgroup, calpublisstart, calpublishend, to_char(calstartime,'HH24:MI') as calstarttime, to_char(calendtime,'HH24:MI') as calendtime, caltitle, caldescription, callocation, callocationaddress FROM calendar WHERE calendar=(select prefvalue from config where pref='season') and calgroup='aller' order by daydate asc;"}, + "dayscol2":{"sqltype":"queryarray","sql":"SELECT id, to_char(daydate,'DD.MM.YYYY') as daydate, calendar, calgroup, calpublisstart, calpublishend, to_char(calstartime,'HH24:MI') as calstarttime, to_char(calendtime,'HH24:MI') as calendtime, caltitle, caldescription, callocation, callocationaddress FROM calendar WHERE calendar=(select prefvalue from config where pref='season') and calgroup='retoour' order by daydate asc;"} +} diff --git a/website/tmpl/pages/calendrier.html.mustache b/website/tmpl/pages/calendrier.html.mustache new file mode 100644 index 0000000..df37498 --- /dev/null +++ b/website/tmpl/pages/calendrier.html.mustache @@ -0,0 +1,110 @@ +
          +
          +

          Calendrier Saison 2020-2021

          +
          +
          + +
          +
          +
          +
          DD.MM.YYYY ( location)
          +
          + Championnnat +
          +
          +
          +
          DD.MM.YYYY
          +
          + Championnnat +
          +
          +
          +
          DD.MM.YYYY
          +
          + Championnnat +
          +
          +
          +
          DD.MM.YYYY
          +
          + Championnnat +
          +
          +
          +
          DD.MM.YYYY ( location)
          +
          + Championnnat +
          +
          +
          +
          DD.MM.YYYY
          +
          + Championnnat +
          +
          +
          +
          DD.MM.YYYY
          +
          + Championnnat +
          +
          +
          +
          DD.MM.YYYY
          +
          + Championnnat +
          +
          +
          +
          +
          +
          +
          +
          DD.MM.YYYY ( location)
          +
          + Championnnat +
          +
          +
          +
          DD.MM.YYYY
          +
          + Championnnat +
          +
          +
          +
          DD.MM.YYYY
          +
          + Championnnat +
          +
          +
          +
          DD.MM.YYYY
          +
          + Championnnat +
          +
          +
          +
          DD.MM.YYYY ( location)
          +
          + Championnnat +
          +
          +
          +
          DD.MM.YYYY
          +
          + Championnnat +
          +
          +
          +
          DD.MM.YYYY
          +
          + Championnnat +
          +
          +
          +
          DD.MM.YYYY
          +
          + Championnnat +
          +
          +
          +
          diff --git a/website/tmpl/pages/championnat.html.mustache b/website/tmpl/pages/championnat.html.mustache new file mode 100644 index 0000000..c8f80b9 --- /dev/null +++ b/website/tmpl/pages/championnat.html.mustache @@ -0,0 +1,535 @@ + +
          +
          +
          +
          Résultats (Jounée X)
          +
          +
          +
          +
          division nationale
          +
          + + + + + + + + + + + + + + +
          Team homeTeam visiteurRésultat
          Team 1Team 200 - 00
          Team 1Team 200 - 00
          Team 1Team 200 - 00
          Team 1Team 200 - 00
          Team 1Team 200 - 00
          Team 1Team 200 - 00
          Team 1Team 200 - 00
          Team 1Team 200 - 00
          +
          +
          division d'honneur
          +
          + + + + + + + + + + + + + + +
          Team homeTeam visiteurRésultat
          Team 1Team 200 - 00
          Team 1Team 200 - 00
          Team 1Team 200 - 00
          Team 1Team 200 - 00
          Team 1Team 200 - 00
          Team 1Team 200 - 00
          Team 1Team 200 - 00
          Team 1Team 200 - 00
          +
          +
          division 1
          +
          + + + + + + + + + + + + + + +
          Team homeTeam visiteurRésultat
          Team 1Team 200 - 00
          Team 1Team 200 - 00
          Team 1Team 200 - 00
          Team 1Team 200 - 00
          Team 1Team 200 - 00
          Team 1Team 200 - 00
          Team 1Team 200 - 00
          Team 1Team 200 - 00
          +
          +
          +
          +
          +
          Classement
          +
          +
          +
          +
          division nationale
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          PLTEAMGESPGEWGLVRLSCOREDIFSETSDIFPKT
          1 Team name0000000000 - 000000000 - 000000000 - 000
          1 Team name0000000000 - 000000000 - 000000000 - 000
          1 Team name0000000000 - 000000000 - 000000000 - 000
          1 Team name0000000000 - 000000000 - 000000000 - 000
          1 Team name0000000000 - 000000000 - 000000000 - 000
          1 Team name0000000000 - 000000000 - 000000000 - 000
          1 Team name0000000000 - 000000000 - 000000000 - 000
          1 Team name0000000000 - 000000000 - 000000000 - 000
          1 Team name0000000000 - 000000000 - 000000000 - 000
          +
          +
          division nationale
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          PLTEAMGESPGEWGLVRLSCOREDIFSETSDIFPKT
          1 Team name0000000000 - 000000000 - 000000000 - 000
          1 Team name0000000000 - 000000000 - 000000000 - 000
          1 Team name0000000000 - 000000000 - 000000000 - 000
          1 Team name0000000000 - 000000000 - 000000000 - 000
          1 Team name0000000000 - 000000000 - 000000000 - 000
          1 Team name0000000000 - 000000000 - 000000000 - 000
          1 Team name0000000000 - 000000000 - 000000000 - 000
          1 Team name0000000000 - 000000000 - 000000000 - 000
          1 Team name0000000000 - 000000000 - 000000000 - 000
          +
          +
          division nationale
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          PLTEAMGESPGEWGLVRLSCOREDIFSETSDIFPKT
          1 Team name0000000000 - 000000000 - 000000000 - 000
          1 Team name0000000000 - 000000000 - 000000000 - 000
          1 Team name0000000000 - 000000000 - 000000000 - 000
          1 Team name0000000000 - 000000000 - 000000000 - 000
          1 Team name0000000000 - 000000000 - 000000000 - 000
          1 Team name0000000000 - 000000000 - 000000000 - 000
          1 Team name0000000000 - 000000000 - 000000000 - 000
          1 Team name0000000000 - 000000000 - 000000000 - 000
          1 Team name0000000000 - 000000000 - 000000000 - 000
          +
          +
          +
          +
          + +
          +
          + +
          +
          + +
          +
          + +
          +
          + +
          +
          + +
          +
          + +
          +
          + +
          +
          + +
          +
          +
          + + diff --git a/website/tmpl/pages/clubs.html.mustache b/website/tmpl/pages/clubs.html.mustache new file mode 100644 index 0000000..f2d8685 --- /dev/null +++ b/website/tmpl/pages/clubs.html.mustache @@ -0,0 +1,210 @@ +
          +
          +

          Clubs

          +
          +
          + +
          +
          +

          EDC Club

          +
          +
          + club +
          +
          +

          Salle de jeu

          +
          Café Nom du café
          1, rue Principale
          L-0000 Ville +
          +
          + +
          +
          +
          +
          +
          +
          +

          EDC Club

          +
          +
          + club +
          +
          +

          Salle de jeu

          +
          Café Nom du café
          1, rue Principale
          L-0000 Ville +
          +
          + +
          +
          +
          +
          +
          +
          +

          EDC Club

          +
          +
          + club +
          +
          +

          Salle de jeu

          +
          Café Nom du café
          1, rue Principale
          L-0000 Ville +
          +
          + +
          +
          +
          +
          +
          +
          +

          EDC Club

          +
          +
          + club +
          +
          +

          Salle de jeu

          +
          Café Nom du café
          1, rue Principale
          L-0000 Ville +
          +
          + +
          +
          +
          +
          +
          +
          +

          EDC Club

          +
          +
          + club +
          +
          +

          Salle de jeu

          +
          Café Nom du café
          1, rue Principale
          L-0000 Ville +
          +
          + +
          +
          +
          +
          +
          +
          +

          EDC Club

          +
          +
          + club +
          +
          +

          Salle de jeu

          +
          Café Nom du café
          1, rue Principale
          L-0000 Ville +
          +
          + +
          +
          +
          +
          +
          +
          +

          EDC Club

          +
          +
          + club +
          +
          +

          Salle de jeu

          +
          Café Nom du café
          1, rue Principale
          L-0000 Ville +
          +
          + +
          +
          +
          +
          +
          +
          +

          EDC Club

          +
          +
          + club +
          +
          +

          Salle de jeu

          +
          Café Nom du café
          1, rue Principale
          L-0000 Ville +
          +
          + +
          +
          +
          +
          +
          +
          +

          EDC Club

          +
          +
          + club +
          +
          +

          Salle de jeu

          +
          Café Nom du café
          1, rue Principale
          L-0000 Ville +
          +
          + +
          +
          +
          +
          +
          +
          +

          EDC Club

          +
          +
          + club +
          +
          +

          Salle de jeu

          +
          Café Nom du café
          1, rue Principale
          L-0000 Ville +
          +
          + +
          +
          +
          +
          +
          +
          +

          EDC Club

          +
          +
          + club +
          +
          +

          Salle de jeu

          +
          Café Nom du café
          1, rue Principale
          L-0000 Ville +
          +
          + +
          +
          +
          +
          +
          +
          +

          EDC Club

          +
          +
          + club +
          +
          +

          Salle de jeu

          +
          Café Nom du café
          1, rue Principale
          L-0000 Ville +
          +
          + +
          +
          +
          +
          \ No newline at end of file diff --git a/website/tmpl/pages/coupe.html.mustache b/website/tmpl/pages/coupe.html.mustache new file mode 100644 index 0000000..e69de29 diff --git a/website/tmpl/pages/documents.html.mustache b/website/tmpl/pages/documents.html.mustache new file mode 100644 index 0000000..f8f2e84 --- /dev/null +++ b/website/tmpl/pages/documents.html.mustache @@ -0,0 +1 @@ +page/documents.tt \ No newline at end of file diff --git a/website/tmpl/pages/error.html.mustache b/website/tmpl/pages/error.html.mustache new file mode 100644 index 0000000..6c461af --- /dev/null +++ b/website/tmpl/pages/error.html.mustache @@ -0,0 +1 @@ +

          Sorry Site does not exist!

          \ No newline at end of file diff --git a/website/tmpl/pages/federation.html.mustache b/website/tmpl/pages/federation.html.mustache new file mode 100644 index 0000000..ddc8eba --- /dev/null +++ b/website/tmpl/pages/federation.html.mustache @@ -0,0 +1,119 @@ +
          +
          +

          Le Comité

          +
          +
          +
          +
          +
          +
          + +
          +
          Nom Prénom
          Président
          +
          +
          +
          +
          +
          + +
          +
          Nom Prénom
          Vize-Président
          +
          +
          +
          +
          +
          + +
          +
          Nom Prénom
          Secrétaire
          +
          +
          +
          +
          +
          + +
          +
          Nom Prénom
          Trésorier
          +
          +
          +
          +
          +
          + +
          +
          Nom Prénom
          Directeur Sportif
          +
          +
          +
          +
          +
          + +
          +
          Nom Prénom
          Membre
          +
          +
          +
          +
          +
          + +
          +
          Nom Prénom
          Membre
          +
          +
          +
          +
          +
          + +
          +
          Nom Prénom
          Membre
          +
          +
          +
          +
          +
          + +
          +
          Nom Prénom
          Membre
          +
          +
          +
          +
          +
          +
          +

          Le Tribunal

          +
          +
          +
          +
          +
          +
          + +
          +
          Nom Prénom
          +
          +
          +
          +
          +
          + +
          +
          Nom Prénom
          +
          +
          +
          +
          +
          + +
          +
          Nom Prénom
          +
          +
          +
          +
          +
          + +
          +
          Nom Prénom
          +
          +
          +
          \ No newline at end of file diff --git a/website/tmpl/pages/home.html.mustache b/website/tmpl/pages/home.html.mustache new file mode 100644 index 0000000..6eb0aa3 --- /dev/null +++ b/website/tmpl/pages/home.html.mustache @@ -0,0 +1,40 @@ + +
          +
          +
          la féderation vous invite:
          +
          +
          + +
          +
          +
          +
          +
          prochaines événements:
          +
          +
          +
          +
          DD.MM.YYYY
          +
          + Championnnat +
          +
          +
          +
          DD.MM.YYYY
          +
          + Championnnat +
          +
          +
          +
          DD.MM.YYYY
          +
          + Championnnat +
          +
          +
          +
          DD.MM.YYYY
          +
          + Championnnat +
          +
          +
          +
          diff --git a/website/tmpl/pages/impressum.html.mustache b/website/tmpl/pages/impressum.html.mustache new file mode 100644 index 0000000..5f5e013 --- /dev/null +++ b/website/tmpl/pages/impressum.html.mustache @@ -0,0 +1 @@ +page/impressum.tt \ No newline at end of file diff --git a/website/tmpl/pages/listederang.html.mustache b/website/tmpl/pages/listederang.html.mustache new file mode 100644 index 0000000..06f9c7c --- /dev/null +++ b/website/tmpl/pages/listederang.html.mustache @@ -0,0 +1,443 @@ +
          +
          +

          Saison 2020-2021

          +
          +
          +
          +
          +
          +
          Liste de rang Hommes
          +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          #NomRL1RL2RL3RL4RL5RL6RL7Points
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          +
          +
          +
          +
          +
          +
          +
          Liste de rang Dammes
          +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          #NomRL1RL2RL3RL4RL5RL6RL7Points
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          #Nom Prénom00000000
          +
          +
          +
          \ No newline at end of file diff --git a/website/tmpl/pages/news.html.mustache b/website/tmpl/pages/news.html.mustache new file mode 100644 index 0000000..a52c543 --- /dev/null +++ b/website/tmpl/pages/news.html.mustache @@ -0,0 +1,11 @@ +
          +
          +

          TEST News

          +
          Publié le:
          00.00.0000
          +
          +
          +

          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla condimentum interdum mauris et laoreet. Curabitur ut aliquam neque. Nam tristique tempor ex eu semper. Quisque efficitur dictum justo nec viverra. Cras est eros, rhoncus id nulla nec, dignissim iaculis magna. Donec laoreet mattis dolor, sit amet convallis elit efficitur ac. Ut sed sollicitudin ante. Donec id felis in justo condimentum ultrices vel quis metus. Duis finibus facilisis viverra. Vestibulum vestibulum justo ac ex ultrices vehicula. Duis pulvinar, purus sed varius sollicitudin, ligula risus cursus urna, sit amet cursus eros quam in lacus. Aenean volutpat, erat ut finibus gravida, dui quam suscipit lectus, sed vestibulum arcu diam a augue. Donec id eros id velit molestie rhoncus. Sed eu erat blandit, hendrerit turpis pulvinar, tincidunt mi. Quisque tincidunt sem quis neque aliquet, nec dictum nunc rhoncus. Mauris at elit facilisis, lacinia lectus ut, luctus ex.

          + +

          Curabitur euismod purus quis ipsum volutpat, sit amet dapibus quam eleifend. Sed dictum, ante fringilla suscipit condimentum, metus lorem feugiat quam, sit amet tristique enim nulla id turpis. Ut vitae elementum ligula, at egestas metus. Etiam fermentum efficitur eros, feugiat tempor ligula accumsan id. Fusce sed aliquet nibh, et sagittis ante. Quisque in tincidunt sapien. Nulla fermentum leo blandit velit semper, ut vehicula quam vestibulum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nullam congue, est nec dictum tempor, tortor nisl vestibulum tellus, quis sollicitudin ipsum arcu id nibh. Ut ut arcu malesuada, imperdiet tellus quis, ornare est. Nulla luctus lobortis commodo. Sed id ex placerat purus consequat lobortis.

          +
          +
          \ No newline at end of file diff --git a/website/tmpl/pages/privacy.html.mustache b/website/tmpl/pages/privacy.html.mustache new file mode 100644 index 0000000..47ff6c7 --- /dev/null +++ b/website/tmpl/pages/privacy.html.mustache @@ -0,0 +1,55 @@ +
          +

          Privacy Policy of ledf.lu

          + +

          At L.E.D.F., we collect and manage user data according to the following Privacy Policy.

          + +

          Data Collected

          + +

          We collect information you provide directly to us. For example, we collect information when you create an account, subscribe, participate in any interactive features of our services, fill out a form, request customer support or otherwise communicate with us. The types of information we may collect include your name, email address, postal address, credit card information and other contact or identifying information you choose to provide.

          + +

          We collect anonymous data from every visitor of the Website to monitor traffic and fix bugs. For example, we collect information like web requests, the data sent in response to such requests, the Internet Protocol address, the browser type, the browser language, and a timestamp for the request.

          + +

          We also use various technologies to collect information, and this may include sending cookies to your computer. Cookies are small data files stored on your hard drive or in your device memory that helps us to improve our services and your experience, see which areas and features of our services are popular and count visits. We may also collect information using web beacons (also known as "tracking pixels"). Web beacons are electronic images that may be used in our services or emails and to track count visits or understand usage and campaign effectiveness.

          + +

          Use of the Data

          + +

          We only use your personal information to provide you the L.E.D.F. services or to communicate with you about the Website or the services.

          + +

          We employ industry standard techniques to protect against unauthorized access of data about you that we store, including personal information.

          + +

          We do not share personal information you have provided to us without your consent, unless:

          + +
            +
          • Doing so is appropriate to carry out your own request
          • +
          • We believe it's needed to enforce our legal agreements or that is legally required
          • +
          • We believe it's needed to detect, prevent or address fraud, security or technical issues
          • +
          + +

          Sharing of Data

          + +

          We don't share your personal information with third parties. Aggregated, anonymized data is periodically transmitted to external services to help us improve the Website and service.

          + +

          We may allow third parties to provide analytics services. These third parties may use cookies, web beacons and other technologies to collect information about your use of the services and other websites, including your IP address, web browser, pages viewed, time spent on pages, links clicked and conversion information.

          + +

          We also use social buttons provided by services like Twitter, Google+, LinkedIn and Facebook. Your use of these third party services is entirely optional. We are not responsible for the privacy policies and/or practices of these third party services, and you are responsible for reading and understanding those third party services' privacy policies.

          + +

          Cookies

          + +

          We may use cookies on our site to remember your preferences.

          + +

          For more general information on cookies, please read "What Are Cookies".

          + +

          Opt-Out, Communication Preferences

          + +

          You may modify your communication preferences and/or opt-out from specific communications at any time. Please specify and adjust your preferences.

          + +

          Security

          + +

          We take reasonable steps to protect personally identifiable information from loss, misuse, and unauthorized access, disclosure, alteration, or destruction. But, you should keep in mind that no Internet transmission is ever completely secure or error-free. In particular, email sent to or from the Sites may not be secure.

          + +

          Changes to the Privacy Policy

          + +

          We may amend this Privacy Policy from time to time. Use of information we collect now is subject to the Privacy Policy in effect at the time such information is used.

          + +

          If we make major changes in the way we collect or use information, we will notify you by posting an announcement on the Website or sending you an email.

          +
          \ No newline at end of file diff --git a/website/tmpl/pages/terms.html.mustache b/website/tmpl/pages/terms.html.mustache new file mode 100644 index 0000000..aa79677 --- /dev/null +++ b/website/tmpl/pages/terms.html.mustache @@ -0,0 +1,58 @@ +
          +

          Terms of Use of ledf.lu

          + +

          Welcome to the L.E.D.F. website (the "Website").

          + +

          L.E.D.F. provides this Website and Services (located at ledf.lu) to you subject to the notices, terms, and conditions set forth in these terms (the "Terms of Use"). In addition, when you use any of our Services, you will be subject to the rules, guidelines, policies, terms, and conditions applicable to such service, and they are incorporated into this Terms of Use by this reference.

          + +

          These Terms of Use are effective as of [DATE].

          + +

          Your eligibility for use of the Website is contingent upon meeting the following conditions:

          + +
            +
          • You are at least 18 years of age
          • +
          • You use the Website and Services according to these Terms of Use and all applicable laws and regulations determined by the state and country of residence
          • +
          • You provide complete and accurate registration information and maintain accurate registration information on the Webite
          • +
          • You agree and understand that L.E.D.F. may, at any time, and without prior notice, revoke and/or cancel your access if you fail to meet these criteria or violate any portion of these Terms of Use
          • +
          + +

          Use of this Website

          + +

          In connection with your use of our Website, you must act responsibly and exercise good judgment. Without limiting the foregoing, you will not:

          + +
            +
          • Violate any local, state, provincial, national, or other law or regulation, or any order of a court
          • +
          • Infringe the rights of any person or entity, including without limitation, their intellectual property, privacy, publicity or contractual rights
          • +
          • Interfere with or damage our Services, including, without limitation, through the use of viruses, cancel bots, Trojan horses, harmful code, flood pings, denial-of-service attacks, packet or IP spoofing, forged routing or electronic mail address information or similar methods or technology
          • +
          • Use automated scripts to collect information or otherwise interact with the Services or the Website
          • +
          • Enter into this agreement on behalf of another person or entity without consent or the legal capacity to make such agreements as a representative of an organization or entity
          • +
          + +

          Intellectual Property

          + +

          All code, text, software, scripts, graphics, files, photos, images, logos, and materials contained on this Website, or within the Services, are the sole property of L.E.D.F..

          + +

          Unauthorized use of any materials contained on this Website or within the Service may violate copyright laws, trademark laws, the laws of privacy and publicity, and/or other regulations and statutes. If you believe that any of the materials infringe on any third party's rights, please contact L.E.D.F. immediately at the address provided below.

          + +

          Third Party Websites

          + +

          Our Website may link you to other sites on the Internet or otherwise include references to information, documents, software, materials and/or services provided by other parties. These websites may contain information or material that some people may find inappropriate or offensive.

          + +

          These other websites and parties are not under our control, and you acknowledge that we are not responsible for the accuracy, copyright compliance, legality, decency, or any other aspect of the content of such sites, nor are we responsible for errors or omissions in any references to other parties or their products and services. The inclusion of such a link or reference is provided merely as a convenience and does not imply endorsement of, or association with, the Website or party by us, or any warranty of any kind, either express or implied.

          + +

          Disclaimer of Warranty and Limitation of Liability

          + +

          The Website is provided "AS IS." appfigures, its suppliers, officers, directors, employees, and agents exclude and disclaim all representations and warranties, express or implied, related to this Website or in connection with the Services. You exclude L.E.D.F. from all liability for damages related to or arising out of the use of this Website.

          + +

          Changes to these Terms of Use

          + +

          L.E.D.F. retains the right to, at any time, modify or discontinue, any or all parts of the Website without notice.

          + +

          Additionally, L.E.D.F. reserves the right, in its sole discretion, to modify these Terms of Use at any time, effective by posting new terms on the Website with the date of modification. You are responsible for reading and understanding the terms of this agreement prior to registering with, or using the Service. Your use of the Website and/or Services after any such modification has been published constitutes your acceptance of the new terms as modified in these Terms of Use.

          + +

          Governing Law

          + +

          These Terms of Use and any dispute or claim arising out of, or related to them, shall be governed by and construed in accordance with the internal laws of the lu without giving effect to any choice or conflict of law provision or rule.

          + +

          Any legal suit, action or proceeding arising out of, or related to, these Terms of Use or the Website shall be instituted exclusively in the federal courts of lu.

          +
          \ No newline at end of file -- 2.39.5

      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 z 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≻g+Ed*?5TYl|JN5+R*N=4xHULjzIum?WLGF(J_20{B@mZF0?`bQc2KJ0{_4Iv z?Kk|49>1`{{opz<1^_o^e(=~B+_-N0JOiZNv6)=yFor6p`G;5Mm)7HU~h)B zS7JX;E8Gm@_u9LfD}j0&p`P4a0HVqNdfGm_wwoaNtUO9Q`s#FfIqzqe+J_i(i%53k zlRblk8(j`#s1aUV(}ftZT)_0~7DK{cQA7+3A!Bhuum3lIxpd_6_1`coMzbpfdDxr& z;9maaKhg=bqo-d|o9(~cGg#;>%r-fyAz%VY%ghEwCxfgRWNX)W!Ufi3-pO-`duPS{ zL$h&s9VnmxI3OewcO?*h=x-Me1h7Djz3nK~DleA(rh1=aUuV+&DGV*X?FE$lviM;nzQZJ|V zO@fa^Zp>`$V{_~^1-j|2BjKzgcIsFFPvAhJ+m4qbc#R)OYUX|d2E`QmBFpC~EHC#7 zaD(n;d)@m-Jz`#Ep`6oxHCb|j0Gq*Y+5VSIBf91M5r>#++8&LL`X1A-_gQfGlWL`6 z0(JkSum~F=`I9**=b%YV+-k`wEapIJo*M5IzX#4DO5NRrdR@2mc>FP_sCQuP{f{2A zpbrK-pwQY`EmnCeQg_1c(IqnCM|zZL$-J)%-2DvUDoZoBm9zH%J>}bt03uFAYi$Q< z`{@5#SfGE804<($5Pt)Fm;ZVW3+_=xRt1ptR8e5sb)CLjq2Nh&x4?Pvm6iOw5ifoF@{1GN>QmJZS#g)_t;Z7Aj0S5_&OGv?3FhyL>D#GSWV z3@VMMCOB4aq9yCMSWQMf??M2fFyc3vOI+ECmm-<`oiH){ZJ0_!uepMrz&g|8N}9dC zqYuta^699CFA7TnYuco^3WxQ6@{5HH(&v!^<<16DuWnkSSBT_f9INk-96J%+;xn0Z z-mXkfgYElYpYjjV<-aFtHOhT75MnBuwu5UlvWaz9r=e+Ty`jzB|B($52!H>SH4a(K zvaRgNiqGgdL2+E7<@<#wLr%h1xH}i6mNCpip0r2Qve(Q?XR3{j+eiPMt0{ zHG}9Q=ecUSd{HBNo%cV?^;||K{Hpx+tknzlsinsn6Hzb1tfpq2QXdDTidoGPInQ5y z^yfu1bW15qS6SaCzsON)7?4M)Yrpa4=^rZZ<1*V9XosPm*^dfy%TS+*9K zrL8^PR+sK^^Ytx!QA8l+xzA?~gpAT9SG*f7ol%DSsA7!cy)^aO{I&EiA%CF^9*Th9 z^XZ;)fb1<=ZZtV{i$#uLhS1k78E8DUkzx+d2x~I%y?%7k1|QR|Nk!yC51JZc87EzR zzxtaA$x0Vz-O~C{I?1XxW`T2YP)K5gA}$-9_V1=YDfqgDG|@@_xc2K~l>a`DZ!}s_ zJ;PV5mR}LyHYXylw-=4?ELS(oVv>^v&Dq9~%YhPujsgc})-}$xv?&b6KbLa#wnQdC zQtVG`W!pBnzlp++ua+E?K40o^i*p9{%Z(RiS3ip9{Gy6!(Kt5;E^CnLU4&OeJ2eot zNKTx_nFcK|_`LFS!;w~gp}HoF_;kwE;9}YkHwk4>{~zbG{<$Ic|Cj}b4iezIlyfP?#;d*FKZ>9Uo+Z^4UK zt6X0*v52NZU+f`wcCP({>$o7-f|(k!9M1wSk2kZ|&$1-Fo}hI0Jlrkw6}cSvel(x)^ecUd0h7%^{k~_kY^9<%Z%7~@N~#RY zHbjNvNZbt%IN=W2*Ik$Mb`sNMJ&(WscoayxYzp*9TV9{V=|5I$@_wT6B{h^uSKs@} z>E)@CB@n@w_-e^OtQg8c$HQ)*OMI{orT=1n@1lpjg47-c@}JS)Q+Vt9DSH+&eV`Ufez z{iuK;D#f?AsQZFcBE&0@{J>) z2x&$Ys&T>DdFJeSma!C6)J>U0);GZIQq#AefQe zmw1XD=6Oe7h1Xrl>zin_YF7SI6Q`)DV9h{M+~mn%9W|T(!y09dsC!cQZ=d2reJiWE zOvG?>9V*$H9A6cAe!fkQBejNVy)F{lM#`TnCMWz~0Qv<5`YIbdl;?Q~VWc~%Tv04N z&x@2&AHRS99@{{Zak*#W-Q8UY7so`a{~*ut+SAJ%UVCyG&+9%Co@b)5ZL9d+HhuZ> zC00s(e9*a^;{PN`!1KIbp{~blSByd4ps#8uJ9XW2@%-%zYTKqcn*|HhK@roA%CgM4 zK$z|;q&)MwZxnr{ZGEh}tgXsxz1>C}$1AZhSL6(J zf|VHqn9t|npP!$@<>e*$!E@c1Lt$f6nRV%MN987t;}VkCMsEjKvsV${ANieP9dM5i z4i3tUI@gT2JkQIDL`vh?^E?Q{aK(6YEf8q~LJKc>?)ytG*V8n0Dr4F(AYLR%^4^x5 zbJ;n*TrT+#GBGhRF){V*GZ+&kN%CGP^+MOZT-giMuek!4R<}l5lKL#zvY~CSH<#)7a-8m>DN z&AkEuaCvzN=jZ3YAfQiAPgk5sT>d`XCg_Z>rOe2EX&GlPO3AH(9cyFX0FH{8yQ|`I5PEbB$z*#U;zNH@;sMaom0DZ z7EIZN_nK1b?Q}YQ_T$G7^1H=V0|HSV(lq6R%EZLP#KhFo-8v?{;`8Uv&y-SctL%zh z(|@|?yqIK}=eeBCX0Mn->4@5IquUiO$eF4ZjM%o0Y7KB4=r6KmPujL?i=rS!4AlKL z7!gFkDW{=|3hkJ8dl$0E|+k6diqP|D5c=$<_6Br&fw+C zmn&I7ZIrb-jOn_=TnF1{_8T&P-#4Kb$1yAxi{37qItWG#fcd^p+81=&J?m@l^-M0z zI=Q{Q?X(VU#-ziXo4h^r9t_dfd)wy-A>jW0oOANwt@+viO%NW0*a*z_DB1mt;M1`LOU$TcC>w|&0ZDnS3c>F+j!n{Bgq>&EJN z-ra`p#8_odVd&aCBj&qx<=ykVzkJ{S1OO+V=Uq|AJLEA}po6OB@B2P1mrJK0l*Xvb zGx7SnvfjJgbG(Z!!2IqmpO0bfzkdDtM-T*`lv0oD;3+A_HU=FwNs?nJ<-gPEblF9} zZ2NATy>Lxg+w}J;`>m_2#ODM-&}&8HIv+3UvP1aF>h|A8h4ZGri=qH2CEVWLwjN)X z`6#8xp`VBFQ*M&ub>q<6yGSWvu~?AIAFEKua@P;NC+0hF%~953l6_Y>(uOw>ja4ra z+IIfC60<@?NSw1CCmK>l7DZ7OK#slYy2+gNSZ3Y5rr)Jabho<1pr-d>)jNV9fU~nR zxVgE3D2hOwoSeYVpFhF#JoxtQ8yp=StuO*!{F`1_6>MBL*s8#9)4=3V%(BfvuY1+NA0-)L}k`4gw1yN`7wB*FjHCX=7w{HPR?9Kcy6;XzJ9k@ zEdD+|KCYB`eVs$j82!BlXuw8MM8<=z1b~{ZKjnHe-z!F{+LN`f}w0000< KMNUMnLSTX-*Y`{S literal 0 HcmV?d00001 diff --git a/website/img/club.png b/website/img/club.png new file mode 100644 index 0000000000000000000000000000000000000000..a80ec284f35fb2276e02a465366da661050ce709 GIT binary patch literal 9521 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∨ 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∋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 gNO7=iGajR919g!h-oyoT2nsBI;UNH@~ literal 0 HcmV?d00001 diff --git a/app/static/img/dartsxx.jpg b/app/static/img/dartsxx.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1c212bb23089319d2f3b125ad996b23214c8f056 GIT binary patch literal 1129013 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

2hmin&YxNPE6(LrNwD+T3lCcG;W#)Ue(iAWYIG0 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